mtrl-addons 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.js +32 -9319
- package/dist/components/index.mjs +3 -9299
- package/dist/core/gestures/index.js +29 -482
- package/dist/core/gestures/index.mjs +2 -464
- package/dist/core/layout/index.js +20 -10
- package/dist/core/viewport/index.js +30 -20
- package/dist/core/viewport/index.mjs +12 -12
- package/dist/index.js +70 -26
- package/dist/index.mjs +52 -18
- package/dist/styles.css +13 -0
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/src/styles/components/_form.scss +22 -0
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -748,5 +758,5 @@ var performance = {
|
|
|
748
758
|
}
|
|
749
759
|
};
|
|
750
760
|
|
|
751
|
-
//# debugId=
|
|
752
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvcmUvbGF5b3V0L3NjaGVtYS50cyIsICIuLi8uLi8uLi9zcmMvY29yZS9sYXlvdXQvY29uZmlnLnRzIiwgIi4uLy4uLy4uL3NyYy9jb3JlL2xheW91dC9qc3gudHMiLCAiLi4vLi4vLi4vc3JjL2NvcmUvbGF5b3V0L2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogQG1vZHVsZSBjb3JlL2xheW91dC9zY2hlbWFcbiAqIEBkZXNjcmlwdGlvbiBVbmlmaWVkIGxheW91dCBzY2hlbWEgcHJvY2Vzc29yIHdpdGggaW50ZWdyYXRlZCBvcHRpbWl6YXRpb25zXG4gKiBDb25zb2xpZGF0ZXMgYXJyYXksIG9iamVjdCwgSlNYLCBhbmQgdGVtcGxhdGUgcHJvY2Vzc2luZyB3aXRoIGJ1aWx0LWluIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTIChFc3NlbnRpYWwgb25seSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRDb25maWcge1xuICAvKiogQmFzZSBsYXlvdXQgdHlwZSAqL1xuICB0eXBlPzogXCJzdGFja1wiIHwgXCJyb3dcIiB8IFwiZ3JpZFwiIHwgc3RyaW5nO1xuICAvKiogU3BhY2luZyBiZXR3ZWVuIGVsZW1lbnRzICovXG4gIGdhcD86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBBbGlnbm1lbnQgb2YgaXRlbXMgYWxvbmcgdGhlIGNyb3NzIGF4aXMgKi9cbiAgYWxpZ24/OiBcInN0YXJ0XCIgfCBcImNlbnRlclwiIHwgXCJlbmRcIiB8IFwic3RyZXRjaFwiO1xuICAvKiogQWxpZ25tZW50IG9mIGl0ZW1zIGFsb25nIHRoZSBtYWluIGF4aXMgKi9cbiAganVzdGlmeT86IFwic3RhcnRcIiB8IFwiY2VudGVyXCIgfCBcImVuZFwiIHwgXCJiZXR3ZWVuXCIgfCBcImFyb3VuZFwiIHwgXCJldmVubHlcIjtcbiAgLyoqIFdoZXRoZXIgYW5kIGhvdyBpdGVtcyBzaG91bGQgd3JhcCAqL1xuICB3cmFwPzogYm9vbGVhbiB8IFwicmV2ZXJzZVwiIHwgXCJub3dyYXBcIjtcbiAgLyoqIFdoZXRoZXIgcm93IGl0ZW1zIHNob3VsZCBzdGFjayB2ZXJ0aWNhbGx5IG9uIG1vYmlsZSAqL1xuICBtb2JpbGVTdGFjaz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHJvdyBpdGVtcyBzaG91bGQgc2Nyb2xsIGhvcml6b250YWxseSBvbiBtb2JpbGUgKi9cbiAgbW9iaWxlU2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqIE51bWJlciBvZiBjb2x1bW5zIG9yIGF1dG9tYXRpYyBzaXppbmcgbWV0aG9kICovXG4gIGNvbHVtbnM/OiBudW1iZXIgfCBcImF1dG8tZml0XCIgfCBcImF1dG8tZmlsbFwiO1xuICAvKiogV2hldGhlciB0byB1c2UgZGVuc2UgcGFja2luZyBhbGdvcml0aG0gZm9yIGdyaWQgKi9cbiAgZGVuc2U/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBncmlkIGl0ZW1zIHNob3VsZCBhZGp1c3QgaGVpZ2h0IGF1dG9tYXRpY2FsbHkgKi9cbiAgYXV0b0hlaWdodD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0SXRlbUNvbmZpZyB7XG4gIC8qKiBDb2x1bW4gd2lkdGggaW4gYSAxMi1jb2x1bW4gZ3JpZCAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdpZHRoIG9uIHNtYWxsIHNjcmVlbnMgKi9cbiAgc20/OiBudW1iZXI7XG4gIC8qKiBXaWR0aCBvbiBtZWRpdW0gc2NyZWVucyAqL1xuICBtZD86IG51bWJlcjtcbiAgLyoqIFdpZHRoIG9uIGxhcmdlIHNjcmVlbnMgKi9cbiAgbGc/OiBudW1iZXI7XG4gIC8qKiBXaWR0aCBvbiBleHRyYS1sYXJnZSBzY3JlZW5zICovXG4gIHhsPzogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIGdyaWQgY29sdW1ucyB0byBzcGFuICovXG4gIHNwYW4/OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgZ3JpZCByb3dzIHRvIHNwYW4gKi9cbiAgcm93U3Bhbj86IG51bWJlcjtcbiAgLyoqIERpc3BsYXkgb3JkZXIgKi9cbiAgb3JkZXI/OiBudW1iZXIgfCBcImZpcnN0XCIgfCBcImxhc3RcIjtcbiAgLyoqIFNlbGYtYWxpZ25tZW50IHdpdGhpbiBjb250YWluZXIgKi9cbiAgYWxpZ24/OiBcInN0YXJ0XCIgfCBcImNlbnRlclwiIHwgXCJlbmRcIiB8IFwic3RyZXRjaFwiO1xuICAvKiogV2hldGhlciBpdGVtIHNob3VsZCBhdXRvbWF0aWNhbGx5IHNpemUgKi9cbiAgYXV0bz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0T3B0aW9ucyB7XG4gIC8qKiBEZWZhdWx0IGNyZWF0b3IgZnVuY3Rpb24gdG8gdXNlIGlmIG5vdCBzcGVjaWZpZWQgaW4gc2NoZW1hICovXG4gIGNyZWF0b3I/OiBGdW5jdGlvbjtcbiAgLyoqIFdoZXRoZXIgdG8gYXBwbHkgQ1NTIGNsYXNzIHByZWZpeCBAZGVmYXVsdCB0cnVlICovXG4gIHByZWZpeD86IGJvb2xlYW47XG4gIC8qKiBBZGRpdGlvbmFsIG9wdGlvbnMgKi9cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFJlc3VsdCB7XG4gIC8qKiBUaGUgcmF3IGxheW91dCBvYmplY3Qgd2l0aCBhbGwgY29tcG9uZW50cyAqL1xuICBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCBmb3IgY29udmVuaWVuY2UgKi9cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBhbnk7XG4gIC8qKiBGbGF0dGVuZWQgY29tcG9uZW50IG1hcCAqL1xuICBjb21wb25lbnQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKiBHZXRzIGEgY29tcG9uZW50IGJ5IG5hbWUgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IGFueTtcbiAgLyoqIEdldHMgYWxsIGNvbXBvbmVudHMgaW4gYSBmbGF0dGVuZWQgbWFwICovXG4gIGdldEFsbCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKiogRGVzdHJveXMgdGhlIGxheW91dCwgY2xlYW5pbmcgdXAgYWxsIGNvbXBvbmVudHMgKi9cbiAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG50eXBlIENvbXBvbmVudExpa2UgPSB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbnR5cGUgU2NoZW1hSXRlbSA9IEZ1bmN0aW9uIHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IFNjaGVtYUl0ZW1bXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQlVJTFQtSU4gT1BUSU1JWkFUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEZyYWdtZW50IFBvb2wgZm9yIGVmZmljaWVudCBEb2N1bWVudEZyYWdtZW50IHJldXNlXG4gKiBSZWR1Y2VzIEdDIHByZXNzdXJlIGluIGhpZ2gtZnJlcXVlbmN5IGxheW91dCBjcmVhdGlvbiBzY2VuYXJpb3NcbiAqL1xuY2xhc3MgRnJhZ21lbnRQb29sIHtcbiAgcHJpdmF0ZSBwb29sOiBEb2N1bWVudEZyYWdtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBtYXhTaXplID0gODsgLy8gT3B0aW1pemVkIHNpemUgZm9yIG1lbW9yeSBlZmZpY2llbmN5XG5cbiAgZ2V0KCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiB0aGlzLnBvb2wucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICB9XG5cbiAgcmVsZWFzZShmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvb2wubGVuZ3RoIDwgdGhpcy5tYXhTaXplICYmIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnBvb2wucHVzaChmcmFnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5wb29sLmxlbmd0aCA9IDA7XG4gIH1cbn1cblxuY29uc3QgZnJhZ21lbnRQb29sID0gbmV3IEZyYWdtZW50UG9vbCgpO1xuXG4vKipcbiAqIENsYXNzIG5hbWUgY2FjaGUgZm9yIGxheW91dCBjb25maWd1cmF0aW9uc1xuICogUmVkdWNlcyBzdHJpbmcgb3BlcmF0aW9ucyBieSBjYWNoaW5nIGdlbmVyYXRlZCBjbGFzcyBuYW1lc1xuICovXG5jb25zdCBjbGFzc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IFBSRUZJWCA9IFwibXRybFwiOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5jb25zdCBQUkVGSVhfV0lUSF9EQVNIID0gYCR7UFJFRklYfS1gO1xuXG4vKipcbiAqIEdldHMgYSBjYWNoZWQgY2xhc3MgbmFtZSBmb3IgbGF5b3V0IGNvbmZpZ3VyYXRpb25cbiAqIE9wdGltaXplZCBmb3IgZGlmZmVyZW50IGNsYXNzIG5hbWluZyBwYXR0ZXJuc1xuICovXG5mdW5jdGlvbiBnZXRDYWNoZWRDbGFzc05hbWUoXG4gIHR5cGU6IHN0cmluZyxcbiAgcHJvcGVydHk6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7cHJvcGVydHl9LSR7dmFsdWV9YDtcbiAgaWYgKCFjbGFzc0NhY2hlLmhhcyhrZXkpKSB7XG4gICAgaWYgKHR5cGUgPT09IFwiaXRlbVwiKSB7XG4gICAgICBjbGFzc0NhY2hlLnNldChcbiAgICAgICAga2V5LFxuICAgICAgICBwcm9wZXJ0eSA9PT0gXCJcIlxuICAgICAgICAgID8gYGxheW91dF9faXRlbS0tJHt2YWx1ZX1gXG4gICAgICAgICAgOiBgbGF5b3V0X19pdGVtLS0ke3Byb3BlcnR5fS0ke3ZhbHVlfWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgbGF5b3V0IGNsYXNzZXMsIGFsaWduIHVzZXMgbGF5b3V0LS17dHlwZX0te3ZhbHVlfVxuICAgICAgLy8gYnV0IGp1c3RpZnkgYW5kIG90aGVycyB1c2UgbGF5b3V0LS17dHlwZX0te3Byb3BlcnR5fS17dmFsdWV9XG4gICAgICBpZiAocHJvcGVydHkgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBjbGFzc0NhY2hlLnNldChrZXksIGBsYXlvdXQtLSR7dHlwZX0tJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzQ2FjaGUuc2V0KGtleSwgYGxheW91dC0tJHt0eXBlfS0ke3Byb3BlcnR5fS0ke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NDYWNoZS5nZXQoa2V5KSE7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9QVElNSVpFRCBVVElMSVRJRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBvYmplY3QgKGhhcyBhbiBlbGVtZW50IHByb3BlcnR5KVxuICovXG5mdW5jdGlvbiBpc0NvbXBvbmVudCh2YWx1ZTogYW55KTogdmFsdWUgaXMgQ29tcG9uZW50TGlrZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJlbGVtZW50XCIgaW4gdmFsdWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRvY3VtZW50IGZyYWdtZW50IHVzaW5nIHBvb2xpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVGcmFnbWVudCgpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIGZyYWdtZW50UG9vbC5nZXQoKTtcbn1cblxuLyoqXG4gKiBSZWxlYXNlcyBhIGZyYWdtZW50IGJhY2sgdG8gdGhlIHBvb2wgZm9yIHJldXNlXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VGcmFnbWVudChmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICBmcmFnbWVudFBvb2wucmVsZWFzZShmcmFnbWVudCk7XG59XG5cbi8qKlxuICogT3B0aW1pemVkIGNsYXNzIHByb2Nlc3Npbmcgd2l0aCBtaW5pbWFsIHN0cmluZyBvcGVyYXRpb25zXG4gKiBIYW5kbGVzIGFycmF5cywgc3RyaW5ncywgY2xhc3NOYW1lIGFsaWFzZXMsIGFuZCByYXdDbGFzcyBlZmZpY2llbnRseVxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ2xhc3NOYW1lcyhcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2tpcFByZWZpeCA9IGZhbHNlLFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghb3B0aW9ucykgcmV0dXJuIG9wdGlvbnM7XG5cbiAgY29uc3QgaGFzUmF3Q2xhc3MgPSBvcHRpb25zLnJhd0NsYXNzO1xuICBjb25zdCBoYXNSZWd1bGFyQ2xhc3MgPSBvcHRpb25zLmNsYXNzIHx8IG9wdGlvbnMuY2xhc3NOYW1lO1xuXG4gIC8vIEZhc3QgcGF0aDogbm8gY2xhc3MgcHJvcGVydGllcyBhdCBhbGxcbiAgaWYgKCFoYXNSYXdDbGFzcyAmJiAhaGFzUmVndWxhckNsYXNzKSByZXR1cm4gb3B0aW9ucztcblxuICAvLyBGYXN0IHBhdGg6IG9ubHkgcmF3Q2xhc3MgYW5kIHNraXBwaW5nIHByZWZpeCAobW9zdCBjb21tb24gcmF3Q2xhc3Mgc2NlbmFyaW8pXG4gIGlmIChoYXNSYXdDbGFzcyAmJiAhaGFzUmVndWxhckNsYXNzICYmIHNraXBQcmVmaXgpIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICBkZWxldGUgcHJvY2Vzc2VkLnJhd0NsYXNzO1xuXG4gICAgLy8gRGlyZWN0IGFzc2lnbm1lbnQgZm9yIHNpbXBsZSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGhhc1Jhd0NsYXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBwcm9jZXNzZWQuY2xhc3MgPSBoYXNSYXdDbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGFycmF5IGNhc2VcbiAgICAgIHByb2Nlc3NlZC5jbGFzcyA9IGhhc1Jhd0NsYXNzLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgLy8gRnVsbCBwcm9jZXNzaW5nIHBhdGggKG9ubHkgd2hlbiBuZWVkZWQpXG4gIGNvbnN0IHByb2Nlc3NlZCA9IHsgLi4ub3B0aW9ucyB9O1xuICBsZXQgZmluYWxDbGFzc2VzID0gXCJcIjtcblxuICAvLyBIYW5kbGUgcHJlZml4ZWQgY2xhc3NlcyBvbmx5IGlmIG5vdCBza2lwcGluZyBwcmVmaXhcbiAgaWYgKCFza2lwUHJlZml4ICYmIGhhc1JlZ3VsYXJDbGFzcykge1xuICAgIGxldCBwcmVmaXhlZFN0cmluZyA9IFwiXCI7XG5cbiAgICBpZiAocHJvY2Vzc2VkLmNsYXNzKSB7XG4gICAgICBwcmVmaXhlZFN0cmluZyArPSBBcnJheS5pc0FycmF5KHByb2Nlc3NlZC5jbGFzcylcbiAgICAgICAgPyBwcm9jZXNzZWQuY2xhc3Muam9pbihcIiBcIilcbiAgICAgICAgOiBwcm9jZXNzZWQuY2xhc3M7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzZWQuY2xhc3NOYW1lKSB7XG4gICAgICBwcmVmaXhlZFN0cmluZyArPSAocHJlZml4ZWRTdHJpbmcgPyBcIiBcIiA6IFwiXCIpICsgcHJvY2Vzc2VkLmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBpZiAocHJlZml4ZWRTdHJpbmcpIHtcbiAgICAgIGZpbmFsQ2xhc3NlcyA9IHByZWZpeGVkU3RyaW5nXG4gICAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcCgoY2xzKSA9PlxuICAgICAgICAgIGNscy5zdGFydHNXaXRoKFBSRUZJWF9XSVRIX0RBU0gpID8gY2xzIDogUFJFRklYX1dJVEhfREFTSCArIGNscyxcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIiBcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJhd0NsYXNzIChhbHdheXMgcHJvY2Vzc2VkIHdoZW4gcHJlc2VudClcbiAgaWYgKGhhc1Jhd0NsYXNzKSB7XG4gICAgY29uc3QgcmF3U3RyaW5nID0gQXJyYXkuaXNBcnJheShoYXNSYXdDbGFzcylcbiAgICAgID8gaGFzUmF3Q2xhc3MuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpXG4gICAgICA6IGhhc1Jhd0NsYXNzO1xuXG4gICAgZmluYWxDbGFzc2VzICs9IChmaW5hbENsYXNzZXMgPyBcIiBcIiA6IFwiXCIpICsgcmF3U3RyaW5nO1xuICB9XG5cbiAgaWYgKGZpbmFsQ2xhc3Nlcykge1xuICAgIHByb2Nlc3NlZC5jbGFzcyA9IGZpbmFsQ2xhc3NlcztcbiAgfVxuXG4gIC8vIENsZWFuIHVwIGluIG9uZSBvcGVyYXRpb25cbiAgZGVsZXRlIHByb2Nlc3NlZC5jbGFzc05hbWU7XG4gIGRlbGV0ZSBwcm9jZXNzZWQucmF3Q2xhc3M7XG5cbiAgcmV0dXJuIHByb2Nlc3NlZDtcbn1cblxuLyoqXG4gKiBPcHRpbWl6ZWQgcGFyYW1ldGVyIGV4dHJhY3Rpb24gZm9yIGFycmF5IHNjaGVtYXNcbiAqIFJlZHVjZXMgbXVsdGlwbGUgYXJyYXkgbG9va3VwcyB3aXRoIGJhdGNoIHByb2Nlc3NpbmdcbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RlZFBhcmFtZXRlcnMge1xuICBjcmVhdG9yOiBGdW5jdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgY29uc3VtZWQ6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBhcmFtZXRlcnMoXG4gIHNjaGVtYTogU2NoZW1hSXRlbVtdLFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIGRlZmF1bHRDcmVhdG9yOiBGdW5jdGlvbixcbik6IEV4dHJhY3RlZFBhcmFtZXRlcnMge1xuICBjb25zdCBpdGVtcyA9IHNjaGVtYS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgMyk7XG4gIGxldCBjcmVhdG9yLCBuYW1lLCBvcHRpb25zO1xuICBsZXQgY29uc3VtZWQgPSAxO1xuXG4gIGNvbnN0IFtmaXJzdCwgc2Vjb25kLCB0aGlyZF0gPSBpdGVtcztcblxuICBpZiAodHlwZW9mIGZpcnN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjcmVhdG9yID0gZmlyc3Q7XG4gICAgaWYgKHR5cGVvZiBzZWNvbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5hbWUgPSBzZWNvbmQ7XG4gICAgICBjb25zdW1lZCA9IDI7XG4gICAgICBpZiAoaXNPYmplY3QodGhpcmQpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB0aGlyZDtcbiAgICAgICAgY29uc3VtZWQgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2Vjb25kKSkge1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICAgIGNvbnN1bWVkID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY3JlYXRvciA9IGRlZmF1bHRDcmVhdG9yO1xuICAgIG5hbWUgPSBmaXJzdDtcbiAgICBpZiAoaXNPYmplY3Qoc2Vjb25kKSkge1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICAgIGNvbnN1bWVkID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoZmlyc3QpKSB7XG4gICAgY3JlYXRvciA9IGRlZmF1bHRDcmVhdG9yO1xuICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRvcjogY3JlYXRvciB8fCBkZWZhdWx0Q3JlYXRvcixcbiAgICBuYW1lLFxuICAgIG9wdGlvbnM6IChvcHRpb25zIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNvbnN1bWVkLFxuICB9O1xufVxuXG4vKipcbiAqIFNpbXBsZSBvYmplY3QgdHlwZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBET00gVVRJTElUSUVTIChTaW1wbGlmaWVkKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNpbXBsZSBET00gZWxlbWVudCBjcmVhdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgdGFnID0gb3B0aW9ucy50YWcgfHwgXCJkaXZcIjtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuICBpZiAob3B0aW9ucy5jbGFzcykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzcztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnN0eWxlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnN0eWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIG9wdGlvbnMuc3R5bGUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuc3R5bGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgb3B0aW9ucy5zdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMudGV4dENvbnRlbnQpIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9ucy50ZXh0Q29udGVudDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRleHQpIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9ucy50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhbiBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZWxlbWVudCAmJiBjbGFzc05hbWUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBlbGVtZW50IGhhcyBhIENTUyBjbGFzc1xuICovXG5mdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVU5JRklFRCBDT01QT05FTlQgQ1JFQVRJT04gKHdpdGggZGVzdHJ1Y3R1cmluZyBvcHRpbWl6YXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBvbmVudCBpbnN0YW5jZSB3aXRoIG9wdGltaXplZCBvcHRpb24gcHJvY2Vzc2luZ1xuICogVXNlcyBkZXN0cnVjdHVyaW5nIGZvciBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoXG4gIENvbXBvbmVudDogYW55LFxuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4pOiBhbnkge1xuICB0cnkge1xuICAgIC8vIERlc3RydWN0dXJlIHNwZWNpYWwgY29uZmlncyBpbiBvbmUgb3BlcmF0aW9uXG4gICAgY29uc3Qge1xuICAgICAgbGF5b3V0OiBsYXlvdXRDb25maWcsXG4gICAgICBsYXlvdXRJdGVtOiBsYXlvdXRJdGVtQ29uZmlnLFxuICAgICAgc3R5bGU6IHN0eWxlQ29uZmlnLFxuICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc0NvbmZpZyxcbiAgICAgIGV2ZW50czogZXZlbnRzQ29uZmlnLFxuICAgICAgZXZlbnQsIC8vIExlZ2FjeSBzdXBwb3J0XG4gICAgICAuLi5jbGVhbk9wdGlvbnNcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIC8vIFVzZSBldmVudHMgb3ZlciBldmVudCAoZXZlbnRzIGlzIHByZWZlcnJlZClcbiAgICBjb25zdCBmaW5hbEV2ZW50c0NvbmZpZyA9IGV2ZW50c0NvbmZpZyB8fCBldmVudDtcblxuICAgIC8vIElmIHN0eWxlIGlzIGEgc3RyaW5nLCBhbHdheXMgcGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBjb21wb25lbnRcbiAgICBpZiAoc3R5bGVDb25maWcgJiYgdHlwZW9mIHN0eWxlQ29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjbGVhbk9wdGlvbnMuc3R5bGUgPSBzdHlsZUNvbmZpZztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY29tcG9uZW50XG4gICAgY29uc3QgaXNDbGFzcyA9XG4gICAgICB0eXBlb2YgQ29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQ29tcG9uZW50LCBcInByb3RvdHlwZVwiKT8ud3JpdGFibGUgPT09XG4gICAgICAgIGZhbHNlO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gaXNDbGFzc1xuICAgICAgPyBuZXcgQ29tcG9uZW50KGNsZWFuT3B0aW9ucylcbiAgICAgIDogQ29tcG9uZW50KGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBBcHBseSBjb25maWd1cmF0aW9ucyBpZiBjb21wb25lbnQgaGFzIGVsZW1lbnRcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgY29tcG9uZW50LmVsZW1lbnQgfHxcbiAgICAgICAgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gY29tcG9uZW50IDogbnVsbCk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyBBcHBseSBsYXlvdXQgY2xhc3Nlc1xuICAgICAgICBpZiAobGF5b3V0Q29uZmlnKSBhcHBseUxheW91dENsYXNzZXMoZWxlbWVudCwgbGF5b3V0Q29uZmlnKTtcblxuICAgICAgICAvLyBBcHBseSBsYXlvdXQgaXRlbSBjbGFzc2VzXG4gICAgICAgIGlmIChsYXlvdXRJdGVtQ29uZmlnKSBhcHBseUxheW91dEl0ZW1DbGFzc2VzKGVsZW1lbnQsIGxheW91dEl0ZW1Db25maWcpO1xuXG4gICAgICAgIC8vIEFwcGx5IHN0eWxlXG4gICAgICAgIGlmIChzdHlsZUNvbmZpZyAmJiB0eXBlb2Ygc3R5bGVDb25maWcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFwcGx5IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXNDb25maWcgJiYgdHlwZW9mIGF0dHJpYnV0ZXNDb25maWcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzQ29uZmlnKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBseSBldmVudHNcbiAgICAgICAgaWYgKGZpbmFsRXZlbnRzQ29uZmlnICYmIHR5cGVvZiBmaW5hbEV2ZW50c0NvbmZpZyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbmFsRXZlbnRzQ29uZmlnKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudERlZiBvZiBmaW5hbEV2ZW50c0NvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudERlZikgJiYgZXZlbnREZWYubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZXZlbnROYW1lLCBoYW5kbGVyXSA9IGV2ZW50RGVmO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudE5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtldmVudE5hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICBmaW5hbEV2ZW50c0NvbmZpZyxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNyZWF0aW5nIGNvbXBvbmVudCBpbnN0YW5jZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOVEVHUkFURUQgTEFZT1VUIENPTkZJR1VSQVRJT04gKHdpdGggY2FjaGluZylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBcHBsaWVzIGxheW91dCBjbGFzc2VzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAqIFVzZXMgaW50ZWdyYXRlZCBjYWNoaW5nIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlXG4gKi9cbmZ1bmN0aW9uIGFwcGx5TGF5b3V0Q2xhc3NlcyhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGxheW91dENvbmZpZzogTGF5b3V0Q29uZmlnLFxuKTogdm9pZCB7XG4gIGlmICghZWxlbWVudCB8fCAhbGF5b3V0Q29uZmlnKSByZXR1cm47XG5cbiAgLy8gQXBwbHkgYmFzZSBsYXlvdXQgdHlwZVxuICBpZiAobGF5b3V0Q29uZmlnLnR5cGUpIHtcbiAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tJHtsYXlvdXRDb25maWcudHlwZX1gKTtcbiAgfVxuXG4gIC8vIEFwcGx5IHByb3BlcnRpZXMgd2l0aCBjYWNoaW5nXG4gIGNvbnN0IGxheW91dFR5cGUgPSBsYXlvdXRDb25maWcudHlwZSB8fCBnZXRMYXlvdXRUeXBlKGVsZW1lbnQpO1xuICBpZiAobGF5b3V0VHlwZSkge1xuICAgIGlmIChsYXlvdXRDb25maWcuZ2FwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgICBnZXRDYWNoZWRDbGFzc05hbWUobGF5b3V0VHlwZSwgXCJnYXBcIiwgbGF5b3V0Q29uZmlnLmdhcCksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobGF5b3V0Q29uZmlnLmFsaWduKSB7XG4gICAgICBhZGRDbGFzcyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgUFJFRklYX1dJVEhfREFTSCArXG4gICAgICAgICAgZ2V0Q2FjaGVkQ2xhc3NOYW1lKGxheW91dFR5cGUsIFwiYWxpZ25cIiwgbGF5b3V0Q29uZmlnLmFsaWduKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcuanVzdGlmeSkge1xuICAgICAgYWRkQ2xhc3MoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIFBSRUZJWF9XSVRIX0RBU0ggK1xuICAgICAgICAgIGdldENhY2hlZENsYXNzTmFtZShsYXlvdXRUeXBlLCBcImp1c3RpZnlcIiwgbGF5b3V0Q29uZmlnLmp1c3RpZnkpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBHcmlkLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgaWYgKGxheW91dENvbmZpZy50eXBlID09PSBcImdyaWRcIiB8fCBnZXRMYXlvdXRUeXBlKGVsZW1lbnQpID09PSBcImdyaWRcIikge1xuICAgIGlmICh0eXBlb2YgbGF5b3V0Q29uZmlnLmNvbHVtbnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgICBnZXRDYWNoZWRDbGFzc05hbWUoXCJncmlkXCIsIFwiY29sc1wiLCBsYXlvdXRDb25maWcuY29sdW1ucyksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobGF5b3V0Q29uZmlnLmNvbHVtbnMgPT09IFwiYXV0by1maWxsXCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiZ3JpZFwiLCBcImZpbGxcIiwgXCJhdXRvXCIpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxheW91dENvbmZpZy5jb2x1bW5zID09PSBcImF1dG8tZml0XCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiZ3JpZFwiLCBcImNvbHNcIiwgXCJhdXRvLWZpdFwiKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcuZGVuc2UpXG4gICAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tZ3JpZC1kZW5zZWApO1xuICAgIGlmIChsYXlvdXRDb25maWcuYXV0b0hlaWdodClcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1ncmlkLWF1dG8taGVpZ2h0YCk7XG4gIH1cblxuICAvLyBSb3ctc3BlY2lmaWMgcHJvcGVydGllc1xuICBpZiAobGF5b3V0Q29uZmlnLnR5cGUgPT09IFwicm93XCIgfHwgZ2V0TGF5b3V0VHlwZShlbGVtZW50KSA9PT0gXCJyb3dcIikge1xuICAgIGlmIChsYXlvdXRDb25maWcud3JhcCA9PT0gZmFsc2UgfHwgbGF5b3V0Q29uZmlnLndyYXAgPT09IFwibm93cmFwXCIpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3ctbm93cmFwYCk7XG4gICAgfSBlbHNlIGlmIChsYXlvdXRDb25maWcud3JhcCA9PT0gXCJyZXZlcnNlXCIpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3ctd3JhcC1yZXZlcnNlYCk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcubW9iaWxlU3RhY2spXG4gICAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tcm93LW1vYmlsZS1zdGFja2ApO1xuICAgIGlmIChsYXlvdXRDb25maWcubW9iaWxlU2Nyb2xsKVxuICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXQtLXJvdy1tb2JpbGUtc2Nyb2xsYCk7XG4gIH1cblxuICAvLyBDdXN0b20gY2xhc3Nlc1xuICBpZiAobGF5b3V0Q29uZmlnLmNsYXNzKSB7XG4gICAgbGF5b3V0Q29uZmlnLmNsYXNzXG4gICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuZm9yRWFjaCgoY2xzKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGxheW91dCBpdGVtIGNsYXNzZXMgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICogVXNlcyBpbnRlZ3JhdGVkIGNhY2hpbmcgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2VcbiAqL1xuZnVuY3Rpb24gYXBwbHlMYXlvdXRJdGVtQ2xhc3NlcyhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGl0ZW1Db25maWc6IExheW91dEl0ZW1Db25maWcsXG4pOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFpdGVtQ29uZmlnKSByZXR1cm47XG5cbiAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXRfX2l0ZW1gKTtcblxuICAvLyBXaWR0aCBhbmQgcmVzcG9uc2l2ZSBjbGFzc2VzIHdpdGggY2FjaGluZ1xuICBpZiAoaXRlbUNvbmZpZy53aWR0aCAmJiBpdGVtQ29uZmlnLndpZHRoID49IDEgJiYgaXRlbUNvbmZpZy53aWR0aCA8PSAxMikge1xuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwiXCIsIGl0ZW1Db25maWcud2lkdGgpLFxuICAgICk7XG4gIH1cbiAgaWYgKGl0ZW1Db25maWcuc20pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzbVwiLCBpdGVtQ29uZmlnLnNtKSxcbiAgICApO1xuICBpZiAoaXRlbUNvbmZpZy5tZClcbiAgICBhZGRDbGFzcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiaXRlbVwiLCBcIm1kXCIsIGl0ZW1Db25maWcubWQpLFxuICAgICk7XG4gIGlmIChpdGVtQ29uZmlnLmxnKVxuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwibGdcIiwgaXRlbUNvbmZpZy5sZyksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcueGwpXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJ4bFwiLCBpdGVtQ29uZmlnLnhsKSxcbiAgICApO1xuXG4gIC8vIEdyaWQgc3BhbiBjbGFzc2VzXG4gIGlmIChpdGVtQ29uZmlnLnNwYW4pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzcGFuXCIsIGl0ZW1Db25maWcuc3BhbiksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcucm93U3BhbilcbiAgICBhZGRDbGFzcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiaXRlbVwiLCBcInJvdy1zcGFuXCIsIGl0ZW1Db25maWcucm93U3BhbiksXG4gICAgKTtcblxuICAvLyBPcmRlciBhbmQgYWxpZ25tZW50XG4gIGlmIChpdGVtQ29uZmlnLm9yZGVyKVxuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwib3JkZXJcIiwgaXRlbUNvbmZpZy5vcmRlciksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcuYWxpZ24pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzZWxmXCIsIGl0ZW1Db25maWcuYWxpZ24pLFxuICAgICk7XG4gIGlmIChpdGVtQ29uZmlnLmF1dG8pXG4gICAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXRfX2l0ZW0tLWF1dG9gKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdHlwZSBmcm9tIGVsZW1lbnQgY2xhc3Nlc1xuICovXG5mdW5jdGlvbiBnZXRMYXlvdXRUeXBlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1zdGFja2ApXG4gICAgPyBcInN0YWNrXCJcbiAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3dgKVxuICAgICAgPyBcInJvd1wiXG4gICAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1ncmlkYClcbiAgICAgICAgPyBcImdyaWRcIlxuICAgICAgICA6IFwiXCI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVOSUZJRUQgU0NIRU1BIFBST0NFU1NPUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYXJyYXktYmFzZWQgc2NoZW1hIGRlZmluaXRpb25zXG4gKiBPcHRpbWl6ZWQgd2l0aCBwYXJhbWV0ZXIgZXh0cmFjdGlvbiBhbmQgaW50ZWdyYXRlZCBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NBcnJheVNjaGVtYShcbiAgc2NoZW1hOiBTY2hlbWFJdGVtW10gfCBhbnksXG4gIHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGwsXG4gIGxldmVsOiBudW1iZXIgPSAwLFxuICBvcHRpb25zOiBMYXlvdXRPcHRpb25zID0ge30sXG4pOiBMYXlvdXRSZXN1bHQge1xuICBsZXZlbCsrO1xuICBjb25zdCBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgY29tcG9uZW50czogQXJyYXk8W3N0cmluZywgYW55XT4gPSBbXTtcbiAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICBsZXQgY29tcG9uZW50ID0gbnVsbDtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRDcmVhdG9yID0gKG9wdGlvbnMgYXMgYW55KS5jcmVhdG9yIHx8IGNyZWF0ZUVsZW1lbnQ7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpdGVtID0gc2NoZW1hW2ldO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICAvLyBIYW5kbGUgbmVzdGVkIGFycmF5c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjb21wb25lbnQgfHwgcGFyZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NBcnJheVNjaGVtYShpdGVtLCBjb250YWluZXIsIGxldmVsLCBvcHRpb25zKTtcbiAgICAgIC8vIE1lcmdlIG5lc3RlZCBjb21wb25lbnRzIGFycmF5IGluc3RlYWQgb2Ygb3ZlcndyaXRpbmdcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdC5sYXlvdXQuY29tcG9uZW50cykpIHtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKC4uLnJlc3VsdC5sYXlvdXQuY29tcG9uZW50cyk7XG4gICAgICAgIGRlbGV0ZSByZXN1bHQubGF5b3V0LmNvbXBvbmVudHM7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKGxheW91dCwgcmVzdWx0LmxheW91dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBVc2Ugb3B0aW1pemVkIHBhcmFtZXRlciBleHRyYWN0aW9uXG4gICAgY29uc3Qge1xuICAgICAgY3JlYXRvcixcbiAgICAgIG5hbWUsXG4gICAgICBvcHRpb25zOiBpdGVtT3B0aW9ucyxcbiAgICAgIGNvbnN1bWVkLFxuICAgIH0gPSBleHRyYWN0UGFyYW1ldGVycyhzY2hlbWEsIGksIGRlZmF1bHRDcmVhdG9yKTtcblxuICAgIGlmICghY3JlYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgdW5zdXBwb3J0ZWQgaXRlbSB0eXBlOlwiLCBpdGVtKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdG8gZGl2IGZvciBjcmVhdGVFbGVtZW50XG4gICAgaWYgKGNyZWF0b3IgPT09IGNyZWF0ZUVsZW1lbnQgJiYgIShcInRhZ1wiIGluIGl0ZW1PcHRpb25zKSkge1xuICAgICAgaXRlbU9wdGlvbnMudGFnID0gXCJkaXZcIjtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlIGluZGV4IGJ5IGNvbnN1bWVkIGl0ZW1zIG1pbnVzIDEgKGxvb3AgaW5jcmVtZW50IGhhbmRsZXMgdGhlICsxKVxuICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuXG4gICAgLy8gUHJvY2VzcyBvcHRpb25zIHdpdGggcHJlZml4IC0gb3B0aW1pemVkIGRlY2lzaW9uIGxvZ2ljXG4gICAgY29uc3Qgc2hvdWxkQXBwbHlQcmVmaXggPVxuICAgICAgXCJwcmVmaXhcIiBpbiBpdGVtT3B0aW9ucyA/IGl0ZW1PcHRpb25zLnByZWZpeCA6IG9wdGlvbnMucHJlZml4ICE9PSBmYWxzZTtcblxuICAgIC8vIEZhc3QgcGF0aDogcHJvY2VzcyBvbmx5IHdoZW4gbmVlZGVkXG4gICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9ucyA9XG4gICAgICBzaG91bGRBcHBseVByZWZpeCB8fCBpdGVtT3B0aW9ucy5yYXdDbGFzc1xuICAgICAgICA/IHByb2Nlc3NDbGFzc05hbWVzKGl0ZW1PcHRpb25zLCAhc2hvdWxkQXBwbHlQcmVmaXgpXG4gICAgICAgIDogaXRlbU9wdGlvbnM7IC8vIE5vIGNvcHkgbmVlZGVkIGlmIG5vIHByb2Nlc3NpbmdcblxuICAgIC8vIEFkZCBuYW1lIHRvIG9wdGlvbnMgaWYgbmVlZGVkXG4gICAgaWYgKFxuICAgICAgbmFtZSAmJlxuICAgICAgIShcIm5hbWVcIiBpbiBwcm9jZXNzZWRPcHRpb25zKSAmJlxuICAgICAgIShjcmVhdG9yID09PSBjcmVhdGVFbGVtZW50IHx8IChjcmVhdG9yIGFzIGFueSkuaXNFbGVtZW50KVxuICAgICkge1xuICAgICAgcHJvY2Vzc2VkT3B0aW9ucy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY29tcG9uZW50XG4gICAgY29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoY3JlYXRvciwgcHJvY2Vzc2VkT3B0aW9ucyk7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzQ29tcG9uZW50KGNvbXBvbmVudCkgPyBjb21wb25lbnQuZWxlbWVudCA6IGNvbXBvbmVudDtcblxuICAgIGlmIChsZXZlbCA9PT0gMSkgbGF5b3V0LmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmIChuYW1lKSB7XG4gICAgICBsYXlvdXRbbmFtZV0gPSBjb21wb25lbnQ7XG4gICAgICBjb21wb25lbnRzLnB1c2goW25hbWUsIGNvbXBvbmVudF0pO1xuICAgIH1cblxuICAgIC8vIEFwcGVuZCB0byBET01cbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBpZiAoXCJpbnNlcnRcIiBpbiBjb21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudC5pbnNlcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb21wb25lbnQuaW5zZXJ0KGZyYWdtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb21wb25lbnQuX2NvbnRhaW5lciA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcIm9uSW5zZXJ0ZWRcIiBpbiBjb21wb25lbnQgJiZcbiAgICAgICAgICB0eXBlb2YgY29tcG9uZW50Lm9uSW5zZXJ0ZWQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb21wb25lbnQub25JbnNlcnRlZChwYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBmcmFnbWVudCB0byBwYXJlbnRcbiAgaWYgKHBhcmVudEVsZW1lbnQgJiYgZnJhZ21lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlzQ29tcG9uZW50KHBhcmVudEVsZW1lbnQpXG4gICAgICA/IHBhcmVudEVsZW1lbnQuZWxlbWVudFxuICAgICAgOiBwYXJlbnRFbGVtZW50O1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICB9XG5cbiAgLy8gUmVsZWFzZSBmcmFnbWVudCBiYWNrIHRvIHBvb2xcbiAgcmVsZWFzZUZyYWdtZW50KGZyYWdtZW50KTtcblxuICBsYXlvdXQuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgb2JqZWN0LWJhc2VkIHNjaGVtYSBkZWZpbml0aW9uc1xuICogU2ltcGxpZmllZCBhbmQgb3B0aW1pemVkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFNjaGVtYShcbiAgc2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nLFxuICBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICBvcHRpb25zOiBMYXlvdXRPcHRpb25zID0ge30sXG4pOiBMYXlvdXRSZXN1bHQge1xuICBjb25zdCBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgZGVmYXVsdENyZWF0b3IgPSBvcHRpb25zLmNyZWF0b3IgfHwgY3JlYXRlRWxlbWVudDtcblxuICAvLyBIYW5kbGUgcm9vdCBlbGVtZW50IGNyZWF0aW9uXG4gIGlmICgoc2NoZW1hIGFzIGFueSkuZWxlbWVudCAmJiAhcGFyZW50RWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnREZWYgPSAoc2NoZW1hIGFzIGFueSkuZWxlbWVudDtcbiAgICBjb25zdCBjcmVhdGVFbGVtZW50Rm4gPSBlbGVtZW50RGVmLmNyZWF0b3IgfHwgZGVmYXVsdENyZWF0b3I7XG5cbiAgICBjb25zdCBlbGVtZW50T3B0aW9ucyA9IGVsZW1lbnREZWYub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBwcm9jZXNzZWRPcHRpb25zID1cbiAgICAgIG9wdGlvbnMucHJlZml4ICE9PSBmYWxzZVxuICAgICAgICA/IHByb2Nlc3NDbGFzc05hbWVzKGVsZW1lbnRPcHRpb25zKVxuICAgICAgICA6IHsgLi4uZWxlbWVudE9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHJvb3RDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZShcbiAgICAgIGNyZWF0ZUVsZW1lbnRGbixcbiAgICAgIHByb2Nlc3NlZE9wdGlvbnMsXG4gICAgKTtcbiAgICBsYXlvdXQuZWxlbWVudCA9IHJvb3RDb21wb25lbnQ7XG4gICAgaWYgKGVsZW1lbnREZWYubmFtZSkgbGF5b3V0W2VsZW1lbnREZWYubmFtZV0gPSByb290Q29tcG9uZW50O1xuXG4gICAgLy8gUHJvY2VzcyBjaGlsZHJlblxuICAgIGlmIChlbGVtZW50RGVmLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGlzQ29tcG9uZW50KHJvb3RDb21wb25lbnQpXG4gICAgICAgID8gcm9vdENvbXBvbmVudC5lbGVtZW50XG4gICAgICAgIDogcm9vdENvbXBvbmVudDtcbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gcHJvY2Vzc09iamVjdFNjaGVtYShcbiAgICAgICAgZWxlbWVudERlZi5jaGlsZHJlbixcbiAgICAgICAgcm9vdEVsZW1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbihsYXlvdXQsIGNoaWxkUmVzdWx0LmxheW91dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQpO1xuICB9XG5cbiAgLy8gUHJvY2VzcyBub3JtYWwgc2NoZW1hIGVsZW1lbnRzXG4gIGNvbnN0IGZyYWdtZW50ID0gcGFyZW50RWxlbWVudCA/IGNyZWF0ZUZyYWdtZW50KCkgOiBudWxsO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZGVmID0gKHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICAgIGlmICghZGVmKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcmVhdG9yID0gZGVmLmNyZWF0b3IgfHwgZGVmYXVsdENyZWF0b3I7XG4gICAgY29uc3QgZWxlbWVudE9wdGlvbnMgPSBkZWYub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBzaG91bGRBcHBseVByZWZpeCA9XG4gICAgICBcInByZWZpeFwiIGluIGVsZW1lbnRPcHRpb25zXG4gICAgICAgID8gZWxlbWVudE9wdGlvbnMucHJlZml4XG4gICAgICAgIDogb3B0aW9ucy5wcmVmaXggIT09IGZhbHNlO1xuICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbnMgPSBzaG91bGRBcHBseVByZWZpeFxuICAgICAgPyBwcm9jZXNzQ2xhc3NOYW1lcyhlbGVtZW50T3B0aW9ucylcbiAgICAgIDogeyAuLi5lbGVtZW50T3B0aW9ucyB9O1xuXG4gICAgaWYgKCFkZWYubmFtZSAmJiBrZXkgIT09IFwiZWxlbWVudFwiKSB7XG4gICAgICBkZWYubmFtZSA9IGtleTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVkID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoZWxlbWVudENyZWF0b3IsIHByb2Nlc3NlZE9wdGlvbnMpO1xuICAgIGxheW91dFtrZXldID0gY3JlYXRlZDtcbiAgICBpZiAoZGVmLm5hbWUgJiYgZGVmLm5hbWUgIT09IGtleSkgbGF5b3V0W2RlZi5uYW1lXSA9IGNyZWF0ZWQ7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gaXNDb21wb25lbnQoY3JlYXRlZCkgPyBjcmVhdGVkLmVsZW1lbnQgOiBjcmVhdGVkO1xuICAgIGlmIChmcmFnbWVudCkgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGRlZi5jaGlsZHJlbikge1xuICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBwcm9jZXNzT2JqZWN0U2NoZW1hKGRlZi5jaGlsZHJlbiwgZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICBPYmplY3QuYXNzaWduKGxheW91dCwgY2hpbGRSZXN1bHQubGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgdG8gcGFyZW50XG4gIGlmIChwYXJlbnRFbGVtZW50ICYmIGZyYWdtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RG9tID0gaXNDb21wb25lbnQocGFyZW50RWxlbWVudClcbiAgICAgID8gcGFyZW50RWxlbWVudC5lbGVtZW50XG4gICAgICA6IHBhcmVudEVsZW1lbnQ7XG4gICAgcGFyZW50RG9tLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICByZWxlYXNlRnJhZ21lbnQoZnJhZ21lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMQVlPVVQgUkVTVUxUIENSRUFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmxhdHRlbnMgYSBuZXN0ZWQgbGF5b3V0IGludG8gYSBzaW1wbGUgb2JqZWN0IHdpdGggZWxlbWVudCBhbmQgY29tcG9uZW50IHJlZmVyZW5jZXNcbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkxheW91dChsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgZmxhdHRlbmVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgaWYgKCFsYXlvdXQgfHwgdHlwZW9mIGxheW91dCAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZsYXR0ZW5lZDtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBsYXlvdXQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGxheW91dFtrZXldO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcbiAgICAgICAgKHR5cGVvZiBTVkdFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkgfHxcbiAgICAgICAgaXNDb21wb25lbnQodmFsdWUpKVxuICAgICkge1xuICAgICAgZmxhdHRlbmVkW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdHRlbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgcmVzdWx0IG9iamVjdCB3aXRoIHV0aWxpdHkgZnVuY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBMYXlvdXRSZXN1bHQge1xuICBjb25zdCBmbGF0dGVuZWRDb21wb25lbnRzID0gZmxhdHRlbkxheW91dChsYXlvdXQpO1xuXG4gIHJldHVybiB7XG4gICAgbGF5b3V0LFxuICAgIGVsZW1lbnQ6IGxheW91dC5lbGVtZW50LFxuICAgIGNvbXBvbmVudDogZmxhdHRlbmVkQ29tcG9uZW50cyxcblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgcmV0dXJuIGxheW91dFtuYW1lXSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBnZXRBbGwoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICByZXR1cm4gZmxhdHRlbmVkQ29tcG9uZW50cztcbiAgICB9LFxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIC8vIFRyYWNrIGRlc3Ryb3llZCBjb21wb25lbnRzIHRvIGF2b2lkIGRvdWJsZS1kZXN0cm95XG4gICAgICBjb25zdCBkZXN0cm95ZWQgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgLy8gSGVscGVyIHRvIHNhZmVseSBkZXN0cm95IGEgY29tcG9uZW50XG4gICAgICBjb25zdCBkZXN0cm95Q29tcG9uZW50ID0gKGNvbXBvbmVudDogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50IHx8IGRlc3Ryb3llZC5oYXMoY29tcG9uZW50KSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFNraXAgcGxhaW4gSFRNTCBlbGVtZW50cyBhbmQgbm9uLW9iamVjdHNcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHR5cGVvZiBjb21wb25lbnQgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBjb21wb25lbnQgd2l0aCBkZXN0cm95IG1ldGhvZFxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBkZXN0cm95ZWQuYWRkKGNvbXBvbmVudCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWdub3JlIGRlc3Ryb3kgZXJyb3JzIC0gY29tcG9uZW50IG1heSBhbHJlYWR5IGJlIGNsZWFuZWQgdXBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIEZpcnN0IGRlc3Ryb3kgY29tcG9uZW50cyBmcm9tIHRoZSBjb21wb25lbnRzIGFycmF5IChpZiBwcmVzZW50KVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIGFsbCBuYW1lZCBjb21wb25lbnRzIGFyZSBkZXN0cm95ZWQgZXZlbiBpZiBuZXN0ZWRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxheW91dC5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIGxheW91dC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgZGVzdHJveUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZW4gaXRlcmF0ZSBvdmVyIGFsbCBsYXlvdXQga2V5cyBmb3IgYW55IG1pc3NlZCBjb21wb25lbnRzXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBsYXlvdXQpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJlbGVtZW50XCIgfHwga2V5ID09PSBcImNvbXBvbmVudHNcIikgY29udGludWU7XG4gICAgICAgIGRlc3Ryb3lDb21wb25lbnQobGF5b3V0W2tleV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciB0aGUgY29tcG9uZW50cyBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGF5b3V0LmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGxheW91dC5jb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSByb290IGVsZW1lbnQgZnJvbSBET01cbiAgICAgIGlmIChsYXlvdXQuZWxlbWVudCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXNDb21wb25lbnQobGF5b3V0LmVsZW1lbnQpXG4gICAgICAgICAgPyBsYXlvdXQuZWxlbWVudC5lbGVtZW50XG4gICAgICAgICAgOiBsYXlvdXQuZWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIHJlZmVyZW5jZXMgdG8gaGVscCBHQ1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGF5b3V0KSB7XG4gICAgICAgIGRlbGV0ZSBsYXlvdXRba2V5XTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVTklGSUVEIEVOVFJZIFBPSU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxheW91dCBmcm9tIHZhcmlvdXMgc2NoZW1hIGZvcm1hdHNcbiAqIFVuaWZpZWQgcHJvY2Vzc29yIGZvciBhcnJheXMsIG9iamVjdHMsIEpTWCwgYW5kIEhUTUwgc3RyaW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5b3V0KFxuICBzY2hlbWE6IGFueSxcbiAgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbCxcbiAgb3B0aW9uczogTGF5b3V0T3B0aW9ucyA9IHt9LFxuKTogTGF5b3V0UmVzdWx0IHtcbiAgLy8gSGFuZGxlIGZ1bmN0aW9uIHNjaGVtYXNcbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIEhUTUwgc3RyaW5nIHNjaGVtYXNcbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBzY2hlbWEudHJpbSgpO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gdGVtcGxhdGUuY29udGVudDtcblxuICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIGZyYWdtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgbGF5b3V0ID0geyBlbGVtZW50OiBmcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB9O1xuICAgIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBKU1gtbGlrZSBzY2hlbWFzIChhcnJheSB3aXRoIGZ1bmN0aW9uLCBzdHJpbmcsIG9iamVjdCBwYXR0ZXJuKVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShzY2hlbWEpICYmXG4gICAgc2NoZW1hLmxlbmd0aCA+PSAzICYmXG4gICAgdHlwZW9mIHNjaGVtYVswXSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHNjaGVtYVsxXSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYVsyXSlcbiAgKSB7XG4gICAgcmV0dXJuIHByb2Nlc3NBcnJheVNjaGVtYShzY2hlbWEsIHBhcmVudEVsZW1lbnQsIDAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgcHJvY2Vzc29yXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICA/IHByb2Nlc3NBcnJheVNjaGVtYShzY2hlbWEsIHBhcmVudEVsZW1lbnQsIDAsIG9wdGlvbnMpXG4gICAgOiBwcm9jZXNzT2JqZWN0U2NoZW1hKHNjaGVtYSwgcGFyZW50RWxlbWVudCwgb3B0aW9ucyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVYUE9SVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xlYXIgZnVuY3Rpb25zIGZvciB0aGUgdW5pZmllZCBzeXN0ZW1cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNsYXNzQ2FjaGUoKTogdm9pZCB7XG4gIGNsYXNzQ2FjaGUuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRnJhZ21lbnRQb29sKCk6IHZvaWQge1xuICBmcmFnbWVudFBvb2wuY2xlYXIoKTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvY2Vzc0NsYXNzTmFtZXMsXG4gIGlzQ29tcG9uZW50LFxuICBmbGF0dGVuTGF5b3V0LFxuICBhcHBseUxheW91dENsYXNzZXMsXG4gIGFwcGx5TGF5b3V0SXRlbUNsYXNzZXMsXG4gIGNyZWF0ZUxheW91dFJlc3VsdCxcbn07XG4iLAogICAgIi8qKlxuICogQG1vZHVsZSBjb3JlL2xheW91dC9jb25maWdcbiAqIEBkZXNjcmlwdGlvbiBFc3NlbnRpYWwgbGF5b3V0IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzXG4gKiBDb3JlIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCBpbnRvIHNjaGVtYS50cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gKi9cblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IFBSRUZJWCA9IFwibXRybFwiOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlIGZyb20gbWFpbiBtdHJsIGNvbmZpZ1xuY29uc3QgUFJFRklYX1dJVEhfREFTSCA9IGAke1BSRUZJWH0tYDtcblxuLyoqXG4gKiBTaW1wbGUgRE9NIHV0aWxpdGllc1xuICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50OiBhbnksIGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChlbGVtZW50ICYmIGNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQ6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc0xpc3QgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2xlYW4gdXAgcHJldmlvdXMgbGF5b3V0IGNsYXNzZXMgZnJvbSBhbiBlbGVtZW50XG4gKiBVc2VmdWwgZm9yIGR5bmFtaWMgY2xhc3MgbWFuYWdlbWVudFxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gRWxlbWVudCB0byBjbGVhbiBsYXlvdXQgY2xhc3NlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwTGF5b3V0Q2xhc3NlcyhlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuXG4gIC8vIEdldCBhbGwgY2xhc3NlcyBmcm9tIHRoZSBlbGVtZW50XG4gIGNvbnN0IGNsYXNzTGlzdCA9IEFycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpIGFzIHN0cmluZ1tdO1xuXG4gIC8vIEZpbmQgYW5kIHJlbW92ZSBsYXlvdXQtcmVsYXRlZCBjbGFzc2VzXG4gIGNvbnN0IGxheW91dENsYXNzZXMgPSBjbGFzc0xpc3QuZmlsdGVyKFxuICAgIChjbHM6IHN0cmluZykgPT5cbiAgICAgIGNscy5zdGFydHNXaXRoKGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1gKSB8fFxuICAgICAgY2xzLmluY2x1ZGVzKGAtJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tYClcbiAgKTtcblxuICAvLyBSZW1vdmUgZWFjaCBsYXlvdXQgY2xhc3NcbiAgbGF5b3V0Q2xhc3Nlcy5mb3JFYWNoKChjbHM6IHN0cmluZykgPT4ge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsYXlvdXQgdHlwZSBmcm9tIGVsZW1lbnQgY2xhc3Nlc1xuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gRWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgTGF5b3V0IHR5cGUgaWYgZm91bmQsIGVtcHR5IHN0cmluZyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dFR5cGUoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1zdGFja2ApXG4gICAgPyBcInN0YWNrXCJcbiAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3dgKVxuICAgID8gXCJyb3dcIlxuICAgIDogaGFzQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXQtLWdyaWRgKVxuICAgID8gXCJncmlkXCJcbiAgICA6IFwiXCI7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBwcmVmaXggZm9yIHRoZSBsYXlvdXQgc3lzdGVtXG4gKiBAcmV0dXJucyBDdXJyZW50IHByZWZpeCB3aXRoIGRhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dFByZWZpeCgpOiBzdHJpbmcge1xuICByZXR1cm4gUFJFRklYX1dJVEhfREFTSDtcbn1cblxuLyoqXG4gKiBTZXRzIGxheW91dCBjbGFzc2VzIG9uIGFuIGVsZW1lbnQgZHluYW1pY2FsbHlcbiAqIFVzZWZ1bCBmb3IgcHJvZ3JhbW1hdGljIGxheW91dCB1cGRhdGVzXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUYXJnZXQgZWxlbWVudFxuICogQHBhcmFtIGxheW91dFR5cGUgLSBMYXlvdXQgdHlwZSB0byBhcHBseVxuICogQHBhcmFtIGNsYXNzZXMgLSBBZGRpdGlvbmFsIGNsYXNzZXMgdG8gYXBwbHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheW91dENsYXNzZXMoXG4gIGVsZW1lbnQ6IGFueSxcbiAgbGF5b3V0VHlwZTogc3RyaW5nLFxuICBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdXG4pOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFsYXlvdXRUeXBlKSByZXR1cm47XG5cbiAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgbGF5b3V0IGNsYXNzZXMgZmlyc3RcbiAgY2xlYW51cExheW91dENsYXNzZXMoZWxlbWVudCk7XG5cbiAgLy8gQXBwbHkgYmFzZSBsYXlvdXQgdHlwZVxuICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tJHtsYXlvdXRUeXBlfWApO1xuXG4gIC8vIEFwcGx5IGFkZGl0aW9uYWwgY2xhc3Nlc1xuICBjbGFzc2VzLmZvckVhY2goKGNscykgPT4ge1xuICAgIGlmIChjbHMuc3RhcnRzV2l0aChcImxheW91dC0tXCIpIHx8IGNscy5zdGFydHNXaXRoKFwibGF5b3V0X19cIikpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9JHtjbHN9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGNscyk7XG4gICAgfVxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBAbW9kdWxlIGNvcmUvbGF5b3V0L2pzeFxuICogQGRlc2NyaXB0aW9uIEpTWC1saWtlIHN5bnRheCBzdXBwb3J0IGZvciBsYXlvdXQgY3JlYXRpb25cbiAqIFByb3ZpZGVzIGEgc2ltcGxlIGgoKSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZWxlbWVudHMgd2l0aG91dCBSZWFjdCBkZXBlbmRlbmN5XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMYXlvdXRSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGF5b3V0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbi8qKlxuICogRnJhZ21lbnQgc3ltYm9sIGZvciBKU1ggZnJhZ21lbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBGcmFnbWVudCA9IFN5bWJvbChcIkZyYWdtZW50XCIpO1xuXG4vKipcbiAqIEpTWC1saWtlIGh5cGVyc2NyaXB0IGZ1bmN0aW9uXG4gKiBDcmVhdGVzIGVsZW1lbnRzIGluIGEgUmVhY3QtbGlrZSBzeW50YXggd2l0aG91dCBSZWFjdCBkZXBlbmRlbmN5XG4gKlxuICogQHBhcmFtIHRhZyAtIEhUTUwgdGFnIG5hbWUsIGNvbXBvbmVudCBmdW5jdGlvbiwgb3IgRnJhZ21lbnRcbiAqIEBwYXJhbSBwcm9wcyAtIEVsZW1lbnQgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlc1xuICogQHBhcmFtIGNoaWxkcmVuIC0gQ2hpbGQgZWxlbWVudHNcbiAqIEByZXR1cm5zIERPTSBlbGVtZW50IG9yIGNvbXBvbmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaChcbiAgdGFnOiBzdHJpbmcgfCBGdW5jdGlvbiB8IHR5cGVvZiBGcmFnbWVudCxcbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCxcbiAgLi4uY2hpbGRyZW46IGFueVtdXG4pOiBhbnkge1xuICAvLyBIYW5kbGUgRnJhZ21lbnRcbiAgaWYgKHRhZyA9PT0gRnJhZ21lbnQpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9XG4gICAgICAgICAgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQpIDogY2hpbGQ7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdHJpbmcgdGFncyAoSFRNTCBlbGVtZW50cylcbiAgaWYgKHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgLy8gQXBwbHkgcHJvcHNcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcImNsYXNzTmFtZVwiIHx8IGtleSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aChcIm9uXCIpICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gRXZlbnQgaGFuZGxlclxuICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGtleS5zbGljZSgyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3R5bGVcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAvLyBTdHlsZSBvYmplY3RcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIikge1xuICAgICAgICAgIC8vIEhUTUwgY29udGVudFxuICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWUuX19odG1sIHx8IFwiXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJlZ3VsYXIgYXR0cmlidXRlXG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGVuZCBjaGlsZHJlblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNoaWxkKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBjb21wb25lbnQgZnVuY3Rpb25zXG4gIGlmICh0eXBlb2YgdGFnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBhbGxQcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxQcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gdGFnKGFsbFByb3BzKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIGRpdlxuICByZXR1cm4gaChcImRpdlwiLCBwcm9wcywgLi4uY2hpbGRyZW4pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgdXNpbmcgSlNYLWxpa2Ugc3ludGF4XG4gKiBQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIEpTWCBhbmQgdGhlIGxheW91dCBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0ganN4RWxlbWVudCAtIEpTWCBlbGVtZW50IGNyZWF0ZWQgd2l0aCBoKClcbiAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IC0gUGFyZW50IGVsZW1lbnQgdG8gYXR0YWNoIHRvXG4gKiBAcmV0dXJucyBMYXlvdXQgcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc3hMYXlvdXQoXG4gIGpzeEVsZW1lbnQ6IGFueSxcbiAgcGFyZW50RWxlbWVudD86IGFueVxuKTogTGF5b3V0UmVzdWx0IHtcbiAgLy8gQ29udmVydCBKU1ggZWxlbWVudCB0byBsYXlvdXQgc2NoZW1hXG4gIGNvbnN0IHNjaGVtYSA9IGpzeEVsZW1lbnQ7XG5cbiAgLy8gQ3JlYXRlIGxheW91dCB1c2luZyB0aGUgc3RhbmRhcmQgY3JlYXRlTGF5b3V0IGZ1bmN0aW9uXG4gIHJldHVybiBjcmVhdGVMYXlvdXQoc2NoZW1hLCBwYXJlbnRFbGVtZW50KTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHRvIGNyZWF0ZSBhIHNpbXBsZSBjb21wb25lbnQgZnJvbSBhIGZ1bmN0aW9uXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIEpTWCBjb21wb25lbnRzXG4gKlxuICogQHBhcmFtIGZuIC0gQ29tcG9uZW50IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBpbiBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvbmVudChmbjogKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkpOiBGdW5jdGlvbiB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICAgIHJldHVybiBmbihwcm9wcyB8fCB7fSk7XG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSB0byByZW5kZXIgbXVsdGlwbGUgSlNYIGVsZW1lbnRzXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIGxpc3RzIG9yIGNvbGxlY3Rpb25zXG4gKlxuICogQHBhcmFtIGVsZW1lbnRzIC0gQXJyYXkgb2YgSlNYIGVsZW1lbnRzXG4gKiBAcGFyYW0gcGFyZW50RWxlbWVudCAtIFBhcmVudCBlbGVtZW50IHRvIGF0dGFjaCB0b1xuICogQHJldHVybnMgQXJyYXkgb2YgbGF5b3V0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVsZW1lbnRzKFxuICBlbGVtZW50czogYW55W10sXG4gIHBhcmVudEVsZW1lbnQ/OiBhbnlcbik6IExheW91dFJlc3VsdFtdIHtcbiAgcmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gY3JlYXRlSnN4TGF5b3V0KGVsZW1lbnQsIHBhcmVudEVsZW1lbnQpKTtcbn1cblxuLyoqXG4gKiBDb21tb24gSlNYIGVsZW1lbnQgY3JlYXRvcnMgZm9yIGNvbnZlbmllbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBqc3ggPSB7XG4gIGRpdjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJkaXZcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgc3BhbjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJzcGFuXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIHA6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwicFwiLCBwcm9wcywgLi4uY2hpbGRyZW4pLFxuICBidXR0b246IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwiYnV0dG9uXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIGlucHV0OiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBoKFwiaW5wdXRcIiwgcHJvcHMpLFxuICBpbWc6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGgoXCJpbWdcIiwgcHJvcHMpLFxuICBhOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcImFcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgdWw6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwidWxcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgbGk6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwibGlcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgc2VjdGlvbjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJzZWN0aW9uXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIGhlYWRlcjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJoZWFkZXJcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgZm9vdGVyOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcImZvb3RlclwiLCBwcm9wcywgLi4uY2hpbGRyZW4pLFxuICBtYWluOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcIm1haW5cIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgYXJ0aWNsZTogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJhcnRpY2xlXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG59O1xuIiwKICAgICIvKipcbiAqIEBtb2R1bGUgY29yZS9sYXlvdXRcbiAqIEBkZXNjcmlwdGlvbiBVbmlmaWVkIGxheW91dCBzeXN0ZW0gZm9yIG10cmwtYWRkb25zXG4gKiBQcm92aWRlcyBhcnJheSwgb2JqZWN0LCBhbmQgSlNYLWJhc2VkIGxheW91dCBjcmVhdGlvbiB3aXRoIGludGVncmF0ZWQgb3B0aW1pemF0aW9uc1xuICovXG5cbi8vIEltcG9ydCBmb3IgdXNlIGluIGNvbnZlbmllbmNlIGZ1bmN0aW9uc1xuaW1wb3J0IHsgY3JlYXRlTGF5b3V0LCBjbGVhckNsYXNzQ2FjaGUsIGNsZWFyRnJhZ21lbnRQb29sIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbi8vIENvcmUgc2NoZW1hIHByb2Nlc3NvciBhbmQgdXRpbGl0aWVzXG5leHBvcnQge1xuICBjcmVhdGVMYXlvdXQsXG4gIHByb2Nlc3NDbGFzc05hbWVzLFxuICBpc0NvbXBvbmVudCxcbiAgZmxhdHRlbkxheW91dCxcbiAgYXBwbHlMYXlvdXRDbGFzc2VzLFxuICBhcHBseUxheW91dEl0ZW1DbGFzc2VzLFxuICBjcmVhdGVMYXlvdXRSZXN1bHQsXG4gIGNsZWFyQ2xhc3NDYWNoZSxcbiAgY2xlYXJGcmFnbWVudFBvb2wsXG59IGZyb20gXCIuL3NjaGVtYVwiO1xuXG4vLyBFc3NlbnRpYWwgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgTGF5b3V0Q29uZmlnLFxuICBMYXlvdXRJdGVtQ29uZmlnLFxuICBMYXlvdXRPcHRpb25zLFxuICBMYXlvdXRSZXN1bHQsXG4gIENvbXBvbmVudExpa2UsXG4gIEVsZW1lbnRPcHRpb25zLFxuICBFbGVtZW50RGVmaW5pdGlvbixcbiAgU2NoZW1hLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBDb25maWd1cmF0aW9uIHV0aWxpdGllc1xuZXhwb3J0IHtcbiAgY2xlYW51cExheW91dENsYXNzZXMsXG4gIGdldExheW91dFR5cGUsXG4gIGdldExheW91dFByZWZpeCxcbiAgc2V0TGF5b3V0Q2xhc3Nlcyxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5cbi8vIEpTWCBzdXBwb3J0XG5leHBvcnQge1xuICBoLFxuICBGcmFnbWVudCxcbiAgY3JlYXRlSnN4TGF5b3V0LFxuICBjb21wb25lbnQsXG4gIHJlbmRlckVsZW1lbnRzLFxuICBqc3gsXG59IGZyb20gXCIuL2pzeFwiO1xuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgY29udmVuaWVudCB1c2FnZVxuZXhwb3J0IHsgY3JlYXRlTGF5b3V0IGFzIGRlZmF1bHQgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBsYXlvdXQgd2l0aCBjb21tb24gcGF0dGVybnNcbiAqIFByb3ZpZGVzIGEgc2ltcGxlciBBUEkgZm9yIGNvbW1vbiB1c2UgY2FzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheW91dChcbiAgdHlwZTogXCJzdGFja1wiIHwgXCJyb3dcIiB8IFwiZ3JpZFwiIHwgXCJmbGV4XCIgPSBcInN0YWNrXCIsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHsgdHlwZSB9LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9LFxuICBdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBncmlkIGxheW91dFxuICogQXV0b21hdGljYWxseSBoYW5kbGVzIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyaWQoXG4gIGNvbHVtbnM6IG51bWJlciB8IFwiYXV0by1maXRcIiB8IFwiYXV0by1maWxsXCIgPSBcImF1dG8tZml0XCIsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdHlwZTogXCJncmlkXCIsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGdhcDogb3B0aW9ucy5nYXAgfHwgXCIxcmVtXCIsXG4gICAgICAgIC4uLm9wdGlvbnMubGF5b3V0LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSxcbiAgXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZsZXhpYmxlIHJvdyBsYXlvdXRcbiAqIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyBtb2JpbGUgc3RhY2tpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdyhvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBhbnkge1xuICByZXR1cm4gY3JlYXRlTGF5b3V0KFtcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGxheW91dDoge1xuICAgICAgICB0eXBlOiBcInJvd1wiLFxuICAgICAgICBnYXA6IG9wdGlvbnMuZ2FwIHx8IFwiMXJlbVwiLFxuICAgICAgICBtb2JpbGVTdGFjazogb3B0aW9ucy5tb2JpbGVTdGFjayAhPT0gZmFsc2UsXG4gICAgICAgIC4uLm9wdGlvbnMubGF5b3V0LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSxcbiAgXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZlcnRpY2FsIHN0YWNrIGxheW91dFxuICogRGVmYXVsdCBsYXlvdXQgdHlwZSB3aXRoIGNvbnNpc3RlbnQgc3BhY2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhY2sob3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdHlwZTogXCJzdGFja1wiLFxuICAgICAgICBnYXA6IG9wdGlvbnMuZ2FwIHx8IFwiMXJlbVwiLFxuICAgICAgICAuLi5vcHRpb25zLmxheW91dCxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0sXG4gIF0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgZnJvbSBhIHRlbXBsYXRlIGZ1bmN0aW9uXG4gKiBVc2VmdWwgZm9yIGR5bmFtaWMgbGF5b3V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUoXG4gIGZuOiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgY29uc3Qgc2NoZW1hID0gZm4ocHJvcHMpO1xuICByZXR1cm4gY3JlYXRlTGF5b3V0KHNjaGVtYSk7XG59XG5cbi8qKlxuICogUGVyZm9ybWFuY2UgdXRpbGl0aWVzIGZvciBsYXlvdXQgbWFuYWdlbWVudFxuICovXG5leHBvcnQgY29uc3QgcGVyZm9ybWFuY2UgPSB7XG4gIGNsZWFyQ2FjaGU6IGNsZWFyQ2xhc3NDYWNoZSxcbiAgY2xlYXJGcmFnbWVudFBvb2wsXG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgY2FjaGVkIHJlc291cmNlc1xuICAgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgY2xlYXJDbGFzc0NhY2hlKCk7XG4gICAgY2xlYXJGcmFnbWVudFBvb2woKTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyBjdXJyZW50IGNhY2hlIHN0YXRzXG4gICAqL1xuICBnZXRTdGF0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhdHMgd291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGFjdHVhbCBjYWNoZSBzeXN0ZW1cbiAgICAgIG1lc3NhZ2U6IFwiUGVyZm9ybWFuY2Ugc3RhdHMgYXZhaWxhYmxlIGluIGJyb3dzZXIgY29uc29sZVwiLFxuICAgIH07XG4gIH0sXG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZGQSxNQUFNLGFBQWE7QUFBQSxFQUNULE9BQTJCLENBQUM7QUFBQSxFQUM1QixVQUFVO0FBQUEsRUFFbEIsR0FBRyxHQUFxQjtBQUFBLElBQ3RCLE9BQU8sS0FBSyxLQUFLLElBQUksS0FBSyxTQUFTLHVCQUF1QjtBQUFBO0FBQUEsRUFHNUQsT0FBTyxDQUFDLFVBQWtDO0FBQUEsSUFDeEMsSUFBSSxLQUFLLEtBQUssU0FBUyxLQUFLLFdBQVcsU0FBUyxXQUFXLFdBQVcsR0FBRztBQUFBLE1BQ3ZFLEtBQUssS0FBSyxLQUFLLFFBQVE7QUFBQSxJQUN6QjtBQUFBO0FBQUEsRUFHRixLQUFLLEdBQVM7QUFBQSxJQUNaLEtBQUssS0FBSyxTQUFTO0FBQUE7QUFFdkI7QUFFQSxJQUFNLGVBQWUsSUFBSTtBQU16QixJQUFNLGFBQWEsSUFBSTtBQUd2QixJQUFNLFNBQVM7QUFDZixJQUFNLG1CQUFtQixHQUFHO0FBTTVCLFNBQVMsa0JBQWtCLENBQ3pCLE1BQ0EsVUFDQSxPQUNRO0FBQUEsRUFDUixNQUFNLE1BQU0sR0FBRyxRQUFRLFlBQVk7QUFBQSxFQUNuQyxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsR0FBRztBQUFBLElBQ3hCLElBQUksU0FBUyxRQUFRO0FBQUEs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
|
|
761
|
+
//# debugId=669DE5EDB0BBCC8864756E2164756E21
|
|
762
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvcmUvbGF5b3V0L3NjaGVtYS50cyIsICIuLi8uLi8uLi9zcmMvY29yZS9sYXlvdXQvY29uZmlnLnRzIiwgIi4uLy4uLy4uL3NyYy9jb3JlL2xheW91dC9qc3gudHMiLCAiLi4vLi4vLi4vc3JjL2NvcmUvbGF5b3V0L2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogQG1vZHVsZSBjb3JlL2xheW91dC9zY2hlbWFcbiAqIEBkZXNjcmlwdGlvbiBVbmlmaWVkIGxheW91dCBzY2hlbWEgcHJvY2Vzc29yIHdpdGggaW50ZWdyYXRlZCBvcHRpbWl6YXRpb25zXG4gKiBDb25zb2xpZGF0ZXMgYXJyYXksIG9iamVjdCwgSlNYLCBhbmQgdGVtcGxhdGUgcHJvY2Vzc2luZyB3aXRoIGJ1aWx0LWluIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTIChFc3NlbnRpYWwgb25seSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRDb25maWcge1xuICAvKiogQmFzZSBsYXlvdXQgdHlwZSAqL1xuICB0eXBlPzogXCJzdGFja1wiIHwgXCJyb3dcIiB8IFwiZ3JpZFwiIHwgc3RyaW5nO1xuICAvKiogU3BhY2luZyBiZXR3ZWVuIGVsZW1lbnRzICovXG4gIGdhcD86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBBbGlnbm1lbnQgb2YgaXRlbXMgYWxvbmcgdGhlIGNyb3NzIGF4aXMgKi9cbiAgYWxpZ24/OiBcInN0YXJ0XCIgfCBcImNlbnRlclwiIHwgXCJlbmRcIiB8IFwic3RyZXRjaFwiO1xuICAvKiogQWxpZ25tZW50IG9mIGl0ZW1zIGFsb25nIHRoZSBtYWluIGF4aXMgKi9cbiAganVzdGlmeT86IFwic3RhcnRcIiB8IFwiY2VudGVyXCIgfCBcImVuZFwiIHwgXCJiZXR3ZWVuXCIgfCBcImFyb3VuZFwiIHwgXCJldmVubHlcIjtcbiAgLyoqIFdoZXRoZXIgYW5kIGhvdyBpdGVtcyBzaG91bGQgd3JhcCAqL1xuICB3cmFwPzogYm9vbGVhbiB8IFwicmV2ZXJzZVwiIHwgXCJub3dyYXBcIjtcbiAgLyoqIFdoZXRoZXIgcm93IGl0ZW1zIHNob3VsZCBzdGFjayB2ZXJ0aWNhbGx5IG9uIG1vYmlsZSAqL1xuICBtb2JpbGVTdGFjaz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHJvdyBpdGVtcyBzaG91bGQgc2Nyb2xsIGhvcml6b250YWxseSBvbiBtb2JpbGUgKi9cbiAgbW9iaWxlU2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqIE51bWJlciBvZiBjb2x1bW5zIG9yIGF1dG9tYXRpYyBzaXppbmcgbWV0aG9kICovXG4gIGNvbHVtbnM/OiBudW1iZXIgfCBcImF1dG8tZml0XCIgfCBcImF1dG8tZmlsbFwiO1xuICAvKiogV2hldGhlciB0byB1c2UgZGVuc2UgcGFja2luZyBhbGdvcml0aG0gZm9yIGdyaWQgKi9cbiAgZGVuc2U/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBncmlkIGl0ZW1zIHNob3VsZCBhZGp1c3QgaGVpZ2h0IGF1dG9tYXRpY2FsbHkgKi9cbiAgYXV0b0hlaWdodD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0SXRlbUNvbmZpZyB7XG4gIC8qKiBDb2x1bW4gd2lkdGggaW4gYSAxMi1jb2x1bW4gZ3JpZCAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdpZHRoIG9uIHNtYWxsIHNjcmVlbnMgKi9cbiAgc20/OiBudW1iZXI7XG4gIC8qKiBXaWR0aCBvbiBtZWRpdW0gc2NyZWVucyAqL1xuICBtZD86IG51bWJlcjtcbiAgLyoqIFdpZHRoIG9uIGxhcmdlIHNjcmVlbnMgKi9cbiAgbGc/OiBudW1iZXI7XG4gIC8qKiBXaWR0aCBvbiBleHRyYS1sYXJnZSBzY3JlZW5zICovXG4gIHhsPzogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIGdyaWQgY29sdW1ucyB0byBzcGFuICovXG4gIHNwYW4/OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgZ3JpZCByb3dzIHRvIHNwYW4gKi9cbiAgcm93U3Bhbj86IG51bWJlcjtcbiAgLyoqIERpc3BsYXkgb3JkZXIgKi9cbiAgb3JkZXI/OiBudW1iZXIgfCBcImZpcnN0XCIgfCBcImxhc3RcIjtcbiAgLyoqIFNlbGYtYWxpZ25tZW50IHdpdGhpbiBjb250YWluZXIgKi9cbiAgYWxpZ24/OiBcInN0YXJ0XCIgfCBcImNlbnRlclwiIHwgXCJlbmRcIiB8IFwic3RyZXRjaFwiO1xuICAvKiogV2hldGhlciBpdGVtIHNob3VsZCBhdXRvbWF0aWNhbGx5IHNpemUgKi9cbiAgYXV0bz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0T3B0aW9ucyB7XG4gIC8qKiBEZWZhdWx0IGNyZWF0b3IgZnVuY3Rpb24gdG8gdXNlIGlmIG5vdCBzcGVjaWZpZWQgaW4gc2NoZW1hICovXG4gIGNyZWF0b3I/OiBGdW5jdGlvbjtcbiAgLyoqIFdoZXRoZXIgdG8gYXBwbHkgQ1NTIGNsYXNzIHByZWZpeCBAZGVmYXVsdCB0cnVlICovXG4gIHByZWZpeD86IGJvb2xlYW47XG4gIC8qKiBBZGRpdGlvbmFsIG9wdGlvbnMgKi9cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFJlc3VsdCB7XG4gIC8qKiBUaGUgcmF3IGxheW91dCBvYmplY3Qgd2l0aCBhbGwgY29tcG9uZW50cyAqL1xuICBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCBmb3IgY29udmVuaWVuY2UgKi9cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBhbnk7XG4gIC8qKiBGbGF0dGVuZWQgY29tcG9uZW50IG1hcCAqL1xuICBjb21wb25lbnQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKiBHZXRzIGEgY29tcG9uZW50IGJ5IG5hbWUgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IGFueTtcbiAgLyoqIEdldHMgYWxsIGNvbXBvbmVudHMgaW4gYSBmbGF0dGVuZWQgbWFwICovXG4gIGdldEFsbCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKiogRGVzdHJveXMgdGhlIGxheW91dCwgY2xlYW5pbmcgdXAgYWxsIGNvbXBvbmVudHMgKi9cbiAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG50eXBlIENvbXBvbmVudExpa2UgPSB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbnR5cGUgU2NoZW1hSXRlbSA9IEZ1bmN0aW9uIHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IFNjaGVtYUl0ZW1bXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQlVJTFQtSU4gT1BUSU1JWkFUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEZyYWdtZW50IFBvb2wgZm9yIGVmZmljaWVudCBEb2N1bWVudEZyYWdtZW50IHJldXNlXG4gKiBSZWR1Y2VzIEdDIHByZXNzdXJlIGluIGhpZ2gtZnJlcXVlbmN5IGxheW91dCBjcmVhdGlvbiBzY2VuYXJpb3NcbiAqL1xuY2xhc3MgRnJhZ21lbnRQb29sIHtcbiAgcHJpdmF0ZSBwb29sOiBEb2N1bWVudEZyYWdtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBtYXhTaXplID0gODsgLy8gT3B0aW1pemVkIHNpemUgZm9yIG1lbW9yeSBlZmZpY2llbmN5XG5cbiAgZ2V0KCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiB0aGlzLnBvb2wucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICB9XG5cbiAgcmVsZWFzZShmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvb2wubGVuZ3RoIDwgdGhpcy5tYXhTaXplICYmIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnBvb2wucHVzaChmcmFnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5wb29sLmxlbmd0aCA9IDA7XG4gIH1cbn1cblxuY29uc3QgZnJhZ21lbnRQb29sID0gbmV3IEZyYWdtZW50UG9vbCgpO1xuXG4vKipcbiAqIENsYXNzIG5hbWUgY2FjaGUgZm9yIGxheW91dCBjb25maWd1cmF0aW9uc1xuICogUmVkdWNlcyBzdHJpbmcgb3BlcmF0aW9ucyBieSBjYWNoaW5nIGdlbmVyYXRlZCBjbGFzcyBuYW1lc1xuICovXG5jb25zdCBjbGFzc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IFBSRUZJWCA9IFwibXRybFwiOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5jb25zdCBQUkVGSVhfV0lUSF9EQVNIID0gYCR7UFJFRklYfS1gO1xuXG4vKipcbiAqIEdldHMgYSBjYWNoZWQgY2xhc3MgbmFtZSBmb3IgbGF5b3V0IGNvbmZpZ3VyYXRpb25cbiAqIE9wdGltaXplZCBmb3IgZGlmZmVyZW50IGNsYXNzIG5hbWluZyBwYXR0ZXJuc1xuICovXG5mdW5jdGlvbiBnZXRDYWNoZWRDbGFzc05hbWUoXG4gIHR5cGU6IHN0cmluZyxcbiAgcHJvcGVydHk6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7cHJvcGVydHl9LSR7dmFsdWV9YDtcbiAgaWYgKCFjbGFzc0NhY2hlLmhhcyhrZXkpKSB7XG4gICAgaWYgKHR5cGUgPT09IFwiaXRlbVwiKSB7XG4gICAgICBjbGFzc0NhY2hlLnNldChcbiAgICAgICAga2V5LFxuICAgICAgICBwcm9wZXJ0eSA9PT0gXCJcIlxuICAgICAgICAgID8gYGxheW91dF9faXRlbS0tJHt2YWx1ZX1gXG4gICAgICAgICAgOiBgbGF5b3V0X19pdGVtLS0ke3Byb3BlcnR5fS0ke3ZhbHVlfWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgbGF5b3V0IGNsYXNzZXMsIGFsaWduIHVzZXMgbGF5b3V0LS17dHlwZX0te3ZhbHVlfVxuICAgICAgLy8gYnV0IGp1c3RpZnkgYW5kIG90aGVycyB1c2UgbGF5b3V0LS17dHlwZX0te3Byb3BlcnR5fS17dmFsdWV9XG4gICAgICBpZiAocHJvcGVydHkgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBjbGFzc0NhY2hlLnNldChrZXksIGBsYXlvdXQtLSR7dHlwZX0tJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzQ2FjaGUuc2V0KGtleSwgYGxheW91dC0tJHt0eXBlfS0ke3Byb3BlcnR5fS0ke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NDYWNoZS5nZXQoa2V5KSE7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9QVElNSVpFRCBVVElMSVRJRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBvYmplY3QgKGhhcyBhbiBlbGVtZW50IHByb3BlcnR5KVxuICovXG5mdW5jdGlvbiBpc0NvbXBvbmVudCh2YWx1ZTogYW55KTogdmFsdWUgaXMgQ29tcG9uZW50TGlrZSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJlbGVtZW50XCIgaW4gdmFsdWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRvY3VtZW50IGZyYWdtZW50IHVzaW5nIHBvb2xpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVGcmFnbWVudCgpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIGZyYWdtZW50UG9vbC5nZXQoKTtcbn1cblxuLyoqXG4gKiBSZWxlYXNlcyBhIGZyYWdtZW50IGJhY2sgdG8gdGhlIHBvb2wgZm9yIHJldXNlXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VGcmFnbWVudChmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICBmcmFnbWVudFBvb2wucmVsZWFzZShmcmFnbWVudCk7XG59XG5cbi8qKlxuICogT3B0aW1pemVkIGNsYXNzIHByb2Nlc3Npbmcgd2l0aCBtaW5pbWFsIHN0cmluZyBvcGVyYXRpb25zXG4gKiBIYW5kbGVzIGFycmF5cywgc3RyaW5ncywgY2xhc3NOYW1lIGFsaWFzZXMsIGFuZCByYXdDbGFzcyBlZmZpY2llbnRseVxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ2xhc3NOYW1lcyhcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2tpcFByZWZpeCA9IGZhbHNlLFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICghb3B0aW9ucykgcmV0dXJuIG9wdGlvbnM7XG5cbiAgY29uc3QgaGFzUmF3Q2xhc3MgPSBvcHRpb25zLnJhd0NsYXNzO1xuICBjb25zdCBoYXNSZWd1bGFyQ2xhc3MgPSBvcHRpb25zLmNsYXNzIHx8IG9wdGlvbnMuY2xhc3NOYW1lO1xuXG4gIC8vIEZhc3QgcGF0aDogbm8gY2xhc3MgcHJvcGVydGllcyBhdCBhbGxcbiAgaWYgKCFoYXNSYXdDbGFzcyAmJiAhaGFzUmVndWxhckNsYXNzKSByZXR1cm4gb3B0aW9ucztcblxuICAvLyBGYXN0IHBhdGg6IG9ubHkgcmF3Q2xhc3MgYW5kIHNraXBwaW5nIHByZWZpeCAobW9zdCBjb21tb24gcmF3Q2xhc3Mgc2NlbmFyaW8pXG4gIGlmIChoYXNSYXdDbGFzcyAmJiAhaGFzUmVndWxhckNsYXNzICYmIHNraXBQcmVmaXgpIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICBkZWxldGUgcHJvY2Vzc2VkLnJhd0NsYXNzO1xuXG4gICAgLy8gRGlyZWN0IGFzc2lnbm1lbnQgZm9yIHNpbXBsZSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGhhc1Jhd0NsYXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBwcm9jZXNzZWQuY2xhc3MgPSBoYXNSYXdDbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGFycmF5IGNhc2VcbiAgICAgIHByb2Nlc3NlZC5jbGFzcyA9IGhhc1Jhd0NsYXNzLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgLy8gRnVsbCBwcm9jZXNzaW5nIHBhdGggKG9ubHkgd2hlbiBuZWVkZWQpXG4gIGNvbnN0IHByb2Nlc3NlZCA9IHsgLi4ub3B0aW9ucyB9O1xuICBsZXQgZmluYWxDbGFzc2VzID0gXCJcIjtcblxuICAvLyBIYW5kbGUgcHJlZml4ZWQgY2xhc3NlcyBvbmx5IGlmIG5vdCBza2lwcGluZyBwcmVmaXhcbiAgaWYgKCFza2lwUHJlZml4ICYmIGhhc1JlZ3VsYXJDbGFzcykge1xuICAgIGxldCBwcmVmaXhlZFN0cmluZyA9IFwiXCI7XG5cbiAgICBpZiAocHJvY2Vzc2VkLmNsYXNzKSB7XG4gICAgICBwcmVmaXhlZFN0cmluZyArPSBBcnJheS5pc0FycmF5KHByb2Nlc3NlZC5jbGFzcylcbiAgICAgICAgPyBwcm9jZXNzZWQuY2xhc3Muam9pbihcIiBcIilcbiAgICAgICAgOiBwcm9jZXNzZWQuY2xhc3M7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzZWQuY2xhc3NOYW1lKSB7XG4gICAgICBwcmVmaXhlZFN0cmluZyArPSAocHJlZml4ZWRTdHJpbmcgPyBcIiBcIiA6IFwiXCIpICsgcHJvY2Vzc2VkLmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBpZiAocHJlZml4ZWRTdHJpbmcpIHtcbiAgICAgIGZpbmFsQ2xhc3NlcyA9IHByZWZpeGVkU3RyaW5nXG4gICAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcCgoY2xzKSA9PlxuICAgICAgICAgIGNscy5zdGFydHNXaXRoKFBSRUZJWF9XSVRIX0RBU0gpID8gY2xzIDogUFJFRklYX1dJVEhfREFTSCArIGNscyxcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIiBcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJhd0NsYXNzIChhbHdheXMgcHJvY2Vzc2VkIHdoZW4gcHJlc2VudClcbiAgaWYgKGhhc1Jhd0NsYXNzKSB7XG4gICAgY29uc3QgcmF3U3RyaW5nID0gQXJyYXkuaXNBcnJheShoYXNSYXdDbGFzcylcbiAgICAgID8gaGFzUmF3Q2xhc3MuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpXG4gICAgICA6IGhhc1Jhd0NsYXNzO1xuXG4gICAgZmluYWxDbGFzc2VzICs9IChmaW5hbENsYXNzZXMgPyBcIiBcIiA6IFwiXCIpICsgcmF3U3RyaW5nO1xuICB9XG5cbiAgaWYgKGZpbmFsQ2xhc3Nlcykge1xuICAgIHByb2Nlc3NlZC5jbGFzcyA9IGZpbmFsQ2xhc3NlcztcbiAgfVxuXG4gIC8vIENsZWFuIHVwIGluIG9uZSBvcGVyYXRpb25cbiAgZGVsZXRlIHByb2Nlc3NlZC5jbGFzc05hbWU7XG4gIGRlbGV0ZSBwcm9jZXNzZWQucmF3Q2xhc3M7XG5cbiAgcmV0dXJuIHByb2Nlc3NlZDtcbn1cblxuLyoqXG4gKiBPcHRpbWl6ZWQgcGFyYW1ldGVyIGV4dHJhY3Rpb24gZm9yIGFycmF5IHNjaGVtYXNcbiAqIFJlZHVjZXMgbXVsdGlwbGUgYXJyYXkgbG9va3VwcyB3aXRoIGJhdGNoIHByb2Nlc3NpbmdcbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RlZFBhcmFtZXRlcnMge1xuICBjcmVhdG9yOiBGdW5jdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgY29uc3VtZWQ6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBhcmFtZXRlcnMoXG4gIHNjaGVtYTogU2NoZW1hSXRlbVtdLFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIGRlZmF1bHRDcmVhdG9yOiBGdW5jdGlvbixcbik6IEV4dHJhY3RlZFBhcmFtZXRlcnMge1xuICBjb25zdCBpdGVtcyA9IHNjaGVtYS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgMyk7XG4gIGxldCBjcmVhdG9yLCBuYW1lLCBvcHRpb25zO1xuICBsZXQgY29uc3VtZWQgPSAxO1xuXG4gIGNvbnN0IFtmaXJzdCwgc2Vjb25kLCB0aGlyZF0gPSBpdGVtcztcblxuICBpZiAodHlwZW9mIGZpcnN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjcmVhdG9yID0gZmlyc3Q7XG4gICAgaWYgKHR5cGVvZiBzZWNvbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5hbWUgPSBzZWNvbmQ7XG4gICAgICBjb25zdW1lZCA9IDI7XG4gICAgICBpZiAoaXNPYmplY3QodGhpcmQpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB0aGlyZDtcbiAgICAgICAgY29uc3VtZWQgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2Vjb25kKSkge1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICAgIGNvbnN1bWVkID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY3JlYXRvciA9IGRlZmF1bHRDcmVhdG9yO1xuICAgIG5hbWUgPSBmaXJzdDtcbiAgICBpZiAoaXNPYmplY3Qoc2Vjb25kKSkge1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICAgIGNvbnN1bWVkID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoZmlyc3QpKSB7XG4gICAgY3JlYXRvciA9IGRlZmF1bHRDcmVhdG9yO1xuICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRvcjogY3JlYXRvciB8fCBkZWZhdWx0Q3JlYXRvcixcbiAgICBuYW1lLFxuICAgIG9wdGlvbnM6IChvcHRpb25zIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNvbnN1bWVkLFxuICB9O1xufVxuXG4vKipcbiAqIFNpbXBsZSBvYmplY3QgdHlwZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBET00gVVRJTElUSUVTIChTaW1wbGlmaWVkKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNpbXBsZSBET00gZWxlbWVudCBjcmVhdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgdGFnID0gb3B0aW9ucy50YWcgfHwgXCJkaXZcIjtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuICBpZiAob3B0aW9ucy5jbGFzcykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzcztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnN0eWxlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnN0eWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIG9wdGlvbnMuc3R5bGUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuc3R5bGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgb3B0aW9ucy5zdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMudGV4dENvbnRlbnQpIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9ucy50ZXh0Q29udGVudDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRleHQpIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9ucy50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhbiBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZWxlbWVudCAmJiBjbGFzc05hbWUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBlbGVtZW50IGhhcyBhIENTUyBjbGFzc1xuICovXG5mdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVU5JRklFRCBDT01QT05FTlQgQ1JFQVRJT04gKHdpdGggZGVzdHJ1Y3R1cmluZyBvcHRpbWl6YXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBvbmVudCBpbnN0YW5jZSB3aXRoIG9wdGltaXplZCBvcHRpb24gcHJvY2Vzc2luZ1xuICogVXNlcyBkZXN0cnVjdHVyaW5nIGZvciBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoXG4gIENvbXBvbmVudDogYW55LFxuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4pOiBhbnkge1xuICB0cnkge1xuICAgIC8vIERlc3RydWN0dXJlIHNwZWNpYWwgY29uZmlncyBpbiBvbmUgb3BlcmF0aW9uXG4gICAgY29uc3Qge1xuICAgICAgbGF5b3V0OiBsYXlvdXRDb25maWcsXG4gICAgICBsYXlvdXRJdGVtOiBsYXlvdXRJdGVtQ29uZmlnLFxuICAgICAgc3R5bGU6IHN0eWxlQ29uZmlnLFxuICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc0NvbmZpZyxcbiAgICAgIGV2ZW50czogZXZlbnRzQ29uZmlnLFxuICAgICAgZXZlbnQsIC8vIExlZ2FjeSBzdXBwb3J0XG4gICAgICAuLi5jbGVhbk9wdGlvbnNcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIC8vIFVzZSBldmVudHMgb3ZlciBldmVudCAoZXZlbnRzIGlzIHByZWZlcnJlZClcbiAgICBjb25zdCBmaW5hbEV2ZW50c0NvbmZpZyA9IGV2ZW50c0NvbmZpZyB8fCBldmVudDtcblxuICAgIC8vIElmIHN0eWxlIGlzIGEgc3RyaW5nLCBhbHdheXMgcGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBjb21wb25lbnRcbiAgICBpZiAoc3R5bGVDb25maWcgJiYgdHlwZW9mIHN0eWxlQ29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjbGVhbk9wdGlvbnMuc3R5bGUgPSBzdHlsZUNvbmZpZztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY29tcG9uZW50XG4gICAgY29uc3QgaXNDbGFzcyA9XG4gICAgICB0eXBlb2YgQ29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQ29tcG9uZW50LCBcInByb3RvdHlwZVwiKT8ud3JpdGFibGUgPT09XG4gICAgICAgIGZhbHNlO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gaXNDbGFzc1xuICAgICAgPyBuZXcgQ29tcG9uZW50KGNsZWFuT3B0aW9ucylcbiAgICAgIDogQ29tcG9uZW50KGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBBcHBseSBjb25maWd1cmF0aW9ucyBpZiBjb21wb25lbnQgaGFzIGVsZW1lbnRcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgY29tcG9uZW50LmVsZW1lbnQgfHxcbiAgICAgICAgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gY29tcG9uZW50IDogbnVsbCk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyBBcHBseSBsYXlvdXQgY2xhc3Nlc1xuICAgICAgICBpZiAobGF5b3V0Q29uZmlnKSBhcHBseUxheW91dENsYXNzZXMoZWxlbWVudCwgbGF5b3V0Q29uZmlnKTtcblxuICAgICAgICAvLyBBcHBseSBsYXlvdXQgaXRlbSBjbGFzc2VzXG4gICAgICAgIGlmIChsYXlvdXRJdGVtQ29uZmlnKSBhcHBseUxheW91dEl0ZW1DbGFzc2VzKGVsZW1lbnQsIGxheW91dEl0ZW1Db25maWcpO1xuXG4gICAgICAgIC8vIEFwcGx5IHN0eWxlXG4gICAgICAgIGlmIChzdHlsZUNvbmZpZyAmJiB0eXBlb2Ygc3R5bGVDb25maWcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFwcGx5IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXNDb25maWcgJiYgdHlwZW9mIGF0dHJpYnV0ZXNDb25maWcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzQ29uZmlnKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBseSBldmVudHNcbiAgICAgICAgaWYgKGZpbmFsRXZlbnRzQ29uZmlnICYmIHR5cGVvZiBmaW5hbEV2ZW50c0NvbmZpZyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbmFsRXZlbnRzQ29uZmlnKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudERlZiBvZiBmaW5hbEV2ZW50c0NvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudERlZikgJiYgZXZlbnREZWYubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZXZlbnROYW1lLCBoYW5kbGVyXSA9IGV2ZW50RGVmO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudE5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtldmVudE5hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICBmaW5hbEV2ZW50c0NvbmZpZyxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNyZWF0aW5nIGNvbXBvbmVudCBpbnN0YW5jZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOVEVHUkFURUQgTEFZT1VUIENPTkZJR1VSQVRJT04gKHdpdGggY2FjaGluZylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBcHBsaWVzIGxheW91dCBjbGFzc2VzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAqIFVzZXMgaW50ZWdyYXRlZCBjYWNoaW5nIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlXG4gKi9cbmZ1bmN0aW9uIGFwcGx5TGF5b3V0Q2xhc3NlcyhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGxheW91dENvbmZpZzogTGF5b3V0Q29uZmlnLFxuKTogdm9pZCB7XG4gIGlmICghZWxlbWVudCB8fCAhbGF5b3V0Q29uZmlnKSByZXR1cm47XG5cbiAgLy8gQXBwbHkgYmFzZSBsYXlvdXQgdHlwZVxuICBpZiAobGF5b3V0Q29uZmlnLnR5cGUpIHtcbiAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tJHtsYXlvdXRDb25maWcudHlwZX1gKTtcbiAgfVxuXG4gIC8vIEFwcGx5IHByb3BlcnRpZXMgd2l0aCBjYWNoaW5nXG4gIGNvbnN0IGxheW91dFR5cGUgPSBsYXlvdXRDb25maWcudHlwZSB8fCBnZXRMYXlvdXRUeXBlKGVsZW1lbnQpO1xuICBpZiAobGF5b3V0VHlwZSkge1xuICAgIGlmIChsYXlvdXRDb25maWcuZ2FwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgICBnZXRDYWNoZWRDbGFzc05hbWUobGF5b3V0VHlwZSwgXCJnYXBcIiwgbGF5b3V0Q29uZmlnLmdhcCksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobGF5b3V0Q29uZmlnLmFsaWduKSB7XG4gICAgICBhZGRDbGFzcyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgUFJFRklYX1dJVEhfREFTSCArXG4gICAgICAgICAgZ2V0Q2FjaGVkQ2xhc3NOYW1lKGxheW91dFR5cGUsIFwiYWxpZ25cIiwgbGF5b3V0Q29uZmlnLmFsaWduKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcuanVzdGlmeSkge1xuICAgICAgYWRkQ2xhc3MoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIFBSRUZJWF9XSVRIX0RBU0ggK1xuICAgICAgICAgIGdldENhY2hlZENsYXNzTmFtZShsYXlvdXRUeXBlLCBcImp1c3RpZnlcIiwgbGF5b3V0Q29uZmlnLmp1c3RpZnkpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBHcmlkLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgaWYgKGxheW91dENvbmZpZy50eXBlID09PSBcImdyaWRcIiB8fCBnZXRMYXlvdXRUeXBlKGVsZW1lbnQpID09PSBcImdyaWRcIikge1xuICAgIGlmICh0eXBlb2YgbGF5b3V0Q29uZmlnLmNvbHVtbnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgICBnZXRDYWNoZWRDbGFzc05hbWUoXCJncmlkXCIsIFwiY29sc1wiLCBsYXlvdXRDb25maWcuY29sdW1ucyksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobGF5b3V0Q29uZmlnLmNvbHVtbnMgPT09IFwiYXV0by1maWxsXCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiZ3JpZFwiLCBcImZpbGxcIiwgXCJhdXRvXCIpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxheW91dENvbmZpZy5jb2x1bW5zID09PSBcImF1dG8tZml0XCIpIHtcbiAgICAgIGFkZENsYXNzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiZ3JpZFwiLCBcImNvbHNcIiwgXCJhdXRvLWZpdFwiKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcuZGVuc2UpXG4gICAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tZ3JpZC1kZW5zZWApO1xuICAgIGlmIChsYXlvdXRDb25maWcuYXV0b0hlaWdodClcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1ncmlkLWF1dG8taGVpZ2h0YCk7XG4gIH1cblxuICAvLyBSb3ctc3BlY2lmaWMgcHJvcGVydGllc1xuICBpZiAobGF5b3V0Q29uZmlnLnR5cGUgPT09IFwicm93XCIgfHwgZ2V0TGF5b3V0VHlwZShlbGVtZW50KSA9PT0gXCJyb3dcIikge1xuICAgIGlmIChsYXlvdXRDb25maWcud3JhcCA9PT0gZmFsc2UgfHwgbGF5b3V0Q29uZmlnLndyYXAgPT09IFwibm93cmFwXCIpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3ctbm93cmFwYCk7XG4gICAgfSBlbHNlIGlmIChsYXlvdXRDb25maWcud3JhcCA9PT0gXCJyZXZlcnNlXCIpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3ctd3JhcC1yZXZlcnNlYCk7XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcubW9iaWxlU3RhY2spXG4gICAgICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tcm93LW1vYmlsZS1zdGFja2ApO1xuICAgIGlmIChsYXlvdXRDb25maWcubW9iaWxlU2Nyb2xsKVxuICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXQtLXJvdy1tb2JpbGUtc2Nyb2xsYCk7XG4gIH1cblxuICAvLyBDdXN0b20gY2xhc3Nlc1xuICBpZiAobGF5b3V0Q29uZmlnLmNsYXNzKSB7XG4gICAgbGF5b3V0Q29uZmlnLmNsYXNzXG4gICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuZm9yRWFjaCgoY2xzKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGxheW91dCBpdGVtIGNsYXNzZXMgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICogVXNlcyBpbnRlZ3JhdGVkIGNhY2hpbmcgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2VcbiAqL1xuZnVuY3Rpb24gYXBwbHlMYXlvdXRJdGVtQ2xhc3NlcyhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGl0ZW1Db25maWc6IExheW91dEl0ZW1Db25maWcsXG4pOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFpdGVtQ29uZmlnKSByZXR1cm47XG5cbiAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXRfX2l0ZW1gKTtcblxuICAvLyBXaWR0aCBhbmQgcmVzcG9uc2l2ZSBjbGFzc2VzIHdpdGggY2FjaGluZ1xuICBpZiAoaXRlbUNvbmZpZy53aWR0aCAmJiBpdGVtQ29uZmlnLndpZHRoID49IDEgJiYgaXRlbUNvbmZpZy53aWR0aCA8PSAxMikge1xuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwiXCIsIGl0ZW1Db25maWcud2lkdGgpLFxuICAgICk7XG4gIH1cbiAgaWYgKGl0ZW1Db25maWcuc20pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzbVwiLCBpdGVtQ29uZmlnLnNtKSxcbiAgICApO1xuICBpZiAoaXRlbUNvbmZpZy5tZClcbiAgICBhZGRDbGFzcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBQUkVGSVhfV0lUSF9EQVNIICsgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiaXRlbVwiLCBcIm1kXCIsIGl0ZW1Db25maWcubWQpLFxuICAgICk7XG4gIGlmIChpdGVtQ29uZmlnLmxnKVxuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwibGdcIiwgaXRlbUNvbmZpZy5sZyksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcueGwpXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJ4bFwiLCBpdGVtQ29uZmlnLnhsKSxcbiAgICApO1xuXG4gIC8vIEdyaWQgc3BhbiBjbGFzc2VzXG4gIGlmIChpdGVtQ29uZmlnLnNwYW4pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzcGFuXCIsIGl0ZW1Db25maWcuc3BhbiksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcucm93U3BhbilcbiAgICBhZGRDbGFzcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBQUkVGSVhfV0lUSF9EQVNIICtcbiAgICAgICAgZ2V0Q2FjaGVkQ2xhc3NOYW1lKFwiaXRlbVwiLCBcInJvdy1zcGFuXCIsIGl0ZW1Db25maWcucm93U3BhbiksXG4gICAgKTtcblxuICAvLyBPcmRlciBhbmQgYWxpZ25tZW50XG4gIGlmIChpdGVtQ29uZmlnLm9yZGVyKVxuICAgIGFkZENsYXNzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIFBSRUZJWF9XSVRIX0RBU0ggKyBnZXRDYWNoZWRDbGFzc05hbWUoXCJpdGVtXCIsIFwib3JkZXJcIiwgaXRlbUNvbmZpZy5vcmRlciksXG4gICAgKTtcbiAgaWYgKGl0ZW1Db25maWcuYWxpZ24pXG4gICAgYWRkQ2xhc3MoXG4gICAgICBlbGVtZW50LFxuICAgICAgUFJFRklYX1dJVEhfREFTSCArIGdldENhY2hlZENsYXNzTmFtZShcIml0ZW1cIiwgXCJzZWxmXCIsIGl0ZW1Db25maWcuYWxpZ24pLFxuICAgICk7XG4gIGlmIChpdGVtQ29uZmlnLmF1dG8pXG4gICAgYWRkQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXRfX2l0ZW0tLWF1dG9gKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdHlwZSBmcm9tIGVsZW1lbnQgY2xhc3Nlc1xuICovXG5mdW5jdGlvbiBnZXRMYXlvdXRUeXBlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1zdGFja2ApXG4gICAgPyBcInN0YWNrXCJcbiAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3dgKVxuICAgICAgPyBcInJvd1wiXG4gICAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1ncmlkYClcbiAgICAgICAgPyBcImdyaWRcIlxuICAgICAgICA6IFwiXCI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVOSUZJRUQgU0NIRU1BIFBST0NFU1NPUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYXJyYXktYmFzZWQgc2NoZW1hIGRlZmluaXRpb25zXG4gKiBPcHRpbWl6ZWQgd2l0aCBwYXJhbWV0ZXIgZXh0cmFjdGlvbiBhbmQgaW50ZWdyYXRlZCBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NBcnJheVNjaGVtYShcbiAgc2NoZW1hOiBTY2hlbWFJdGVtW10gfCBhbnksXG4gIHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGwsXG4gIGxldmVsOiBudW1iZXIgPSAwLFxuICBvcHRpb25zOiBMYXlvdXRPcHRpb25zID0ge30sXG4pOiBMYXlvdXRSZXN1bHQge1xuICBsZXZlbCsrO1xuICBjb25zdCBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgY29tcG9uZW50czogQXJyYXk8W3N0cmluZywgYW55XT4gPSBbXTtcbiAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICBsZXQgY29tcG9uZW50ID0gbnVsbDtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRDcmVhdG9yID0gKG9wdGlvbnMgYXMgYW55KS5jcmVhdG9yIHx8IGNyZWF0ZUVsZW1lbnQ7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpdGVtID0gc2NoZW1hW2ldO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICAvLyBIYW5kbGUgbmVzdGVkIGFycmF5c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjb21wb25lbnQgfHwgcGFyZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NBcnJheVNjaGVtYShpdGVtLCBjb250YWluZXIsIGxldmVsLCBvcHRpb25zKTtcbiAgICAgIC8vIE1lcmdlIG5lc3RlZCBjb21wb25lbnRzIGFycmF5IGluc3RlYWQgb2Ygb3ZlcndyaXRpbmdcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdC5sYXlvdXQuY29tcG9uZW50cykpIHtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKC4uLnJlc3VsdC5sYXlvdXQuY29tcG9uZW50cyk7XG4gICAgICAgIGRlbGV0ZSByZXN1bHQubGF5b3V0LmNvbXBvbmVudHM7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKGxheW91dCwgcmVzdWx0LmxheW91dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBVc2Ugb3B0aW1pemVkIHBhcmFtZXRlciBleHRyYWN0aW9uXG4gICAgY29uc3Qge1xuICAgICAgY3JlYXRvcixcbiAgICAgIG5hbWUsXG4gICAgICBvcHRpb25zOiBpdGVtT3B0aW9ucyxcbiAgICAgIGNvbnN1bWVkLFxuICAgIH0gPSBleHRyYWN0UGFyYW1ldGVycyhzY2hlbWEsIGksIGRlZmF1bHRDcmVhdG9yKTtcblxuICAgIGlmICghY3JlYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgdW5zdXBwb3J0ZWQgaXRlbSB0eXBlOlwiLCBpdGVtKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdG8gZGl2IGZvciBjcmVhdGVFbGVtZW50XG4gICAgaWYgKGNyZWF0b3IgPT09IGNyZWF0ZUVsZW1lbnQgJiYgIShcInRhZ1wiIGluIGl0ZW1PcHRpb25zKSkge1xuICAgICAgaXRlbU9wdGlvbnMudGFnID0gXCJkaXZcIjtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlIGluZGV4IGJ5IGNvbnN1bWVkIGl0ZW1zIG1pbnVzIDEgKGxvb3AgaW5jcmVtZW50IGhhbmRsZXMgdGhlICsxKVxuICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuXG4gICAgLy8gUHJvY2VzcyBvcHRpb25zIHdpdGggcHJlZml4IC0gb3B0aW1pemVkIGRlY2lzaW9uIGxvZ2ljXG4gICAgY29uc3Qgc2hvdWxkQXBwbHlQcmVmaXggPVxuICAgICAgXCJwcmVmaXhcIiBpbiBpdGVtT3B0aW9ucyA/IGl0ZW1PcHRpb25zLnByZWZpeCA6IG9wdGlvbnMucHJlZml4ICE9PSBmYWxzZTtcblxuICAgIC8vIEZhc3QgcGF0aDogcHJvY2VzcyBvbmx5IHdoZW4gbmVlZGVkXG4gICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9ucyA9XG4gICAgICBzaG91bGRBcHBseVByZWZpeCB8fCBpdGVtT3B0aW9ucy5yYXdDbGFzc1xuICAgICAgICA/IHByb2Nlc3NDbGFzc05hbWVzKGl0ZW1PcHRpb25zLCAhc2hvdWxkQXBwbHlQcmVmaXgpXG4gICAgICAgIDogaXRlbU9wdGlvbnM7IC8vIE5vIGNvcHkgbmVlZGVkIGlmIG5vIHByb2Nlc3NpbmdcblxuICAgIC8vIEFkZCBuYW1lIHRvIG9wdGlvbnMgaWYgbmVlZGVkXG4gICAgaWYgKFxuICAgICAgbmFtZSAmJlxuICAgICAgIShcIm5hbWVcIiBpbiBwcm9jZXNzZWRPcHRpb25zKSAmJlxuICAgICAgIShjcmVhdG9yID09PSBjcmVhdGVFbGVtZW50IHx8IChjcmVhdG9yIGFzIGFueSkuaXNFbGVtZW50KVxuICAgICkge1xuICAgICAgcHJvY2Vzc2VkT3B0aW9ucy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY29tcG9uZW50XG4gICAgY29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoY3JlYXRvciwgcHJvY2Vzc2VkT3B0aW9ucyk7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzQ29tcG9uZW50KGNvbXBvbmVudCkgPyBjb21wb25lbnQuZWxlbWVudCA6IGNvbXBvbmVudDtcblxuICAgIGlmIChsZXZlbCA9PT0gMSkgbGF5b3V0LmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmIChuYW1lKSB7XG4gICAgICBsYXlvdXRbbmFtZV0gPSBjb21wb25lbnQ7XG4gICAgICBjb21wb25lbnRzLnB1c2goW25hbWUsIGNvbXBvbmVudF0pO1xuICAgIH1cblxuICAgIC8vIEFwcGVuZCB0byBET01cbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBpZiAoXCJpbnNlcnRcIiBpbiBjb21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudC5pbnNlcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb21wb25lbnQuaW5zZXJ0KGZyYWdtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb21wb25lbnQuX2NvbnRhaW5lciA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcIm9uSW5zZXJ0ZWRcIiBpbiBjb21wb25lbnQgJiZcbiAgICAgICAgICB0eXBlb2YgY29tcG9uZW50Lm9uSW5zZXJ0ZWQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb21wb25lbnQub25JbnNlcnRlZChwYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBmcmFnbWVudCB0byBwYXJlbnRcbiAgaWYgKHBhcmVudEVsZW1lbnQgJiYgZnJhZ21lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlzQ29tcG9uZW50KHBhcmVudEVsZW1lbnQpXG4gICAgICA/IHBhcmVudEVsZW1lbnQuZWxlbWVudFxuICAgICAgOiBwYXJlbnRFbGVtZW50O1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICB9XG5cbiAgLy8gUmVsZWFzZSBmcmFnbWVudCBiYWNrIHRvIHBvb2xcbiAgcmVsZWFzZUZyYWdtZW50KGZyYWdtZW50KTtcblxuICBsYXlvdXQuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgb2JqZWN0LWJhc2VkIHNjaGVtYSBkZWZpbml0aW9uc1xuICogU2ltcGxpZmllZCBhbmQgb3B0aW1pemVkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFNjaGVtYShcbiAgc2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nLFxuICBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLFxuICBvcHRpb25zOiBMYXlvdXRPcHRpb25zID0ge30sXG4pOiBMYXlvdXRSZXN1bHQge1xuICBjb25zdCBsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgZGVmYXVsdENyZWF0b3IgPSBvcHRpb25zLmNyZWF0b3IgfHwgY3JlYXRlRWxlbWVudDtcblxuICAvLyBIYW5kbGUgcm9vdCBlbGVtZW50IGNyZWF0aW9uXG4gIGlmICgoc2NoZW1hIGFzIGFueSkuZWxlbWVudCAmJiAhcGFyZW50RWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnREZWYgPSAoc2NoZW1hIGFzIGFueSkuZWxlbWVudDtcbiAgICBjb25zdCBjcmVhdGVFbGVtZW50Rm4gPSBlbGVtZW50RGVmLmNyZWF0b3IgfHwgZGVmYXVsdENyZWF0b3I7XG5cbiAgICBjb25zdCBlbGVtZW50T3B0aW9ucyA9IGVsZW1lbnREZWYub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBwcm9jZXNzZWRPcHRpb25zID1cbiAgICAgIG9wdGlvbnMucHJlZml4ICE9PSBmYWxzZVxuICAgICAgICA/IHByb2Nlc3NDbGFzc05hbWVzKGVsZW1lbnRPcHRpb25zKVxuICAgICAgICA6IHsgLi4uZWxlbWVudE9wdGlvbnMgfTtcblxuICAgIGNvbnN0IHJvb3RDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZShcbiAgICAgIGNyZWF0ZUVsZW1lbnRGbixcbiAgICAgIHByb2Nlc3NlZE9wdGlvbnMsXG4gICAgKTtcbiAgICBsYXlvdXQuZWxlbWVudCA9IHJvb3RDb21wb25lbnQ7XG4gICAgaWYgKGVsZW1lbnREZWYubmFtZSkgbGF5b3V0W2VsZW1lbnREZWYubmFtZV0gPSByb290Q29tcG9uZW50O1xuXG4gICAgLy8gUHJvY2VzcyBjaGlsZHJlblxuICAgIGlmIChlbGVtZW50RGVmLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGlzQ29tcG9uZW50KHJvb3RDb21wb25lbnQpXG4gICAgICAgID8gcm9vdENvbXBvbmVudC5lbGVtZW50XG4gICAgICAgIDogcm9vdENvbXBvbmVudDtcbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gcHJvY2Vzc09iamVjdFNjaGVtYShcbiAgICAgICAgZWxlbWVudERlZi5jaGlsZHJlbixcbiAgICAgICAgcm9vdEVsZW1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbihsYXlvdXQsIGNoaWxkUmVzdWx0LmxheW91dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQpO1xuICB9XG5cbiAgLy8gUHJvY2VzcyBub3JtYWwgc2NoZW1hIGVsZW1lbnRzXG4gIGNvbnN0IGZyYWdtZW50ID0gcGFyZW50RWxlbWVudCA/IGNyZWF0ZUZyYWdtZW50KCkgOiBudWxsO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZGVmID0gKHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICAgIGlmICghZGVmKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcmVhdG9yID0gZGVmLmNyZWF0b3IgfHwgZGVmYXVsdENyZWF0b3I7XG4gICAgY29uc3QgZWxlbWVudE9wdGlvbnMgPSBkZWYub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBzaG91bGRBcHBseVByZWZpeCA9XG4gICAgICBcInByZWZpeFwiIGluIGVsZW1lbnRPcHRpb25zXG4gICAgICAgID8gZWxlbWVudE9wdGlvbnMucHJlZml4XG4gICAgICAgIDogb3B0aW9ucy5wcmVmaXggIT09IGZhbHNlO1xuICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbnMgPSBzaG91bGRBcHBseVByZWZpeFxuICAgICAgPyBwcm9jZXNzQ2xhc3NOYW1lcyhlbGVtZW50T3B0aW9ucylcbiAgICAgIDogeyAuLi5lbGVtZW50T3B0aW9ucyB9O1xuXG4gICAgaWYgKCFkZWYubmFtZSAmJiBrZXkgIT09IFwiZWxlbWVudFwiKSB7XG4gICAgICBkZWYubmFtZSA9IGtleTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVkID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UoZWxlbWVudENyZWF0b3IsIHByb2Nlc3NlZE9wdGlvbnMpO1xuICAgIGxheW91dFtrZXldID0gY3JlYXRlZDtcbiAgICBpZiAoZGVmLm5hbWUgJiYgZGVmLm5hbWUgIT09IGtleSkgbGF5b3V0W2RlZi5uYW1lXSA9IGNyZWF0ZWQ7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gaXNDb21wb25lbnQoY3JlYXRlZCkgPyBjcmVhdGVkLmVsZW1lbnQgOiBjcmVhdGVkO1xuICAgIGlmIChmcmFnbWVudCkgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGRlZi5jaGlsZHJlbikge1xuICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBwcm9jZXNzT2JqZWN0U2NoZW1hKGRlZi5jaGlsZHJlbiwgZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICBPYmplY3QuYXNzaWduKGxheW91dCwgY2hpbGRSZXN1bHQubGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgdG8gcGFyZW50XG4gIGlmIChwYXJlbnRFbGVtZW50ICYmIGZyYWdtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RG9tID0gaXNDb21wb25lbnQocGFyZW50RWxlbWVudClcbiAgICAgID8gcGFyZW50RWxlbWVudC5lbGVtZW50XG4gICAgICA6IHBhcmVudEVsZW1lbnQ7XG4gICAgcGFyZW50RG9tLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICByZWxlYXNlRnJhZ21lbnQoZnJhZ21lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMQVlPVVQgUkVTVUxUIENSRUFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmxhdHRlbnMgYSBuZXN0ZWQgbGF5b3V0IGludG8gYSBzaW1wbGUgb2JqZWN0IHdpdGggZWxlbWVudCBhbmQgY29tcG9uZW50IHJlZmVyZW5jZXNcbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkxheW91dChsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgZmxhdHRlbmVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgaWYgKCFsYXlvdXQgfHwgdHlwZW9mIGxheW91dCAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZsYXR0ZW5lZDtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBsYXlvdXQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGxheW91dFtrZXldO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcbiAgICAgICAgKHR5cGVvZiBTVkdFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkgfHxcbiAgICAgICAgaXNDb21wb25lbnQodmFsdWUpKVxuICAgICkge1xuICAgICAgZmxhdHRlbmVkW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdHRlbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgcmVzdWx0IG9iamVjdCB3aXRoIHV0aWxpdHkgZnVuY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxheW91dFJlc3VsdChsYXlvdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBMYXlvdXRSZXN1bHQge1xuICBjb25zdCBmbGF0dGVuZWRDb21wb25lbnRzID0gZmxhdHRlbkxheW91dChsYXlvdXQpO1xuXG4gIHJldHVybiB7XG4gICAgbGF5b3V0LFxuICAgIGVsZW1lbnQ6IGxheW91dC5lbGVtZW50LFxuICAgIGNvbXBvbmVudDogZmxhdHRlbmVkQ29tcG9uZW50cyxcblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgcmV0dXJuIGxheW91dFtuYW1lXSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBnZXRBbGwoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICByZXR1cm4gZmxhdHRlbmVkQ29tcG9uZW50cztcbiAgICB9LFxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIC8vIFRyYWNrIGRlc3Ryb3llZCBjb21wb25lbnRzIHRvIGF2b2lkIGRvdWJsZS1kZXN0cm95XG4gICAgICBjb25zdCBkZXN0cm95ZWQgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgLy8gSGVscGVyIHRvIHNhZmVseSBkZXN0cm95IGEgY29tcG9uZW50XG4gICAgICBjb25zdCBkZXN0cm95Q29tcG9uZW50ID0gKGNvbXBvbmVudDogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50IHx8IGRlc3Ryb3llZC5oYXMoY29tcG9uZW50KSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFNraXAgcGxhaW4gSFRNTCBlbGVtZW50cyBhbmQgbm9uLW9iamVjdHNcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHR5cGVvZiBjb21wb25lbnQgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBjb21wb25lbnQgd2l0aCBkZXN0cm95IG1ldGhvZFxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBkZXN0cm95ZWQuYWRkKGNvbXBvbmVudCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWdub3JlIGRlc3Ryb3kgZXJyb3JzIC0gY29tcG9uZW50IG1heSBhbHJlYWR5IGJlIGNsZWFuZWQgdXBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIEZpcnN0IGRlc3Ryb3kgY29tcG9uZW50cyBmcm9tIHRoZSBjb21wb25lbnRzIGFycmF5IChpZiBwcmVzZW50KVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIGFsbCBuYW1lZCBjb21wb25lbnRzIGFyZSBkZXN0cm95ZWQgZXZlbiBpZiBuZXN0ZWRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxheW91dC5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIGxheW91dC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgZGVzdHJveUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZW4gaXRlcmF0ZSBvdmVyIGFsbCBsYXlvdXQga2V5cyBmb3IgYW55IG1pc3NlZCBjb21wb25lbnRzXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBsYXlvdXQpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJlbGVtZW50XCIgfHwga2V5ID09PSBcImNvbXBvbmVudHNcIikgY29udGludWU7XG4gICAgICAgIGRlc3Ryb3lDb21wb25lbnQobGF5b3V0W2tleV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciB0aGUgY29tcG9uZW50cyBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGF5b3V0LmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGxheW91dC5jb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSByb290IGVsZW1lbnQgZnJvbSBET01cbiAgICAgIGlmIChsYXlvdXQuZWxlbWVudCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXNDb21wb25lbnQobGF5b3V0LmVsZW1lbnQpXG4gICAgICAgICAgPyBsYXlvdXQuZWxlbWVudC5lbGVtZW50XG4gICAgICAgICAgOiBsYXlvdXQuZWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIHJlZmVyZW5jZXMgdG8gaGVscCBHQ1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGF5b3V0KSB7XG4gICAgICAgIGRlbGV0ZSBsYXlvdXRba2V5XTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVTklGSUVEIEVOVFJZIFBPSU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxheW91dCBmcm9tIHZhcmlvdXMgc2NoZW1hIGZvcm1hdHNcbiAqIFVuaWZpZWQgcHJvY2Vzc29yIGZvciBhcnJheXMsIG9iamVjdHMsIEpTWCwgYW5kIEhUTUwgc3RyaW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5b3V0KFxuICBzY2hlbWE6IGFueSxcbiAgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbCxcbiAgb3B0aW9uczogTGF5b3V0T3B0aW9ucyA9IHt9LFxuKTogTGF5b3V0UmVzdWx0IHtcbiAgLy8gSGFuZGxlIGZ1bmN0aW9uIHNjaGVtYXNcbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIEhUTUwgc3RyaW5nIHNjaGVtYXNcbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBzY2hlbWEudHJpbSgpO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gdGVtcGxhdGUuY29udGVudDtcblxuICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIGZyYWdtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgbGF5b3V0ID0geyBlbGVtZW50OiBmcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB9O1xuICAgIHJldHVybiBjcmVhdGVMYXlvdXRSZXN1bHQobGF5b3V0KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBKU1gtbGlrZSBzY2hlbWFzIChhcnJheSB3aXRoIGZ1bmN0aW9uLCBzdHJpbmcsIG9iamVjdCBwYXR0ZXJuKVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShzY2hlbWEpICYmXG4gICAgc2NoZW1hLmxlbmd0aCA+PSAzICYmXG4gICAgdHlwZW9mIHNjaGVtYVswXSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHNjaGVtYVsxXSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYVsyXSlcbiAgKSB7XG4gICAgcmV0dXJuIHByb2Nlc3NBcnJheVNjaGVtYShzY2hlbWEsIHBhcmVudEVsZW1lbnQsIDAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgcHJvY2Vzc29yXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICA/IHByb2Nlc3NBcnJheVNjaGVtYShzY2hlbWEsIHBhcmVudEVsZW1lbnQsIDAsIG9wdGlvbnMpXG4gICAgOiBwcm9jZXNzT2JqZWN0U2NoZW1hKHNjaGVtYSwgcGFyZW50RWxlbWVudCwgb3B0aW9ucyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVYUE9SVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xlYXIgZnVuY3Rpb25zIGZvciB0aGUgdW5pZmllZCBzeXN0ZW1cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNsYXNzQ2FjaGUoKTogdm9pZCB7XG4gIGNsYXNzQ2FjaGUuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRnJhZ21lbnRQb29sKCk6IHZvaWQge1xuICBmcmFnbWVudFBvb2wuY2xlYXIoKTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvY2Vzc0NsYXNzTmFtZXMsXG4gIGlzQ29tcG9uZW50LFxuICBmbGF0dGVuTGF5b3V0LFxuICBhcHBseUxheW91dENsYXNzZXMsXG4gIGFwcGx5TGF5b3V0SXRlbUNsYXNzZXMsXG4gIGNyZWF0ZUxheW91dFJlc3VsdCxcbn07XG4iLAogICAgIi8qKlxuICogQG1vZHVsZSBjb3JlL2xheW91dC9jb25maWdcbiAqIEBkZXNjcmlwdGlvbiBFc3NlbnRpYWwgbGF5b3V0IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzXG4gKiBDb3JlIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCBpbnRvIHNjaGVtYS50cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gKi9cblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IFBSRUZJWCA9IFwibXRybFwiOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlIGZyb20gbWFpbiBtdHJsIGNvbmZpZ1xuY29uc3QgUFJFRklYX1dJVEhfREFTSCA9IGAke1BSRUZJWH0tYDtcblxuLyoqXG4gKiBTaW1wbGUgRE9NIHV0aWxpdGllc1xuICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50OiBhbnksIGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChlbGVtZW50ICYmIGNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQ6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc0xpc3QgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2xlYW4gdXAgcHJldmlvdXMgbGF5b3V0IGNsYXNzZXMgZnJvbSBhbiBlbGVtZW50XG4gKiBVc2VmdWwgZm9yIGR5bmFtaWMgY2xhc3MgbWFuYWdlbWVudFxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gRWxlbWVudCB0byBjbGVhbiBsYXlvdXQgY2xhc3NlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwTGF5b3V0Q2xhc3NlcyhlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuXG4gIC8vIEdldCBhbGwgY2xhc3NlcyBmcm9tIHRoZSBlbGVtZW50XG4gIGNvbnN0IGNsYXNzTGlzdCA9IEFycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpIGFzIHN0cmluZ1tdO1xuXG4gIC8vIEZpbmQgYW5kIHJlbW92ZSBsYXlvdXQtcmVsYXRlZCBjbGFzc2VzXG4gIGNvbnN0IGxheW91dENsYXNzZXMgPSBjbGFzc0xpc3QuZmlsdGVyKFxuICAgIChjbHM6IHN0cmluZykgPT5cbiAgICAgIGNscy5zdGFydHNXaXRoKGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1gKSB8fFxuICAgICAgY2xzLmluY2x1ZGVzKGAtJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tYClcbiAgKTtcblxuICAvLyBSZW1vdmUgZWFjaCBsYXlvdXQgY2xhc3NcbiAgbGF5b3V0Q2xhc3Nlcy5mb3JFYWNoKChjbHM6IHN0cmluZykgPT4ge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsYXlvdXQgdHlwZSBmcm9tIGVsZW1lbnQgY2xhc3Nlc1xuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gRWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgTGF5b3V0IHR5cGUgaWYgZm91bmQsIGVtcHR5IHN0cmluZyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dFR5cGUoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1zdGFja2ApXG4gICAgPyBcInN0YWNrXCJcbiAgICA6IGhhc0NsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9bGF5b3V0LS1yb3dgKVxuICAgID8gXCJyb3dcIlxuICAgIDogaGFzQ2xhc3MoZWxlbWVudCwgYCR7UFJFRklYX1dJVEhfREFTSH1sYXlvdXQtLWdyaWRgKVxuICAgID8gXCJncmlkXCJcbiAgICA6IFwiXCI7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBwcmVmaXggZm9yIHRoZSBsYXlvdXQgc3lzdGVtXG4gKiBAcmV0dXJucyBDdXJyZW50IHByZWZpeCB3aXRoIGRhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dFByZWZpeCgpOiBzdHJpbmcge1xuICByZXR1cm4gUFJFRklYX1dJVEhfREFTSDtcbn1cblxuLyoqXG4gKiBTZXRzIGxheW91dCBjbGFzc2VzIG9uIGFuIGVsZW1lbnQgZHluYW1pY2FsbHlcbiAqIFVzZWZ1bCBmb3IgcHJvZ3JhbW1hdGljIGxheW91dCB1cGRhdGVzXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUYXJnZXQgZWxlbWVudFxuICogQHBhcmFtIGxheW91dFR5cGUgLSBMYXlvdXQgdHlwZSB0byBhcHBseVxuICogQHBhcmFtIGNsYXNzZXMgLSBBZGRpdGlvbmFsIGNsYXNzZXMgdG8gYXBwbHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheW91dENsYXNzZXMoXG4gIGVsZW1lbnQ6IGFueSxcbiAgbGF5b3V0VHlwZTogc3RyaW5nLFxuICBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdXG4pOiB2b2lkIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFsYXlvdXRUeXBlKSByZXR1cm47XG5cbiAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgbGF5b3V0IGNsYXNzZXMgZmlyc3RcbiAgY2xlYW51cExheW91dENsYXNzZXMoZWxlbWVudCk7XG5cbiAgLy8gQXBwbHkgYmFzZSBsYXlvdXQgdHlwZVxuICBhZGRDbGFzcyhlbGVtZW50LCBgJHtQUkVGSVhfV0lUSF9EQVNIfWxheW91dC0tJHtsYXlvdXRUeXBlfWApO1xuXG4gIC8vIEFwcGx5IGFkZGl0aW9uYWwgY2xhc3Nlc1xuICBjbGFzc2VzLmZvckVhY2goKGNscykgPT4ge1xuICAgIGlmIChjbHMuc3RhcnRzV2l0aChcImxheW91dC0tXCIpIHx8IGNscy5zdGFydHNXaXRoKFwibGF5b3V0X19cIikpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGAke1BSRUZJWF9XSVRIX0RBU0h9JHtjbHN9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGNscyk7XG4gICAgfVxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBAbW9kdWxlIGNvcmUvbGF5b3V0L2pzeFxuICogQGRlc2NyaXB0aW9uIEpTWC1saWtlIHN5bnRheCBzdXBwb3J0IGZvciBsYXlvdXQgY3JlYXRpb25cbiAqIFByb3ZpZGVzIGEgc2ltcGxlIGgoKSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZWxlbWVudHMgd2l0aG91dCBSZWFjdCBkZXBlbmRlbmN5XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMYXlvdXRSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGF5b3V0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbi8qKlxuICogRnJhZ21lbnQgc3ltYm9sIGZvciBKU1ggZnJhZ21lbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBGcmFnbWVudCA9IFN5bWJvbChcIkZyYWdtZW50XCIpO1xuXG4vKipcbiAqIEpTWC1saWtlIGh5cGVyc2NyaXB0IGZ1bmN0aW9uXG4gKiBDcmVhdGVzIGVsZW1lbnRzIGluIGEgUmVhY3QtbGlrZSBzeW50YXggd2l0aG91dCBSZWFjdCBkZXBlbmRlbmN5XG4gKlxuICogQHBhcmFtIHRhZyAtIEhUTUwgdGFnIG5hbWUsIGNvbXBvbmVudCBmdW5jdGlvbiwgb3IgRnJhZ21lbnRcbiAqIEBwYXJhbSBwcm9wcyAtIEVsZW1lbnQgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlc1xuICogQHBhcmFtIGNoaWxkcmVuIC0gQ2hpbGQgZWxlbWVudHNcbiAqIEByZXR1cm5zIERPTSBlbGVtZW50IG9yIGNvbXBvbmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaChcbiAgdGFnOiBzdHJpbmcgfCBGdW5jdGlvbiB8IHR5cGVvZiBGcmFnbWVudCxcbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCxcbiAgLi4uY2hpbGRyZW46IGFueVtdXG4pOiBhbnkge1xuICAvLyBIYW5kbGUgRnJhZ21lbnRcbiAgaWYgKHRhZyA9PT0gRnJhZ21lbnQpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9XG4gICAgICAgICAgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQpIDogY2hpbGQ7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdHJpbmcgdGFncyAoSFRNTCBlbGVtZW50cylcbiAgaWYgKHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgLy8gQXBwbHkgcHJvcHNcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcImNsYXNzTmFtZVwiIHx8IGtleSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aChcIm9uXCIpICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gRXZlbnQgaGFuZGxlclxuICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGtleS5zbGljZSgyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3R5bGVcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAvLyBTdHlsZSBvYmplY3RcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIikge1xuICAgICAgICAgIC8vIEhUTUwgY29udGVudFxuICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWUuX19odG1sIHx8IFwiXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJlZ3VsYXIgYXR0cmlidXRlXG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGVuZCBjaGlsZHJlblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNoaWxkKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBjb21wb25lbnQgZnVuY3Rpb25zXG4gIGlmICh0eXBlb2YgdGFnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBhbGxQcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxQcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gdGFnKGFsbFByb3BzKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIGRpdlxuICByZXR1cm4gaChcImRpdlwiLCBwcm9wcywgLi4uY2hpbGRyZW4pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgdXNpbmcgSlNYLWxpa2Ugc3ludGF4XG4gKiBQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIEpTWCBhbmQgdGhlIGxheW91dCBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0ganN4RWxlbWVudCAtIEpTWCBlbGVtZW50IGNyZWF0ZWQgd2l0aCBoKClcbiAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IC0gUGFyZW50IGVsZW1lbnQgdG8gYXR0YWNoIHRvXG4gKiBAcmV0dXJucyBMYXlvdXQgcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc3hMYXlvdXQoXG4gIGpzeEVsZW1lbnQ6IGFueSxcbiAgcGFyZW50RWxlbWVudD86IGFueVxuKTogTGF5b3V0UmVzdWx0IHtcbiAgLy8gQ29udmVydCBKU1ggZWxlbWVudCB0byBsYXlvdXQgc2NoZW1hXG4gIGNvbnN0IHNjaGVtYSA9IGpzeEVsZW1lbnQ7XG5cbiAgLy8gQ3JlYXRlIGxheW91dCB1c2luZyB0aGUgc3RhbmRhcmQgY3JlYXRlTGF5b3V0IGZ1bmN0aW9uXG4gIHJldHVybiBjcmVhdGVMYXlvdXQoc2NoZW1hLCBwYXJlbnRFbGVtZW50KTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHRvIGNyZWF0ZSBhIHNpbXBsZSBjb21wb25lbnQgZnJvbSBhIGZ1bmN0aW9uXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIEpTWCBjb21wb25lbnRzXG4gKlxuICogQHBhcmFtIGZuIC0gQ29tcG9uZW50IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBpbiBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvbmVudChmbjogKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkpOiBGdW5jdGlvbiB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICAgIHJldHVybiBmbihwcm9wcyB8fCB7fSk7XG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSB0byByZW5kZXIgbXVsdGlwbGUgSlNYIGVsZW1lbnRzXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIGxpc3RzIG9yIGNvbGxlY3Rpb25zXG4gKlxuICogQHBhcmFtIGVsZW1lbnRzIC0gQXJyYXkgb2YgSlNYIGVsZW1lbnRzXG4gKiBAcGFyYW0gcGFyZW50RWxlbWVudCAtIFBhcmVudCBlbGVtZW50IHRvIGF0dGFjaCB0b1xuICogQHJldHVybnMgQXJyYXkgb2YgbGF5b3V0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVsZW1lbnRzKFxuICBlbGVtZW50czogYW55W10sXG4gIHBhcmVudEVsZW1lbnQ/OiBhbnlcbik6IExheW91dFJlc3VsdFtdIHtcbiAgcmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gY3JlYXRlSnN4TGF5b3V0KGVsZW1lbnQsIHBhcmVudEVsZW1lbnQpKTtcbn1cblxuLyoqXG4gKiBDb21tb24gSlNYIGVsZW1lbnQgY3JlYXRvcnMgZm9yIGNvbnZlbmllbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBqc3ggPSB7XG4gIGRpdjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJkaXZcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgc3BhbjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJzcGFuXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIHA6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwicFwiLCBwcm9wcywgLi4uY2hpbGRyZW4pLFxuICBidXR0b246IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwiYnV0dG9uXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIGlucHV0OiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBoKFwiaW5wdXRcIiwgcHJvcHMpLFxuICBpbWc6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGgoXCJpbWdcIiwgcHJvcHMpLFxuICBhOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcImFcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgdWw6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwidWxcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgbGk6IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmNoaWxkcmVuOiBhbnlbXSkgPT5cbiAgICBoKFwibGlcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgc2VjdGlvbjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJzZWN0aW9uXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG4gIGhlYWRlcjogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJoZWFkZXJcIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgZm9vdGVyOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcImZvb3RlclwiLCBwcm9wcywgLi4uY2hpbGRyZW4pLFxuICBtYWluOiAocHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5jaGlsZHJlbjogYW55W10pID0+XG4gICAgaChcIm1haW5cIiwgcHJvcHMsIC4uLmNoaWxkcmVuKSxcbiAgYXJ0aWNsZTogKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uY2hpbGRyZW46IGFueVtdKSA9PlxuICAgIGgoXCJhcnRpY2xlXCIsIHByb3BzLCAuLi5jaGlsZHJlbiksXG59O1xuIiwKICAgICIvKipcbiAqIEBtb2R1bGUgY29yZS9sYXlvdXRcbiAqIEBkZXNjcmlwdGlvbiBVbmlmaWVkIGxheW91dCBzeXN0ZW0gZm9yIG10cmwtYWRkb25zXG4gKiBQcm92aWRlcyBhcnJheSwgb2JqZWN0LCBhbmQgSlNYLWJhc2VkIGxheW91dCBjcmVhdGlvbiB3aXRoIGludGVncmF0ZWQgb3B0aW1pemF0aW9uc1xuICovXG5cbi8vIEltcG9ydCBmb3IgdXNlIGluIGNvbnZlbmllbmNlIGZ1bmN0aW9uc1xuaW1wb3J0IHsgY3JlYXRlTGF5b3V0LCBjbGVhckNsYXNzQ2FjaGUsIGNsZWFyRnJhZ21lbnRQb29sIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbi8vIENvcmUgc2NoZW1hIHByb2Nlc3NvciBhbmQgdXRpbGl0aWVzXG5leHBvcnQge1xuICBjcmVhdGVMYXlvdXQsXG4gIHByb2Nlc3NDbGFzc05hbWVzLFxuICBpc0NvbXBvbmVudCxcbiAgZmxhdHRlbkxheW91dCxcbiAgYXBwbHlMYXlvdXRDbGFzc2VzLFxuICBhcHBseUxheW91dEl0ZW1DbGFzc2VzLFxuICBjcmVhdGVMYXlvdXRSZXN1bHQsXG4gIGNsZWFyQ2xhc3NDYWNoZSxcbiAgY2xlYXJGcmFnbWVudFBvb2wsXG59IGZyb20gXCIuL3NjaGVtYVwiO1xuXG4vLyBFc3NlbnRpYWwgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgTGF5b3V0Q29uZmlnLFxuICBMYXlvdXRJdGVtQ29uZmlnLFxuICBMYXlvdXRPcHRpb25zLFxuICBMYXlvdXRSZXN1bHQsXG4gIENvbXBvbmVudExpa2UsXG4gIEVsZW1lbnRPcHRpb25zLFxuICBFbGVtZW50RGVmaW5pdGlvbixcbiAgU2NoZW1hLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBDb25maWd1cmF0aW9uIHV0aWxpdGllc1xuZXhwb3J0IHtcbiAgY2xlYW51cExheW91dENsYXNzZXMsXG4gIGdldExheW91dFR5cGUsXG4gIGdldExheW91dFByZWZpeCxcbiAgc2V0TGF5b3V0Q2xhc3Nlcyxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5cbi8vIEpTWCBzdXBwb3J0XG5leHBvcnQge1xuICBoLFxuICBGcmFnbWVudCxcbiAgY3JlYXRlSnN4TGF5b3V0LFxuICBjb21wb25lbnQsXG4gIHJlbmRlckVsZW1lbnRzLFxuICBqc3gsXG59IGZyb20gXCIuL2pzeFwiO1xuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgY29udmVuaWVudCB1c2FnZVxuZXhwb3J0IHsgY3JlYXRlTGF5b3V0IGFzIGRlZmF1bHQgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBsYXlvdXQgd2l0aCBjb21tb24gcGF0dGVybnNcbiAqIFByb3ZpZGVzIGEgc2ltcGxlciBBUEkgZm9yIGNvbW1vbiB1c2UgY2FzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheW91dChcbiAgdHlwZTogXCJzdGFja1wiIHwgXCJyb3dcIiB8IFwiZ3JpZFwiIHwgXCJmbGV4XCIgPSBcInN0YWNrXCIsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHsgdHlwZSB9LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9LFxuICBdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBncmlkIGxheW91dFxuICogQXV0b21hdGljYWxseSBoYW5kbGVzIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyaWQoXG4gIGNvbHVtbnM6IG51bWJlciB8IFwiYXV0by1maXRcIiB8IFwiYXV0by1maWxsXCIgPSBcImF1dG8tZml0XCIsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdHlwZTogXCJncmlkXCIsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGdhcDogb3B0aW9ucy5nYXAgfHwgXCIxcmVtXCIsXG4gICAgICAgIC4uLm9wdGlvbnMubGF5b3V0LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSxcbiAgXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZsZXhpYmxlIHJvdyBsYXlvdXRcbiAqIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyBtb2JpbGUgc3RhY2tpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdyhvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBhbnkge1xuICByZXR1cm4gY3JlYXRlTGF5b3V0KFtcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGxheW91dDoge1xuICAgICAgICB0eXBlOiBcInJvd1wiLFxuICAgICAgICBnYXA6IG9wdGlvbnMuZ2FwIHx8IFwiMXJlbVwiLFxuICAgICAgICBtb2JpbGVTdGFjazogb3B0aW9ucy5tb2JpbGVTdGFjayAhPT0gZmFsc2UsXG4gICAgICAgIC4uLm9wdGlvbnMubGF5b3V0LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSxcbiAgXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZlcnRpY2FsIHN0YWNrIGxheW91dFxuICogRGVmYXVsdCBsYXlvdXQgdHlwZSB3aXRoIGNvbnNpc3RlbnQgc3BhY2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhY2sob3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogYW55IHtcbiAgcmV0dXJuIGNyZWF0ZUxheW91dChbXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdHlwZTogXCJzdGFja1wiLFxuICAgICAgICBnYXA6IG9wdGlvbnMuZ2FwIHx8IFwiMXJlbVwiLFxuICAgICAgICAuLi5vcHRpb25zLmxheW91dCxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0sXG4gIF0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXlvdXQgZnJvbSBhIHRlbXBsYXRlIGZ1bmN0aW9uXG4gKiBVc2VmdWwgZm9yIGR5bmFtaWMgbGF5b3V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUoXG4gIGZuOiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuKTogYW55IHtcbiAgY29uc3Qgc2NoZW1hID0gZm4ocHJvcHMpO1xuICByZXR1cm4gY3JlYXRlTGF5b3V0KHNjaGVtYSk7XG59XG5cbi8qKlxuICogUGVyZm9ybWFuY2UgdXRpbGl0aWVzIGZvciBsYXlvdXQgbWFuYWdlbWVudFxuICovXG5leHBvcnQgY29uc3QgcGVyZm9ybWFuY2UgPSB7XG4gIGNsZWFyQ2FjaGU6IGNsZWFyQ2xhc3NDYWNoZSxcbiAgY2xlYXJGcmFnbWVudFBvb2wsXG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgY2FjaGVkIHJlc291cmNlc1xuICAgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgY2xlYXJDbGFzc0NhY2hlKCk7XG4gICAgY2xlYXJGcmFnbWVudFBvb2woKTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyBjdXJyZW50IGNhY2hlIHN0YXRzXG4gICAqL1xuICBnZXRTdGF0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhdHMgd291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGFjdHVhbCBjYWNoZSBzeXN0ZW1cbiAgICAgIG1lc3NhZ2U6IFwiUGVyZm9ybWFuY2Ugc3RhdHMgYXZhaWxhYmxlIGluIGJyb3dzZXIgY29uc29sZVwiLFxuICAgIH07XG4gIH0sXG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2RkEsTUFBTSxhQUFhO0FBQUEsRUFDVCxPQUEyQixDQUFDO0FBQUEsRUFDNUIsVUFBVTtBQUFBLEVBRWxCLEdBQUcsR0FBcUI7QUFBQSxJQUN0QixPQUFPLEtBQUssS0FBSyxJQUFJLEtBQUssU0FBUyx1QkFBdUI7QUFBQTtBQUFBLEVBRzVELE9BQU8sQ0FBQyxVQUFrQztBQUFBLElBQ3hDLElBQUksS0FBSyxLQUFLLFNBQVMsS0FBSyxXQUFXLFNBQVMsV0FBVyxXQUFXLEdBQUc7QUFBQSxNQUN2RSxLQUFLLEtBQUssS0FBSyxRQUFRO0FBQUEsSUFDekI7QUFBQTtBQUFBLEVBR0YsS0FBSyxHQUFTO0FBQUEsSUFDWixLQUFLLEtBQUssU0FBUztBQUFBO0FBRXZCO0FBRUEsSUFBTSxlQUFlLElBQUk7QUFNekIsSUFBTSxhQUFhLElBQUk7QUFHdkIsSUFBTSxTQUFTO0FBQ2YsSUFBTSxtQkFBbUIsR0FBRztBQU01QixTQUFTLGtCQUFrQixDQUN6QixNQUNBLFVBQ0EsT0FDUTtBQUFBLEVBQ1IsTUFBTSxNQUFNLEdBQUcsUUFBUSxZQUFZO0FBQUEsRUFDbkMsSUFBSSxDQUFDLFdBQVcsSUFBSSxHQUFHLEdBQUc7QUFBQSxJQUN4QixJQUFJLFNBQVMs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
|