tiny-markdown-editor 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tiny-mde.js +20 -8
- package/dist/tiny-mde.min.js +1 -1
- package/dist/tiny-mde.tiny.js +1 -1
- package/lib/TinyMDE.js +20 -11
- package/package.json +10 -6
package/dist/tiny-mde.js
CHANGED
|
@@ -2166,7 +2166,7 @@
|
|
|
2166
2166
|
}
|
|
2167
2167
|
getSelection() {
|
|
2168
2168
|
let getAnchor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
2169
|
-
var _a;
|
|
2169
|
+
var _a, _b;
|
|
2170
2170
|
const selection = window.getSelection();
|
|
2171
2171
|
let startNode = getAnchor ? selection.anchorNode : selection.focusNode;
|
|
2172
2172
|
if (!startNode) return null;
|
|
@@ -2188,12 +2188,24 @@
|
|
|
2188
2188
|
node = node.parentElement;
|
|
2189
2189
|
}
|
|
2190
2190
|
let row = 0;
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2191
|
+
// If the node doesn't have a previous sibling, it must be the first line
|
|
2192
|
+
if (node.previousSibling) {
|
|
2193
|
+
const currentLineNumData = (_a = node.dataset) === null || _a === void 0 ? void 0 : _a.lineNum;
|
|
2194
|
+
const previousLineNumData = (_b = node.previousSibling.dataset) === null || _b === void 0 ? void 0 : _b.lineNum;
|
|
2195
|
+
if (currentLineNumData && previousLineNumData) {
|
|
2196
|
+
const currentLineNum = parseInt(currentLineNumData);
|
|
2197
|
+
const previousLineNum = parseInt(previousLineNumData);
|
|
2198
|
+
if (currentLineNum === previousLineNum + 1) {
|
|
2199
|
+
row = currentLineNum;
|
|
2200
|
+
} else {
|
|
2201
|
+
// If the current line is NOT the previous line + 1, then either
|
|
2202
|
+
// the current line got split in two or merged with the previous line
|
|
2203
|
+
// Either way, we need to recalculate the row number
|
|
2204
|
+
while (node.previousSibling) {
|
|
2205
|
+
row++;
|
|
2206
|
+
node = node.previousSibling;
|
|
2207
|
+
}
|
|
2208
|
+
}
|
|
2197
2209
|
}
|
|
2198
2210
|
}
|
|
2199
2211
|
return {
|
|
@@ -3201,4 +3213,4 @@
|
|
|
3201
3213
|
}));
|
|
3202
3214
|
//# sourceMappingURL=index.js.map
|
|
3203
3215
|
|
|
3204
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoa2V5c1trZXlzLmxlbmd0aCAtIDFdLm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtrZXlzW2tleXMubGVuZ3RoIC0gMV19YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTDtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT5cbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSlcbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVMaW5lVHlwZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmtMYWJlbHMoKTtcbiAgICB0aGlzLmFwcGx5TGluZVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmtMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCB0aGlzLmxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbF0gPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSB7XG4gICAgICAgIHRoaXMubGlua0xhYmVscy5wdXNoKFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xdW1xuICAgICAgICAgICAgbGluZUdyYW1tYXIuVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbi5sYWJlbFBsYWNlaG9sZGVyIVxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UocmVwbGFjZW1lbnQ6IHN0cmluZywgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZSgvKFxcJHsxLDJ9KShbMC05XSkvZywgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBjYXB0dXJlW3BhcnNlSW50KHAyKV1cbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lRGlydHlbbGluZU51bV0pIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlKFxuICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSxcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXVxuICAgICAgICApO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9XG4gICAgICAgICAgY29udGVudEhUTUwgPT09IFwiXCIgPyBcIjxiciAvPlwiIDogY29udGVudEhUTUw7XG4gICAgICB9XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSA9IGxpbmVOdW0udG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBsZXQgY29kZUJsb2NrVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY29kZUJsb2NrU2VxTGVuZ3RoID0gMDtcbiAgICBsZXQgaHRtbEJsb2NrOiBIVE1MQmxvY2tSdWxlIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgIGxldCBsaW5lQ2FwdHVyZTogUmVnRXhwRXhlY0FycmF5ID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgIGxldCBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuXG4gICAgICAvLyBDaGVjayBvbmdvaW5nIGNvZGUgYmxvY2tzXG4gICAgICBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlQmFja3RpY2tcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlVGlsZGVDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVUaWxkZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIEhUTUwgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIiAmJiBodG1sQmxvY2sgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGh0bWxCbG9ja1R5cGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9ja1R5cGUuc3RhcnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGh0bWxCbG9ja1R5cGUucGFyYUludGVycnVwdCB8fFxuICAgICAgICAgICAgICBsaW5lTnVtID09PSAwIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGh0bWxCbG9jayA9IGh0bWxCbG9ja1R5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1IVE1MQmxvY2tcIjtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1IVE1MQ29udGVudFwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblxuICAgICAgICBpZiAoaHRtbEJsb2NrLmVuZCkge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9jay5lbmQpKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGluZU51bSA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVOdW0gKyAxXS5tYXRjaChsaW5lR3JhbW1hci5UTUJsYW5rTGluZS5yZWdleHApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWxsIHJlZ2V4cHMgaWYgd2UgaGF2ZW4ndCBhcHBsaWVkIG9uZSBvZiB0aGUgY29kZSBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgIGZvciAobGV0IHR5cGUgaW4gbGluZUdyYW1tYXIpIHtcbiAgICAgICAgICBpZiAobGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwKSB7XG4gICAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgbGluZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hclt0eXBlXS5yZXBsYWNlbWVudDtcbiAgICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UndmUgb3BlbmVkIGEgY29kZSBibG9jaywgcmVtZW1iZXIgdGhhdFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIgfHwgbGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBjb2RlQmxvY2tUeXBlID0gbGluZVR5cGU7XG4gICAgICAgIGNvZGVCbG9ja1NlcUxlbmd0aCA9IGxpbmVDYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBMaW5rIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBpbmRlbnRlZCBjb2RlIGNhbid0IGludGVycnVwdCBhIHBhcmFncmFwaFxuICAgICAgaWYgKFxuICAgICAgICAobGluZVR5cGUgPT09IFwiVE1JbmRlbnRlZENvZGVcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpICYmXG4gICAgICAgIGxpbmVOdW0gPiAwICYmXG4gICAgICAgICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIilcbiAgICAgICkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IEgyIG1hcmtlcnMgdGhhdCBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBsaXN0IGl0ZW0gc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHN1Y2hcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTVVMLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1VTC5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IGhlYWRpbmdzIGFyZSBvbmx5IHZhbGlkIGlmIHByZWNlZGVkIGJ5IGEgcGFyYWdyYXBoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiIHx8IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBpZiAobGluZU51bSA9PT0gMCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gIT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNSFIucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUhSXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUhSLnJlcGxhY2VtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaGVhZGluZ0xpbmUgPSBsaW5lTnVtIC0gMTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nTGluZVR5cGUgPSBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgPyBcIlRNU2V0ZXh0SDFcIiA6IFwiVE1TZXRleHRIMlwiO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gIT09IGhlYWRpbmdMaW5lVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPSBoZWFkaW5nTGluZVR5cGU7XG4gICAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2hlYWRpbmdMaW5lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaGVhZGluZ0xpbmVdID0gXCIkJDBcIjtcbiAgICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2hlYWRpbmdMaW5lXSA9IFt0aGlzLmxpbmVzW2hlYWRpbmdMaW5lXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgaGVhZGluZ0xpbmUtLTtcbiAgICAgICAgICB9IHdoaWxlIChoZWFkaW5nTGluZSA+PSAwICYmIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9PT0gXCJUTVBhcmFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xpbmVOdW1dICE9PSBsaW5lVHlwZSkge1xuICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSA9IGxpbmVUeXBlO1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0gPSBsaW5lUmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXSA9IGxpbmVDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oZ2V0QW5jaG9yOiBib29sZWFuID0gZmFsc2UpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBsZXQgc3RhcnROb2RlID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JOb2RlIDogc2VsZWN0aW9uIS5mb2N1c05vZGU7XG4gICAgaWYgKCFzdGFydE5vZGUpIHJldHVybiBudWxsO1xuICAgIGxldCBvZmZzZXQgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbiEuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKHN0YXJ0Tm9kZSA9PT0gdGhpcy5lKSB7XG4gICAgICBpZiAob2Zmc2V0IDwgdGhpcy5saW5lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiBvZmZzZXQsXG4gICAgICAgICAgY29sOiAwLFxuICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBvZmZzZXQgLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbb2Zmc2V0IC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgY29sID0gdGhpcy5jb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIHdoaWxlIChub2RlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCE7XG4gICAgfVxuXG4gICAgbGV0IHJvdyA9IDA7XG4gICAgaWYgKFxuICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQgJiZcbiAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gJiZcbiAgICAgICghbm9kZS5wcmV2aW91c1NpYmxpbmcgfHxcbiAgICAgICAgKChub2RlLnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bSAhPT0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSkpXG4gICAgKSB7XG4gICAgICByb3cgPSBwYXJzZUludCgobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICByb3crKztcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcGFzdGUodGV4dDogc3RyaW5nLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGxldCBiZWdpbm5pbmc6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvY3VzID0ge1xuICAgICAgICByb3c6IHRoaXMubGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGFuY2hvciA9IGZvY3VzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbmNob3Iucm93IDwgZm9jdXMucm93IHx8XG4gICAgICAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPD0gZm9jdXMuY29sKVxuICAgICkge1xuICAgICAgYmVnaW5uaW5nID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJlZ2lubmluZyA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBsZXQgaW5zZXJ0ZWRMaW5lcyA9IHRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGxldCBsaW5lQmVmb3JlID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHIoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgbGV0IGxpbmVFbmQgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cihlbmQuY29sKTtcbiAgICBpbnNlcnRlZExpbmVzWzBdID0gbGluZUJlZm9yZS5jb25jYXQoaW5zZXJ0ZWRMaW5lc1swXSk7XG4gICAgbGV0IGVuZENvbFBvcyA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7XG4gICAgaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmNvbmNhdChsaW5lRW5kKTtcbiAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3csIDEgKyBlbmQucm93IC0gYmVnaW5uaW5nLnJvdywgaW5zZXJ0ZWRMaW5lcyk7XG4gICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIGluc2VydGVkTGluZXMubGVuZ3RoIC0gMTtcbiAgICBmb2N1cy5jb2wgPSBlbmRDb2xQb3M7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIHdyYXBTZWxlY3Rpb24ocHJlOiBzdHJpbmcsIHBvc3Q6IHN0cmluZywgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuO1xuICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gZm9jdXMuY29sIDogYW5jaG9yLmNvbDtcbiAgICBjb25zdCBlbmRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBzdGFydENvbCkuY29uY2F0KHByZSk7XG4gICAgY29uc3QgbWlkID0gZW5kQ29sID09PSBzdGFydENvbCA/IFwiXCIgOiB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbCk7XG4gICAgY29uc3QgcmlnaHQgPSBwb3N0LmNvbmNhdCh0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGVuZENvbCkpO1xuICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICBmb2N1cy5jb2wgPSBhbmNob3IuY29sICsgbWlkLmxlbmd0aDtcblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzLCBhbmNob3IpO1xuICB9XG5cbiAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIEV2ZW50VHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBsaXN0ZW5lcjogVCBleHRlbmRzICdjaGFuZ2UnID8gRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdzZWxlY3Rpb24nID8gRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdkcm9wJyA/IEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+IDogbmV2ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpjaGFuZ2V8aW5wdXQpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuY2hhbmdlLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86c2VsZWN0aW9ufHNlbGVjdGlvbmNoYW5nZSkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpkcm9wKSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmRyb3AucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50Pik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZXh0YXJlYSAmJiAhdGhpcy5saXN0ZW5lcnMuY2hhbmdlLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKTtcbiAgICBpZiAodGhpcy50ZXh0YXJlYSkgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuY2hhbmdlKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGxpbmVzRGlydHk6IFsuLi50aGlzLmxpbmVEaXJ0eV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICB0aGlzLnByb2Nlc3NOZXdQYXJhZ3JhcGgoZm9jdXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmUhLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiVE1CbGFua0xpbmVcIj48YnI+PC9kaXY+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZml4Tm9kZUhpZXJhcmNoeSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk7XG4gICAgfVxuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChfZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpcmVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgdGV4dCA9IChldmVudCBhcyBhbnkpLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgdGhpcy5wYXN0ZSh0ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmZpcmVEcm9wKGV2ZW50LmRhdGFUcmFuc2ZlciEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5saW5lU3R5bGVzKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzZWQgPSBcIlwiO1xuICAgIGxldCBzdGFjazogQXJyYXk8e2RlbGltaXRlcjogc3RyaW5nLCBkZWxpbVN0cmluZzogc3RyaW5nLCBjb3VudDogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZ30+ID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nO1xuXG4gICAgb3V0ZXI6IHdoaWxlIChzdHJpbmcpIHtcbiAgICAgIC8vIFByb2Nlc3Mgc2ltcGxlIHJ1bGVzIChub24tZGVsaW1pdGVyKVxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0pIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICAgICAgZm9yIChsZXQgcnVsZSBpbiB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpIHtcbiAgICAgICAgaWYgKHJ1bGUgIT09IFwiZXNjYXBlXCIgJiYgcnVsZSAhPT0gXCJjb2RlXCIgJiYgcnVsZSAhPT0gXCJhdXRvbGlua1wiICYmIHJ1bGUgIT09IFwiaHRtbFwiICYmIHJ1bGUgIT09IFwibGlua09wZW5cIiAmJiBydWxlICE9PSBcImltYWdlT3BlblwiICYmIHJ1bGUgIT09IFwibGlua0xhYmVsXCIgJiYgcnVsZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApO1xuICAgICAgbGV0IHBvdGVudGlhbEltYWdlID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKTtcbiAgICAgIGlmIChwb3RlbnRpYWxJbWFnZSB8fCBwb3RlbnRpYWxMaW5rKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCAhIXBvdGVudGlhbEltYWdlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke3Jlc3VsdC5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKHJlc3VsdC5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSByZXN1bHQuY2hhckNvdW50O1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlbSAvIHN0cm9uZyBkZWxpbWl0ZXJzXG4gICAgICBsZXQgY2FwID0gLyheXFwqKyl8KF5fKykvLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGRlbGltQ291bnQgPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWxpbVN0cmluZyA9IGNhcFswXTtcbiAgICAgICAgY29uc3QgY3VycmVudERlbGltaXRlciA9IGNhcFswXVswXTtcblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByZWNlZGluZyA9IG9mZnNldCA+IDAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgb2Zmc2V0KSA6IFwiIFwiO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmcgPSBvZmZzZXQgKyBjYXBbMF0ubGVuZ3RoIDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gc3RyaW5nIDogXCIgXCI7XG5cbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25Gb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKHB1bmN0dWF0aW9uTGVhZGluZyk7XG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2gocHVuY3R1YXRpb25UcmFpbGluZyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VGb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKC9eXFxzLyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VQcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaCgvXFxzJC8pO1xuXG4gICAgICAgIGxldCBjYW5PcGVuID0gIXdoaXRlc3BhY2VGb2xsb3dzICYmICghcHVuY3R1YXRpb25Gb2xsb3dzIHx8ICEhd2hpdGVzcGFjZVByZWNlZGVzIHx8ICEhcHVuY3R1YXRpb25QcmVjZWRlcyk7XG4gICAgICAgIGxldCBjYW5DbG9zZSA9ICF3aGl0ZXNwYWNlUHJlY2VkZXMgJiYgKCFwdW5jdHVhdGlvblByZWNlZGVzIHx8ICEhd2hpdGVzcGFjZUZvbGxvd3MgfHwgISFwdW5jdHVhdGlvbkZvbGxvd3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBcIl9cIiAmJiBjYW5PcGVuICYmIGNhbkNsb3NlKSB7XG4gICAgICAgICAgY2FuT3BlbiA9ICEhcHVuY3R1YXRpb25QcmVjZWRlcztcbiAgICAgICAgICBjYW5DbG9zZSA9ICEhcHVuY3R1YXRpb25Gb2xsb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkNsb3NlKSB7XG4gICAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGRlbGltQ291bnQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gY3VycmVudERlbGltaXRlcikge1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkZWxpbUNvdW50ID49IDIgJiYgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PHN0cm9uZyBjbGFzcz1cIlRNU3Ryb25nXCI+JHtwcm9jZXNzZWR9PC9zdHJvbmc+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMjtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48ZW0gY2xhc3M9XCJUTUVtXCI+JHtwcm9jZXNzZWR9PC9lbT48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDE7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50ICYmIGNhbk9wZW4pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogY3VycmVudERlbGltaXRlcixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBkZWxpbVN0cmluZyxcbiAgICAgICAgICAgIGNvdW50OiBkZWxpbUNvdW50LFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgICBkZWxpbUNvdW50ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7ZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGRlbGltQ291bnQpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBzdHJpa2V0aHJvdWdoIGRlbGltaXRlclxuICAgICAgY2FwID0gL15+fi8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICghY29uc3VtZWQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IFwiflwiKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj48ZGVsIGNsYXNzPVwiVE1TdHJpa2V0aHJvdWdoXCI+JHtwcm9jZXNzZWR9PC9kZWw+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj5gO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICBjb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uc3VtZWQpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCJ+XCIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogXCJ+flwiLFxuICAgICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzICdkZWZhdWx0JyBydWxlXG4gICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcCFcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICBsZXQgY29sOiBudW1iZXI7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIGNvbCA9IG9mZnNldDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICBub2RlID0gc3RhcnROb2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBjb2wgPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbCA9IDA7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbCArPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTm9kZUFuZE9mZnNldChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIGJpbmRSaWdodDogYm9vbGVhbiA9IGZhbHNlKToge25vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyfSB7XG4gICAgaWYgKHJvdyA+PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJvdyA9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sID4gdGhpcy5saW5lc1tyb3ddLmxlbmd0aCkge1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubGluZUVsZW1lbnRzW3Jvd10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBsZXQgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBydiA9IHtcbiAgICAgIG5vZGU6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA/IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA6IHBhcmVudE5vZGUsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfTtcblxuICAgIHdoaWxlIChub2RlICE9PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGlmIChub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA+PSBjb2wpIHtcbiAgICAgICAgICBpZiAoYmluZFJpZ2h0ICYmIG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID09PSBjb2wpIHtcbiAgICAgICAgICAgIHJ2ID0geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wgLT0gbm9kZSEubm9kZVZhbHVlIS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIS5maXJzdENoaWxkO1xuICAgICAgfSBlbHNlIGlmIChub2RlIS5uZXh0U2libGluZykge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlIS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBub2RlID0gbm9kZSEucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnY7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRGlydHlGbGFnKCk6IHZvaWQge1xuICAgIHRoaXMubGluZURpcnR5ID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZURpcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmxpbmVEaXJ0eVtpXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lRGVsdGEgPSB0aGlzLmUhLmNoaWxkRWxlbWVudENvdW50IC0gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgaWYgKGxpbmVEZWx0YSkge1xuICAgICAgbGV0IGZpcnN0Q2hhbmdlZExpbmUgPSAwO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdICYmXG4gICAgICAgIHRoaXMubGluZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdENoYW5nZWRMaW5lID0gLTE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGxhc3RDaGFuZ2VkTGluZS0tO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGluZXNUb0RlbGV0ZSA9IHRoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lICsgMSAtIGZpcnN0Q2hhbmdlZExpbmU7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IC1saW5lRGVsdGEpIGxpbmVzVG9EZWxldGUgPSAtbGluZURlbHRhO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAwKSBsaW5lc1RvRGVsZXRlID0gMDtcblxuICAgICAgbGV0IGxpbmVzVG9BZGQgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXNUb0RlbGV0ZSArIGxpbmVEZWx0YTsgbCsrKSB7XG4gICAgICAgIGxpbmVzVG9BZGQucHVzaCgodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZSArIGxdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCB8fCBcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZmlyc3RDaGFuZ2VkTGluZSwgbGluZXNUb0RlbGV0ZSwgbGluZXNUb0FkZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAgIGxldCBlID0gdGhpcy5saW5lRWxlbWVudHNbbGluZV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdCA9IGUudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZV0gIT09IGN0IHx8IHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSBjdDtcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9IGUuY2xhc3NOYW1lO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05ld1BhcmFncmFwaChzZWw6IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcblxuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG5cbiAgICBsZXQgY29udGludWFibGVUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjaGVja0xpbmUgPSBzZWwuY29sID4gMCA/IHNlbC5yb3cgOiBzZWwucm93IC0gMTtcbiAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2NoZWNrTGluZV0pIHtcbiAgICAgIGNhc2UgXCJUTVVMXCI6XG4gICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJUTU9MXCI6XG4gICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1PTFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJUTUluZGVudGVkQ29kZVwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNSW5kZW50ZWRDb2RlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBsaW5lcyA9IHRoaXMubGluZXNbc2VsLnJvd10ucmVwbGFjZSgvXFxuXFxuJC8sIFwiXFxuXCIpLnNwbGl0KC8oPzpcXHJcXG58XFxufFxccikvKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhzZWwucm93LCAxLCBsaW5lcywgdHJ1ZSk7XG4gICAgICBzZWwucm93Kys7XG4gICAgICBzZWwuY29sID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW2NvbnRpbnVhYmxlVHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tzZWwucm93IC0gMV0pO1xuICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgaWYgKGNhcHR1cmVbMl0pIHtcbiAgICAgICAgICBpZiAoY29udGludWFibGVUeXBlID09PSBcIlRNT0xcIikge1xuICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saW5lc1tzZWwucm93XSA9IGAke2NhcHR1cmVbMV19JHt0aGlzLmxpbmVzW3NlbC5yb3ddfWA7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbc2VsLnJvd10gPSB0cnVlO1xuICAgICAgICAgIHNlbC5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW3NlbC5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbc2VsLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaWNlTGluZXMoXG4gICAgc3RhcnRMaW5lOiBudW1iZXIsXG4gICAgbGluZXNUb0RlbGV0ZTogbnVtYmVyID0gMCxcbiAgICBsaW5lc1RvSW5zZXJ0OiBzdHJpbmdbXSA9IFtdLFxuICAgIGFkanVzdExpbmVFbGVtZW50czogYm9vbGVhbiA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvRGVsZXRlOyBpKyspIHtcbiAgICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGluc2VydGVkQmxhbmsgPSBbXTtcbiAgICBsZXQgaW5zZXJ0ZWREaXJ0eSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRlZEJsYW5rLnB1c2goXCJcIik7XG4gICAgICBpbnNlcnRlZERpcnR5LnB1c2godHJ1ZSk7XG4gICAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSlcbiAgICAgICAgICB0aGlzLmUhLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICAgIGVsc2UgdGhpcy5lIS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmxpbmVzVG9JbnNlcnQpO1xuICAgIHRoaXMubGluZVR5cGVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkQmxhbmspO1xuICAgIHRoaXMubGluZURpcnR5LnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkRGlydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhOb2RlSGllcmFyY2h5KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuZSEuY2hpbGROb2Rlcyk7XG5cbiAgICBjb25zdCByZXBsYWNlQ2hpbGQgPSAoY2hpbGQ6IE5vZGUsIC4uLm5ld0NoaWxkcmVuOiBOb2RlW10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudEVsZW1lbnQhO1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKChuZXdDaGlsZCkgPT5cbiAgICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZykgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Q2hpbGQpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IChjaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gXCJESVZcIikge1xuICAgICAgICBjb25zdCBkaXZXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcmVwbGFjZUNoaWxkKGNoaWxkLCBkaXZXcmFwcGVyKTtcbiAgICAgICAgZGl2V3JhcHBlci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncmFuZENoaWxkcmVuID0gQXJyYXkuZnJvbShjaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyYW5kQ2hpbGRyZW4uc29tZShcbiAgICAgICAgICAgIChncmFuZENoaWxkKSA9PlxuICAgICAgICAgICAgICBncmFuZENoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoZ3JhbmRDaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJESVZcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VDaGlsZChjaGlsZCwgLi4uZ3JhbmRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaW5rT3JJbWFnZShvcmlnaW5hbFN0cmluZzogc3RyaW5nLCBpc0ltYWdlOiBib29sZWFuKToge291dHB1dDogc3RyaW5nLCBjaGFyQ291bnQ6IG51bWJlcn0gfCBmYWxzZSB7XG4gICAgLy8gU2tpcCB0aGUgb3BlbmluZyBicmFja2V0XG4gICAgbGV0IHRleHRPZmZzZXQgPSBpc0ltYWdlID8gMiA6IDE7XG4gICAgbGV0IG9wZW5lciA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCB0ZXh0T2Zmc2V0KTtcbiAgICBsZXQgdHlwZSA9IGlzSW1hZ2UgPyBcIlRNSW1hZ2VcIiA6IFwiVE1MaW5rXCI7XG4gICAgbGV0IGN1cnJlbnRPZmZzZXQgPSB0ZXh0T2Zmc2V0O1xuXG4gICAgbGV0IGJyYWNrZXRMZXZlbCA9IDE7XG4gICAgbGV0IGxpbmtUZXh0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rUmVmOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rTGFiZWw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGxpbmtEZXRhaWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGV4dE91dGVyOiB3aGlsZSAoXG4gICAgICBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmXG4gICAgICBsaW5rVGV4dCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgIC8vIENhcHR1cmUgYW55IGVzY2FwZXMgYW5kIGNvZGUgYmxvY2tzIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbWFnZVxuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgaWYgKCFpc0ltYWdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGNsb3NpbmcgYnJhY2tldFxuICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcXS8pKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbC0tO1xuICAgICAgICBpZiAoYnJhY2tldExldmVsID09PSAwKSB7XG4gICAgICAgICAgbGlua1RleHQgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIodGV4dE9mZnNldCwgY3VycmVudE9mZnNldCAtIHRleHRPZmZzZXQpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBtYXRjaGVzLCBwcm9jZWVkIHRvIG5leHQgY2hhclxuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIERpZCB3ZSBmaW5kIGEgbGluayB0ZXh0P1xuICAgIGlmIChsaW5rVGV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIHdoYXQgdHlwZSBvZiBsaW5rIHRoaXMgaXNcbiAgICBsZXQgbmV4dENoYXIgPSBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQsIDEpIDogXCJcIjtcblxuICAgIC8vIFJFRkVSRU5DRSBMSU5LU1xuICAgIGlmIChuZXh0Q2hhciA9PT0gXCJbXCIpIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG4gICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGxpbmtMYWJlbC5wdXNoKGNhcFsxXSwgY2FwWzJdLCBjYXBbM10pO1xuICAgICAgICBpZiAoY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciAhPT0gXCIoXCIpIHtcbiAgICAgIC8vIFNob3J0Y3V0IHJlZiBsaW5rXG4gICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJTkxJTkUgTElOS1NcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgIGxldCBwYXJlbnRoZXNpc0xldmVsID0gMTtcblxuICAgICAgaW5saW5lT3V0ZXI6IHdoaWxlIChjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmIHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyB3aGl0ZXNwYWNlXG4gICAgICAgIGxldCBjYXAgPSAvXlxccysvLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1swXS5tYXRjaCgvPC8pKSB7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s2XSA9IGxpbmtEZXRhaWxzWzZdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBiYWNrc2xhc2ggZXNjYXBlc1xuICAgICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZXNjYXBlLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDwgMiAmJiBzdHJpbmcubWF0Y2goL148LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdID0gbGlua0RldGFpbHNbMF0uY29uY2F0KFwiPFwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAoKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDIpICYmIHN0cmluZy5tYXRjaCgvXj4vKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIj5cIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBub24tcGFyZW50aGVzaXMgZGVsaW1pdGVyIGZvciB0aXRsZVxuICAgICAgICBjYXAgPSAvXltcIiddLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA0KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSAmJiBsaW5rRGV0YWlsc1s0XSA9PT0gY2FwWzBdKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCgvKSkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbCsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwpLykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCAyKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgICAgZWxzZSBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IG9sZCBjaGFyYWN0ZXJcbiAgICAgICAgY2FwID0gL14uLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wXCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobGlua1JlZiAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlZmVyZW5jZSBsaW5rOyBjaGVjayB0aGF0IGxpbmtSZWYgaXMgdmFsaWRcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5saW5rTGFiZWxzKSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gbGlua1JlZikge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGxhYmVsQ2xhc3MgPSB2YWxpZCA/IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfVmFsaWRcIiA6IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfSW52YWxpZFwiO1xuICAgICAgbGV0IG91dHB1dCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX0gJHtcbiAgICAgICAgbGlua0xhYmVsLmxlbmd0aCA8IDMgfHwgIWxpbmtMYWJlbFsxXSA/IGxhYmVsQ2xhc3MgOiBcIlwiXG4gICAgICB9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMobGlua1RleHQpfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl08L3NwYW4+YDtcblxuICAgICAgaWYgKGxpbmtMYWJlbC5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIiR7bGFiZWxDbGFzc31cIj4ke2xpbmtMYWJlbFsxXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFsyXX08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbmxpbmUgbGlua1xuICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgbGlua1RleHRcbiAgICAgICAgKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dKCR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1EZXN0aW5hdGlvblwiPiR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMV1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbMl19JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1szXVxuICAgICAgICB9JHtsaW5rRGV0YWlsc1s0XX08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9VGl0bGVcIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzVdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzZdfSk8L3NwYW4+YCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb21tb25BbmNlc3Rvcihub2RlMTogTm9kZSB8IG51bGwsIG5vZGUyOiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG5vZGUxID09PSBub2RlMikgcmV0dXJuIG5vZGUxO1xuICAgIGNvbnN0IGFuY2VzdHJ5ID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGxldCBhbmNlc3RyeSA9IFtdO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgYW5jZXN0cnkudW5zaGlmdChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jZXN0cnk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdHJ5MSA9IGFuY2VzdHJ5KG5vZGUxKTtcbiAgICBjb25zdCBhbmNlc3RyeTIgPSBhbmNlc3RyeShub2RlMik7XG5cbiAgICBpZiAoYW5jZXN0cnkxWzBdICE9PSBhbmNlc3RyeTJbMF0pIHJldHVybiBudWxsO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGFuY2VzdHJ5MVtpXSA9PT0gYW5jZXN0cnkyW2ldOyBpKyspO1xuICAgIHJldHVybiBhbmNlc3RyeTFbaSAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsLCBjbGFzc05hbWU6IHN0cmluZyk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBzZWwuZm9jdXNOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgfVxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiYgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhjbGFzc05hbWUpKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21tYW5kU3RhdGUoZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB7XG4gICAgbGV0IGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG5cbiAgICBsZXQgc3RhcnQ6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmIChhbmNob3Iucm93IDwgZm9jdXMucm93IHx8IChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8IGZvY3VzLmNvbCkpIHtcbiAgICAgIHN0YXJ0ID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICAgIGVuZC5jb2wgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cyB8fCBmb2N1cy5yb3cgIT09IGFuY2hvciEucm93IHx8ICF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9XG4gICAgICAgICAgICAhIXRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMsIGFuY2hvciwgY29tbWFuZHNbY21kXS5jbGFzc05hbWUpIHx8XG4gICAgICAgICAgICAoZm9jdXMuY29sID09PSBhbmNob3IhLmNvbCAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucG9zdFBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cykge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgc3RhdGU6IGJvb2xlYW4gfCBudWxsID0gdGhpcy5saW5lVHlwZXNbc3RhcnQucm93XSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWU7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcsIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgaWYgKGFuY2hvci5yb3cgIT09IGZvY3VzIS5yb3cpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHJldHVybjtcbiAgICAgIGxldCBtYXJrdXBOb2RlID0gdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cyEsIGFuY2hvciwgY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgICAgaWYgKG1hcmt1cE5vZGUpIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihtYXJrdXBOb2RlLCAwKSE7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1hcmt1cE5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIHN0YXJ0Q29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCBtaWQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihzdGFydENvbCwgbGVuKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCArIGxlbilcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCArIGxlbjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb2N1cyEuY29sID09PSBhbmNob3IuY29sICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoMCwgZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29sLCBlbmRDb2wgfSA9XG4gICAgICAgICAgZm9jdXMhLmNvbCA8IGFuY2hvci5jb2xcbiAgICAgICAgICAgID8geyBzdGFydENvbDogZm9jdXMhLmNvbCwgZW5kQ29sOiBhbmNob3IuY29sIH1cbiAgICAgICAgICAgIDogeyBzdGFydENvbDogYW5jaG9yLmNvbCwgZW5kQ29sOiBmb2N1cyEuY29sIH07XG5cbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKVxuICAgICAgICAgIC5tYXRjaCgvXig/PGxlYWRpbmc+XFxzKikuKlxcUyg/PHRyYWlsaW5nPlxccyopJC8pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBzdGFydENvbCArPSBtYXRjaC5ncm91cHMhLmxlYWRpbmcubGVuZ3RoO1xuICAgICAgICAgIGVuZENvbCAtPSBtYXRjaC5ncm91cHMhLnRyYWlsaW5nLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvY3VzIS5jb2wgPSBzdGFydENvbDtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGVuZENvbDtcblxuICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oY29tbWFuZHNbY29tbWFuZF0uc2V0LnByZSwgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBvc3QsIGZvY3VzLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWZvY3VzKSByZXR1cm47XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICBsZXQgc3RhcnQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBmb2N1cyEgOiBhbmNob3IhO1xuICAgICAgbGV0IGVuZCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGFuY2hvciEgOiBmb2N1cyE7XG4gICAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICAgIGVuZC5yb3ctLTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgaWYgKHN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucmVwbGFjZW1lbnQucmVwbGFjZShcIiQjXCIsIChsaW5lIC0gc3RhcnQucm93ICsgMSkudG9TdHJpbmcoKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnJlcGxhY2VtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgICApO1xuICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24gJiYgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGNvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKGZvY3VzLCBhbmNob3IpO1xuICAgICAgaWYgKHRoaXMubGFzdENvbW1hbmRTdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubGFzdENvbW1hbmRTdGF0ZSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24pIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGZvY3VzOiBmb2N1cyEsXG4gICAgICAgICAgYW5jaG9yOiBhbmNob3IhLFxuICAgICAgICAgIGNvbW1hbmRTdGF0ZTogdGhpcy5sYXN0Q29tbWFuZFN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yOyJdLCJuYW1lcyI6WyJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJmb2N1cyIsImFuY2hvciIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJtYXRjaCIsImtleSIsInRvTG93ZXJDYXNlIiwiY29uY2F0Iiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsIm91dGVyIiwibW9kaWZpZXIiLCJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJyZXBsYWNlbWVudHMiLCJBU0NJSVB1bmN0dWF0aW9uIiwiTm90VHJpZ2dlckNoYXIiLCJTY2hlbWUiLCJFbWFpbCIsIkhUTUxPcGVuVGFnIiwiSFRNTENsb3NlVGFnIiwiSFRNTFRhZ05hbWUiLCJIVE1MQ29tbWVudCIsIkhUTUxQSSIsIkhUTUxEZWNsYXJhdGlvbiIsIkhUTUxDREFUQSIsIkhUTUxBdHRyaWJ1dGUiLCJIVE1MQXR0VmFsdWUiLCJLbm93blRhZyIsInB1bmN0dWF0aW9uTGVhZGluZyIsIlJlZ0V4cCIsInB1bmN0dWF0aW9uVHJhaWxpbmciLCJsaW5lR3JhbW1hciIsIlRNSDEiLCJyZWdleHAiLCJyZXBsYWNlbWVudCIsIlRNSDIiLCJUTUgzIiwiVE1INCIsIlRNSDUiLCJUTUg2IiwiVE1CbG9ja3F1b3RlIiwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW4iLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwicnVsZU5hbWUiLCJlbnRyaWVzIiwicHJvY2Vzc2VkUnVsZSIsInJlZ2V4cFNvdXJjZSIsImh0bWxlc2NhcGUiLCJ0eXBlIiwic2V0IiwicHJlIiwicG9zdCIsInVuc2V0IiwicHJlUGF0dGVybiIsInBvc3RQYXR0ZXJuIiwicGF0dGVybiIsImgzIiwiaDQiLCJoNSIsImg2IiwiRWRpdG9yIiwidGV4dGFyZWEiLCJsaW5lcyIsImxpbmVFbGVtZW50cyIsImxpbmVUeXBlcyIsImxpbmVDYXB0dXJlcyIsImxpbmVSZXBsYWNlbWVudHMiLCJsaW5rTGFiZWxzIiwibGluZURpcnR5IiwibGFzdENvbW1hbmRTdGF0ZSIsImN1c3RvbUlubGluZUdyYW1tYXIiLCJtZXJnZWRJbmxpbmVHcmFtbWFyIiwibGlzdGVuZXJzIiwiY2hhbmdlIiwic2VsZWN0aW9uIiwiZHJvcCIsInVuZG9TdGFjayIsInJlZG9TdGFjayIsImlzUmVzdG9yaW5nSGlzdG9yeSIsIm1heEhpc3RvcnkiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3JlYXRlRWRpdG9yRWxlbWVudCIsInNldENvbnRlbnQiLCJjb250ZW50IiwidmFsdWUiLCJoYW5kbGVVbmRvUmVkb0tleSIsInB1c2hIaXN0b3J5IiwicHVzaEN1cnJlbnRTdGF0ZSIsImdldENvbnRlbnQiLCJnZXRTZWxlY3Rpb24iLCJzaGlmdCIsImN1cnJlbnQiLCJwb3AiLCJwcmV2Iiwic2V0U2VsZWN0aW9uIiwibmV4dCIsImlzTWFjIiwiY3RybCIsIm1ldGFLZXkiLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50RWRpdGFibGUiLCJ3aGl0ZVNwYWNlIiwid2Via2l0VXNlck1vZGlmeSIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiaGFuZGxlSW5wdXRFdmVudCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50IiwiaGFuZGxlUGFzdGUiLCJoYW5kbGVEcm9wIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImxpbmVOdW0iLCJsZSIsIkFycmF5IiwidXBkYXRlRm9ybWF0dGluZyIsImZpcmVDaGFuZ2UiLCJ1cGRhdGVMaW5lVHlwZXMiLCJ1cGRhdGVMaW5rTGFiZWxzIiwiYXBwbHlMaW5lVHlwZXMiLCJsIiwiY2FwdHVyZSIsInN0ciIsInAxIiwicDIiLCJwYXJzZUludCIsInByb2Nlc3NJbmxpbmVTdHlsZXMiLCJjb250ZW50SFRNTCIsInJlbW92ZUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJ0b1N0cmluZyIsImNvZGVCbG9ja1R5cGUiLCJjb2RlQmxvY2tTZXFMZW5ndGgiLCJodG1sQmxvY2siLCJsaW5lVHlwZSIsImxpbmVDYXB0dXJlIiwibGluZVJlcGxhY2VtZW50IiwiZXhlYyIsImdyb3VwcyIsImh0bWxCbG9ja1R5cGUiLCJoZWFkaW5nTGluZSIsImhlYWRpbmdMaW5lVHlwZSIsImdldEFuY2hvciIsIndpbmRvdyIsInN0YXJ0Tm9kZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJvZmZzZXQiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsInJvdyIsImNvbCIsImNvbXB1dGVDb2x1bW4iLCJub2RlIiwicHJldmlvdXNTaWJsaW5nIiwiX2EiLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJjbGVhckRpcnR5RmxhZyIsInByb2Nlc3NOZXdQYXJhZ3JhcGgiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicmVzdWx0IiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic2VsIiwiY29udGludWFibGVUeXBlIiwiY2hlY2tMaW5lIiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLE1BQU1BLEdBQUcsR0FBMkI7SUFDbENDLEVBQUFBLFVBQVUsRUFBRSxDQUEyUix5UkFBQSxDQUFBO0lBQ3ZTQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMFksd1lBQUEsQ0FBQTtJQUNoWkMsRUFDQUMsSUFBSSxFQUFFLENBQStVLDZVQUFBLENBQUE7SUFDclZDLEVBQUFBLEVBQUUsRUFBRSxDQUFnSyw4SkFBQSxDQUFBO0lBQ3BLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBa0ssZ0tBQUEsQ0FBQTtJQUN0S0MsRUFBQUEsRUFBRSxFQUFFLENBQWlJLCtIQUFBLENBQUE7SUFDcklDLEVBQUFBLEtBQUssRUFBRSxDQUErSCw2SEFBQSxDQUFBO0lBQ3RJQyxFQUFBQSxNQUFNLEVBQUUsQ0FBaUgsK0dBQUEsQ0FBQTtJQUN6SEMsRUFBQUEsSUFBSSxFQUFFLENBQTJ1Qyx5dUNBQUEsQ0FBQTtJQUNqdkNDLEVBQUFBLEVBQUUsRUFBRSxDQUFxdEIsbXRCQUFBLENBQUE7SUFDenRCQyxFQUFBQSxJQUFJLEVBQUUsQ0FBc3NCLG9zQkFBQSxDQUFBO0lBQzVzQkMsRUFBQUEsYUFBYSxFQUFFLENBQTRYLDBYQUFBLENBQUE7SUFDM1lDLEVBQUFBLEVBQUUsRUFBRSxDQUE2USwyUUFBQSxDQUFBO0lBQ2pSQyxFQUFBQSxJQUFJLEVBQUUsQ0FBQTtBQUNQO0tBQ0E7O0lDZEQsTUFBTUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDQyxJQUFJLENBQzlDLE9BQU9DLFNBQVMsS0FBSyxXQUFXLEdBQUdBLFNBQVMsQ0FBQ0MsUUFBUSxHQUFHLEVBQUUsQ0FDM0Q7SUFnQ0QsTUFBTUMsZUFBZSxHQUFzQztJQUN6RGxCLEVBQUFBLElBQUksRUFBRTtJQUNKbUIsSUFBQUEsSUFBSSxFQUFFLE1BQU07SUFDWkMsSUFBQUEsTUFBTSxFQUFFLE1BQU07UUFDZEMsU0FBUyxFQUFFdkIsR0FBRyxDQUFDRSxJQUFJO0lBQ25Cc0IsSUFBQUEsS0FBSyxFQUFFLE1BQU07SUFDYkMsSUFBQUEsTUFBTSxFQUFFO09BQ1Q7SUFDRGhCLEVBQUFBLE1BQU0sRUFBRTtJQUNOWSxJQUFBQSxJQUFJLEVBQUUsUUFBUTtJQUNkQyxJQUFBQSxNQUFNLEVBQUUsUUFBUTtRQUNoQkMsU0FBUyxFQUFFdkIsR0FBRyxDQUFDUyxNQUFNO0lBQ3JCZSxJQUFBQSxLQUFLLEVBQUUsUUFBUTtJQUNmQyxJQUFBQSxNQUFNLEVBQUU7T0FDVDtJQUNEWixFQUFBQSxhQUFhLEVBQUU7SUFDYlEsSUFBQUEsSUFBSSxFQUFFLGVBQWU7SUFDckJDLElBQUFBLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCQyxTQUFTLEVBQUV2QixHQUFHLENBQUNhLGFBQWE7SUFDNUJXLElBQUFBLEtBQUssRUFBRSxlQUFlO0lBQ3RCQyxJQUFBQSxNQUFNLEVBQUU7T0FDVDtJQUNEckIsRUFBQUEsSUFBSSxFQUFFO0lBQ0ppQixJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaQyxJQUFBQSxNQUFNLEVBQUUsTUFBTTtRQUNkQyxTQUFTLEVBQUV2QixHQUFHLENBQUNJLElBQUk7SUFDbkJvQixJQUFBQSxLQUFLLEVBQUU7T0FDUjtJQUNEbkIsRUFBQUEsRUFBRSxFQUFFO0lBQ0ZnQixJQUFBQSxJQUFJLEVBQUUsSUFBSTtJQUNWQyxJQUFBQSxNQUFNLEVBQUUsSUFBSTtRQUNaQyxTQUFTLEVBQUV2QixHQUFHLENBQUNLLEVBQUU7SUFDakJtQixJQUFBQSxLQUFLLEVBQUUsaUJBQWlCO0lBQ3hCQyxJQUFBQSxNQUFNLEVBQUU7T0FDVDtJQUNEbkIsRUFBQUEsRUFBRSxFQUFFO0lBQ0ZlLElBQUFBLElBQUksRUFBRSxJQUFJO0lBQ1ZDLElBQUFBLE1BQU0sRUFBRSxJQUFJO1FBQ1pDLFNBQVMsRUFBRXZCLEdBQUcsQ0FBQ00sRUFBRTtJQUNqQmtCLElBQUFBLEtBQUssRUFBRSxpQkFBaUI7SUFDeEJDLElBQUFBLE1BQU0sRUFBRTtPQUNUO0lBQ0RYLEVBQUFBLEVBQUUsRUFBRTtJQUNGTyxJQUFBQSxJQUFJLEVBQUUsSUFBSTtJQUNWQyxJQUFBQSxNQUFNLEVBQUUsSUFBSTtRQUNaQyxTQUFTLEVBQUV2QixHQUFHLENBQUNjLEVBQUU7SUFDakJVLElBQUFBLEtBQUssRUFBRTtPQUNSO0lBQ0RiLEVBQUFBLEVBQUUsRUFBRTtJQUNGVSxJQUFBQSxJQUFJLEVBQUUsSUFBSTtJQUNWQyxJQUFBQSxNQUFNLEVBQUUsSUFBSTtRQUNaQyxTQUFTLEVBQUV2QixHQUFHLENBQUNXLEVBQUU7SUFDakJhLElBQUFBLEtBQUssRUFBRTtPQUNSO0lBQ0R2QixFQUFBQSxVQUFVLEVBQUU7SUFDVm9CLElBQUFBLElBQUksRUFBRSxZQUFZO0lBQ2xCQyxJQUFBQSxNQUFNLEVBQUUsWUFBWTtRQUNwQkMsU0FBUyxFQUFFdkIsR0FBRyxDQUFDQyxVQUFVO0lBQ3pCdUIsSUFBQUEsS0FBSyxFQUFFLE9BQU87SUFDZEMsSUFBQUEsTUFBTSxFQUFFO09BQ1Q7SUFDREMsRUFBQUEsVUFBVSxFQUFFO0lBQ1ZMLElBQUFBLElBQUksRUFBRSxZQUFZO1FBQ2xCQyxNQUFNLEVBQUdLLE1BQWMsSUFBSTtJQUN6QixNQUFBLElBQUtBLE1BQWMsQ0FBQ0MseUJBQXlCLEVBQUUsRUFBRUQsTUFBTSxDQUFDRSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztTQUNsRjtJQUNEQyxJQUFBQSxPQUFPLEVBQUVBLENBQUNILE1BQWMsRUFBRUksS0FBZ0IsRUFBRUMsTUFBaUIsS0FDMURMLE1BQWMsQ0FBQ0MseUJBQXlCLENBQUNHLEtBQUssRUFBRUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUk7UUFDekVULFNBQVMsRUFBRXZCLEdBQUcsQ0FBQ1UsSUFBSTtJQUNuQmMsSUFBQUEsS0FBSyxFQUFFLGFBQWE7SUFDcEJDLElBQUFBLE1BQU0sRUFBRTtPQUNUO0lBQ0RRLEVBQUFBLFdBQVcsRUFBRTtJQUNYWixJQUFBQSxJQUFJLEVBQUUsYUFBYTtRQUNuQkMsTUFBTSxFQUFHSyxNQUFjLElBQUk7SUFDekIsTUFBQSxJQUFLQSxNQUFjLENBQUNDLHlCQUF5QixFQUFFLEVBQUVELE1BQU0sQ0FBQ0UsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7U0FDbkY7SUFDREMsSUFBQUEsT0FBTyxFQUFFQSxDQUFDSCxNQUFjLEVBQUVJLEtBQWdCLEVBQUVDLE1BQWlCLEtBQzFETCxNQUFjLENBQUNDLHlCQUF5QixDQUFDRyxLQUFLLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJO1FBQ3pFVCxTQUFTLEVBQUV2QixHQUFHLENBQUNRLEtBQUs7SUFDcEJnQixJQUFBQSxLQUFLLEVBQUUsY0FBYztJQUNyQkMsSUFBQUEsTUFBTSxFQUFFO09BQ1Q7SUFDRGxCLEVBQUFBLEVBQUUsRUFBRTtJQUNGYyxJQUFBQSxJQUFJLEVBQUUsSUFBSTtRQUNWQyxNQUFNLEVBQUdLLE1BQWMsSUFBS0EsTUFBTSxDQUFDTyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ25ESixPQUFPLEVBQUVBLE1BQU0sS0FBSztRQUNwQlAsU0FBUyxFQUFFdkIsR0FBRyxDQUFDTyxFQUFFO0lBQ2pCaUIsSUFBQUEsS0FBSyxFQUFFLHdCQUF3QjtJQUMvQkMsSUFBQUEsTUFBTSxFQUFFO09BQ1Q7SUFDRFYsRUFBQUEsSUFBSSxFQUFFO0lBQ0pNLElBQUFBLElBQUksRUFBRSxNQUFNO0lBQ1pDLElBQUFBLE1BQU0sRUFBR0ssTUFBYyxJQUFLQSxNQUFNLENBQUNaLElBQUksRUFBRTtRQUN6Q2UsT0FBTyxFQUFHSCxNQUFjLElBQU1BLE1BQU0sQ0FBQ1EsT0FBTyxHQUFHLEtBQUssR0FBRyxJQUFLO1FBQzVEWixTQUFTLEVBQUV2QixHQUFHLENBQUNlLElBQUk7SUFDbkJTLElBQUFBLEtBQUssRUFBRTtPQUNSO0lBQ0RaLEVBQUFBLElBQUksRUFBRTtJQUNKUyxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaQyxJQUFBQSxNQUFNLEVBQUdLLE1BQWMsSUFBS0EsTUFBTSxDQUFDZixJQUFJLEVBQUU7UUFDekNrQixPQUFPLEVBQUdILE1BQWMsSUFBTUEsTUFBTSxDQUFDUyxPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUs7UUFDNURiLFNBQVMsRUFBRXZCLEdBQUcsQ0FBQ1ksSUFBSTtJQUNuQlksSUFBQUEsS0FBSyxFQUFFO0lBQ1I7S0FDRjtVQUVZYSxVQUFVLENBQUE7TUFRckJDLFdBQUFBLENBQVlDLEtBQXNCLEVBQUE7UUFQM0IsSUFBQyxDQUFBQyxDQUFBLEdBQTBCLElBQUk7UUFDL0IsSUFBTSxDQUFBYixNQUFBLEdBQWtCLElBQUk7SUFDNUIsSUFBQSxJQUFRLENBQUFjLFFBQUEsR0FBc0MsRUFBRTtJQUNoRCxJQUFBLElBQU8sQ0FBQUMsT0FBQSxHQUFtQyxFQUFFO0lBQzVDLElBQUEsSUFBSyxDQUFBQyxLQUFBLEdBQW1DLEVBQUU7UUFDekMsSUFBTyxDQUFBQyxPQUFBLEdBQWEsRUFBRTtRQUc1QixJQUFJLENBQUNKLENBQUMsR0FBRyxJQUFJO1FBQ2IsSUFBSSxDQUFDYixNQUFNLEdBQUcsSUFBSTtJQUNsQixJQUFBLElBQUksQ0FBQ2MsUUFBUSxHQUFHLEVBQUU7SUFDbEIsSUFBQSxJQUFJLENBQUNDLE9BQU8sR0FBRyxFQUFFO0lBQ2pCLElBQUEsSUFBSSxDQUFDQyxLQUFLLEdBQUcsRUFBRTtRQUNmLElBQUksQ0FBQ0MsT0FBTyxHQUFHLEVBQUU7UUFFakIsSUFBSUMsT0FBTyxHQUF1QixJQUFJO0lBQ3RDLElBQUEsSUFBSSxPQUFPTixLQUFLLENBQUNNLE9BQU8sS0FBSyxRQUFRLEVBQUU7VUFDckNBLE9BQU8sR0FBR0MsUUFBUSxDQUFDQyxjQUFjLENBQUNSLEtBQUssQ0FBQ00sT0FBTyxDQUFDO0lBQ2xELEtBQUMsTUFBTSxJQUFJTixLQUFLLENBQUNNLE9BQU8sRUFBRTtVQUN4QkEsT0FBTyxHQUFHTixLQUFLLENBQUNNLE9BQU87SUFDekI7UUFFQSxJQUFJLENBQUNBLE9BQU8sRUFBRTtVQUNaQSxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0UsSUFBSTtJQUN6QjtRQUVBLElBQUksQ0FBQ0MsdUJBQXVCLENBQzFCSixPQUFPLEVBQ1BOLEtBQUssQ0FBQ0UsUUFBUSxJQUFJLENBQ2hCLE1BQU0sRUFDTixRQUFRLEVBQ1IsZUFBZSxFQUNmLEdBQUcsRUFDSCxNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILFlBQVksRUFDWixJQUFJLEVBQ0osR0FBRyxFQUNILE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixhQUFhLENBQ2QsQ0FDRjtJQUNESyxJQUFBQSxRQUFRLENBQUNJLGdCQUFnQixDQUFDLFNBQVMsRUFBR1YsQ0FBQyxJQUFLLElBQUksQ0FBQ1csYUFBYSxDQUFDWCxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJRCxLQUFLLENBQUNaLE1BQU0sRUFBRSxJQUFJLENBQUN5QixTQUFTLENBQUNiLEtBQUssQ0FBQ1osTUFBTSxDQUFDO0lBQ2hEO0lBRVFzQixFQUFBQSx1QkFBdUJBLENBQUNJLGFBQTBCLEVBQUVaLFFBQXdDLEVBQUE7UUFDbEcsSUFBSSxDQUFDRCxDQUFDLEdBQUdNLFFBQVEsQ0FBQ1EsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUN0QyxJQUFBLElBQUksQ0FBQ2QsQ0FBQyxDQUFDZSxTQUFTLEdBQUcsY0FBYztJQUVqQyxJQUFBLEtBQUssSUFBSUMsT0FBTyxJQUFJZixRQUFRLEVBQUU7VUFDNUIsSUFBSWUsT0FBTyxLQUFLLEdBQUcsRUFBRTtJQUNuQixRQUFBLElBQUlDLEVBQUUsR0FBR1gsUUFBUSxDQUFDUSxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3RDRyxFQUFFLENBQUNGLFNBQVMsR0FBRyxrQkFBa0I7SUFDakMsUUFBQSxJQUFJLENBQUNmLENBQUMsQ0FBQ2tCLFdBQVcsQ0FBQ0QsRUFBRSxDQUFDO0lBQ3hCLE9BQUMsTUFBTTtJQUNMLFFBQUEsSUFBSUUsV0FBbUI7SUFDdkIsUUFBQSxJQUFJLE9BQU9ILE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDL0IsVUFBQSxJQUFJcEMsZUFBZSxDQUFDb0MsT0FBTyxDQUFDLEVBQUU7SUFDNUJHLFlBQUFBLFdBQVcsR0FBR0gsT0FBTztnQkFDckIsSUFBSSxDQUFDZixRQUFRLENBQUNrQixXQUFXLENBQUMsR0FBR3ZDLGVBQWUsQ0FBQ3VDLFdBQVcsQ0FBQztJQUMzRCxXQUFDLE1BQU07SUFDTCxZQUFBO0lBQ0Y7YUFDRCxNQUFNLElBQUksT0FBT0gsT0FBTyxLQUFLLFFBQVEsSUFBSUEsT0FBTyxDQUFDbkMsSUFBSSxFQUFFO2NBQ3REc0MsV0FBVyxHQUFHSCxPQUFPLENBQUNuQyxJQUFJO0lBQzFCLFVBQUEsSUFBSSxDQUFDb0IsUUFBUSxDQUFDa0IsV0FBVyxDQUFDLEdBQUcsRUFBdUI7SUFDcEQsVUFBQSxJQUFJdkMsZUFBZSxDQUFDdUMsV0FBVyxDQUFDLEVBQUU7SUFDaENDLFlBQUFBLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ3BCLFFBQVEsQ0FBQ2tCLFdBQVcsQ0FBQyxFQUFFdkMsZUFBZSxDQUFDdUMsV0FBVyxDQUFDLENBQUM7SUFDekU7Y0FDQUMsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDcEIsUUFBUSxDQUFDa0IsV0FBVyxDQUFDLEVBQUVILE9BQU8sQ0FBQztJQUNwRCxTQUFDLE1BQU07SUFDTCxVQUFBO0lBQ0Y7WUFFQSxJQUFJaEMsS0FBSyxHQUFHLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQ2tCLFdBQVcsQ0FBQyxDQUFDbkMsS0FBSyxJQUFJbUMsV0FBVztZQUUzRCxJQUFJLElBQUksQ0FBQ2xCLFFBQVEsQ0FBQ2tCLFdBQVcsQ0FBQyxDQUFDbEMsTUFBTSxFQUFFO0lBQ3JDLFVBQUEsTUFBTXFDLElBQUksR0FBRyxJQUFJLENBQUNyQixRQUFRLENBQUNrQixXQUFXLENBQUMsQ0FBQ2xDLE1BQU8sQ0FBQ3NDLEtBQUssQ0FBQyxHQUFHLENBQUM7Y0FDMUQsSUFBSUMsU0FBUyxHQUFhLEVBQUU7Y0FDNUIsSUFBSUMsbUJBQW1CLEdBQWEsRUFBRTtJQUV0QyxVQUFBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixJQUFJLENBQUNLLE1BQU0sR0FBRyxDQUFDLEVBQUVELENBQUMsRUFBRSxFQUFFO2dCQUN4QyxRQUFRSixJQUFJLENBQUNJLENBQUMsQ0FBQztJQUNiLGNBQUEsS0FBSyxNQUFNO0lBQ1RGLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxnQkFBQTtJQUNGLGNBQUEsS0FBSyxLQUFLO0lBQ1JKLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM3QixnQkFBQTtJQUNGLGNBQUEsS0FBSyxLQUFLO0lBQ1JKLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEtBQUssQ0FBQztJQUMvQixnQkFBQTtJQUNGLGNBQUEsS0FBSyxRQUFRO0lBQ1hKLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM3QixnQkFBQTtJQUNGLGNBQUEsS0FBSyxLQUFLO0lBQ1JKLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxnQkFBQTtJQUNGLGNBQUEsS0FBSyxPQUFPO0lBQ1ZKLGdCQUFBQSxTQUFTLENBQUNJLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDMUJILGdCQUFBQSxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM3QixnQkFBQTtJQUNGLGNBQUEsS0FBSyxLQUFLO0lBQ1IsZ0JBQUEsSUFBSXBELFNBQVMsRUFBRTtJQUNiZ0Qsa0JBQUFBLFNBQVMsQ0FBQ0ksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6Qkgsa0JBQUFBLG1CQUFtQixDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQy9CLGlCQUFDLE1BQU07SUFDTEosa0JBQUFBLFNBQVMsQ0FBQ0ksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6Qkgsa0JBQUFBLG1CQUFtQixDQUFDRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2xDO0lBQ0EsZ0JBQUE7SUFDRixjQUFBLEtBQUssTUFBTTtJQUNUSixnQkFBQUEsU0FBUyxDQUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3hCLGdCQUFBLElBQUlwRCxTQUFTLEVBQUVpRCxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQ3hDSCxtQkFBbUIsQ0FBQ0csSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQyxnQkFBQTtJQUNKO0lBQ0Y7Y0FFQUgsbUJBQW1CLENBQUNHLElBQUksQ0FBQ04sSUFBSSxDQUFDQSxJQUFJLENBQUNLLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxVQUFBLElBQUkxQyxNQUFNLEdBQVc7SUFDbkJ1QyxZQUFBQSxTQUFTLEVBQUVBLFNBQVM7SUFDcEJSLFlBQUFBLE9BQU8sRUFBRUc7ZUFDVjtJQUVELFVBQUEsSUFBSUcsSUFBSSxDQUFDQSxJQUFJLENBQUNLLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ0UsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQzFDNUMsWUFBQUEsTUFBTSxDQUFDckIsSUFBSSxHQUFHLENBQUEsS0FBQSxFQUFRMEQsSUFBSSxDQUFDQSxJQUFJLENBQUNLLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFBO0lBQy9DLFdBQUMsTUFBTTtJQUNMMUMsWUFBQUEsTUFBTSxDQUFDNkMsR0FBRyxHQUFHUixJQUFJLENBQUNBLElBQUksQ0FBQ0ssTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDSSxXQUFXLEVBQUU7SUFDbEQ7SUFDQSxVQUFBLElBQUksQ0FBQzNCLE9BQU8sQ0FBQ3dCLElBQUksQ0FBQzNDLE1BQU0sQ0FBQztJQUN6QkQsVUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNnRCxNQUFNLENBQUMsQ0FBQSxFQUFBLEVBQUtQLG1CQUFtQixDQUFDUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUM3RDtZQUVBLElBQUksQ0FBQy9CLE9BQU8sQ0FBQ2lCLFdBQVcsQ0FBQyxHQUFHYixRQUFRLENBQUNRLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDekQsSUFBSSxDQUFDWixPQUFPLENBQUNpQixXQUFXLENBQUMsQ0FBQ0osU0FBUyxHQUFHLDBDQUEwQztZQUNoRixJQUFJLENBQUNiLE9BQU8sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDbkMsS0FBSyxHQUFHQSxLQUFLO0lBQ3ZDLFFBQUEsSUFBSSxDQUFDa0IsT0FBTyxDQUFDaUIsV0FBVyxDQUFDLENBQUNwQyxTQUFTLEdBQUcsSUFBSSxDQUFDa0IsUUFBUSxDQUFDa0IsV0FBVyxDQUFDLENBQUNwQyxTQUFTO1lBRTFFLElBQUksQ0FBQ21CLE9BQU8sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDVCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUdWLENBQUMsSUFDeEQsSUFBSSxDQUFDa0MsV0FBVyxDQUFDZixXQUFXLEVBQUVuQixDQUFDLENBQUMsQ0FDakM7WUFDRCxJQUFJLENBQUNBLENBQUMsQ0FBQ2tCLFdBQVcsQ0FBQyxJQUFJLENBQUNoQixPQUFPLENBQUNpQixXQUFXLENBQUMsQ0FBQztJQUMvQztJQUNGO0lBQ0FOLElBQUFBLGFBQWEsQ0FBQ0ssV0FBVyxDQUFDLElBQUksQ0FBQ2xCLENBQUMsQ0FBQztJQUNuQztJQUVRa0MsRUFBQUEsV0FBV0EsQ0FBQ2YsV0FBbUIsRUFBRWdCLEtBQVksRUFBQTtJQUNuRCxJQUFBLElBQUksQ0FBQyxJQUFJLENBQUNoRCxNQUFNLEVBQUU7UUFDbEJnRCxLQUFLLENBQUNDLGNBQWMsRUFBRTtRQUN0QixJQUFJLE9BQU8sSUFBSSxDQUFDbkMsUUFBUSxDQUFDa0IsV0FBVyxDQUFDLENBQUNyQyxNQUFNLEtBQUssUUFBUSxFQUFFO0lBQ3pELE1BQUEsSUFBSSxJQUFJLENBQUNxQixLQUFLLENBQUNnQixXQUFXLENBQUMsS0FBSyxLQUFLLEVBQ2xDLElBQUksQ0FBQ2hDLE1BQWMsQ0FBQ2tELGVBQWUsQ0FBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUNwRCxJQUFJLENBQUNoQyxNQUFjLENBQUNrRCxlQUFlLENBQUNsQixXQUFXLEVBQUUsS0FBSyxDQUFDO0lBQy9ELEtBQUMsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDbEIsUUFBUSxDQUFDa0IsV0FBVyxDQUFDLENBQUNyQyxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQ2pFLElBQUksQ0FBQ21CLFFBQVEsQ0FBQ2tCLFdBQVcsQ0FBQyxDQUFDckMsTUFBd0IsQ0FBQyxJQUFJLENBQUNLLE1BQU0sQ0FBQztJQUNuRTtJQUNGO01BRU95QixTQUFTQSxDQUFDekIsTUFBYyxFQUFBO1FBQzdCLElBQUksQ0FBQ0EsTUFBTSxHQUFHQSxNQUFNO0lBQ3BCQSxJQUFBQSxNQUFNLENBQUN1QixnQkFBZ0IsQ0FBQyxXQUFXLEVBQUdWLENBQUMsSUFBSyxJQUFJLENBQUNzQyxlQUFlLENBQUN0QyxDQUFDLENBQUMsQ0FBQztJQUN0RTtNQUVRc0MsZUFBZUEsQ0FBQ0gsS0FBcUIsRUFBQTtRQUMzQyxJQUFJQSxLQUFLLENBQUNJLFlBQVksRUFBRTtJQUN0QixNQUFBLEtBQUssSUFBSXZCLE9BQU8sSUFBSSxJQUFJLENBQUNmLFFBQVEsRUFBRTtZQUNqQyxJQUFJa0MsS0FBSyxDQUFDSSxZQUFZLENBQUN2QixPQUFPLENBQUMsS0FBS3dCLFNBQVMsRUFBRTtjQUM3QyxJQUFJLElBQUksQ0FBQ3ZDLFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUMxQixPQUFPLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQ2EsS0FBSyxDQUFDYSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUNmLFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUMxQixPQUFRLENBQ25ELElBQUksQ0FBQ0gsTUFBTyxFQUNaZ0QsS0FBSyxDQUFDNUMsS0FBSyxFQUNYNEMsS0FBSyxDQUFDM0MsTUFBTSxDQUNiO0lBQ0gsV0FBQyxNQUFNO0lBQ0wsWUFBQSxJQUFJLENBQUNXLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLEdBQUdtQixLQUFLLENBQUM1QyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUk7SUFDbEQ7SUFDRixTQUFDLE1BQU07Y0FDTCxJQUFJLENBQUNZLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLEdBQUdtQixLQUFLLENBQUNJLFlBQVksQ0FBQ3ZCLE9BQU8sQ0FBQztJQUNuRDtZQUVBLElBQUksSUFBSSxDQUFDYixLQUFLLENBQUNhLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtjQUNoQyxJQUFJLENBQUNkLE9BQU8sQ0FBQ2MsT0FBTyxDQUFDLENBQUNELFNBQVMsR0FBRyx3Q0FBd0M7YUFDM0UsTUFBTSxJQUFJLElBQUksQ0FBQ1osS0FBSyxDQUFDYSxPQUFPLENBQUMsS0FBSyxLQUFLLEVBQUU7Y0FDeEMsSUFBSSxDQUFDZCxPQUFPLENBQUNjLE9BQU8sQ0FBQyxDQUFDRCxTQUFTLEdBQUcsMENBQTBDO0lBQzlFLFNBQUMsTUFBTTtjQUNMLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxPQUFPLENBQUMsQ0FBQ0QsU0FBUyxHQUFHLDBDQUEwQztJQUM5RTtJQUNGO0lBQ0Y7SUFDRjtNQUVRSixhQUFhQSxDQUFDd0IsS0FBb0IsRUFBQTtRQUN4Q00sS0FBSyxFQUFFLEtBQUssSUFBSXhELE1BQU0sSUFBSSxJQUFJLENBQUNtQixPQUFPLEVBQUU7VUFDdEMsSUFDR25CLE1BQU0sQ0FBQzZDLEdBQUcsSUFBSUssS0FBSyxDQUFDTCxHQUFHLENBQUNDLFdBQVcsRUFBRSxLQUFLOUMsTUFBTSxDQUFDNkMsR0FBRyxJQUNwRDdDLE1BQU0sQ0FBQ3JCLElBQUksSUFBSXVFLEtBQUssQ0FBQ3ZFLElBQUksS0FBS3FCLE1BQU0sQ0FBQ3JCLElBQUssRUFDM0M7SUFDQSxRQUFBLEtBQUssSUFBSThFLFFBQVEsSUFBSXpELE1BQU0sQ0FBQ3VDLFNBQVMsRUFBRTtJQUNyQyxVQUFBLElBQUksQ0FBRVcsS0FBYSxDQUFDTyxRQUFRLENBQUMsRUFBRSxTQUFTRCxLQUFLO0lBQy9DO1lBQ0EsSUFBSSxDQUFDUCxXQUFXLENBQUNqRCxNQUFNLENBQUMrQixPQUFPLEVBQUVtQixLQUFLLENBQUM7SUFDdkMsUUFBQTtJQUNGO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7Ozs7SUM5V0QsQ0FBQSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsRUFBRTtPQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO01BQ3BDOztJQUVEO0lBQ0EsQ0FBYyxZQUFBO0lBQ2Q7T0FDRSxLQUFLLENBQUMsT0FBTyxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQztPQUNsRCxLQUFLLENBQUMsT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQztJQUM1QztPQUNFLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO09BQ3RDLEtBQUssQ0FBQyxPQUFPUSxjQUFNLElBQUksUUFBUSxJQUFJQSxjQUFNLENBQUM7T0FDMUMsS0FBSyxDQUFDLE9BQU9DLFlBQUksSUFBSSxRQUFRLElBQUlBLFlBQUksQ0FBQztJQUN4QztJQUNBLEdBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFOzs7Ozs7Ozs7O0lDZC9ELENBQWMsS0FBQSxHQUFHLFVBQVUsSUFBSSxFQUFFO0lBQ2pDLEdBQUUsSUFBSTtJQUNOLEtBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO1FBQ2hCLENBQUMsT0FBTyxLQUFLLEVBQUU7SUFDbEIsS0FBSSxPQUFPLElBQUk7SUFDZjtNQUNDOzs7Ozs7Ozs7O0tDTkQsSUFBSSxLQUFLLEdBQUdDLFlBQTZCLEVBQUE7O0lBRXpDO0lBQ0EsQ0FBQSxXQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWTtJQUNwQztPQUNFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbEYsRUFBQyxDQUFDOzs7Ozs7Ozs7Ozs7S0NORixJQUFJLEtBQUssR0FBR0EsWUFBNkIsRUFBQTs7SUFFekMsQ0FBQSxrQkFBYyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVk7SUFDcEM7T0FDRSxJQUFJLElBQUksR0FBRyxDQUFDLFlBQVksZUFBZSxFQUFFLElBQUksRUFBRTtJQUNqRDtPQUNFLE9BQU8sT0FBTyxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ3RFLEVBQUMsQ0FBQzs7Ozs7Ozs7OztLQ1BGLElBQUksV0FBVyxHQUFHQSx5QkFBNEMsRUFBQTs7SUFFOUQsQ0FBQSxJQUFJLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxTQUFTO0lBQzFDLENBQUEsSUFBSSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSTtJQUNqQztJQUNBLENBQUEsSUFBSSxtQkFBbUIsR0FBRyxXQUFXLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDOztJQUVoRixDQUFBLG1CQUFjLEdBQUcsV0FBVyxHQUFHLG1CQUFtQixHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQ25FLEdBQUUsT0FBTyxZQUFZO1NBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDO1FBQ2pDO01BQ0Y7Ozs7Ozs7Ozs7SUNYRDtLQUNBLElBQUksV0FBVyxHQUFHLE9BQU8sUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRzs7SUFFN0Q7SUFDQTtJQUNBO0lBQ0EsQ0FBQSxVQUFjLEdBQUcsT0FBTyxXQUFXLElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxTQUFTLEdBQUcsVUFBVSxRQUFRLEVBQUU7T0FDcEcsT0FBTyxPQUFPLFFBQVEsSUFBSSxVQUFVLElBQUksUUFBUSxLQUFLLFdBQVc7TUFDakUsR0FBRyxVQUFVLFFBQVEsRUFBRTtJQUN4QixHQUFFLE9BQU8sT0FBTyxRQUFRLElBQUksVUFBVTtNQUNyQzs7Ozs7Ozs7OztJQ1ZEO0lBQ0E7SUFDQSxDQUFjLGlCQUFBLEdBQUcsVUFBVSxFQUFFLEVBQUU7SUFDL0IsR0FBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVM7TUFDdkM7Ozs7Ozs7Ozs7S0NKRCxJQUFJLGlCQUFpQixHQUFHQSx3QkFBNEMsRUFBQTs7S0FFcEUsSUFBSSxVQUFVLEdBQUcsU0FBUzs7SUFFMUI7SUFDQTtJQUNBLENBQWMsc0JBQUEsR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUMvQixHQUFFLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDL0UsR0FBRSxPQUFPLEVBQUU7TUFDVjs7Ozs7Ozs7OztLQ1RELElBQUksc0JBQXNCLEdBQUdBLDZCQUFnRCxFQUFBOztLQUU3RSxJQUFJLE9BQU8sR0FBRyxNQUFNOztJQUVwQjtJQUNBO0lBQ0EsQ0FBYyxRQUFBLEdBQUcsVUFBVSxRQUFRLEVBQUU7SUFDckMsR0FBRSxPQUFPLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNqRDs7Ozs7Ozs7OztLQ1JELElBQUksV0FBVyxHQUFHQSwwQkFBNkMsRUFBQTtLQUMvRCxJQUFJLFFBQVEsR0FBR0MsZUFBaUMsRUFBQTs7SUFFaEQsQ0FBQSxJQUFJLGNBQWMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQzs7SUFFbkQ7SUFDQTtJQUNBO0lBQ0EsQ0FBYyxnQkFBQSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtPQUN6RCxPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ3pDOzs7Ozs7Ozs7O0tDVkQsSUFBSSxXQUFXLEdBQUdELGtCQUFtQyxFQUFBO0tBQ3JELElBQUksTUFBTSxHQUFHQyxxQkFBd0MsRUFBQTs7SUFFckQsQ0FBQSxJQUFJLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxTQUFTO0lBQzFDO0lBQ0EsQ0FBQSxJQUFJLGFBQWEsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLHdCQUF3Qjs7SUFFbEUsQ0FBQSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzlDO0lBQ0EsQ0FBQSxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLFNBQVMsR0FBRyxlQUFlLEVBQUUsSUFBSSxLQUFLLFdBQVc7SUFDbEYsQ0FBQSxJQUFJLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxXQUFXLEtBQUssV0FBVyxJQUFJLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs7SUFFckgsQ0FBQSxZQUFjLEdBQUc7T0FDZixNQUFNLEVBQUUsTUFBTTtPQUNkLE1BQU0sRUFBRSxNQUFNO0lBQ2hCLEdBQUUsWUFBWSxFQUFFO01BQ2Y7Ozs7Ozs7Ozs7OztJQ2hCRCxDQUFBLE1BQWMsR0FBRyxLQUFLOzs7Ozs7Ozs7O0tDQXRCLElBQUksVUFBVSxHQUFHRCxpQkFBbUMsRUFBQTs7SUFFcEQ7SUFDQSxDQUFBLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjOztJQUUxQyxDQUFBLG9CQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ3ZDLEdBQUUsSUFBSTtJQUNOLEtBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RGLENBQUMsT0FBTyxLQUFLLEVBQUU7SUFDbEIsS0FBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSztRQUN4QixDQUFDLE9BQU8sS0FBSztNQUNmOzs7Ozs7Ozs7S0NYRCxJQUFJLE9BQU8sR0FBR0EsYUFBK0IsRUFBQTtLQUM3QyxJQUFJLFVBQVUsR0FBR0MsaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxvQkFBb0IsR0FBR0MsMkJBQThDLEVBQUE7O0tBRXpFLElBQUksTUFBTSxHQUFHLG9CQUFvQjtJQUNqQyxDQUFBLElBQUksS0FBSyxHQUFHQyxXQUFjLENBQUEsT0FBQSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDOztJQUVuRixDQUFBLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztPQUM3QyxPQUFPLEVBQUUsUUFBUTtJQUNuQixHQUFFLElBQUksRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLFFBQVE7T0FDakMsU0FBUyxFQUFFLDJDQUEyQztPQUN0RCxPQUFPLEVBQUUsMERBQTBEO0lBQ3JFLEdBQUUsTUFBTSxFQUFFO0lBQ1YsRUFBQyxDQUFDOzs7Ozs7Ozs7O0tDYkYsSUFBSSxXQUFXLEdBQUdILDBCQUE2QyxFQUFBO0tBQy9ELElBQUksVUFBVSxHQUFHQyxpQkFBbUMsRUFBQTtLQUNwRCxJQUFJLEtBQUssR0FBR0Msa0JBQW9DLEVBQUE7O0lBRWhELENBQUEsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzs7SUFFckQ7SUFDQSxDQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ3RDLEdBQUUsS0FBSyxDQUFDLGFBQWEsR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUN0QyxLQUFJLE9BQU8sZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzVCO0lBQ0g7O0lBRUEsQ0FBYyxhQUFBLEdBQUcsS0FBSyxDQUFDLGFBQWE7Ozs7Ozs7Ozs7S0NicEMsSUFBSSxVQUFVLEdBQUdGLGlCQUFtQyxFQUFBO0tBQ3BELElBQUksVUFBVSxHQUFHQyxpQkFBbUMsRUFBQTs7SUFFcEQsQ0FBQSxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTzs7SUFFaEMsQ0FBQSxxQkFBYyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Ozs7Ozs7OztLQ0wzRSxJQUFJLFVBQVUsR0FBR0QsaUJBQW1DLEVBQUE7O0lBRXBELENBQWMsUUFBQSxHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQy9CLEdBQUUsT0FBTyxPQUFPLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO01BQzVEOzs7Ozs7Ozs7Ozs7S0NKRCxJQUFJLFVBQVUsR0FBR0EsaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxRQUFRLEdBQUdDLGVBQWlDLEVBQUE7O0lBRWhELENBQUEsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVE7SUFDbEM7SUFDQSxDQUFBLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQzs7SUFFbkUsQ0FBYyxxQkFBQSxHQUFHLFVBQVUsRUFBRSxFQUFFO09BQzdCLE9BQU8sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRTtNQUNoRDs7Ozs7Ozs7OztLQ1RELElBQUksV0FBVyxHQUFHRCxrQkFBbUMsRUFBQTtLQUNyRCxJQUFJLEtBQUssR0FBR0MsWUFBNkIsRUFBQTtLQUN6QyxJQUFJLGFBQWEsR0FBR0MsNEJBQStDLEVBQUE7O0lBRW5FO0lBQ0EsQ0FBQSxZQUFjLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtJQUNwRDtPQUNFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQzFELEtBQUksR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxJQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNaLEVBQUMsQ0FBQzs7Ozs7Ozs7OztLQ1ZGLElBQUksV0FBVyxHQUFHRixrQkFBbUMsRUFBQTtLQUNyRCxJQUFJLEtBQUssR0FBR0MsWUFBNkIsRUFBQTs7SUFFekM7SUFDQTtJQUNBLENBQUEsb0JBQWMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLFlBQVk7SUFDbEQ7T0FDRSxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxlQUFlLEVBQUUsV0FBVyxFQUFFO1NBQ3JFLEtBQUssRUFBRSxFQUFFO0lBQ2IsS0FBSSxRQUFRLEVBQUU7SUFDZCxJQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRTtJQUNyQixFQUFDLENBQUM7Ozs7Ozs7Ozs7S0NYRixJQUFJLFFBQVEsR0FBR0QsZUFBaUMsRUFBQTs7S0FFaEQsSUFBSSxPQUFPLEdBQUcsTUFBTTtLQUNwQixJQUFJLFVBQVUsR0FBRyxTQUFTOztJQUUxQjtJQUNBLENBQWMsUUFBQSxHQUFHLFVBQVUsUUFBUSxFQUFFO0lBQ3JDLEdBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxRQUFRO09BQ3ZDLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO01BQzlEOzs7Ozs7Ozs7O0tDVEQsSUFBSSxXQUFXLEdBQUdBLHlCQUE0QyxFQUFBOztJQUU5RCxDQUFBLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSTtJQUNsQztJQUNBLENBQWMsWUFBQSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVk7T0FDM0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7TUFDbkM7Ozs7Ozs7Ozs7S0NORCxJQUFJLFVBQVUsR0FBR0EsaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxVQUFVLEdBQUdDLGlCQUFtQyxFQUFBOztJQUVwRCxDQUFBLElBQUksU0FBUyxHQUFHLFVBQVUsUUFBUSxFQUFFO09BQ2xDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsR0FBRyxTQUFTO01BQ25EOztJQUVELENBQUEsVUFBYyxHQUFHLFVBQVUsU0FBUyxFQUFFLE1BQU0sRUFBRTtPQUM1QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztNQUN4SDs7Ozs7Ozs7OztLQ1RELElBQUksV0FBVyxHQUFHRCwwQkFBNkMsRUFBQTs7SUFFL0QsQ0FBQSxtQkFBYyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7O0tDRjlDLElBQUksVUFBVSxHQUFHQSxpQkFBbUMsRUFBQTs7SUFFcEQsQ0FBQSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUztJQUNwQyxDQUFBLElBQUksU0FBUyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUzs7SUFFaEQsQ0FBYyxvQkFBQSxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTs7Ozs7Ozs7OztLQ0xuRCxJQUFJLFVBQVUsR0FBR0EsaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxTQUFTLEdBQUdDLDJCQUE4QyxFQUFBOztJQUU5RCxDQUFBLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPO0lBQ2hDLENBQUEsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUk7SUFDMUIsQ0FBQSxJQUFJLFFBQVEsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU87SUFDbEUsQ0FBQSxJQUFJLEVBQUUsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEVBQUU7S0FDaEMsSUFBSSxLQUFLLEVBQUUsT0FBTzs7SUFFbEIsQ0FBQSxJQUFJLEVBQUUsRUFBRTtJQUNSLEdBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3ZCO0lBQ0E7SUFDQSxHQUFFLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRTs7SUFFQTtJQUNBO0lBQ0EsQ0FBQSxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtJQUMzQixHQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztPQUN0QyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDaEMsS0FBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDeEMsSUFBSSxLQUFLLEVBQUUsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQztJQUNBOztJQUVBLENBQUEsb0JBQWMsR0FBRyxPQUFPOzs7Ozs7Ozs7O0lDMUJ4QjtLQUNBLElBQUksVUFBVSxHQUFHRCwyQkFBOEMsRUFBQTtLQUMvRCxJQUFJLEtBQUssR0FBR0MsWUFBNkIsRUFBQTtLQUN6QyxJQUFJLFVBQVUsR0FBR0MsaUJBQW1DLEVBQUE7O0lBRXBELENBQUEsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU07O0lBRS9CO0lBQ0EsQ0FBYywwQkFBQSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtJQUN0RSxHQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QztJQUNBO0lBQ0E7SUFDQTtJQUNBLEdBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxNQUFNLENBQUM7SUFDaEU7U0FDSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxJQUFJLFVBQVUsR0FBRyxFQUFFO0lBQ2pELEVBQUMsQ0FBQzs7Ozs7Ozs7OztJQ2pCRjtLQUNBLElBQUksYUFBYSxHQUFHRixpQ0FBb0QsRUFBQTs7SUFFeEUsQ0FBQSxjQUFjLEdBQUcsYUFBYTtPQUM1QixDQUFDLE1BQU0sQ0FBQyxJQUFJO0lBQ2QsR0FBRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUTs7Ozs7Ozs7OztLQ0xwQyxJQUFJLFVBQVUsR0FBR0EsaUJBQW9DLEVBQUE7S0FDckQsSUFBSSxVQUFVLEdBQUdDLGlCQUFtQyxFQUFBO0tBQ3BELElBQUksYUFBYSxHQUFHQywwQkFBOEMsRUFBQTtLQUNsRSxJQUFJLGlCQUFpQixHQUFHRSxxQkFBeUMsRUFBQTs7S0FFakUsSUFBSSxPQUFPLEdBQUcsTUFBTTs7SUFFcEIsQ0FBQSxRQUFjLEdBQUcsaUJBQWlCLEdBQUcsVUFBVSxFQUFFLEVBQUU7SUFDbkQsR0FBRSxPQUFPLE9BQU8sRUFBRSxJQUFJLFFBQVE7TUFDN0IsR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUNsQixHQUFFLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDcEMsR0FBRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDNUU7Ozs7Ozs7Ozs7S0NaRCxJQUFJLE9BQU8sR0FBRyxNQUFNOztJQUVwQixDQUFjLFdBQUEsR0FBRyxVQUFVLFFBQVEsRUFBRTtJQUNyQyxHQUFFLElBQUk7SUFDTixLQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDLE9BQU8sS0FBSyxFQUFFO0lBQ2xCLEtBQUksT0FBTyxRQUFRO0lBQ25CO01BQ0M7Ozs7Ozs7Ozs7S0NSRCxJQUFJLFVBQVUsR0FBR0osaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxXQUFXLEdBQUdDLGtCQUFxQyxFQUFBOztLQUV2RCxJQUFJLFVBQVUsR0FBRyxTQUFTOztJQUUxQjtJQUNBLENBQWMsU0FBQSxHQUFHLFVBQVUsUUFBUSxFQUFFO0lBQ3JDLEdBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxRQUFRO09BQ3pDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO01BQ25FOzs7Ozs7Ozs7O0tDVEQsSUFBSSxTQUFTLEdBQUdELGdCQUFrQyxFQUFBO0tBQ2xELElBQUksaUJBQWlCLEdBQUdDLHdCQUE0QyxFQUFBOztJQUVwRTtJQUNBO0lBQ0EsQ0FBQSxTQUFjLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLEdBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNmLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7TUFDN0Q7Ozs7Ozs7Ozs7S0NSRCxJQUFJLElBQUksR0FBR0QsbUJBQXFDLEVBQUE7S0FDaEQsSUFBSSxVQUFVLEdBQUdDLGlCQUFtQyxFQUFBO0tBQ3BELElBQUksUUFBUSxHQUFHQyxlQUFpQyxFQUFBOztLQUVoRCxJQUFJLFVBQVUsR0FBRyxTQUFTOztJQUUxQjtJQUNBO0lBQ0EsQ0FBQSxtQkFBYyxHQUFHLFVBQVUsS0FBSyxFQUFFLElBQUksRUFBRTtPQUN0QyxJQUFJLEVBQUUsRUFBRSxHQUFHO0lBQ2IsR0FBRSxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUc7T0FDeEcsSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRztJQUNwRixHQUFFLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRztJQUMxRyxHQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMseUNBQXlDLENBQUM7TUFDaEU7Ozs7Ozs7Ozs7S0NkRCxJQUFJLEtBQUssR0FBR0Ysa0JBQW9DLEVBQUE7O0lBRWhELENBQUEsTUFBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUN2QyxHQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO01BQ2hEOzs7Ozs7Ozs7O0tDSkQsSUFBSSxXQUFXLEdBQUdBLDBCQUE2QyxFQUFBOztLQUUvRCxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQ1YsQ0FBQSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO0lBQzNCLENBQUEsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7O0lBRXhDLENBQWMsR0FBQSxHQUFHLFVBQVUsR0FBRyxFQUFFO09BQzlCLE9BQU8sU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FBQztNQUN4Rjs7Ozs7Ozs7OztLQ1JELElBQUksVUFBVSxHQUFHQSxpQkFBbUMsRUFBQTtLQUNwRCxJQUFJLE1BQU0sR0FBR0MsYUFBOEIsRUFBQTtLQUMzQyxJQUFJLE1BQU0sR0FBR0MscUJBQXdDLEVBQUE7S0FDckQsSUFBSSxHQUFHLEdBQUdFLFVBQTJCLEVBQUE7S0FDckMsSUFBSSxhQUFhLEdBQUdDLGlDQUFvRCxFQUFBO0tBQ3hFLElBQUksaUJBQWlCLEdBQUdDLHFCQUF5QyxFQUFBOztJQUVqRSxDQUFBLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNO0lBQzlCLENBQUEsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUEsSUFBSSxxQkFBcUIsR0FBRyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLEdBQUc7O0lBRS9HLENBQWMsZUFBQSxHQUFHLFVBQVUsSUFBSSxFQUFFO09BQy9CLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDeEMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSTthQUM5RCxNQUFNLENBQUMsSUFBSTtJQUNuQixTQUFRLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDL0MsSUFBRyxDQUFDLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDO01BQ3JDOzs7Ozs7Ozs7O0tDakJELElBQUksSUFBSSxHQUFHTixtQkFBcUMsRUFBQTtLQUNoRCxJQUFJLFFBQVEsR0FBR0MsZUFBaUMsRUFBQTtLQUNoRCxJQUFJLFFBQVEsR0FBR0MsZUFBaUMsRUFBQTtLQUNoRCxJQUFJLFNBQVMsR0FBR0UsZ0JBQWtDLEVBQUE7S0FDbEQsSUFBSSxtQkFBbUIsR0FBR0MsMEJBQTZDLEVBQUE7S0FDdkUsSUFBSSxlQUFlLEdBQUdDLHNCQUF5QyxFQUFBOztLQUUvRCxJQUFJLFVBQVUsR0FBRyxTQUFTO0lBQzFCLENBQUEsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQzs7SUFFakQ7SUFDQTtJQUNBLENBQUEsV0FBYyxHQUFHLFVBQVUsS0FBSyxFQUFFLElBQUksRUFBRTtJQUN4QyxHQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sS0FBSztPQUNyRCxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztJQUNuRCxHQUFFLElBQUksTUFBTTtPQUNWLElBQUksWUFBWSxFQUFFO0lBQ3BCLEtBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLElBQUksR0FBRyxTQUFTO1NBQ3hDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7SUFDNUMsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLE1BQU07SUFDNUQsS0FBSSxNQUFNLElBQUksVUFBVSxDQUFDLHlDQUF5QyxDQUFDO0lBQ25FO0lBQ0EsR0FBRSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsSUFBSSxHQUFHLFFBQVE7SUFDekMsR0FBRSxPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDeEM7Ozs7Ozs7Ozs7S0N4QkQsSUFBSSxXQUFXLEdBQUdOLGtCQUFvQyxFQUFBO0tBQ3RELElBQUksUUFBUSxHQUFHQyxlQUFpQyxFQUFBOztJQUVoRDtJQUNBO0lBQ0EsQ0FBYyxhQUFBLEdBQUcsVUFBVSxRQUFRLEVBQUU7T0FDbkMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7T0FDekMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFO01BQ3RDOzs7Ozs7Ozs7S0NSRCxJQUFJLFdBQVcsR0FBR0Qsa0JBQW1DLEVBQUE7S0FDckQsSUFBSSxjQUFjLEdBQUdDLG1CQUFzQyxFQUFBO0tBQzNELElBQUksdUJBQXVCLEdBQUdDLDJCQUErQyxFQUFBO0tBQzdFLElBQUksUUFBUSxHQUFHRSxlQUFpQyxFQUFBO0tBQ2hELElBQUksYUFBYSxHQUFHQyxvQkFBdUMsRUFBQTs7S0FFM0QsSUFBSSxVQUFVLEdBQUcsU0FBUztJQUMxQjtJQUNBLENBQUEsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWM7SUFDM0M7SUFDQSxDQUFBLElBQUkseUJBQXlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QjtLQUMvRCxJQUFJLFVBQVUsR0FBRyxZQUFZO0tBQzdCLElBQUksWUFBWSxHQUFHLGNBQWM7S0FDakMsSUFBSSxRQUFRLEdBQUcsVUFBVTs7SUFFekI7SUFDQTtJQUNBLENBQUEsb0JBQUEsQ0FBQSxDQUFTLEdBQUcsV0FBVyxHQUFHLHVCQUF1QixHQUFHLFNBQVMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFO09BQzVGLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO09BQ3BCLFFBQVEsQ0FBQyxVQUFVLENBQUM7T0FDcEIsSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLFdBQVcsSUFBSSxPQUFPLElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDNUgsSUFBSSxPQUFPLEdBQUcseUJBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxLQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN0QyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztJQUM3QixPQUFNLFVBQVUsR0FBRztJQUNuQixTQUFRLFlBQVksRUFBRSxZQUFZLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ25HLFNBQVEsVUFBVSxFQUFFLFVBQVUsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDM0YsU0FBUSxRQUFRLEVBQUU7WUFDWDtJQUNQO1FBQ0csQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztNQUMzQyxHQUFHLGVBQWUsR0FBRyxTQUFTLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRTtPQUM5RCxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztPQUNwQixRQUFRLENBQUMsVUFBVSxDQUFDO09BQ3BCLElBQUksY0FBYyxFQUFFLElBQUk7U0FDdEIsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUM7UUFDekMsQ0FBQyxPQUFPLEtBQUssRUFBRTtJQUNsQixHQUFFLElBQUksS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMseUJBQXlCLENBQUM7SUFDakcsR0FBRSxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLO0lBQ3BELEdBQUUsT0FBTyxDQUFDO01BQ1Q7Ozs7Ozs7Ozs7SUMxQ0QsQ0FBQSx3QkFBYyxHQUFHLFVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFFLE9BQU87SUFDVCxLQUFJLFVBQVUsRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsS0FBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEtBQUksUUFBUSxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQixLQUFJLEtBQUssRUFBRTtRQUNSO01BQ0Y7Ozs7Ozs7Ozs7S0NQRCxJQUFJLFdBQVcsR0FBR0wsa0JBQW1DLEVBQUE7S0FDckQsSUFBSSxvQkFBb0IsR0FBR0MsMkJBQThDLEVBQUE7S0FDekUsSUFBSSx3QkFBd0IsR0FBR0MsK0JBQWtELEVBQUE7O0lBRWpGLENBQWMsMkJBQUEsR0FBRyxXQUFXLEdBQUcsVUFBVSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUM3RCxHQUFFLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLEVBQUMsR0FBRyxVQUFVLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2xDLEdBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUs7SUFDckIsR0FBRSxPQUFPLE1BQU07TUFDZDs7Ozs7Ozs7OztLQ1RELElBQUksTUFBTSxHQUFHRixhQUE4QixFQUFBO0tBQzNDLElBQUksR0FBRyxHQUFHQyxVQUEyQixFQUFBOztJQUVyQyxDQUFBLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7O0lBRXpCLENBQWMsU0FBQSxHQUFHLFVBQVUsR0FBRyxFQUFFO0lBQ2hDLEdBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMzQzs7Ozs7Ozs7OztJQ1BELENBQUEsVUFBYyxHQUFHLEVBQUU7Ozs7Ozs7Ozs7S0NBbkIsSUFBSSxlQUFlLEdBQUdELDRCQUFnRCxFQUFBO0tBQ3RFLElBQUksVUFBVSxHQUFHQyxpQkFBbUMsRUFBQTtLQUNwRCxJQUFJLFFBQVEsR0FBR0MsZUFBaUMsRUFBQTtLQUNoRCxJQUFJLDJCQUEyQixHQUFHRSxrQ0FBc0QsRUFBQTtLQUN4RixJQUFJLE1BQU0sR0FBR0MscUJBQXdDLEVBQUE7S0FDckQsSUFBSSxNQUFNLEdBQUdDLGtCQUFvQyxFQUFBO0tBQ2pELElBQUksU0FBUyxHQUFHQyxnQkFBa0MsRUFBQTtLQUNsRCxJQUFJLFVBQVUsR0FBR0MsaUJBQW1DLEVBQUE7O0tBRXBELElBQUksMEJBQTBCLEdBQUcsNEJBQTRCO0lBQzdELENBQUEsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVM7SUFDcEMsQ0FBQSxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTztJQUNoQyxDQUFBLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHOztJQUVqQixDQUFBLElBQUksT0FBTyxHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQzVCLEdBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ3ZDOztJQUVELENBQUEsSUFBSSxTQUFTLEdBQUcsVUFBVSxJQUFJLEVBQUU7T0FDOUIsT0FBTyxVQUFVLEVBQUUsRUFBRTtJQUN2QixLQUFJLElBQUksS0FBSztJQUNiLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksRUFBRTtXQUNwRCxNQUFNLElBQUksU0FBUyxDQUFDLHlCQUF5QixHQUFHLElBQUksR0FBRyxXQUFXLENBQUM7VUFDcEUsQ0FBQyxPQUFPLEtBQUs7UUFDZjtNQUNGOztJQUVELENBQUEsSUFBSSxlQUFlLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtJQUNyQyxHQUFFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzVEO0lBQ0EsR0FBRSxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHO0lBQ3ZCLEdBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRztJQUN2QixHQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7SUFDdkI7SUFDQSxHQUFFLEdBQUcsR0FBRyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUU7SUFDaEMsS0FBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQztJQUN0RSxLQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRTtJQUN4QixLQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztJQUMzQixLQUFJLE9BQU8sUUFBUTtRQUNoQjtJQUNILEdBQUUsR0FBRyxHQUFHLFVBQVUsRUFBRSxFQUFFO1NBQ2xCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQzNCO0lBQ0gsR0FBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLEVBQUU7SUFDdEIsS0FBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCO0lBQ0gsRUFBQyxNQUFNO0lBQ1AsR0FBRSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ2hDLEdBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUk7SUFDMUIsR0FBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFO0lBQ2hDLEtBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUM7SUFDMUUsS0FBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUU7SUFDeEIsS0FBSSwyQkFBMkIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztJQUNwRCxLQUFJLE9BQU8sUUFBUTtRQUNoQjtJQUNILEdBQUUsR0FBRyxHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQ3RCLEtBQUksT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQzFDO0lBQ0gsR0FBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLEVBQUU7SUFDdEIsS0FBSSxPQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO1FBQ3pCO0lBQ0g7O0lBRUEsQ0FBQSxhQUFjLEdBQUc7T0FDZixHQUFHLEVBQUUsR0FBRztPQUNSLEdBQUcsRUFBRSxHQUFHO09BQ1IsR0FBRyxFQUFFLEdBQUc7T0FDUixPQUFPLEVBQUUsT0FBTztJQUNsQixHQUFFLFNBQVMsRUFBRTtNQUNaOzs7Ozs7Ozs7S0NyRUQsSUFBSSxXQUFXLEdBQUdSLDBCQUE2QyxFQUFBO0tBQy9ELElBQUksS0FBSyxHQUFHQyxZQUE2QixFQUFBO0tBQ3pDLElBQUksVUFBVSxHQUFHQyxpQkFBbUMsRUFBQTtLQUNwRCxJQUFJLE1BQU0sR0FBR0UscUJBQXdDLEVBQUE7S0FDckQsSUFBSSxXQUFXLEdBQUdDLGtCQUFtQyxFQUFBO0lBQ3JELENBQUEsSUFBSSwwQkFBMEIsR0FBR0MsbUJBQXFDLEVBQUEsQ0FBQyxZQUFZO0tBQ25GLElBQUksYUFBYSxHQUFHQyxvQkFBc0MsRUFBQTtLQUMxRCxJQUFJLG1CQUFtQixHQUFHQyxvQkFBc0MsRUFBQTs7SUFFaEUsQ0FBQSxJQUFJLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLE9BQU87SUFDdEQsQ0FBQSxJQUFJLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEdBQUc7S0FDOUMsSUFBSSxPQUFPLEdBQUcsTUFBTTtJQUNwQjtJQUNBLENBQUEsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWM7SUFDMUMsQ0FBQSxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFBLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUEsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7O0lBRS9CLENBQUEsSUFBSSxtQkFBbUIsR0FBRyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtJQUM1RCxHQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksZUFBZSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO0lBQ3pGLEVBQUMsQ0FBQzs7S0FFRixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzs7S0FFN0MsSUFBSUMsYUFBVyxHQUFHQyxXQUFBLENBQUEsT0FBYyxHQUFHLFVBQVUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7SUFDbkUsR0FBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtJQUN0RCxLQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHO0lBQzVFO09BQ0UsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUk7T0FDbkQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUk7SUFDckQsR0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSywwQkFBMEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0lBQ3JGLEtBQUksSUFBSSxXQUFXLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN2RixVQUFTLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSTtJQUMxQjtJQUNBLEdBQUUsSUFBSSxtQkFBbUIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUU7SUFDcEcsS0FBSSxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0Q7SUFDQSxHQUFFLElBQUk7SUFDTixLQUFJLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtJQUMxRSxPQUFNLElBQUksV0FBVyxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzlFO1VBQ0ssTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTO1FBQ3hELENBQUMsT0FBTyxLQUFLLEVBQUU7SUFDbEIsR0FBRSxJQUFJLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7T0FDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDaEMsS0FBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkUsQ0FBQyxPQUFPLEtBQUs7TUFDZjs7SUFFRDtJQUNBO0tBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUdELGFBQVcsQ0FBQyxTQUFTLFFBQVEsR0FBRztJQUM5RCxHQUFFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDO01BQ2hGLEVBQUUsVUFBVSxDQUFDOzs7Ozs7Ozs7O0tDckRkLElBQUksV0FBVyxHQUFHVCxrQkFBcUMsRUFBQTtLQUN2RCxJQUFJLGNBQWMsR0FBR0MsMkJBQThDLEVBQUE7O0lBRW5FLENBQUEscUJBQWMsR0FBRyxVQUFVLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQ3JELEdBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6RSxHQUFFLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7T0FDdkUsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO01BQ2xEOzs7Ozs7Ozs7O0tDUEQsSUFBSSxRQUFRLEdBQUdELGVBQWlDLEVBQUE7O0lBRWhEO0lBQ0E7SUFDQSxDQUFBLFdBQWMsR0FBRyxZQUFZO0lBQzdCLEdBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztPQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFO0lBQ2pCLEdBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ3BDLEdBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2hDLEdBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ3BDLEdBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ25DLEdBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2hDLEdBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2pDLEdBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ3JDLEdBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHO0lBQ2hDLEdBQUUsT0FBTyxNQUFNO01BQ2Q7Ozs7Ozs7OztLQ2hCRCxJQUFJLFVBQVUsR0FBR0EsaUJBQW1DLEVBQUE7S0FDcEQsSUFBSSxXQUFXLEdBQUdDLGtCQUFtQyxFQUFBO0tBQ3JELElBQUkscUJBQXFCLEdBQUdDLDRCQUFnRCxFQUFBO0tBQzVFLElBQUksV0FBVyxHQUFHRSxrQkFBb0MsRUFBQTtLQUN0RCxJQUFJLEtBQUssR0FBR0MsWUFBNkIsRUFBQTs7SUFFekM7SUFDQSxDQUFBLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNO0lBQzlCLENBQUEsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVM7O0lBRXRDLENBQUEsSUFBSSxNQUFNLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZO09BQzVDLElBQUksZUFBZSxHQUFHLElBQUk7SUFDNUIsR0FBRSxJQUFJO0lBQ04sS0FBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNqQixDQUFDLE9BQU8sS0FBSyxFQUFFO1NBQ2QsZUFBZSxHQUFHLEtBQUs7SUFDM0I7O09BRUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNaO09BQ0UsSUFBSSxLQUFLLEdBQUcsRUFBRTtJQUNoQixHQUFFLElBQUksUUFBUSxHQUFHLGVBQWUsR0FBRyxRQUFRLEdBQUcsT0FBTzs7SUFFckQsR0FBRSxJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDdEM7U0FDSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWTtXQUMvQyxLQUFLLElBQUksR0FBRztJQUNsQixPQUFNLE9BQU8sSUFBSTtJQUNqQixNQUFLLEVBQUUsQ0FBQztRQUNMOztPQUVELElBQUksS0FBSyxHQUFHO1NBQ1YsTUFBTSxFQUFFLEdBQUc7U0FDWCxNQUFNLEVBQUUsR0FBRztTQUNYLFVBQVUsRUFBRSxHQUFHO1NBQ2YsU0FBUyxFQUFFLEdBQUc7SUFDbEIsS0FBSSxNQUFNLEVBQUU7UUFDVDs7SUFFSCxHQUFFLElBQUksZUFBZSxFQUFFLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRzs7SUFFN0MsR0FBRSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFbkQ7SUFDQSxHQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRXBGLEdBQUUsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxRQUFRO0lBQ2xELEVBQUMsQ0FBQzs7SUFFRjtJQUNBO0lBQ0EsQ0FBQSxJQUFJLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFO09BQzFELFlBQVksRUFBRSxJQUFJO0lBQ3BCLEdBQUUsR0FBRyxFQUFFO0lBQ1AsRUFBQyxDQUFDOzs7Ozs7SUNmRixNQUFNTSxZQUFZLEdBQTJCO0lBQzNDQyxFQUFBQSxnQkFBZ0IsRUFBRSx1Q0FBdUM7SUFDekRDLEVBQUFBLGNBQWMsRUFBRSxpQkFBaUI7SUFDakNDLEVBQUFBLE1BQU0sRUFBRSw4QkFBOEI7SUFDdENDLEVBQUFBLEtBQUssRUFBRSxvSUFBb0k7SUFBRTtJQUM3SUMsRUFBQUEsV0FBVyxFQUFFLHVDQUF1QztJQUNwREMsRUFBQUEsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsRUFBQUEsV0FBVyxFQUFFLHVCQUF1QjtJQUNwQ0MsRUFBQUEsV0FBVyxFQUFFLCtDQUErQztJQUM1REMsRUFBQUEsTUFBTSxFQUFFLCtCQUErQjtJQUN2Q0MsRUFBQUEsZUFBZSxFQUFFLGtCQUFrQjtJQUNuQ0MsRUFBQUEsU0FBUyxFQUFFLHFCQUFxQjtJQUNoQ0MsRUFBQUEsYUFBYSxFQUFFLGdEQUFnRDtJQUMvREMsRUFBQUEsWUFBWSxFQUFFLHFEQUFxRDtJQUNuRUMsRUFBQUEsUUFBUSxFQUFFO0tBQ1g7SUFFRDtJQUNPLE1BQU1DLGtCQUFrQixHQUFHLElBQUlDLE1BQU0sQ0FBQyxxcERBQXFwRCxDQUFDO0lBRTVyRCxNQUFNQyxtQkFBbUIsR0FBRyxJQUFJRCxNQUFNLENBQUMscXBEQUFxcEQsQ0FBQztJQUVwc0Q7O0lBRUc7SUFDSSxNQUFNRSxXQUFXLEdBQWdDO0lBQ3REQyxFQUFBQSxJQUFJLEVBQUU7SUFDSkMsSUFBQUEsTUFBTSxFQUFFLG1DQUFtQztJQUMzQ0MsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDREMsRUFBQUEsSUFBSSxFQUFFO0lBQ0pGLElBQUFBLE1BQU0sRUFBRSxvQ0FBb0M7SUFDNUNDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RFLEVBQUFBLElBQUksRUFBRTtJQUNKSCxJQUFBQSxNQUFNLEVBQUUscUNBQXFDO0lBQzdDQyxJQUFBQSxXQUFXLEVBQUU7T0FDZDtJQUNERyxFQUFBQSxJQUFJLEVBQUU7SUFDSkosSUFBQUEsTUFBTSxFQUFFLHNDQUFzQztJQUM5Q0MsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDREksRUFBQUEsSUFBSSxFQUFFO0lBQ0pMLElBQUFBLE1BQU0sRUFBRSx1Q0FBdUM7SUFDL0NDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RLLEVBQUFBLElBQUksRUFBRTtJQUNKTixJQUFBQSxNQUFNLEVBQUUsd0NBQXdDO0lBQ2hEQyxJQUFBQSxXQUFXLEVBQUU7T0FDZDtJQUNETSxFQUFBQSxZQUFZLEVBQUU7SUFDWlAsSUFBQUEsTUFBTSxFQUFFLHFCQUFxQjtJQUM3QkMsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDRE8sRUFBQUEsdUJBQXVCLEVBQUU7SUFDdkJSLElBQUFBLE1BQU0sRUFBRSx5Q0FBeUM7SUFDakRDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RRLEVBQUFBLG9CQUFvQixFQUFFO0lBQ3BCVCxJQUFBQSxNQUFNLEVBQUUsc0NBQXNDO0lBQzlDQyxJQUFBQSxXQUFXLEVBQUU7T0FDZDtJQUNEUyxFQUFBQSx3QkFBd0IsRUFBRTtJQUN4QlYsSUFBQUEsTUFBTSxFQUFFLDhCQUE4QjtJQUN0Q0MsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDRFUsRUFBQUEscUJBQXFCLEVBQUU7SUFDckJYLElBQUFBLE1BQU0sRUFBRSw4QkFBOEI7SUFDdENDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RXLEVBQUFBLFdBQVcsRUFBRTtJQUNYWixJQUFBQSxNQUFNLEVBQUUsWUFBWTtJQUNwQkMsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDRFksRUFBQUEsZ0JBQWdCLEVBQUU7SUFDaEJiLElBQUFBLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCQyxJQUFBQSxXQUFXLEVBQUU7T0FDZDtJQUNEYSxFQUFBQSxnQkFBZ0IsRUFBRTtJQUNoQmQsSUFBQUEsTUFBTSxFQUFFLGVBQWU7SUFDdkJDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RjLEVBQUFBLElBQUksRUFBRTtJQUNKZixJQUFBQSxNQUFNLEVBQUUseUZBQXlGO0lBQ2pHQyxJQUFBQSxXQUFXLEVBQUU7T0FDZDtJQUNEZSxFQUFBQSxJQUFJLEVBQUU7SUFDSmhCLElBQUFBLE1BQU0sRUFBRSwyQkFBMkI7SUFDbkNDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0RnQixFQUFBQSxJQUFJLEVBQUU7SUFDSmpCLElBQUFBLE1BQU0sRUFBRSxpQ0FBaUM7SUFDekNDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0Q7SUFDQWlCLEVBQUFBLGNBQWMsRUFBRTtJQUNkbEIsSUFBQUEsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QkMsSUFBQUEsV0FBVyxFQUFFO09BQ2Q7SUFDRGtCLEVBQUFBLHlCQUF5QixFQUFFO0lBQ3pCO0lBQ0FuQixJQUFBQSxNQUFNLEVBQUUsNEtBQTRLO0lBQ3BMQyxJQUFBQSxXQUFXLEVBQUUsMFFBQTBRO1FBQ3ZSbUIsZ0JBQWdCLEVBQUUsQ0FBQztJQUNwQjtLQUNGO0lBRUQ7O0lBRUc7SUFDSSxNQUFNQyxnQkFBZ0IsR0FBb0IsQ0FDL0M7SUFBRUMsRUFBQUEsS0FBSyxFQUFFLHlDQUF5QztJQUFFQyxFQUFBQSxHQUFHLEVBQUUsbUNBQW1DO0lBQUVDLEVBQUFBLGFBQWEsRUFBRTtJQUFNLENBQUEsRUFDbkg7SUFBRUYsRUFBQUEsS0FBSyxFQUFFLGFBQWE7SUFBRUMsRUFBQUEsR0FBRyxFQUFFLEtBQUs7SUFBRUMsRUFBQUEsYUFBYSxFQUFFO0lBQU0sQ0FBQSxFQUN6RDtJQUFFRixFQUFBQSxLQUFLLEVBQUUsWUFBWTtJQUFFQyxFQUFBQSxHQUFHLEVBQUUsS0FBSztJQUFFQyxFQUFBQSxhQUFhLEVBQUU7SUFBTSxDQUFBLEVBQ3hEO0lBQUVGLEVBQUFBLEtBQUssRUFBRSxnQkFBZ0I7SUFBRUMsRUFBQUEsR0FBRyxFQUFFLEdBQUc7SUFBRUMsRUFBQUEsYUFBYSxFQUFHO0lBQUssQ0FBQSxFQUMxRDtJQUFFRixFQUFBQSxLQUFLLEVBQUUsb0JBQW9CO0lBQUVDLEVBQUFBLEdBQUcsRUFBRSxPQUFPO0lBQUVDLEVBQUFBLGFBQWEsRUFBRztJQUFLLENBQUEsRUFDbEU7SUFBRUYsRUFBQUEsS0FBSyxFQUFFLDZDQUE2QztJQUFFQyxFQUFBQSxHQUFHLEVBQUUsS0FBSztJQUFFQyxFQUFBQSxhQUFhLEVBQUU7SUFBSyxDQUFBLEVBQ3hGO0lBQUVGLEVBQUFBLEtBQUssRUFBRSx5Q0FBeUM7SUFBRUMsRUFBQUEsR0FBRyxFQUFFLEtBQUs7SUFBRUMsRUFBQUEsYUFBYSxFQUFFO0lBQU0sQ0FBQSxDQUN0RjtJQUVEOzs7O0lBSUc7SUFDSSxNQUFNQyxhQUFhLEdBQWdDO0lBQ3hEQyxFQUFBQSxNQUFNLEVBQUc7SUFDUDFCLElBQUFBLE1BQU0sRUFBRSx1QkFBdUI7SUFDL0JDLElBQUFBLFdBQVcsRUFBRztPQUNmO0lBQ0RqSCxFQUFBQSxJQUFJLEVBQUc7SUFDTGdILElBQUFBLE1BQU0sRUFBRSxxQ0FBcUM7SUFDN0NDLElBQUFBLFdBQVcsRUFBRztPQUNmO0lBQ0QwQixFQUFBQSxRQUFRLEVBQUc7SUFDVDNCLElBQUFBLE1BQU0sRUFBRSxvQ0FBb0M7SUFDNUNDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0QyQixFQUFBQSxJQUFJLEVBQUc7SUFDTDVCLElBQUFBLE1BQU0sRUFBRSxrR0FBa0c7SUFDMUdDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0Q0QixFQUFBQSxRQUFRLEVBQUc7SUFDVDdCLElBQUFBLE1BQU0sRUFBRSxLQUFLO0lBQ2JDLElBQUFBLFdBQVcsRUFBRTtPQUNkO0lBQ0Q2QixFQUFBQSxTQUFTLEVBQUc7SUFDVjlCLElBQUFBLE1BQU0sRUFBRSxNQUFNO0lBQ2RDLElBQUFBLFdBQVcsRUFBRztPQUNmO0lBQ0Q4QixFQUFBQSxTQUFTLEVBQUc7SUFDVi9CLElBQUFBLE1BQU0sRUFBRSwwQkFBMEI7SUFDbENDLElBQUFBLFdBQVcsRUFBRSxFQUFFO0lBQ2ZtQixJQUFBQSxnQkFBZ0IsRUFBRTtPQUNuQjtJQUNEWSxFQUFBQSxPQUFPLEVBQUc7SUFDUmhDLElBQUFBLE1BQU0sRUFBRSwwQkFBMEI7SUFDbENDLElBQUFBLFdBQVcsRUFBRTtJQUNkO0tBQ0Y7SUFFRDtJQUNBLE1BQU1nQyxpQkFBaUIsR0FBRyxJQUFJckMsTUFBTSxDQUFDcEQsTUFBTSxDQUFDRSxJQUFJLENBQUNrQyxZQUFZLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6RTtJQUNBLE1BQU02RSxXQUFXLEdBQUcsQ0FBQyxHQUFHMUYsTUFBTSxDQUFDRSxJQUFJLENBQUMrRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxLQUFLLElBQUlVLElBQUksSUFBSUQsV0FBVyxFQUFFO01BQzVCLElBQUlFLEVBQUUsR0FBR1gsYUFBYSxDQUFDVSxJQUFJLENBQUMsQ0FBQ25DLE1BQU0sQ0FBQ3FDLE1BQU07SUFDMUM7SUFDQSxFQUFBLE9BQU9ELEVBQUUsQ0FBQ25GLEtBQUssQ0FBQ2dGLGlCQUFpQixDQUFDLEVBQUU7UUFDbENHLEVBQUUsR0FBR0EsRUFBRSxDQUFDRSxPQUFPLENBQUNMLGlCQUFpQixFQUFHTSxNQUFNO0lBQU8sTUFBQSxPQUFPM0QsWUFBWSxDQUFDMkQsTUFBTSxDQUFDLENBQUNGLE1BQU07SUFBRSxLQUFDLENBQUM7SUFDekY7SUFDQVosRUFBQUEsYUFBYSxDQUFDVSxJQUFJLENBQUMsQ0FBQ25DLE1BQU0sR0FBRyxJQUFJSixNQUFNLENBQUN3QyxFQUFFLEVBQUVYLGFBQWEsQ0FBQ1UsSUFBSSxDQUFDLENBQUNuQyxNQUFNLENBQUN3QyxLQUFLLENBQUM7SUFDL0U7SUFFQTtJQUNBLEtBQUssSUFBSUwsSUFBSSxJQUFJZCxnQkFBZ0IsRUFBRTtJQUNqQyxFQUFBLElBQUllLEVBQUUsR0FBR0QsSUFBSSxDQUFDYixLQUFLLENBQUNlLE1BQU07SUFDMUI7SUFDQSxFQUFBLE9BQU9ELEVBQUUsQ0FBQ25GLEtBQUssQ0FBQ2dGLGlCQUFpQixDQUFDLEVBQUU7UUFDbENHLEVBQUUsR0FBR0EsRUFBRSxDQUFDRSxPQUFPLENBQUNMLGlCQUFpQixFQUFHTSxNQUFNO0lBQU8sTUFBQSxPQUFPM0QsWUFBWSxDQUFDMkQsTUFBTSxDQUFDLENBQUNGLE1BQU07SUFBRSxLQUFDLENBQUM7SUFDekY7SUFDQUYsRUFBQUEsSUFBSSxDQUFDYixLQUFLLEdBQUcsSUFBSTFCLE1BQU0sQ0FBQ3dDLEVBQUUsRUFBRUQsSUFBSSxDQUFDYixLQUFLLENBQUNrQixLQUFLLENBQUM7SUFDL0M7SUFFQTs7Ozs7SUFLRztJQUNhLFNBQUFDLHlCQUF5QkEsR0FBOEM7SUFBQSxFQUFBLElBQTdDQyxXQUFBLEdBQUFDLFNBQUEsQ0FBQTVGLE1BQUEsR0FBQSxDQUFBLElBQUE0RixTQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEvRSxTQUFBLEdBQUErRSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQTJDLEVBQUU7SUFDckYsRUFBQSxNQUFNQyxNQUFNLEdBQUc7UUFBRSxHQUFHbkI7T0FBZTtJQUVuQztJQUNBLEVBQUEsS0FBSyxNQUFNLENBQUNvQixRQUFRLEVBQUVWLElBQUksQ0FBQyxJQUFJM0YsTUFBTSxDQUFDc0csT0FBTyxDQUFDSixXQUFXLENBQUMsRUFBRTtJQUMxRDtJQUNBLElBQUEsTUFBTUssYUFBYSxHQUFHO1VBQUUsR0FBR1o7U0FBTTtJQUVqQztJQUNBLElBQUEsSUFBSWEsWUFBWSxHQUFHYixJQUFJLENBQUNuQyxNQUFNLENBQUNxQyxNQUFNO0lBQ3JDLElBQUEsTUFBTUosaUJBQWlCLEdBQUcsSUFBSXJDLE1BQU0sQ0FBQ3BELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDa0MsWUFBWSxDQUFDLENBQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekU7SUFDQSxJQUFBLE9BQU8yRixZQUFZLENBQUMvRixLQUFLLENBQUNnRixpQkFBaUIsQ0FBQyxFQUFFO1VBQzVDZSxZQUFZLEdBQUdBLFlBQVksQ0FBQ1YsT0FBTyxDQUFDTCxpQkFBaUIsRUFBR2hGLEtBQUssSUFBSTtJQUMvRCxRQUFBLE9BQU8yQixZQUFZLENBQUMzQixLQUFLLENBQUMsQ0FBQ29GLE1BQU07SUFDbkMsT0FBQyxDQUFDO0lBQ0o7SUFFQVUsSUFBQUEsYUFBYSxDQUFDL0MsTUFBTSxHQUFHLElBQUlKLE1BQU0sQ0FBQ29ELFlBQVksRUFBRWIsSUFBSSxDQUFDbkMsTUFBTSxDQUFDd0MsS0FBSyxDQUFDO0lBQ2xFSSxJQUFBQSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxHQUFHRSxhQUFhO0lBQ2xDO0lBRUEsRUFBQSxPQUFPSCxNQUFNO0lBQ2Y7SUFFQTs7OztJQUlHO0lBQ0csU0FBVUssVUFBVUEsQ0FBQ1YsTUFBYyxFQUFBO01BQ3ZDLE9BQU8sQ0FBQ0EsTUFBTSxHQUFHQSxNQUFNLEdBQUcsRUFBRSxFQUN6QkQsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FDdEJBLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQ3JCQSxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQjtJQUVBOzs7Ozs7Ozs7OztJQVdHO0lBQ0ksTUFBTWpILFFBQVEsR0FBNEI7SUFDL0M7SUFDQXZDLEVBQUFBLElBQUksRUFBRTtJQUNKb0ssSUFBQUEsSUFBSSxFQUFFLFFBQVE7SUFDZC9HLElBQUFBLFNBQVMsRUFBRSxVQUFVO0lBQ3JCZ0gsSUFBQUEsR0FBRyxFQUFFO0lBQUNDLE1BQUFBLEdBQUcsRUFBRSxJQUFJO0lBQUVDLE1BQUFBLElBQUksRUFBRTtTQUFLO0lBQzVCQyxJQUFBQSxLQUFLLEVBQUU7SUFBQ0MsTUFBQUEsVUFBVSxFQUFFLGNBQWM7SUFBRUMsTUFBQUEsV0FBVyxFQUFFO0lBQWU7T0FDakU7SUFDRG5LLEVBQUFBLE1BQU0sRUFBRTtJQUNONkosSUFBQUEsSUFBSSxFQUFFLFFBQVE7SUFDZC9HLElBQUFBLFNBQVMsRUFBRSxNQUFNO0lBQ2pCZ0gsSUFBQUEsR0FBRyxFQUFFO0lBQUNDLE1BQUFBLEdBQUcsRUFBRSxHQUFHO0lBQUVDLE1BQUFBLElBQUksRUFBRTtTQUFJO0lBQzFCQyxJQUFBQSxLQUFLLEVBQUU7SUFBQ0MsTUFBQUEsVUFBVSxFQUFFLFdBQVc7SUFBRUMsTUFBQUEsV0FBVyxFQUFFO0lBQVk7T0FDM0Q7SUFDRHhLLEVBQUFBLElBQUksRUFBRTtJQUNKa0ssSUFBQUEsSUFBSSxFQUFFLFFBQVE7SUFDZC9HLElBQUFBLFNBQVMsRUFBRSxRQUFRO0lBQ25CZ0gsSUFBQUEsR0FBRyxFQUFFO0lBQUNDLE1BQUFBLEdBQUcsRUFBRSxHQUFHO0lBQUVDLE1BQUFBLElBQUksRUFBRTtTQUFJO0lBQzFCQyxJQUFBQSxLQUFLLEVBQUU7SUFBQ0MsTUFBQUEsVUFBVSxFQUFFLEtBQUs7SUFBRUMsTUFBQUEsV0FBVyxFQUFFO0lBQU0sS0FBQTtPQUMvQztJQUNEL0osRUFBQUEsYUFBYSxFQUFFO0lBQ2J5SixJQUFBQSxJQUFJLEVBQUUsUUFBUTtJQUNkL0csSUFBQUEsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QmdILElBQUFBLEdBQUcsRUFBRTtJQUFDQyxNQUFBQSxHQUFHLEVBQUUsSUFBSTtJQUFFQyxNQUFBQSxJQUFJLEVBQUU7U0FBSztJQUM1QkMsSUFBQUEsS0FBSyxFQUFFO0lBQUNDLE1BQUFBLFVBQVUsRUFBQyxLQUFLO0lBQUVDLE1BQUFBLFdBQVcsRUFBRTtJQUFPO09BQy9DO0lBQ0R2SyxFQUFBQSxFQUFFLEVBQUU7SUFDRmlLLElBQUFBLElBQUksRUFBRSxNQUFNO0lBQ1ovRyxJQUFBQSxTQUFTLEVBQUUsTUFBTTtJQUNqQmdILElBQUFBLEdBQUcsRUFBRTtJQUFDTSxNQUFBQSxPQUFPLEVBQUUscURBQXFEO0lBQUV4RCxNQUFBQSxXQUFXLEVBQUU7U0FBTztJQUMxRnFELElBQUFBLEtBQUssRUFBRTtJQUFDRyxNQUFBQSxPQUFPLEVBQUUsb0NBQW9DO0lBQUV4RCxNQUFBQSxXQUFXLEVBQUU7SUFBSztPQUMxRTtJQUNEL0csRUFBQUEsRUFBRSxFQUFFO0lBQ0ZnSyxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVE7SUFDM0ZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHFDQUFxQztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDM0U7SUFDRHlELEVBQUFBLEVBQUUsRUFBRTtJQUNGUixJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVM7SUFDNUZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHNDQUFzQztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDNUU7SUFDRDBELEVBQUFBLEVBQUUsRUFBRTtJQUNGVCxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVU7SUFDN0ZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHVDQUF1QztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDN0U7SUFDRDJELEVBQUFBLEVBQUUsRUFBRTtJQUNGVixJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVc7SUFDOUZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHdDQUF3QztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDOUU7SUFDRDRELEVBQUFBLEVBQUUsRUFBRTtJQUNGWCxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVk7SUFDL0ZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHlDQUF5QztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDL0U7SUFDRHZHLEVBQUFBLEVBQUUsRUFBRTtJQUNGd0osSUFBQUEsSUFBSSxFQUFFLE1BQU07SUFDWi9HLElBQUFBLFNBQVMsRUFBRSxNQUFNO0lBQ2pCZ0gsSUFBQUEsR0FBRyxFQUFFO0lBQUNNLE1BQUFBLE9BQU8sRUFBRSxxREFBcUQ7SUFBRXhELE1BQUFBLFdBQVcsRUFBRTtTQUFPO0lBQzFGcUQsSUFBQUEsS0FBSyxFQUFFO0lBQUNHLE1BQUFBLE9BQU8sRUFBRSwyQkFBMkI7SUFBRXhELE1BQUFBLFdBQVcsRUFBRTtJQUFLO09BQ2pFO0lBQ0QxRyxFQUFBQSxFQUFFLEVBQUU7SUFDRjJKLElBQUFBLElBQUksRUFBRSxNQUFNO0lBQ1ovRyxJQUFBQSxTQUFTLEVBQUUsTUFBTTtJQUNqQmdILElBQUFBLEdBQUcsRUFBRTtJQUFDTSxNQUFBQSxPQUFPLEVBQUUscURBQXFEO0lBQUV4RCxNQUFBQSxXQUFXLEVBQUU7U0FBUztJQUM1RnFELElBQUFBLEtBQUssRUFBRTtJQUFDRyxNQUFBQSxPQUFPLEVBQUUsaUNBQWlDO0lBQUV4RCxNQUFBQSxXQUFXLEVBQUU7SUFBSztPQUN2RTtJQUNEcEgsRUFBQUEsVUFBVSxFQUFFO0lBQ1ZxSyxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLGNBQWM7SUFDekJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQU87SUFDMUZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHFCQUFxQjtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7SUFDM0Q7S0FDRjs7VUN0VFk2RCxNQUFNLENBQUE7SUE2QmpCNUksRUFBQUEsV0FBQUEsR0FBbUM7SUFBQSxJQUFBLElBQXZCQyw0RUFBcUIsRUFBRTtRQTVCNUIsSUFBQyxDQUFBQyxDQUFBLEdBQTBCLElBQUk7UUFDL0IsSUFBUSxDQUFBMkksUUFBQSxHQUErQixJQUFJO1FBQzNDLElBQUssQ0FBQUMsS0FBQSxHQUFhLEVBQUU7UUFDcEIsSUFBWSxDQUFBQyxZQUFBLEdBQXlELEVBQUU7UUFDdkUsSUFBUyxDQUFBQyxTQUFBLEdBQWEsRUFBRTtRQUN4QixJQUFZLENBQUFDLFlBQUEsR0FBc0IsRUFBRTtRQUNwQyxJQUFnQixDQUFBQyxnQkFBQSxHQUFhLEVBQUU7UUFDL0IsSUFBVSxDQUFBQyxVQUFBLEdBQWEsRUFBRTtRQUN6QixJQUFTLENBQUFDLFNBQUEsR0FBYyxFQUFFO1FBQ3pCLElBQWdCLENBQUFDLGdCQUFBLEdBQTBDLElBQUk7SUFDN0QsSUFBQSxJQUFtQixDQUFBQyxtQkFBQSxHQUFnQyxFQUFFO1FBQ3JELElBQW1CLENBQUFDLG1CQUFBLEdBQWdDaEQsYUFBYTtRQUVqRSxJQUFBLENBQUFpRCxTQUFTLEdBSVo7SUFDRkMsTUFBQUEsTUFBTSxFQUFFLEVBQUU7SUFDVkMsTUFBQUEsU0FBUyxFQUFFLEVBQUU7SUFDYkMsTUFBQUEsSUFBSSxFQUFFO1NBQ1A7UUFFTyxJQUFTLENBQUFDLFNBQUEsR0FBbUIsRUFBRTtRQUM5QixJQUFTLENBQUFDLFNBQUEsR0FBbUIsRUFBRTtRQUM5QixJQUFrQixDQUFBQyxrQkFBQSxHQUFZLEtBQUs7UUFDbkMsSUFBVSxDQUFBQyxVQUFBLEdBQVcsR0FBRztRQUc5QixJQUFJLENBQUM3SixDQUFDLEdBQUcsSUFBSTtRQUNiLElBQUksQ0FBQzJJLFFBQVEsR0FBRyxJQUFJO1FBQ3BCLElBQUksQ0FBQ0MsS0FBSyxHQUFHLEVBQUU7UUFDZixJQUFJLENBQUNDLFlBQVksR0FBRyxFQUFpQjtRQUNyQyxJQUFJLENBQUNDLFNBQVMsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQ0MsWUFBWSxHQUFHLEVBQUU7UUFDdEIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxFQUFFO1FBQzFCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUk7UUFDNUIsSUFBSSxDQUFDQyxtQkFBbUIsR0FBR3JKLEtBQUssQ0FBQ3FKLG1CQUFtQixJQUFJLEVBQUU7UUFDMUQsSUFBSSxDQUFDQyxtQkFBbUIsR0FBR2hDLHlCQUF5QixDQUFDLElBQUksQ0FBQytCLG1CQUFtQixDQUFDO1FBRTlFLElBQUksQ0FBQ0UsU0FBUyxHQUFHO0lBQ2ZDLE1BQUFBLE1BQU0sRUFBRSxFQUFFO0lBQ1ZDLE1BQUFBLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLE1BQUFBLElBQUksRUFBRTtTQUNQO1FBRUQsSUFBSXBKLE9BQU8sR0FBdUIsSUFBSTtJQUN0QyxJQUFBLElBQUksT0FBT04sS0FBSyxDQUFDTSxPQUFPLEtBQUssUUFBUSxFQUFFO1VBQ3JDQSxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDUixLQUFLLENBQUNNLE9BQU8sQ0FBQztJQUNsRCxLQUFDLE1BQU0sSUFBSU4sS0FBSyxDQUFDTSxPQUFPLEVBQUU7VUFDeEJBLE9BQU8sR0FBR04sS0FBSyxDQUFDTSxPQUFPO0lBQ3pCO0lBRUEsSUFBQSxJQUFJLE9BQU9OLEtBQUssQ0FBQzRJLFFBQVEsS0FBSyxRQUFRLEVBQUU7VUFDdEMsSUFBSSxDQUFDQSxRQUFRLEdBQUdySSxRQUFRLENBQUNDLGNBQWMsQ0FBQ1IsS0FBSyxDQUFDNEksUUFBUSxDQUF3QjtJQUNoRixLQUFDLE1BQU0sSUFBSTVJLEtBQUssQ0FBQzRJLFFBQVEsRUFBRTtJQUN6QixNQUFBLElBQUksQ0FBQ0EsUUFBUSxHQUFHNUksS0FBSyxDQUFDNEksUUFBUTtJQUNoQztRQUVBLElBQUksSUFBSSxDQUFDQSxRQUFRLEVBQUU7SUFDakIsTUFBQSxJQUFJLENBQUN0SSxPQUFPLEVBQUVBLE9BQU8sR0FBRyxJQUFJLENBQUNzSSxRQUFRO0lBQ3ZDO1FBRUEsSUFBSSxDQUFDdEksT0FBTyxFQUFFO1VBQ1pBLE9BQU8sR0FBR0MsUUFBUSxDQUFDd0osb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BEO0lBQ0EsSUFBQSxJQUFJekosT0FBTyxJQUFJQSxPQUFPLENBQUMwSixPQUFPLEtBQUssVUFBVSxFQUFFO1VBQzdDLElBQUksQ0FBQ3BCLFFBQVEsR0FBR3RJLE9BQThCO0lBQzlDQSxNQUFBQSxPQUFPLEdBQUcsSUFBSSxDQUFDc0ksUUFBUSxDQUFDcUIsVUFBeUI7SUFDbkQ7UUFFQSxJQUFJLElBQUksQ0FBQ3JCLFFBQVEsRUFBRTtJQUNqQixNQUFBLElBQUksQ0FBQ0EsUUFBUSxDQUFDc0IsS0FBSyxDQUFDQyxPQUFPLEdBQUcsTUFBTTtJQUN0QztRQUVBLElBQUksQ0FBQ1IsU0FBUyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUNDLGtCQUFrQixHQUFHLEtBQUs7UUFDL0IsSUFBSSxDQUFDQyxVQUFVLEdBQUcsR0FBRztJQUVyQixJQUFBLElBQUksQ0FBQ00sbUJBQW1CLENBQUM5SixPQUFPLEVBQUVOLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUNxSyxVQUFVLENBQ2IsT0FBT3JLLEtBQUssQ0FBQ3NLLE9BQU8sS0FBSyxRQUFRLEdBQzdCdEssS0FBSyxDQUFDc0ssT0FBTyxHQUNiLElBQUksQ0FBQzFCLFFBQVEsR0FDYixJQUFJLENBQUNBLFFBQVEsQ0FBQzJCLEtBQUssR0FDbkIsaUNBQWlDLENBQ3RDO0lBRUQsSUFBQSxJQUFJLENBQUN0SyxDQUFFLENBQUNVLGdCQUFnQixDQUFDLFNBQVMsRUFBR1YsQ0FBQyxJQUFLLElBQUksQ0FBQ3VLLGlCQUFpQixDQUFDdkssQ0FBQyxDQUFDLENBQUM7SUFDdkU7TUFFQSxJQUFJTCxPQUFPQSxHQUFBO0lBQ1QsSUFBQSxPQUFPLElBQUksQ0FBQytKLFNBQVMsQ0FBQy9ILE1BQU0sSUFBSSxDQUFDO0lBQ25DO01BRUEsSUFBSS9CLE9BQU9BLEdBQUE7SUFDVCxJQUFBLE9BQU8sSUFBSSxDQUFDK0osU0FBUyxDQUFDaEksTUFBTSxHQUFHLENBQUM7SUFDbEM7SUFFUTZJLEVBQUFBLFdBQVdBLEdBQUE7UUFDakIsSUFBSSxJQUFJLENBQUNaLGtCQUFrQixFQUFFO1FBQzdCLElBQUksQ0FBQ2EsZ0JBQWdCLEVBQUU7UUFDdkIsSUFBSSxDQUFDZCxTQUFTLEdBQUcsRUFBRTtJQUNyQjtJQUVRYyxFQUFBQSxnQkFBZ0JBLEdBQUE7SUFDdEIsSUFBQSxJQUFJLENBQUNmLFNBQVMsQ0FBQzlILElBQUksQ0FBQztJQUNsQnlJLE1BQUFBLE9BQU8sRUFBRSxJQUFJLENBQUNLLFVBQVUsRUFBRTtJQUMxQmxCLE1BQUFBLFNBQVMsRUFBRSxJQUFJLENBQUNtQixZQUFZLEVBQUU7SUFDOUJuTCxNQUFBQSxNQUFNLEVBQUUsSUFBSSxDQUFDbUwsWUFBWSxDQUFDLElBQUk7SUFDL0IsS0FBQSxDQUFDO0lBQ0YsSUFBQSxJQUFJLElBQUksQ0FBQ2pCLFNBQVMsQ0FBQy9ILE1BQU0sR0FBRyxJQUFJLENBQUNrSSxVQUFVLEVBQUUsSUFBSSxDQUFDSCxTQUFTLENBQUNrQixLQUFLLEVBQUU7SUFDckU7SUFFT3JNLEVBQUFBLElBQUlBLEdBQUE7SUFDVCxJQUFBLElBQUksSUFBSSxDQUFDbUwsU0FBUyxDQUFDL0gsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUNpSSxrQkFBa0IsR0FBRyxJQUFJO1FBQzlCLElBQUksQ0FBQ2EsZ0JBQWdCLEVBQUU7UUFDdkIsTUFBTUksT0FBTyxHQUFHLElBQUksQ0FBQ25CLFNBQVMsQ0FBQ29CLEdBQUcsRUFBRztJQUNyQyxJQUFBLElBQUksQ0FBQ25CLFNBQVMsQ0FBQy9ILElBQUksQ0FBQ2lKLE9BQU8sQ0FBQztJQUM1QixJQUFBLE1BQU1FLElBQUksR0FBRyxJQUFJLENBQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUMvSCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUEsSUFBSSxDQUFDeUksVUFBVSxDQUFDVyxJQUFJLENBQUNWLE9BQU8sQ0FBQztJQUM3QixJQUFBLElBQUlVLElBQUksQ0FBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUN3QixZQUFZLENBQUNELElBQUksQ0FBQ3ZCLFNBQVMsRUFBRXVCLElBQUksQ0FBQ3ZMLE1BQU0sQ0FBQztJQUNsRSxJQUFBLElBQUksQ0FBQ2tLLFNBQVMsQ0FBQ29CLEdBQUcsRUFBRTtRQUNwQixJQUFJLENBQUNsQixrQkFBa0IsR0FBRyxLQUFLO0lBQ2pDO0lBRU94TCxFQUFBQSxJQUFJQSxHQUFBO0lBQ1QsSUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDdUwsU0FBUyxDQUFDaEksTUFBTSxFQUFFO1FBQzVCLElBQUksQ0FBQ2lJLGtCQUFrQixHQUFHLElBQUk7UUFDOUIsSUFBSSxDQUFDYSxnQkFBZ0IsRUFBRTtRQUN2QixNQUFNUSxJQUFJLEdBQUcsSUFBSSxDQUFDdEIsU0FBUyxDQUFDbUIsR0FBRyxFQUFHO0lBQ2xDLElBQUEsSUFBSSxDQUFDVixVQUFVLENBQUNhLElBQUksQ0FBQ1osT0FBTyxDQUFDO0lBQzdCLElBQUEsSUFBSVksSUFBSSxDQUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQ3dCLFlBQVksQ0FBQ0MsSUFBSSxDQUFDekIsU0FBUyxFQUFFeUIsSUFBSSxDQUFDekwsTUFBTSxDQUFDO1FBQ2xFLElBQUksQ0FBQ29LLGtCQUFrQixHQUFHLEtBQUs7SUFDakM7TUFFUVcsaUJBQWlCQSxDQUFDdkssQ0FBZ0IsRUFBQTtRQUN4QyxNQUFNa0wsS0FBSyxHQUFHLHNCQUFzQixDQUFDek0sSUFBSSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQztRQUM3RCxNQUFNd00sSUFBSSxHQUFHRCxLQUFLLEdBQUdsTCxDQUFDLENBQUNvTCxPQUFPLEdBQUdwTCxDQUFDLENBQUNxTCxPQUFPO0lBQzFDLElBQUEsSUFBSUYsSUFBSSxJQUFJLENBQUNuTCxDQUFDLENBQUNzTCxNQUFNLEVBQUU7VUFDckIsSUFBSXRMLENBQUMsQ0FBQzhCLEdBQUcsS0FBSyxHQUFHLElBQUk5QixDQUFDLENBQUM4QixHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ2xDLElBQUk5QixDQUFDLENBQUN1TCxRQUFRLEVBQUU7Y0FDZCxJQUFJLENBQUNuTixJQUFJLEVBQUU7SUFDYixTQUFDLE1BQU07Y0FDTCxJQUFJLENBQUNHLElBQUksRUFBRTtJQUNiO1lBQ0F5QixDQUFDLENBQUNvQyxjQUFjLEVBQUU7SUFDcEIsT0FBQyxNQUFNLElBQUlwQyxDQUFDLENBQUM4QixHQUFHLEtBQUssR0FBRyxJQUFJOUIsQ0FBQyxDQUFDOEIsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMxRCxJQUFJLEVBQUU7WUFDWDRCLENBQUMsQ0FBQ29DLGNBQWMsRUFBRTtJQUNwQjtJQUNGO0lBQ0Y7SUFFUStILEVBQUFBLG1CQUFtQkEsQ0FBQzlKLE9BQW9CLEVBQUVOLEtBQWtCLEVBQUE7SUFDbEUsSUFBQSxJQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQ1osTUFBTSxLQUFLcUQsU0FBUyxFQUFFO0lBQ3ZDLE1BQUEsSUFBSSxPQUFPekMsS0FBSyxDQUFDWixNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ3BDLElBQUksQ0FBQ2EsQ0FBQyxHQUFHTSxRQUFRLENBQUNDLGNBQWMsQ0FBQ1IsS0FBSyxDQUFDWixNQUFNLENBQW1CO0lBQ2xFLE9BQUMsTUFBTTtJQUNMLFFBQUEsSUFBSSxDQUFDYSxDQUFDLEdBQUdELEtBQUssQ0FBQ1osTUFBd0I7SUFDekM7SUFDRixLQUFDLE1BQU07VUFDTCxJQUFJLENBQUNhLENBQUMsR0FBR00sUUFBUSxDQUFDUSxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ3hDO1FBRUEsSUFBSSxDQUFDZCxDQUFDLENBQUN3TCxTQUFTLENBQUNDLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDL0IsSUFBQSxJQUFJLENBQUN6TCxDQUFDLENBQUMwTCxlQUFlLEdBQUcsTUFBTTtJQUMvQixJQUFBLElBQUksQ0FBQzFMLENBQUMsQ0FBQ2lLLEtBQUssQ0FBQzBCLFVBQVUsR0FBRyxVQUFVO0lBQ25DLElBQUEsSUFBSSxDQUFDM0wsQ0FBQyxDQUFDaUssS0FBYSxDQUFDMkIsZ0JBQWdCLEdBQUcsMkJBQTJCO0lBRXBFLElBQUEsSUFBSTdMLEtBQUssQ0FBQ1osTUFBTSxLQUFLcUQsU0FBUyxFQUFFO0lBQzlCLE1BQUEsSUFDRSxJQUFJLENBQUNtRyxRQUFRLElBQ2IsSUFBSSxDQUFDQSxRQUFRLENBQUNxQixVQUFVLEtBQUszSixPQUFPLElBQ3BDLElBQUksQ0FBQ3NJLFFBQVEsQ0FBQ2tELFdBQVcsRUFDekI7SUFDQXhMLFFBQUFBLE9BQU8sQ0FBQ3lMLFlBQVksQ0FBQyxJQUFJLENBQUM5TCxDQUFDLEVBQUUsSUFBSSxDQUFDMkksUUFBUSxDQUFDa0QsV0FBVyxDQUFDO0lBQ3pELE9BQUMsTUFBTTtJQUNMeEwsUUFBQUEsT0FBTyxDQUFDYSxXQUFXLENBQUMsSUFBSSxDQUFDbEIsQ0FBQyxDQUFDO0lBQzdCO0lBQ0Y7SUFFQSxJQUFBLElBQUksQ0FBQ0EsQ0FBQyxDQUFDVSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUdWLENBQUMsSUFBSyxJQUFJLENBQUMrTCxnQkFBZ0IsQ0FBQy9MLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLElBQUEsSUFBSSxDQUFDQSxDQUFDLENBQUNVLGdCQUFnQixDQUFDLGdCQUFnQixFQUFHVixDQUFDLElBQUssSUFBSSxDQUFDK0wsZ0JBQWdCLENBQUMvTCxDQUFDLENBQUMsQ0FBQztJQUMxRU0sSUFBQUEsUUFBUSxDQUFDSSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBR1YsQ0FBQyxJQUM3QyxJQUFJLENBQUNnTSwwQkFBMEIsQ0FBQ2hNLENBQUMsQ0FBQyxDQUNuQztJQUNELElBQUEsSUFBSSxDQUFDQSxDQUFDLENBQUNVLGdCQUFnQixDQUFDLE9BQU8sRUFBR1YsQ0FBQyxJQUFLLElBQUksQ0FBQ2lNLFdBQVcsQ0FBQ2pNLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUEsSUFBSSxDQUFDQSxDQUFDLENBQUNVLGdCQUFnQixDQUFDLE1BQU0sRUFBR1YsQ0FBQyxJQUFLLElBQUksQ0FBQ2tNLFVBQVUsQ0FBQ2xNLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUEsSUFBSSxDQUFDNkksWUFBWSxHQUFHLElBQUksQ0FBQzdJLENBQUMsQ0FBQ21NLFVBQVU7SUFDdkM7TUFFTy9CLFVBQVVBLENBQUNDLE9BQWUsRUFBQTtJQUMvQixJQUFBLE9BQU8sSUFBSSxDQUFDckssQ0FBRSxDQUFDb00sVUFBVSxFQUFFO1VBQ3pCLElBQUksQ0FBQ3BNLENBQUUsQ0FBQ3FNLFdBQVcsQ0FBQyxJQUFJLENBQUNyTSxDQUFFLENBQUNvTSxVQUFVLENBQUM7SUFDekM7UUFDQSxJQUFJLENBQUN4RCxLQUFLLEdBQUd5QixPQUFPLENBQUM5SSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDNUMsSUFBSSxDQUFDMkgsU0FBUyxHQUFHLEVBQUU7SUFDbkIsSUFBQSxLQUFLLElBQUlvRCxPQUFPLEdBQUcsQ0FBQyxFQUFFQSxPQUFPLEdBQUcsSUFBSSxDQUFDMUQsS0FBSyxDQUFDakgsTUFBTSxFQUFFMkssT0FBTyxFQUFFLEVBQUU7SUFDNUQsTUFBQSxJQUFJQyxFQUFFLEdBQUdqTSxRQUFRLENBQUNRLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDdEMsTUFBQSxJQUFJLENBQUNkLENBQUUsQ0FBQ2tCLFdBQVcsQ0FBQ3FMLEVBQUUsQ0FBQztJQUN2QixNQUFBLElBQUksQ0FBQ3JELFNBQVMsQ0FBQ3RILElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0I7UUFDQSxJQUFJLENBQUNrSCxTQUFTLEdBQUcsSUFBSTBELEtBQUssQ0FBQyxJQUFJLENBQUM1RCxLQUFLLENBQUNqSCxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDOEssZ0JBQWdCLEVBQUU7UUFDdkIsSUFBSSxDQUFDQyxVQUFVLEVBQUU7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQzlDLGtCQUFrQixFQUFFLElBQUksQ0FBQ1ksV0FBVyxFQUFFO0lBQ2xEO0lBRU9FLEVBQUFBLFVBQVVBLEdBQUE7SUFDZixJQUFBLE9BQU8sSUFBSSxDQUFDOUIsS0FBSyxDQUFDM0csSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5QjtJQUVRd0ssRUFBQUEsZ0JBQWdCQSxHQUFBO1FBQ3RCLElBQUksQ0FBQ0UsZUFBZSxFQUFFO1FBQ3RCLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUU7UUFDdkIsSUFBSSxDQUFDQyxjQUFjLEVBQUU7SUFDdkI7SUFFUUQsRUFBQUEsZ0JBQWdCQSxHQUFBO1FBQ3RCLElBQUksQ0FBQzNELFVBQVUsR0FBRyxFQUFFO0lBQ3BCLElBQUEsS0FBSyxJQUFJNkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQ2xFLEtBQUssQ0FBQ2pILE1BQU0sRUFBRW1MLENBQUMsRUFBRSxFQUFFO1VBQzFDLElBQUksSUFBSSxDQUFDaEUsU0FBUyxDQUFDZ0UsQ0FBQyxDQUFDLEtBQUssMkJBQTJCLEVBQUU7SUFDckQsUUFBQSxJQUFJLENBQUM3RCxVQUFVLENBQUNySCxJQUFJLENBQ2xCLElBQUksQ0FBQ21ILFlBQVksQ0FBQytELENBQUMsQ0FBQyxDQUNsQnBJLFdBQVcsQ0FBQ3FCLHlCQUF5QixDQUFDQyxnQkFBaUIsQ0FDeEQsQ0FDRjtJQUNIO0lBQ0Y7SUFDRjtJQUVRa0IsRUFBQUEsT0FBT0EsQ0FBQ3JDLFdBQW1CLEVBQUVrSSxPQUF3QixFQUFBO0lBQzNELElBQUEsT0FBT2xJLFdBQVcsQ0FBQ3FDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDOEYsR0FBRyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsS0FBSTtJQUM5RCxNQUFBLElBQUlELEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBT3BGLFVBQVUsQ0FBQ2tGLE9BQU8sQ0FBQ0ksUUFBUSxDQUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FFdkQsT0FBTyxDQUFBLGdDQUFBLEVBQW1DLElBQUksQ0FBQ0UsbUJBQW1CLENBQ2hFTCxPQUFPLENBQUNJLFFBQVEsQ0FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FDdEIsQ0FBUyxPQUFBLENBQUE7SUFDZCxLQUFDLENBQUM7SUFDSjtJQUVRTCxFQUFBQSxjQUFjQSxHQUFBO0lBQ3BCLElBQUEsS0FBSyxJQUFJUCxPQUFPLEdBQUcsQ0FBQyxFQUFFQSxPQUFPLEdBQUcsSUFBSSxDQUFDMUQsS0FBSyxDQUFDakgsTUFBTSxFQUFFMkssT0FBTyxFQUFFLEVBQUU7SUFDNUQsTUFBQSxJQUFJLElBQUksQ0FBQ3BELFNBQVMsQ0FBQ29ELE9BQU8sQ0FBQyxFQUFFO0lBQzNCLFFBQUEsSUFBSWUsV0FBVyxHQUFHLElBQUksQ0FBQ25HLE9BQU8sQ0FDNUIsSUFBSSxDQUFDOEIsZ0JBQWdCLENBQUNzRCxPQUFPLENBQUMsRUFDOUIsSUFBSSxDQUFDdkQsWUFBWSxDQUFDdUQsT0FBTyxDQUFDLENBQzNCO0lBQ0EsUUFBQSxJQUFJLENBQUN6RCxZQUFZLENBQUN5RCxPQUFPLENBQWlCLENBQUN2TCxTQUFTLEdBQUcsSUFBSSxDQUFDK0gsU0FBUyxDQUFDd0QsT0FBTyxDQUFDO1lBQzlFLElBQUksQ0FBQ3pELFlBQVksQ0FBQ3lELE9BQU8sQ0FBaUIsQ0FBQ2dCLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFDbkUsUUFBQSxJQUFJLENBQUN6RSxZQUFZLENBQUN5RCxPQUFPLENBQWlCLENBQUN2TixTQUFTLEdBQ25Ec08sV0FBVyxLQUFLLEVBQUUsR0FBRyxRQUFRLEdBQUdBLFdBQVc7SUFDL0M7SUFDQyxNQUFBLElBQUksQ0FBQ3hFLFlBQVksQ0FBQ3lELE9BQU8sQ0FBaUIsQ0FBQ2lCLE9BQU8sQ0FBQ2pCLE9BQU8sR0FBR0EsT0FBTyxDQUFDa0IsUUFBUSxFQUFFO0lBQ2xGO0lBQ0Y7SUFFUWIsRUFBQUEsZUFBZUEsR0FBQTtRQUNyQixJQUFJYyxhQUFhLEdBQW1CLEtBQUs7UUFDekMsSUFBSUMsa0JBQWtCLEdBQUcsQ0FBQztRQUMxQixJQUFJQyxTQUFTLEdBQTBCLEtBQUs7SUFFNUMsSUFBQSxLQUFLLElBQUlyQixPQUFPLEdBQUcsQ0FBQyxFQUFFQSxPQUFPLEdBQUcsSUFBSSxDQUFDMUQsS0FBSyxDQUFDakgsTUFBTSxFQUFFMkssT0FBTyxFQUFFLEVBQUU7VUFDNUQsSUFBSXNCLFFBQVEsR0FBRyxRQUFRO1VBQ3ZCLElBQUlDLFdBQVcsR0FBb0IsQ0FBQyxJQUFJLENBQUNqRixLQUFLLENBQUMwRCxPQUFPLENBQUMsQ0FBb0I7VUFDM0UsSUFBSXdCLGVBQWUsR0FBRyxLQUFLO0lBRTNCO1VBQ0EsSUFBSUwsYUFBYSxLQUFLLHlCQUF5QixFQUFFO0lBQy9DLFFBQUEsSUFBSVYsT0FBTyxHQUFHckksV0FBVyxDQUFDWSx3QkFBd0IsQ0FBQ1YsTUFBTSxDQUFDbUosSUFBSSxDQUFDLElBQUksQ0FBQ25GLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFDO0lBQ25GLFFBQUEsSUFBSVMsT0FBTyxJQUFJQSxPQUFPLENBQUNpQixNQUFPLENBQUMsS0FBSyxDQUFDLENBQUNyTSxNQUFNLElBQUkrTCxrQkFBa0IsRUFBRTtJQUNsRUUsVUFBQUEsUUFBUSxHQUFHLDBCQUEwQjtJQUNyQ0UsVUFBQUEsZUFBZSxHQUFHcEosV0FBVyxDQUFDWSx3QkFBd0IsQ0FBQ1QsV0FBVztJQUNsRWdKLFVBQUFBLFdBQVcsR0FBR2QsT0FBTztJQUNyQlUsVUFBQUEsYUFBYSxHQUFHLEtBQUs7SUFDdkIsU0FBQyxNQUFNO0lBQ0xHLFVBQUFBLFFBQVEsR0FBRyxzQkFBc0I7SUFDakNFLFVBQUFBLGVBQWUsR0FBRyw0Q0FBNEM7Y0FDOURELFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQ2pGLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFvQjtJQUN4RDtJQUNGLE9BQUMsTUFBTSxJQUFJbUIsYUFBYSxLQUFLLHNCQUFzQixFQUFFO0lBQ25ELFFBQUEsSUFBSVYsT0FBTyxHQUFHckksV0FBVyxDQUFDYSxxQkFBcUIsQ0FBQ1gsTUFBTSxDQUFDbUosSUFBSSxDQUFDLElBQUksQ0FBQ25GLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLFFBQUEsSUFBSVMsT0FBTyxJQUFJQSxPQUFPLENBQUNpQixNQUFPLENBQUMsS0FBSyxDQUFDLENBQUNyTSxNQUFNLElBQUkrTCxrQkFBa0IsRUFBRTtJQUNsRUUsVUFBQUEsUUFBUSxHQUFHLHVCQUF1QjtJQUNsQ0UsVUFBQUEsZUFBZSxHQUFHcEosV0FBVyxDQUFDYSxxQkFBcUIsQ0FBQ1YsV0FBVztJQUMvRGdKLFVBQUFBLFdBQVcsR0FBR2QsT0FBTztJQUNyQlUsVUFBQUEsYUFBYSxHQUFHLEtBQUs7SUFDdkIsU0FBQyxNQUFNO0lBQ0xHLFVBQUFBLFFBQVEsR0FBRyxtQkFBbUI7SUFDOUJFLFVBQUFBLGVBQWUsR0FBRyw0Q0FBNEM7Y0FDOURELFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQ2pGLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFvQjtJQUN4RDtJQUNGO0lBRUE7SUFDQSxNQUFBLElBQUlzQixRQUFRLEtBQUssUUFBUSxJQUFJRCxTQUFTLEtBQUssS0FBSyxFQUFFO0lBQ2hELFFBQUEsS0FBSyxJQUFJTSxhQUFhLElBQUloSSxnQkFBZ0IsRUFBRTtJQUMxQyxVQUFBLElBQUksSUFBSSxDQUFDMkMsS0FBSyxDQUFDMEQsT0FBTyxDQUFDLENBQUN6SyxLQUFLLENBQUNvTSxhQUFhLENBQUMvSCxLQUFLLENBQUMsRUFBRTtnQkFDbEQsSUFDRStILGFBQWEsQ0FBQzdILGFBQWEsSUFDM0JrRyxPQUFPLEtBQUssQ0FBQyxJQUNiLEVBQ0UsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFDeEMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDdEMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDdEMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FDL0MsRUFDRDtJQUNBcUIsY0FBQUEsU0FBUyxHQUFHTSxhQUFhO0lBQ3pCLGNBQUE7SUFDRjtJQUNGO0lBQ0Y7SUFDRjtVQUVBLElBQUlOLFNBQVMsS0FBSyxLQUFLLEVBQUU7SUFDdkJDLFFBQUFBLFFBQVEsR0FBRyxhQUFhO0lBQ3hCRSxRQUFBQSxlQUFlLEdBQUcsNkNBQTZDO1lBQy9ERCxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUNqRixLQUFLLENBQUMwRCxPQUFPLENBQUMsQ0FBb0I7WUFFdEQsSUFBSXFCLFNBQVMsQ0FBQ3hILEdBQUcsRUFBRTtJQUNqQixVQUFBLElBQUksSUFBSSxDQUFDeUMsS0FBSyxDQUFDMEQsT0FBTyxDQUFDLENBQUN6SyxLQUFLLENBQUM4TCxTQUFTLENBQUN4SCxHQUFHLENBQUMsRUFBRTtJQUM1Q3dILFlBQUFBLFNBQVMsR0FBRyxLQUFLO0lBQ25CO0lBQ0YsU0FBQyxNQUFNO2NBQ0wsSUFDRXJCLE9BQU8sS0FBSyxJQUFJLENBQUMxRCxLQUFLLENBQUNqSCxNQUFNLEdBQUcsQ0FBQyxJQUNqQyxJQUFJLENBQUNpSCxLQUFLLENBQUMwRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUN6SyxLQUFLLENBQUM2QyxXQUFXLENBQUNjLFdBQVcsQ0FBQ1osTUFBTSxDQUFDLEVBQzdEO0lBQ0ErSSxZQUFBQSxTQUFTLEdBQUcsS0FBSztJQUNuQjtJQUNGO0lBQ0Y7SUFFQTtVQUNBLElBQUlDLFFBQVEsS0FBSyxRQUFRLEVBQUU7SUFDekIsUUFBQSxLQUFLLElBQUk5RixJQUFJLElBQUlwRCxXQUFXLEVBQUU7SUFDNUIsVUFBQSxJQUFJQSxXQUFXLENBQUNvRCxJQUFJLENBQUMsQ0FBQ2xELE1BQU0sRUFBRTtJQUM1QixZQUFBLElBQUltSSxPQUFPLEdBQUdySSxXQUFXLENBQUNvRCxJQUFJLENBQUMsQ0FBQ2xELE1BQU0sQ0FBQ21KLElBQUksQ0FBQyxJQUFJLENBQUNuRixLQUFLLENBQUMwRCxPQUFPLENBQUMsQ0FBQztJQUNoRSxZQUFBLElBQUlTLE9BQU8sRUFBRTtJQUNYYSxjQUFBQSxRQUFRLEdBQUc5RixJQUFJO0lBQ2ZnRyxjQUFBQSxlQUFlLEdBQUdwSixXQUFXLENBQUNvRCxJQUFJLENBQUMsQ0FBQ2pELFdBQVc7SUFDL0NnSixjQUFBQSxXQUFXLEdBQUdkLE9BQU87SUFDckIsY0FBQTtJQUNGO0lBQ0Y7SUFDRjtJQUNGO0lBRUE7SUFDQSxNQUFBLElBQUlhLFFBQVEsS0FBSyx5QkFBeUIsSUFBSUEsUUFBUSxLQUFLLHNCQUFzQixFQUFFO0lBQ2pGSCxRQUFBQSxhQUFhLEdBQUdHLFFBQVE7WUFDeEJGLGtCQUFrQixHQUFHRyxXQUFXLENBQUNHLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQ3JNLE1BQU07SUFDeEQ7SUFFQTtVQUNBLElBQ0UsQ0FBQ2lNLFFBQVEsS0FBSyxnQkFBZ0IsSUFBSUEsUUFBUSxLQUFLLDJCQUEyQixLQUMxRXRCLE9BQU8sR0FBRyxDQUFDLEtBQ1YsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFDdkMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDdEMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDdEMsSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxFQUNqRDtJQUNBc0IsUUFBQUEsUUFBUSxHQUFHLFFBQVE7WUFDbkJDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQ2pGLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFvQjtJQUN0RHdCLFFBQUFBLGVBQWUsR0FBRyxLQUFLO0lBQ3pCO0lBRUE7VUFDQSxJQUFJRixRQUFRLEtBQUssa0JBQWtCLEVBQUU7SUFDbkMsUUFBQSxJQUFJYixPQUFPLEdBQUdySSxXQUFXLENBQUNrQixJQUFJLENBQUNoQixNQUFNLENBQUNtSixJQUFJLENBQUMsSUFBSSxDQUFDbkYsS0FBSyxDQUFDMEQsT0FBTyxDQUFDLENBQUM7SUFDL0QsUUFBQSxJQUFJUyxPQUFPLEVBQUU7SUFDWGEsVUFBQUEsUUFBUSxHQUFHLE1BQU07SUFDakJFLFVBQUFBLGVBQWUsR0FBR3BKLFdBQVcsQ0FBQ2tCLElBQUksQ0FBQ2YsV0FBVztJQUM5Q2dKLFVBQUFBLFdBQVcsR0FBR2QsT0FBTztJQUN2QjtJQUNGO0lBRUE7SUFDQSxNQUFBLElBQUlhLFFBQVEsS0FBSyxrQkFBa0IsSUFBSUEsUUFBUSxLQUFLLGtCQUFrQixFQUFFO0lBQ3RFLFFBQUEsSUFBSXRCLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDeEQsU0FBUyxDQUFDd0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUM3RCxVQUFBLElBQUlTLE9BQU8sR0FBR3JJLFdBQVcsQ0FBQ2lCLElBQUksQ0FBQ2YsTUFBTSxDQUFDbUosSUFBSSxDQUFDLElBQUksQ0FBQ25GLEtBQUssQ0FBQzBELE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFVBQUEsSUFBSVMsT0FBTyxFQUFFO0lBQ1hhLFlBQUFBLFFBQVEsR0FBRyxNQUFNO0lBQ2pCQyxZQUFBQSxXQUFXLEdBQUdkLE9BQU87SUFDckJlLFlBQUFBLGVBQWUsR0FBR3BKLFdBQVcsQ0FBQ2lCLElBQUksQ0FBQ2QsV0FBVztJQUNoRCxXQUFDLE1BQU07SUFDTCtJLFlBQUFBLFFBQVEsR0FBRyxRQUFRO2dCQUNuQkMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDakYsS0FBSyxDQUFDMEQsT0FBTyxDQUFDLENBQW9CO0lBQ3REd0IsWUFBQUEsZUFBZSxHQUFHLEtBQUs7SUFDekI7SUFDRixTQUFDLE1BQU07SUFDTCxVQUFBLElBQUlJLFdBQVcsR0FBRzVCLE9BQU8sR0FBRyxDQUFDO2NBQzdCLE1BQU02QixlQUFlLEdBQUdQLFFBQVEsS0FBSyxrQkFBa0IsR0FBRyxZQUFZLEdBQUcsWUFBWTtjQUNyRixHQUFHO2dCQUNELElBQUksSUFBSSxDQUFDOUUsU0FBUyxDQUFDb0YsV0FBVyxDQUFDLEtBQUtDLGVBQWUsRUFBRTtJQUNuRCxjQUFBLElBQUksQ0FBQ3JGLFNBQVMsQ0FBQ29GLFdBQVcsQ0FBQyxHQUFHQyxlQUFlO0lBQzdDLGNBQUEsSUFBSSxDQUFDakYsU0FBUyxDQUFDZ0YsV0FBVyxDQUFDLEdBQUcsSUFBSTtJQUNwQztJQUNBLFlBQUEsSUFBSSxDQUFDbEYsZ0JBQWdCLENBQUNrRixXQUFXLENBQUMsR0FBRyxLQUFLO0lBQzFDLFlBQUEsSUFBSSxDQUFDbkYsWUFBWSxDQUFDbUYsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUN0RixLQUFLLENBQUNzRixXQUFXLENBQUMsQ0FBb0I7SUFDN0VBLFlBQUFBLFdBQVcsRUFBRTtJQUNmLFdBQUMsUUFBUUEsV0FBVyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUNwRixTQUFTLENBQUNvRixXQUFXLENBQUMsS0FBSyxRQUFRO0lBQ3ZFO0lBQ0Y7VUFFQSxJQUFJLElBQUksQ0FBQ3BGLFNBQVMsQ0FBQ3dELE9BQU8sQ0FBQyxLQUFLc0IsUUFBUSxFQUFFO0lBQ3hDLFFBQUEsSUFBSSxDQUFDOUUsU0FBUyxDQUFDd0QsT0FBTyxDQUFDLEdBQUdzQixRQUFRO0lBQ2xDLFFBQUEsSUFBSSxDQUFDMUUsU0FBUyxDQUFDb0QsT0FBTyxDQUFDLEdBQUcsSUFBSTtJQUNoQztJQUNBLE1BQUEsSUFBSSxDQUFDdEQsZ0JBQWdCLENBQUNzRCxPQUFPLENBQUMsR0FBR3dCLGVBQWU7SUFDaEQsTUFBQSxJQUFJLENBQUMvRSxZQUFZLENBQUN1RCxPQUFPLENBQUMsR0FBR3VCLFdBQVc7SUFDMUM7SUFDRjtJQUVPbEQsRUFBQUEsWUFBWUEsR0FBMkI7SUFBQSxJQUFBLElBQTFCeUQsZ0ZBQXFCLEtBQUs7O0lBQzVDLElBQUEsTUFBTTVFLFNBQVMsR0FBRzZFLE1BQU0sQ0FBQzFELFlBQVksRUFBRTtRQUN2QyxJQUFJMkQsU0FBUyxHQUFHRixTQUFTLEdBQUc1RSxTQUFVLENBQUMrRSxVQUFVLEdBQUcvRSxTQUFVLENBQUNnRixTQUFTO0lBQ3hFLElBQUEsSUFBSSxDQUFDRixTQUFTLEVBQUUsT0FBTyxJQUFJO1FBQzNCLElBQUlHLE1BQU0sR0FBR0wsU0FBUyxHQUFHNUUsU0FBVSxDQUFDa0YsWUFBWSxHQUFHbEYsU0FBVSxDQUFDbUYsV0FBVztJQUN6RSxJQUFBLElBQUlMLFNBQVMsS0FBSyxJQUFJLENBQUN0TyxDQUFDLEVBQUU7VUFDeEIsSUFBSXlPLE1BQU0sR0FBRyxJQUFJLENBQUM3RixLQUFLLENBQUNqSCxNQUFNLEVBQzVCLE9BQU87SUFDTGlOLFFBQUFBLEdBQUcsRUFBRUgsTUFBTTtJQUNYSSxRQUFBQSxHQUFHLEVBQUU7V0FDTjtVQUNILE9BQU87WUFDTEQsR0FBRyxFQUFFSCxNQUFNLEdBQUcsQ0FBQztZQUNmSSxHQUFHLEVBQUUsSUFBSSxDQUFDakcsS0FBSyxDQUFDNkYsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOU07V0FDN0I7SUFDSDtRQUVBLElBQUlrTixHQUFHLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNSLFNBQVMsRUFBRUcsTUFBTSxDQUFDO0lBQy9DLElBQUEsSUFBSUksR0FBRyxLQUFLLElBQUksRUFBRSxPQUFPLElBQUk7UUFFN0IsSUFBSUUsSUFBSSxHQUFHVCxTQUFTO0lBQ3BCLElBQUEsT0FBT1MsSUFBSSxDQUFDbE8sYUFBYSxLQUFLLElBQUksQ0FBQ2IsQ0FBQyxFQUFFO1VBQ3BDK08sSUFBSSxHQUFHQSxJQUFJLENBQUNsTyxhQUFjO0lBQzVCO1FBRUEsSUFBSStOLEdBQUcsR0FBRyxDQUFDO1FBQ1gsSUFDR0csSUFBb0IsQ0FBQ3hCLE9BQU8sSUFDNUJ3QixJQUFvQixDQUFDeEIsT0FBTyxDQUFDakIsT0FBTyxLQUNwQyxDQUFDeUMsSUFBSSxDQUFDQyxlQUFlLElBQ25CLENBQUEsQ0FBQ0MsRUFBQSxHQUFBRixJQUFJLENBQUNDLGVBQStCLENBQUN6QixPQUFPLE1BQUUsSUFBQSxJQUFBMEIsRUFBQSxLQUFBLE1BQUEsR0FBQSxNQUFBLEdBQUFBLEVBQUEsQ0FBQTNDLE9BQU8sTUFBTXlDLElBQW9CLENBQUN4QixPQUFPLENBQUNqQixPQUFRLENBQUMsRUFDckc7VUFDQXNDLEdBQUcsR0FBR3pCLFFBQVEsQ0FBRTRCLElBQW9CLENBQUN4QixPQUFPLENBQUNqQixPQUFRLENBQUM7SUFDeEQsS0FBQyxNQUFNO1VBQ0wsT0FBT3lDLElBQUksQ0FBQ0MsZUFBZSxFQUFFO0lBQzNCSixRQUFBQSxHQUFHLEVBQUU7WUFDTEcsSUFBSSxHQUFHQSxJQUFJLENBQUNDLGVBQWU7SUFDN0I7SUFDRjtRQUNBLE9BQU87SUFBRUosTUFBQUEsR0FBRyxFQUFFQSxHQUFHO0lBQUVDLE1BQUFBLEdBQUcsRUFBRUE7U0FBSztJQUMvQjtNQUVPN0QsWUFBWUEsQ0FBQ3pMLEtBQWUsRUFBZ0M7SUFBQSxJQUFBLElBQTlCQyxNQUFBLEdBQUErSCxTQUFBLENBQUE1RixNQUFBLEdBQUEsQ0FBQSxJQUFBNEYsU0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBL0UsU0FBQSxHQUFBK0UsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUEwQixJQUFJO1FBQ2pFLElBQUksQ0FBQ2hJLEtBQUssRUFBRTtRQUVaLElBQUk7SUFBRXdQLE1BQUFBLElBQUksRUFBRVAsU0FBUztJQUFFQyxNQUFBQSxNQUFNLEVBQUVFO0lBQWEsS0FBQSxHQUFHLElBQUksQ0FBQ08sb0JBQW9CLENBQ3RFM1AsS0FBSyxDQUFDcVAsR0FBRyxFQUNUclAsS0FBSyxDQUFDc1AsR0FBRyxFQUNUclAsTUFBTSxHQUFHQSxNQUFNLENBQUNvUCxHQUFHLEtBQUtyUCxLQUFLLENBQUNxUCxHQUFHLElBQUlwUCxNQUFNLENBQUNxUCxHQUFHLEdBQUd0UCxLQUFLLENBQUNzUCxHQUFHLEdBQUcsS0FBSyxDQUNwRTtRQUNELElBQUlOLFVBQVUsR0FBRyxJQUFJO0lBQ25CRyxNQUFBQSxZQUFZLEdBQUcsSUFBSTtJQUNyQixJQUFBLElBQUlsUCxNQUFNLEtBQUtBLE1BQU0sQ0FBQ29QLEdBQUcsS0FBS3JQLEtBQUssQ0FBQ3FQLEdBQUcsSUFBSXBQLE1BQU0sQ0FBQ3FQLEdBQUcsS0FBS3RQLEtBQUssQ0FBQ3NQLEdBQUcsQ0FBQyxFQUFFO1VBQ3BFLElBQUk7WUFBRUUsSUFBSTtJQUFFTixRQUFBQTtXQUFRLEdBQUcsSUFBSSxDQUFDUyxvQkFBb0IsQ0FDOUMxUCxNQUFNLENBQUNvUCxHQUFHLEVBQ1ZwUCxNQUFNLENBQUNxUCxHQUFHLEVBQ1Z0UCxLQUFLLENBQUNxUCxHQUFHLEtBQUtwUCxNQUFNLENBQUNvUCxHQUFHLElBQUlyUCxLQUFLLENBQUNzUCxHQUFHLEdBQUdyUCxNQUFNLENBQUNxUCxHQUFHLENBQ25EO0lBQ0ROLE1BQUFBLFVBQVUsR0FBR1EsSUFBSTtJQUNqQkwsTUFBQUEsWUFBWSxHQUFHRCxNQUFNO0lBQ3ZCO0lBRUEsSUFBQSxJQUFJVSxlQUFlLEdBQUdkLE1BQU0sQ0FBQzFELFlBQVksRUFBRTtJQUMzQ3dFLElBQUFBLGVBQWdCLENBQUNDLGdCQUFnQixDQUMvQlosU0FBUyxFQUNURyxXQUFXLEVBQ1hKLFVBQVUsSUFBSUMsU0FBUyxFQUN2QkQsVUFBVSxHQUFHRyxZQUFhLEdBQUdDLFdBQVcsQ0FDekM7SUFDSDtNQUVPalAsS0FBS0EsQ0FBQzJQLElBQVksRUFBK0Q7SUFBQSxJQUFBLElBQTdEN1AsNkVBQTBCLElBQUk7SUFBQSxJQUFBLElBQUVELDRFQUF5QixJQUFJO1FBQ3RGLElBQUksQ0FBQ0MsTUFBTSxFQUFFQSxNQUFNLEdBQUcsSUFBSSxDQUFDbUwsWUFBWSxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUNwTCxLQUFLLEVBQUVBLEtBQUssR0FBRyxJQUFJLENBQUNvTCxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUkyRSxTQUFtQixFQUFFbkosR0FBYTtRQUN0QyxJQUFJLENBQUM1RyxLQUFLLEVBQUU7SUFDVkEsTUFBQUEsS0FBSyxHQUFHO0lBQ05xUCxRQUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDaEcsS0FBSyxDQUFDakgsTUFBTSxHQUFHLENBQUM7SUFDMUJrTixRQUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDakcsS0FBSyxDQUFDLElBQUksQ0FBQ0EsS0FBSyxDQUFDakgsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDQTtXQUN4QztJQUNIO1FBQ0EsSUFBSSxDQUFDbkMsTUFBTSxFQUFFO0lBQ1hBLE1BQUFBLE1BQU0sR0FBR0QsS0FBSztJQUNoQjtRQUNBLElBQ0VDLE1BQU0sQ0FBQ29QLEdBQUcsR0FBR3JQLEtBQUssQ0FBQ3FQLEdBQUcsSUFDckJwUCxNQUFNLENBQUNvUCxHQUFHLEtBQUtyUCxLQUFLLENBQUNxUCxHQUFHLElBQUlwUCxNQUFNLENBQUNxUCxHQUFHLElBQUl0UCxLQUFLLENBQUNzUCxHQUFJLEVBQ3JEO0lBQ0FTLE1BQUFBLFNBQVMsR0FBRzlQLE1BQU07SUFDbEIyRyxNQUFBQSxHQUFHLEdBQUc1RyxLQUFLO0lBQ2IsS0FBQyxNQUFNO0lBQ0wrUCxNQUFBQSxTQUFTLEdBQUcvUCxLQUFLO0lBQ2pCNEcsTUFBQUEsR0FBRyxHQUFHM0csTUFBTTtJQUNkO0lBQ0EsSUFBQSxJQUFJK1AsYUFBYSxHQUFHRixJQUFJLENBQUM5TixLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDaEQsSUFBQSxJQUFJaU8sVUFBVSxHQUFHLElBQUksQ0FBQzVHLEtBQUssQ0FBQzBHLFNBQVMsQ0FBQ1YsR0FBRyxDQUFDLENBQUNhLE1BQU0sQ0FBQyxDQUFDLEVBQUVILFNBQVMsQ0FBQ1QsR0FBRyxDQUFDO0lBQ25FLElBQUEsSUFBSWEsT0FBTyxHQUFHLElBQUksQ0FBQzlHLEtBQUssQ0FBQ3pDLEdBQUcsQ0FBQ3lJLEdBQUcsQ0FBQyxDQUFDYSxNQUFNLENBQUN0SixHQUFHLENBQUMwSSxHQUFHLENBQUM7SUFDakRVLElBQUFBLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBR0MsVUFBVSxDQUFDeE4sTUFBTSxDQUFDdU4sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUlJLFNBQVMsR0FBR0osYUFBYSxDQUFDQSxhQUFhLENBQUM1TixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE1BQU07UUFDOUQ0TixhQUFhLENBQUNBLGFBQWEsQ0FBQzVOLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRzROLGFBQWEsQ0FBQ0EsYUFBYSxDQUFDNU4sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDSyxNQUFNLENBQUMwTixPQUFPLENBQUM7SUFDakcsSUFBQSxJQUFJLENBQUNFLFdBQVcsQ0FBQ04sU0FBUyxDQUFDVixHQUFHLEVBQUUsQ0FBQyxHQUFHekksR0FBRyxDQUFDeUksR0FBRyxHQUFHVSxTQUFTLENBQUNWLEdBQUcsRUFBRVcsYUFBYSxDQUFDO1FBQzNFaFEsS0FBSyxDQUFDcVAsR0FBRyxHQUFHVSxTQUFTLENBQUNWLEdBQUcsR0FBR1csYUFBYSxDQUFDNU4sTUFBTSxHQUFHLENBQUM7UUFDcERwQyxLQUFLLENBQUNzUCxHQUFHLEdBQUdjLFNBQVM7UUFDckIsSUFBSSxDQUFDbEQsZ0JBQWdCLEVBQUU7SUFDdkIsSUFBQSxJQUFJLENBQUN6QixZQUFZLENBQUN6TCxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDbU4sVUFBVSxFQUFFO0lBQ25CO0lBRU9yTixFQUFBQSxhQUFhQSxDQUFDMkksR0FBVyxFQUFFQyxJQUFZLEVBQStEO0lBQUEsSUFBQSxJQUE3RDFJLEtBQXlCLEdBQUFnSSxTQUFBLENBQUE1RixNQUFBLEdBQUEsQ0FBQSxJQUFBNEYsU0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBL0UsU0FBQSxHQUFBK0UsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLElBQUk7SUFBQSxJQUFBLElBQUUvSCxNQUFBLEdBQUErSCxTQUFBLENBQUE1RixNQUFBLEdBQUEsQ0FBQSxJQUFBNEYsU0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBL0UsU0FBQSxHQUFBK0UsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUEwQixJQUFJO1FBQzNHLElBQUksQ0FBQyxJQUFJLENBQUNxQyxrQkFBa0IsRUFBRSxJQUFJLENBQUNZLFdBQVcsRUFBRTtRQUNoRCxJQUFJLENBQUNqTCxLQUFLLEVBQUVBLEtBQUssR0FBRyxJQUFJLENBQUNvTCxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQ25MLE1BQU0sRUFBRUEsTUFBTSxHQUFHLElBQUksQ0FBQ21MLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDN0MsSUFBQSxJQUFJLENBQUNwTCxLQUFLLElBQUksQ0FBQ0MsTUFBTSxJQUFJRCxLQUFLLENBQUNxUCxHQUFHLEtBQUtwUCxNQUFNLENBQUNvUCxHQUFHLEVBQUU7UUFDbkQsSUFBSSxDQUFDMUYsU0FBUyxDQUFDM0osS0FBSyxDQUFDcVAsR0FBRyxDQUFDLEdBQUcsSUFBSTtJQUVoQyxJQUFBLE1BQU1pQixRQUFRLEdBQUd0USxLQUFLLENBQUNzUCxHQUFHLEdBQUdyUCxNQUFNLENBQUNxUCxHQUFHLEdBQUd0UCxLQUFLLENBQUNzUCxHQUFHLEdBQUdyUCxNQUFNLENBQUNxUCxHQUFHO0lBQ2hFLElBQUEsTUFBTWlCLE1BQU0sR0FBR3ZRLEtBQUssQ0FBQ3NQLEdBQUcsR0FBR3JQLE1BQU0sQ0FBQ3FQLEdBQUcsR0FBR3JQLE1BQU0sQ0FBQ3FQLEdBQUcsR0FBR3RQLEtBQUssQ0FBQ3NQLEdBQUc7UUFDOUQsTUFBTWtCLElBQUksR0FBRyxJQUFJLENBQUNuSCxLQUFLLENBQUNySixLQUFLLENBQUNxUCxHQUFHLENBQUMsQ0FBQ2EsTUFBTSxDQUFDLENBQUMsRUFBRUksUUFBUSxDQUFDLENBQUM3TixNQUFNLENBQUNnRyxHQUFHLENBQUM7UUFDbEUsTUFBTWdJLEdBQUcsR0FBR0YsTUFBTSxLQUFLRCxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQ2pILEtBQUssQ0FBQ3JKLEtBQUssQ0FBQ3FQLEdBQUcsQ0FBQyxDQUFDYSxNQUFNLENBQUNJLFFBQVEsRUFBRUMsTUFBTSxHQUFHRCxRQUFRLENBQUM7SUFDaEcsSUFBQSxNQUFNSSxLQUFLLEdBQUdoSSxJQUFJLENBQUNqRyxNQUFNLENBQUMsSUFBSSxDQUFDNEcsS0FBSyxDQUFDckosS0FBSyxDQUFDcVAsR0FBRyxDQUFDLENBQUNhLE1BQU0sQ0FBQ0ssTUFBTSxDQUFDLENBQUM7SUFDL0QsSUFBQSxJQUFJLENBQUNsSCxLQUFLLENBQUNySixLQUFLLENBQUNxUCxHQUFHLENBQUMsR0FBR21CLElBQUksQ0FBQy9OLE1BQU0sQ0FBQ2dPLEdBQUcsRUFBRUMsS0FBSyxDQUFDO0lBQy9DelEsSUFBQUEsTUFBTSxDQUFDcVAsR0FBRyxHQUFHa0IsSUFBSSxDQUFDcE8sTUFBTTtRQUN4QnBDLEtBQUssQ0FBQ3NQLEdBQUcsR0FBR3JQLE1BQU0sQ0FBQ3FQLEdBQUcsR0FBR21CLEdBQUcsQ0FBQ3JPLE1BQU07UUFFbkMsSUFBSSxDQUFDOEssZ0JBQWdCLEVBQUU7SUFDdkIsSUFBQSxJQUFJLENBQUN6QixZQUFZLENBQUN6TCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztJQUNsQztJQUVPa0IsRUFBQUEsZ0JBQWdCQSxDQUNyQm9ILElBQU8sRUFDUG9JLFFBRTJELEVBQUE7SUFFM0QsSUFBQSxJQUFJcEksSUFBSSxDQUFDakcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7VUFDckMsSUFBSSxDQUFDeUgsU0FBUyxDQUFDQyxNQUFNLENBQUMzSCxJQUFJLENBQUNzTyxRQUFxQyxDQUFDO0lBQ25FO0lBQ0EsSUFBQSxJQUFJcEksSUFBSSxDQUFDakcsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLEVBQUU7VUFDbEQsSUFBSSxDQUFDeUgsU0FBUyxDQUFDRSxTQUFTLENBQUM1SCxJQUFJLENBQUNzTyxRQUF3QyxDQUFDO0lBQ3pFO0lBQ0EsSUFBQSxJQUFJcEksSUFBSSxDQUFDakcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1VBQzdCLElBQUksQ0FBQ3lILFNBQVMsQ0FBQ0csSUFBSSxDQUFDN0gsSUFBSSxDQUFDc08sUUFBbUMsQ0FBQztJQUMvRDtJQUNGO0lBRVF4RCxFQUFBQSxVQUFVQSxHQUFBO0lBQ2hCLElBQUEsSUFBSSxDQUFDLElBQUksQ0FBQy9ELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQ1csU0FBUyxDQUFDQyxNQUFNLENBQUM1SCxNQUFNLEVBQUU7SUFDckQsSUFBQSxNQUFNMEksT0FBTyxHQUFHLElBQUksQ0FBQ0ssVUFBVSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQ0EsUUFBUSxDQUFDMkIsS0FBSyxHQUFHRCxPQUFPO1FBQ2hELEtBQUssSUFBSTZGLFFBQVEsSUFBSSxJQUFJLENBQUM1RyxTQUFTLENBQUNDLE1BQU0sRUFBRTtJQUMxQzJHLE1BQUFBLFFBQVEsQ0FBQztJQUNQN0YsUUFBQUEsT0FBTyxFQUFFQSxPQUFPO0lBQ2hCOEYsUUFBQUEsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUNqSCxTQUFTO0lBQy9CLE9BQUEsQ0FBQztJQUNKO0lBQ0Y7TUFFUTZDLGdCQUFnQkEsQ0FBQzVKLEtBQVksRUFBQTtRQUNuQyxNQUFNaU8sVUFBVSxHQUFHak8sS0FBbUI7SUFDdEMsSUFBQSxJQUFJaU8sVUFBVSxDQUFDQyxTQUFTLEtBQUssdUJBQXVCLEVBQUU7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQ3pHLGtCQUFrQixFQUFFLElBQUksQ0FBQ1ksV0FBVyxFQUFFO0lBRWhELElBQUEsSUFBSWpMLEtBQUssR0FBRyxJQUFJLENBQUNvTCxZQUFZLEVBQUU7SUFFL0IsSUFBQSxJQUFJLENBQUN5RixVQUFVLENBQUNDLFNBQVMsS0FBSyxpQkFBaUIsSUFBSUQsVUFBVSxDQUFDQyxTQUFTLEtBQUssaUJBQWlCLEtBQUs5USxLQUFLLEVBQUU7VUFDdkcsSUFBSSxDQUFDK1EsY0FBYyxFQUFFO0lBQ3JCLE1BQUEsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2hSLEtBQUssQ0FBQztJQUNqQyxLQUFDLE1BQU07SUFDTCxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUNTLENBQUUsQ0FBQ29NLFVBQVUsRUFBRTtJQUN2QixRQUFBLElBQUksQ0FBQ3BNLENBQUUsQ0FBQ2pCLFNBQVMsR0FBRyxxQ0FBcUM7SUFDM0QsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDeVIsZ0JBQWdCLEVBQUU7SUFDekI7VUFDQSxJQUFJLENBQUNDLCtCQUErQixFQUFFO0lBQ3hDO0lBQ0EsSUFBQSxJQUFJbFIsS0FBSyxFQUFFO0lBQ1QsTUFBQSxJQUFJLENBQUN5TCxZQUFZLENBQUN6TCxLQUFLLENBQUM7SUFDMUI7UUFFQSxJQUFJLENBQUNtTixVQUFVLEVBQUU7SUFDbkI7TUFFUVYsMEJBQTBCQSxDQUFDMEUsRUFBUyxFQUFBO1FBQzFDLElBQUksQ0FBQ0MsYUFBYSxFQUFFO0lBQ3RCO01BRVExRSxXQUFXQSxDQUFDOUosS0FBcUIsRUFBQTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDeUgsa0JBQWtCLEVBQUUsSUFBSSxDQUFDWSxXQUFXLEVBQUU7UUFDaERySSxLQUFLLENBQUNDLGNBQWMsRUFBRTtRQUV0QixJQUFJaU4sSUFBSSxHQUFJbE4sS0FBYSxDQUFDeU8sYUFBYSxDQUFDQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQzdELElBQUEsSUFBSSxDQUFDblIsS0FBSyxDQUFDMlAsSUFBSSxDQUFDO0lBQ2xCO01BRVFuRCxVQUFVQSxDQUFDL0osS0FBZ0IsRUFBQTtRQUNqQ0EsS0FBSyxDQUFDQyxjQUFjLEVBQUU7SUFDdEIsSUFBQSxJQUFJLENBQUMwTyxRQUFRLENBQUMzTyxLQUFLLENBQUM0TyxZQUFhLENBQUM7SUFDcEM7TUFFUTNELG1CQUFtQkEsQ0FBQzRELGNBQXNCLEVBQUE7UUFDaEQsSUFBSUMsU0FBUyxHQUFHLEVBQUU7UUFDbEIsSUFBSUMsS0FBSyxHQUFtRixFQUFFO1FBQzlGLElBQUl6QyxNQUFNLEdBQUcsQ0FBQztRQUNkLElBQUl0SCxNQUFNLEdBQUc2SixjQUFjO1FBRTNCdk8sS0FBSyxFQUFFLE9BQU8wRSxNQUFNLEVBQUU7SUFDcEI7SUFDQSxNQUFBLEtBQUssSUFBSUosSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDdkQsUUFBQSxJQUFJLElBQUksQ0FBQ3NDLG1CQUFtQixDQUFDdEMsSUFBSSxDQUFDLEVBQUU7SUFDbEMsVUFBQSxJQUFJb0ssR0FBRyxHQUFHLElBQUksQ0FBQzlILG1CQUFtQixDQUFDdEMsSUFBSSxDQUFDLENBQUNuQyxNQUFNLENBQUNtSixJQUFJLENBQUM1RyxNQUFNLENBQUM7SUFDNUQsVUFBQSxJQUFJZ0ssR0FBRyxFQUFFO2dCQUNQaEssTUFBTSxHQUFHQSxNQUFNLENBQUNzSSxNQUFNLENBQUMwQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNLENBQUM7SUFDckM4TSxZQUFBQSxNQUFNLElBQUkwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNO2dCQUN2QnNQLFNBQVMsSUFBSSxJQUFJLENBQUM1SCxtQkFBbUIsQ0FBQ3RDLElBQUksQ0FBQyxDQUFDbEMsV0FBVyxDQUFDcUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDOEYsR0FBRyxFQUFFQyxFQUFFLEtBQUtwRixVQUFVLENBQUNzSixHQUFHLENBQUNsRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9HLFlBQUEsU0FBU3hLLEtBQUs7SUFDaEI7SUFDRjtJQUNGO0lBRUE7SUFDQSxNQUFBLEtBQUssSUFBSXNFLElBQUksSUFBSSxJQUFJLENBQUNxQyxtQkFBbUIsRUFBRTtJQUN6QyxRQUFBLElBQUlyQyxJQUFJLEtBQUssUUFBUSxJQUFJQSxJQUFJLEtBQUssTUFBTSxJQUFJQSxJQUFJLEtBQUssVUFBVSxJQUFJQSxJQUFJLEtBQUssTUFBTSxJQUFJQSxJQUFJLEtBQUssVUFBVSxJQUFJQSxJQUFJLEtBQUssV0FBVyxJQUFJQSxJQUFJLEtBQUssV0FBVyxJQUFJQSxJQUFJLEtBQUssU0FBUyxFQUFFO0lBQy9LLFVBQUEsSUFBSW9LLEdBQUcsR0FBRyxJQUFJLENBQUM5SCxtQkFBbUIsQ0FBQ3RDLElBQUksQ0FBQyxDQUFDbkMsTUFBTSxDQUFDbUosSUFBSSxDQUFDNUcsTUFBTSxDQUFDO0lBQzVELFVBQUEsSUFBSWdLLEdBQUcsRUFBRTtnQkFDUGhLLE1BQU0sR0FBR0EsTUFBTSxDQUFDc0ksTUFBTSxDQUFDMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTSxDQUFDO0lBQ3JDOE0sWUFBQUEsTUFBTSxJQUFJMEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTTtnQkFDdkJzUCxTQUFTLElBQUksSUFBSSxDQUFDNUgsbUJBQW1CLENBQUN0QyxJQUFJLENBQUMsQ0FBQ2xDLFdBQVcsQ0FBQ3FDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQzhGLEdBQUcsRUFBRUMsRUFBRSxLQUFLcEYsVUFBVSxDQUFDc0osR0FBRyxDQUFDbEUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRyxZQUFBLFNBQVN4SyxLQUFLO0lBQ2hCO0lBQ0Y7SUFDRjtJQUVBO0lBQ0EsTUFBQSxJQUFJMk8sYUFBYSxHQUFHakssTUFBTSxDQUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQ3dILG1CQUFtQixDQUFDNUMsUUFBUSxDQUFDN0IsTUFBTSxDQUFDO0lBQzFFLE1BQUEsSUFBSXlNLGNBQWMsR0FBR2xLLE1BQU0sQ0FBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUN3SCxtQkFBbUIsQ0FBQzNDLFNBQVMsQ0FBQzlCLE1BQU0sQ0FBQztVQUM1RSxJQUFJeU0sY0FBYyxJQUFJRCxhQUFhLEVBQUU7WUFDbkMsSUFBSUUsTUFBTSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNwSyxNQUFNLEVBQUUsQ0FBQyxDQUFDa0ssY0FBYyxDQUFDO0lBQzVELFFBQUEsSUFBSUMsTUFBTSxFQUFFO0lBQ1ZMLFVBQUFBLFNBQVMsR0FBRyxDQUFHQSxFQUFBQSxTQUFTLEdBQUdLLE1BQU0sQ0FBQ0UsTUFBTSxDQUFFLENBQUE7Y0FDMUNySyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3NJLE1BQU0sQ0FBQzZCLE1BQU0sQ0FBQ0csU0FBUyxDQUFDO2NBQ3hDaEQsTUFBTSxJQUFJNkMsTUFBTSxDQUFDRyxTQUFTO0lBQzFCLFVBQUEsU0FBU2hQLEtBQUs7SUFDaEI7SUFDRjtJQUVBO0lBQ0EsTUFBQSxJQUFJME8sR0FBRyxHQUFHLGNBQWMsQ0FBQ3BELElBQUksQ0FBQzVHLE1BQU0sQ0FBQztJQUNyQyxNQUFBLElBQUlnSyxHQUFHLEVBQUU7SUFDUCxRQUFBLElBQUlPLFVBQVUsR0FBR1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTTtJQUM5QixRQUFBLE1BQU1nUSxXQUFXLEdBQUdSLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTVMsZ0JBQWdCLEdBQUdULEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbENoSyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3NJLE1BQU0sQ0FBQzBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hQLE1BQU0sQ0FBQztJQUVyQyxRQUFBLE1BQU1rUSxTQUFTLEdBQUdwRCxNQUFNLEdBQUcsQ0FBQyxHQUFHdUMsY0FBYyxDQUFDdkIsTUFBTSxDQUFDLENBQUMsRUFBRWhCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7SUFDckUsUUFBQSxNQUFNcUQsU0FBUyxHQUFHckQsTUFBTSxHQUFHMEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTSxHQUFHcVAsY0FBYyxDQUFDclAsTUFBTSxHQUFHd0YsTUFBTSxHQUFHLEdBQUc7SUFFL0UsUUFBQSxNQUFNNEssa0JBQWtCLEdBQUdELFNBQVMsQ0FBQ2pRLEtBQUssQ0FBQzBDLGtCQUFrQixDQUFDO0lBQzlELFFBQUEsTUFBTXlOLG1CQUFtQixHQUFHSCxTQUFTLENBQUNoUSxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQztJQUNoRSxRQUFBLE1BQU13TixpQkFBaUIsR0FBR0gsU0FBUyxDQUFDalEsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoRCxRQUFBLE1BQU1xUSxrQkFBa0IsR0FBR0wsU0FBUyxDQUFDaFEsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUVqRCxRQUFBLElBQUlzUSxPQUFPLEdBQUcsQ0FBQ0YsaUJBQWlCLEtBQUssQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQyxDQUFDRyxrQkFBa0IsSUFBSSxDQUFDLENBQUNGLG1CQUFtQixDQUFDO0lBQzFHLFFBQUEsSUFBSUksUUFBUSxHQUFHLENBQUNGLGtCQUFrQixLQUFLLENBQUNGLG1CQUFtQixJQUFJLENBQUMsQ0FBQ0MsaUJBQWlCLElBQUksQ0FBQyxDQUFDRixrQkFBa0IsQ0FBQztJQUUzRyxRQUFBLElBQUlILGdCQUFnQixLQUFLLEdBQUcsSUFBSU8sT0FBTyxJQUFJQyxRQUFRLEVBQUU7Y0FDbkRELE9BQU8sR0FBRyxDQUFDLENBQUNILG1CQUFtQjtjQUMvQkksUUFBUSxHQUFHLENBQUMsQ0FBQ0wsa0JBQWtCO0lBQ2pDO0lBRUEsUUFBQSxJQUFJSyxRQUFRLEVBQUU7SUFDWixVQUFBLElBQUlDLFlBQVksR0FBR25CLEtBQUssQ0FBQ3ZQLE1BQU0sR0FBRyxDQUFDO0lBQ25DLFVBQUEsT0FBTytQLFVBQVUsSUFBSVcsWUFBWSxJQUFJLENBQUMsRUFBRTtnQkFDdEMsSUFBSW5CLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxDQUFDQyxTQUFTLEtBQUtWLGdCQUFnQixFQUFFO0lBQ3RELGNBQUEsT0FBT1MsWUFBWSxHQUFHbkIsS0FBSyxDQUFDdlAsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUN0QyxnQkFBQSxNQUFNNFEsS0FBSyxHQUFHckIsS0FBSyxDQUFDcEcsR0FBRyxFQUFHO29CQUMxQm1HLFNBQVMsR0FBRyxHQUFHc0IsS0FBSyxDQUFDZixNQUFNLENBQUdlLEVBQUFBLEtBQUssQ0FBQ1osV0FBVyxDQUFDbEMsTUFBTSxDQUFDLENBQUMsRUFBRThDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUEsRUFBR3ZCLFNBQVMsQ0FBRSxDQUFBO0lBQ3RGO0lBRUEsY0FBQSxJQUFJUyxVQUFVLElBQUksQ0FBQyxJQUFJUixLQUFLLENBQUNtQixZQUFZLENBQUMsQ0FBQ0csS0FBSyxJQUFJLENBQUMsRUFBRTtvQkFDckR2QixTQUFTLEdBQUcsQ0FBd0JXLHFCQUFBQSxFQUFBQSxnQkFBZ0IsQ0FBR0EsRUFBQUEsZ0JBQWdCLENBQW1DWCxnQ0FBQUEsRUFBQUEsU0FBUyxDQUFpQ1csOEJBQUFBLEVBQUFBLGdCQUFnQixDQUFHQSxFQUFBQSxnQkFBZ0IsQ0FBUyxPQUFBLENBQUE7SUFDaE1GLGdCQUFBQSxVQUFVLElBQUksQ0FBQztJQUNmUixnQkFBQUEsS0FBSyxDQUFDbUIsWUFBWSxDQUFDLENBQUNHLEtBQUssSUFBSSxDQUFDO0lBQ2hDLGVBQUMsTUFBTTtJQUNMdkIsZ0JBQUFBLFNBQVMsR0FBRyxDQUF3QlcscUJBQUFBLEVBQUFBLGdCQUFnQiwyQkFBMkJYLFNBQVMsQ0FBQSwwQkFBQSxFQUE2QlcsZ0JBQWdCLENBQVMsT0FBQSxDQUFBO0lBQzlJRixnQkFBQUEsVUFBVSxJQUFJLENBQUM7SUFDZlIsZ0JBQUFBLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxDQUFDRyxLQUFLLElBQUksQ0FBQztJQUNoQztrQkFFQSxJQUFJdEIsS0FBSyxDQUFDbUIsWUFBWSxDQUFDLENBQUNHLEtBQUssS0FBSyxDQUFDLEVBQUU7SUFDbkMsZ0JBQUEsSUFBSUQsS0FBSyxHQUFHckIsS0FBSyxDQUFDcEcsR0FBRyxFQUFHO0lBQ3hCbUcsZ0JBQUFBLFNBQVMsR0FBRyxDQUFHc0IsRUFBQUEsS0FBSyxDQUFDZixNQUFNLENBQUEsRUFBR1AsU0FBUyxDQUFFLENBQUE7SUFDekNvQixnQkFBQUEsWUFBWSxFQUFFO0lBQ2hCO0lBQ0YsYUFBQyxNQUFNO0lBQ0xBLGNBQUFBLFlBQVksRUFBRTtJQUNoQjtJQUNGO0lBQ0Y7WUFFQSxJQUFJWCxVQUFVLElBQUlTLE9BQU8sRUFBRTtjQUN6QmpCLEtBQUssQ0FBQ3RQLElBQUksQ0FBQztJQUNUMFEsWUFBQUEsU0FBUyxFQUFFVixnQkFBZ0I7SUFDM0JELFlBQUFBLFdBQVcsRUFBRUEsV0FBVztJQUN4QmEsWUFBQUEsS0FBSyxFQUFFZCxVQUFVO0lBQ2pCRixZQUFBQSxNQUFNLEVBQUVQO0lBQ1QsV0FBQSxDQUFDO0lBQ0ZBLFVBQUFBLFNBQVMsR0FBRyxFQUFFO0lBQ2RTLFVBQUFBLFVBQVUsR0FBRyxDQUFDO0lBQ2hCO0lBRUEsUUFBQSxJQUFJQSxVQUFVLEVBQUU7SUFDZFQsVUFBQUEsU0FBUyxHQUFHLENBQUEsRUFBR0EsU0FBUyxDQUFBLEVBQUdVLFdBQVcsQ0FBQ2xDLE1BQU0sQ0FBQyxDQUFDLEVBQUVpQyxVQUFVLENBQUMsQ0FBRSxDQUFBO0lBQ2hFO0lBRUFqRCxRQUFBQSxNQUFNLElBQUkwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNO0lBQ3ZCLFFBQUEsU0FBU2MsS0FBSztJQUNoQjtJQUVBO0lBQ0EwTyxNQUFBQSxHQUFHLEdBQUcsS0FBSyxDQUFDcEQsSUFBSSxDQUFDNUcsTUFBTSxDQUFDO0lBQ3hCLE1BQUEsSUFBSWdLLEdBQUcsRUFBRTtZQUNQLElBQUlzQixRQUFRLEdBQUcsS0FBSztJQUNwQixRQUFBLElBQUlKLFlBQVksR0FBR25CLEtBQUssQ0FBQ3ZQLE1BQU0sR0FBRyxDQUFDO0lBQ25DLFFBQUEsT0FBTyxDQUFDOFEsUUFBUSxJQUFJSixZQUFZLElBQUksQ0FBQyxFQUFFO2NBQ3JDLElBQUluQixLQUFLLENBQUNtQixZQUFZLENBQUMsQ0FBQ0MsU0FBUyxLQUFLLEdBQUcsRUFBRTtJQUN6QyxZQUFBLE9BQU9ELFlBQVksR0FBR25CLEtBQUssQ0FBQ3ZQLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDdEMsY0FBQSxNQUFNNFEsS0FBSyxHQUFHckIsS0FBSyxDQUFDcEcsR0FBRyxFQUFHO2tCQUMxQm1HLFNBQVMsR0FBRyxHQUFHc0IsS0FBSyxDQUFDZixNQUFNLENBQUdlLEVBQUFBLEtBQUssQ0FBQ1osV0FBVyxDQUFDbEMsTUFBTSxDQUFDLENBQUMsRUFBRThDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUEsRUFBR3ZCLFNBQVMsQ0FBRSxDQUFBO0lBQ3RGO2dCQUVBQSxTQUFTLEdBQUcsQ0FBOERBLDJEQUFBQSxFQUFBQSxTQUFTLENBQXNDLG9DQUFBLENBQUE7SUFDekgsWUFBQSxJQUFJc0IsS0FBSyxHQUFHckIsS0FBSyxDQUFDcEcsR0FBRyxFQUFHO0lBQ3hCbUcsWUFBQUEsU0FBUyxHQUFHLENBQUdzQixFQUFBQSxLQUFLLENBQUNmLE1BQU0sQ0FBQSxFQUFHUCxTQUFTLENBQUUsQ0FBQTtJQUN6Q3dCLFlBQUFBLFFBQVEsR0FBRyxJQUFJO0lBQ2pCLFdBQUMsTUFBTTtJQUNMSixZQUFBQSxZQUFZLEVBQUU7SUFDaEI7SUFDRjtZQUVBLElBQUksQ0FBQ0ksUUFBUSxFQUFFO2NBQ2J2QixLQUFLLENBQUN0UCxJQUFJLENBQUM7SUFDVDBRLFlBQUFBLFNBQVMsRUFBRSxHQUFHO0lBQ2RYLFlBQUFBLFdBQVcsRUFBRSxJQUFJO0lBQ2pCYSxZQUFBQSxLQUFLLEVBQUUsQ0FBQztJQUNSaEIsWUFBQUEsTUFBTSxFQUFFUDtJQUNULFdBQUEsQ0FBQztJQUNGQSxVQUFBQSxTQUFTLEdBQUcsRUFBRTtJQUNoQjtJQUVBeEMsUUFBQUEsTUFBTSxJQUFJMEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTTtZQUN2QndGLE1BQU0sR0FBR0EsTUFBTSxDQUFDc0ksTUFBTSxDQUFDMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTSxDQUFDO0lBQ3JDLFFBQUEsU0FBU2MsS0FBSztJQUNoQjtJQUVBO0lBQ0EwTyxNQUFBQSxHQUFHLEdBQUcsSUFBSSxDQUFDOUgsbUJBQW1CLENBQUN6QyxPQUFPLENBQUNoQyxNQUFNLENBQUNtSixJQUFJLENBQUM1RyxNQUFNLENBQUM7SUFDMUQsTUFBQSxJQUFJZ0ssR0FBRyxFQUFFO1lBQ1BoSyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3NJLE1BQU0sQ0FBQzBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hQLE1BQU0sQ0FBQztJQUNyQzhNLFFBQUFBLE1BQU0sSUFBSTBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hQLE1BQU07WUFDdkJzUCxTQUFTLElBQUksSUFBSSxDQUFDNUgsbUJBQW1CLENBQUN6QyxPQUFPLENBQUMvQixXQUFXLENBQUNxQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM4RixHQUFHLEVBQUVDLEVBQUUsS0FBS3BGLFVBQVUsQ0FBQ3NKLEdBQUcsQ0FBQ2xFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakgsUUFBQSxTQUFTeEssS0FBSztJQUNoQjtJQUNBLE1BQUEsTUFBTSxnQkFBZ0I7SUFDeEI7UUFFQSxPQUFPeU8sS0FBSyxDQUFDdlAsTUFBTSxFQUFFO0lBQ25CLE1BQUEsTUFBTTRRLEtBQUssR0FBR3JCLEtBQUssQ0FBQ3BHLEdBQUcsRUFBRztVQUMxQm1HLFNBQVMsR0FBRyxHQUFHc0IsS0FBSyxDQUFDZixNQUFNLENBQUdlLEVBQUFBLEtBQUssQ0FBQ1osV0FBVyxDQUFDbEMsTUFBTSxDQUFDLENBQUMsRUFBRThDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUEsRUFBR3ZCLFNBQVMsQ0FBRSxDQUFBO0lBQ3RGO0lBRUEsSUFBQSxPQUFPQSxTQUFTO0lBQ2xCO0lBRVFuQyxFQUFBQSxhQUFhQSxDQUFDUixTQUFlLEVBQUVHLE1BQWMsRUFBQTtRQUNuRCxJQUFJTSxJQUFJLEdBQUdULFNBQVM7SUFDcEIsSUFBQSxJQUFJTyxHQUFXO1FBQ2YsT0FBT0UsSUFBSSxJQUFJQSxJQUFJLENBQUMvRSxVQUFVLEtBQUssSUFBSSxDQUFDaEssQ0FBQyxFQUFFO1VBQ3pDK08sSUFBSSxHQUFHQSxJQUFJLENBQUMvRSxVQUFXO0lBQ3pCO0lBQ0EsSUFBQSxJQUFJK0UsSUFBSSxLQUFLLElBQUksRUFBRSxPQUFPLElBQUk7UUFFOUIsSUFBSVQsU0FBUyxDQUFDb0UsUUFBUSxLQUFLQyxJQUFJLENBQUNDLFNBQVMsSUFBSW5FLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDekRJLE1BQUFBLEdBQUcsR0FBR0osTUFBTTtJQUNaTSxNQUFBQSxJQUFJLEdBQUdULFNBQVM7SUFDbEIsS0FBQyxNQUFNLElBQUlHLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDckJNLElBQUksR0FBR1QsU0FBUyxDQUFDbkMsVUFBVSxDQUFDc0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2Q0ksTUFBQUEsR0FBRyxHQUFHRSxJQUFJLENBQUM4RCxXQUFZLENBQUNsUixNQUFNO0lBQ2hDLEtBQUMsTUFBTTtJQUNMa04sTUFBQUEsR0FBRyxHQUFHLENBQUM7SUFDUEUsTUFBQUEsSUFBSSxHQUFHVCxTQUFTO0lBQ2xCO0lBQ0EsSUFBQSxPQUFPUyxJQUFJLENBQUMvRSxVQUFVLEtBQUssSUFBSSxDQUFDaEssQ0FBQyxFQUFFO1VBQ2pDLElBQUkrTyxJQUFJLENBQUNDLGVBQWUsRUFBRTtZQUN4QkQsSUFBSSxHQUFHQSxJQUFJLENBQUNDLGVBQWU7SUFDM0JILFFBQUFBLEdBQUcsSUFBSUUsSUFBSSxDQUFDOEQsV0FBWSxDQUFDbFIsTUFBTTtJQUNqQyxPQUFDLE1BQU07WUFDTG9OLElBQUksR0FBR0EsSUFBSSxDQUFDL0UsVUFBa0M7SUFDaEQ7SUFDRjtJQUNBLElBQUEsT0FBTzZFLEdBQUc7SUFDWjtJQUVRSyxFQUFBQSxvQkFBb0JBLENBQUNOLEdBQVcsRUFBRUMsR0FBVyxFQUE0QjtJQUFBLElBQUEsSUFBMUJpRSxnRkFBcUIsS0FBSztJQUMvRSxJQUFBLElBQUlsRSxHQUFHLElBQUksSUFBSSxDQUFDL0YsWUFBWSxDQUFDbEgsTUFBTSxFQUFFO0lBQ25DaU4sTUFBQUEsR0FBRyxHQUFHLElBQUksQ0FBQy9GLFlBQVksQ0FBQ2xILE1BQU0sR0FBRyxDQUFDO1VBQ2xDa04sR0FBRyxHQUFHLElBQUksQ0FBQ2pHLEtBQUssQ0FBQ2dHLEdBQUcsQ0FBQyxDQUFDak4sTUFBTTtJQUM5QjtRQUNBLElBQUlrTixHQUFHLEdBQUcsSUFBSSxDQUFDakcsS0FBSyxDQUFDZ0csR0FBRyxDQUFDLENBQUNqTixNQUFNLEVBQUU7VUFDaENrTixHQUFHLEdBQUcsSUFBSSxDQUFDakcsS0FBSyxDQUFDZ0csR0FBRyxDQUFDLENBQUNqTixNQUFNO0lBQzlCO0lBQ0EsSUFBQSxNQUFNcUksVUFBVSxHQUFHLElBQUksQ0FBQ25CLFlBQVksQ0FBQytGLEdBQUcsQ0FBZ0I7SUFDeEQsSUFBQSxJQUFJRyxJQUFJLEdBQUcvRSxVQUFVLENBQUNvQyxVQUFVO1FBRWhDLElBQUkyRyxnQkFBZ0IsR0FBRyxLQUFLO0lBQzVCLElBQUEsSUFBSUMsRUFBRSxHQUFHO1VBQ1BqRSxJQUFJLEVBQUUvRSxVQUFVLENBQUNvQyxVQUFVLEdBQUdwQyxVQUFVLENBQUNvQyxVQUFVLEdBQUdwQyxVQUFVO0lBQ2hFeUUsTUFBQUEsTUFBTSxFQUFFO1NBQ1Q7UUFFRCxPQUFPTSxJQUFJLEtBQUsvRSxVQUFVLEVBQUU7VUFDMUIsSUFBSSxDQUFDK0ksZ0JBQWdCLElBQUloRSxJQUFLLENBQUMyRCxRQUFRLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQzFELFFBQUEsSUFBSTdELElBQUssQ0FBQ2tFLFNBQVUsQ0FBQ3RSLE1BQU0sSUFBSWtOLEdBQUcsRUFBRTtjQUNsQyxJQUFJaUUsU0FBUyxJQUFJL0QsSUFBSyxDQUFDa0UsU0FBVSxDQUFDdFIsTUFBTSxLQUFLa04sR0FBRyxFQUFFO0lBQ2hEbUUsWUFBQUEsRUFBRSxHQUFHO0lBQUVqRSxjQUFBQSxJQUFJLEVBQUVBLElBQUs7SUFBRU4sY0FBQUEsTUFBTSxFQUFFSTtpQkFBSztJQUNqQ0EsWUFBQUEsR0FBRyxHQUFHLENBQUM7SUFDVCxXQUFDLE1BQU07Z0JBQ0wsT0FBTztJQUFFRSxjQUFBQSxJQUFJLEVBQUVBLElBQUs7SUFBRU4sY0FBQUEsTUFBTSxFQUFFSTtpQkFBSztJQUNyQztJQUNGLFNBQUMsTUFBTTtJQUNMQSxVQUFBQSxHQUFHLElBQUlFLElBQUssQ0FBQ2tFLFNBQVUsQ0FBQ3RSLE1BQU07SUFDaEM7SUFDRjtJQUNBLE1BQUEsSUFBSSxDQUFDb1IsZ0JBQWdCLElBQUloRSxJQUFLLENBQUMzQyxVQUFVLEVBQUU7WUFDekMyQyxJQUFJLEdBQUdBLElBQUssQ0FBQzNDLFVBQVU7SUFDekIsT0FBQyxNQUFNLElBQUkyQyxJQUFLLENBQUNsRCxXQUFXLEVBQUU7SUFDNUJrSCxRQUFBQSxnQkFBZ0IsR0FBRyxLQUFLO1lBQ3hCaEUsSUFBSSxHQUFHQSxJQUFLLENBQUNsRCxXQUFXO0lBQzFCLE9BQUMsTUFBTTtJQUNMa0gsUUFBQUEsZ0JBQWdCLEdBQUcsSUFBSTtZQUN2QmhFLElBQUksR0FBR0EsSUFBSyxDQUFDL0UsVUFBa0M7SUFDakQ7SUFDRjtJQUVBLElBQUEsT0FBT2dKLEVBQUU7SUFDWDtJQUVRdkMsRUFBQUEsK0JBQStCQSxHQUFBO1FBQ3JDLElBQUksQ0FBQ0gsY0FBYyxFQUFFO1FBQ3JCLElBQUksQ0FBQzRDLGtCQUFrQixFQUFFO1FBQ3pCLElBQUksQ0FBQ3pHLGdCQUFnQixFQUFFO0lBQ3pCO0lBRVE2RCxFQUFBQSxjQUFjQSxHQUFBO1FBQ3BCLElBQUksQ0FBQ3BILFNBQVMsR0FBRyxJQUFJc0QsS0FBSyxDQUFDLElBQUksQ0FBQzVELEtBQUssQ0FBQ2pILE1BQU0sQ0FBQztJQUM3QyxJQUFBLEtBQUssSUFBSUQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQ3dILFNBQVMsQ0FBQ3ZILE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDOUMsTUFBQSxJQUFJLENBQUN3SCxTQUFTLENBQUN4SCxDQUFDLENBQUMsR0FBRyxLQUFLO0lBQzNCO0lBQ0Y7SUFFUXdSLEVBQUFBLGtCQUFrQkEsR0FBQTtJQUN4QixJQUFBLElBQUlDLFNBQVMsR0FBRyxJQUFJLENBQUNuVCxDQUFFLENBQUNvVCxpQkFBaUIsR0FBRyxJQUFJLENBQUN4SyxLQUFLLENBQUNqSCxNQUFNO0lBQzdELElBQUEsSUFBSXdSLFNBQVMsRUFBRTtVQUNiLElBQUlFLGdCQUFnQixHQUFHLENBQUM7VUFDeEIsT0FDRUEsZ0JBQWdCLElBQUksSUFBSSxDQUFDekssS0FBSyxDQUFDakgsTUFBTSxJQUNyQzBSLGdCQUFnQixJQUFJLElBQUksQ0FBQ3hLLFlBQVksQ0FBQ2xILE1BQU0sSUFDNUMsSUFBSSxDQUFDa0gsWUFBWSxDQUFDd0ssZ0JBQWdCLENBQUMsSUFDbkMsSUFBSSxDQUFDekssS0FBSyxDQUFDeUssZ0JBQWdCLENBQUMsS0FBTSxJQUFJLENBQUN4SyxZQUFZLENBQUN3SyxnQkFBZ0IsQ0FBaUIsQ0FBQ1IsV0FBVyxJQUNqRyxJQUFJLENBQUMvSixTQUFTLENBQUN1SyxnQkFBZ0IsQ0FBQyxLQUFNLElBQUksQ0FBQ3hLLFlBQVksQ0FBQ3dLLGdCQUFnQixDQUFpQixDQUFDdFMsU0FBUyxFQUNuRztJQUNBc1MsUUFBQUEsZ0JBQWdCLEVBQUU7SUFDcEI7VUFFQSxJQUFJQyxlQUFlLEdBQUcsRUFBRTtJQUN4QixNQUFBLE9BQ0UsQ0FBQ0EsZUFBZSxHQUFHLElBQUksQ0FBQzFLLEtBQUssQ0FBQ2pILE1BQU0sSUFDcEMsQ0FBQzJSLGVBQWUsR0FBRyxJQUFJLENBQUN6SyxZQUFZLENBQUNsSCxNQUFNLElBQzNDLElBQUksQ0FBQ2lILEtBQUssQ0FBQyxJQUFJLENBQUNBLEtBQUssQ0FBQ2pILE1BQU0sR0FBRzJSLGVBQWUsQ0FBQyxLQUM1QyxJQUFJLENBQUN6SyxZQUFZLENBQUMsSUFBSSxDQUFDQSxZQUFZLENBQUNsSCxNQUFNLEdBQUcyUixlQUFlLENBQWlCLENBQUNULFdBQVcsSUFDNUYsSUFBSSxDQUFDL0osU0FBUyxDQUFDLElBQUksQ0FBQ0YsS0FBSyxDQUFDakgsTUFBTSxHQUFHMlIsZUFBZSxDQUFDLEtBQ2hELElBQUksQ0FBQ3pLLFlBQVksQ0FBQyxJQUFJLENBQUNBLFlBQVksQ0FBQ2xILE1BQU0sR0FBRzJSLGVBQWUsQ0FBaUIsQ0FBQ3ZTLFNBQVMsRUFDMUY7SUFDQXVTLFFBQUFBLGVBQWUsRUFBRTtJQUNuQjtJQUVBLE1BQUEsSUFBSUMsYUFBYSxHQUFHLElBQUksQ0FBQzNLLEtBQUssQ0FBQ2pILE1BQU0sR0FBRzJSLGVBQWUsR0FBRyxDQUFDLEdBQUdELGdCQUFnQjtVQUM5RSxJQUFJRSxhQUFhLEdBQUcsQ0FBQ0osU0FBUyxFQUFFSSxhQUFhLEdBQUcsQ0FBQ0osU0FBUztJQUMxRCxNQUFBLElBQUlJLGFBQWEsR0FBRyxDQUFDLEVBQUVBLGFBQWEsR0FBRyxDQUFDO1VBRXhDLElBQUlDLFVBQVUsR0FBRyxFQUFFO0lBQ25CLE1BQUEsS0FBSyxJQUFJMUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHeUcsYUFBYSxHQUFHSixTQUFTLEVBQUVyRyxDQUFDLEVBQUUsRUFBRTtJQUNsRDBHLFFBQUFBLFVBQVUsQ0FBQzVSLElBQUksQ0FBRSxJQUFJLENBQUNpSCxZQUFZLENBQUN3SyxnQkFBZ0IsR0FBR3ZHLENBQUMsQ0FBaUIsQ0FBQytGLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDN0Y7VUFDQSxJQUFJLENBQUNqRCxXQUFXLENBQUN5RCxnQkFBZ0IsRUFBRUUsYUFBYSxFQUFFQyxVQUFVLEVBQUUsS0FBSyxDQUFDO0lBQ3RFLEtBQUMsTUFBTTtJQUNMLE1BQUEsS0FBSyxJQUFJQyxJQUFJLEdBQUcsQ0FBQyxFQUFFQSxJQUFJLEdBQUcsSUFBSSxDQUFDNUssWUFBWSxDQUFDbEgsTUFBTSxFQUFFOFIsSUFBSSxFQUFFLEVBQUU7SUFDMUQsUUFBQSxJQUFJelQsQ0FBQyxHQUFHLElBQUksQ0FBQzZJLFlBQVksQ0FBQzRLLElBQUksQ0FBZ0I7SUFDOUMsUUFBQSxJQUFJQyxFQUFFLEdBQUcxVCxDQUFDLENBQUM2UyxXQUFXLElBQUksRUFBRTtJQUM1QixRQUFBLElBQUksSUFBSSxDQUFDakssS0FBSyxDQUFDNkssSUFBSSxDQUFDLEtBQUtDLEVBQUUsSUFBSSxJQUFJLENBQUM1SyxTQUFTLENBQUMySyxJQUFJLENBQUMsS0FBS3pULENBQUMsQ0FBQ2UsU0FBUyxFQUFFO0lBQ25FLFVBQUEsSUFBSSxDQUFDNkgsS0FBSyxDQUFDNkssSUFBSSxDQUFDLEdBQUdDLEVBQUU7Y0FDckIsSUFBSSxDQUFDNUssU0FBUyxDQUFDMkssSUFBSSxDQUFDLEdBQUd6VCxDQUFDLENBQUNlLFNBQVM7SUFDbEMsVUFBQSxJQUFJLENBQUNtSSxTQUFTLENBQUN1SyxJQUFJLENBQUMsR0FBRyxJQUFJO0lBQzdCO0lBQ0Y7SUFDRjtJQUNGO01BRVFsRCxtQkFBbUJBLENBQUNvRCxHQUFhLEVBQUE7UUFDdkMsSUFBSSxDQUFDQSxHQUFHLEVBQUU7UUFFVixJQUFJLENBQUNULGtCQUFrQixFQUFFO1FBRXpCLElBQUlVLGVBQWUsR0FBbUIsS0FBSztJQUMzQyxJQUFBLElBQUlDLFNBQVMsR0FBR0YsR0FBRyxDQUFDOUUsR0FBRyxHQUFHLENBQUMsR0FBRzhFLEdBQUcsQ0FBQy9FLEdBQUcsR0FBRytFLEdBQUcsQ0FBQy9FLEdBQUcsR0FBRyxDQUFDO0lBQ25ELElBQUEsUUFBUSxJQUFJLENBQUM5RixTQUFTLENBQUMrSyxTQUFTLENBQUM7SUFDL0IsTUFBQSxLQUFLLE1BQU07SUFDVEQsUUFBQUEsZUFBZSxHQUFHLE1BQU07SUFDeEIsUUFBQTtJQUNGLE1BQUEsS0FBSyxNQUFNO0lBQ1RBLFFBQUFBLGVBQWUsR0FBRyxNQUFNO0lBQ3hCLFFBQUE7SUFDRixNQUFBLEtBQUssZ0JBQWdCO0lBQ25CQSxRQUFBQSxlQUFlLEdBQUcsZ0JBQWdCO0lBQ2xDLFFBQUE7SUFDSjtRQUVBLElBQUloTCxLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLENBQUMrSyxHQUFHLENBQUMvRSxHQUFHLENBQUMsQ0FBQzFILE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMzRixLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDOUUsSUFBQSxJQUFJcUgsS0FBSyxDQUFDakgsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNwQixNQUFBLElBQUksQ0FBQ2lPLFdBQVcsQ0FBQytELEdBQUcsQ0FBQy9FLEdBQUcsRUFBRSxDQUFDLEVBQUVoRyxLQUFLLEVBQUUsSUFBSSxDQUFDO1VBQ3pDK0ssR0FBRyxDQUFDL0UsR0FBRyxFQUFFO1VBQ1QrRSxHQUFHLENBQUM5RSxHQUFHLEdBQUcsQ0FBQztJQUNiO0lBRUEsSUFBQSxJQUFJK0UsZUFBZSxFQUFFO1VBQ25CLElBQUk3RyxPQUFPLEdBQUdySSxXQUFXLENBQUNrUCxlQUFlLENBQUMsQ0FBQ2hQLE1BQU0sQ0FBQ21KLElBQUksQ0FBQyxJQUFJLENBQUNuRixLQUFLLENBQUMrSyxHQUFHLENBQUMvRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsTUFBQSxJQUFJN0IsT0FBTyxFQUFFO0lBQ1gsUUFBQSxJQUFJQSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Y0FDZCxJQUFJNkcsZUFBZSxLQUFLLE1BQU0sRUFBRTtJQUM5QjdHLFlBQUFBLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBR0EsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDN0YsT0FBTyxDQUFDLFNBQVMsRUFBR29LLE1BQU0sSUFBSTtrQkFDcEQsT0FBTyxDQUFDbkUsUUFBUSxDQUFDbUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFOUQsUUFBUSxFQUFFO0lBQzFDLGFBQUMsQ0FBQztJQUNKO2NBQ0EsSUFBSSxDQUFDNUUsS0FBSyxDQUFDK0ssR0FBRyxDQUFDL0UsR0FBRyxDQUFDLEdBQUcsQ0FBQSxFQUFHN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUcsSUFBSSxDQUFDbkUsS0FBSyxDQUFDK0ssR0FBRyxDQUFDL0UsR0FBRyxDQUFDLENBQUUsQ0FBQTtjQUMzRCxJQUFJLENBQUMxRixTQUFTLENBQUN5SyxHQUFHLENBQUMvRSxHQUFHLENBQUMsR0FBRyxJQUFJO2NBQzlCK0UsR0FBRyxDQUFDOUUsR0FBRyxHQUFHOUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcEwsTUFBTTtJQUM3QixTQUFDLE1BQU07Y0FDTCxJQUFJLENBQUNpSCxLQUFLLENBQUMrSyxHQUFHLENBQUMvRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtjQUM1QixJQUFJLENBQUMxRixTQUFTLENBQUN5SyxHQUFHLENBQUMvRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUNwQztJQUNGO0lBQ0Y7UUFDQSxJQUFJLENBQUNuQyxnQkFBZ0IsRUFBRTtJQUN6QjtNQUVRbUQsV0FBV0EsQ0FDakJrRSxTQUFpQixFQUdpQjtJQUFBLElBQUEsSUFGbENQLGFBQXdCLEdBQUFoTSxTQUFBLENBQUE1RixNQUFBLEdBQUEsQ0FBQSxJQUFBNEYsU0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBL0UsU0FBQSxHQUFBK0UsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUM7SUFBQSxJQUFBLElBQ3pCd00sYUFBMEIsR0FBQXhNLFNBQUEsQ0FBQTVGLE1BQUEsR0FBQSxDQUFBLElBQUE0RixTQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEvRSxTQUFBLEdBQUErRSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBRTtJQUFBLElBQUEsSUFDNUJ5TSxrQkFBQSxHQUFBek0sU0FBQSxDQUFBNUYsTUFBQSxHQUFBLENBQUEsSUFBQTRGLFNBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQS9FLFNBQUEsR0FBQStFLFNBQUEsQ0FBQSxDQUFBLENBQUEsR0FBOEIsSUFBSTtJQUVsQyxJQUFBLElBQUl5TSxrQkFBa0IsRUFBRTtVQUN0QixLQUFLLElBQUl0UyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc2UixhQUFhLEVBQUU3UixDQUFDLEVBQUUsRUFBRTtJQUN0QyxRQUFBLElBQUksQ0FBQzFCLENBQUUsQ0FBQ3FNLFdBQVcsQ0FBQyxJQUFJLENBQUNyTSxDQUFFLENBQUNtTSxVQUFVLENBQUMySCxTQUFTLENBQUMsQ0FBQztJQUNwRDtJQUNGO1FBRUEsSUFBSUcsYUFBYSxHQUFHLEVBQUU7UUFDdEIsSUFBSUMsYUFBYSxHQUFHLEVBQUU7SUFFdEIsSUFBQSxLQUFLLElBQUl4UyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdxUyxhQUFhLENBQUNwUyxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQzdDdVMsTUFBQUEsYUFBYSxDQUFDclMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QnNTLE1BQUFBLGFBQWEsQ0FBQ3RTLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsTUFBQSxJQUFJb1Msa0JBQWtCLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUNoVSxDQUFFLENBQUNtTSxVQUFVLENBQUMySCxTQUFTLENBQUMsRUFDL0IsSUFBSSxDQUFDOVQsQ0FBRSxDQUFDOEwsWUFBWSxDQUFDeEwsUUFBUSxDQUFDUSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDZCxDQUFFLENBQUNtTSxVQUFVLENBQUMySCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQ2hGLElBQUksQ0FBQzlULENBQUUsQ0FBQ2tCLFdBQVcsQ0FBQ1osUUFBUSxDQUFDUSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQ7SUFDRjtRQUVBLElBQUksQ0FBQzhILEtBQUssQ0FBQ3VMLE1BQU0sQ0FBQ0wsU0FBUyxFQUFFUCxhQUFhLEVBQUUsR0FBR1EsYUFBYSxDQUFDO1FBQzdELElBQUksQ0FBQ2pMLFNBQVMsQ0FBQ3FMLE1BQU0sQ0FBQ0wsU0FBUyxFQUFFUCxhQUFhLEVBQUUsR0FBR1UsYUFBYSxDQUFDO1FBQ2pFLElBQUksQ0FBQy9LLFNBQVMsQ0FBQ2lMLE1BQU0sQ0FBQ0wsU0FBUyxFQUFFUCxhQUFhLEVBQUUsR0FBR1csYUFBYSxDQUFDO0lBQ25FO0lBRVExRCxFQUFBQSxnQkFBZ0JBLEdBQUE7UUFDdEIsTUFBTTRELGdCQUFnQixHQUFHNUgsS0FBSyxDQUFDNkgsSUFBSSxDQUFDLElBQUksQ0FBQ3JVLENBQUUsQ0FBQ21NLFVBQVUsQ0FBQztJQUV2RCxJQUFBLE1BQU1tSSxZQUFZLEdBQUcsVUFBQ0MsS0FBVyxFQUE0QjtJQUMzRCxNQUFBLE1BQU1DLE1BQU0sR0FBR0QsS0FBSyxDQUFDMVQsYUFBYztJQUNuQyxNQUFBLE1BQU1nTCxXQUFXLEdBQUcwSSxLQUFLLENBQUMxSSxXQUFXO0lBQ3JDMkksTUFBQUEsTUFBTSxDQUFDbkksV0FBVyxDQUFDa0ksS0FBSyxDQUFDO1VBQUMsS0FBQUUsSUFBQUEsSUFBQSxHQUFBbE4sU0FBQSxDQUFBNUYsTUFBQSxFQUhVK1MsV0FBbUIsT0FBQWxJLEtBQUEsQ0FBQWlJLElBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsSUFBQSxXQUFBRSxJQUFBLEdBQUEsQ0FBQSxFQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQSxFQUFBLEVBQUE7SUFBbkJELFFBQUFBLFdBQW1CLENBQUFDLElBQUEsR0FBQXBOLENBQUFBLENBQUFBLEdBQUFBLFNBQUEsQ0FBQW9OLElBQUEsQ0FBQTtJQUFBO1VBSXZERCxXQUFXLENBQUNFLE9BQU8sQ0FBRUMsUUFBUSxJQUMzQmhKLFdBQVcsR0FBRzJJLE1BQU0sQ0FBQzFJLFlBQVksQ0FBQytJLFFBQVEsRUFBRWhKLFdBQVcsQ0FBQyxHQUFHMkksTUFBTSxDQUFDdFQsV0FBVyxDQUFDMlQsUUFBUSxDQUFDLENBQ3hGO1NBQ0Y7SUFFRFQsSUFBQUEsZ0JBQWdCLENBQUNRLE9BQU8sQ0FBRUwsS0FBSyxJQUFJO0lBQ2pDLE1BQUEsSUFBSUEsS0FBSyxDQUFDN0IsUUFBUSxLQUFLQyxJQUFJLENBQUNtQyxZQUFZLElBQUtQLEtBQXFCLENBQUN4SyxPQUFPLEtBQUssS0FBSyxFQUFFO0lBQ3BGLFFBQUEsTUFBTWdMLFVBQVUsR0FBR3pVLFFBQVEsQ0FBQ1EsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNoRHdULFFBQUFBLFlBQVksQ0FBQ0MsS0FBSyxFQUFFUSxVQUFVLENBQUM7SUFDL0JBLFFBQUFBLFVBQVUsQ0FBQzdULFdBQVcsQ0FBQ3FULEtBQUssQ0FBQztXQUM5QixNQUFNLElBQUlBLEtBQUssQ0FBQ3BJLFVBQVUsQ0FBQ3hLLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEM0UyxLQUFLLENBQUNyVCxXQUFXLENBQUNaLFFBQVEsQ0FBQ1EsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQUMsTUFBTTtZQUNMLE1BQU1rVSxhQUFhLEdBQUd4SSxLQUFLLENBQUM2SCxJQUFJLENBQUNFLEtBQUssQ0FBQ3BJLFVBQVUsQ0FBQztZQUNsRCxJQUNFNkksYUFBYSxDQUFDQyxJQUFJLENBQ2ZDLFVBQVUsSUFDVEEsVUFBVSxDQUFDeEMsUUFBUSxLQUFLQyxJQUFJLENBQUNtQyxZQUFZLElBQUtJLFVBQTBCLENBQUNuTCxPQUFPLEtBQUssS0FBSyxDQUM3RixFQUNEO0lBQ0EsVUFBQSxPQUFPdUssWUFBWSxDQUFDQyxLQUFLLEVBQUUsR0FBR1MsYUFBYSxDQUFDO0lBQzlDO0lBQ0Y7SUFDRixLQUFDLENBQUM7SUFDSjtJQUVRekQsRUFBQUEsZ0JBQWdCQSxDQUFDUCxjQUFzQixFQUFFbUUsT0FBZ0IsRUFBQTtJQUMvRDtJQUNBLElBQUEsSUFBSUMsVUFBVSxHQUFHRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDaEMsSUFBSUUsTUFBTSxHQUFHckUsY0FBYyxDQUFDdkIsTUFBTSxDQUFDLENBQUMsRUFBRTJGLFVBQVUsQ0FBQztJQUNqRCxJQUFBLElBQUl0TixJQUFJLEdBQUdxTixPQUFPLEdBQUcsU0FBUyxHQUFHLFFBQVE7UUFDekMsSUFBSUcsYUFBYSxHQUFHRixVQUFVO1FBRTlCLElBQUlHLFlBQVksR0FBRyxDQUFDO1FBQ3BCLElBQUlDLFFBQVEsR0FBbUIsS0FBSztRQUNwQyxJQUFJQyxPQUFPLEdBQW1CLEtBQUs7UUFDbkMsSUFBSTlPLFNBQVMsR0FBYSxFQUFFO1FBQzVCLElBQUkrTyxXQUFXLEdBQWEsRUFBRTtRQUU5QkMsU0FBUyxFQUFFLE9BQ1RMLGFBQWEsR0FBR3RFLGNBQWMsQ0FBQ3JQLE1BQU0sSUFDckM2VCxRQUFRLEtBQUssS0FBSyxFQUNsQjtJQUNBLE1BQUEsSUFBSXJPLE1BQU0sR0FBRzZKLGNBQWMsQ0FBQ3ZCLE1BQU0sQ0FBQzZGLGFBQWEsQ0FBQztJQUVqRDtJQUNBLE1BQUEsS0FBSyxJQUFJdk8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDdkQsUUFBQSxJQUFJb0ssR0FBRyxHQUFHLElBQUksQ0FBQzlILG1CQUFtQixDQUFDdEMsSUFBSSxDQUFDLENBQUNuQyxNQUFNLENBQUNtSixJQUFJLENBQUM1RyxNQUFNLENBQUM7SUFDNUQsUUFBQSxJQUFJZ0ssR0FBRyxFQUFFO0lBQ1BtRSxVQUFBQSxhQUFhLElBQUluRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNO0lBQzlCLFVBQUEsU0FBU2dVLFNBQVM7SUFDcEI7SUFDRjtJQUVBO0lBQ0EsTUFBQSxJQUFJeE8sTUFBTSxDQUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQ3dILG1CQUFtQixDQUFDM0MsU0FBUyxDQUFDOUIsTUFBTSxDQUFDLEVBQUU7SUFDM0QyUSxRQUFBQSxZQUFZLEVBQUU7SUFDZEQsUUFBQUEsYUFBYSxJQUFJLENBQUM7SUFDbEIsUUFBQSxTQUFTSyxTQUFTO0lBQ3BCO0lBRUE7SUFDQSxNQUFBLElBQUl4TyxNQUFNLENBQUN0RixLQUFLLENBQUMsSUFBSSxDQUFDd0gsbUJBQW1CLENBQUM1QyxRQUFRLENBQUM3QixNQUFNLENBQUMsRUFBRTtJQUMxRDJRLFFBQUFBLFlBQVksRUFBRTtZQUNkLElBQUksQ0FBQ0osT0FBTyxFQUFFO2NBQ1osSUFBSSxJQUFJLENBQUM1RCxnQkFBZ0IsQ0FBQ3BLLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtJQUN4QyxZQUFBLE9BQU8sS0FBSztJQUNkO0lBQ0Y7SUFDQW1PLFFBQUFBLGFBQWEsSUFBSSxDQUFDO0lBQ2xCLFFBQUEsU0FBU0ssU0FBUztJQUNwQjtJQUVBO0lBQ0EsTUFBQSxJQUFJeE8sTUFBTSxDQUFDdEYsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3ZCMFQsUUFBQUEsWUFBWSxFQUFFO1lBQ2QsSUFBSUEsWUFBWSxLQUFLLENBQUMsRUFBRTtjQUN0QkMsUUFBUSxHQUFHeEUsY0FBYyxDQUFDdkIsTUFBTSxDQUFDMkYsVUFBVSxFQUFFRSxhQUFhLEdBQUdGLFVBQVUsQ0FBQztJQUN4RUUsVUFBQUEsYUFBYSxFQUFFO0lBQ2YsVUFBQSxTQUFTSyxTQUFTO0lBQ3BCO0lBQ0Y7SUFFQTtJQUNBTCxNQUFBQSxhQUFhLEVBQUU7SUFDakI7SUFFQTtJQUNBLElBQUEsSUFBSUUsUUFBUSxLQUFLLEtBQUssRUFBRSxPQUFPLEtBQUs7SUFFcEM7SUFDQSxJQUFBLElBQUlJLFFBQVEsR0FBR04sYUFBYSxHQUFHdEUsY0FBYyxDQUFDclAsTUFBTSxHQUFHcVAsY0FBYyxDQUFDdkIsTUFBTSxDQUFDNkYsYUFBYSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFFbkc7UUFDQSxJQUFJTSxRQUFRLEtBQUssR0FBRyxFQUFFO0lBQ3BCLE1BQUEsSUFBSXpPLE1BQU0sR0FBRzZKLGNBQWMsQ0FBQ3ZCLE1BQU0sQ0FBQzZGLGFBQWEsQ0FBQztJQUNqRCxNQUFBLElBQUluRSxHQUFHLEdBQUcsSUFBSSxDQUFDOUgsbUJBQW1CLENBQUMxQyxTQUFTLENBQUMvQixNQUFNLENBQUNtSixJQUFJLENBQUM1RyxNQUFNLENBQUM7SUFDaEUsTUFBQSxJQUFJZ0ssR0FBRyxFQUFFO0lBQ1BtRSxRQUFBQSxhQUFhLElBQUluRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNO0lBQzlCZ0YsUUFBQUEsU0FBUyxDQUFDL0UsSUFBSSxDQUFDdVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJQSxHQUFHLENBQUMsSUFBSSxDQUFDOUgsbUJBQW1CLENBQUMxQyxTQUFTLENBQUNYLGdCQUFpQixDQUFDLEVBQUU7Y0FDN0R5UCxPQUFPLEdBQUd0RSxHQUFHLENBQUMsSUFBSSxDQUFDOUgsbUJBQW1CLENBQUMxQyxTQUFTLENBQUNYLGdCQUFpQixDQUFDO0lBQ3JFLFNBQUMsTUFBTTtJQUNMeVAsVUFBQUEsT0FBTyxHQUFHRCxRQUFRLENBQUNLLElBQUksRUFBRTtJQUMzQjtJQUNGLE9BQUMsTUFBTTtJQUNMLFFBQUEsT0FBTyxLQUFLO0lBQ2Q7SUFDRixLQUFDLE1BQU0sSUFBSUQsUUFBUSxLQUFLLEdBQUcsRUFBRTtJQUMzQjtJQUNBSCxNQUFBQSxPQUFPLEdBQUdELFFBQVEsQ0FBQ0ssSUFBSSxFQUFFO0lBQzNCLEtBQUMsTUFBTTtJQUNMO0lBQ0FQLE1BQUFBLGFBQWEsRUFBRTtVQUNmLElBQUlRLGdCQUFnQixHQUFHLENBQUM7VUFFeEJDLFdBQVcsRUFBRSxPQUFPVCxhQUFhLEdBQUd0RSxjQUFjLENBQUNyUCxNQUFNLElBQUltVSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7SUFDakYsUUFBQSxJQUFJM08sTUFBTSxHQUFHNkosY0FBYyxDQUFDdkIsTUFBTSxDQUFDNkYsYUFBYSxDQUFDO0lBRWpEO0lBQ0EsUUFBQSxJQUFJbkUsR0FBRyxHQUFHLE1BQU0sQ0FBQ3BELElBQUksQ0FBQzVHLE1BQU0sQ0FBQztJQUM3QixRQUFBLElBQUlnSyxHQUFHLEVBQUU7Y0FDUCxRQUFRdUUsV0FBVyxDQUFDL1QsTUFBTTtJQUN4QixZQUFBLEtBQUssQ0FBQztJQUNKK1QsY0FBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDdVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLGNBQUE7SUFDRixZQUFBLEtBQUssQ0FBQztJQUNKdUUsY0FBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDdVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLGNBQUE7SUFDRixZQUFBLEtBQUssQ0FBQztrQkFDSixJQUFJdUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDN1QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQzdCNlQsZ0JBQUFBLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDMVQsTUFBTSxDQUFDbVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELGVBQUMsTUFBTTtJQUNMLGdCQUFBLElBQUkyRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsT0FBTyxLQUFLO0lBQ3hDSixnQkFBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNwQjhULGdCQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUN1UCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUI7SUFDQSxjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSnVFLGNBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQ3VQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSixjQUFBLE9BQU8sS0FBSztJQUNkLFlBQUEsS0FBSyxDQUFDO0lBQ0p1RSxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFlBQUEsS0FBSyxDQUFDO0lBQ0o4VCxjQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQ21QLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSnVFLGNBQUFBLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDMVQsTUFBTSxDQUFDbVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLGNBQUE7SUFDRixZQUFBO0lBQ0UsY0FBQSxPQUFPLEtBQUs7SUFDaEI7SUFDQW1FLFVBQUFBLGFBQWEsSUFBSW5FLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hQLE1BQU07SUFDOUIsVUFBQSxTQUFTb1UsV0FBVztJQUN0QjtJQUVBO0lBQ0E1RSxRQUFBQSxHQUFHLEdBQUcsSUFBSSxDQUFDOUgsbUJBQW1CLENBQUMvQyxNQUFNLENBQUMxQixNQUFNLENBQUNtSixJQUFJLENBQUM1RyxNQUFNLENBQUM7SUFDekQsUUFBQSxJQUFJZ0ssR0FBRyxFQUFFO2NBQ1AsUUFBUXVFLFdBQVcsQ0FBQy9ULE1BQU07SUFDeEIsWUFBQSxLQUFLLENBQUM7SUFDSitULGNBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEIsWUFBQSxLQUFLLENBQUM7SUFDSjhULGNBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQ3VQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSnVFLGNBQUFBLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDMVQsTUFBTSxDQUFDbVAsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLGNBQUE7SUFDRixZQUFBLEtBQUssQ0FBQztJQUNKLGNBQUEsT0FBTyxLQUFLO0lBQ2QsWUFBQSxLQUFLLENBQUM7SUFDSixjQUFBLE9BQU8sS0FBSztJQUNkLFlBQUEsS0FBSyxDQUFDO0lBQ0p1RSxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFlBQUEsS0FBSyxDQUFDO0lBQ0o4VCxjQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQ21QLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxjQUFBO0lBQ0YsWUFBQTtJQUNFLGNBQUEsT0FBTyxLQUFLO0lBQ2hCO0lBQ0FtRSxVQUFBQSxhQUFhLElBQUluRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUN4UCxNQUFNO0lBQzlCLFVBQUEsU0FBU29VLFdBQVc7SUFDdEI7SUFFQTtJQUNBLFFBQUEsSUFBSUwsV0FBVyxDQUFDL1QsTUFBTSxHQUFHLENBQUMsSUFBSXdGLE1BQU0sQ0FBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUNoRCxJQUFJNlQsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsRUFBRStULFdBQVcsQ0FBQzlULElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbEQ4VCxVQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDM0NzVCxVQUFBQSxhQUFhLEVBQUU7SUFDZixVQUFBLFNBQVNTLFdBQVc7SUFDdEI7SUFFQTtJQUNBLFFBQUEsSUFBSSxDQUFDTCxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxJQUFJK1QsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsS0FBS3dGLE1BQU0sQ0FBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUNoRixJQUFJNlQsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsRUFBRStULFdBQVcsQ0FBQzlULElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbEQ4VCxVQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3JCMFQsVUFBQUEsYUFBYSxFQUFFO0lBQ2YsVUFBQSxTQUFTUyxXQUFXO0lBQ3RCO0lBRUE7SUFDQTVFLFFBQUFBLEdBQUcsR0FBRyxPQUFPLENBQUNwRCxJQUFJLENBQUM1RyxNQUFNLENBQUM7WUFDMUIsSUFBSWdLLEdBQUcsS0FBS3VFLFdBQVcsQ0FBQy9ULE1BQU0sS0FBSyxDQUFDLElBQUkrVCxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxJQUFJK1QsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO2NBQzdGLE9BQU8rVCxXQUFXLENBQUMvVCxNQUFNLEdBQUcsQ0FBQyxFQUFFK1QsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuRDhULFVBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQ3VQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4Qm1FLFVBQUFBLGFBQWEsRUFBRTtJQUNmLFVBQUEsU0FBU1MsV0FBVztJQUN0QjtZQUVBLElBQUk1RSxHQUFHLEtBQUt1RSxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxJQUFJK1QsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJK1QsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLdkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQzlGLElBQUl1RSxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxFQUFFK1QsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNsRDhULFVBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQ3VQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4Qm1FLFVBQUFBLGFBQWEsRUFBRTtJQUNmLFVBQUEsU0FBU1MsV0FBVztJQUN0QjtJQUVBO0lBQ0EsUUFBQSxJQUFJNU8sTUFBTSxDQUFDdEYsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQ3ZCLFFBQVE2VCxXQUFXLENBQUMvVCxNQUFNO0lBQ3hCLFlBQUEsS0FBSyxDQUFDO0lBQ0orVCxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFlBQUEsS0FBSyxDQUFDO0lBQ0o4VCxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFlBQUEsS0FBSyxDQUFDO0lBQ0o4VCxjQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDM0MsY0FBQSxJQUFJLENBQUMwVCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM3VCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUVpVSxnQkFBZ0IsRUFBRTtJQUNuRCxjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSkosY0FBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QixZQUFBLEtBQUssQ0FBQztJQUNKOFQsY0FBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNyQixjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSjhULGNBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEIsWUFBQSxLQUFLLENBQUM7a0JBQ0osSUFBSThULFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLO0lBQ3hDQSxjQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDM0MsY0FBQTtJQUNGLFlBQUE7SUFDRSxjQUFBLE9BQU8sS0FBSztJQUNoQjtJQUNBc1QsVUFBQUEsYUFBYSxFQUFFO0lBQ2YsVUFBQSxTQUFTUyxXQUFXO0lBQ3RCO0lBRUE7SUFDQSxRQUFBLElBQUk1TyxNQUFNLENBQUN0RixLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDdkIsVUFBQSxJQUFJNlQsV0FBVyxDQUFDL1QsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsT0FBTytULFdBQVcsQ0FBQy9ULE1BQU0sR0FBRyxDQUFDLEVBQUUrVCxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25ELFlBQUEsSUFBSSxDQUFDOFQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDN1QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFaVUsZ0JBQWdCLEVBQUU7Z0JBQ25ELElBQUlBLGdCQUFnQixHQUFHLENBQUMsRUFBRTtJQUN4QkosY0FBQUEsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxVCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQzdDO0lBQ0YsV0FBQyxNQUFNLElBQUkwVCxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxJQUFJK1QsV0FBVyxDQUFDL1QsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUMvRCxZQUFBLElBQUkrVCxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO2tCQUMxQixJQUFJQSxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxFQUFFK1QsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNsRDhULGNBQUFBLFdBQVcsQ0FBQzlULElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdkIsYUFBQyxNQUFNO2tCQUNMLElBQUk4VCxXQUFXLENBQUMvVCxNQUFNLEtBQUssQ0FBQyxFQUFFK1QsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQy9DOFQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxVCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2xEO0lBQ0YsV0FBQyxNQUFNO0lBQ0w4VCxZQUFBQSxnQkFBZ0IsRUFBRTtJQUNwQjtjQUVBLElBQUlBLGdCQUFnQixLQUFLLENBQUMsRUFBRTtnQkFDMUIsT0FBT0osV0FBVyxDQUFDL1QsTUFBTSxHQUFHLENBQUMsRUFBRStULFdBQVcsQ0FBQzlULElBQUksQ0FBQyxFQUFFLENBQUM7SUFDckQ7SUFFQTBULFVBQUFBLGFBQWEsRUFBRTtJQUNmLFVBQUEsU0FBU1MsV0FBVztJQUN0QjtJQUVBO0lBQ0E1RSxRQUFBQSxHQUFHLEdBQUcsSUFBSSxDQUFDcEQsSUFBSSxDQUFDNUcsTUFBTSxDQUFDO0lBQ3ZCLFFBQUEsSUFBSWdLLEdBQUcsRUFBRTtjQUNQLFFBQVF1RSxXQUFXLENBQUMvVCxNQUFNO0lBQ3hCLFlBQUEsS0FBSyxDQUFDO0lBQ0orVCxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFlBQUEsS0FBSyxDQUFDO0lBQ0o4VCxjQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUN1UCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsY0FBQTtJQUNGLFlBQUEsS0FBSyxDQUFDO0lBQ0p1RSxjQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzFULE1BQU0sQ0FBQ21QLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxjQUFBO0lBQ0YsWUFBQSxLQUFLLENBQUM7SUFDSixjQUFBLE9BQU8sS0FBSztJQUNkLFlBQUEsS0FBSyxDQUFDO0lBQ0osY0FBQSxPQUFPLEtBQUs7SUFDZCxZQUFBLEtBQUssQ0FBQztJQUNKdUUsY0FBQUEsV0FBVyxDQUFDOVQsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QixZQUFBLEtBQUssQ0FBQztJQUNKOFQsY0FBQUEsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxVCxNQUFNLENBQUNtUCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsY0FBQTtJQUNGLFlBQUE7SUFDRSxjQUFBLE9BQU8sS0FBSztJQUNoQjtJQUNBbUUsVUFBQUEsYUFBYSxJQUFJbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDeFAsTUFBTTtJQUM5QixVQUFBLFNBQVNvVSxXQUFXO0lBQ3RCO0lBQ0EsUUFBQSxNQUFNLGVBQWU7SUFDdkI7SUFDQSxNQUFBLElBQUlELGdCQUFnQixHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUs7SUFDeEM7UUFFQSxJQUFJTCxPQUFPLEtBQUssS0FBSyxFQUFFO0lBQ3JCO1VBQ0EsSUFBSU8sS0FBSyxHQUFHLEtBQUs7SUFDakIsTUFBQSxLQUFLLElBQUlDLEtBQUssSUFBSSxJQUFJLENBQUNoTixVQUFVLEVBQUU7WUFDakMsSUFBSWdOLEtBQUssS0FBS1IsT0FBTyxFQUFFO0lBQ3JCTyxVQUFBQSxLQUFLLEdBQUcsSUFBSTtJQUNaLFVBQUE7SUFDRjtJQUNGO0lBQ0EsTUFBQSxJQUFJRSxVQUFVLEdBQUdGLEtBQUssR0FBRywrQkFBK0IsR0FBRyxpQ0FBaUM7SUFDNUYsTUFBQSxJQUFJeEUsTUFBTSxHQUFHLENBQThCMUosMkJBQUFBLEVBQUFBLElBQUksS0FBS3VOLE1BQU0sQ0FBQSxvQkFBQSxFQUF1QnZOLElBQUksQ0FBQSxDQUFBLEVBQ25GbkIsU0FBUyxDQUFDaEYsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDZ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHdVAsVUFBVSxHQUFHLEVBQ3ZELENBQUEsRUFBQSxFQUFLLElBQUksQ0FBQzlJLG1CQUFtQixDQUFDb0ksUUFBUSxDQUFDLENBQUEsa0NBQUEsRUFBcUMxTixJQUFJLENBQVksVUFBQSxDQUFBO0lBRTVGLE1BQUEsSUFBSW5CLFNBQVMsQ0FBQ2hGLE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDekI2UCxRQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3hQLE1BQU0sQ0FDcEIsQ0FBQSwyQkFBQSxFQUE4QjhGLElBQUksQ0FBQSxFQUFBLEVBQUtuQixTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDNUQsQ0FBQSxhQUFBLEVBQWdCdVAsVUFBVSxDQUFBLEVBQUEsRUFBS3ZQLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNwRCxDQUFBLDJCQUFBLEVBQThCbUIsSUFBSSxDQUFBLEVBQUEsRUFBS25CLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM3RDtJQUNIO1VBQ0EsT0FBTztJQUNMNkssUUFBQUEsTUFBTSxFQUFFQSxNQUFNO0lBQ2RDLFFBQUFBLFNBQVMsRUFBRTZEO1dBQ1o7SUFDSCxLQUFDLE1BQU0sSUFBSUksV0FBVyxDQUFDL1QsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNqQztJQUNBLE1BQUEsT0FBTytULFdBQVcsQ0FBQy9ULE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDN0IrVCxRQUFBQSxXQUFXLENBQUM5VCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCO1VBRUEsT0FBTztZQUNMNFAsTUFBTSxFQUFFLENBQThCMUosMkJBQUFBLEVBQUFBLElBQUksQ0FBS3VOLEVBQUFBLEVBQUFBLE1BQU0sQ0FBdUJ2TixvQkFBQUEsRUFBQUEsSUFBSSxDQUFLLEVBQUEsRUFBQSxJQUFJLENBQUNzRixtQkFBbUIsQ0FDM0dvSSxRQUFRLENBQ1QsQ0FBQSxrQ0FBQSxFQUFxQzFOLElBQUksQ0FBQSxJQUFBLEVBQ3hDNE4sV0FBVyxDQUFDLENBQUMsQ0FDZixDQUF1QjVOLG9CQUFBQSxFQUFBQSxJQUFJLENBQ3pCNE4sYUFBQUEsRUFBQUEsV0FBVyxDQUFDLENBQUMsQ0FDZixDQUFBLGtDQUFBLEVBQXFDNU4sSUFBSSxDQUFBLEVBQUEsRUFBSzROLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDMURBLEVBQUFBLFdBQVcsQ0FBQyxDQUFDLENBQ2YsQ0FBQSxFQUFHQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQXVCNU4sb0JBQUFBLEVBQUFBLElBQUksQ0FDMUM0TixPQUFBQSxFQUFBQSxXQUFXLENBQUMsQ0FBQyxDQUNmLENBQUEsa0NBQUEsRUFBcUM1TixJQUFJLENBQUEsRUFBQSxFQUFLNE4sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFVLFFBQUEsQ0FBQTtJQUN0RWpFLFFBQUFBLFNBQVMsRUFBRTZEO1dBQ1o7SUFDSDtJQUVBLElBQUEsT0FBTyxLQUFLO0lBQ2Q7SUFFUWEsRUFBQUEscUJBQXFCQSxDQUFDQyxLQUFrQixFQUFFQyxLQUFrQixFQUFBO0lBQ2xFLElBQUEsSUFBSSxDQUFDRCxLQUFLLElBQUksQ0FBQ0MsS0FBSyxFQUFFLE9BQU8sSUFBSTtJQUNqQyxJQUFBLElBQUlELEtBQUssS0FBS0MsS0FBSyxFQUFFLE9BQU9ELEtBQUs7UUFDakMsTUFBTUUsUUFBUSxHQUFJdkgsSUFBVSxJQUFJO1VBQzlCLElBQUl1SCxRQUFRLEdBQUcsRUFBRTtJQUNqQixNQUFBLE9BQU92SCxJQUFJLEVBQUU7SUFDWHVILFFBQUFBLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDeEgsSUFBSSxDQUFDO1lBQ3RCQSxJQUFJLEdBQUdBLElBQUksQ0FBQy9FLFVBQVc7SUFDekI7SUFDQSxNQUFBLE9BQU9zTSxRQUFRO1NBQ2hCO0lBRUQsSUFBQSxNQUFNRSxTQUFTLEdBQUdGLFFBQVEsQ0FBQ0YsS0FBSyxDQUFDO0lBQ2pDLElBQUEsTUFBTUssU0FBUyxHQUFHSCxRQUFRLENBQUNELEtBQUssQ0FBQztRQUVqQyxJQUFJRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUtDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUk7SUFDOUMsSUFBQSxJQUFJL1UsQ0FBQztJQUNMLElBQUEsS0FBS0EsQ0FBQyxHQUFHLENBQUMsRUFBRThVLFNBQVMsQ0FBQzlVLENBQUMsQ0FBQyxLQUFLK1UsU0FBUyxDQUFDL1UsQ0FBQyxDQUFDLEVBQUVBLENBQUMsRUFBRSxDQUFDO0lBQy9DLElBQUEsT0FBTzhVLFNBQVMsQ0FBQzlVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekI7SUFFUWdWLEVBQUFBLDBCQUEwQkEsQ0FBQ25YLEtBQWUsRUFBRUMsTUFBdUIsRUFBRXVCLFNBQWlCLEVBQUE7UUFDNUYsSUFBSWdPLElBQUksR0FBRyxJQUFJO0lBQ2YsSUFBQSxJQUFJLENBQUN4UCxLQUFLLEVBQUUsT0FBTyxJQUFJO1FBQ3ZCLElBQUksQ0FBQ0MsTUFBTSxFQUFFO0lBQ1gsTUFBQSxNQUFNbVUsR0FBRyxHQUFHdEYsTUFBTSxDQUFDMUQsWUFBWSxFQUFFO1VBQ2pDLElBQUksQ0FBQ2dKLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNuRixTQUFTLEVBQUUsT0FBTyxJQUFJO1VBQ3ZDTyxJQUFJLEdBQUc0RSxHQUFHLENBQUNuRixTQUFTO0lBQ3RCLEtBQUMsTUFBTTtVQUNMLElBQUlqUCxLQUFLLENBQUNxUCxHQUFHLEtBQUtwUCxNQUFNLENBQUNvUCxHQUFHLEVBQUUsT0FBTyxJQUFJO0lBQ3pDLE1BQUEsTUFBTStFLEdBQUcsR0FBR3RGLE1BQU0sQ0FBQzFELFlBQVksRUFBRTtJQUNqQyxNQUFBLElBQUksQ0FBQ2dKLEdBQUcsRUFBRSxPQUFPLElBQUk7SUFDckI1RSxNQUFBQSxJQUFJLEdBQUcsSUFBSSxDQUFDb0gscUJBQXFCLENBQUN4QyxHQUFHLENBQUNuRixTQUFTLEVBQUVtRixHQUFHLENBQUNwRixVQUFVLENBQUM7SUFDbEU7SUFDQSxJQUFBLElBQUksQ0FBQ1EsSUFBSSxFQUFFLE9BQU8sSUFBSTtJQUN0QixJQUFBLE9BQU9BLElBQUksS0FBSyxJQUFJLENBQUMvTyxDQUFDLEVBQUU7SUFDdEIsTUFBQSxJQUFLK08sSUFBb0IsQ0FBQ2hPLFNBQVMsSUFBS2dPLElBQW9CLENBQUNoTyxTQUFTLENBQUM0VixRQUFRLENBQUM1VixTQUFTLENBQUMsRUFBRSxPQUFPZ08sSUFBSTtVQUN2R0EsSUFBSSxHQUFHQSxJQUFJLENBQUMvRSxVQUFXO0lBQ3pCO0lBQ0EsSUFBQSxPQUFPLElBQUk7SUFDYjtJQUVPNE0sRUFBQUEsZUFBZUEsR0FBOEQ7SUFBQSxJQUFBLElBQTdEclgsS0FBQSxHQUFBZ0ksU0FBQSxDQUFBNUYsTUFBQSxHQUFBLENBQUEsSUFBQTRGLFNBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQS9FLFNBQUEsR0FBQStFLFNBQUEsQ0FBQSxDQUFBLENBQUEsR0FBeUIsSUFBSTtJQUFBLElBQUEsSUFBRS9ILDZFQUEwQixJQUFJO1FBQ2xGLElBQUkrQyxZQUFZLEdBQW1DLEVBQUU7UUFDckQsSUFBSSxDQUFDaEQsS0FBSyxFQUFFQSxLQUFLLEdBQUcsSUFBSSxDQUFDb0wsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUNuTCxNQUFNLEVBQUVBLE1BQU0sR0FBRyxJQUFJLENBQUNtTCxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQ3BMLEtBQUssRUFBRTtJQUNWLE1BQUEsS0FBSyxJQUFJc1gsR0FBRyxJQUFJNVcsUUFBUSxFQUFFO0lBQ3hCc0MsUUFBQUEsWUFBWSxDQUFDc1UsR0FBRyxDQUFDLEdBQUcsSUFBSTtJQUMxQjtJQUNBLE1BQUEsT0FBT3RVLFlBQVk7SUFDckI7SUFDQSxJQUFBLElBQUksQ0FBQy9DLE1BQU0sRUFBRUEsTUFBTSxHQUFHRCxLQUFLO1FBRTNCLElBQUkyRyxLQUFlLEVBQUVDLEdBQWE7UUFDbEMsSUFBSTNHLE1BQU0sQ0FBQ29QLEdBQUcsR0FBR3JQLEtBQUssQ0FBQ3FQLEdBQUcsSUFBS3BQLE1BQU0sQ0FBQ29QLEdBQUcsS0FBS3JQLEtBQUssQ0FBQ3FQLEdBQUcsSUFBSXBQLE1BQU0sQ0FBQ3FQLEdBQUcsR0FBR3RQLEtBQUssQ0FBQ3NQLEdBQUksRUFBRTtJQUNsRjNJLE1BQUFBLEtBQUssR0FBRzFHLE1BQU07SUFDZDJHLE1BQUFBLEdBQUcsR0FBRzVHLEtBQUs7SUFDYixLQUFDLE1BQU07SUFDTDJHLE1BQUFBLEtBQUssR0FBRzNHLEtBQUs7SUFDYjRHLE1BQUFBLEdBQUcsR0FBRzNHLE1BQU07SUFDZDtJQUNBLElBQUEsSUFBSTJHLEdBQUcsQ0FBQ3lJLEdBQUcsR0FBRzFJLEtBQUssQ0FBQzBJLEdBQUcsSUFBSXpJLEdBQUcsQ0FBQzBJLEdBQUcsS0FBSyxDQUFDLEVBQUU7VUFDeEMxSSxHQUFHLENBQUN5SSxHQUFHLEVBQUU7SUFDVHpJLE1BQUFBLEdBQUcsQ0FBQzBJLEdBQUcsR0FBRyxJQUFJLENBQUNqRyxLQUFLLENBQUN6QyxHQUFHLENBQUN5SSxHQUFHLENBQUMsQ0FBQ2pOLE1BQU07SUFDdEM7SUFFQSxJQUFBLEtBQUssSUFBSWtWLEdBQUcsSUFBSTVXLFFBQVEsRUFBRTtVQUN4QixJQUFJQSxRQUFRLENBQUM0VyxHQUFHLENBQUMsQ0FBQy9PLElBQUksS0FBSyxRQUFRLEVBQUU7SUFDbkMsUUFBQSxJQUFJLENBQUN2SSxLQUFLLElBQUlBLEtBQUssQ0FBQ3FQLEdBQUcsS0FBS3BQLE1BQU8sQ0FBQ29QLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQ3hQLHlCQUF5QixFQUFFLEVBQUU7SUFDNUVtRCxVQUFBQSxZQUFZLENBQUNzVSxHQUFHLENBQUMsR0FBRyxJQUFJO0lBQzFCLFNBQUMsTUFBTTtJQUNMdFUsVUFBQUEsWUFBWSxDQUFDc1UsR0FBRyxDQUFDLEdBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQ0gsMEJBQTBCLENBQUNuWCxLQUFLLEVBQUVDLE1BQU0sRUFBRVMsUUFBUSxDQUFDNFcsR0FBRyxDQUFDLENBQUM5VixTQUFTLENBQUMsSUFDeEV4QixLQUFLLENBQUNzUCxHQUFHLEtBQUtyUCxNQUFPLENBQUNxUCxHQUFHLElBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUNqRyxLQUFLLENBQUNySixLQUFLLENBQUNxUCxHQUFHLENBQUMsQ0FBQ2EsTUFBTSxDQUFDLENBQUMsRUFBRWxRLEtBQUssQ0FBQ3NQLEdBQUcsQ0FBQyxDQUFDaE4sS0FBSyxDQUFDNUIsUUFBUSxDQUFDNFcsR0FBRyxDQUFDLENBQUMzTyxLQUFLLENBQUNDLFVBQVUsQ0FBQyxJQUNsRixDQUFDLENBQUMsSUFBSSxDQUFDUyxLQUFLLENBQUNySixLQUFLLENBQUNxUCxHQUFHLENBQUMsQ0FBQ2EsTUFBTSxDQUFDbFEsS0FBSyxDQUFDc1AsR0FBRyxDQUFDLENBQUNoTixLQUFLLENBQUM1QixRQUFRLENBQUM0VyxHQUFHLENBQUMsQ0FBQzNPLEtBQUssQ0FBQ0UsV0FBVyxDQUFFO0lBQ3ZGO0lBQ0Y7VUFDQSxJQUFJbkksUUFBUSxDQUFDNFcsR0FBRyxDQUFDLENBQUMvTyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ2pDLElBQUksQ0FBQ3ZJLEtBQUssRUFBRTtJQUNWZ0QsVUFBQUEsWUFBWSxDQUFDc1UsR0FBRyxDQUFDLEdBQUcsSUFBSTtJQUMxQixTQUFDLE1BQU07SUFDTCxVQUFBLElBQUkxVyxLQUFLLEdBQW1CLElBQUksQ0FBQzJJLFNBQVMsQ0FBQzVDLEtBQUssQ0FBQzBJLEdBQUcsQ0FBQyxLQUFLM08sUUFBUSxDQUFDNFcsR0FBRyxDQUFDLENBQUM5VixTQUFTO0lBQ2pGLFVBQUEsS0FBSyxJQUFJMFMsSUFBSSxHQUFHdk4sS0FBSyxDQUFDMEksR0FBRyxFQUFFNkUsSUFBSSxJQUFJdE4sR0FBRyxDQUFDeUksR0FBRyxFQUFFNkUsSUFBSSxFQUFFLEVBQUU7SUFDbEQsWUFBQSxJQUFLLElBQUksQ0FBQzNLLFNBQVMsQ0FBQzJLLElBQUksQ0FBQyxLQUFLeFQsUUFBUSxDQUFDNFcsR0FBRyxDQUFDLENBQUM5VixTQUFTLEtBQU1aLEtBQUssRUFBRTtJQUNoRUEsY0FBQUEsS0FBSyxHQUFHLElBQUk7SUFDWixjQUFBO0lBQ0Y7SUFDRjtJQUNBb0MsVUFBQUEsWUFBWSxDQUFDc1UsR0FBRyxDQUFDLEdBQUcxVyxLQUFLO0lBQzNCO0lBQ0Y7SUFDRjtJQUNBLElBQUEsT0FBT29DLFlBQVk7SUFDckI7SUFFT0YsRUFBQUEsZUFBZUEsQ0FBQ3JCLE9BQWUsRUFBRWIsS0FBYyxFQUFBO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUN5SixrQkFBa0IsRUFBRSxJQUFJLENBQUNZLFdBQVcsRUFBRTtRQUNoRCxJQUFJdkssUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQzhHLElBQUksS0FBSyxRQUFRLEVBQUU7SUFDdkMsTUFBQSxJQUFJdEksTUFBTSxHQUFHLElBQUksQ0FBQ21MLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDcEMsTUFBQSxJQUFJcEwsS0FBSyxHQUFHLElBQUksQ0FBQ29MLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBQSxJQUFJLENBQUNuTCxNQUFNLEVBQUVBLE1BQU0sR0FBR0QsS0FBSztVQUMzQixJQUFJLENBQUNDLE1BQU0sRUFBRTtJQUNiLE1BQUEsSUFBSUEsTUFBTSxDQUFDb1AsR0FBRyxLQUFLclAsS0FBTSxDQUFDcVAsR0FBRyxFQUFFO0lBQy9CLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQ3hQLHlCQUF5QixFQUFFLEVBQUU7SUFDdkMsTUFBQSxJQUFJMFgsVUFBVSxHQUFHLElBQUksQ0FBQ0osMEJBQTBCLENBQUNuWCxLQUFNLEVBQUVDLE1BQU0sRUFBRVMsUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQ0QsU0FBUyxDQUFDO1VBQzdGLElBQUksQ0FBQ3VQLGNBQWMsRUFBRTtJQUVyQixNQUFBLElBQUl3RyxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUM1TixTQUFTLENBQUMzSixLQUFNLENBQUNxUCxHQUFHLENBQUMsR0FBRyxJQUFJO1lBQ2pDLE1BQU1pQixRQUFRLEdBQUcsSUFBSSxDQUFDZixhQUFhLENBQUNnSSxVQUFVLEVBQUUsQ0FBQyxDQUFFO0lBQ25ELFFBQUEsTUFBTUMsR0FBRyxHQUFHRCxVQUFVLENBQUNqRSxXQUFZLENBQUNsUixNQUFNO0lBQzFDLFFBQUEsTUFBTW9PLElBQUksR0FBRyxJQUFJLENBQUNuSCxLQUFLLENBQUNySixLQUFNLENBQUNxUCxHQUFHLENBQUMsQ0FDaENhLE1BQU0sQ0FBQyxDQUFDLEVBQUVJLFFBQVEsQ0FBQyxDQUNuQjNJLE9BQU8sQ0FBQ2pILFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUNrSCxLQUFLLENBQUNDLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDbEQsUUFBQSxNQUFNNkgsR0FBRyxHQUFHLElBQUksQ0FBQ3BILEtBQUssQ0FBQ3JKLEtBQU0sQ0FBQ3FQLEdBQUcsQ0FBQyxDQUFDYSxNQUFNLENBQUNJLFFBQVEsRUFBRWtILEdBQUcsQ0FBQztJQUN4RCxRQUFBLE1BQU05RyxLQUFLLEdBQUcsSUFBSSxDQUFDckgsS0FBSyxDQUFDckosS0FBTSxDQUFDcVAsR0FBRyxDQUFDLENBQ2pDYSxNQUFNLENBQUNJLFFBQVEsR0FBR2tILEdBQUcsQ0FBQyxDQUN0QjdQLE9BQU8sQ0FBQ2pILFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUNrSCxLQUFLLENBQUNFLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDbkQsUUFBQSxJQUFJLENBQUNRLEtBQUssQ0FBQ3JKLEtBQU0sQ0FBQ3FQLEdBQUcsQ0FBQyxHQUFHbUIsSUFBSSxDQUFDL04sTUFBTSxDQUFDZ08sR0FBRyxFQUFFQyxLQUFLLENBQUM7SUFDaER6USxRQUFBQSxNQUFNLENBQUNxUCxHQUFHLEdBQUdrQixJQUFJLENBQUNwTyxNQUFNO0lBQ3hCcEMsUUFBQUEsS0FBTSxDQUFDc1AsR0FBRyxHQUFHclAsTUFBTSxDQUFDcVAsR0FBRyxHQUFHa0ksR0FBRztZQUM3QixJQUFJLENBQUN0SyxnQkFBZ0IsRUFBRTtJQUN2QixRQUFBLElBQUksQ0FBQ3pCLFlBQVksQ0FBQ3pMLEtBQU0sRUFBRUMsTUFBTSxDQUFDO1lBQ2pDLElBQUksQ0FBQ2tOLFVBQVUsRUFBRTtJQUNuQixPQUFDLE1BQU0sSUFDTG5OLEtBQU0sQ0FBQ3NQLEdBQUcsS0FBS3JQLE1BQU0sQ0FBQ3FQLEdBQUcsSUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQ2pHLEtBQUssQ0FBQ3JKLEtBQU0sQ0FBQ3FQLEdBQUcsQ0FBQyxDQUFDYSxNQUFNLENBQUMsQ0FBQyxFQUFFbFEsS0FBTSxDQUFDc1AsR0FBRyxDQUFDLENBQUNoTixLQUFLLENBQUM1QixRQUFRLENBQUNlLE9BQU8sQ0FBQyxDQUFDa0gsS0FBSyxDQUFDQyxVQUFVLENBQUMsSUFDeEYsQ0FBQyxDQUFDLElBQUksQ0FBQ1MsS0FBSyxDQUFDckosS0FBTSxDQUFDcVAsR0FBRyxDQUFDLENBQUNhLE1BQU0sQ0FBQ2xRLEtBQU0sQ0FBQ3NQLEdBQUcsQ0FBQyxDQUFDaE4sS0FBSyxDQUFDNUIsUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQ2tILEtBQUssQ0FBQ0UsV0FBVyxDQUFDLEVBQ3RGO1lBQ0EsSUFBSSxDQUFDYyxTQUFTLENBQUMzSixLQUFNLENBQUNxUCxHQUFHLENBQUMsR0FBRyxJQUFJO0lBQ2pDLFFBQUEsTUFBTW1CLElBQUksR0FBRyxJQUFJLENBQUNuSCxLQUFLLENBQUNySixLQUFNLENBQUNxUCxHQUFHLENBQUMsQ0FDaENhLE1BQU0sQ0FBQyxDQUFDLEVBQUVsUSxLQUFNLENBQUNzUCxHQUFHLENBQUMsQ0FDckIzSCxPQUFPLENBQUNqSCxRQUFRLENBQUNlLE9BQU8sQ0FBQyxDQUFDa0gsS0FBSyxDQUFDQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFFBQUEsTUFBTThILEtBQUssR0FBRyxJQUFJLENBQUNySCxLQUFLLENBQUNySixLQUFNLENBQUNxUCxHQUFHLENBQUMsQ0FDakNhLE1BQU0sQ0FBQ2xRLEtBQU0sQ0FBQ3NQLEdBQUcsQ0FBQyxDQUNsQjNILE9BQU8sQ0FBQ2pILFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUNrSCxLQUFLLENBQUNFLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDbkQsUUFBQSxJQUFJLENBQUNRLEtBQUssQ0FBQ3JKLEtBQU0sQ0FBQ3FQLEdBQUcsQ0FBQyxHQUFHbUIsSUFBSSxDQUFDL04sTUFBTSxDQUFDaU8sS0FBSyxDQUFDO1lBQzNDMVEsS0FBTSxDQUFDc1AsR0FBRyxHQUFHclAsTUFBTSxDQUFDcVAsR0FBRyxHQUFHa0IsSUFBSSxDQUFDcE8sTUFBTTtZQUNyQyxJQUFJLENBQUM4SyxnQkFBZ0IsRUFBRTtJQUN2QixRQUFBLElBQUksQ0FBQ3pCLFlBQVksQ0FBQ3pMLEtBQU0sRUFBRUMsTUFBTSxDQUFDO1lBQ2pDLElBQUksQ0FBQ2tOLFVBQVUsRUFBRTtJQUNuQixPQUFDLE1BQU07WUFDTCxJQUFJO2NBQUVtRCxRQUFRO0lBQUVDLFVBQUFBO2FBQVEsR0FDdEJ2USxLQUFNLENBQUNzUCxHQUFHLEdBQUdyUCxNQUFNLENBQUNxUCxHQUFHLEdBQ25CO2NBQUVnQixRQUFRLEVBQUV0USxLQUFNLENBQUNzUCxHQUFHO2NBQUVpQixNQUFNLEVBQUV0USxNQUFNLENBQUNxUDtJQUFLLFNBQUEsR0FDNUM7Y0FBRWdCLFFBQVEsRUFBRXJRLE1BQU0sQ0FBQ3FQLEdBQUc7Y0FBRWlCLE1BQU0sRUFBRXZRLEtBQU0sQ0FBQ3NQO2FBQUs7WUFFbEQsSUFBSWhOLEtBQUssR0FBRyxJQUFJLENBQUMrRyxLQUFLLENBQUNySixLQUFNLENBQUNxUCxHQUFHLENBQUMsQ0FDL0JhLE1BQU0sQ0FBQ0ksUUFBUSxFQUFFQyxNQUFNLEdBQUdELFFBQVEsQ0FBQyxDQUNuQ2hPLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztJQUNqRCxRQUFBLElBQUlBLEtBQUssRUFBRTtJQUNUZ08sVUFBQUEsUUFBUSxJQUFJaE8sS0FBSyxDQUFDbU0sTUFBTyxDQUFDZ0osT0FBTyxDQUFDclYsTUFBTTtJQUN4Q21PLFVBQUFBLE1BQU0sSUFBSWpPLEtBQUssQ0FBQ21NLE1BQU8sQ0FBQ2lKLFFBQVEsQ0FBQ3RWLE1BQU07SUFDekM7WUFFQXBDLEtBQU0sQ0FBQ3NQLEdBQUcsR0FBR2dCLFFBQVE7WUFDckJyUSxNQUFNLENBQUNxUCxHQUFHLEdBQUdpQixNQUFNO1lBRW5CLElBQUksQ0FBQ3pRLGFBQWEsQ0FBQ1ksUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQytHLEdBQUcsQ0FBQ0MsR0FBRyxFQUFFL0gsUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQytHLEdBQUcsQ0FBQ0UsSUFBSSxFQUFFMUksS0FBSyxFQUFFQyxNQUFNLENBQUM7WUFDeEYsSUFBSSxDQUFDa04sVUFBVSxFQUFFO0lBQ25CO1NBQ0QsTUFBTSxJQUFJek0sUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQzhHLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDNUMsTUFBQSxJQUFJdEksTUFBTSxHQUFHLElBQUksQ0FBQ21MLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDcEMsTUFBQSxJQUFJcEwsS0FBSyxHQUFHLElBQUksQ0FBQ29MLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBQSxJQUFJLENBQUNuTCxNQUFNLEVBQUVBLE1BQU0sR0FBR0QsS0FBSztVQUMzQixJQUFJLENBQUNBLEtBQUssRUFBRTtVQUNaLElBQUksQ0FBQytRLGNBQWMsRUFBRTtJQUNyQixNQUFBLElBQUlwSyxLQUFLLEdBQUcxRyxNQUFPLENBQUNvUCxHQUFHLEdBQUdyUCxLQUFNLENBQUNxUCxHQUFHLEdBQUdyUCxLQUFNLEdBQUdDLE1BQU87SUFDdkQsTUFBQSxJQUFJMkcsR0FBRyxHQUFHM0csTUFBTyxDQUFDb1AsR0FBRyxHQUFHclAsS0FBTSxDQUFDcVAsR0FBRyxHQUFHcFAsTUFBTyxHQUFHRCxLQUFNO0lBQ3JELE1BQUEsSUFBSTRHLEdBQUcsQ0FBQ3lJLEdBQUcsR0FBRzFJLEtBQUssQ0FBQzBJLEdBQUcsSUFBSXpJLEdBQUcsQ0FBQzBJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDeEMxSSxHQUFHLENBQUN5SSxHQUFHLEVBQUU7SUFDWDtJQUVBLE1BQUEsS0FBSyxJQUFJNkUsSUFBSSxHQUFHdk4sS0FBSyxDQUFDMEksR0FBRyxFQUFFNkUsSUFBSSxJQUFJdE4sR0FBRyxDQUFDeUksR0FBRyxFQUFFNkUsSUFBSSxFQUFFLEVBQUU7SUFDbEQsUUFBQSxJQUFJdFQsS0FBSyxJQUFJLElBQUksQ0FBQzJJLFNBQVMsQ0FBQzJLLElBQUksQ0FBQyxLQUFLeFQsUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQ0QsU0FBUyxFQUFFO2NBQ2pFLElBQUksQ0FBQzZILEtBQUssQ0FBQzZLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzdLLEtBQUssQ0FBQzZLLElBQUksQ0FBQyxDQUFDdk0sT0FBTyxDQUN6Q2pILFFBQVEsQ0FBQ2UsT0FBTyxDQUFDLENBQUMrRyxHQUFHLENBQUNNLE9BQU8sRUFDN0JwSSxRQUFRLENBQUNlLE9BQU8sQ0FBQyxDQUFDK0csR0FBRyxDQUFDbEQsV0FBVyxDQUFDcUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDdU0sSUFBSSxHQUFHdk4sS0FBSyxDQUFDMEksR0FBRyxHQUFHLENBQUMsRUFBRXBCLFFBQVEsRUFBRSxDQUFDLENBQ25GO0lBQ0QsVUFBQSxJQUFJLENBQUN0RSxTQUFTLENBQUN1SyxJQUFJLENBQUMsR0FBRyxJQUFJO0lBQzdCO0lBQ0EsUUFBQSxJQUFJLENBQUN0VCxLQUFLLElBQUksSUFBSSxDQUFDMkksU0FBUyxDQUFDMkssSUFBSSxDQUFDLEtBQUt4VCxRQUFRLENBQUNlLE9BQU8sQ0FBQyxDQUFDRCxTQUFTLEVBQUU7SUFDbEUsVUFBQSxJQUFJLENBQUM2SCxLQUFLLENBQUM2SyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM3SyxLQUFLLENBQUM2SyxJQUFJLENBQUMsQ0FBQ3ZNLE9BQU8sQ0FDekNqSCxRQUFRLENBQUNlLE9BQU8sQ0FBQyxDQUFDa0gsS0FBSyxDQUFDRyxPQUFPLEVBQy9CcEksUUFBUSxDQUFDZSxPQUFPLENBQUMsQ0FBQ2tILEtBQUssQ0FBQ3JELFdBQVcsQ0FDcEM7SUFDRCxVQUFBLElBQUksQ0FBQ3FFLFNBQVMsQ0FBQ3VLLElBQUksQ0FBQyxHQUFHLElBQUk7SUFDN0I7SUFDRjtVQUNBLElBQUksQ0FBQ2hILGdCQUFnQixFQUFFO1VBQ3ZCLElBQUksQ0FBQ3pCLFlBQVksQ0FDZjtZQUFFNEQsR0FBRyxFQUFFekksR0FBRyxDQUFDeUksR0FBRztZQUFFQyxHQUFHLEVBQUUsSUFBSSxDQUFDakcsS0FBSyxDQUFDekMsR0FBRyxDQUFDeUksR0FBRyxDQUFDLENBQUNqTjtJQUFNLE9BQUUsRUFDakQ7WUFBRWlOLEdBQUcsRUFBRTFJLEtBQUssQ0FBQzBJLEdBQUc7SUFBRUMsUUFBQUEsR0FBRyxFQUFFO0lBQUMsT0FBRSxDQUMzQjtVQUNELElBQUksQ0FBQ25DLFVBQVUsRUFBRTtJQUNuQjtJQUNGO0lBRVF0TixFQUFBQSx5QkFBeUJBLEdBQUE7SUFDL0IsSUFBQSxNQUFNdVUsR0FBRyxHQUFHdEYsTUFBTSxDQUFDMUQsWUFBWSxFQUFFO0lBQ2pDLElBQUEsSUFBSSxDQUFDZ0osR0FBRyxJQUFJLENBQUNBLEdBQUcsQ0FBQ25GLFNBQVMsSUFBSSxDQUFDbUYsR0FBRyxDQUFDcEYsVUFBVSxFQUFFLE9BQU8sS0FBSztRQUUzRCxJQUNFb0YsR0FBRyxDQUFDdUQsV0FBVyxJQUNmdkQsR0FBRyxDQUFDbkYsU0FBUyxDQUFDa0UsUUFBUSxLQUFLLENBQUMsSUFDNUJpQixHQUFHLENBQUNoRixXQUFXLEtBQUtnRixHQUFHLENBQUNuRixTQUFTLENBQUN5RSxTQUFVLENBQUN0UixNQUFNLEVBQ25EO0lBQ0EsTUFBQSxJQUFJb04sSUFBSTtJQUNSLE1BQUEsS0FBS0EsSUFBSSxHQUFHNEUsR0FBRyxDQUFDbkYsU0FBUyxFQUFFTyxJQUFJLElBQUlBLElBQUksQ0FBQ2xELFdBQVcsS0FBSyxJQUFJLEVBQUVrRCxJQUFJLEdBQUdBLElBQUksQ0FBQy9FLFVBQVcsQ0FBQztVQUN0RixJQUNFK0UsSUFBSSxJQUNKQSxJQUFJLENBQUNsRCxXQUFXLElBQ2ZrRCxJQUFJLENBQUNsRCxXQUEyQixDQUFDOUssU0FBUyxJQUMxQ2dPLElBQUksQ0FBQ2xELFdBQTJCLENBQUM5SyxTQUFTLENBQUM0VixRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFFekUsT0FBTyxJQUFJO0lBQ2Y7SUFFQSxJQUFBLElBQUlRLFFBQVEsR0FBRyxJQUFJLENBQUNoQixxQkFBcUIsQ0FBQ3hDLEdBQUcsQ0FBQ25GLFNBQVMsRUFBRW1GLEdBQUcsQ0FBQ3BGLFVBQVUsQ0FBQztJQUN4RSxJQUFBLElBQUksQ0FBQzRJLFFBQVEsRUFBRSxPQUFPLEtBQUs7SUFFM0IsSUFBQSxPQUFPQSxRQUFRLElBQUlBLFFBQVEsS0FBSyxJQUFJLENBQUNuWCxDQUFDLEVBQUU7SUFDdEMsTUFBQSxJQUNHbVgsUUFBd0IsQ0FBQ3BXLFNBQVMsSUFDbkMsT0FBUW9XLFFBQXdCLENBQUNwVyxTQUFTLENBQUM0VixRQUFRLEtBQUssVUFBVSxLQUNoRVEsUUFBd0IsQ0FBQ3BXLFNBQVMsQ0FBQzRWLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUMvRFEsUUFBd0IsQ0FBQ3BXLFNBQVMsQ0FBQzRWLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUU5RCxPQUFPLElBQUk7VUFDYlEsUUFBUSxHQUFHQSxRQUFRLENBQUNuTixVQUFXO0lBQ2pDO0lBRUEsSUFBQSxPQUFPLEtBQUs7SUFDZDtNQUVPb04sa0JBQWtCQSxDQUFDcFcsT0FBZSxFQUFBO0lBQ3ZDLElBQUEsSUFBSSxDQUFDLElBQUksQ0FBQ21JLGdCQUFnQixFQUFFLElBQUksQ0FBQ0EsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDeU4sZUFBZSxFQUFFO0lBQzFFLElBQUEsSUFBSSxDQUFDdlUsZUFBZSxDQUFDckIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDbUksZ0JBQWdCLENBQUNuSSxPQUFPLENBQUMsQ0FBQztJQUNoRTtNQUVROFAsUUFBUUEsQ0FBQ0MsWUFBMEIsRUFBQTtRQUN6QyxLQUFLLElBQUliLFFBQVEsSUFBSSxJQUFJLENBQUM1RyxTQUFTLENBQUNHLElBQUksRUFBRTtJQUN4Q3lHLE1BQUFBLFFBQVEsQ0FBQztJQUFFYSxRQUFBQTtJQUFZLE9BQUUsQ0FBQztJQUM1QjtJQUNGO0lBRVFKLEVBQUFBLGFBQWFBLEdBQUE7SUFDbkIsSUFBQSxJQUFJLElBQUksQ0FBQ3JILFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUM3SCxNQUFNLEVBQUU7SUFDL0QsTUFBQSxJQUFJcEMsS0FBSyxHQUFHLElBQUksQ0FBQ29MLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBQSxJQUFJbkwsTUFBTSxHQUFHLElBQUksQ0FBQ21MLFlBQVksQ0FBQyxJQUFJLENBQUM7VUFDcEMsSUFBSXBJLFlBQVksR0FBRyxJQUFJLENBQUNxVSxlQUFlLENBQUNyWCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztVQUN0RCxJQUFJLElBQUksQ0FBQzJKLGdCQUFnQixFQUFFO1lBQ3pCL0gsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDOEgsZ0JBQWdCLEVBQUU1RyxZQUFZLENBQUM7SUFDcEQsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNEcsZ0JBQWdCLEdBQUcvSCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUVrQixZQUFZLENBQUM7SUFDekQ7VUFDQSxLQUFLLElBQUkyTixRQUFRLElBQUksSUFBSSxDQUFDNUcsU0FBUyxDQUFDRSxTQUFTLEVBQUU7SUFDN0MwRyxRQUFBQSxRQUFRLENBQUM7SUFDUDNRLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtJQUNiQyxVQUFBQSxNQUFNLEVBQUVBLE1BQU87Y0FDZitDLFlBQVksRUFBRSxJQUFJLENBQUM0RztJQUNwQixTQUFBLENBQUM7SUFDSjtJQUNGO0lBQ0Y7SUFDRDs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDldfQ=={"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n if (keys[keys.length - 1].match(/^[0-9]$/)) {\n hotkey.code = `Digit${keys[keys.length - 1]}`;\n } else {\n hotkey.key = keys[keys.length - 1].toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) =>\n this.handleSelectionChangeEvent(e)\n );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n if (\n (node as HTMLElement).dataset &&\n (node as HTMLElement).dataset.lineNum &&\n (!node.previousSibling ||\n ((node.previousSibling as HTMLElement).dataset?.lineNum !== (node as HTMLElement).dataset.lineNum))\n ) {\n row = parseInt((node as HTMLElement).dataset.lineNum!);\n } else {\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n this.clearDirtyFlag();\n this.processNewParagraph(focus);\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private processNewParagraph(sel: Position): void {\n if (!sel) return;\n\n this.updateLineContents();\n\n let continuableType: string | false = false;\n let checkLine = sel.col > 0 ? sel.row : sel.row - 1;\n switch (this.lineTypes[checkLine]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n\n let lines = this.lines[sel.row].replace(/\\n\\n$/, \"\\n\").split(/(?:\\r\\n|\\n|\\r)/);\n if (lines.length > 1) {\n this.spliceLines(sel.row, 1, lines, true);\n sel.row++;\n sel.col = 0;\n }\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[sel.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[sel.row] = `${capture[1]}${this.lines[sel.row]}`;\n this.lineDirty[sel.row] = true;\n sel.col = capture[1].length;\n } else {\n this.lines[sel.row - 1] = \"\";\n this.lineDirty[sel.row - 1] = true;\n }\n }\n }\n this.updateFormatting();\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","match","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","_a","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","inputEvent","inputType","clearDirtyFlag","processNewParagraph","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","result","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","sel","continuableType","checkLine","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|
|
3216
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoa2V5c1trZXlzLmxlbmd0aCAtIDFdLm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtrZXlzW2tleXMubGVuZ3RoIC0gMV19YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTDtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT5cbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSlcbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVMaW5lVHlwZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmtMYWJlbHMoKTtcbiAgICB0aGlzLmFwcGx5TGluZVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmtMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCB0aGlzLmxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbF0gPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSB7XG4gICAgICAgIHRoaXMubGlua0xhYmVscy5wdXNoKFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xdW1xuICAgICAgICAgICAgbGluZUdyYW1tYXIuVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbi5sYWJlbFBsYWNlaG9sZGVyIVxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UocmVwbGFjZW1lbnQ6IHN0cmluZywgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZSgvKFxcJHsxLDJ9KShbMC05XSkvZywgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBjYXB0dXJlW3BhcnNlSW50KHAyKV1cbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lRGlydHlbbGluZU51bV0pIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlKFxuICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSxcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXVxuICAgICAgICApO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9XG4gICAgICAgICAgY29udGVudEhUTUwgPT09IFwiXCIgPyBcIjxiciAvPlwiIDogY29udGVudEhUTUw7XG4gICAgICB9XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSA9IGxpbmVOdW0udG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBsZXQgY29kZUJsb2NrVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY29kZUJsb2NrU2VxTGVuZ3RoID0gMDtcbiAgICBsZXQgaHRtbEJsb2NrOiBIVE1MQmxvY2tSdWxlIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgIGxldCBsaW5lQ2FwdHVyZTogUmVnRXhwRXhlY0FycmF5ID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgIGxldCBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuXG4gICAgICAvLyBDaGVjayBvbmdvaW5nIGNvZGUgYmxvY2tzXG4gICAgICBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlQmFja3RpY2tcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlVGlsZGVDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVUaWxkZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIEhUTUwgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIiAmJiBodG1sQmxvY2sgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGh0bWxCbG9ja1R5cGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9ja1R5cGUuc3RhcnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGh0bWxCbG9ja1R5cGUucGFyYUludGVycnVwdCB8fFxuICAgICAgICAgICAgICBsaW5lTnVtID09PSAwIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGh0bWxCbG9jayA9IGh0bWxCbG9ja1R5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1IVE1MQmxvY2tcIjtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1IVE1MQ29udGVudFwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblxuICAgICAgICBpZiAoaHRtbEJsb2NrLmVuZCkge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9jay5lbmQpKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGluZU51bSA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVOdW0gKyAxXS5tYXRjaChsaW5lR3JhbW1hci5UTUJsYW5rTGluZS5yZWdleHApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWxsIHJlZ2V4cHMgaWYgd2UgaGF2ZW4ndCBhcHBsaWVkIG9uZSBvZiB0aGUgY29kZSBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgIGZvciAobGV0IHR5cGUgaW4gbGluZUdyYW1tYXIpIHtcbiAgICAgICAgICBpZiAobGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwKSB7XG4gICAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgbGluZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hclt0eXBlXS5yZXBsYWNlbWVudDtcbiAgICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UndmUgb3BlbmVkIGEgY29kZSBibG9jaywgcmVtZW1iZXIgdGhhdFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIgfHwgbGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBjb2RlQmxvY2tUeXBlID0gbGluZVR5cGU7XG4gICAgICAgIGNvZGVCbG9ja1NlcUxlbmd0aCA9IGxpbmVDYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBMaW5rIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBpbmRlbnRlZCBjb2RlIGNhbid0IGludGVycnVwdCBhIHBhcmFncmFwaFxuICAgICAgaWYgKFxuICAgICAgICAobGluZVR5cGUgPT09IFwiVE1JbmRlbnRlZENvZGVcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpICYmXG4gICAgICAgIGxpbmVOdW0gPiAwICYmXG4gICAgICAgICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIilcbiAgICAgICkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IEgyIG1hcmtlcnMgdGhhdCBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBsaXN0IGl0ZW0gc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHN1Y2hcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTVVMLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1VTC5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IGhlYWRpbmdzIGFyZSBvbmx5IHZhbGlkIGlmIHByZWNlZGVkIGJ5IGEgcGFyYWdyYXBoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiIHx8IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBpZiAobGluZU51bSA9PT0gMCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gIT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNSFIucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUhSXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUhSLnJlcGxhY2VtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaGVhZGluZ0xpbmUgPSBsaW5lTnVtIC0gMTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nTGluZVR5cGUgPSBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgPyBcIlRNU2V0ZXh0SDFcIiA6IFwiVE1TZXRleHRIMlwiO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gIT09IGhlYWRpbmdMaW5lVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPSBoZWFkaW5nTGluZVR5cGU7XG4gICAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2hlYWRpbmdMaW5lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaGVhZGluZ0xpbmVdID0gXCIkJDBcIjtcbiAgICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2hlYWRpbmdMaW5lXSA9IFt0aGlzLmxpbmVzW2hlYWRpbmdMaW5lXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgaGVhZGluZ0xpbmUtLTtcbiAgICAgICAgICB9IHdoaWxlIChoZWFkaW5nTGluZSA+PSAwICYmIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9PT0gXCJUTVBhcmFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xpbmVOdW1dICE9PSBsaW5lVHlwZSkge1xuICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSA9IGxpbmVUeXBlO1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0gPSBsaW5lUmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXSA9IGxpbmVDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oZ2V0QW5jaG9yOiBib29sZWFuID0gZmFsc2UpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBsZXQgc3RhcnROb2RlID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JOb2RlIDogc2VsZWN0aW9uIS5mb2N1c05vZGU7XG4gICAgaWYgKCFzdGFydE5vZGUpIHJldHVybiBudWxsO1xuICAgIGxldCBvZmZzZXQgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbiEuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKHN0YXJ0Tm9kZSA9PT0gdGhpcy5lKSB7XG4gICAgICBpZiAob2Zmc2V0IDwgdGhpcy5saW5lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiBvZmZzZXQsXG4gICAgICAgICAgY29sOiAwLFxuICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBvZmZzZXQgLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbb2Zmc2V0IC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgY29sID0gdGhpcy5jb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIHdoaWxlIChub2RlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCE7XG4gICAgfVxuXG4gICAgbGV0IHJvdyA9IDA7XG4gICAgLy8gSWYgdGhlIG5vZGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgc2libGluZywgaXQgbXVzdCBiZSB0aGUgZmlyc3QgbGluZVxuICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgY29uc3QgY3VycmVudExpbmVOdW1EYXRhID0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW1EYXRhID0gKG5vZGUucHJldmlvdXNTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuXG4gICAgICBpZiAoY3VycmVudExpbmVOdW1EYXRhICYmIHByZXZpb3VzTGluZU51bURhdGEpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVOdW0gPSBwYXJzZUludChjdXJyZW50TGluZU51bURhdGEpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW0gPSBwYXJzZUludChwcmV2aW91c0xpbmVOdW1EYXRhKTtcbiAgICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtID09PSBwcmV2aW91c0xpbmVOdW0gKyAxKSB7XG4gICAgICAgICAgcm93ID0gY3VycmVudExpbmVOdW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGluZSBpcyBOT1QgdGhlIHByZXZpb3VzIGxpbmUgKyAxLCB0aGVuIGVpdGhlciBcbiAgICAgICAgICAvLyB0aGUgY3VycmVudCBsaW5lIGdvdCBzcGxpdCBpbiB0d28gb3IgbWVyZ2VkIHdpdGggdGhlIHByZXZpb3VzIGxpbmVcbiAgICAgICAgICAvLyBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSByb3cgbnVtYmVyXG4gICAgICAgICAgd2hpbGUgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgcm93OiByb3csIGNvbDogY29sIH07XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuXG4gICAgbGV0IHsgbm9kZTogZm9jdXNOb2RlLCBvZmZzZXQ6IGZvY3VzT2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgZm9jdXMucm93LFxuICAgICAgZm9jdXMuY29sLFxuICAgICAgYW5jaG9yID8gYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPiBmb2N1cy5jb2wgOiBmYWxzZVxuICAgICk7XG4gICAgbGV0IGFuY2hvck5vZGUgPSBudWxsLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gbnVsbDtcbiAgICBpZiAoYW5jaG9yICYmIChhbmNob3Iucm93ICE9PSBmb2N1cy5yb3cgfHwgYW5jaG9yLmNvbCAhPT0gZm9jdXMuY29sKSkge1xuICAgICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgICBhbmNob3Iucm93LFxuICAgICAgICBhbmNob3IuY29sLFxuICAgICAgICBmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID4gYW5jaG9yLmNvbFxuICAgICAgKTtcbiAgICAgIGFuY2hvck5vZGUgPSBub2RlO1xuICAgICAgYW5jaG9yT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGxldCB3aW5kb3dTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgd2luZG93U2VsZWN0aW9uIS5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICBhbmNob3JOb2RlIHx8IGZvY3VzTm9kZSxcbiAgICAgIGFuY2hvck5vZGUgPyBhbmNob3JPZmZzZXQhIDogZm9jdXNPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcblxuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydExpbmVCcmVha1wiKSAmJiBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgdGhpcy5wcm9jZXNzTmV3UGFyYWdyYXBoKGZvY3VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NOZXdQYXJhZ3JhcGgoc2VsOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIGlmICghc2VsKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuXG4gICAgbGV0IGNvbnRpbnVhYmxlVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY2hlY2tMaW5lID0gc2VsLmNvbCA+IDAgPyBzZWwucm93IDogc2VsLnJvdyAtIDE7XG4gICAgc3dpdGNoICh0aGlzLmxpbmVUeXBlc1tjaGVja0xpbmVdKSB7XG4gICAgICBjYXNlIFwiVE1VTFwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiVE1PTFwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiVE1JbmRlbnRlZENvZGVcIjpcbiAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbGluZXMgPSB0aGlzLmxpbmVzW3NlbC5yb3ddLnJlcGxhY2UoL1xcblxcbiQvLCBcIlxcblwiKS5zcGxpdCgvKD86XFxyXFxufFxcbnxcXHIpLyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoc2VsLnJvdywgMSwgbGluZXMsIHRydWUpO1xuICAgICAgc2VsLnJvdysrO1xuICAgICAgc2VsLmNvbCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRpbnVhYmxlVHlwZSkge1xuICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hcltjb250aW51YWJsZVR5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbc2VsLnJvdyAtIDFdKTtcbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGlmIChjYXB0dXJlWzJdKSB7XG4gICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgIGNhcHR1cmVbMV0gPSBjYXB0dXJlWzFdLnJlcGxhY2UoL1xcZHsxLDl9LywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHJlc3VsdCkgKyAxKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGluZXNbc2VsLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tzZWwucm93XX1gO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W3NlbC5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICBzZWwuY29sID0gY2FwdHVyZVsxXS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tzZWwucm93IC0gMV0gPSBcIlwiO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W3NlbC5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzFdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1s1XVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUgfHwgIXNlbC5hbmNob3JOb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBzZWwuaXNDb2xsYXBzZWQgJiZcbiAgICAgIHNlbC5mb2N1c05vZGUubm9kZVR5cGUgPT09IDMgJiZcbiAgICAgIHNlbC5mb2N1c09mZnNldCA9PT0gc2VsLmZvY3VzTm9kZS5ub2RlVmFsdWUhLmxlbmd0aFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBmb3IgKG5vZGUgPSBzZWwuZm9jdXNOb2RlOyBub2RlICYmIG5vZGUubmV4dFNpYmxpbmcgPT09IG51bGw7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUhKTtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICBub2RlLm5leHRTaWJsaW5nICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhbmNlc3RvciA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICBpZiAoIWFuY2VzdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICB0eXBlb2YgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAoKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUlubGluZUZvcm1hdHRlZFwiKSB8fFxuICAgICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1CbGFua0xpbmVcIikpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlITtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZSgpO1xuICAgIHRoaXMuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQsICF0aGlzLmxhc3RDb21tYW5kU3RhdGVbY29tbWFuZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXJlRHJvcChkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcik6IHZvaWQge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmRyb3ApIHtcbiAgICAgIGxpc3RlbmVyKHsgZGF0YVRyYW5zZmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjsiXSwibmFtZXMiOlsic3ZnIiwiYmxvY2txdW90ZSIsImJvbGQiLCJjbGVhcl9mb3JtYXR0aW5nIiwiY29kZSIsImgxIiwiaDIiLCJociIsImltYWdlIiwiaXRhbGljIiwibGluayIsIm9sIiwicmVkbyIsInN0cmlrZXRocm91Z2giLCJ1bCIsInVuZG8iLCJpc01hY0xpa2UiLCJ0ZXN0IiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJEZWZhdWx0Q29tbWFuZHMiLCJuYW1lIiwiYWN0aW9uIiwiaW5uZXJIVE1MIiwidGl0bGUiLCJob3RrZXkiLCJpbnNlcnRMaW5rIiwiZWRpdG9yIiwiaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCIsIndyYXBTZWxlY3Rpb24iLCJlbmFibGVkIiwiZm9jdXMiLCJhbmNob3IiLCJpbnNlcnRJbWFnZSIsInBhc3RlIiwiY2FuVW5kbyIsImNhblJlZG8iLCJDb21tYW5kQmFyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImUiLCJjb21tYW5kcyIsImJ1dHRvbnMiLCJzdGF0ZSIsImhvdGtleXMiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJjcmVhdGVDb21tYW5kQmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVLZXlkb3duIiwic2V0RWRpdG9yIiwicGFyZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tYW5kIiwiZWwiLCJhcHBlbmRDaGlsZCIsImNvbW1hbmROYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5cyIsInNwbGl0IiwibW9kaWZpZXJzIiwibW9kaWZpZXJleHBsYW5hdGlvbiIsImkiLCJsZW5ndGgiLCJwdXNoIiwibWF0Y2giLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsImNvbmNhdCIsImpvaW4iLCJoYW5kbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJvdXRlciIsIm1vZGlmaWVyIiwiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiVE1Db2RlRmVuY2VUaWxkZU9wZW4iLCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UiLCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2UiLCJUTUJsYW5rTGluZSIsIlRNU2V0ZXh0SDFNYXJrZXIiLCJUTVNldGV4dEgyTWFya2VyIiwiVE1IUiIsIlRNVUwiLCJUTU9MIiwiVE1JbmRlbnRlZENvZGUiLCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uIiwibGFiZWxQbGFjZWhvbGRlciIsImh0bWxCbG9ja0dyYW1tYXIiLCJzdGFydCIsImVuZCIsInBhcmFJbnRlcnJ1cHQiLCJpbmxpbmVHcmFtbWFyIiwiZXNjYXBlIiwiYXV0b2xpbmsiLCJodG1sIiwibGlua09wZW4iLCJpbWFnZU9wZW4iLCJsaW5rTGFiZWwiLCJkZWZhdWx0IiwicmVwbGFjZW1lbnRSZWdleHAiLCJpbmxpbmVSdWxlcyIsInJ1bGUiLCJyZSIsInNvdXJjZSIsInJlcGxhY2UiLCJzdHJpbmciLCJmbGFncyIsImNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIiLCJjdXN0b21SdWxlcyIsImFyZ3VtZW50cyIsIm1lcmdlZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImhhbmRsZVBhc3RlIiwiaGFuZGxlRHJvcCIsImNoaWxkTm9kZXMiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJsaW5lTnVtIiwibGUiLCJBcnJheSIsInVwZGF0ZUZvcm1hdHRpbmciLCJmaXJlQ2hhbmdlIiwidXBkYXRlTGluZVR5cGVzIiwidXBkYXRlTGlua0xhYmVscyIsImFwcGx5TGluZVR5cGVzIiwibCIsImNhcHR1cmUiLCJzdHIiLCJwMSIsInAyIiwicGFyc2VJbnQiLCJwcm9jZXNzSW5saW5lU3R5bGVzIiwiY29udGVudEhUTUwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkYXRhc2V0IiwidG9TdHJpbmciLCJjb2RlQmxvY2tUeXBlIiwiY29kZUJsb2NrU2VxTGVuZ3RoIiwiaHRtbEJsb2NrIiwibGluZVR5cGUiLCJsaW5lQ2FwdHVyZSIsImxpbmVSZXBsYWNlbWVudCIsImV4ZWMiLCJncm91cHMiLCJodG1sQmxvY2tUeXBlIiwiaGVhZGluZ0xpbmUiLCJoZWFkaW5nTGluZVR5cGUiLCJnZXRBbmNob3IiLCJ3aW5kb3ciLCJzdGFydE5vZGUiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwib2Zmc2V0IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJyb3ciLCJjb2wiLCJjb21wdXRlQ29sdW1uIiwibm9kZSIsInByZXZpb3VzU2libGluZyIsImN1cnJlbnRMaW5lTnVtRGF0YSIsIl9hIiwicHJldmlvdXNMaW5lTnVtRGF0YSIsIl9iIiwiY3VycmVudExpbmVOdW0iLCJwcmV2aW91c0xpbmVOdW0iLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJjbGVhckRpcnR5RmxhZyIsInByb2Nlc3NOZXdQYXJhZ3JhcGgiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicmVzdWx0IiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic2VsIiwiY29udGludWFibGVUeXBlIiwiY2hlY2tMaW5lIiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFw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LElBQUlwQyxLQUFLLEdBQUcsSUFBSSxDQUFDb0wsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNwQyxNQUFBLElBQUluTCxNQUFNLEdBQUcsSUFBSSxDQUFDbUwsWUFBWSxDQUFDLElBQUksQ0FBQztVQUNwQyxJQUFJcEksWUFBWSxHQUFHLElBQUksQ0FBQzBVLGVBQWUsQ0FBQzFYLEtBQUssRUFBRUMsTUFBTSxDQUFDO1VBQ3RELElBQUksSUFBSSxDQUFDMkosZ0JBQWdCLEVBQUU7WUFDekIvSCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUM4SCxnQkFBZ0IsRUFBRTVHLFlBQVksQ0FBQztJQUNwRCxPQUFDLE1BQU07WUFDTCxJQUFJLENBQUM0RyxnQkFBZ0IsR0FBRy9ILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsRUFBRWtCLFlBQVksQ0FBQztJQUN6RDtVQUNBLEtBQUssSUFBSWdPLFFBQVEsSUFBSSxJQUFJLENBQUNqSCxTQUFTLENBQUNFLFNBQVMsRUFBRTtJQUM3QytHLFFBQUFBLFFBQVEsQ0FBQztJQUNQaFIsVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0lBQ2JDLFVBQUFBLE1BQU0sRUFBRUEsTUFBTztjQUNmK0MsWUFBWSxFQUFFLElBQUksQ0FBQzRHO0lBQ3BCLFNBQUEsQ0FBQztJQUNKO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OV19{"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n if (keys[keys.length - 1].match(/^[0-9]$/)) {\n hotkey.code = `Digit${keys[keys.length - 1]}`;\n } else {\n hotkey.key = keys[keys.length - 1].toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) =>\n this.handleSelectionChangeEvent(e)\n );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n this.clearDirtyFlag();\n this.processNewParagraph(focus);\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private processNewParagraph(sel: Position): void {\n if (!sel) return;\n\n this.updateLineContents();\n\n let continuableType: string | false = false;\n let checkLine = sel.col > 0 ? sel.row : sel.row - 1;\n switch (this.lineTypes[checkLine]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n\n let lines = this.lines[sel.row].replace(/\\n\\n$/, \"\\n\").split(/(?:\\r\\n|\\n|\\r)/);\n if (lines.length > 1) {\n this.spliceLines(sel.row, 1, lines, true);\n sel.row++;\n sel.col = 0;\n }\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[sel.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[sel.row] = `${capture[1]}${this.lines[sel.row]}`;\n this.lineDirty[sel.row] = true;\n sel.col = capture[1].length;\n } else {\n this.lines[sel.row - 1] = \"\";\n this.lineDirty[sel.row - 1] = true;\n }\n }\n }\n this.updateFormatting();\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","match","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","inputEvent","inputType","clearDirtyFlag","processNewParagraph","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","result","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","sel","continuableType","checkLine","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":";;;;;;IAAA,MAAMA,GAAG,GAA2B;IAClCC,EAAAA,UAAU,EAAE,CAA2R,yRAAA,CAAA;IACvSC,EAAAA,IAAI,EAAE,CAA0Y,wYAAA,CAAA;IAChZC,EACAC,IAAI,EAAE,CAA+U,6UAAA,CAAA;IACrVC,EAAAA,EAAE,EAAE,CAAgK,8JAAA,CAAA;IACpKC,EAAAA,EAAE,EAAE,CAAkK,gKAAA,CAAA;IACtKC,EAAAA,EAAE,EAAE,CAAiI,+HAAA,CAAA;IACrIC,EAAAA,KAAK,EAAE,CAA+H,6HAAA,CAAA;IACtIC,EAAAA,MAAM,EAAE,CAAiH,+GAAA,CAAA;IACzHC,EAAAA,IAAI,EAAE,CAA2uC,yuCAAA,CAAA;IACjvCC,EAAAA,EAAE,EAAE,CAAqtB,mtBAAA,CAAA;IACztBC,EAAAA,IAAI,EAAE,CAAssB,osBAAA,CAAA;IAC5sBC,EAAAA,aAAa,EAAE,CAA4X,0XAAA,CAAA;IAC3YC,EAAAA,EAAE,EAAE,CAA6Q,2QAAA,CAAA;IACjRC,EAAAA,IAAI,EAAE,CAAA;AACP;KACA;;ICdD,MAAMC,SAAS,GAAG,yBAAyB,CAACC,IAAI,CAC9C,OAAOC,SAAS,KAAK,WAAW,GAAGA,SAAS,CAACC,QAAQ,GAAG,EAAE,CAC3D;IAgCD,MAAMC,eAAe,GAAsC;IACzDlB,EAAAA,IAAI,EAAE;IACJmB,IAAAA,IAAI,EAAE,MAAM;IACZC,IAAAA,MAAM,EAAE,MAAM;QACdC,SAAS,EAAEvB,GAAG,CAACE,IAAI;IACnBsB,IAAAA,KAAK,EAAE,MAAM;IACbC,IAAAA,MAAM,EAAE;OACT;IACDhB,EAAAA,MAAM,EAAE;IACNY,IAAAA,IAAI,EAAE,QAAQ;IACdC,IAAAA,MAAM,EAAE,QAAQ;QAChBC,SAAS,EAAEvB,GAAG,CAACS,MAAM;IACrBe,IAAAA,KAAK,EAAE,QAAQ;IACfC,IAAAA,MAAM,EAAE;OACT;IACDZ,EAAAA,aAAa,EAAE;IACbQ,IAAAA,IAAI,EAAE,eAAe;IACrBC,IAAAA,MAAM,EAAE,eAAe;QACvBC,SAAS,EAAEvB,GAAG,CAACa,aAAa;IAC5BW,IAAAA,KAAK,EAAE,eAAe;IACtBC,IAAAA,MAAM,EAAE;OACT;IACDrB,EAAAA,IAAI,EAAE;IACJiB,IAAAA,IAAI,EAAE,MAAM;IACZC,IAAAA,MAAM,EAAE,MAAM;QACdC,SAAS,EAAEvB,GAAG,CAACI,IAAI;IACnBoB,IAAAA,KAAK,EAAE;OACR;IACDnB,EAAAA,EAAE,EAAE;IACFgB,IAAAA,IAAI,EAAE,IAAI;IACVC,IAAAA,MAAM,EAAE,IAAI;QACZC,SAAS,EAAEvB,GAAG,CAACK,EAAE;IACjBmB,IAAAA,KAAK,EAAE,iBAAiB;IACxBC,IAAAA,MAAM,EAAE;OACT;IACDnB,EAAAA,EAAE,EAAE;IACFe,IAAAA,IAAI,EAAE,IAAI;IACVC,IAAAA,MAAM,EAAE,IAAI;QACZC,SAAS,EAAEvB,GAAG,CAACM,EAAE;IACjBkB,IAAAA,KAAK,EAAE,iBAAiB;IACxBC,IAAAA,MAAM,EAAE;OACT;IACDX,EAAAA,EAAE,EAAE;IACFO,IAAAA,IAAI,EAAE,IAAI;IACVC,IAAAA,MAAM,EAAE,IAAI;QACZC,SAAS,EAAEvB,GAAG,CAACc,EAAE;IACjBU,IAAAA,KAAK,EAAE;OACR;IACDb,EAAAA,EAAE,EAAE;IACFU,IAAAA,IAAI,EAAE,IAAI;IACVC,IAAAA,MAAM,EAAE,IAAI;QACZC,SAAS,EAAEvB,GAAG,CAACW,EAAE;IACjBa,IAAAA,KAAK,EAAE;OACR;IACDvB,EAAAA,UAAU,EAAE;IACVoB,IAAAA,IAAI,EAAE,YAAY;IAClBC,IAAAA,MAAM,EAAE,YAAY;QACpBC,SAAS,EAAEvB,GAAG,CAACC,UAAU;IACzBuB,IAAAA,KAAK,EAAE,OAAO;IACdC,IAAAA,MAAM,EAAE;OACT;IACDC,EAAAA,UAAU,EAAE;IACVL,IAAAA,IAAI,EAAE,YAAY;QAClBC,MAAM,EAAGK,MAAc,IAAI;IACzB,MAAA,IAAKA,MAAc,CAACC,yBAAyB,EAAE,EAAED,MAAM,CAACE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;SAClF;IACDC,IAAAA,OAAO,EAAEA,CAACH,MAAc,EAAEI,KAAgB,EAAEC,MAAiB,KAC1DL,MAAc,CAACC,yBAAyB,CAACG,KAAK,EAAEC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI;QACzET,SAAS,EAAEvB,GAAG,CAACU,IAAI;IACnBc,IAAAA,KAAK,EAAE,aAAa;IACpBC,IAAAA,MAAM,EAAE;OACT;IACDQ,EAAAA,WAAW,EAAE;IACXZ,IAAAA,IAAI,EAAE,aAAa;QACnBC,MAAM,EAAGK,MAAc,IAAI;IACzB,MAAA,IAAKA,MAAc,CAACC,yBAAyB,EAAE,EAAED,MAAM,CAACE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;SACnF;IACDC,IAAAA,OAAO,EAAEA,CAACH,MAAc,EAAEI,KAAgB,EAAEC,MAAiB,KAC1DL,MAAc,CAACC,yBAAyB,CAACG,KAAK,EAAEC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI;QACzET,SAAS,EAAEvB,GAAG,CAACQ,KAAK;IACpBgB,IAAAA,KAAK,EAAE,cAAc;IACrBC,IAAAA,MAAM,EAAE;OACT;IACDlB,EAAAA,EAAE,EAAE;IACFc,IAAAA,IAAI,EAAE,IAAI;QACVC,MAAM,EAAGK,MAAc,IAAKA,MAAM,CAACO,KAAK,CAAC,SAAS,CAAC;QACnDJ,OAAO,EAAEA,MAAM,KAAK;QACpBP,SAAS,EAAEvB,GAAG,CAACO,EAAE;IACjBiB,IAAAA,KAAK,EAAE,wBAAwB;IAC/BC,IAAAA,MAAM,EAAE;OACT;IACDV,EAAAA,IAAI,EAAE;IACJM,IAAAA,IAAI,EAAE,MAAM;IACZC,IAAAA,MAAM,EAAGK,MAAc,IAAKA,MAAM,CAACZ,IAAI,EAAE;QACzCe,OAAO,EAAGH,MAAc,IAAMA,MAAM,CAACQ,OAAO,GAAG,KAAK,GAAG,IAAK;QAC5DZ,SAAS,EAAEvB,GAAG,CAACe,IAAI;IACnBS,IAAAA,KAAK,EAAE;OACR;IACDZ,EAAAA,IAAI,EAAE;IACJS,IAAAA,IAAI,EAAE,MAAM;IACZC,IAAAA,MAAM,EAAGK,MAAc,IAAKA,MAAM,CAACf,IAAI,EAAE;QACzCkB,OAAO,EAAGH,MAAc,IAAMA,MAAM,CAACS,OAAO,GAAG,KAAK,GAAG,IAAK;QAC5Db,SAAS,EAAEvB,GAAG,CAACY,IAAI;IACnBY,IAAAA,KAAK,EAAE;IACR;KACF;UAEYa,UAAU,CAAA;MAQrBC,WAAAA,CAAYC,KAAsB,EAAA;QAP3B,IAAC,CAAAC,CAAA,GAA0B,IAAI;QAC/B,IAAM,CAAAb,MAAA,GAAkB,IAAI;IAC5B,IAAA,IAAQ,CAAAc,QAAA,GAAsC,EAAE;IAChD,IAAA,IAAO,CAAAC,OAAA,GAAmC,EAAE;IAC5C,IAAA,IAAK,CAAAC,KAAA,GAAmC,EAAE;QACzC,IAAO,CAAAC,OAAA,GAAa,EAAE;QAG5B,IAAI,CAACJ,CAAC,GAAG,IAAI;QACb,IAAI,CAACb,MAAM,GAAG,IAAI;IAClB,IAAA,IAAI,CAACc,QAAQ,GAAG,EAAE;IAClB,IAAA,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAA,IAAI,CAACC,KAAK,GAAG,EAAE;QACf,IAAI,CAACC,OAAO,GAAG,EAAE;QAEjB,IAAIC,OAAO,GAAuB,IAAI;IACtC,IAAA,IAAI,OAAON,KAAK,CAACM,OAAO,KAAK,QAAQ,EAAE;UACrCA,OAAO,GAAGC,QAAQ,CAACC,cAAc,CAACR,KAAK,CAACM,OAAO,CAAC;IAClD,KAAC,MAAM,IAAIN,KAAK,CAACM,OAAO,EAAE;UACxBA,OAAO,GAAGN,KAAK,CAACM,OAAO;IACzB;QAEA,IAAI,CAACA,OAAO,EAAE;UACZA,OAAO,GAAGC,QAAQ,CAACE,IAAI;IACzB;QAEA,IAAI,CAACC,uBAAuB,CAC1BJ,OAAO,EACPN,KAAK,CAACE,QAAQ,IAAI,CAChB,MAAM,EACN,QAAQ,EACR,eAAe,EACf,GAAG,EACH,MAAM,EACN,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,GAAG,EACH,MAAM,EACN,MAAM,EACN,GAAG,EACH,YAAY,EACZ,aAAa,CACd,CACF;IACDK,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,SAAS,EAAGV,CAAC,IAAK,IAAI,CAACW,aAAa,CAACX,CAAC,CAAC,CAAC;QAClE,IAAID,KAAK,CAACZ,MAAM,EAAE,IAAI,CAACyB,SAAS,CAACb,KAAK,CAACZ,MAAM,CAAC;IAChD;IAEQsB,EAAAA,uBAAuBA,CAACI,aAA0B,EAAEZ,QAAwC,EAAA;QAClG,IAAI,CAACD,CAAC,GAAGM,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IACtC,IAAA,IAAI,CAACd,CAAC,CAACe,SAAS,GAAG,cAAc;IAEjC,IAAA,KAAK,IAAIC,OAAO,IAAIf,QAAQ,EAAE;UAC5B,IAAIe,OAAO,KAAK,GAAG,EAAE;IACnB,QAAA,IAAIC,EAAE,GAAGX,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;YACtCG,EAAE,CAACF,SAAS,GAAG,kBAAkB;IACjC,QAAA,IAAI,CAACf,CAAC,CAACkB,WAAW,CAACD,EAAE,CAAC;IACxB,OAAC,MAAM;IACL,QAAA,IAAIE,WAAmB;IACvB,QAAA,IAAI,OAAOH,OAAO,KAAK,QAAQ,EAAE;IAC/B,UAAA,IAAIpC,eAAe,CAACoC,OAAO,CAAC,EAAE;IAC5BG,YAAAA,WAAW,GAAGH,OAAO;gBACrB,IAAI,CAACf,QAAQ,CAACkB,WAAW,CAAC,GAAGvC,eAAe,CAACuC,WAAW,CAAC;IAC3D,WAAC,MAAM;IACL,YAAA;IACF;aACD,MAAM,IAAI,OAAOH,OAAO,KAAK,QAAQ,IAAIA,OAAO,CAACnC,IAAI,EAAE;cACtDsC,WAAW,GAAGH,OAAO,CAACnC,IAAI;IAC1B,UAAA,IAAI,CAACoB,QAAQ,CAACkB,WAAW,CAAC,GAAG,EAAuB;IACpD,UAAA,IAAIvC,eAAe,CAACuC,WAAW,CAAC,EAAE;IAChCC,YAAAA,MAAM,CAACC,MAAM,CAAC,IAAI,CAACpB,QAAQ,CAACkB,WAAW,CAAC,EAAEvC,eAAe,CAACuC,WAAW,CAAC,CAAC;IACzE;cACAC,MAAM,CAACC,MAAM,CAAC,IAAI,CAACpB,QAAQ,CAACkB,WAAW,CAAC,EAAEH,OAAO,CAAC;IACpD,SAAC,MAAM;IACL,UAAA;IACF;YAEA,IAAIhC,KAAK,GAAG,IAAI,CAACiB,QAAQ,CAACkB,WAAW,CAAC,CAACnC,KAAK,IAAImC,WAAW;YAE3D,IAAI,IAAI,CAAClB,QAAQ,CAACkB,WAAW,CAAC,CAAClC,MAAM,EAAE;IACrC,UAAA,MAAMqC,IAAI,GAAG,IAAI,CAACrB,QAAQ,CAACkB,WAAW,CAAC,CAAClC,MAAO,CAACsC,KAAK,CAAC,GAAG,CAAC;cAC1D,IAAIC,SAAS,GAAa,EAAE;cAC5B,IAAIC,mBAAmB,GAAa,EAAE;IAEtC,UAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,IAAI,CAACK,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;gBACxC,QAAQJ,IAAI,CAACI,CAAC,CAAC;IACb,cAAA,KAAK,MAAM;IACTF,gBAAAA,SAAS,CAACI,IAAI,CAAC,SAAS,CAAC;IACzBH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,MAAM,CAAC;IAChC,gBAAA;IACF,cAAA,KAAK,KAAK;IACRJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,SAAS,CAAC;IACzBH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC;IAC7B,gBAAA;IACF,cAAA,KAAK,KAAK;IACRJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,QAAQ,CAAC;IACxBH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,KAAK,CAAC;IAC/B,gBAAA;IACF,cAAA,KAAK,QAAQ;IACXJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,QAAQ,CAAC;IACxBH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC;IAC7B,gBAAA;IACF,cAAA,KAAK,KAAK;IACRJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,SAAS,CAAC;IACzBH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,OAAO,CAAC;IACjC,gBAAA;IACF,cAAA,KAAK,OAAO;IACVJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,UAAU,CAAC;IAC1BH,gBAAAA,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC;IAC7B,gBAAA;IACF,cAAA,KAAK,KAAK;IACR,gBAAA,IAAIpD,SAAS,EAAE;IACbgD,kBAAAA,SAAS,CAACI,IAAI,CAAC,SAAS,CAAC;IACzBH,kBAAAA,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC;IAC/B,iBAAC,MAAM;IACLJ,kBAAAA,SAAS,CAACI,IAAI,CAAC,SAAS,CAAC;IACzBH,kBAAAA,mBAAmB,CAACG,IAAI,CAAC,MAAM,CAAC;IAClC;IACA,gBAAA;IACF,cAAA,KAAK,MAAM;IACTJ,gBAAAA,SAAS,CAACI,IAAI,CAAC,QAAQ,CAAC;IACxB,gBAAA,IAAIpD,SAAS,EAAEiD,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC,CAAC,KACxCH,mBAAmB,CAACG,IAAI,CAAC,KAAK,CAAC;IACpC,gBAAA;IACJ;IACF;cAEAH,mBAAmB,CAACG,IAAI,CAACN,IAAI,CAACA,IAAI,CAACK,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,UAAA,IAAI1C,MAAM,GAAW;IACnBuC,YAAAA,SAAS,EAAEA,SAAS;IACpBR,YAAAA,OAAO,EAAEG;eACV;IAED,UAAA,IAAIG,IAAI,CAACA,IAAI,CAACK,MAAM,GAAG,CAAC,CAAC,CAACE,KAAK,CAAC,SAAS,CAAC,EAAE;IAC1C5C,YAAAA,MAAM,CAACrB,IAAI,GAAG,CAAA,KAAA,EAAQ0D,IAAI,CAACA,IAAI,CAACK,MAAM,GAAG,CAAC,CAAC,CAAE,CAAA;IAC/C,WAAC,MAAM;IACL1C,YAAAA,MAAM,CAAC6C,GAAG,GAAGR,IAAI,CAACA,IAAI,CAACK,MAAM,GAAG,CAAC,CAAC,CAACI,WAAW,EAAE;IAClD;IACA,UAAA,IAAI,CAAC3B,OAAO,CAACwB,IAAI,CAAC3C,MAAM,CAAC;IACzBD,UAAAA,KAAK,GAAGA,KAAK,CAACgD,MAAM,CAAC,CAAA,EAAA,EAAKP,mBAAmB,CAACQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7D;YAEA,IAAI,CAAC/B,OAAO,CAACiB,WAAW,CAAC,GAAGb,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;YACzD,IAAI,CAACZ,OAAO,CAACiB,WAAW,CAAC,CAACJ,SAAS,GAAG,0CAA0C;YAChF,IAAI,CAACb,OAAO,CAACiB,WAAW,CAAC,CAACnC,KAAK,GAAGA,KAAK;IACvC,QAAA,IAAI,CAACkB,OAAO,CAACiB,WAAW,CAAC,CAACpC,SAAS,GAAG,IAAI,CAACkB,QAAQ,CAACkB,WAAW,CAAC,CAACpC,SAAS;YAE1E,IAAI,CAACmB,OAAO,CAACiB,WAAW,CAAC,CAACT,gBAAgB,CAAC,WAAW,EAAGV,CAAC,IACxD,IAAI,CAACkC,WAAW,CAACf,WAAW,EAAEnB,CAAC,CAAC,CACjC;YACD,IAAI,CAACA,CAAC,CAACkB,WAAW,CAAC,IAAI,CAAChB,OAAO,CAACiB,WAAW,CAAC,CAAC;IAC/C;IACF;IACAN,IAAAA,aAAa,CAACK,WAAW,CAAC,IAAI,CAAClB,CAAC,CAAC;IACnC;IAEQkC,EAAAA,WAAWA,CAACf,WAAmB,EAAEgB,KAAY,EAAA;IACnD,IAAA,IAAI,CAAC,IAAI,CAAChD,MAAM,EAAE;QAClBgD,KAAK,CAACC,cAAc,EAAE;QACtB,IAAI,OAAO,IAAI,CAACnC,QAAQ,CAACkB,WAAW,CAAC,CAACrC,MAAM,KAAK,QAAQ,EAAE;IACzD,MAAA,IAAI,IAAI,CAACqB,KAAK,CAACgB,WAAW,CAAC,KAAK,KAAK,EAClC,IAAI,CAAChC,MAAc,CAACkD,eAAe,CAAClB,WAAW,EAAE,IAAI,CAAC,CAAC,KACpD,IAAI,CAAChC,MAAc,CAACkD,eAAe,CAAClB,WAAW,EAAE,KAAK,CAAC;IAC/D,KAAC,MAAM,IAAI,OAAO,IAAI,CAAClB,QAAQ,CAACkB,WAAW,CAAC,CAACrC,MAAM,KAAK,UAAU,EAAE;UACjE,IAAI,CAACmB,QAAQ,CAACkB,WAAW,CAAC,CAACrC,MAAwB,CAAC,IAAI,CAACK,MAAM,CAAC;IACnE;IACF;MAEOyB,SAASA,CAACzB,MAAc,EAAA;QAC7B,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpBA,IAAAA,MAAM,CAACuB,gBAAgB,CAAC,WAAW,EAAGV,CAAC,IAAK,IAAI,CAACsC,eAAe,CAACtC,CAAC,CAAC,CAAC;IACtE;MAEQsC,eAAeA,CAACH,KAAqB,EAAA;QAC3C,IAAIA,KAAK,CAACI,YAAY,EAAE;IACtB,MAAA,KAAK,IAAIvB,OAAO,IAAI,IAAI,CAACf,QAAQ,EAAE;YACjC,IAAIkC,KAAK,CAACI,YAAY,CAACvB,OAAO,CAAC,KAAKwB,SAAS,EAAE;cAC7C,IAAI,IAAI,CAACvC,QAAQ,CAACe,OAAO,CAAC,CAAC1B,OAAO,EAAE;gBAClC,IAAI,CAACa,KAAK,CAACa,OAAO,CAAC,GAAG,IAAI,CAACf,QAAQ,CAACe,OAAO,CAAC,CAAC1B,OAAQ,CACnD,IAAI,CAACH,MAAO,EACZgD,KAAK,CAAC5C,KAAK,EACX4C,KAAK,CAAC3C,MAAM,CACb;IACH,WAAC,MAAM;IACL,YAAA,IAAI,CAACW,KAAK,CAACa,OAAO,CAAC,GAAGmB,KAAK,CAAC5C,KAAK,GAAG,KAAK,GAAG,IAAI;IAClD;IACF,SAAC,MAAM;cACL,IAAI,CAACY,KAAK,CAACa,OAAO,CAAC,GAAGmB,KAAK,CAACI,YAAY,CAACvB,OAAO,CAAC;IACnD;YAEA,IAAI,IAAI,CAACb,KAAK,CAACa,OAAO,CAAC,KAAK,IAAI,EAAE;cAChC,IAAI,CAACd,OAAO,CAACc,OAAO,CAAC,CAACD,SAAS,GAAG,wCAAwC;aAC3E,MAAM,IAAI,IAAI,CAACZ,KAAK,CAACa,OAAO,CAAC,KAAK,KAAK,EAAE;cACxC,IAAI,CAACd,OAAO,CAACc,OAAO,CAAC,CAACD,SAAS,GAAG,0CAA0C;IAC9E,SAAC,MAAM;cACL,IAAI,CAACb,OAAO,CAACc,OAAO,CAAC,CAACD,SAAS,GAAG,0CAA0C;IAC9E;IACF;IACF;IACF;MAEQJ,aAAaA,CAACwB,KAAoB,EAAA;QACxCM,KAAK,EAAE,KAAK,IAAIxD,MAAM,IAAI,IAAI,CAACmB,OAAO,EAAE;UACtC,IACGnB,MAAM,CAAC6C,GAAG,IAAIK,KAAK,CAACL,GAAG,CAACC,WAAW,EAAE,KAAK9C,MAAM,CAAC6C,GAAG,IACpD7C,MAAM,CAACrB,IAAI,IAAIuE,KAAK,CAACvE,IAAI,KAAKqB,MAAM,CAACrB,IAAK,EAC3C;IACA,QAAA,KAAK,IAAI8E,QAAQ,IAAIzD,MAAM,CAACuC,SAAS,EAAE;IACrC,UAAA,IAAI,CAAEW,KAAa,CAACO,QAAQ,CAAC,EAAE,SAASD,KAAK;IAC/C;YACA,IAAI,CAACP,WAAW,CAACjD,MAAM,CAAC+B,OAAO,EAAEmB,KAAK,CAAC;IACvC,QAAA;IACF;IACF;IACF;IACD;;;;;;;;;;;;IC9WD,CAAA,IAAI,KAAK,GAAG,UAAU,EAAE,EAAE;OACxB,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE;MACpC;;IAED;IACA,CAAc,YAAA;IACd;OACE,KAAK,CAAC,OAAO,UAAU,IAAI,QAAQ,IAAI,UAAU,CAAC;OAClD,KAAK,CAAC,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC;IAC5C;OACE,KAAK,CAAC,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC;OACtC,KAAK,CAAC,OAAOQ,cAAM,IAAI,QAAQ,IAAIA,cAAM,CAAC;OAC1C,KAAK,CAAC,OAAOC,YAAI,IAAI,QAAQ,IAAIA,YAAI,CAAC;IACxC;IACA,GAAE,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;;;;;;;;;;ICd/D,CAAc,KAAA,GAAG,UAAU,IAAI,EAAE;IACjC,GAAE,IAAI;IACN,KAAI,OAAO,CAAC,CAAC,IAAI,EAAE;QAChB,CAAC,OAAO,KAAK,EAAE;IAClB,KAAI,OAAO,IAAI;IACf;MACC;;;;;;;;;;KCND,IAAI,KAAK,GAAGC,YAA6B,EAAA;;IAEzC;IACA,CAAA,WAAc,GAAG,CAAC,KAAK,CAAC,YAAY;IACpC;OACE,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAClF,EAAC,CAAC;;;;;;;;;;;;KCNF,IAAI,KAAK,GAAGA,YAA6B,EAAA;;IAEzC,CAAA,kBAAc,GAAG,CAAC,KAAK,CAAC,YAAY;IACpC;OACE,IAAI,IAAI,GAAG,CAAC,YAAY,eAAe,EAAE,IAAI,EAAE;IACjD;OACE,OAAO,OAAO,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;IACtE,EAAC,CAAC;;;;;;;;;;KCPF,IAAI,WAAW,GAAGA,yBAA4C,EAAA;;IAE9D,CAAA,IAAI,iBAAiB,GAAG,QAAQ,CAAC,SAAS;IAC1C,CAAA,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI;IACjC;IACA,CAAA,IAAI,mBAAmB,GAAG,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;;IAEhF,CAAA,mBAAc,GAAG,WAAW,GAAG,mBAAmB,GAAG,UAAU,EAAE,EAAE;IACnE,GAAE,OAAO,YAAY;SACjB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;QACjC;MACF;;;;;;;;;;ICXD;KACA,IAAI,WAAW,GAAG,OAAO,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG;;IAE7D;IACA;IACA;IACA,CAAA,UAAc,GAAG,OAAO,WAAW,IAAI,WAAW,IAAI,WAAW,KAAK,SAAS,GAAG,UAAU,QAAQ,EAAE;OACpG,OAAO,OAAO,QAAQ,IAAI,UAAU,IAAI,QAAQ,KAAK,WAAW;MACjE,GAAG,UAAU,QAAQ,EAAE;IACxB,GAAE,OAAO,OAAO,QAAQ,IAAI,UAAU;MACrC;;;;;;;;;;ICVD;IACA;IACA,CAAc,iBAAA,GAAG,UAAU,EAAE,EAAE;IAC/B,GAAE,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;MACvC;;;;;;;;;;KCJD,IAAI,iBAAiB,GAAGA,wBAA4C,EAAA;;KAEpE,IAAI,UAAU,GAAG,SAAS;;IAE1B;IACA;IACA,CAAc,sBAAA,GAAG,UAAU,EAAE,EAAE;IAC/B,GAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,uBAAuB,GAAG,EAAE,CAAC;IAC/E,GAAE,OAAO,EAAE;MACV;;;;;;;;;;KCTD,IAAI,sBAAsB,GAAGA,6BAAgD,EAAA;;KAE7E,IAAI,OAAO,GAAG,MAAM;;IAEpB;IACA;IACA,CAAc,QAAA,GAAG,UAAU,QAAQ,EAAE;IACrC,GAAE,OAAO,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;MACjD;;;;;;;;;;KCRD,IAAI,WAAW,GAAGA,0BAA6C,EAAA;KAC/D,IAAI,QAAQ,GAAGC,eAAiC,EAAA;;IAEhD,CAAA,IAAI,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC;;IAEnD;IACA;IACA;IACA,CAAc,gBAAA,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE;OACzD,OAAO,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;MACzC;;;;;;;;;;KCVD,IAAI,WAAW,GAAGD,kBAAmC,EAAA;KACrD,IAAI,MAAM,GAAGC,qBAAwC,EAAA;;IAErD,CAAA,IAAI,iBAAiB,GAAG,QAAQ,CAAC,SAAS;IAC1C;IACA,CAAA,IAAI,aAAa,GAAG,WAAW,IAAI,MAAM,CAAC,wBAAwB;;IAElE,CAAA,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC9C;IACA,CAAA,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,SAAS,GAAG,eAAe,EAAE,IAAI,KAAK,WAAW;IAClF,CAAA,IAAI,YAAY,GAAG,MAAM,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,aAAa,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;;IAErH,CAAA,YAAc,GAAG;OACf,MAAM,EAAE,MAAM;OACd,MAAM,EAAE,MAAM;IAChB,GAAE,YAAY,EAAE;MACf;;;;;;;;;;;;IChBD,CAAA,MAAc,GAAG,KAAK;;;;;;;;;;KCAtB,IAAI,UAAU,GAAGD,iBAAmC,EAAA;;IAEpD;IACA,CAAA,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc;;IAE1C,CAAA,oBAAc,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;IACvC,GAAE,IAAI;IACN,KAAI,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC,OAAO,KAAK,EAAE;IAClB,KAAI,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;QACxB,CAAC,OAAO,KAAK;MACf;;;;;;;;;KCXD,IAAI,OAAO,GAAGA,aAA+B,EAAA;KAC7C,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,oBAAoB,GAAGC,2BAA8C,EAAA;;KAEzE,IAAI,MAAM,GAAG,oBAAoB;IACjC,CAAA,IAAI,KAAK,GAAGC,WAAc,CAAA,OAAA,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;;IAEnF,CAAA,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;OAC7C,OAAO,EAAE,QAAQ;IACnB,GAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ;OACjC,SAAS,EAAE,2CAA2C;OACtD,OAAO,EAAE,0DAA0D;IACrE,GAAE,MAAM,EAAE;IACV,EAAC,CAAC;;;;;;;;;;KCbF,IAAI,WAAW,GAAGH,0BAA6C,EAAA;KAC/D,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,KAAK,GAAGC,kBAAoC,EAAA;;IAEhD,CAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;;IAErD;IACA,CAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;IACtC,GAAE,KAAK,CAAC,aAAa,GAAG,UAAU,EAAE,EAAE;IACtC,KAAI,OAAO,gBAAgB,CAAC,EAAE,CAAC;QAC5B;IACH;;IAEA,CAAc,aAAA,GAAG,KAAK,CAAC,aAAa;;;;;;;;;;KCbpC,IAAI,UAAU,GAAGF,iBAAmC,EAAA;KACpD,IAAI,UAAU,GAAGC,iBAAmC,EAAA;;IAEpD,CAAA,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO;;IAEhC,CAAA,qBAAc,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;KCL3E,IAAI,UAAU,GAAGD,iBAAmC,EAAA;;IAEpD,CAAc,QAAA,GAAG,UAAU,EAAE,EAAE;IAC/B,GAAE,OAAO,OAAO,EAAE,IAAI,QAAQ,GAAG,EAAE,KAAK,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC;MAC5D;;;;;;;;;;;;KCJD,IAAI,UAAU,GAAGA,iBAAmC,EAAA;KACpD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;;IAEhD,CAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ;IAClC;IACA,CAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;;IAEnE,CAAc,qBAAA,GAAG,UAAU,EAAE,EAAE;OAC7B,OAAO,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;MAChD;;;;;;;;;;KCTD,IAAI,WAAW,GAAGD,kBAAmC,EAAA;KACrD,IAAI,KAAK,GAAGC,YAA6B,EAAA;KACzC,IAAI,aAAa,GAAGC,4BAA+C,EAAA;;IAEnE;IACA,CAAA,YAAc,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY;IACpD;OACE,OAAO,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;IAC1D,KAAI,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAChC,IAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACZ,EAAC,CAAC;;;;;;;;;;KCVF,IAAI,WAAW,GAAGF,kBAAmC,EAAA;KACrD,IAAI,KAAK,GAAGC,YAA6B,EAAA;;IAEzC;IACA;IACA,CAAA,oBAAc,GAAG,WAAW,IAAI,KAAK,CAAC,YAAY;IAClD;OACE,OAAO,MAAM,CAAC,cAAc,CAAC,YAAY,eAAe,EAAE,WAAW,EAAE;SACrE,KAAK,EAAE,EAAE;IACb,KAAI,QAAQ,EAAE;IACd,IAAG,CAAC,CAAC,SAAS,KAAK,EAAE;IACrB,EAAC,CAAC;;;;;;;;;;KCXF,IAAI,QAAQ,GAAGD,eAAiC,EAAA;;KAEhD,IAAI,OAAO,GAAG,MAAM;KACpB,IAAI,UAAU,GAAG,SAAS;;IAE1B;IACA,CAAc,QAAA,GAAG,UAAU,QAAQ,EAAE;IACrC,GAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ;OACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC;MAC9D;;;;;;;;;;KCTD,IAAI,WAAW,GAAGA,yBAA4C,EAAA;;IAE9D,CAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI;IAClC;IACA,CAAc,YAAA,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY;OAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;MACnC;;;;;;;;;;KCND,IAAI,UAAU,GAAGA,iBAAmC,EAAA;KACpD,IAAI,UAAU,GAAGC,iBAAmC,EAAA;;IAEpD,CAAA,IAAI,SAAS,GAAG,UAAU,QAAQ,EAAE;OAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,SAAS;MACnD;;IAED,CAAA,UAAc,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;OAC5C,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;MACxH;;;;;;;;;;KCTD,IAAI,WAAW,GAAGD,0BAA6C,EAAA;;IAE/D,CAAA,mBAAc,GAAG,WAAW,CAAC,EAAE,CAAC,aAAa,CAAC;;;;;;;;;;KCF9C,IAAI,UAAU,GAAGA,iBAAmC,EAAA;;IAEpD,CAAA,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS;IACpC,CAAA,IAAI,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC,SAAS;;IAEhD,CAAc,oBAAA,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;;;;;;;;;;KCLnD,IAAI,UAAU,GAAGA,iBAAmC,EAAA;KACpD,IAAI,SAAS,GAAGC,2BAA8C,EAAA;;IAE9D,CAAA,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO;IAChC,CAAA,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI;IAC1B,CAAA,IAAI,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO;IAClE,CAAA,IAAI,EAAE,GAAG,QAAQ,IAAI,QAAQ,CAAC,EAAE;KAChC,IAAI,KAAK,EAAE,OAAO;;IAElB,CAAA,IAAI,EAAE,EAAE;IACR,GAAE,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;IACvB;IACA;IACA,GAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE;;IAEA;IACA;IACA,CAAA,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE;IAC3B,GAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;OACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;IAChC,KAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC;SACxC,IAAI,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC;IACA;;IAEA,CAAA,oBAAc,GAAG,OAAO;;;;;;;;;;IC1BxB;KACA,IAAI,UAAU,GAAGD,2BAA8C,EAAA;KAC/D,IAAI,KAAK,GAAGC,YAA6B,EAAA;KACzC,IAAI,UAAU,GAAGC,iBAAmC,EAAA;;IAEpD,CAAA,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM;;IAE/B;IACA,CAAc,0BAAA,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,YAAY;IACtE,GAAE,IAAI,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;IACzC;IACA;IACA;IACA;IACA,GAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC;IAChE;SACI,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,IAAI,UAAU,GAAG,EAAE;IACjD,EAAC,CAAC;;;;;;;;;;ICjBF;KACA,IAAI,aAAa,GAAGF,iCAAoD,EAAA;;IAExE,CAAA,cAAc,GAAG,aAAa;OAC5B,CAAC,MAAM,CAAC,IAAI;IACd,GAAE,OAAO,MAAM,CAAC,QAAQ,IAAI,QAAQ;;;;;;;;;;KCLpC,IAAI,UAAU,GAAGA,iBAAoC,EAAA;KACrD,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,aAAa,GAAGC,0BAA8C,EAAA;KAClE,IAAI,iBAAiB,GAAGE,qBAAyC,EAAA;;KAEjE,IAAI,OAAO,GAAG,MAAM;;IAEpB,CAAA,QAAc,GAAG,iBAAiB,GAAG,UAAU,EAAE,EAAE;IACnD,GAAE,OAAO,OAAO,EAAE,IAAI,QAAQ;MAC7B,GAAG,UAAU,EAAE,EAAE;IAClB,GAAE,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;IACpC,GAAE,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;MAC5E;;;;;;;;;;KCZD,IAAI,OAAO,GAAG,MAAM;;IAEpB,CAAc,WAAA,GAAG,UAAU,QAAQ,EAAE;IACrC,GAAE,IAAI;IACN,KAAI,OAAO,OAAO,CAAC,QAAQ,CAAC;QACzB,CAAC,OAAO,KAAK,EAAE;IAClB,KAAI,OAAO,QAAQ;IACnB;MACC;;;;;;;;;;KCRD,IAAI,UAAU,GAAGJ,iBAAmC,EAAA;KACpD,IAAI,WAAW,GAAGC,kBAAqC,EAAA;;KAEvD,IAAI,UAAU,GAAG,SAAS;;IAE1B;IACA,CAAc,SAAA,GAAG,UAAU,QAAQ,EAAE;IACrC,GAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ;OACzC,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,oBAAoB,CAAC;MACnE;;;;;;;;;;KCTD,IAAI,SAAS,GAAGD,gBAAkC,EAAA;KAClD,IAAI,iBAAiB,GAAGC,wBAA4C,EAAA;;IAEpE;IACA;IACA,CAAA,SAAc,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;IACjC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;OACf,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;MAC7D;;;;;;;;;;KCRD,IAAI,IAAI,GAAGD,mBAAqC,EAAA;KAChD,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;;KAEhD,IAAI,UAAU,GAAG,SAAS;;IAE1B;IACA;IACA,CAAA,mBAAc,GAAG,UAAU,KAAK,EAAE,IAAI,EAAE;OACtC,IAAI,EAAE,EAAE,GAAG;IACb,GAAE,IAAI,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG;OACxG,IAAI,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG;IACpF,GAAE,IAAI,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG;IAC1G,GAAE,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC;MAChE;;;;;;;;;;KCdD,IAAI,KAAK,GAAGF,kBAAoC,EAAA;;IAEhD,CAAA,MAAc,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;IACvC,GAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;MAChD;;;;;;;;;;KCJD,IAAI,WAAW,GAAGA,0BAA6C,EAAA;;KAE/D,IAAI,EAAE,GAAG,CAAC;IACV,CAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;IAC3B,CAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;;IAExC,CAAc,GAAA,GAAG,UAAU,GAAG,EAAE;OAC9B,OAAO,SAAS,IAAI,GAAG,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC;MACxF;;;;;;;;;;KCRD,IAAI,UAAU,GAAGA,iBAAmC,EAAA;KACpD,IAAI,MAAM,GAAGC,aAA8B,EAAA;KAC3C,IAAI,MAAM,GAAGC,qBAAwC,EAAA;KACrD,IAAI,GAAG,GAAGE,UAA2B,EAAA;KACrC,IAAI,aAAa,GAAGC,iCAAoD,EAAA;KACxE,IAAI,iBAAiB,GAAGC,qBAAyC,EAAA;;IAEjE,CAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;IAC9B,CAAA,IAAI,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,CAAA,IAAI,qBAAqB,GAAG,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,IAAI,GAAG;;IAE/G,CAAc,eAAA,GAAG,UAAU,IAAI,EAAE;OAC/B,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE;SACxC,qBAAqB,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI;aAC9D,MAAM,CAAC,IAAI;IACnB,SAAQ,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC;IAC/C,IAAG,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAAC;MACrC;;;;;;;;;;KCjBD,IAAI,IAAI,GAAGN,mBAAqC,EAAA;KAChD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;KAChD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;KAChD,IAAI,SAAS,GAAGE,gBAAkC,EAAA;KAClD,IAAI,mBAAmB,GAAGC,0BAA6C,EAAA;KACvE,IAAI,eAAe,GAAGC,sBAAyC,EAAA;;KAE/D,IAAI,UAAU,GAAG,SAAS;IAC1B,CAAA,IAAI,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC;;IAEjD;IACA;IACA,CAAA,WAAc,GAAG,UAAU,KAAK,EAAE,IAAI,EAAE;IACxC,GAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;OACrD,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IACnD,GAAE,IAAI,MAAM;OACV,IAAI,YAAY,EAAE;IACpB,KAAI,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,SAAS;SACxC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5C,KAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM;IAC5D,KAAI,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC;IACnE;IACA,GAAE,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,QAAQ;IACzC,GAAE,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC;MACxC;;;;;;;;;;KCxBD,IAAI,WAAW,GAAGN,kBAAoC,EAAA;KACtD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;;IAEhD;IACA;IACA,CAAc,aAAA,GAAG,UAAU,QAAQ,EAAE;OACnC,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;OACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;MACtC;;;;;;;;;KCRD,IAAI,WAAW,GAAGD,kBAAmC,EAAA;KACrD,IAAI,cAAc,GAAGC,mBAAsC,EAAA;KAC3D,IAAI,uBAAuB,GAAGC,2BAA+C,EAAA;KAC7E,IAAI,QAAQ,GAAGE,eAAiC,EAAA;KAChD,IAAI,aAAa,GAAGC,oBAAuC,EAAA;;KAE3D,IAAI,UAAU,GAAG,SAAS;IAC1B;IACA,CAAA,IAAI,eAAe,GAAG,MAAM,CAAC,cAAc;IAC3C;IACA,CAAA,IAAI,yBAAyB,GAAG,MAAM,CAAC,wBAAwB;KAC/D,IAAI,UAAU,GAAG,YAAY;KAC7B,IAAI,YAAY,GAAG,cAAc;KACjC,IAAI,QAAQ,GAAG,UAAU;;IAEzB;IACA;IACA,CAAA,oBAAA,CAAA,CAAS,GAAG,WAAW,GAAG,uBAAuB,GAAG,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;OAC5F,QAAQ,CAAC,CAAC,CAAC;IACb,GAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;OACpB,QAAQ,CAAC,UAAU,CAAC;OACpB,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,WAAW,IAAI,OAAO,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;SAC5H,IAAI,OAAO,GAAG,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,KAAI,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IACtC,OAAM,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;IAC7B,OAAM,UAAU,GAAG;IACnB,SAAQ,YAAY,EAAE,YAAY,IAAI,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IACnG,SAAQ,UAAU,EAAE,UAAU,IAAI,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAC3F,SAAQ,QAAQ,EAAE;YACX;IACP;QACG,CAAC,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;MAC3C,GAAG,eAAe,GAAG,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;OAC9D,QAAQ,CAAC,CAAC,CAAC;IACb,GAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;OACpB,QAAQ,CAAC,UAAU,CAAC;OACpB,IAAI,cAAc,EAAE,IAAI;SACtB,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;QACzC,CAAC,OAAO,KAAK,EAAE;IAClB,GAAE,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC;IACjG,GAAE,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;IACpD,GAAE,OAAO,CAAC;MACT;;;;;;;;;;IC1CD,CAAA,wBAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE;IAC1C,GAAE,OAAO;IACT,KAAI,UAAU,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7B,KAAI,YAAY,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IAC/B,KAAI,QAAQ,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IAC3B,KAAI,KAAK,EAAE;QACR;MACF;;;;;;;;;;KCPD,IAAI,WAAW,GAAGL,kBAAmC,EAAA;KACrD,IAAI,oBAAoB,GAAGC,2BAA8C,EAAA;KACzE,IAAI,wBAAwB,GAAGC,+BAAkD,EAAA;;IAEjF,CAAc,2BAAA,GAAG,WAAW,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;IAC7D,GAAE,OAAO,oBAAoB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,wBAAwB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChF,EAAC,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;IAClC,GAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;IACrB,GAAE,OAAO,MAAM;MACd;;;;;;;;;;KCTD,IAAI,MAAM,GAAGF,aAA8B,EAAA;KAC3C,IAAI,GAAG,GAAGC,UAA2B,EAAA;;IAErC,CAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;;IAEzB,CAAc,SAAA,GAAG,UAAU,GAAG,EAAE;IAChC,GAAE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;MAC3C;;;;;;;;;;ICPD,CAAA,UAAc,GAAG,EAAE;;;;;;;;;;KCAnB,IAAI,eAAe,GAAGD,4BAAgD,EAAA;KACtE,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,QAAQ,GAAGC,eAAiC,EAAA;KAChD,IAAI,2BAA2B,GAAGE,kCAAsD,EAAA;KACxF,IAAI,MAAM,GAAGC,qBAAwC,EAAA;KACrD,IAAI,MAAM,GAAGC,kBAAoC,EAAA;KACjD,IAAI,SAAS,GAAGC,gBAAkC,EAAA;KAClD,IAAI,UAAU,GAAGC,iBAAmC,EAAA;;KAEpD,IAAI,0BAA0B,GAAG,4BAA4B;IAC7D,CAAA,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS;IACpC,CAAA,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO;IAChC,CAAA,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG;;IAEjB,CAAA,IAAI,OAAO,GAAG,UAAU,EAAE,EAAE;IAC5B,GAAE,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;MACvC;;IAED,CAAA,IAAI,SAAS,GAAG,UAAU,IAAI,EAAE;OAC9B,OAAO,UAAU,EAAE,EAAE;IACvB,KAAI,IAAI,KAAK;IACb,KAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE;WACpD,MAAM,IAAI,SAAS,CAAC,yBAAyB,GAAG,IAAI,GAAG,WAAW,CAAC;UACpE,CAAC,OAAO,KAAK;QACf;MACF;;IAED,CAAA,IAAI,eAAe,IAAI,MAAM,CAAC,KAAK,EAAE;IACrC,GAAE,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;IAC5D;IACA,GAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;IACvB,GAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;IACvB,GAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;IACvB;IACA,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE;IAChC,KAAI,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC;IACtE,KAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;IACxB,KAAI,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;IAC3B,KAAI,OAAO,QAAQ;QAChB;IACH,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE;SAClB,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QAC3B;IACH,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE;IACtB,KAAI,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB;IACH,EAAC,MAAM;IACP,GAAE,IAAI,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;IAChC,GAAE,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI;IAC1B,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE;IAChC,KAAI,IAAI,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC;IAC1E,KAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;IACxB,KAAI,2BAA2B,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC;IACpD,KAAI,OAAO,QAAQ;QAChB;IACH,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE;IACtB,KAAI,OAAO,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1C;IACH,GAAE,GAAG,GAAG,UAAU,EAAE,EAAE;IACtB,KAAI,OAAO,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;QACzB;IACH;;IAEA,CAAA,aAAc,GAAG;OACf,GAAG,EAAE,GAAG;OACR,GAAG,EAAE,GAAG;OACR,GAAG,EAAE,GAAG;OACR,OAAO,EAAE,OAAO;IAClB,GAAE,SAAS,EAAE;MACZ;;;;;;;;;KCrED,IAAI,WAAW,GAAGR,0BAA6C,EAAA;KAC/D,IAAI,KAAK,GAAGC,YAA6B,EAAA;KACzC,IAAI,UAAU,GAAGC,iBAAmC,EAAA;KACpD,IAAI,MAAM,GAAGE,qBAAwC,EAAA;KACrD,IAAI,WAAW,GAAGC,kBAAmC,EAAA;IACrD,CAAA,IAAI,0BAA0B,GAAGC,mBAAqC,EAAA,CAAC,YAAY;KACnF,IAAI,aAAa,GAAGC,oBAAsC,EAAA;KAC1D,IAAI,mBAAmB,GAAGC,oBAAsC,EAAA;;IAEhE,CAAA,IAAI,oBAAoB,GAAG,mBAAmB,CAAC,OAAO;IACtD,CAAA,IAAI,gBAAgB,GAAG,mBAAmB,CAAC,GAAG;KAC9C,IAAI,OAAO,GAAG,MAAM;IACpB;IACA,CAAA,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc;IAC1C,CAAA,IAAI,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;IACvC,CAAA,IAAI,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC;IACrC,CAAA,IAAI,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC;;IAE/B,CAAA,IAAI,mBAAmB,GAAG,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY;IAC5D,GAAE,OAAO,cAAc,CAAC,YAAY,eAAe,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;IACzF,EAAC,CAAC;;KAEF,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;;KAE7C,IAAIC,aAAW,GAAGC,WAAA,CAAA,OAAc,GAAG,UAAU,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;IACnE,GAAE,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;IACtD,KAAI,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,GAAG,GAAG;IAC5E;OACE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;OACnD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;IACrD,GAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,0BAA0B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;IACrF,KAAI,IAAI,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACvF,UAAS,KAAK,CAAC,IAAI,GAAG,IAAI;IAC1B;IACA,GAAE,IAAI,mBAAmB,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE;IACpG,KAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7D;IACA,GAAE,IAAI;IACN,KAAI,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE;IAC1E,OAAM,IAAI,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC9E;UACK,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS;QACxD,CAAC,OAAO,KAAK,EAAE;IAClB,GAAE,IAAI,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC;OACvC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;IAChC,KAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACnE,CAAC,OAAO,KAAK;MACf;;IAED;IACA;KACA,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAGD,aAAW,CAAC,SAAS,QAAQ,GAAG;IAC9D,GAAE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC;MAChF,EAAE,UAAU,CAAC;;;;;;;;;;KCrDd,IAAI,WAAW,GAAGT,kBAAqC,EAAA;KACvD,IAAI,cAAc,GAAGC,2BAA8C,EAAA;;IAEnE,CAAA,qBAAc,GAAG,UAAU,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;IACrD,GAAE,IAAI,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,GAAE,IAAI,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;OACvE,OAAO,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC;MAClD;;;;;;;;;;KCPD,IAAI,QAAQ,GAAGD,eAAiC,EAAA;;IAEhD;IACA;IACA,CAAA,WAAc,GAAG,YAAY;IAC7B,GAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;OACzB,IAAI,MAAM,GAAG,EAAE;IACjB,GAAE,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;IACpC,GAAE,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG;IAChC,GAAE,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;IACpC,GAAE,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG;IACnC,GAAE,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG;IAChC,GAAE,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG;IACjC,GAAE,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,GAAG;IACrC,GAAE,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG;IAChC,GAAE,OAAO,MAAM;MACd;;;;;;;;;KChBD,IAAI,UAAU,GAAGA,iBAAmC,EAAA;KACpD,IAAI,WAAW,GAAGC,kBAAmC,EAAA;KACrD,IAAI,qBAAqB,GAAGC,4BAAgD,EAAA;KAC5E,IAAI,WAAW,GAAGE,kBAAoC,EAAA;KACtD,IAAI,KAAK,GAAGC,YAA6B,EAAA;;IAEzC;IACA,CAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;IAC9B,CAAA,IAAI,eAAe,GAAG,MAAM,CAAC,SAAS;;IAEtC,CAAA,IAAI,MAAM,GAAG,WAAW,IAAI,KAAK,CAAC,YAAY;OAC5C,IAAI,eAAe,GAAG,IAAI;IAC5B,GAAE,IAAI;IACN,KAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,CAAC,OAAO,KAAK,EAAE;SACd,eAAe,GAAG,KAAK;IAC3B;;OAEE,IAAI,CAAC,GAAG,EAAE;IACZ;OACE,IAAI,KAAK,GAAG,EAAE;IAChB,GAAE,IAAI,QAAQ,GAAG,eAAe,GAAG,QAAQ,GAAG,OAAO;;IAErD,GAAE,IAAI,SAAS,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE;IACtC;SACI,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY;WAC/C,KAAK,IAAI,GAAG;IAClB,OAAM,OAAO,IAAI;IACjB,MAAK,EAAE,CAAC;QACL;;OAED,IAAI,KAAK,GAAG;SACV,MAAM,EAAE,GAAG;SACX,MAAM,EAAE,GAAG;SACX,UAAU,EAAE,GAAG;SACf,SAAS,EAAE,GAAG;IAClB,KAAI,MAAM,EAAE;QACT;;IAEH,GAAE,IAAI,eAAe,EAAE,KAAK,CAAC,UAAU,GAAG,GAAG;;IAE7C,GAAE,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;;IAEnD;IACA,GAAE,IAAI,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;IAEpF,GAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ;IAClD,EAAC,CAAC;;IAEF;IACA;IACA,CAAA,IAAI,MAAM,EAAE,qBAAqB,CAAC,eAAe,EAAE,OAAO,EAAE;OAC1D,YAAY,EAAE,IAAI;IACpB,GAAE,GAAG,EAAE;IACP,EAAC,CAAC;;;;;;ICfF,MAAMM,YAAY,GAA2B;IAC3CC,EAAAA,gBAAgB,EAAE,uCAAuC;IACzDC,EAAAA,cAAc,EAAE,iBAAiB;IACjCC,EAAAA,MAAM,EAAE,8BAA8B;IACtCC,EAAAA,KAAK,EAAE,oIAAoI;IAAE;IAC7IC,EAAAA,WAAW,EAAE,uCAAuC;IACpDC,EAAAA,YAAY,EAAE,oBAAoB;IAClCC,EAAAA,WAAW,EAAE,uBAAuB;IACpCC,EAAAA,WAAW,EAAE,+CAA+C;IAC5DC,EAAAA,MAAM,EAAE,+BAA+B;IACvCC,EAAAA,eAAe,EAAE,kBAAkB;IACnCC,EAAAA,SAAS,EAAE,qBAAqB;IAChCC,EAAAA,aAAa,EAAE,gDAAgD;IAC/DC,EAAAA,YAAY,EAAE,qDAAqD;IACnEC,EAAAA,QAAQ,EAAE;KACX;IAED;IACO,MAAMC,kBAAkB,GAAG,IAAIC,MAAM,CAAC,qpDAAqpD,CAAC;IAE5rD,MAAMC,mBAAmB,GAAG,IAAID,MAAM,CAAC,qpDAAqpD,CAAC;IAEpsD;;IAEG;IACI,MAAME,WAAW,GAAgC;IACtDC,EAAAA,IAAI,EAAE;IACJC,IAAAA,MAAM,EAAE,mCAAmC;IAC3CC,IAAAA,WAAW,EAAE;OACd;IACDC,EAAAA,IAAI,EAAE;IACJF,IAAAA,MAAM,EAAE,oCAAoC;IAC5CC,IAAAA,WAAW,EAAE;OACd;IACDE,EAAAA,IAAI,EAAE;IACJH,IAAAA,MAAM,EAAE,qCAAqC;IAC7CC,IAAAA,WAAW,EAAE;OACd;IACDG,EAAAA,IAAI,EAAE;IACJJ,IAAAA,MAAM,EAAE,sCAAsC;IAC9CC,IAAAA,WAAW,EAAE;OACd;IACDI,EAAAA,IAAI,EAAE;IACJL,IAAAA,MAAM,EAAE,uCAAuC;IAC/CC,IAAAA,WAAW,EAAE;OACd;IACDK,EAAAA,IAAI,EAAE;IACJN,IAAAA,MAAM,EAAE,wCAAwC;IAChDC,IAAAA,WAAW,EAAE;OACd;IACDM,EAAAA,YAAY,EAAE;IACZP,IAAAA,MAAM,EAAE,qBAAqB;IAC7BC,IAAAA,WAAW,EAAE;OACd;IACDO,EAAAA,uBAAuB,EAAE;IACvBR,IAAAA,MAAM,EAAE,yCAAyC;IACjDC,IAAAA,WAAW,EAAE;OACd;IACDQ,EAAAA,oBAAoB,EAAE;IACpBT,IAAAA,MAAM,EAAE,sCAAsC;IAC9CC,IAAAA,WAAW,EAAE;OACd;IACDS,EAAAA,wBAAwB,EAAE;IACxBV,IAAAA,MAAM,EAAE,8BAA8B;IACtCC,IAAAA,WAAW,EAAE;OACd;IACDU,EAAAA,qBAAqB,EAAE;IACrBX,IAAAA,MAAM,EAAE,8BAA8B;IACtCC,IAAAA,WAAW,EAAE;OACd;IACDW,EAAAA,WAAW,EAAE;IACXZ,IAAAA,MAAM,EAAE,YAAY;IACpBC,IAAAA,WAAW,EAAE;OACd;IACDY,EAAAA,gBAAgB,EAAE;IAChBb,IAAAA,MAAM,EAAE,eAAe;IACvBC,IAAAA,WAAW,EAAE;OACd;IACDa,EAAAA,gBAAgB,EAAE;IAChBd,IAAAA,MAAM,EAAE,eAAe;IACvBC,IAAAA,WAAW,EAAE;OACd;IACDc,EAAAA,IAAI,EAAE;IACJf,IAAAA,MAAM,EAAE,yFAAyF;IACjGC,IAAAA,WAAW,EAAE;OACd;IACDe,EAAAA,IAAI,EAAE;IACJhB,IAAAA,MAAM,EAAE,2BAA2B;IACnCC,IAAAA,WAAW,EAAE;OACd;IACDgB,EAAAA,IAAI,EAAE;IACJjB,IAAAA,MAAM,EAAE,iCAAiC;IACzCC,IAAAA,WAAW,EAAE;OACd;IACD;IACAiB,EAAAA,cAAc,EAAE;IACdlB,IAAAA,MAAM,EAAE,iBAAiB;IACzBC,IAAAA,WAAW,EAAE;OACd;IACDkB,EAAAA,yBAAyB,EAAE;IACzB;IACAnB,IAAAA,MAAM,EAAE,4KAA4K;IACpLC,IAAAA,WAAW,EAAE,0QAA0Q;QACvRmB,gBAAgB,EAAE,CAAC;IACpB;KACF;IAED;;IAEG;IACI,MAAMC,gBAAgB,GAAoB,CAC/C;IAAEC,EAAAA,KAAK,EAAE,yCAAyC;IAAEC,EAAAA,GAAG,EAAE,mCAAmC;IAAEC,EAAAA,aAAa,EAAE;IAAM,CAAA,EACnH;IAAEF,EAAAA,KAAK,EAAE,aAAa;IAAEC,EAAAA,GAAG,EAAE,KAAK;IAAEC,EAAAA,aAAa,EAAE;IAAM,CAAA,EACzD;IAAEF,EAAAA,KAAK,EAAE,YAAY;IAAEC,EAAAA,GAAG,EAAE,KAAK;IAAEC,EAAAA,aAAa,EAAE;IAAM,CAAA,EACxD;IAAEF,EAAAA,KAAK,EAAE,gBAAgB;IAAEC,EAAAA,GAAG,EAAE,GAAG;IAAEC,EAAAA,aAAa,EAAG;IAAK,CAAA,EAC1D;IAAEF,EAAAA,KAAK,EAAE,oBAAoB;IAAEC,EAAAA,GAAG,EAAE,OAAO;IAAEC,EAAAA,aAAa,EAAG;IAAK,CAAA,EAClE;IAAEF,EAAAA,KAAK,EAAE,6CAA6C;IAAEC,EAAAA,GAAG,EAAE,KAAK;IAAEC,EAAAA,aAAa,EAAE;IAAK,CAAA,EACxF;IAAEF,EAAAA,KAAK,EAAE,yCAAyC;IAAEC,EAAAA,GAAG,EAAE,KAAK;IAAEC,EAAAA,aAAa,EAAE;IAAM,CAAA,CACtF;IAED;;;;IAIG;IACI,MAAMC,aAAa,GAAgC;IACxDC,EAAAA,MAAM,EAAG;IACP1B,IAAAA,MAAM,EAAE,uBAAuB;IAC/BC,IAAAA,WAAW,EAAG;OACf;IACDjH,EAAAA,IAAI,EAAG;IACLgH,IAAAA,MAAM,EAAE,qCAAqC;IAC7CC,IAAAA,WAAW,EAAG;OACf;IACD0B,EAAAA,QAAQ,EAAG;IACT3B,IAAAA,MAAM,EAAE,oCAAoC;IAC5CC,IAAAA,WAAW,EAAE;OACd;IACD2B,EAAAA,IAAI,EAAG;IACL5B,IAAAA,MAAM,EAAE,kGAAkG;IAC1GC,IAAAA,WAAW,EAAE;OACd;IACD4B,EAAAA,QAAQ,EAAG;IACT7B,IAAAA,MAAM,EAAE,KAAK;IACbC,IAAAA,WAAW,EAAE;OACd;IACD6B,EAAAA,SAAS,EAAG;IACV9B,IAAAA,MAAM,EAAE,MAAM;IACdC,IAAAA,WAAW,EAAG;OACf;IACD8B,EAAAA,SAAS,EAAG;IACV/B,IAAAA,MAAM,EAAE,0BAA0B;IAClCC,IAAAA,WAAW,EAAE,EAAE;IACfmB,IAAAA,gBAAgB,EAAE;OACnB;IACDY,EAAAA,OAAO,EAAG;IACRhC,IAAAA,MAAM,EAAE,0BAA0B;IAClCC,IAAAA,WAAW,EAAE;IACd;KACF;IAED;IACA,MAAMgC,iBAAiB,GAAG,IAAIrC,MAAM,CAACpD,MAAM,CAACE,IAAI,CAACkC,YAAY,CAAC,CAACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzE;IACA,MAAM6E,WAAW,GAAG,CAAC,GAAG1F,MAAM,CAACE,IAAI,CAAC+E,aAAa,CAAC,CAAC;IACnD,KAAK,IAAIU,IAAI,IAAID,WAAW,EAAE;MAC5B,IAAIE,EAAE,GAAGX,aAAa,CAACU,IAAI,CAAC,CAACnC,MAAM,CAACqC,MAAM;IAC1C;IACA,EAAA,OAAOD,EAAE,CAACnF,KAAK,CAACgF,iBAAiB,CAAC,EAAE;QAClCG,EAAE,GAAGA,EAAE,CAACE,OAAO,CAACL,iBAAiB,EAAGM,MAAM;IAAO,MAAA,OAAO3D,YAAY,CAAC2D,MAAM,CAAC,CAACF,MAAM;IAAE,KAAC,CAAC;IACzF;IACAZ,EAAAA,aAAa,CAACU,IAAI,CAAC,CAACnC,MAAM,GAAG,IAAIJ,MAAM,CAACwC,EAAE,EAAEX,aAAa,CAACU,IAAI,CAAC,CAACnC,MAAM,CAACwC,KAAK,CAAC;IAC/E;IAEA;IACA,KAAK,IAAIL,IAAI,IAAId,gBAAgB,EAAE;IACjC,EAAA,IAAIe,EAAE,GAAGD,IAAI,CAACb,KAAK,CAACe,MAAM;IAC1B;IACA,EAAA,OAAOD,EAAE,CAACnF,KAAK,CAACgF,iBAAiB,CAAC,EAAE;QAClCG,EAAE,GAAGA,EAAE,CAACE,OAAO,CAACL,iBAAiB,EAAGM,MAAM;IAAO,MAAA,OAAO3D,YAAY,CAAC2D,MAAM,CAAC,CAACF,MAAM;IAAE,KAAC,CAAC;IACzF;IACAF,EAAAA,IAAI,CAACb,KAAK,GAAG,IAAI1B,MAAM,CAACwC,EAAE,EAAED,IAAI,CAACb,KAAK,CAACkB,KAAK,CAAC;IAC/C;IAEA;;;;;IAKG;IACa,SAAAC,yBAAyBA,GAA8C;IAAA,EAAA,IAA7CC,WAAA,GAAAC,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAA2C,EAAE;IACrF,EAAA,MAAMC,MAAM,GAAG;QAAE,GAAGnB;OAAe;IAEnC;IACA,EAAA,KAAK,MAAM,CAACoB,QAAQ,EAAEV,IAAI,CAAC,IAAI3F,MAAM,CAACsG,OAAO,CAACJ,WAAW,CAAC,EAAE;IAC1D;IACA,IAAA,MAAMK,aAAa,GAAG;UAAE,GAAGZ;SAAM;IAEjC;IACA,IAAA,IAAIa,YAAY,GAAGb,IAAI,CAACnC,MAAM,CAACqC,MAAM;IACrC,IAAA,MAAMJ,iBAAiB,GAAG,IAAIrC,MAAM,CAACpD,MAAM,CAACE,IAAI,CAACkC,YAAY,CAAC,CAACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzE;IACA,IAAA,OAAO2F,YAAY,CAAC/F,KAAK,CAACgF,iBAAiB,CAAC,EAAE;UAC5Ce,YAAY,GAAGA,YAAY,CAACV,OAAO,CAACL,iBAAiB,EAAGhF,KAAK,IAAI;IAC/D,QAAA,OAAO2B,YAAY,CAAC3B,KAAK,CAAC,CAACoF,MAAM;IACnC,OAAC,CAAC;IACJ;IAEAU,IAAAA,aAAa,CAAC/C,MAAM,GAAG,IAAIJ,MAAM,CAACoD,YAAY,EAAEb,IAAI,CAACnC,MAAM,CAACwC,KAAK,CAAC;IAClEI,IAAAA,MAAM,CAACC,QAAQ,CAAC,GAAGE,aAAa;IAClC;IAEA,EAAA,OAAOH,MAAM;IACf;IAEA;;;;IAIG;IACG,SAAUK,UAAUA,CAACV,MAAc,EAAA;MACvC,OAAO,CAACA,MAAM,GAAGA,MAAM,GAAG,EAAE,EACzBD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CACtBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAC1B;IAEA;;;;;;;;;;;IAWG;IACI,MAAMjH,QAAQ,GAA4B;IAC/C;IACAvC,EAAAA,IAAI,EAAE;IACJoK,IAAAA,IAAI,EAAE,QAAQ;IACd/G,IAAAA,SAAS,EAAE,UAAU;IACrBgH,IAAAA,GAAG,EAAE;IAACC,MAAAA,GAAG,EAAE,IAAI;IAAEC,MAAAA,IAAI,EAAE;SAAK;IAC5BC,IAAAA,KAAK,EAAE;IAACC,MAAAA,UAAU,EAAE,cAAc;IAAEC,MAAAA,WAAW,EAAE;IAAe;OACjE;IACDnK,EAAAA,MAAM,EAAE;IACN6J,IAAAA,IAAI,EAAE,QAAQ;IACd/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACC,MAAAA,GAAG,EAAE,GAAG;IAAEC,MAAAA,IAAI,EAAE;SAAI;IAC1BC,IAAAA,KAAK,EAAE;IAACC,MAAAA,UAAU,EAAE,WAAW;IAAEC,MAAAA,WAAW,EAAE;IAAY;OAC3D;IACDxK,EAAAA,IAAI,EAAE;IACJkK,IAAAA,IAAI,EAAE,QAAQ;IACd/G,IAAAA,SAAS,EAAE,QAAQ;IACnBgH,IAAAA,GAAG,EAAE;IAACC,MAAAA,GAAG,EAAE,GAAG;IAAEC,MAAAA,IAAI,EAAE;SAAI;IAC1BC,IAAAA,KAAK,EAAE;IAACC,MAAAA,UAAU,EAAE,KAAK;IAAEC,MAAAA,WAAW,EAAE;IAAM,KAAA;OAC/C;IACD/J,EAAAA,aAAa,EAAE;IACbyJ,IAAAA,IAAI,EAAE,QAAQ;IACd/G,IAAAA,SAAS,EAAE,iBAAiB;IAC5BgH,IAAAA,GAAG,EAAE;IAACC,MAAAA,GAAG,EAAE,IAAI;IAAEC,MAAAA,IAAI,EAAE;SAAK;IAC5BC,IAAAA,KAAK,EAAE;IAACC,MAAAA,UAAU,EAAC,KAAK;IAAEC,MAAAA,WAAW,EAAE;IAAO;OAC/C;IACDvK,EAAAA,EAAE,EAAE;IACFiK,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAO;IAC1FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,oCAAoC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC1E;IACD/G,EAAAA,EAAE,EAAE;IACFgK,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAQ;IAC3FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,qCAAqC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC3E;IACDyD,EAAAA,EAAE,EAAE;IACFR,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAS;IAC5FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,sCAAsC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC5E;IACD0D,EAAAA,EAAE,EAAE;IACFT,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAU;IAC7FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,uCAAuC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC7E;IACD2D,EAAAA,EAAE,EAAE;IACFV,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAW;IAC9FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,wCAAwC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC9E;IACD4D,EAAAA,EAAE,EAAE;IACFX,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAY;IAC/FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,yCAAyC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OAC/E;IACDvG,EAAAA,EAAE,EAAE;IACFwJ,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAO;IAC1FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,2BAA2B;IAAExD,MAAAA,WAAW,EAAE;IAAK;OACjE;IACD1G,EAAAA,EAAE,EAAE;IACF2J,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,MAAM;IACjBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAS;IAC5FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,iCAAiC;IAAExD,MAAAA,WAAW,EAAE;IAAK;OACvE;IACDpH,EAAAA,UAAU,EAAE;IACVqK,IAAAA,IAAI,EAAE,MAAM;IACZ/G,IAAAA,SAAS,EAAE,cAAc;IACzBgH,IAAAA,GAAG,EAAE;IAACM,MAAAA,OAAO,EAAE,qDAAqD;IAAExD,MAAAA,WAAW,EAAE;SAAO;IAC1FqD,IAAAA,KAAK,EAAE;IAACG,MAAAA,OAAO,EAAE,qBAAqB;IAAExD,MAAAA,WAAW,EAAE;IAAK;IAC3D;KACF;;UCtTY6D,MAAM,CAAA;IA6BjB5I,EAAAA,WAAAA,GAAmC;IAAA,IAAA,IAAvBC,4EAAqB,EAAE;QA5B5B,IAAC,CAAAC,CAAA,GAA0B,IAAI;QAC/B,IAAQ,CAAA2I,QAAA,GAA+B,IAAI;QAC3C,IAAK,CAAAC,KAAA,GAAa,EAAE;QACpB,IAAY,CAAAC,YAAA,GAAyD,EAAE;QACvE,IAAS,CAAAC,SAAA,GAAa,EAAE;QACxB,IAAY,CAAAC,YAAA,GAAsB,EAAE;QACpC,IAAgB,CAAAC,gBAAA,GAAa,EAAE;QAC/B,IAAU,CAAAC,UAAA,GAAa,EAAE;QACzB,IAAS,CAAAC,SAAA,GAAc,EAAE;QACzB,IAAgB,CAAAC,gBAAA,GAA0C,IAAI;IAC7D,IAAA,IAAmB,CAAAC,mBAAA,GAAgC,EAAE;QACrD,IAAmB,CAAAC,mBAAA,GAAgChD,aAAa;QAEjE,IAAA,CAAAiD,SAAS,GAIZ;IACFC,MAAAA,MAAM,EAAE,EAAE;IACVC,MAAAA,SAAS,EAAE,EAAE;IACbC,MAAAA,IAAI,EAAE;SACP;QAEO,IAAS,CAAAC,SAAA,GAAmB,EAAE;QAC9B,IAAS,CAAAC,SAAA,GAAmB,EAAE;QAC9B,IAAkB,CAAAC,kBAAA,GAAY,KAAK;QACnC,IAAU,CAAAC,UAAA,GAAW,GAAG;QAG9B,IAAI,CAAC7J,CAAC,GAAG,IAAI;QACb,IAAI,CAAC2I,QAAQ,GAAG,IAAI;QACpB,IAAI,CAACC,KAAK,GAAG,EAAE;QACf,IAAI,CAACC,YAAY,GAAG,EAAiB;QACrC,IAAI,CAACC,SAAS,GAAG,EAAE;QACnB,IAAI,CAACC,YAAY,GAAG,EAAE;QACtB,IAAI,CAACC,gBAAgB,GAAG,EAAE;QAC1B,IAAI,CAACC,UAAU,GAAG,EAAE;QACpB,IAAI,CAACC,SAAS,GAAG,EAAE;QACnB,IAAI,CAACC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAACC,mBAAmB,GAAGrJ,KAAK,CAACqJ,mBAAmB,IAAI,EAAE;QAC1D,IAAI,CAACC,mBAAmB,GAAGhC,yBAAyB,CAAC,IAAI,CAAC+B,mBAAmB,CAAC;QAE9E,IAAI,CAACE,SAAS,GAAG;IACfC,MAAAA,MAAM,EAAE,EAAE;IACVC,MAAAA,SAAS,EAAE,EAAE;IACbC,MAAAA,IAAI,EAAE;SACP;QAED,IAAIpJ,OAAO,GAAuB,IAAI;IACtC,IAAA,IAAI,OAAON,KAAK,CAACM,OAAO,KAAK,QAAQ,EAAE;UACrCA,OAAO,GAAGC,QAAQ,CAACC,cAAc,CAACR,KAAK,CAACM,OAAO,CAAC;IAClD,KAAC,MAAM,IAAIN,KAAK,CAACM,OAAO,EAAE;UACxBA,OAAO,GAAGN,KAAK,CAACM,OAAO;IACzB;IAEA,IAAA,IAAI,OAAON,KAAK,CAAC4I,QAAQ,KAAK,QAAQ,EAAE;UACtC,IAAI,CAACA,QAAQ,GAAGrI,QAAQ,CAACC,cAAc,CAACR,KAAK,CAAC4I,QAAQ,CAAwB;IAChF,KAAC,MAAM,IAAI5I,KAAK,CAAC4I,QAAQ,EAAE;IACzB,MAAA,IAAI,CAACA,QAAQ,GAAG5I,KAAK,CAAC4I,QAAQ;IAChC;QAEA,IAAI,IAAI,CAACA,QAAQ,EAAE;IACjB,MAAA,IAAI,CAACtI,OAAO,EAAEA,OAAO,GAAG,IAAI,CAACsI,QAAQ;IACvC;QAEA,IAAI,CAACtI,OAAO,EAAE;UACZA,OAAO,GAAGC,QAAQ,CAACwJ,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD;IACA,IAAA,IAAIzJ,OAAO,IAAIA,OAAO,CAAC0J,OAAO,KAAK,UAAU,EAAE;UAC7C,IAAI,CAACpB,QAAQ,GAAGtI,OAA8B;IAC9CA,MAAAA,OAAO,GAAG,IAAI,CAACsI,QAAQ,CAACqB,UAAyB;IACnD;QAEA,IAAI,IAAI,CAACrB,QAAQ,EAAE;IACjB,MAAA,IAAI,CAACA,QAAQ,CAACsB,KAAK,CAACC,OAAO,GAAG,MAAM;IACtC;QAEA,IAAI,CAACR,SAAS,GAAG,EAAE;QACnB,IAAI,CAACC,SAAS,GAAG,EAAE;QACnB,IAAI,CAACC,kBAAkB,GAAG,KAAK;QAC/B,IAAI,CAACC,UAAU,GAAG,GAAG;IAErB,IAAA,IAAI,CAACM,mBAAmB,CAAC9J,OAAO,EAAEN,KAAK,CAAC;QACxC,IAAI,CAACqK,UAAU,CACb,OAAOrK,KAAK,CAACsK,OAAO,KAAK,QAAQ,GAC7BtK,KAAK,CAACsK,OAAO,GACb,IAAI,CAAC1B,QAAQ,GACb,IAAI,CAACA,QAAQ,CAAC2B,KAAK,GACnB,iCAAiC,CACtC;IAED,IAAA,IAAI,CAACtK,CAAE,CAACU,gBAAgB,CAAC,SAAS,EAAGV,CAAC,IAAK,IAAI,CAACuK,iBAAiB,CAACvK,CAAC,CAAC,CAAC;IACvE;MAEA,IAAIL,OAAOA,GAAA;IACT,IAAA,OAAO,IAAI,CAAC+J,SAAS,CAAC/H,MAAM,IAAI,CAAC;IACnC;MAEA,IAAI/B,OAAOA,GAAA;IACT,IAAA,OAAO,IAAI,CAAC+J,SAAS,CAAChI,MAAM,GAAG,CAAC;IAClC;IAEQ6I,EAAAA,WAAWA,GAAA;QACjB,IAAI,IAAI,CAACZ,kBAAkB,EAAE;QAC7B,IAAI,CAACa,gBAAgB,EAAE;QACvB,IAAI,CAACd,SAAS,GAAG,EAAE;IACrB;IAEQc,EAAAA,gBAAgBA,GAAA;IACtB,IAAA,IAAI,CAACf,SAAS,CAAC9H,IAAI,CAAC;IAClByI,MAAAA,OAAO,EAAE,IAAI,CAACK,UAAU,EAAE;IAC1BlB,MAAAA,SAAS,EAAE,IAAI,CAACmB,YAAY,EAAE;IAC9BnL,MAAAA,MAAM,EAAE,IAAI,CAACmL,YAAY,CAAC,IAAI;IAC/B,KAAA,CAAC;IACF,IAAA,IAAI,IAAI,CAACjB,SAAS,CAAC/H,MAAM,GAAG,IAAI,CAACkI,UAAU,EAAE,IAAI,CAACH,SAAS,CAACkB,KAAK,EAAE;IACrE;IAEOrM,EAAAA,IAAIA,GAAA;IACT,IAAA,IAAI,IAAI,CAACmL,SAAS,CAAC/H,MAAM,GAAG,CAAC,EAAE;QAC/B,IAAI,CAACiI,kBAAkB,GAAG,IAAI;QAC9B,IAAI,CAACa,gBAAgB,EAAE;QACvB,MAAMI,OAAO,GAAG,IAAI,CAACnB,SAAS,CAACoB,GAAG,EAAG;IACrC,IAAA,IAAI,CAACnB,SAAS,CAAC/H,IAAI,CAACiJ,OAAO,CAAC;IAC5B,IAAA,MAAME,IAAI,GAAG,IAAI,CAACrB,SAAS,CAAC,IAAI,CAACA,SAAS,CAAC/H,MAAM,GAAG,CAAC,CAAC;IACtD,IAAA,IAAI,CAACyI,UAAU,CAACW,IAAI,CAACV,OAAO,CAAC;IAC7B,IAAA,IAAIU,IAAI,CAACvB,SAAS,EAAE,IAAI,CAACwB,YAAY,CAACD,IAAI,CAACvB,SAAS,EAAEuB,IAAI,CAACvL,MAAM,CAAC;IAClE,IAAA,IAAI,CAACkK,SAAS,CAACoB,GAAG,EAAE;QACpB,IAAI,CAAClB,kBAAkB,GAAG,KAAK;IACjC;IAEOxL,EAAAA,IAAIA,GAAA;IACT,IAAA,IAAI,CAAC,IAAI,CAACuL,SAAS,CAAChI,MAAM,EAAE;QAC5B,IAAI,CAACiI,kBAAkB,GAAG,IAAI;QAC9B,IAAI,CAACa,gBAAgB,EAAE;QACvB,MAAMQ,IAAI,GAAG,IAAI,CAACtB,SAAS,CAACmB,GAAG,EAAG;IAClC,IAAA,IAAI,CAACV,UAAU,CAACa,IAAI,CAACZ,OAAO,CAAC;IAC7B,IAAA,IAAIY,IAAI,CAACzB,SAAS,EAAE,IAAI,CAACwB,YAAY,CAACC,IAAI,CAACzB,SAAS,EAAEyB,IAAI,CAACzL,MAAM,CAAC;QAClE,IAAI,CAACoK,kBAAkB,GAAG,KAAK;IACjC;MAEQW,iBAAiBA,CAACvK,CAAgB,EAAA;QACxC,MAAMkL,KAAK,GAAG,sBAAsB,CAACzM,IAAI,CAACC,SAAS,CAACC,QAAQ,CAAC;QAC7D,MAAMwM,IAAI,GAAGD,KAAK,GAAGlL,CAAC,CAACoL,OAAO,GAAGpL,CAAC,CAACqL,OAAO;IAC1C,IAAA,IAAIF,IAAI,IAAI,CAACnL,CAAC,CAACsL,MAAM,EAAE;UACrB,IAAItL,CAAC,CAAC8B,GAAG,KAAK,GAAG,IAAI9B,CAAC,CAAC8B,GAAG,KAAK,GAAG,EAAE;YAClC,IAAI9B,CAAC,CAACuL,QAAQ,EAAE;cACd,IAAI,CAACnN,IAAI,EAAE;IACb,SAAC,MAAM;cACL,IAAI,CAACG,IAAI,EAAE;IACb;YACAyB,CAAC,CAACoC,cAAc,EAAE;IACpB,OAAC,MAAM,IAAIpC,CAAC,CAAC8B,GAAG,KAAK,GAAG,IAAI9B,CAAC,CAAC8B,GAAG,KAAK,GAAG,EAAE;YACzC,IAAI,CAAC1D,IAAI,EAAE;YACX4B,CAAC,CAACoC,cAAc,EAAE;IACpB;IACF;IACF;IAEQ+H,EAAAA,mBAAmBA,CAAC9J,OAAoB,EAAEN,KAAkB,EAAA;IAClE,IAAA,IAAIA,KAAK,IAAIA,KAAK,CAACZ,MAAM,KAAKqD,SAAS,EAAE;IACvC,MAAA,IAAI,OAAOzC,KAAK,CAACZ,MAAM,KAAK,QAAQ,EAAE;YACpC,IAAI,CAACa,CAAC,GAAGM,QAAQ,CAACC,cAAc,CAACR,KAAK,CAACZ,MAAM,CAAmB;IAClE,OAAC,MAAM;IACL,QAAA,IAAI,CAACa,CAAC,GAAGD,KAAK,CAACZ,MAAwB;IACzC;IACF,KAAC,MAAM;UACL,IAAI,CAACa,CAAC,GAAGM,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IACxC;QAEA,IAAI,CAACd,CAAC,CAACwL,SAAS,CAACC,GAAG,CAAC,SAAS,CAAC;IAC/B,IAAA,IAAI,CAACzL,CAAC,CAAC0L,eAAe,GAAG,MAAM;IAC/B,IAAA,IAAI,CAAC1L,CAAC,CAACiK,KAAK,CAAC0B,UAAU,GAAG,UAAU;IACnC,IAAA,IAAI,CAAC3L,CAAC,CAACiK,KAAa,CAAC2B,gBAAgB,GAAG,2BAA2B;IAEpE,IAAA,IAAI7L,KAAK,CAACZ,MAAM,KAAKqD,SAAS,EAAE;IAC9B,MAAA,IACE,IAAI,CAACmG,QAAQ,IACb,IAAI,CAACA,QAAQ,CAACqB,UAAU,KAAK3J,OAAO,IACpC,IAAI,CAACsI,QAAQ,CAACkD,WAAW,EACzB;IACAxL,QAAAA,OAAO,CAACyL,YAAY,CAAC,IAAI,CAAC9L,CAAC,EAAE,IAAI,CAAC2I,QAAQ,CAACkD,WAAW,CAAC;IACzD,OAAC,MAAM;IACLxL,QAAAA,OAAO,CAACa,WAAW,CAAC,IAAI,CAAClB,CAAC,CAAC;IAC7B;IACF;IAEA,IAAA,IAAI,CAACA,CAAC,CAACU,gBAAgB,CAAC,OAAO,EAAGV,CAAC,IAAK,IAAI,CAAC+L,gBAAgB,CAAC/L,CAAC,CAAC,CAAC;IACjE,IAAA,IAAI,CAACA,CAAC,CAACU,gBAAgB,CAAC,gBAAgB,EAAGV,CAAC,IAAK,IAAI,CAAC+L,gBAAgB,CAAC/L,CAAC,CAAC,CAAC;IAC1EM,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,iBAAiB,EAAGV,CAAC,IAC7C,IAAI,CAACgM,0BAA0B,CAAChM,CAAC,CAAC,CACnC;IACD,IAAA,IAAI,CAACA,CAAC,CAACU,gBAAgB,CAAC,OAAO,EAAGV,CAAC,IAAK,IAAI,CAACiM,WAAW,CAACjM,CAAC,CAAC,CAAC;IAC5D,IAAA,IAAI,CAACA,CAAC,CAACU,gBAAgB,CAAC,MAAM,EAAGV,CAAC,IAAK,IAAI,CAACkM,UAAU,CAAClM,CAAC,CAAC,CAAC;IAC1D,IAAA,IAAI,CAAC6I,YAAY,GAAG,IAAI,CAAC7I,CAAC,CAACmM,UAAU;IACvC;MAEO/B,UAAUA,CAACC,OAAe,EAAA;IAC/B,IAAA,OAAO,IAAI,CAACrK,CAAE,CAACoM,UAAU,EAAE;UACzB,IAAI,CAACpM,CAAE,CAACqM,WAAW,CAAC,IAAI,CAACrM,CAAE,CAACoM,UAAU,CAAC;IACzC;QACA,IAAI,CAACxD,KAAK,GAAGyB,OAAO,CAAC9I,KAAK,CAAC,gBAAgB,CAAC;QAC5C,IAAI,CAAC2H,SAAS,GAAG,EAAE;IACnB,IAAA,KAAK,IAAIoD,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAG,IAAI,CAAC1D,KAAK,CAACjH,MAAM,EAAE2K,OAAO,EAAE,EAAE;IAC5D,MAAA,IAAIC,EAAE,GAAGjM,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IACtC,MAAA,IAAI,CAACd,CAAE,CAACkB,WAAW,CAACqL,EAAE,CAAC;IACvB,MAAA,IAAI,CAACrD,SAAS,CAACtH,IAAI,CAAC,IAAI,CAAC;IAC3B;QACA,IAAI,CAACkH,SAAS,GAAG,IAAI0D,KAAK,CAAC,IAAI,CAAC5D,KAAK,CAACjH,MAAM,CAAC;QAC7C,IAAI,CAAC8K,gBAAgB,EAAE;QACvB,IAAI,CAACC,UAAU,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC9C,kBAAkB,EAAE,IAAI,CAACY,WAAW,EAAE;IAClD;IAEOE,EAAAA,UAAUA,GAAA;IACf,IAAA,OAAO,IAAI,CAAC9B,KAAK,CAAC3G,IAAI,CAAC,IAAI,CAAC;IAC9B;IAEQwK,EAAAA,gBAAgBA,GAAA;QACtB,IAAI,CAACE,eAAe,EAAE;QACtB,IAAI,CAACC,gBAAgB,EAAE;QACvB,IAAI,CAACC,cAAc,EAAE;IACvB;IAEQD,EAAAA,gBAAgBA,GAAA;QACtB,IAAI,CAAC3D,UAAU,GAAG,EAAE;IACpB,IAAA,KAAK,IAAI6D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAClE,KAAK,CAACjH,MAAM,EAAEmL,CAAC,EAAE,EAAE;UAC1C,IAAI,IAAI,CAAChE,SAAS,CAACgE,CAAC,CAAC,KAAK,2BAA2B,EAAE;IACrD,QAAA,IAAI,CAAC7D,UAAU,CAACrH,IAAI,CAClB,IAAI,CAACmH,YAAY,CAAC+D,CAAC,CAAC,CAClBpI,WAAW,CAACqB,yBAAyB,CAACC,gBAAiB,CACxD,CACF;IACH;IACF;IACF;IAEQkB,EAAAA,OAAOA,CAACrC,WAAmB,EAAEkI,OAAwB,EAAA;IAC3D,IAAA,OAAOlI,WAAW,CAACqC,OAAO,CAAC,mBAAmB,EAAE,CAAC8F,GAAG,EAAEC,EAAE,EAAEC,EAAE,KAAI;IAC9D,MAAA,IAAID,EAAE,KAAK,GAAG,EAAE,OAAOpF,UAAU,CAACkF,OAAO,CAACI,QAAQ,CAACD,EAAE,CAAC,CAAC,CAAC,CAAC,KAEvD,OAAO,CAAA,gCAAA,EAAmC,IAAI,CAACE,mBAAmB,CAChEL,OAAO,CAACI,QAAQ,CAACD,EAAE,CAAC,CAAC,CACtB,CAAS,OAAA,CAAA;IACd,KAAC,CAAC;IACJ;IAEQL,EAAAA,cAAcA,GAAA;IACpB,IAAA,KAAK,IAAIP,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAG,IAAI,CAAC1D,KAAK,CAACjH,MAAM,EAAE2K,OAAO,EAAE,EAAE;IAC5D,MAAA,IAAI,IAAI,CAACpD,SAAS,CAACoD,OAAO,CAAC,EAAE;IAC3B,QAAA,IAAIe,WAAW,GAAG,IAAI,CAACnG,OAAO,CAC5B,IAAI,CAAC8B,gBAAgB,CAACsD,OAAO,CAAC,EAC9B,IAAI,CAACvD,YAAY,CAACuD,OAAO,CAAC,CAC3B;IACA,QAAA,IAAI,CAACzD,YAAY,CAACyD,OAAO,CAAiB,CAACvL,SAAS,GAAG,IAAI,CAAC+H,SAAS,CAACwD,OAAO,CAAC;YAC9E,IAAI,CAACzD,YAAY,CAACyD,OAAO,CAAiB,CAACgB,eAAe,CAAC,OAAO,CAAC;IACnE,QAAA,IAAI,CAACzE,YAAY,CAACyD,OAAO,CAAiB,CAACvN,SAAS,GACnDsO,WAAW,KAAK,EAAE,GAAG,QAAQ,GAAGA,WAAW;IAC/C;IACC,MAAA,IAAI,CAACxE,YAAY,CAACyD,OAAO,CAAiB,CAACiB,OAAO,CAACjB,OAAO,GAAGA,OAAO,CAACkB,QAAQ,EAAE;IAClF;IACF;IAEQb,EAAAA,eAAeA,GAAA;QACrB,IAAIc,aAAa,GAAmB,KAAK;QACzC,IAAIC,kBAAkB,GAAG,CAAC;QAC1B,IAAIC,SAAS,GAA0B,KAAK;IAE5C,IAAA,KAAK,IAAIrB,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAG,IAAI,CAAC1D,KAAK,CAACjH,MAAM,EAAE2K,OAAO,EAAE,EAAE;UAC5D,IAAIsB,QAAQ,GAAG,QAAQ;UACvB,IAAIC,WAAW,GAAoB,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;UAC3E,IAAIwB,eAAe,GAAG,KAAK;IAE3B;UACA,IAAIL,aAAa,KAAK,yBAAyB,EAAE;IAC/C,QAAA,IAAIV,OAAO,GAAGrI,WAAW,CAACY,wBAAwB,CAACV,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAAC0D,OAAO,CAAC,CAAC;IACnF,QAAA,IAAIS,OAAO,IAAIA,OAAO,CAACiB,MAAO,CAAC,KAAK,CAAC,CAACrM,MAAM,IAAI+L,kBAAkB,EAAE;IAClEE,UAAAA,QAAQ,GAAG,0BAA0B;IACrCE,UAAAA,eAAe,GAAGpJ,WAAW,CAACY,wBAAwB,CAACT,WAAW;IAClEgJ,UAAAA,WAAW,GAAGd,OAAO;IACrBU,UAAAA,aAAa,GAAG,KAAK;IACvB,SAAC,MAAM;IACLG,UAAAA,QAAQ,GAAG,sBAAsB;IACjCE,UAAAA,eAAe,GAAG,4CAA4C;cAC9DD,WAAW,GAAG,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;IACxD;IACF,OAAC,MAAM,IAAImB,aAAa,KAAK,sBAAsB,EAAE;IACnD,QAAA,IAAIV,OAAO,GAAGrI,WAAW,CAACa,qBAAqB,CAACX,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAAC0D,OAAO,CAAC,CAAC;IAChF,QAAA,IAAIS,OAAO,IAAIA,OAAO,CAACiB,MAAO,CAAC,KAAK,CAAC,CAACrM,MAAM,IAAI+L,kBAAkB,EAAE;IAClEE,UAAAA,QAAQ,GAAG,uBAAuB;IAClCE,UAAAA,eAAe,GAAGpJ,WAAW,CAACa,qBAAqB,CAACV,WAAW;IAC/DgJ,UAAAA,WAAW,GAAGd,OAAO;IACrBU,UAAAA,aAAa,GAAG,KAAK;IACvB,SAAC,MAAM;IACLG,UAAAA,QAAQ,GAAG,mBAAmB;IAC9BE,UAAAA,eAAe,GAAG,4CAA4C;cAC9DD,WAAW,GAAG,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;IACxD;IACF;IAEA;IACA,MAAA,IAAIsB,QAAQ,KAAK,QAAQ,IAAID,SAAS,KAAK,KAAK,EAAE;IAChD,QAAA,KAAK,IAAIM,aAAa,IAAIhI,gBAAgB,EAAE;IAC1C,UAAA,IAAI,IAAI,CAAC2C,KAAK,CAAC0D,OAAO,CAAC,CAACzK,KAAK,CAACoM,aAAa,CAAC/H,KAAK,CAAC,EAAE;gBAClD,IACE+H,aAAa,CAAC7H,aAAa,IAC3BkG,OAAO,KAAK,CAAC,IACb,EACE,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,IACxC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,IACtC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,IACtC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,cAAc,CAC/C,EACD;IACAqB,cAAAA,SAAS,GAAGM,aAAa;IACzB,cAAA;IACF;IACF;IACF;IACF;UAEA,IAAIN,SAAS,KAAK,KAAK,EAAE;IACvBC,QAAAA,QAAQ,GAAG,aAAa;IACxBE,QAAAA,eAAe,GAAG,6CAA6C;YAC/DD,WAAW,GAAG,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;YAEtD,IAAIqB,SAAS,CAACxH,GAAG,EAAE;IACjB,UAAA,IAAI,IAAI,CAACyC,KAAK,CAAC0D,OAAO,CAAC,CAACzK,KAAK,CAAC8L,SAAS,CAACxH,GAAG,CAAC,EAAE;IAC5CwH,YAAAA,SAAS,GAAG,KAAK;IACnB;IACF,SAAC,MAAM;cACL,IACErB,OAAO,KAAK,IAAI,CAAC1D,KAAK,CAACjH,MAAM,GAAG,CAAC,IACjC,IAAI,CAACiH,KAAK,CAAC0D,OAAO,GAAG,CAAC,CAAC,CAACzK,KAAK,CAAC6C,WAAW,CAACc,WAAW,CAACZ,MAAM,CAAC,EAC7D;IACA+I,YAAAA,SAAS,GAAG,KAAK;IACnB;IACF;IACF;IAEA;UACA,IAAIC,QAAQ,KAAK,QAAQ,EAAE;IACzB,QAAA,KAAK,IAAI9F,IAAI,IAAIpD,WAAW,EAAE;IAC5B,UAAA,IAAIA,WAAW,CAACoD,IAAI,CAAC,CAAClD,MAAM,EAAE;IAC5B,YAAA,IAAImI,OAAO,GAAGrI,WAAW,CAACoD,IAAI,CAAC,CAAClD,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAAC0D,OAAO,CAAC,CAAC;IAChE,YAAA,IAAIS,OAAO,EAAE;IACXa,cAAAA,QAAQ,GAAG9F,IAAI;IACfgG,cAAAA,eAAe,GAAGpJ,WAAW,CAACoD,IAAI,CAAC,CAACjD,WAAW;IAC/CgJ,cAAAA,WAAW,GAAGd,OAAO;IACrB,cAAA;IACF;IACF;IACF;IACF;IAEA;IACA,MAAA,IAAIa,QAAQ,KAAK,yBAAyB,IAAIA,QAAQ,KAAK,sBAAsB,EAAE;IACjFH,QAAAA,aAAa,GAAGG,QAAQ;YACxBF,kBAAkB,GAAGG,WAAW,CAACG,MAAO,CAAC,KAAK,CAAC,CAACrM,MAAM;IACxD;IAEA;UACA,IACE,CAACiM,QAAQ,KAAK,gBAAgB,IAAIA,QAAQ,KAAK,2BAA2B,KAC1EtB,OAAO,GAAG,CAAC,KACV,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,IACvC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,IACtC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,IACtC,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,cAAc,CAAC,EACjD;IACAsB,QAAAA,QAAQ,GAAG,QAAQ;YACnBC,WAAW,GAAG,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;IACtDwB,QAAAA,eAAe,GAAG,KAAK;IACzB;IAEA;UACA,IAAIF,QAAQ,KAAK,kBAAkB,EAAE;IACnC,QAAA,IAAIb,OAAO,GAAGrI,WAAW,CAACkB,IAAI,CAAChB,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAAC0D,OAAO,CAAC,CAAC;IAC/D,QAAA,IAAIS,OAAO,EAAE;IACXa,UAAAA,QAAQ,GAAG,MAAM;IACjBE,UAAAA,eAAe,GAAGpJ,WAAW,CAACkB,IAAI,CAACf,WAAW;IAC9CgJ,UAAAA,WAAW,GAAGd,OAAO;IACvB;IACF;IAEA;IACA,MAAA,IAAIa,QAAQ,KAAK,kBAAkB,IAAIA,QAAQ,KAAK,kBAAkB,EAAE;IACtE,QAAA,IAAItB,OAAO,KAAK,CAAC,IAAI,IAAI,CAACxD,SAAS,CAACwD,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE;IAC7D,UAAA,IAAIS,OAAO,GAAGrI,WAAW,CAACiB,IAAI,CAACf,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAAC0D,OAAO,CAAC,CAAC;IAC/D,UAAA,IAAIS,OAAO,EAAE;IACXa,YAAAA,QAAQ,GAAG,MAAM;IACjBC,YAAAA,WAAW,GAAGd,OAAO;IACrBe,YAAAA,eAAe,GAAGpJ,WAAW,CAACiB,IAAI,CAACd,WAAW;IAChD,WAAC,MAAM;IACL+I,YAAAA,QAAQ,GAAG,QAAQ;gBACnBC,WAAW,GAAG,CAAC,IAAI,CAACjF,KAAK,CAAC0D,OAAO,CAAC,CAAoB;IACtDwB,YAAAA,eAAe,GAAG,KAAK;IACzB;IACF,SAAC,MAAM;IACL,UAAA,IAAII,WAAW,GAAG5B,OAAO,GAAG,CAAC;cAC7B,MAAM6B,eAAe,GAAGP,QAAQ,KAAK,kBAAkB,GAAG,YAAY,GAAG,YAAY;cACrF,GAAG;gBACD,IAAI,IAAI,CAAC9E,SAAS,CAACoF,WAAW,CAAC,KAAKC,eAAe,EAAE;IACnD,cAAA,IAAI,CAACrF,SAAS,CAACoF,WAAW,CAAC,GAAGC,eAAe;IAC7C,cAAA,IAAI,CAACjF,SAAS,CAACgF,WAAW,CAAC,GAAG,IAAI;IACpC;IACA,YAAA,IAAI,CAAClF,gBAAgB,CAACkF,WAAW,CAAC,GAAG,KAAK;IAC1C,YAAA,IAAI,CAACnF,YAAY,CAACmF,WAAW,CAAC,GAAG,CAAC,IAAI,CAACtF,KAAK,CAACsF,WAAW,CAAC,CAAoB;IAC7EA,YAAAA,WAAW,EAAE;IACf,WAAC,QAAQA,WAAW,IAAI,CAAC,IAAI,IAAI,CAACpF,SAAS,CAACoF,WAAW,CAAC,KAAK,QAAQ;IACvE;IACF;UAEA,IAAI,IAAI,CAACpF,SAAS,CAACwD,OAAO,CAAC,KAAKsB,QAAQ,EAAE;IACxC,QAAA,IAAI,CAAC9E,SAAS,CAACwD,OAAO,CAAC,GAAGsB,QAAQ;IAClC,QAAA,IAAI,CAAC1E,SAAS,CAACoD,OAAO,CAAC,GAAG,IAAI;IAChC;IACA,MAAA,IAAI,CAACtD,gBAAgB,CAACsD,OAAO,CAAC,GAAGwB,eAAe;IAChD,MAAA,IAAI,CAAC/E,YAAY,CAACuD,OAAO,CAAC,GAAGuB,WAAW;IAC1C;IACF;IAEOlD,EAAAA,YAAYA,GAA2B;IAAA,IAAA,IAA1ByD,gFAAqB,KAAK;;IAC5C,IAAA,MAAM5E,SAAS,GAAG6E,MAAM,CAAC1D,YAAY,EAAE;QACvC,IAAI2D,SAAS,GAAGF,SAAS,GAAG5E,SAAU,CAAC+E,UAAU,GAAG/E,SAAU,CAACgF,SAAS;IACxE,IAAA,IAAI,CAACF,SAAS,EAAE,OAAO,IAAI;QAC3B,IAAIG,MAAM,GAAGL,SAAS,GAAG5E,SAAU,CAACkF,YAAY,GAAGlF,SAAU,CAACmF,WAAW;IACzE,IAAA,IAAIL,SAAS,KAAK,IAAI,CAACtO,CAAC,EAAE;UACxB,IAAIyO,MAAM,GAAG,IAAI,CAAC7F,KAAK,CAACjH,MAAM,EAC5B,OAAO;IACLiN,QAAAA,GAAG,EAAEH,MAAM;IACXI,QAAAA,GAAG,EAAE;WACN;UACH,OAAO;YACLD,GAAG,EAAEH,MAAM,GAAG,CAAC;YACfI,GAAG,EAAE,IAAI,CAACjG,KAAK,CAAC6F,MAAM,GAAG,CAAC,CAAC,CAAC9M;WAC7B;IACH;QAEA,IAAIkN,GAAG,GAAG,IAAI,CAACC,aAAa,CAACR,SAAS,EAAEG,MAAM,CAAC;IAC/C,IAAA,IAAII,GAAG,KAAK,IAAI,EAAE,OAAO,IAAI;QAE7B,IAAIE,IAAI,GAAGT,SAAS;IACpB,IAAA,OAAOS,IAAI,CAAClO,aAAa,KAAK,IAAI,CAACb,CAAC,EAAE;UACpC+O,IAAI,GAAGA,IAAI,CAAClO,aAAc;IAC5B;QAEA,IAAI+N,GAAG,GAAG,CAAC;IACX;QACA,IAAIG,IAAI,CAACC,eAAe,EAAE;UACxB,MAAMC,kBAAkB,GAAG,CAACC,EAAA,GAAAH,IAAoB,CAACxB,OAAO,MAAA,IAAA,IAAA2B,EAAA,KAAA,MAAA,GAAA,MAAA,GAAAA,EAAA,CAAE5C,OAAO;UACjE,MAAM6C,mBAAmB,GAAG,CAAAC,EAAA,GAACL,IAAI,CAACC,eAA+B,CAACzB,OAAO,MAAE,IAAA,IAAA6B,EAAA,KAAA,MAAA,GAAA,MAAA,GAAAA,EAAA,CAAA9C,OAAO;UAElF,IAAI2C,kBAAkB,IAAIE,mBAAmB,EAAE;IAC7C,QAAA,MAAME,cAAc,GAAGlC,QAAQ,CAAC8B,kBAAkB,CAAC;IACnD,QAAA,MAAMK,eAAe,GAAGnC,QAAQ,CAACgC,mBAAmB,CAAC;IACrD,QAAA,IAAIE,cAAc,KAAKC,eAAe,GAAG,CAAC,EAAE;IAC1CV,UAAAA,GAAG,GAAGS,cAAc;IACtB,SAAC,MAAM;IACL;IACA;IACA;cACA,OAAON,IAAI,CAACC,eAAe,EAAE;IAC3BJ,YAAAA,GAAG,EAAE;gBACLG,IAAI,GAAGA,IAAI,CAACC,eAAe;IAC7B;IACF;IACF;IACF;QAEA,OAAO;IAAEJ,MAAAA,GAAG,EAAEA,GAAG;IAAEC,MAAAA,GAAG,EAAEA;SAAK;IAC/B;MAEO7D,YAAYA,CAACzL,KAAe,EAAgC;IAAA,IAAA,IAA9BC,MAAA,GAAA+H,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAA0B,IAAI;QACjE,IAAI,CAAChI,KAAK,EAAE;QAEZ,IAAI;IAAEwP,MAAAA,IAAI,EAAEP,SAAS;IAAEC,MAAAA,MAAM,EAAEE;IAAa,KAAA,GAAG,IAAI,CAACY,oBAAoB,CACtEhQ,KAAK,CAACqP,GAAG,EACTrP,KAAK,CAACsP,GAAG,EACTrP,MAAM,GAAGA,MAAM,CAACoP,GAAG,KAAKrP,KAAK,CAACqP,GAAG,IAAIpP,MAAM,CAACqP,GAAG,GAAGtP,KAAK,CAACsP,GAAG,GAAG,KAAK,CACpE;QACD,IAAIN,UAAU,GAAG,IAAI;IACnBG,MAAAA,YAAY,GAAG,IAAI;IACrB,IAAA,IAAIlP,MAAM,KAAKA,MAAM,CAACoP,GAAG,KAAKrP,KAAK,CAACqP,GAAG,IAAIpP,MAAM,CAACqP,GAAG,KAAKtP,KAAK,CAACsP,GAAG,CAAC,EAAE;UACpE,IAAI;YAAEE,IAAI;IAAEN,QAAAA;WAAQ,GAAG,IAAI,CAACc,oBAAoB,CAC9C/P,MAAM,CAACoP,GAAG,EACVpP,MAAM,CAACqP,GAAG,EACVtP,KAAK,CAACqP,GAAG,KAAKpP,MAAM,CAACoP,GAAG,IAAIrP,KAAK,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,CACnD;IACDN,MAAAA,UAAU,GAAGQ,IAAI;IACjBL,MAAAA,YAAY,GAAGD,MAAM;IACvB;IAEA,IAAA,IAAIe,eAAe,GAAGnB,MAAM,CAAC1D,YAAY,EAAE;IAC3C6E,IAAAA,eAAgB,CAACC,gBAAgB,CAC/BjB,SAAS,EACTG,WAAW,EACXJ,UAAU,IAAIC,SAAS,EACvBD,UAAU,GAAGG,YAAa,GAAGC,WAAW,CACzC;IACH;MAEOjP,KAAKA,CAACgQ,IAAY,EAA+D;IAAA,IAAA,IAA7DlQ,6EAA0B,IAAI;IAAA,IAAA,IAAED,4EAAyB,IAAI;QACtF,IAAI,CAACC,MAAM,EAAEA,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;QAC7C,IAAI,CAACpL,KAAK,EAAEA,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;QAC5C,IAAIgF,SAAmB,EAAExJ,GAAa;QACtC,IAAI,CAAC5G,KAAK,EAAE;IACVA,MAAAA,KAAK,GAAG;IACNqP,QAAAA,GAAG,EAAE,IAAI,CAAChG,KAAK,CAACjH,MAAM,GAAG,CAAC;IAC1BkN,QAAAA,GAAG,EAAE,IAAI,CAACjG,KAAK,CAAC,IAAI,CAACA,KAAK,CAACjH,MAAM,GAAG,CAAC,CAAC,CAACA;WACxC;IACH;QACA,IAAI,CAACnC,MAAM,EAAE;IACXA,MAAAA,MAAM,GAAGD,KAAK;IAChB;QACA,IACEC,MAAM,CAACoP,GAAG,GAAGrP,KAAK,CAACqP,GAAG,IACrBpP,MAAM,CAACoP,GAAG,KAAKrP,KAAK,CAACqP,GAAG,IAAIpP,MAAM,CAACqP,GAAG,IAAItP,KAAK,CAACsP,GAAI,EACrD;IACAc,MAAAA,SAAS,GAAGnQ,MAAM;IAClB2G,MAAAA,GAAG,GAAG5G,KAAK;IACb,KAAC,MAAM;IACLoQ,MAAAA,SAAS,GAAGpQ,KAAK;IACjB4G,MAAAA,GAAG,GAAG3G,MAAM;IACd;IACA,IAAA,IAAIoQ,aAAa,GAAGF,IAAI,CAACnO,KAAK,CAAC,gBAAgB,CAAC;IAChD,IAAA,IAAIsO,UAAU,GAAG,IAAI,CAACjH,KAAK,CAAC+G,SAAS,CAACf,GAAG,CAAC,CAACkB,MAAM,CAAC,CAAC,EAAEH,SAAS,CAACd,GAAG,CAAC;IACnE,IAAA,IAAIkB,OAAO,GAAG,IAAI,CAACnH,KAAK,CAACzC,GAAG,CAACyI,GAAG,CAAC,CAACkB,MAAM,CAAC3J,GAAG,CAAC0I,GAAG,CAAC;IACjDe,IAAAA,aAAa,CAAC,CAAC,CAAC,GAAGC,UAAU,CAAC7N,MAAM,CAAC4N,aAAa,CAAC,CAAC,CAAC,CAAC;QACtD,IAAII,SAAS,GAAGJ,aAAa,CAACA,aAAa,CAACjO,MAAM,GAAG,CAAC,CAAC,CAACA,MAAM;QAC9DiO,aAAa,CAACA,aAAa,CAACjO,MAAM,GAAG,CAAC,CAAC,GAAGiO,aAAa,CAACA,aAAa,CAACjO,MAAM,GAAG,CAAC,CAAC,CAACK,MAAM,CAAC+N,OAAO,CAAC;IACjG,IAAA,IAAI,CAACE,WAAW,CAACN,SAAS,CAACf,GAAG,EAAE,CAAC,GAAGzI,GAAG,CAACyI,GAAG,GAAGe,SAAS,CAACf,GAAG,EAAEgB,aAAa,CAAC;QAC3ErQ,KAAK,CAACqP,GAAG,GAAGe,SAAS,CAACf,GAAG,GAAGgB,aAAa,CAACjO,MAAM,GAAG,CAAC;QACpDpC,KAAK,CAACsP,GAAG,GAAGmB,SAAS;QACrB,IAAI,CAACvD,gBAAgB,EAAE;IACvB,IAAA,IAAI,CAACzB,YAAY,CAACzL,KAAK,CAAC;QACxB,IAAI,CAACmN,UAAU,EAAE;IACnB;IAEOrN,EAAAA,aAAaA,CAAC2I,GAAW,EAAEC,IAAY,EAA+D;IAAA,IAAA,IAA7D1I,KAAyB,GAAAgI,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAAA,IAAI;IAAA,IAAA,IAAE/H,MAAA,GAAA+H,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAA0B,IAAI;QAC3G,IAAI,CAAC,IAAI,CAACqC,kBAAkB,EAAE,IAAI,CAACY,WAAW,EAAE;QAChD,IAAI,CAACjL,KAAK,EAAEA,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;QAC5C,IAAI,CAACnL,MAAM,EAAEA,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;IAC7C,IAAA,IAAI,CAACpL,KAAK,IAAI,CAACC,MAAM,IAAID,KAAK,CAACqP,GAAG,KAAKpP,MAAM,CAACoP,GAAG,EAAE;QACnD,IAAI,CAAC1F,SAAS,CAAC3J,KAAK,CAACqP,GAAG,CAAC,GAAG,IAAI;IAEhC,IAAA,MAAMsB,QAAQ,GAAG3Q,KAAK,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGtP,KAAK,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG;IAChE,IAAA,MAAMsB,MAAM,GAAG5Q,KAAK,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGtP,KAAK,CAACsP,GAAG;QAC9D,MAAMuB,IAAI,GAAG,IAAI,CAACxH,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAAC,CAAC,EAAEI,QAAQ,CAAC,CAAClO,MAAM,CAACgG,GAAG,CAAC;QAClE,MAAMqI,GAAG,GAAGF,MAAM,KAAKD,QAAQ,GAAG,EAAE,GAAG,IAAI,CAACtH,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAACI,QAAQ,EAAEC,MAAM,GAAGD,QAAQ,CAAC;IAChG,IAAA,MAAMI,KAAK,GAAGrI,IAAI,CAACjG,MAAM,CAAC,IAAI,CAAC4G,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAACK,MAAM,CAAC,CAAC;IAC/D,IAAA,IAAI,CAACvH,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,GAAGwB,IAAI,CAACpO,MAAM,CAACqO,GAAG,EAAEC,KAAK,CAAC;IAC/C9Q,IAAAA,MAAM,CAACqP,GAAG,GAAGuB,IAAI,CAACzO,MAAM;QACxBpC,KAAK,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGwB,GAAG,CAAC1O,MAAM;QAEnC,IAAI,CAAC8K,gBAAgB,EAAE;IACvB,IAAA,IAAI,CAACzB,YAAY,CAACzL,KAAK,EAAEC,MAAM,CAAC;IAClC;IAEOkB,EAAAA,gBAAgBA,CACrBoH,IAAO,EACPyI,QAE2D,EAAA;IAE3D,IAAA,IAAIzI,IAAI,CAACjG,KAAK,CAAC,qBAAqB,CAAC,EAAE;UACrC,IAAI,CAACyH,SAAS,CAACC,MAAM,CAAC3H,IAAI,CAAC2O,QAAqC,CAAC;IACnE;IACA,IAAA,IAAIzI,IAAI,CAACjG,KAAK,CAAC,kCAAkC,CAAC,EAAE;UAClD,IAAI,CAACyH,SAAS,CAACE,SAAS,CAAC5H,IAAI,CAAC2O,QAAwC,CAAC;IACzE;IACA,IAAA,IAAIzI,IAAI,CAACjG,KAAK,CAAC,aAAa,CAAC,EAAE;UAC7B,IAAI,CAACyH,SAAS,CAACG,IAAI,CAAC7H,IAAI,CAAC2O,QAAmC,CAAC;IAC/D;IACF;IAEQ7D,EAAAA,UAAUA,GAAA;IAChB,IAAA,IAAI,CAAC,IAAI,CAAC/D,QAAQ,IAAI,CAAC,IAAI,CAACW,SAAS,CAACC,MAAM,CAAC5H,MAAM,EAAE;IACrD,IAAA,MAAM0I,OAAO,GAAG,IAAI,CAACK,UAAU,EAAE;QACjC,IAAI,IAAI,CAAC/B,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAC2B,KAAK,GAAGD,OAAO;QAChD,KAAK,IAAIkG,QAAQ,IAAI,IAAI,CAACjH,SAAS,CAACC,MAAM,EAAE;IAC1CgH,MAAAA,QAAQ,CAAC;IACPlG,QAAAA,OAAO,EAAEA,OAAO;IAChBmG,QAAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAACtH,SAAS;IAC/B,OAAA,CAAC;IACJ;IACF;MAEQ6C,gBAAgBA,CAAC5J,KAAY,EAAA;QACnC,MAAMsO,UAAU,GAAGtO,KAAmB;IACtC,IAAA,IAAIsO,UAAU,CAACC,SAAS,KAAK,uBAAuB,EAAE;QACtD,IAAI,CAAC,IAAI,CAAC9G,kBAAkB,EAAE,IAAI,CAACY,WAAW,EAAE;IAEhD,IAAA,IAAIjL,KAAK,GAAG,IAAI,CAACoL,YAAY,EAAE;IAE/B,IAAA,IAAI,CAAC8F,UAAU,CAACC,SAAS,KAAK,iBAAiB,IAAID,UAAU,CAACC,SAAS,KAAK,iBAAiB,KAAKnR,KAAK,EAAE;UACvG,IAAI,CAACoR,cAAc,EAAE;IACrB,MAAA,IAAI,CAACC,mBAAmB,CAACrR,KAAK,CAAC;IACjC,KAAC,MAAM;IACL,MAAA,IAAI,CAAC,IAAI,CAACS,CAAE,CAACoM,UAAU,EAAE;IACvB,QAAA,IAAI,CAACpM,CAAE,CAACjB,SAAS,GAAG,qCAAqC;IAC3D,OAAC,MAAM;YACL,IAAI,CAAC8R,gBAAgB,EAAE;IACzB;UACA,IAAI,CAACC,+BAA+B,EAAE;IACxC;IACA,IAAA,IAAIvR,KAAK,EAAE;IACT,MAAA,IAAI,CAACyL,YAAY,CAACzL,KAAK,CAAC;IAC1B;QAEA,IAAI,CAACmN,UAAU,EAAE;IACnB;MAEQV,0BAA0BA,CAAC+E,EAAS,EAAA;QAC1C,IAAI,CAACC,aAAa,EAAE;IACtB;MAEQ/E,WAAWA,CAAC9J,KAAqB,EAAA;QACvC,IAAI,CAAC,IAAI,CAACyH,kBAAkB,EAAE,IAAI,CAACY,WAAW,EAAE;QAChDrI,KAAK,CAACC,cAAc,EAAE;QAEtB,IAAIsN,IAAI,GAAIvN,KAAa,CAAC8O,aAAa,CAACC,OAAO,CAAC,YAAY,CAAC;IAC7D,IAAA,IAAI,CAACxR,KAAK,CAACgQ,IAAI,CAAC;IAClB;MAEQxD,UAAUA,CAAC/J,KAAgB,EAAA;QACjCA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAA,IAAI,CAAC+O,QAAQ,CAAChP,KAAK,CAACiP,YAAa,CAAC;IACpC;MAEQhE,mBAAmBA,CAACiE,cAAsB,EAAA;QAChD,IAAIC,SAAS,GAAG,EAAE;QAClB,IAAIC,KAAK,GAAmF,EAAE;QAC9F,IAAI9C,MAAM,GAAG,CAAC;QACd,IAAItH,MAAM,GAAGkK,cAAc;QAE3B5O,KAAK,EAAE,OAAO0E,MAAM,EAAE;IACpB;IACA,MAAA,KAAK,IAAIJ,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;IACvD,QAAA,IAAI,IAAI,CAACsC,mBAAmB,CAACtC,IAAI,CAAC,EAAE;IAClC,UAAA,IAAIyK,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAACtC,IAAI,CAAC,CAACnC,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IAC5D,UAAA,IAAIqK,GAAG,EAAE;gBACPrK,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC0B,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,CAAC;IACrC8M,YAAAA,MAAM,IAAI+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;gBACvB2P,SAAS,IAAI,IAAI,CAACjI,mBAAmB,CAACtC,IAAI,CAAC,CAAClC,WAAW,CAACqC,OAAO,CAAC,YAAY,EAAE,CAAC8F,GAAG,EAAEC,EAAE,KAAKpF,UAAU,CAAC2J,GAAG,CAACvE,EAAE,CAAC,CAAC,CAAC;IAC/G,YAAA,SAASxK,KAAK;IAChB;IACF;IACF;IAEA;IACA,MAAA,KAAK,IAAIsE,IAAI,IAAI,IAAI,CAACqC,mBAAmB,EAAE;IACzC,QAAA,IAAIrC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,UAAU,IAAIA,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,UAAU,IAAIA,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,SAAS,EAAE;IAC/K,UAAA,IAAIyK,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAACtC,IAAI,CAAC,CAACnC,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IAC5D,UAAA,IAAIqK,GAAG,EAAE;gBACPrK,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC0B,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,CAAC;IACrC8M,YAAAA,MAAM,IAAI+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;gBACvB2P,SAAS,IAAI,IAAI,CAACjI,mBAAmB,CAACtC,IAAI,CAAC,CAAClC,WAAW,CAACqC,OAAO,CAAC,YAAY,EAAE,CAAC8F,GAAG,EAAEC,EAAE,KAAKpF,UAAU,CAAC2J,GAAG,CAACvE,EAAE,CAAC,CAAC,CAAC;IAC/G,YAAA,SAASxK,KAAK;IAChB;IACF;IACF;IAEA;IACA,MAAA,IAAIgP,aAAa,GAAGtK,MAAM,CAACtF,KAAK,CAAC,IAAI,CAACwH,mBAAmB,CAAC5C,QAAQ,CAAC7B,MAAM,CAAC;IAC1E,MAAA,IAAI8M,cAAc,GAAGvK,MAAM,CAACtF,KAAK,CAAC,IAAI,CAACwH,mBAAmB,CAAC3C,SAAS,CAAC9B,MAAM,CAAC;UAC5E,IAAI8M,cAAc,IAAID,aAAa,EAAE;YACnC,IAAIE,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACzK,MAAM,EAAE,CAAC,CAACuK,cAAc,CAAC;IAC5D,QAAA,IAAIC,MAAM,EAAE;IACVL,UAAAA,SAAS,GAAG,CAAGA,EAAAA,SAAS,GAAGK,MAAM,CAACE,MAAM,CAAE,CAAA;cAC1C1K,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC6B,MAAM,CAACG,SAAS,CAAC;cACxCrD,MAAM,IAAIkD,MAAM,CAACG,SAAS;IAC1B,UAAA,SAASrP,KAAK;IAChB;IACF;IAEA;IACA,MAAA,IAAI+O,GAAG,GAAG,cAAc,CAACzD,IAAI,CAAC5G,MAAM,CAAC;IACrC,MAAA,IAAIqK,GAAG,EAAE;IACP,QAAA,IAAIO,UAAU,GAAGP,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9B,QAAA,MAAMqQ,WAAW,GAAGR,GAAG,CAAC,CAAC,CAAC;YAC1B,MAAMS,gBAAgB,GAAGT,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAElCrK,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC0B,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,CAAC;IAErC,QAAA,MAAMuQ,SAAS,GAAGzD,MAAM,GAAG,CAAC,GAAG4C,cAAc,CAACvB,MAAM,CAAC,CAAC,EAAErB,MAAM,CAAC,GAAG,GAAG;IACrE,QAAA,MAAM0D,SAAS,GAAG1D,MAAM,GAAG+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,GAAG0P,cAAc,CAAC1P,MAAM,GAAGwF,MAAM,GAAG,GAAG;IAE/E,QAAA,MAAMiL,kBAAkB,GAAGD,SAAS,CAACtQ,KAAK,CAAC0C,kBAAkB,CAAC;IAC9D,QAAA,MAAM8N,mBAAmB,GAAGH,SAAS,CAACrQ,KAAK,CAAC4C,mBAAmB,CAAC;IAChE,QAAA,MAAM6N,iBAAiB,GAAGH,SAAS,CAACtQ,KAAK,CAAC,KAAK,CAAC;IAChD,QAAA,MAAM0Q,kBAAkB,GAAGL,SAAS,CAACrQ,KAAK,CAAC,KAAK,CAAC;IAEjD,QAAA,IAAI2Q,OAAO,GAAG,CAACF,iBAAiB,KAAK,CAACF,kBAAkB,IAAI,CAAC,CAACG,kBAAkB,IAAI,CAAC,CAACF,mBAAmB,CAAC;IAC1G,QAAA,IAAII,QAAQ,GAAG,CAACF,kBAAkB,KAAK,CAACF,mBAAmB,IAAI,CAAC,CAACC,iBAAiB,IAAI,CAAC,CAACF,kBAAkB,CAAC;IAE3G,QAAA,IAAIH,gBAAgB,KAAK,GAAG,IAAIO,OAAO,IAAIC,QAAQ,EAAE;cACnDD,OAAO,GAAG,CAAC,CAACH,mBAAmB;cAC/BI,QAAQ,GAAG,CAAC,CAACL,kBAAkB;IACjC;IAEA,QAAA,IAAIK,QAAQ,EAAE;IACZ,UAAA,IAAIC,YAAY,GAAGnB,KAAK,CAAC5P,MAAM,GAAG,CAAC;IACnC,UAAA,OAAOoQ,UAAU,IAAIW,YAAY,IAAI,CAAC,EAAE;gBACtC,IAAInB,KAAK,CAACmB,YAAY,CAAC,CAACC,SAAS,KAAKV,gBAAgB,EAAE;IACtD,cAAA,OAAOS,YAAY,GAAGnB,KAAK,CAAC5P,MAAM,GAAG,CAAC,EAAE;IACtC,gBAAA,MAAMiR,KAAK,GAAGrB,KAAK,CAACzG,GAAG,EAAG;oBAC1BwG,SAAS,GAAG,GAAGsB,KAAK,CAACf,MAAM,CAAGe,EAAAA,KAAK,CAACZ,WAAW,CAAClC,MAAM,CAAC,CAAC,EAAE8C,KAAK,CAACC,KAAK,CAAC,CAAA,EAAGvB,SAAS,CAAE,CAAA;IACtF;IAEA,cAAA,IAAIS,UAAU,IAAI,CAAC,IAAIR,KAAK,CAACmB,YAAY,CAAC,CAACG,KAAK,IAAI,CAAC,EAAE;oBACrDvB,SAAS,GAAG,CAAwBW,qBAAAA,EAAAA,gBAAgB,CAAGA,EAAAA,gBAAgB,CAAmCX,gCAAAA,EAAAA,SAAS,CAAiCW,8BAAAA,EAAAA,gBAAgB,CAAGA,EAAAA,gBAAgB,CAAS,OAAA,CAAA;IAChMF,gBAAAA,UAAU,IAAI,CAAC;IACfR,gBAAAA,KAAK,CAACmB,YAAY,CAAC,CAACG,KAAK,IAAI,CAAC;IAChC,eAAC,MAAM;IACLvB,gBAAAA,SAAS,GAAG,CAAwBW,qBAAAA,EAAAA,gBAAgB,2BAA2BX,SAAS,CAAA,0BAAA,EAA6BW,gBAAgB,CAAS,OAAA,CAAA;IAC9IF,gBAAAA,UAAU,IAAI,CAAC;IACfR,gBAAAA,KAAK,CAACmB,YAAY,CAAC,CAACG,KAAK,IAAI,CAAC;IAChC;kBAEA,IAAItB,KAAK,CAACmB,YAAY,CAAC,CAACG,KAAK,KAAK,CAAC,EAAE;IACnC,gBAAA,IAAID,KAAK,GAAGrB,KAAK,CAACzG,GAAG,EAAG;IACxBwG,gBAAAA,SAAS,GAAG,CAAGsB,EAAAA,KAAK,CAACf,MAAM,CAAA,EAAGP,SAAS,CAAE,CAAA;IACzCoB,gBAAAA,YAAY,EAAE;IAChB;IACF,aAAC,MAAM;IACLA,cAAAA,YAAY,EAAE;IAChB;IACF;IACF;YAEA,IAAIX,UAAU,IAAIS,OAAO,EAAE;cACzBjB,KAAK,CAAC3P,IAAI,CAAC;IACT+Q,YAAAA,SAAS,EAAEV,gBAAgB;IAC3BD,YAAAA,WAAW,EAAEA,WAAW;IACxBa,YAAAA,KAAK,EAAEd,UAAU;IACjBF,YAAAA,MAAM,EAAEP;IACT,WAAA,CAAC;IACFA,UAAAA,SAAS,GAAG,EAAE;IACdS,UAAAA,UAAU,GAAG,CAAC;IAChB;IAEA,QAAA,IAAIA,UAAU,EAAE;IACdT,UAAAA,SAAS,GAAG,CAAA,EAAGA,SAAS,CAAA,EAAGU,WAAW,CAAClC,MAAM,CAAC,CAAC,EAAEiC,UAAU,CAAC,CAAE,CAAA;IAChE;IAEAtD,QAAAA,MAAM,IAAI+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IACvB,QAAA,SAASc,KAAK;IAChB;IAEA;IACA+O,MAAAA,GAAG,GAAG,KAAK,CAACzD,IAAI,CAAC5G,MAAM,CAAC;IACxB,MAAA,IAAIqK,GAAG,EAAE;YACP,IAAIsB,QAAQ,GAAG,KAAK;IACpB,QAAA,IAAIJ,YAAY,GAAGnB,KAAK,CAAC5P,MAAM,GAAG,CAAC;IACnC,QAAA,OAAO,CAACmR,QAAQ,IAAIJ,YAAY,IAAI,CAAC,EAAE;cACrC,IAAInB,KAAK,CAACmB,YAAY,CAAC,CAACC,SAAS,KAAK,GAAG,EAAE;IACzC,YAAA,OAAOD,YAAY,GAAGnB,KAAK,CAAC5P,MAAM,GAAG,CAAC,EAAE;IACtC,cAAA,MAAMiR,KAAK,GAAGrB,KAAK,CAACzG,GAAG,EAAG;kBAC1BwG,SAAS,GAAG,GAAGsB,KAAK,CAACf,MAAM,CAAGe,EAAAA,KAAK,CAACZ,WAAW,CAAClC,MAAM,CAAC,CAAC,EAAE8C,KAAK,CAACC,KAAK,CAAC,CAAA,EAAGvB,SAAS,CAAE,CAAA;IACtF;gBAEAA,SAAS,GAAG,CAA8DA,2DAAAA,EAAAA,SAAS,CAAsC,oCAAA,CAAA;IACzH,YAAA,IAAIsB,KAAK,GAAGrB,KAAK,CAACzG,GAAG,EAAG;IACxBwG,YAAAA,SAAS,GAAG,CAAGsB,EAAAA,KAAK,CAACf,MAAM,CAAA,EAAGP,SAAS,CAAE,CAAA;IACzCwB,YAAAA,QAAQ,GAAG,IAAI;IACjB,WAAC,MAAM;IACLJ,YAAAA,YAAY,EAAE;IAChB;IACF;YAEA,IAAI,CAACI,QAAQ,EAAE;cACbvB,KAAK,CAAC3P,IAAI,CAAC;IACT+Q,YAAAA,SAAS,EAAE,GAAG;IACdX,YAAAA,WAAW,EAAE,IAAI;IACjBa,YAAAA,KAAK,EAAE,CAAC;IACRhB,YAAAA,MAAM,EAAEP;IACT,WAAA,CAAC;IACFA,UAAAA,SAAS,GAAG,EAAE;IAChB;IAEA7C,QAAAA,MAAM,IAAI+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;YACvBwF,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC0B,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,CAAC;IACrC,QAAA,SAASc,KAAK;IAChB;IAEA;IACA+O,MAAAA,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAACzC,OAAO,CAAChC,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IAC1D,MAAA,IAAIqK,GAAG,EAAE;YACPrK,MAAM,GAAGA,MAAM,CAAC2I,MAAM,CAAC0B,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM,CAAC;IACrC8M,QAAAA,MAAM,IAAI+C,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;YACvB2P,SAAS,IAAI,IAAI,CAACjI,mBAAmB,CAACzC,OAAO,CAAC/B,WAAW,CAACqC,OAAO,CAAC,YAAY,EAAE,CAAC8F,GAAG,EAAEC,EAAE,KAAKpF,UAAU,CAAC2J,GAAG,CAACvE,EAAE,CAAC,CAAC,CAAC;IACjH,QAAA,SAASxK,KAAK;IAChB;IACA,MAAA,MAAM,gBAAgB;IACxB;QAEA,OAAO8O,KAAK,CAAC5P,MAAM,EAAE;IACnB,MAAA,MAAMiR,KAAK,GAAGrB,KAAK,CAACzG,GAAG,EAAG;UAC1BwG,SAAS,GAAG,GAAGsB,KAAK,CAACf,MAAM,CAAGe,EAAAA,KAAK,CAACZ,WAAW,CAAClC,MAAM,CAAC,CAAC,EAAE8C,KAAK,CAACC,KAAK,CAAC,CAAA,EAAGvB,SAAS,CAAE,CAAA;IACtF;IAEA,IAAA,OAAOA,SAAS;IAClB;IAEQxC,EAAAA,aAAaA,CAACR,SAAe,EAAEG,MAAc,EAAA;QACnD,IAAIM,IAAI,GAAGT,SAAS;IACpB,IAAA,IAAIO,GAAW;QACf,OAAOE,IAAI,IAAIA,IAAI,CAAC/E,UAAU,KAAK,IAAI,CAAChK,CAAC,EAAE;UACzC+O,IAAI,GAAGA,IAAI,CAAC/E,UAAW;IACzB;IACA,IAAA,IAAI+E,IAAI,KAAK,IAAI,EAAE,OAAO,IAAI;QAE9B,IAAIT,SAAS,CAACyE,QAAQ,KAAKC,IAAI,CAACC,SAAS,IAAIxE,MAAM,KAAK,CAAC,EAAE;IACzDI,MAAAA,GAAG,GAAGJ,MAAM;IACZM,MAAAA,IAAI,GAAGT,SAAS;IAClB,KAAC,MAAM,IAAIG,MAAM,GAAG,CAAC,EAAE;UACrBM,IAAI,GAAGT,SAAS,CAACnC,UAAU,CAACsC,MAAM,GAAG,CAAC,CAAC;IACvCI,MAAAA,GAAG,GAAGE,IAAI,CAACmE,WAAY,CAACvR,MAAM;IAChC,KAAC,MAAM;IACLkN,MAAAA,GAAG,GAAG,CAAC;IACPE,MAAAA,IAAI,GAAGT,SAAS;IAClB;IACA,IAAA,OAAOS,IAAI,CAAC/E,UAAU,KAAK,IAAI,CAAChK,CAAC,EAAE;UACjC,IAAI+O,IAAI,CAACC,eAAe,EAAE;YACxBD,IAAI,GAAGA,IAAI,CAACC,eAAe;IAC3BH,QAAAA,GAAG,IAAIE,IAAI,CAACmE,WAAY,CAACvR,MAAM;IACjC,OAAC,MAAM;YACLoN,IAAI,GAAGA,IAAI,CAAC/E,UAAkC;IAChD;IACF;IACA,IAAA,OAAO6E,GAAG;IACZ;IAEQU,EAAAA,oBAAoBA,CAACX,GAAW,EAAEC,GAAW,EAA4B;IAAA,IAAA,IAA1BsE,gFAAqB,KAAK;IAC/E,IAAA,IAAIvE,GAAG,IAAI,IAAI,CAAC/F,YAAY,CAAClH,MAAM,EAAE;IACnCiN,MAAAA,GAAG,GAAG,IAAI,CAAC/F,YAAY,CAAClH,MAAM,GAAG,CAAC;UAClCkN,GAAG,GAAG,IAAI,CAACjG,KAAK,CAACgG,GAAG,CAAC,CAACjN,MAAM;IAC9B;QACA,IAAIkN,GAAG,GAAG,IAAI,CAACjG,KAAK,CAACgG,GAAG,CAAC,CAACjN,MAAM,EAAE;UAChCkN,GAAG,GAAG,IAAI,CAACjG,KAAK,CAACgG,GAAG,CAAC,CAACjN,MAAM;IAC9B;IACA,IAAA,MAAMqI,UAAU,GAAG,IAAI,CAACnB,YAAY,CAAC+F,GAAG,CAAgB;IACxD,IAAA,IAAIG,IAAI,GAAG/E,UAAU,CAACoC,UAAU;QAEhC,IAAIgH,gBAAgB,GAAG,KAAK;IAC5B,IAAA,IAAIC,EAAE,GAAG;UACPtE,IAAI,EAAE/E,UAAU,CAACoC,UAAU,GAAGpC,UAAU,CAACoC,UAAU,GAAGpC,UAAU;IAChEyE,MAAAA,MAAM,EAAE;SACT;QAED,OAAOM,IAAI,KAAK/E,UAAU,EAAE;UAC1B,IAAI,CAACoJ,gBAAgB,IAAIrE,IAAK,CAACgE,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;IAC1D,QAAA,IAAIlE,IAAK,CAACuE,SAAU,CAAC3R,MAAM,IAAIkN,GAAG,EAAE;cAClC,IAAIsE,SAAS,IAAIpE,IAAK,CAACuE,SAAU,CAAC3R,MAAM,KAAKkN,GAAG,EAAE;IAChDwE,YAAAA,EAAE,GAAG;IAAEtE,cAAAA,IAAI,EAAEA,IAAK;IAAEN,cAAAA,MAAM,EAAEI;iBAAK;IACjCA,YAAAA,GAAG,GAAG,CAAC;IACT,WAAC,MAAM;gBACL,OAAO;IAAEE,cAAAA,IAAI,EAAEA,IAAK;IAAEN,cAAAA,MAAM,EAAEI;iBAAK;IACrC;IACF,SAAC,MAAM;IACLA,UAAAA,GAAG,IAAIE,IAAK,CAACuE,SAAU,CAAC3R,MAAM;IAChC;IACF;IACA,MAAA,IAAI,CAACyR,gBAAgB,IAAIrE,IAAK,CAAC3C,UAAU,EAAE;YACzC2C,IAAI,GAAGA,IAAK,CAAC3C,UAAU;IACzB,OAAC,MAAM,IAAI2C,IAAK,CAAClD,WAAW,EAAE;IAC5BuH,QAAAA,gBAAgB,GAAG,KAAK;YACxBrE,IAAI,GAAGA,IAAK,CAAClD,WAAW;IAC1B,OAAC,MAAM;IACLuH,QAAAA,gBAAgB,GAAG,IAAI;YACvBrE,IAAI,GAAGA,IAAK,CAAC/E,UAAkC;IACjD;IACF;IAEA,IAAA,OAAOqJ,EAAE;IACX;IAEQvC,EAAAA,+BAA+BA,GAAA;QACrC,IAAI,CAACH,cAAc,EAAE;QACrB,IAAI,CAAC4C,kBAAkB,EAAE;QACzB,IAAI,CAAC9G,gBAAgB,EAAE;IACzB;IAEQkE,EAAAA,cAAcA,GAAA;QACpB,IAAI,CAACzH,SAAS,GAAG,IAAIsD,KAAK,CAAC,IAAI,CAAC5D,KAAK,CAACjH,MAAM,CAAC;IAC7C,IAAA,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACwH,SAAS,CAACvH,MAAM,EAAED,CAAC,EAAE,EAAE;IAC9C,MAAA,IAAI,CAACwH,SAAS,CAACxH,CAAC,CAAC,GAAG,KAAK;IAC3B;IACF;IAEQ6R,EAAAA,kBAAkBA,GAAA;IACxB,IAAA,IAAIC,SAAS,GAAG,IAAI,CAACxT,CAAE,CAACyT,iBAAiB,GAAG,IAAI,CAAC7K,KAAK,CAACjH,MAAM;IAC7D,IAAA,IAAI6R,SAAS,EAAE;UACb,IAAIE,gBAAgB,GAAG,CAAC;UACxB,OACEA,gBAAgB,IAAI,IAAI,CAAC9K,KAAK,CAACjH,MAAM,IACrC+R,gBAAgB,IAAI,IAAI,CAAC7K,YAAY,CAAClH,MAAM,IAC5C,IAAI,CAACkH,YAAY,CAAC6K,gBAAgB,CAAC,IACnC,IAAI,CAAC9K,KAAK,CAAC8K,gBAAgB,CAAC,KAAM,IAAI,CAAC7K,YAAY,CAAC6K,gBAAgB,CAAiB,CAACR,WAAW,IACjG,IAAI,CAACpK,SAAS,CAAC4K,gBAAgB,CAAC,KAAM,IAAI,CAAC7K,YAAY,CAAC6K,gBAAgB,CAAiB,CAAC3S,SAAS,EACnG;IACA2S,QAAAA,gBAAgB,EAAE;IACpB;UAEA,IAAIC,eAAe,GAAG,EAAE;IACxB,MAAA,OACE,CAACA,eAAe,GAAG,IAAI,CAAC/K,KAAK,CAACjH,MAAM,IACpC,CAACgS,eAAe,GAAG,IAAI,CAAC9K,YAAY,CAAClH,MAAM,IAC3C,IAAI,CAACiH,KAAK,CAAC,IAAI,CAACA,KAAK,CAACjH,MAAM,GAAGgS,eAAe,CAAC,KAC5C,IAAI,CAAC9K,YAAY,CAAC,IAAI,CAACA,YAAY,CAAClH,MAAM,GAAGgS,eAAe,CAAiB,CAACT,WAAW,IAC5F,IAAI,CAACpK,SAAS,CAAC,IAAI,CAACF,KAAK,CAACjH,MAAM,GAAGgS,eAAe,CAAC,KAChD,IAAI,CAAC9K,YAAY,CAAC,IAAI,CAACA,YAAY,CAAClH,MAAM,GAAGgS,eAAe,CAAiB,CAAC5S,SAAS,EAC1F;IACA4S,QAAAA,eAAe,EAAE;IACnB;IAEA,MAAA,IAAIC,aAAa,GAAG,IAAI,CAAChL,KAAK,CAACjH,MAAM,GAAGgS,eAAe,GAAG,CAAC,GAAGD,gBAAgB;UAC9E,IAAIE,aAAa,GAAG,CAACJ,SAAS,EAAEI,aAAa,GAAG,CAACJ,SAAS;IAC1D,MAAA,IAAII,aAAa,GAAG,CAAC,EAAEA,aAAa,GAAG,CAAC;UAExC,IAAIC,UAAU,GAAG,EAAE;IACnB,MAAA,KAAK,IAAI/G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8G,aAAa,GAAGJ,SAAS,EAAE1G,CAAC,EAAE,EAAE;IAClD+G,QAAAA,UAAU,CAACjS,IAAI,CAAE,IAAI,CAACiH,YAAY,CAAC6K,gBAAgB,GAAG5G,CAAC,CAAiB,CAACoG,WAAW,IAAI,EAAE,CAAC;IAC7F;UACA,IAAI,CAACjD,WAAW,CAACyD,gBAAgB,EAAEE,aAAa,EAAEC,UAAU,EAAE,KAAK,CAAC;IACtE,KAAC,MAAM;IACL,MAAA,KAAK,IAAIC,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAG,IAAI,CAACjL,YAAY,CAAClH,MAAM,EAAEmS,IAAI,EAAE,EAAE;IAC1D,QAAA,IAAI9T,CAAC,GAAG,IAAI,CAAC6I,YAAY,CAACiL,IAAI,CAAgB;IAC9C,QAAA,IAAIC,EAAE,GAAG/T,CAAC,CAACkT,WAAW,IAAI,EAAE;IAC5B,QAAA,IAAI,IAAI,CAACtK,KAAK,CAACkL,IAAI,CAAC,KAAKC,EAAE,IAAI,IAAI,CAACjL,SAAS,CAACgL,IAAI,CAAC,KAAK9T,CAAC,CAACe,SAAS,EAAE;IACnE,UAAA,IAAI,CAAC6H,KAAK,CAACkL,IAAI,CAAC,GAAGC,EAAE;cACrB,IAAI,CAACjL,SAAS,CAACgL,IAAI,CAAC,GAAG9T,CAAC,CAACe,SAAS;IAClC,UAAA,IAAI,CAACmI,SAAS,CAAC4K,IAAI,CAAC,GAAG,IAAI;IAC7B;IACF;IACF;IACF;MAEQlD,mBAAmBA,CAACoD,GAAa,EAAA;QACvC,IAAI,CAACA,GAAG,EAAE;QAEV,IAAI,CAACT,kBAAkB,EAAE;QAEzB,IAAIU,eAAe,GAAmB,KAAK;IAC3C,IAAA,IAAIC,SAAS,GAAGF,GAAG,CAACnF,GAAG,GAAG,CAAC,GAAGmF,GAAG,CAACpF,GAAG,GAAGoF,GAAG,CAACpF,GAAG,GAAG,CAAC;IACnD,IAAA,QAAQ,IAAI,CAAC9F,SAAS,CAACoL,SAAS,CAAC;IAC/B,MAAA,KAAK,MAAM;IACTD,QAAAA,eAAe,GAAG,MAAM;IACxB,QAAA;IACF,MAAA,KAAK,MAAM;IACTA,QAAAA,eAAe,GAAG,MAAM;IACxB,QAAA;IACF,MAAA,KAAK,gBAAgB;IACnBA,QAAAA,eAAe,GAAG,gBAAgB;IAClC,QAAA;IACJ;QAEA,IAAIrL,KAAK,GAAG,IAAI,CAACA,KAAK,CAACoL,GAAG,CAACpF,GAAG,CAAC,CAAC1H,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC3F,KAAK,CAAC,gBAAgB,CAAC;IAC9E,IAAA,IAAIqH,KAAK,CAACjH,MAAM,GAAG,CAAC,EAAE;IACpB,MAAA,IAAI,CAACsO,WAAW,CAAC+D,GAAG,CAACpF,GAAG,EAAE,CAAC,EAAEhG,KAAK,EAAE,IAAI,CAAC;UACzCoL,GAAG,CAACpF,GAAG,EAAE;UACToF,GAAG,CAACnF,GAAG,GAAG,CAAC;IACb;IAEA,IAAA,IAAIoF,eAAe,EAAE;UACnB,IAAIlH,OAAO,GAAGrI,WAAW,CAACuP,eAAe,CAAC,CAACrP,MAAM,CAACmJ,IAAI,CAAC,IAAI,CAACnF,KAAK,CAACoL,GAAG,CAACpF,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/E,MAAA,IAAI7B,OAAO,EAAE;IACX,QAAA,IAAIA,OAAO,CAAC,CAAC,CAAC,EAAE;cACd,IAAIkH,eAAe,KAAK,MAAM,EAAE;IAC9BlH,YAAAA,OAAO,CAAC,CAAC,CAAC,GAAGA,OAAO,CAAC,CAAC,CAAC,CAAC7F,OAAO,CAAC,SAAS,EAAGyK,MAAM,IAAI;kBACpD,OAAO,CAACxE,QAAQ,CAACwE,MAAM,CAAC,GAAG,CAAC,EAAEnE,QAAQ,EAAE;IAC1C,aAAC,CAAC;IACJ;cACA,IAAI,CAAC5E,KAAK,CAACoL,GAAG,CAACpF,GAAG,CAAC,GAAG,CAAA,EAAG7B,OAAO,CAAC,CAAC,CAAC,CAAA,EAAG,IAAI,CAACnE,KAAK,CAACoL,GAAG,CAACpF,GAAG,CAAC,CAAE,CAAA;cAC3D,IAAI,CAAC1F,SAAS,CAAC8K,GAAG,CAACpF,GAAG,CAAC,GAAG,IAAI;cAC9BoF,GAAG,CAACnF,GAAG,GAAG9B,OAAO,CAAC,CAAC,CAAC,CAACpL,MAAM;IAC7B,SAAC,MAAM;cACL,IAAI,CAACiH,KAAK,CAACoL,GAAG,CAACpF,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;cAC5B,IAAI,CAAC1F,SAAS,CAAC8K,GAAG,CAACpF,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI;IACpC;IACF;IACF;QACA,IAAI,CAACnC,gBAAgB,EAAE;IACzB;MAEQwD,WAAWA,CACjBkE,SAAiB,EAGiB;IAAA,IAAA,IAFlCP,aAAwB,GAAArM,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAAA,CAAC;IAAA,IAAA,IACzB6M,aAA0B,GAAA7M,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAAA,EAAE;IAAA,IAAA,IAC5B8M,kBAAA,GAAA9M,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAA8B,IAAI;IAElC,IAAA,IAAI8M,kBAAkB,EAAE;UACtB,KAAK,IAAI3S,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkS,aAAa,EAAElS,CAAC,EAAE,EAAE;IACtC,QAAA,IAAI,CAAC1B,CAAE,CAACqM,WAAW,CAAC,IAAI,CAACrM,CAAE,CAACmM,UAAU,CAACgI,SAAS,CAAC,CAAC;IACpD;IACF;QAEA,IAAIG,aAAa,GAAG,EAAE;QACtB,IAAIC,aAAa,GAAG,EAAE;IAEtB,IAAA,KAAK,IAAI7S,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0S,aAAa,CAACzS,MAAM,EAAED,CAAC,EAAE,EAAE;IAC7C4S,MAAAA,aAAa,CAAC1S,IAAI,CAAC,EAAE,CAAC;IACtB2S,MAAAA,aAAa,CAAC3S,IAAI,CAAC,IAAI,CAAC;IACxB,MAAA,IAAIyS,kBAAkB,EAAE;YACtB,IAAI,IAAI,CAACrU,CAAE,CAACmM,UAAU,CAACgI,SAAS,CAAC,EAC/B,IAAI,CAACnU,CAAE,CAAC8L,YAAY,CAACxL,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAACd,CAAE,CAACmM,UAAU,CAACgI,SAAS,CAAC,CAAC,CAAC,KAChF,IAAI,CAACnU,CAAE,CAACkB,WAAW,CAACZ,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC,CAAC;IACzD;IACF;QAEA,IAAI,CAAC8H,KAAK,CAAC4L,MAAM,CAACL,SAAS,EAAEP,aAAa,EAAE,GAAGQ,aAAa,CAAC;QAC7D,IAAI,CAACtL,SAAS,CAAC0L,MAAM,CAACL,SAAS,EAAEP,aAAa,EAAE,GAAGU,aAAa,CAAC;QACjE,IAAI,CAACpL,SAAS,CAACsL,MAAM,CAACL,SAAS,EAAEP,aAAa,EAAE,GAAGW,aAAa,CAAC;IACnE;IAEQ1D,EAAAA,gBAAgBA,GAAA;QACtB,MAAM4D,gBAAgB,GAAGjI,KAAK,CAACkI,IAAI,CAAC,IAAI,CAAC1U,CAAE,CAACmM,UAAU,CAAC;IAEvD,IAAA,MAAMwI,YAAY,GAAG,UAACC,KAAW,EAA4B;IAC3D,MAAA,MAAMC,MAAM,GAAGD,KAAK,CAAC/T,aAAc;IACnC,MAAA,MAAMgL,WAAW,GAAG+I,KAAK,CAAC/I,WAAW;IACrCgJ,MAAAA,MAAM,CAACxI,WAAW,CAACuI,KAAK,CAAC;UAAC,KAAAE,IAAAA,IAAA,GAAAvN,SAAA,CAAA5F,MAAA,EAHUoT,WAAmB,OAAAvI,KAAA,CAAAsI,IAAA,GAAAA,CAAAA,GAAAA,IAAA,WAAAE,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA,EAAA,EAAA;IAAnBD,QAAAA,WAAmB,CAAAC,IAAA,GAAAzN,CAAAA,CAAAA,GAAAA,SAAA,CAAAyN,IAAA,CAAA;IAAA;UAIvDD,WAAW,CAACE,OAAO,CAAEC,QAAQ,IAC3BrJ,WAAW,GAAGgJ,MAAM,CAAC/I,YAAY,CAACoJ,QAAQ,EAAErJ,WAAW,CAAC,GAAGgJ,MAAM,CAAC3T,WAAW,CAACgU,QAAQ,CAAC,CACxF;SACF;IAEDT,IAAAA,gBAAgB,CAACQ,OAAO,CAAEL,KAAK,IAAI;IACjC,MAAA,IAAIA,KAAK,CAAC7B,QAAQ,KAAKC,IAAI,CAACmC,YAAY,IAAKP,KAAqB,CAAC7K,OAAO,KAAK,KAAK,EAAE;IACpF,QAAA,MAAMqL,UAAU,GAAG9U,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IAChD6T,QAAAA,YAAY,CAACC,KAAK,EAAEQ,UAAU,CAAC;IAC/BA,QAAAA,UAAU,CAAClU,WAAW,CAAC0T,KAAK,CAAC;WAC9B,MAAM,IAAIA,KAAK,CAACzI,UAAU,CAACxK,MAAM,KAAK,CAAC,EAAE;YACxCiT,KAAK,CAAC1T,WAAW,CAACZ,QAAQ,CAACQ,aAAa,CAAC,IAAI,CAAC,CAAC;IACjD,OAAC,MAAM;YACL,MAAMuU,aAAa,GAAG7I,KAAK,CAACkI,IAAI,CAACE,KAAK,CAACzI,UAAU,CAAC;YAClD,IACEkJ,aAAa,CAACC,IAAI,CACfC,UAAU,IACTA,UAAU,CAACxC,QAAQ,KAAKC,IAAI,CAACmC,YAAY,IAAKI,UAA0B,CAACxL,OAAO,KAAK,KAAK,CAC7F,EACD;IACA,UAAA,OAAO4K,YAAY,CAACC,KAAK,EAAE,GAAGS,aAAa,CAAC;IAC9C;IACF;IACF,KAAC,CAAC;IACJ;IAEQzD,EAAAA,gBAAgBA,CAACP,cAAsB,EAAEmE,OAAgB,EAAA;IAC/D;IACA,IAAA,IAAIC,UAAU,GAAGD,OAAO,GAAG,CAAC,GAAG,CAAC;QAChC,IAAIE,MAAM,GAAGrE,cAAc,CAACvB,MAAM,CAAC,CAAC,EAAE2F,UAAU,CAAC;IACjD,IAAA,IAAI3N,IAAI,GAAG0N,OAAO,GAAG,SAAS,GAAG,QAAQ;QACzC,IAAIG,aAAa,GAAGF,UAAU;QAE9B,IAAIG,YAAY,GAAG,CAAC;QACpB,IAAIC,QAAQ,GAAmB,KAAK;QACpC,IAAIC,OAAO,GAAmB,KAAK;QACnC,IAAInP,SAAS,GAAa,EAAE;QAC5B,IAAIoP,WAAW,GAAa,EAAE;QAE9BC,SAAS,EAAE,OACTL,aAAa,GAAGtE,cAAc,CAAC1P,MAAM,IACrCkU,QAAQ,KAAK,KAAK,EAClB;IACA,MAAA,IAAI1O,MAAM,GAAGkK,cAAc,CAACvB,MAAM,CAAC6F,aAAa,CAAC;IAEjD;IACA,MAAA,KAAK,IAAI5O,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;IACvD,QAAA,IAAIyK,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAACtC,IAAI,CAAC,CAACnC,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IAC5D,QAAA,IAAIqK,GAAG,EAAE;IACPmE,UAAAA,aAAa,IAAInE,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9B,UAAA,SAASqU,SAAS;IACpB;IACF;IAEA;IACA,MAAA,IAAI7O,MAAM,CAACtF,KAAK,CAAC,IAAI,CAACwH,mBAAmB,CAAC3C,SAAS,CAAC9B,MAAM,CAAC,EAAE;IAC3DgR,QAAAA,YAAY,EAAE;IACdD,QAAAA,aAAa,IAAI,CAAC;IAClB,QAAA,SAASK,SAAS;IACpB;IAEA;IACA,MAAA,IAAI7O,MAAM,CAACtF,KAAK,CAAC,IAAI,CAACwH,mBAAmB,CAAC5C,QAAQ,CAAC7B,MAAM,CAAC,EAAE;IAC1DgR,QAAAA,YAAY,EAAE;YACd,IAAI,CAACJ,OAAO,EAAE;cACZ,IAAI,IAAI,CAAC5D,gBAAgB,CAACzK,MAAM,EAAE,KAAK,CAAC,EAAE;IACxC,YAAA,OAAO,KAAK;IACd;IACF;IACAwO,QAAAA,aAAa,IAAI,CAAC;IAClB,QAAA,SAASK,SAAS;IACpB;IAEA;IACA,MAAA,IAAI7O,MAAM,CAACtF,KAAK,CAAC,KAAK,CAAC,EAAE;IACvB+T,QAAAA,YAAY,EAAE;YACd,IAAIA,YAAY,KAAK,CAAC,EAAE;cACtBC,QAAQ,GAAGxE,cAAc,CAACvB,MAAM,CAAC2F,UAAU,EAAEE,aAAa,GAAGF,UAAU,CAAC;IACxEE,UAAAA,aAAa,EAAE;IACf,UAAA,SAASK,SAAS;IACpB;IACF;IAEA;IACAL,MAAAA,aAAa,EAAE;IACjB;IAEA;IACA,IAAA,IAAIE,QAAQ,KAAK,KAAK,EAAE,OAAO,KAAK;IAEpC;IACA,IAAA,IAAII,QAAQ,GAAGN,aAAa,GAAGtE,cAAc,CAAC1P,MAAM,GAAG0P,cAAc,CAACvB,MAAM,CAAC6F,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE;IAEnG;QACA,IAAIM,QAAQ,KAAK,GAAG,EAAE;IACpB,MAAA,IAAI9O,MAAM,GAAGkK,cAAc,CAACvB,MAAM,CAAC6F,aAAa,CAAC;IACjD,MAAA,IAAInE,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAAC1C,SAAS,CAAC/B,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IAChE,MAAA,IAAIqK,GAAG,EAAE;IACPmE,QAAAA,aAAa,IAAInE,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9BgF,QAAAA,SAAS,CAAC/E,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,IAAIA,GAAG,CAAC,IAAI,CAACnI,mBAAmB,CAAC1C,SAAS,CAACX,gBAAiB,CAAC,EAAE;cAC7D8P,OAAO,GAAGtE,GAAG,CAAC,IAAI,CAACnI,mBAAmB,CAAC1C,SAAS,CAACX,gBAAiB,CAAC;IACrE,SAAC,MAAM;IACL8P,UAAAA,OAAO,GAAGD,QAAQ,CAACK,IAAI,EAAE;IAC3B;IACF,OAAC,MAAM;IACL,QAAA,OAAO,KAAK;IACd;IACF,KAAC,MAAM,IAAID,QAAQ,KAAK,GAAG,EAAE;IAC3B;IACAH,MAAAA,OAAO,GAAGD,QAAQ,CAACK,IAAI,EAAE;IAC3B,KAAC,MAAM;IACL;IACAP,MAAAA,aAAa,EAAE;UACf,IAAIQ,gBAAgB,GAAG,CAAC;UAExBC,WAAW,EAAE,OAAOT,aAAa,GAAGtE,cAAc,CAAC1P,MAAM,IAAIwU,gBAAgB,GAAG,CAAC,EAAE;IACjF,QAAA,IAAIhP,MAAM,GAAGkK,cAAc,CAACvB,MAAM,CAAC6F,aAAa,CAAC;IAEjD;IACA,QAAA,IAAInE,GAAG,GAAG,MAAM,CAACzD,IAAI,CAAC5G,MAAM,CAAC;IAC7B,QAAA,IAAIqK,GAAG,EAAE;cACP,QAAQuE,WAAW,CAACpU,MAAM;IACxB,YAAA,KAAK,CAAC;IACJoU,cAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,cAAA;IACF,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,cAAA;IACF,YAAA,KAAK,CAAC;kBACJ,IAAIuE,WAAW,CAAC,CAAC,CAAC,CAAClU,KAAK,CAAC,GAAG,CAAC,EAAE;IAC7BkU,gBAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,eAAC,MAAM;IACL,gBAAA,IAAI2E,gBAAgB,KAAK,CAAC,EAAE,OAAO,KAAK;IACxCJ,gBAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACpBmU,gBAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B;IACA,cAAA;IACF,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,cAAA;IACF,YAAA,KAAK,CAAC;IACJ,cAAA,OAAO,KAAK;IACd,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA;IACE,cAAA,OAAO,KAAK;IAChB;IACAmE,UAAAA,aAAa,IAAInE,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9B,UAAA,SAASyU,WAAW;IACtB;IAEA;IACA5E,QAAAA,GAAG,GAAG,IAAI,CAACnI,mBAAmB,CAAC/C,MAAM,CAAC1B,MAAM,CAACmJ,IAAI,CAAC5G,MAAM,CAAC;IACzD,QAAA,IAAIqK,GAAG,EAAE;cACP,QAAQuE,WAAW,CAACpU,MAAM;IACxB,YAAA,KAAK,CAAC;IACJoU,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,cAAA;IACF,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA,KAAK,CAAC;IACJ,cAAA,OAAO,KAAK;IACd,YAAA,KAAK,CAAC;IACJ,cAAA,OAAO,KAAK;IACd,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA;IACE,cAAA,OAAO,KAAK;IAChB;IACAmE,UAAAA,aAAa,IAAInE,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9B,UAAA,SAASyU,WAAW;IACtB;IAEA;IACA,QAAA,IAAIL,WAAW,CAACpU,MAAM,GAAG,CAAC,IAAIwF,MAAM,CAACtF,KAAK,CAAC,IAAI,CAAC,EAAE;cAChD,IAAIkU,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IAClDmU,UAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAAC,GAAG,CAAC;IAC3C2T,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;IAEA;IACA,QAAA,IAAI,CAACL,WAAW,CAACpU,MAAM,KAAK,CAAC,IAAIoU,WAAW,CAACpU,MAAM,KAAK,CAAC,KAAKwF,MAAM,CAACtF,KAAK,CAAC,IAAI,CAAC,EAAE;cAChF,IAAIkU,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IAClDmU,UAAAA,WAAW,CAACnU,IAAI,CAAC,GAAG,CAAC;IACrB+T,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;IAEA;IACA5E,QAAAA,GAAG,GAAG,OAAO,CAACzD,IAAI,CAAC5G,MAAM,CAAC;YAC1B,IAAIqK,GAAG,KAAKuE,WAAW,CAACpU,MAAM,KAAK,CAAC,IAAIoU,WAAW,CAACpU,MAAM,KAAK,CAAC,IAAIoU,WAAW,CAACpU,MAAM,KAAK,CAAC,CAAC,EAAE;cAC7F,OAAOoU,WAAW,CAACpU,MAAM,GAAG,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACnDmU,UAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxBmE,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;YAEA,IAAI5E,GAAG,KAAKuE,WAAW,CAACpU,MAAM,KAAK,CAAC,IAAIoU,WAAW,CAACpU,MAAM,KAAK,CAAC,CAAC,IAAIoU,WAAW,CAAC,CAAC,CAAC,KAAKvE,GAAG,CAAC,CAAC,CAAC,EAAE;cAC9F,IAAIuE,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IAClDmU,UAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxBmE,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;IAEA;IACA,QAAA,IAAIjP,MAAM,CAACtF,KAAK,CAAC,KAAK,CAAC,EAAE;cACvB,QAAQkU,WAAW,CAACpU,MAAM;IACxB,YAAA,KAAK,CAAC;IACJoU,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAAC,GAAG,CAAC;IAC3C,cAAA,IAAI,CAAC+T,WAAW,CAAC,CAAC,CAAC,CAAClU,KAAK,CAAC,IAAI,CAAC,EAAEsU,gBAAgB,EAAE;IACnD,cAAA;IACF,YAAA,KAAK,CAAC;IACJJ,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAACnU,IAAI,CAAC,GAAG,CAAC;IACrB,cAAA;IACF,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;kBACJ,IAAImU,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,OAAO,KAAK;IACxCA,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAAC,GAAG,CAAC;IAC3C,cAAA;IACF,YAAA;IACE,cAAA,OAAO,KAAK;IAChB;IACA2T,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;IAEA;IACA,QAAA,IAAIjP,MAAM,CAACtF,KAAK,CAAC,KAAK,CAAC,EAAE;IACvB,UAAA,IAAIkU,WAAW,CAACpU,MAAM,IAAI,CAAC,EAAE;gBAC3B,OAAOoU,WAAW,CAACpU,MAAM,GAAG,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACnD,YAAA,IAAI,CAACmU,WAAW,CAAC,CAAC,CAAC,CAAClU,KAAK,CAAC,IAAI,CAAC,EAAEsU,gBAAgB,EAAE;gBACnD,IAAIA,gBAAgB,GAAG,CAAC,EAAE;IACxBJ,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAAC,GAAG,CAAC;IAC7C;IACF,WAAC,MAAM,IAAI+T,WAAW,CAACpU,MAAM,KAAK,CAAC,IAAIoU,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAE;IAC/D,YAAA,IAAIoU,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;kBAC1B,IAAIA,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IAClDmU,cAAAA,WAAW,CAACnU,IAAI,CAAC,GAAG,CAAC;IACvB,aAAC,MAAM;kBACL,IAAImU,WAAW,CAACpU,MAAM,KAAK,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,GAAG,CAAC,CAAC,KAC/CmU,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAAC,GAAG,CAAC;IAClD;IACF,WAAC,MAAM;IACLmU,YAAAA,gBAAgB,EAAE;IACpB;cAEA,IAAIA,gBAAgB,KAAK,CAAC,EAAE;gBAC1B,OAAOJ,WAAW,CAACpU,MAAM,GAAG,CAAC,EAAEoU,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACrD;IAEA+T,UAAAA,aAAa,EAAE;IACf,UAAA,SAASS,WAAW;IACtB;IAEA;IACA5E,QAAAA,GAAG,GAAG,IAAI,CAACzD,IAAI,CAAC5G,MAAM,CAAC;IACvB,QAAA,IAAIqK,GAAG,EAAE;cACP,QAAQuE,WAAW,CAACpU,MAAM;IACxB,YAAA,KAAK,CAAC;IACJoU,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAACnU,IAAI,CAAC4P,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,cAAA;IACF,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA,KAAK,CAAC;IACJ,cAAA,OAAO,KAAK;IACd,YAAA,KAAK,CAAC;IACJ,cAAA,OAAO,KAAK;IACd,YAAA,KAAK,CAAC;IACJuE,cAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB,YAAA,KAAK,CAAC;IACJmU,cAAAA,WAAW,CAAC,CAAC,CAAC,GAAGA,WAAW,CAAC,CAAC,CAAC,CAAC/T,MAAM,CAACwP,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAA;IACF,YAAA;IACE,cAAA,OAAO,KAAK;IAChB;IACAmE,UAAAA,aAAa,IAAInE,GAAG,CAAC,CAAC,CAAC,CAAC7P,MAAM;IAC9B,UAAA,SAASyU,WAAW;IACtB;IACA,QAAA,MAAM,eAAe;IACvB;IACA,MAAA,IAAID,gBAAgB,GAAG,CAAC,EAAE,OAAO,KAAK;IACxC;QAEA,IAAIL,OAAO,KAAK,KAAK,EAAE;IACrB;UACA,IAAIO,KAAK,GAAG,KAAK;IACjB,MAAA,KAAK,IAAIC,KAAK,IAAI,IAAI,CAACrN,UAAU,EAAE;YACjC,IAAIqN,KAAK,KAAKR,OAAO,EAAE;IACrBO,UAAAA,KAAK,GAAG,IAAI;IACZ,UAAA;IACF;IACF;IACA,MAAA,IAAIE,UAAU,GAAGF,KAAK,GAAG,+BAA+B,GAAG,iCAAiC;IAC5F,MAAA,IAAIxE,MAAM,GAAG,CAA8B/J,2BAAAA,EAAAA,IAAI,KAAK4N,MAAM,CAAA,oBAAA,EAAuB5N,IAAI,CAAA,CAAA,EACnFnB,SAAS,CAAChF,MAAM,GAAG,CAAC,IAAI,CAACgF,SAAS,CAAC,CAAC,CAAC,GAAG4P,UAAU,GAAG,EACvD,CAAA,EAAA,EAAK,IAAI,CAACnJ,mBAAmB,CAACyI,QAAQ,CAAC,CAAA,kCAAA,EAAqC/N,IAAI,CAAY,UAAA,CAAA;IAE5F,MAAA,IAAInB,SAAS,CAAChF,MAAM,IAAI,CAAC,EAAE;IACzBkQ,QAAAA,MAAM,GAAGA,MAAM,CAAC7P,MAAM,CACpB,CAAA,2BAAA,EAA8B8F,IAAI,CAAA,EAAA,EAAKnB,SAAS,CAAC,CAAC,CAAC,SAAS,EAC5D,CAAA,aAAA,EAAgB4P,UAAU,CAAA,EAAA,EAAK5P,SAAS,CAAC,CAAC,CAAC,SAAS,EACpD,CAAA,2BAAA,EAA8BmB,IAAI,CAAA,EAAA,EAAKnB,SAAS,CAAC,CAAC,CAAC,SAAS,CAC7D;IACH;UACA,OAAO;IACLkL,QAAAA,MAAM,EAAEA,MAAM;IACdC,QAAAA,SAAS,EAAE6D;WACZ;IACH,KAAC,MAAM,IAAII,WAAW,CAACpU,MAAM,GAAG,CAAC,EAAE;IACjC;IACA,MAAA,OAAOoU,WAAW,CAACpU,MAAM,GAAG,CAAC,EAAE;IAC7BoU,QAAAA,WAAW,CAACnU,IAAI,CAAC,EAAE,CAAC;IACtB;UAEA,OAAO;YACLiQ,MAAM,EAAE,CAA8B/J,2BAAAA,EAAAA,IAAI,CAAK4N,EAAAA,EAAAA,MAAM,CAAuB5N,oBAAAA,EAAAA,IAAI,CAAK,EAAA,EAAA,IAAI,CAACsF,mBAAmB,CAC3GyI,QAAQ,CACT,CAAA,kCAAA,EAAqC/N,IAAI,CAAA,IAAA,EACxCiO,WAAW,CAAC,CAAC,CACf,CAAuBjO,oBAAAA,EAAAA,IAAI,CACzBiO,aAAAA,EAAAA,WAAW,CAAC,CAAC,CACf,CAAA,kCAAA,EAAqCjO,IAAI,CAAA,EAAA,EAAKiO,WAAW,CAAC,CAAC,CAAC,CAC1DA,EAAAA,WAAW,CAAC,CAAC,CACf,CAAA,EAAGA,WAAW,CAAC,CAAC,CAAC,CAAuBjO,oBAAAA,EAAAA,IAAI,CAC1CiO,OAAAA,EAAAA,WAAW,CAAC,CAAC,CACf,CAAA,kCAAA,EAAqCjO,IAAI,CAAA,EAAA,EAAKiO,WAAW,CAAC,CAAC,CAAC,CAAU,QAAA,CAAA;IACtEjE,QAAAA,SAAS,EAAE6D;WACZ;IACH;IAEA,IAAA,OAAO,KAAK;IACd;IAEQa,EAAAA,qBAAqBA,CAACC,KAAkB,EAAEC,KAAkB,EAAA;IAClE,IAAA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,EAAE,OAAO,IAAI;IACjC,IAAA,IAAID,KAAK,KAAKC,KAAK,EAAE,OAAOD,KAAK;QACjC,MAAME,QAAQ,GAAI5H,IAAU,IAAI;UAC9B,IAAI4H,QAAQ,GAAG,EAAE;IACjB,MAAA,OAAO5H,IAAI,EAAE;IACX4H,QAAAA,QAAQ,CAACC,OAAO,CAAC7H,IAAI,CAAC;YACtBA,IAAI,GAAGA,IAAI,CAAC/E,UAAW;IACzB;IACA,MAAA,OAAO2M,QAAQ;SAChB;IAED,IAAA,MAAME,SAAS,GAAGF,QAAQ,CAACF,KAAK,CAAC;IACjC,IAAA,MAAMK,SAAS,GAAGH,QAAQ,CAACD,KAAK,CAAC;QAEjC,IAAIG,SAAS,CAAC,CAAC,CAAC,KAAKC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC9C,IAAA,IAAIpV,CAAC;IACL,IAAA,KAAKA,CAAC,GAAG,CAAC,EAAEmV,SAAS,CAACnV,CAAC,CAAC,KAAKoV,SAAS,CAACpV,CAAC,CAAC,EAAEA,CAAC,EAAE,CAAC;IAC/C,IAAA,OAAOmV,SAAS,CAACnV,CAAC,GAAG,CAAC,CAAC;IACzB;IAEQqV,EAAAA,0BAA0BA,CAACxX,KAAe,EAAEC,MAAuB,EAAEuB,SAAiB,EAAA;QAC5F,IAAIgO,IAAI,GAAG,IAAI;IACf,IAAA,IAAI,CAACxP,KAAK,EAAE,OAAO,IAAI;QACvB,IAAI,CAACC,MAAM,EAAE;IACX,MAAA,MAAMwU,GAAG,GAAG3F,MAAM,CAAC1D,YAAY,EAAE;UACjC,IAAI,CAACqJ,GAAG,IAAI,CAACA,GAAG,CAACxF,SAAS,EAAE,OAAO,IAAI;UACvCO,IAAI,GAAGiF,GAAG,CAACxF,SAAS;IACtB,KAAC,MAAM;UACL,IAAIjP,KAAK,CAACqP,GAAG,KAAKpP,MAAM,CAACoP,GAAG,EAAE,OAAO,IAAI;IACzC,MAAA,MAAMoF,GAAG,GAAG3F,MAAM,CAAC1D,YAAY,EAAE;IACjC,MAAA,IAAI,CAACqJ,GAAG,EAAE,OAAO,IAAI;IACrBjF,MAAAA,IAAI,GAAG,IAAI,CAACyH,qBAAqB,CAACxC,GAAG,CAACxF,SAAS,EAAEwF,GAAG,CAACzF,UAAU,CAAC;IAClE;IACA,IAAA,IAAI,CAACQ,IAAI,EAAE,OAAO,IAAI;IACtB,IAAA,OAAOA,IAAI,KAAK,IAAI,CAAC/O,CAAC,EAAE;IACtB,MAAA,IAAK+O,IAAoB,CAAChO,SAAS,IAAKgO,IAAoB,CAAChO,SAAS,CAACiW,QAAQ,CAACjW,SAAS,CAAC,EAAE,OAAOgO,IAAI;UACvGA,IAAI,GAAGA,IAAI,CAAC/E,UAAW;IACzB;IACA,IAAA,OAAO,IAAI;IACb;IAEOiN,EAAAA,eAAeA,GAA8D;IAAA,IAAA,IAA7D1X,KAAA,GAAAgI,SAAA,CAAA5F,MAAA,GAAA,CAAA,IAAA4F,SAAA,CAAA,CAAA,CAAA,KAAA/E,SAAA,GAAA+E,SAAA,CAAA,CAAA,CAAA,GAAyB,IAAI;IAAA,IAAA,IAAE/H,6EAA0B,IAAI;QAClF,IAAI+C,YAAY,GAAmC,EAAE;QACrD,IAAI,CAAChD,KAAK,EAAEA,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;QAC5C,IAAI,CAACnL,MAAM,EAAEA,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;QAC7C,IAAI,CAACpL,KAAK,EAAE;IACV,MAAA,KAAK,IAAI2X,GAAG,IAAIjX,QAAQ,EAAE;IACxBsC,QAAAA,YAAY,CAAC2U,GAAG,CAAC,GAAG,IAAI;IAC1B;IACA,MAAA,OAAO3U,YAAY;IACrB;IACA,IAAA,IAAI,CAAC/C,MAAM,EAAEA,MAAM,GAAGD,KAAK;QAE3B,IAAI2G,KAAe,EAAEC,GAAa;QAClC,IAAI3G,MAAM,CAACoP,GAAG,GAAGrP,KAAK,CAACqP,GAAG,IAAKpP,MAAM,CAACoP,GAAG,KAAKrP,KAAK,CAACqP,GAAG,IAAIpP,MAAM,CAACqP,GAAG,GAAGtP,KAAK,CAACsP,GAAI,EAAE;IAClF3I,MAAAA,KAAK,GAAG1G,MAAM;IACd2G,MAAAA,GAAG,GAAG5G,KAAK;IACb,KAAC,MAAM;IACL2G,MAAAA,KAAK,GAAG3G,KAAK;IACb4G,MAAAA,GAAG,GAAG3G,MAAM;IACd;IACA,IAAA,IAAI2G,GAAG,CAACyI,GAAG,GAAG1I,KAAK,CAAC0I,GAAG,IAAIzI,GAAG,CAAC0I,GAAG,KAAK,CAAC,EAAE;UACxC1I,GAAG,CAACyI,GAAG,EAAE;IACTzI,MAAAA,GAAG,CAAC0I,GAAG,GAAG,IAAI,CAACjG,KAAK,CAACzC,GAAG,CAACyI,GAAG,CAAC,CAACjN,MAAM;IACtC;IAEA,IAAA,KAAK,IAAIuV,GAAG,IAAIjX,QAAQ,EAAE;UACxB,IAAIA,QAAQ,CAACiX,GAAG,CAAC,CAACpP,IAAI,KAAK,QAAQ,EAAE;IACnC,QAAA,IAAI,CAACvI,KAAK,IAAIA,KAAK,CAACqP,GAAG,KAAKpP,MAAO,CAACoP,GAAG,IAAI,CAAC,IAAI,CAACxP,yBAAyB,EAAE,EAAE;IAC5EmD,UAAAA,YAAY,CAAC2U,GAAG,CAAC,GAAG,IAAI;IAC1B,SAAC,MAAM;IACL3U,UAAAA,YAAY,CAAC2U,GAAG,CAAC,GACf,CAAC,CAAC,IAAI,CAACH,0BAA0B,CAACxX,KAAK,EAAEC,MAAM,EAAES,QAAQ,CAACiX,GAAG,CAAC,CAACnW,SAAS,CAAC,IACxExB,KAAK,CAACsP,GAAG,KAAKrP,MAAO,CAACqP,GAAG,IACxB,CAAC,CAAC,IAAI,CAACjG,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAAC,CAAC,EAAEvQ,KAAK,CAACsP,GAAG,CAAC,CAAChN,KAAK,CAAC5B,QAAQ,CAACiX,GAAG,CAAC,CAAChP,KAAK,CAACC,UAAU,CAAC,IAClF,CAAC,CAAC,IAAI,CAACS,KAAK,CAACrJ,KAAK,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAACvQ,KAAK,CAACsP,GAAG,CAAC,CAAChN,KAAK,CAAC5B,QAAQ,CAACiX,GAAG,CAAC,CAAChP,KAAK,CAACE,WAAW,CAAE;IACvF;IACF;UACA,IAAInI,QAAQ,CAACiX,GAAG,CAAC,CAACpP,IAAI,KAAK,MAAM,EAAE;YACjC,IAAI,CAACvI,KAAK,EAAE;IACVgD,UAAAA,YAAY,CAAC2U,GAAG,CAAC,GAAG,IAAI;IAC1B,SAAC,MAAM;IACL,UAAA,IAAI/W,KAAK,GAAmB,IAAI,CAAC2I,SAAS,CAAC5C,KAAK,CAAC0I,GAAG,CAAC,KAAK3O,QAAQ,CAACiX,GAAG,CAAC,CAACnW,SAAS;IACjF,UAAA,KAAK,IAAI+S,IAAI,GAAG5N,KAAK,CAAC0I,GAAG,EAAEkF,IAAI,IAAI3N,GAAG,CAACyI,GAAG,EAAEkF,IAAI,EAAE,EAAE;IAClD,YAAA,IAAK,IAAI,CAAChL,SAAS,CAACgL,IAAI,CAAC,KAAK7T,QAAQ,CAACiX,GAAG,CAAC,CAACnW,SAAS,KAAMZ,KAAK,EAAE;IAChEA,cAAAA,KAAK,GAAG,IAAI;IACZ,cAAA;IACF;IACF;IACAoC,UAAAA,YAAY,CAAC2U,GAAG,CAAC,GAAG/W,KAAK;IAC3B;IACF;IACF;IACA,IAAA,OAAOoC,YAAY;IACrB;IAEOF,EAAAA,eAAeA,CAACrB,OAAe,EAAEb,KAAc,EAAA;QACpD,IAAI,CAAC,IAAI,CAACyJ,kBAAkB,EAAE,IAAI,CAACY,WAAW,EAAE;QAChD,IAAIvK,QAAQ,CAACe,OAAO,CAAC,CAAC8G,IAAI,KAAK,QAAQ,EAAE;IACvC,MAAA,IAAItI,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;IACpC,MAAA,IAAIpL,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;IACpC,MAAA,IAAI,CAACnL,MAAM,EAAEA,MAAM,GAAGD,KAAK;UAC3B,IAAI,CAACC,MAAM,EAAE;IACb,MAAA,IAAIA,MAAM,CAACoP,GAAG,KAAKrP,KAAM,CAACqP,GAAG,EAAE;IAC/B,MAAA,IAAI,CAAC,IAAI,CAACxP,yBAAyB,EAAE,EAAE;IACvC,MAAA,IAAI+X,UAAU,GAAG,IAAI,CAACJ,0BAA0B,CAACxX,KAAM,EAAEC,MAAM,EAAES,QAAQ,CAACe,OAAO,CAAC,CAACD,SAAS,CAAC;UAC7F,IAAI,CAAC4P,cAAc,EAAE;IAErB,MAAA,IAAIwG,UAAU,EAAE;YACd,IAAI,CAACjO,SAAS,CAAC3J,KAAM,CAACqP,GAAG,CAAC,GAAG,IAAI;YACjC,MAAMsB,QAAQ,GAAG,IAAI,CAACpB,aAAa,CAACqI,UAAU,EAAE,CAAC,CAAE;IACnD,QAAA,MAAMC,GAAG,GAAGD,UAAU,CAACjE,WAAY,CAACvR,MAAM;IAC1C,QAAA,MAAMyO,IAAI,GAAG,IAAI,CAACxH,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAChCkB,MAAM,CAAC,CAAC,EAAEI,QAAQ,CAAC,CACnBhJ,OAAO,CAACjH,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACC,UAAU,EAAE,EAAE,CAAC;IAClD,QAAA,MAAMkI,GAAG,GAAG,IAAI,CAACzH,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAACI,QAAQ,EAAEkH,GAAG,CAAC;IACxD,QAAA,MAAM9G,KAAK,GAAG,IAAI,CAAC1H,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CACjCkB,MAAM,CAACI,QAAQ,GAAGkH,GAAG,CAAC,CACtBlQ,OAAO,CAACjH,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACE,WAAW,EAAE,EAAE,CAAC;IACnD,QAAA,IAAI,CAACQ,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,GAAGwB,IAAI,CAACpO,MAAM,CAACqO,GAAG,EAAEC,KAAK,CAAC;IAChD9Q,QAAAA,MAAM,CAACqP,GAAG,GAAGuB,IAAI,CAACzO,MAAM;IACxBpC,QAAAA,KAAM,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGuI,GAAG;YAC7B,IAAI,CAAC3K,gBAAgB,EAAE;IACvB,QAAA,IAAI,CAACzB,YAAY,CAACzL,KAAM,EAAEC,MAAM,CAAC;YACjC,IAAI,CAACkN,UAAU,EAAE;IACnB,OAAC,MAAM,IACLnN,KAAM,CAACsP,GAAG,KAAKrP,MAAM,CAACqP,GAAG,IACzB,CAAC,CAAC,IAAI,CAACjG,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAAC,CAAC,EAAEvQ,KAAM,CAACsP,GAAG,CAAC,CAAChN,KAAK,CAAC5B,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACC,UAAU,CAAC,IACxF,CAAC,CAAC,IAAI,CAACS,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAACkB,MAAM,CAACvQ,KAAM,CAACsP,GAAG,CAAC,CAAChN,KAAK,CAAC5B,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACE,WAAW,CAAC,EACtF;YACA,IAAI,CAACc,SAAS,CAAC3J,KAAM,CAACqP,GAAG,CAAC,GAAG,IAAI;IACjC,QAAA,MAAMwB,IAAI,GAAG,IAAI,CAACxH,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAChCkB,MAAM,CAAC,CAAC,EAAEvQ,KAAM,CAACsP,GAAG,CAAC,CACrB3H,OAAO,CAACjH,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACC,UAAU,EAAE,EAAE,CAAC;IAClD,QAAA,MAAMmI,KAAK,GAAG,IAAI,CAAC1H,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CACjCkB,MAAM,CAACvQ,KAAM,CAACsP,GAAG,CAAC,CAClB3H,OAAO,CAACjH,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACE,WAAW,EAAE,EAAE,CAAC;IACnD,QAAA,IAAI,CAACQ,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,GAAGwB,IAAI,CAACpO,MAAM,CAACsO,KAAK,CAAC;YAC3C/Q,KAAM,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GAAGuB,IAAI,CAACzO,MAAM;YACrC,IAAI,CAAC8K,gBAAgB,EAAE;IACvB,QAAA,IAAI,CAACzB,YAAY,CAACzL,KAAM,EAAEC,MAAM,CAAC;YACjC,IAAI,CAACkN,UAAU,EAAE;IACnB,OAAC,MAAM;YACL,IAAI;cAAEwD,QAAQ;IAAEC,UAAAA;aAAQ,GACtB5Q,KAAM,CAACsP,GAAG,GAAGrP,MAAM,CAACqP,GAAG,GACnB;cAAEqB,QAAQ,EAAE3Q,KAAM,CAACsP,GAAG;cAAEsB,MAAM,EAAE3Q,MAAM,CAACqP;IAAK,SAAA,GAC5C;cAAEqB,QAAQ,EAAE1Q,MAAM,CAACqP,GAAG;cAAEsB,MAAM,EAAE5Q,KAAM,CAACsP;aAAK;YAElD,IAAIhN,KAAK,GAAG,IAAI,CAAC+G,KAAK,CAACrJ,KAAM,CAACqP,GAAG,CAAC,CAC/BkB,MAAM,CAACI,QAAQ,EAAEC,MAAM,GAAGD,QAAQ,CAAC,CACnCrO,KAAK,CAAC,uCAAuC,CAAC;IACjD,QAAA,IAAIA,KAAK,EAAE;IACTqO,UAAAA,QAAQ,IAAIrO,KAAK,CAACmM,MAAO,CAACqJ,OAAO,CAAC1V,MAAM;IACxCwO,UAAAA,MAAM,IAAItO,KAAK,CAACmM,MAAO,CAACsJ,QAAQ,CAAC3V,MAAM;IACzC;YAEApC,KAAM,CAACsP,GAAG,GAAGqB,QAAQ;YACrB1Q,MAAM,CAACqP,GAAG,GAAGsB,MAAM;YAEnB,IAAI,CAAC9Q,aAAa,CAACY,QAAQ,CAACe,OAAO,CAAC,CAAC+G,GAAG,CAACC,GAAG,EAAE/H,QAAQ,CAACe,OAAO,CAAC,CAAC+G,GAAG,CAACE,IAAI,EAAE1I,KAAK,EAAEC,MAAM,CAAC;YACxF,IAAI,CAACkN,UAAU,EAAE;IACnB;SACD,MAAM,IAAIzM,QAAQ,CAACe,OAAO,CAAC,CAAC8G,IAAI,KAAK,MAAM,EAAE;IAC5C,MAAA,IAAItI,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;IACpC,MAAA,IAAIpL,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;IACpC,MAAA,IAAI,CAACnL,MAAM,EAAEA,MAAM,GAAGD,KAAK;UAC3B,IAAI,CAACA,KAAK,EAAE;UACZ,IAAI,CAACoR,cAAc,EAAE;IACrB,MAAA,IAAIzK,KAAK,GAAG1G,MAAO,CAACoP,GAAG,GAAGrP,KAAM,CAACqP,GAAG,GAAGrP,KAAM,GAAGC,MAAO;IACvD,MAAA,IAAI2G,GAAG,GAAG3G,MAAO,CAACoP,GAAG,GAAGrP,KAAM,CAACqP,GAAG,GAAGpP,MAAO,GAAGD,KAAM;IACrD,MAAA,IAAI4G,GAAG,CAACyI,GAAG,GAAG1I,KAAK,CAAC0I,GAAG,IAAIzI,GAAG,CAAC0I,GAAG,KAAK,CAAC,EAAE;YACxC1I,GAAG,CAACyI,GAAG,EAAE;IACX;IAEA,MAAA,KAAK,IAAIkF,IAAI,GAAG5N,KAAK,CAAC0I,GAAG,EAAEkF,IAAI,IAAI3N,GAAG,CAACyI,GAAG,EAAEkF,IAAI,EAAE,EAAE;IAClD,QAAA,IAAI3T,KAAK,IAAI,IAAI,CAAC2I,SAAS,CAACgL,IAAI,CAAC,KAAK7T,QAAQ,CAACe,OAAO,CAAC,CAACD,SAAS,EAAE;cACjE,IAAI,CAAC6H,KAAK,CAACkL,IAAI,CAAC,GAAG,IAAI,CAAClL,KAAK,CAACkL,IAAI,CAAC,CAAC5M,OAAO,CACzCjH,QAAQ,CAACe,OAAO,CAAC,CAAC+G,GAAG,CAACM,OAAO,EAC7BpI,QAAQ,CAACe,OAAO,CAAC,CAAC+G,GAAG,CAAClD,WAAW,CAACqC,OAAO,CAAC,IAAI,EAAE,CAAC4M,IAAI,GAAG5N,KAAK,CAAC0I,GAAG,GAAG,CAAC,EAAEpB,QAAQ,EAAE,CAAC,CACnF;IACD,UAAA,IAAI,CAACtE,SAAS,CAAC4K,IAAI,CAAC,GAAG,IAAI;IAC7B;IACA,QAAA,IAAI,CAAC3T,KAAK,IAAI,IAAI,CAAC2I,SAAS,CAACgL,IAAI,CAAC,KAAK7T,QAAQ,CAACe,OAAO,CAAC,CAACD,SAAS,EAAE;IAClE,UAAA,IAAI,CAAC6H,KAAK,CAACkL,IAAI,CAAC,GAAG,IAAI,CAAClL,KAAK,CAACkL,IAAI,CAAC,CAAC5M,OAAO,CACzCjH,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACG,OAAO,EAC/BpI,QAAQ,CAACe,OAAO,CAAC,CAACkH,KAAK,CAACrD,WAAW,CACpC;IACD,UAAA,IAAI,CAACqE,SAAS,CAAC4K,IAAI,CAAC,GAAG,IAAI;IAC7B;IACF;UACA,IAAI,CAACrH,gBAAgB,EAAE;UACvB,IAAI,CAACzB,YAAY,CACf;YAAE4D,GAAG,EAAEzI,GAAG,CAACyI,GAAG;YAAEC,GAAG,EAAE,IAAI,CAACjG,KAAK,CAACzC,GAAG,CAACyI,GAAG,CAAC,CAACjN;IAAM,OAAE,EACjD;YAAEiN,GAAG,EAAE1I,KAAK,CAAC0I,GAAG;IAAEC,QAAAA,GAAG,EAAE;IAAC,OAAE,CAC3B;UACD,IAAI,CAACnC,UAAU,EAAE;IACnB;IACF;IAEQtN,EAAAA,yBAAyBA,GAAA;IAC/B,IAAA,MAAM4U,GAAG,GAAG3F,MAAM,CAAC1D,YAAY,EAAE;IACjC,IAAA,IAAI,CAACqJ,GAAG,IAAI,CAACA,GAAG,CAACxF,SAAS,IAAI,CAACwF,GAAG,CAACzF,UAAU,EAAE,OAAO,KAAK;QAE3D,IACEyF,GAAG,CAACuD,WAAW,IACfvD,GAAG,CAACxF,SAAS,CAACuE,QAAQ,KAAK,CAAC,IAC5BiB,GAAG,CAACrF,WAAW,KAAKqF,GAAG,CAACxF,SAAS,CAAC8E,SAAU,CAAC3R,MAAM,EACnD;IACA,MAAA,IAAIoN,IAAI;IACR,MAAA,KAAKA,IAAI,GAAGiF,GAAG,CAACxF,SAAS,EAAEO,IAAI,IAAIA,IAAI,CAAClD,WAAW,KAAK,IAAI,EAAEkD,IAAI,GAAGA,IAAI,CAAC/E,UAAW,CAAC;UACtF,IACE+E,IAAI,IACJA,IAAI,CAAClD,WAAW,IACfkD,IAAI,CAAClD,WAA2B,CAAC9K,SAAS,IAC1CgO,IAAI,CAAClD,WAA2B,CAAC9K,SAAS,CAACiW,QAAQ,CAAC,mBAAmB,CAAC,EAEzE,OAAO,IAAI;IACf;IAEA,IAAA,IAAIQ,QAAQ,GAAG,IAAI,CAAChB,qBAAqB,CAACxC,GAAG,CAACxF,SAAS,EAAEwF,GAAG,CAACzF,UAAU,CAAC;IACxE,IAAA,IAAI,CAACiJ,QAAQ,EAAE,OAAO,KAAK;IAE3B,IAAA,OAAOA,QAAQ,IAAIA,QAAQ,KAAK,IAAI,CAACxX,CAAC,EAAE;IACtC,MAAA,IACGwX,QAAwB,CAACzW,SAAS,IACnC,OAAQyW,QAAwB,CAACzW,SAAS,CAACiW,QAAQ,KAAK,UAAU,KAChEQ,QAAwB,CAACzW,SAAS,CAACiW,QAAQ,CAAC,mBAAmB,CAAC,IAC/DQ,QAAwB,CAACzW,SAAS,CAACiW,QAAQ,CAAC,aAAa,CAAC,CAAC,EAE9D,OAAO,IAAI;UACbQ,QAAQ,GAAGA,QAAQ,CAACxN,UAAW;IACjC;IAEA,IAAA,OAAO,KAAK;IACd;MAEOyN,kBAAkBA,CAACzW,OAAe,EAAA;IACvC,IAAA,IAAI,CAAC,IAAI,CAACmI,gBAAgB,EAAE,IAAI,CAACA,gBAAgB,GAAG,IAAI,CAAC8N,eAAe,EAAE;IAC1E,IAAA,IAAI,CAAC5U,eAAe,CAACrB,OAAO,EAAE,CAAC,IAAI,CAACmI,gBAAgB,CAACnI,OAAO,CAAC,CAAC;IAChE;MAEQmQ,QAAQA,CAACC,YAA0B,EAAA;QACzC,KAAK,IAAIb,QAAQ,IAAI,IAAI,CAACjH,SAAS,CAACG,IAAI,EAAE;IACxC8G,MAAAA,QAAQ,CAAC;IAAEa,QAAAA;IAAY,OAAE,CAAC;IAC5B;IACF;IAEQJ,EAAAA,aAAaA,GAAA;IACnB,IAAA,IAAI,IAAI,CAAC1H,SAAS,CAACE,SAAS,IAAI,IAAI,CAACF,SAAS,CAACE,SAAS,CAAC7H,MAAM,EAAE;IAC/D,MAAA,IAAIpC,KAAK,GAAG,IAAI,CAACoL,YAAY,CAAC,KAAK,CAAC;IACpC,MAAA,IAAInL,MAAM,GAAG,IAAI,CAACmL,YAAY,CAAC,IAAI,CAAC;UACpC,IAAIpI,YAAY,GAAG,IAAI,CAAC0U,eAAe,CAAC1X,KAAK,EAAEC,MAAM,CAAC;UACtD,IAAI,IAAI,CAAC2J,gBAAgB,EAAE;YACzB/H,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC8H,gBAAgB,EAAE5G,YAAY,CAAC;IACpD,OAAC,MAAM;YACL,IAAI,CAAC4G,gBAAgB,GAAG/H,MAAM,CAACC,MAAM,CAAC,EAAE,EAAEkB,YAAY,CAAC;IACzD;UACA,KAAK,IAAIgO,QAAQ,IAAI,IAAI,CAACjH,SAAS,CAACE,SAAS,EAAE;IAC7C+G,QAAAA,QAAQ,CAAC;IACPhR,UAAAA,KAAK,EAAEA,KAAM;IACbC,UAAAA,MAAM,EAAEA,MAAO;cACf+C,YAAY,EAAE,IAAI,CAAC4G;IACpB,SAAA,CAAC;IACJ;IACF;IACF;IACD;;;;;;;;;","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|