@jsii/kernel 1.58.0 → 1.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/api.d.ts CHANGED
@@ -190,3 +190,4 @@ export interface ErrorResponse {
190
190
  readonly error: string;
191
191
  readonly stack?: string;
192
192
  }
193
+ //# sourceMappingURL=api.d.ts.map
package/lib/api.js CHANGED
@@ -35,4 +35,4 @@ function isPropertyOverride(value) {
35
35
  return value.property != null; // Python passes "null"
36
36
  }
37
37
  exports.isPropertyOverride = isPropertyOverride;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUMxQixRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ3RDLFFBQUEsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUMxQixRQUFBLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsUUFBQSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsWUFBWSxHQUFHLGNBQWMsQ0FBQztBQU8zQyxTQUFnQixRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw0QkFFQztBQU1ELFNBQWdCLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksa0JBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUUsQ0FBQztBQUZELGdDQUVDO0FBTUQsU0FBZ0IsVUFBVSxDQUFDLEtBQVU7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxrQkFBVSxJQUFJLEtBQUssQ0FBQztBQUM1RSxDQUFDO0FBRkQsZ0NBRUM7QUFNRCxTQUFnQixTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw4QkFFQztBQVNELFNBQWdCLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksb0JBQVksSUFBSSxLQUFLLENBQUM7QUFDOUUsQ0FBQztBQUZELG9DQUVDO0FBU0QsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBZTtJQUM5QyxPQUFRLEtBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsdUJBQXVCO0FBQy9ELENBQUM7QUFGRCw0Q0FFQztBQU9ELFNBQWdCLGtCQUFrQixDQUFDLEtBQWU7SUFDaEQsT0FBUSxLQUFhLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQUNqRSxDQUFDO0FBRkQsZ0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVE9LRU5fUkVGID0gJyRqc2lpLmJ5cmVmJztcbmV4cG9ydCBjb25zdCBUT0tFTl9JTlRFUkZBQ0VTID0gJyRqc2lpLmludGVyZmFjZXMnO1xuZXhwb3J0IGNvbnN0IFRPS0VOX0RBVEUgPSAnJGpzaWkuZGF0ZSc7XG5leHBvcnQgY29uc3QgVE9LRU5fRU5VTSA9ICckanNpaS5lbnVtJztcbmV4cG9ydCBjb25zdCBUT0tFTl9NQVAgPSAnJGpzaWkubWFwJztcbmV4cG9ydCBjb25zdCBUT0tFTl9TVFJVQ1QgPSAnJGpzaWkuc3RydWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBPYmpSZWYge1xuICByZWFkb25seSBbVE9LRU5fUkVGXTogc3RyaW5nO1xuICBbVE9LRU5fSU5URVJGQUNFU10/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqUmVmKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBPYmpSZWYge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9SRUYgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZURhdGUge1xuICByZWFkb25seSBbVE9LRU5fREFURV06IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZURhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVEYXRlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fREFURSBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlRW51bSB7XG4gIHJlYWRvbmx5IFtUT0tFTl9FTlVNXTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlRW51bSh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZUVudW0ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9FTlVNIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVNYXAge1xuICByZWFkb25seSBbVE9LRU5fTUFQXTogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZU1hcCh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZU1hcCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX01BUCBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlU3RydWN0IHtcbiAgcmVhZG9ubHkgW1RPS0VOX1NUUlVDVF06IHtcbiAgICByZWFkb25seSBmcW46IHN0cmluZztcbiAgICByZWFkb25seSBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlU3RydWN0KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlU3RydWN0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fU1RSVUNUIGluIHZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBPdmVycmlkZSA9IE1ldGhvZE92ZXJyaWRlIHwgUHJvcGVydHlPdmVycmlkZTtcblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RPdmVycmlkZSB7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBjb29raWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGhvZE92ZXJyaWRlKHZhbHVlOiBPdmVycmlkZSk6IHZhbHVlIGlzIE1ldGhvZE92ZXJyaWRlIHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm1ldGhvZCAhPSBudWxsOyAvLyBQeXRob24gcGFzc2VzIFwibnVsbFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlPdmVycmlkZSB7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlPdmVycmlkZSh2YWx1ZTogT3ZlcnJpZGUpOiB2YWx1ZSBpcyBQcm9wZXJ0eU92ZXJyaWRlIHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLnByb3BlcnR5ICE9IG51bGw7IC8vIFB5dGhvbiBwYXNzZXMgXCJudWxsXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFjayB7XG4gIHJlYWRvbmx5IGNiaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29va2llOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGludm9rZT86IEludm9rZVJlcXVlc3Q7XG4gIHJlYWRvbmx5IGdldD86IEdldFJlcXVlc3Q7XG4gIHJlYWRvbmx5IHNldD86IFNldFJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVsbG9SZXNwb25zZSB7XG4gIHJlYWRvbmx5IGhlbGxvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFJlcXVlc3Qge1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIGFzc2VtYmx5ICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQXNzZW1ibHkgdmVyc2lvbiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSB0YXJiYWxsIG9mIHRoZSBwYWNrYWdlICovXG4gIHJlYWRvbmx5IHRhcmJhbGw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FkUmVzcG9uc2Uge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVNjcmlwdFJlcXVlc3Qge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xuICByZWFkb25seSBzY3JpcHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVNjcmlwdFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpZ25hbDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBGUU4gb2YgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIGlzIHJlcXVlc3RlZCAob3IgXCJPYmplY3RcIilcbiAgICovXG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRlFOcyBvZiBpbnRlcmZhY2VzIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRzLCBpZiBhbnkuIERlY2xhcmluZ1xuICAgKiBpbnRlcmZhY2VzIHRoYXQgdGhlIGNsYXNzIGRlbm90ZWQgYnkgYGZxbmAgaW1wbGVtZW50cyBpcyBub3QgbmVjZXNzYXJ5LlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgbWVtZWJlcnMgb2YgaW50ZXJmYWNlcyBmb3VuZCBpbiB0aGlzIHByb3BlcnR5IHNob3VsZFxuICAgKiBkZWNsYXJlIG1lbWJlcnMgdGhhdCBhcmUgZm91bmQgaW4gdGhlIGBvdmVycmlkZXNgIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3Igb2YgYGZxbmAuIChcIk9iamVjdFwiIGFjY2VwdHMgbm9uZSlcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcblxuICAvKipcbiAgICogRGVjbGFyYXRpb25zIG9mIG1ldGhvZCBvdmVycmlkZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBjYWxsYmFja3NcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlW107XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlc3BvbnNlID0gT2JqUmVmO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlbFJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGVsUmVzcG9uc2Uge31cblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljR2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgdmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNTZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTZXRSZXNwb25zZSB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0ludm9rZVJlcXVlc3Qge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlUmVzcG9uc2Uge1xuICByZWFkb25seSByZXN1bHQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWdpblJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWdpblJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcHJvbWlzZWlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kUmVxdWVzdCB7XG4gIHJlYWRvbmx5IHByb21pc2VpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcmVzdWx0OiBhbnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrc1JlcXVlc3Qge31cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja3NSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGNhbGxiYWNrczogQ2FsbGJhY2tbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVJlcXVlc3Qge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVycj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzdWx0PzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlUmVzcG9uc2Uge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtaW5nUmVxdWVzdCB7XG4gIHJlYWRvbmx5IGFzc2VtYmx5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtaW5nUmVzcG9uc2Uge1xuICByZWFkb25seSBuYW1pbmc6IHtcbiAgICByZWFkb25seSBbbGFuZ3VhZ2U6IHN0cmluZ106IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzUmVxdWVzdCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzUmVzcG9uc2Uge1xuICByZWFkb25seSBvYmplY3RDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBLZXJuZWxSZXF1ZXN0ID1cbiAgfCBMb2FkUmVxdWVzdFxuICB8IENyZWF0ZVJlcXVlc3RcbiAgfCBEZWxSZXF1ZXN0XG4gIHwgR2V0UmVxdWVzdFxuICB8IFNldFJlcXVlc3RcbiAgfCBJbnZva2VSZXF1ZXN0XG4gIHwgQmVnaW5SZXF1ZXN0XG4gIHwgRW5kUmVxdWVzdFxuICB8IENhbGxiYWNrc1JlcXVlc3RcbiAgfCBDb21wbGV0ZVJlcXVlc3RcbiAgfCBOYW1pbmdSZXF1ZXN0XG4gIHwgU3RhdHNSZXF1ZXN0O1xuXG5leHBvcnQgdHlwZSBLZXJuZWxSZXNwb25zZSA9XG4gIHwgSGVsbG9SZXNwb25zZVxuICB8IExvYWRSZXNwb25zZVxuICB8IENyZWF0ZVJlc3BvbnNlXG4gIHwgRGVsUmVzcG9uc2VcbiAgfCBHZXRSZXNwb25zZVxuICB8IFNldFJlc3BvbnNlXG4gIHwgSW52b2tlUmVzcG9uc2VcbiAgfCBCZWdpblJlc3BvbnNlXG4gIHwgRW5kUmVzcG9uc2VcbiAgfCBDYWxsYmFja3NSZXNwb25zZVxuICB8IENvbXBsZXRlUmVzcG9uc2VcbiAgfCBOYW1pbmdSZXNwb25zZVxuICB8IFN0YXRzUmVzcG9uc2U7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2theVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgb2s6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvclJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgZXJyb3I6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhY2s/OiBzdHJpbmc7XG59XG4iXX0=
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFNBQVMsR0FBRyxhQUFhLENBQUM7QUFDMUIsUUFBQSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUN0QyxRQUFBLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsUUFBQSxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBQzFCLFFBQUEsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLFlBQVksR0FBRyxjQUFjLENBQUM7QUFPM0MsU0FBZ0IsUUFBUSxDQUFDLEtBQVU7SUFDakMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxpQkFBUyxJQUFJLEtBQUssQ0FBQztBQUMzRSxDQUFDO0FBRkQsNEJBRUM7QUFNRCxTQUFnQixVQUFVLENBQUMsS0FBVTtJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGtCQUFVLElBQUksS0FBSyxDQUFDO0FBQzVFLENBQUM7QUFGRCxnQ0FFQztBQU1ELFNBQWdCLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksa0JBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUUsQ0FBQztBQUZELGdDQUVDO0FBTUQsU0FBZ0IsU0FBUyxDQUFDLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxpQkFBUyxJQUFJLEtBQUssQ0FBQztBQUMzRSxDQUFDO0FBRkQsOEJBRUM7QUFTRCxTQUFnQixZQUFZLENBQUMsS0FBVTtJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLG9CQUFZLElBQUksS0FBSyxDQUFDO0FBQzlFLENBQUM7QUFGRCxvQ0FFQztBQVNELFNBQWdCLGdCQUFnQixDQUFDLEtBQWU7SUFDOUMsT0FBUSxLQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQUMvRCxDQUFDO0FBRkQsNENBRUM7QUFPRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFlO0lBQ2hELE9BQVEsS0FBYSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyx1QkFBdUI7QUFDakUsQ0FBQztBQUZELGdEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRPS0VOX1JFRiA9ICckanNpaS5ieXJlZic7XG5leHBvcnQgY29uc3QgVE9LRU5fSU5URVJGQUNFUyA9ICckanNpaS5pbnRlcmZhY2VzJztcbmV4cG9ydCBjb25zdCBUT0tFTl9EQVRFID0gJyRqc2lpLmRhdGUnO1xuZXhwb3J0IGNvbnN0IFRPS0VOX0VOVU0gPSAnJGpzaWkuZW51bSc7XG5leHBvcnQgY29uc3QgVE9LRU5fTUFQID0gJyRqc2lpLm1hcCc7XG5leHBvcnQgY29uc3QgVE9LRU5fU1RSVUNUID0gJyRqc2lpLnN0cnVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqUmVmIHtcbiAgcmVhZG9ubHkgW1RPS0VOX1JFRl06IHN0cmluZztcbiAgW1RPS0VOX0lOVEVSRkFDRVNdPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09ialJlZih2YWx1ZTogYW55KTogdmFsdWUgaXMgT2JqUmVmIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fUkVGIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVEYXRlIHtcbiAgcmVhZG9ubHkgW1RPS0VOX0RBVEVdOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVEYXRlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlRGF0ZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX0RBVEUgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZUVudW0ge1xuICByZWFkb25seSBbVE9LRU5fRU5VTV06IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZUVudW0odmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVFbnVtIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fRU5VTSBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlTWFwIHtcbiAgcmVhZG9ubHkgW1RPS0VOX01BUF06IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVNYXAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVNYXAge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9NQVAgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZVN0cnVjdCB7XG4gIHJlYWRvbmx5IFtUT0tFTl9TVFJVQ1RdOiB7XG4gICAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZVN0cnVjdCh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZVN0cnVjdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX1NUUlVDVCBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgT3ZlcnJpZGUgPSBNZXRob2RPdmVycmlkZSB8IFByb3BlcnR5T3ZlcnJpZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kT3ZlcnJpZGUge1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgY29va2llPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNZXRob2RPdmVycmlkZSh2YWx1ZTogT3ZlcnJpZGUpOiB2YWx1ZSBpcyBNZXRob2RPdmVycmlkZSB7XG4gIHJldHVybiAodmFsdWUgYXMgYW55KS5tZXRob2QgIT0gbnVsbDsgLy8gUHl0aG9uIHBhc3NlcyBcIm51bGxcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5T3ZlcnJpZGUge1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSBjb29raWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5T3ZlcnJpZGUodmFsdWU6IE92ZXJyaWRlKTogdmFsdWUgaXMgUHJvcGVydHlPdmVycmlkZSB7XG4gIHJldHVybiAodmFsdWUgYXMgYW55KS5wcm9wZXJ0eSAhPSBudWxsOyAvLyBQeXRob24gcGFzc2VzIFwibnVsbFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2sge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBpbnZva2U/OiBJbnZva2VSZXF1ZXN0O1xuICByZWFkb25seSBnZXQ/OiBHZXRSZXF1ZXN0O1xuICByZWFkb25seSBzZXQ/OiBTZXRSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlbGxvUmVzcG9uc2Uge1xuICByZWFkb25seSBoZWxsbzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBhc3NlbWJseSAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEFzc2VtYmx5IHZlcnNpb24gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKiBUaGUgdGFyYmFsbCBvZiB0aGUgcGFja2FnZSAqL1xuICByZWFkb25seSB0YXJiYWxsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgYXNzZW1ibHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTY3JpcHRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgYXNzZW1ibHk6IHN0cmluZztcbiAgcmVhZG9ubHkgc2NyaXB0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTY3JpcHRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3Rkb3V0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0ZGVycjogc3RyaW5nO1xuICByZWFkb25seSBzaWduYWw6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgRlFOIG9mIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSBpcyByZXF1ZXN0ZWQgKG9yIFwiT2JqZWN0XCIpXG4gICAqL1xuICByZWFkb25seSBmcW46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEZRTnMgb2YgaW50ZXJmYWNlcyB0aGUgaW5zdGFuY2UgaW1wbGVtZW50cywgaWYgYW55LiBEZWNsYXJpbmdcbiAgICogaW50ZXJmYWNlcyB0aGF0IHRoZSBjbGFzcyBkZW5vdGVkIGJ5IGBmcW5gIGltcGxlbWVudHMgaXMgbm90IG5lY2Vzc2FyeS5cbiAgICogVGhpcyBtZWFucyB0aGF0IG1lbWViZXJzIG9mIGludGVyZmFjZXMgZm91bmQgaW4gdGhpcyBwcm9wZXJ0eSBzaG91bGRcbiAgICogZGVjbGFyZSBtZW1iZXJzIHRoYXQgYXJlIGZvdW5kIGluIHRoZSBgb3ZlcnJpZGVzYCBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIGBmcW5gLiAoXCJPYmplY3RcIiBhY2NlcHRzIG5vbmUpXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogYW55W107XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9ucyBvZiBtZXRob2Qgb3ZlcnJpZGVzIHRoYXQgc2hvdWxkIHRyaWdnZXIgY2FsbGJhY2tzXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBPdmVycmlkZVtdO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXNwb25zZSA9IE9ialJlZjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWxSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERlbFJlc3BvbnNlIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0dldFJlcXVlc3Qge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljU2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IGFueTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVzcG9uc2Uge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNJbnZva2VSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlUmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJncz86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcmVzdWx0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXNwb25zZSB7XG4gIHJlYWRvbmx5IHByb21pc2VpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZFJlcXVlc3Qge1xuICByZWFkb25seSBwcm9taXNlaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHJlc3VsdDogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja3NSZXF1ZXN0IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2tzUmVzcG9uc2Uge1xuICByZWFkb25seSBjYWxsYmFja3M6IENhbGxiYWNrW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGVSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xuICByZWFkb25seSBlcnI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1JlcXVlc3Qge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgbmFtaW5nOiB7XG4gICAgcmVhZG9ubHkgW2xhbmd1YWdlOiBzdHJpbmddOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1JlcXVlc3Qge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgb2JqZWN0Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgS2VybmVsUmVxdWVzdCA9XG4gIHwgTG9hZFJlcXVlc3RcbiAgfCBDcmVhdGVSZXF1ZXN0XG4gIHwgRGVsUmVxdWVzdFxuICB8IEdldFJlcXVlc3RcbiAgfCBTZXRSZXF1ZXN0XG4gIHwgSW52b2tlUmVxdWVzdFxuICB8IEJlZ2luUmVxdWVzdFxuICB8IEVuZFJlcXVlc3RcbiAgfCBDYWxsYmFja3NSZXF1ZXN0XG4gIHwgQ29tcGxldGVSZXF1ZXN0XG4gIHwgTmFtaW5nUmVxdWVzdFxuICB8IFN0YXRzUmVxdWVzdDtcblxuZXhwb3J0IHR5cGUgS2VybmVsUmVzcG9uc2UgPVxuICB8IEhlbGxvUmVzcG9uc2VcbiAgfCBMb2FkUmVzcG9uc2VcbiAgfCBDcmVhdGVSZXNwb25zZVxuICB8IERlbFJlc3BvbnNlXG4gIHwgR2V0UmVzcG9uc2VcbiAgfCBTZXRSZXNwb25zZVxuICB8IEludm9rZVJlc3BvbnNlXG4gIHwgQmVnaW5SZXNwb25zZVxuICB8IEVuZFJlc3BvbnNlXG4gIHwgQ2FsbGJhY2tzUmVzcG9uc2VcbiAgfCBDb21wbGV0ZVJlc3BvbnNlXG4gIHwgTmFtaW5nUmVzcG9uc2VcbiAgfCBTdGF0c1Jlc3BvbnNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9rYXlSZXNwb25zZSB7XG4gIHJlYWRvbmx5IG9rOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGVycm9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xufVxuIl19
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './kernel';
2
2
  import * as api from './api';
3
3
  export { api };
4
+ //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -14,4 +14,4 @@ exports.api = void 0;
14
14
  __exportStar(require("./kernel"), exports);
15
15
  const api = require("./api");
16
16
  exports.api = api;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBRXpCLDZCQUE2QjtBQUNwQixrQkFBRyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4va2VybmVsJztcblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJy4vYXBpJztcbmV4cG9ydCB7IGFwaSB9O1xuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUV6Qiw2QkFBNkI7QUFDcEIsa0JBQUciLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2tlcm5lbCc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5leHBvcnQgeyBhcGkgfTtcbiJdfQ==
package/lib/kernel.d.ts CHANGED
@@ -87,3 +87,4 @@ export declare class Kernel {
87
87
  */
88
88
  private _execute;
89
89
  }
90
+ //# sourceMappingURL=kernel.d.ts.map
package/lib/kernel.js CHANGED
@@ -917,4 +917,4 @@ class Assembly {
917
917
  this.closure = closure;
918
918
  }
919
919
  }
920
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsia2VybmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyxvQ0FBb0M7QUFDcEMsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUV6Qiw2QkFBNkI7QUFDN0IsK0JBQWtDO0FBQ2xDLHVDQUE0RDtBQUM1RCxvQ0FBb0M7QUFDcEMsd0NBQXdDO0FBRXhDLE1BQWEsTUFBTTtJQWlCakI7Ozs7OztPQU1HO0lBQ0gsWUFBMEIsZUFBZ0Q7UUFDeEUsZ0VBQWdFO1FBQ2hFLHFEQUFxRDtRQUY3QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUM7UUF2QjFFOztXQUVHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFcEIsZUFBVSxHQUFpQyxFQUFFLENBQUM7UUFDckMsWUFBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLFFBQUcsR0FBaUMsRUFBRSxDQUFDO1FBQ3ZDLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7UUFpQnhFLDJEQUEyRDtRQUUzRCxnRkFBZ0Y7UUFDaEYsZ0ZBQWdGO1FBQ2hGLDhEQUE4RDtRQUM5RCwrRUFBK0U7UUFDL0UsZUFBZTtRQUNmLG9HQUFvRztRQUNwRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFF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UixRQUFRLENBQWU7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUMzQixDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdGFyIGZyb20gJ3Rhcic7XG5pbXBvcnQgKiBhcyB2bSBmcm9tICd2bSc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBUT0tFTl9SRUYgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBPYmplY3RUYWJsZSwgdGFnSnNpaUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9vYmplY3RzJztcbmltcG9ydCAqIGFzIG9uRXhpdCBmcm9tICcuL29uLWV4aXQnO1xuaW1wb3J0ICogYXMgd2lyZSBmcm9tICcuL3NlcmlhbGl6YXRpb24nO1xuXG5leHBvcnQgY2xhc3MgS2VybmVsIHtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGZvciB2ZXJib3NlIGRlYnVnZ2luZy5cbiAgICovXG4gIHB1YmxpYyB0cmFjZUVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGFzc2VtYmxpZXM6IHsgW25hbWU6IHN0cmluZ106IEFzc2VtYmx5IH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RzID0gbmV3IE9iamVjdFRhYmxlKHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcykpO1xuICBwcml2YXRlIGNiczogeyBbY2JpZDogc3RyaW5nXTogQ2FsbGJhY2sgfSA9IHt9O1xuICBwcml2YXRlIHdhaXRpbmc6IHsgW2NiaWQ6IHN0cmluZ106IENhbGxiYWNrIH0gPSB7fTtcbiAgcHJpdmF0ZSBwcm9taXNlczogeyBbcHJpZDogc3RyaW5nXTogQXN5bmNJbnZvY2F0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAyMDAwMDsgLy8gaW5jcmVtZW50aW5nIGNvdW50ZXIgZm9yIG9iamlkLCBjYmlkLCBwcm9taXNlaWRcbiAgcHJpdmF0ZSBzeW5jSW5Qcm9ncmVzcz86IHN0cmluZzsgLy8gZm9yYmlkcyBhc3luYyBjYWxscyAoYmVnaW4pIHdoaWxlIHByb2Nlc3Npbmcgc3luYyBjYWxscyAoZ2V0L3NldC9pbnZva2UpXG4gIHByaXZhdGUgaW5zdGFsbERpcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3g6IHZtLkNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBqc2lpIGtlcm5lbCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja0hhbmRsZXIgVGhpcyBoYW5kbGVyIGlzIGludm9rZWQgd2hlbiBhIHN5bmNocm9ub3VzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGFuZCByZXR1cm4gaXQnc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAob3IgdGhyb3cgYW4gZXJyb3IpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjYWxsYmFja0hhbmRsZXI6IChjYWxsYmFjazogYXBpLkNhbGxiYWNrKSA9PiBhbnkpIHtcbiAgICAvLyBgc2V0SW1tZWRpYXRlYCBpcyByZXF1aXJlZCBmb3IgdGVzdHMgdG8gcGFzcyAoaXQgaXMgb3RoZXJ3aXNlXG4gICAgLy8gaW1wb3NzaWJsZSB0byB3YWl0IGZvciBpbi1WTSBwcm9taXNlcyB0byBjb21wbGV0ZSlcblxuICAgIC8vIGBCdWZmZXJgIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc2ltcGxlLXJlc291cmNlLWJ1bmRsZXIuXG5cbiAgICAvLyBIQUNLOiB3aGVuIHdlIHdlYnBhY2sgQGpzaWkvcnVudGltZSwgYWxsIFwicmVxdWlyZVwiIHN0YXRlbWVudHMgZ2V0IHRyYW5zcGlsZWQsXG4gICAgLy8gc28gbW9kdWxlcyBjYW4gYmUgcmVzb2x2ZWQgd2l0aGluIHRoZSBwYWNrLiBIb3dldmVyLCBoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG9cbiAgICAvLyBsZXQgbG9hZGVkIG1vZHVsZXMgdG8gdXNlIHRoZSBuYXRpdmUgbm9kZSBcInJlcXVpcmVcIiBtZXRob2QuXG4gICAgLy8gSSB3b25kZXIgaWYgd2VicGFjayBoYXMgc29tZSBwcmFnbWEgdGhhdCBhbGxvd3Mgb3B0aW5nLW91dCBhdCBjZXJ0YWluIHBvaW50c1xuICAgIC8vIGluIHRoZSBjb2RlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBtb2R1bGVMb2FkID0gcmVxdWlyZSgnbW9kdWxlJykuTW9kdWxlLl9sb2FkO1xuICAgIGNvbnN0IG5vZGVSZXF1aXJlID0gKHA6IHN0cmluZykgPT4gbW9kdWxlTG9hZChwLCBtb2R1bGUsIGZhbHNlKTtcblxuICAgIHRoaXMuc2FuZGJveCA9IHZtLmNyZWF0ZUNvbnRleHQoe1xuICAgICAgQnVmZmVyLCAvLyB0byB1c2Ugc2ltcGxlLXJlc291cmNlLWJ1bmRsZXJcbiAgICAgIHNldEltbWVkaWF0ZSwgLy8gYXN5bmMgdGVzdHNcbiAgICAgIHJlcXVpcmU6IG5vZGVSZXF1aXJlLCAvLyBtb2R1bGVzIG5lZWQgdG8gXCJyZXF1aXJlXCJcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkKHJlcTogYXBpLkxvYWRSZXF1ZXN0KTogYXBpLkxvYWRSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2xvYWQnLCByZXEpO1xuXG4gICAgaWYgKCdhc3NlbWJseScgaW4gcmVxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgYXNzZW1ibHlgIGZpZWxkIGlzIGRlcHJlY2F0ZWQgZm9yIFwibG9hZFwiLCB1c2UgYG5hbWVgLCBgdmVyc2lvbmAgYW5kIGB0YXJiYWxsYCBpbnN0ZWFkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGtnbmFtZSA9IHJlcS5uYW1lO1xuICAgIGNvbnN0IHBrZ3ZlciA9IHJlcS52ZXJzaW9uO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHN1Y2ggYSBtb2R1bGVcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gdGhpcy5fZ2V0UGFja2FnZURpcihwa2duYW1lKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocGFja2FnZURpcikpIHtcbiAgICAgIC8vIG1vZHVsZSBleGlzdHMsIHZlcmlmeSB2ZXJzaW9uXG4gICAgICBjb25zdCBlcGtnID0gZnMucmVhZEpzb25TeW5jKHBhdGguam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJykpO1xuICAgICAgaWYgKGVwa2cudmVyc2lvbiAhPT0gcGtndmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgdmVyc2lvbnMgJHtwa2d2ZXJ9IGFuZCAke2Vwa2cudmVyc2lvbn0gb2YgdGhlIGAgK1xuICAgICAgICAgICAgYHBhY2thZ2UgJyR7cGtnbmFtZX0nIGNhbm5vdCBiZSBsb2FkZWQgdG9nZXRoZXIgc2luY2UgdGhpcyBpcyB1bnN1cHBvcnRlZCBieSBgICtcbiAgICAgICAgICAgICdzb21lIHJ1bnRpbWUgZW52aXJvbm1lbnRzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2FtZSB2ZXJzaW9uLCBuby1vcFxuICAgICAgdGhpcy5fZGVidWcoJ2xvb2sgdXAgYWxyZWFkeS1sb2FkZWQgYXNzZW1ibHknLCBwa2duYW1lKTtcbiAgICAgIGNvbnN0IGFzc20gPSB0aGlzLmFzc2VtYmxpZXNbcGtnbmFtZV07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFzc2VtYmx5OiBhc3NtLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgIHR5cGVzOiBPYmplY3Qua2V5cyhhc3NtLm1ldGFkYXRhLnR5cGVzID8/IHt9KS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgaW5zdGFsbCBkaXJlY3RvcnkgKHRoZXJlIG1heSBiZSBzZXZlcmFsIHBhdGggY29tcG9uZW50cyBmb3IgQHNjb3BlZC9wYWNrYWdlcylcbiAgICBmcy5ta2RpcnBTeW5jKHBhY2thZ2VEaXIpO1xuXG4gICAgLy8gRm9yY2UgdW1hc2sgdG8gaGF2ZSBucG0taW5zdGFsbC1saWtlIHBlcm1pc3Npb25zXG4gICAgY29uc3Qgb3JpZ2luYWxVbWFzayA9IHByb2Nlc3MudW1hc2soMG8wMjIpO1xuICAgIHRyeSB7XG4gICAgICAvLyB1bnRhciB0aGUgYXJjaGl2ZSB0byBpdHMgZmluYWwgbG9jYXRpb25cbiAgICAgIHRhci5leHRyYWN0KHtcbiAgICAgICAgY3dkOiBwYWNrYWdlRGlyLFxuICAgICAgICBmaWxlOiByZXEudGFyYmFsbCxcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICBzdHJpcDogMSwgLy8gUmVtb3ZlcyB0aGUgJ3BhY2thZ2UvJyBwYXRoIGVsZW1lbnQgZnJvbSBlbnRyaWVzXG4gICAgICAgIHN5bmM6IHRydWUsXG4gICAgICAgIHVubGluazogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXNldCB1bWFzayB0byB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgICAgcHJvY2Vzcy51bWFzayhvcmlnaW5hbFVtYXNrKTtcbiAgICB9XG5cbiAgICAvLyByZWFkIC5qc2lpIG1ldGFkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2VcbiAgICBjb25zdCBqc2lpTWV0YWRhdGFGaWxlID0gcGF0aC5qb2luKHBhY2thZ2VEaXIsIHNwZWMuU1BFQ19GSUxFX05BTUUpO1xuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoanNpaU1ldGFkYXRhRmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBhY2thZ2UgdGFyYmFsbCAke3JlcS50YXJiYWxsfSBtdXN0IGhhdmUgYSBmaWxlIG5hbWVkICR7c3BlYy5TUEVDX0ZJTEVfTkFNRX0gYXQgdGhlIHJvb3RgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXNzbVNwZWMgPSBmcy5yZWFkSnNvblN5bmMoanNpaU1ldGFkYXRhRmlsZSkgYXMgc3BlYy5Bc3NlbWJseTtcblxuICAgIC8vIGxvYWQgdGhlIG1vZHVsZSBhbmQgY2FwdHVyZSBpdCdzIGNsb3N1cmVcbiAgICBjb25zdCBjbG9zdXJlID0gdGhpcy5fZXhlY3V0ZShcbiAgICAgIGByZXF1aXJlKFN0cmluZy5yYXdcXGAke3BhY2thZ2VEaXJ9XFxgKWAsXG4gICAgICBwYWNrYWdlRGlyLFxuICAgICk7XG4gICAgY29uc3QgYXNzbSA9IG5ldyBBc3NlbWJseShhc3NtU3BlYywgY2xvc3VyZSk7XG4gICAgdGhpcy5fYWRkQXNzZW1ibHkoYXNzbSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXNzZW1ibHk6IGFzc21TcGVjLm5hbWUsXG4gICAgICB0eXBlczogT2JqZWN0LmtleXMoYXNzbVNwZWMudHlwZXMgPz8ge30pLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGludm9rZUJpblNjcmlwdChcbiAgICByZXE6IGFwaS5JbnZva2VTY3JpcHRSZXF1ZXN0LFxuICApOiBhcGkuSW52b2tlU2NyaXB0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSB0aGlzLl9nZXRQYWNrYWdlRGlyKHJlcS5hc3NlbWJseSk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBhY2thZ2VEaXIpKSB7XG4gICAgICAvLyBtb2R1bGUgZXhpc3RzLCB2ZXJpZnkgdmVyc2lvblxuICAgICAgY29uc3QgZXBrZyA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcblxuICAgICAgaWYgKCFlcGtnLmJpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIGJpbiBzY3JpcHRzIGRlZmluZWQgZm9yIHRoaXMgcGFja2FnZS4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0UGF0aCA9IGVwa2cuYmluW3JlcS5zY3JpcHRdO1xuXG4gICAgICBpZiAoIWVwa2cuYmluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IHdpdGggbmFtZSAke3JlcS5zY3JpcHR9IHdhcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gY3Auc3Bhd25TeW5jKFxuICAgICAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgc2NyaXB0UGF0aCksXG4gICAgICAgIHJlcS5hcmdzID8/IFtdLFxuICAgICAgICB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBOT0RFX09QVElPTlMgYXJlIGhvbm9yZWQgaWYgd2Ugc2hlbGwgb3V0IHRvIG5vZGVcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzogcHJvY2Vzcy5leGVjQXJndi5qb2luKCcgJyksXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgXCJ0aGlzXCIgbm9kZSBpcyBhaGVhZCBvZiAkUEFUSCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIFBBVEg6IGAke3BhdGguZGlybmFtZShwcm9jZXNzLmV4ZWNQYXRoKX06JHtwcm9jZXNzLmVudi5QQVRIfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZG91dDogcmVzdWx0LnN0ZG91dCxcbiAgICAgICAgc3RkZXJyOiByZXN1bHQuc3RkZXJyLFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgIHNpZ25hbDogcmVzdWx0LnNpZ25hbCxcbiAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSB3aXRoIG5hbWUgJHtyZXEuYXNzZW1ibHl9IHdhcyBub3QgbG9hZGVkLmApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShyZXE6IGFwaS5DcmVhdGVSZXF1ZXN0KTogYXBpLkNyZWF0ZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlKHJlcSk7XG4gIH1cblxuICBwdWJsaWMgZGVsKHJlcTogYXBpLkRlbFJlcXVlc3QpOiBhcGkuRGVsUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmIH0gPSByZXE7XG5cbiAgICB0aGlzLl9kZWJ1ZygnZGVsJywgb2JqcmVmKTtcbiAgICB0aGlzLm9iamVjdHMuZGVsZXRlT2JqZWN0KG9ianJlZik7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgc2dldChyZXE6IGFwaS5TdGF0aWNHZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc2dldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoYHByb3BlcnR5ICR7cHJvcGVydHl9YCwgKCkgPT5cbiAgICAgIHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBwcm90b3R5cGVbcHJvcGVydHldKSxcbiAgICApO1xuXG4gICAgdGhpcy5fZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICBjb25zdCByZXQgPSB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgdGkpO1xuICAgIHRoaXMuX2RlYnVnKCdyZXQnLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzc2V0KHJlcTogYXBpLlN0YXRpY1NldFJlcXVlc3QpOiBhcGkuU2V0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBwcm9wZXJ0eSwgdmFsdWUgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc3NldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBpZiAodGkuaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHN0YXRpYyBwcm9wZXJ0eSAke3N5bWJvbH0gaXMgcmVhZG9ubHlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAke3Byb3BlcnR5fWAsICgpID0+XG4gICAgICB0aGlzLl93cmFwU2FuZGJveENvZGUoXG4gICAgICAgICgpID0+IChwcm90b3R5cGVbcHJvcGVydHldID0gdGhpcy5fdG9TYW5kYm94KHZhbHVlLCB0aSkpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXE6IGFwaS5HZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICB0aGlzLl9kZWJ1ZygnZ2V0Jywgb2JqcmVmLCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IHRoZSBuYXRpdmUgY29kZSBhbmQgXCJnZXRcIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdCwgaXRcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBuYXRpdmUgY29kZSBpcyB0cnlpbmcgdG8gYWNjZXNzIHRoZSBcInN1cGVyXCIgcHJvcGVydHkuIGluIG9yZGVyIHRvIGVuYWJsZVxuICAgIC8vIHRoYXQsIHdlIGFjdHVhbGx5IGtlZXAgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdoZW4gd2Ugb3ZlcnJpZGUsXG4gICAgLy8gc28gYGZpbmRQcm9wZXJ0eVRhcmdldGAgd2lsbCByZXR1cm4gZWl0aGVyIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lIChcInByb3BlcnR5XCIpIG9yXG4gICAgLy8gdGhlIFwic3VwZXJcIiBwcm9wZXJ0eSBuYW1lIChzb21laGluZyBsaWtlIFwiJGpzaWkkc3VwZXIkPHByb3BlcnR5PiRcIikuXG4gICAgY29uc3QgcHJvcGVydHlUb0dldCA9IHRoaXMuX2ZpbmRQcm9wZXJ0eVRhcmdldChpbnN0YW5jZSwgcHJvcGVydHkpO1xuXG4gICAgLy8gbWFrZSB0aGUgYWN0dWFsIFwiZ2V0XCIsIGFuZCBibG9jayBhbnkgYXN5bmMgY2FsbHMgdGhhdCBtaWdodCBiZSBwZXJmb3JtZWRcbiAgICAvLyBieSBqc2lpIG92ZXJyaWRlcy5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoXG4gICAgICBgcHJvcGVydHkgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7cHJvcGVydHlUb0dldH0nYCxcbiAgICAgICgpID0+IHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBpbnN0YW5jZVtwcm9wZXJ0eVRvR2V0XSksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygndmFsdWU6JywgdmFsdWUpO1xuICAgIGNvbnN0IHJldCA9IHRoaXMuX2Zyb21TYW5kYm94KHZhbHVlLCB0aSk7XG4gICAgdGhpcy5fZGVidWcoJ3JldDonLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQocmVxOiBhcGkuU2V0UmVxdWVzdCk6IGFwaS5TZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSB9ID0gcmVxO1xuICAgIHRoaXMuX2RlYnVnKCdzZXQnLCBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuXG4gICAgY29uc3QgcHJvcEluZm8gPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHJlcS5wcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIGlmIChwcm9wSW5mby5pbW11dGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgdmFsdWUgb2YgaW1tdXRhYmxlIHByb3BlcnR5ICR7cmVxLnByb3BlcnR5fSB0byAke3JlcS52YWx1ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eVRvU2V0ID0gdGhpcy5fZmluZFByb3BlcnR5VGFyZ2V0KGluc3RhbmNlLCBwcm9wZXJ0eSk7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHtwcm9wZXJ0eVRvU2V0fSdgLCAoKSA9PlxuICAgICAgdGhpcy5fd3JhcFNhbmRib3hDb2RlKFxuICAgICAgICAoKSA9PiAoaW5zdGFuY2VbcHJvcGVydHlUb1NldF0gPSB0aGlzLl90b1NhbmRib3godmFsdWUsIHByb3BJbmZvKSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKHJlcTogYXBpLkludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlJywgb2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuICAgIGNvbnN0IHsgdGksIG9iaiwgZm4gfSA9IHRoaXMuX2ZpbmRJbnZva2VUYXJnZXQob2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB0aGlzLl9lbnN1cmVTeW5jKFxuICAgICAgYG1ldGhvZCAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHttZXRob2R9J2AsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgICBmbi5hcHBseShvYmosIHRoaXMuX3RvU2FuZGJveFZhbHVlcyhhcmdzLCB0aS5wYXJhbWV0ZXJzKSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9mcm9tU2FuZGJveChyZXQsIHRpLnJldHVybnMgPz8gJ3ZvaWQnKTtcbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlIHJlc3VsdCcsIHJlc3VsdCk7XG5cbiAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzaW52b2tlKHJlcTogYXBpLlN0YXRpY0ludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1Zygnc2ludm9rZScsIGZxbiwgbWV0aG9kLCBhcmdzKTtcblxuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JNZXRob2QobWV0aG9kLCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmcW59LiR7bWV0aG9kfSBpcyBub3QgYSBzdGF0aWMgbWV0aG9kYCk7XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG4gICAgY29uc3QgZm4gPSBwcm90b3R5cGVbbWV0aG9kXSBhcyAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gYW55O1xuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZW5zdXJlU3luYyhgbWV0aG9kICcke2Zxbn0uJHttZXRob2R9J2AsICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgZm4uYXBwbHkocHJvdG90eXBlLCB0aGlzLl90b1NhbmRib3hWYWx1ZXMoYXJncywgdGkucGFyYW1ldGVycykpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlYnVnKCdtZXRob2QgcmV0dXJuZWQ6JywgcmV0KTtcbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMuX2Zyb21TYW5kYm94KHJldCwgdGkucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgYmVnaW4ocmVxOiBhcGkuQmVnaW5SZXF1ZXN0KTogYXBpLkJlZ2luUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnYmVnaW4nLCBvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICBpZiAodGhpcy5zeW5jSW5Qcm9ncmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGludm9rZSBhc3luYyBtZXRob2QgJyR7cmVxLm9ianJlZltUT0tFTl9SRUZdfS4ke3JlcS5tZXRob2R9JyB3aGlsZSBzeW5jICR7dGhpcy5zeW5jSW5Qcm9ncmVzc30gaXMgYmVpbmcgcHJvY2Vzc2VkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB0aSwgb2JqLCBmbiB9ID0gdGhpcy5fZmluZEludm9rZVRhcmdldChvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICAvLyB2ZXJpZnkgdGhpcyBpcyBpbmRlZWQgYW4gYXN5bmMgbWV0aG9kXG4gICAgaWYgKCF0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJHttZXRob2R9IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFzeW5jIG1ldGhvZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgIGZuLmFwcGx5KG9iaiwgdGhpcy5fdG9TYW5kYm94VmFsdWVzKGFyZ3MsIHRpLnBhcmFtZXRlcnMpKSxcbiAgICApIGFzIFByb21pc2U8YW55PjtcblxuICAgIC8vIHNpbmNlIHdlIGFyZSBwbGFubmluZyB0byByZXNvbHZlIHRoaXMgcHJvbWlzZSBpbiBhIGRpZmZlcmVudCBzY29wZVxuICAgIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHJlamVjdGlvbnMgaGVyZSBbMV1cbiAgICAvLyBbMV06IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTIwMTc5L3Nob3VsZC1pLXJlZnJhaW4tZnJvbS1oYW5kbGluZy1wcm9taXNlLXJlamVjdGlvbi1hc3luY2hyb25vdXNseS80MDkyMTUwNVxuICAgIHByb21pc2UuY2F0Y2goKF8pID0+IHVuZGVmaW5lZCk7XG5cbiAgICBjb25zdCBwcmlkID0gdGhpcy5fbWFrZXByaWQoKTtcbiAgICB0aGlzLnByb21pc2VzW3ByaWRdID0ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIG1ldGhvZDogdGksXG4gICAgfTtcblxuICAgIHJldHVybiB7IHByb21pc2VpZDogcHJpZCB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVuZChyZXE6IGFwaS5FbmRSZXF1ZXN0KTogUHJvbWlzZTxhcGkuRW5kUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHByb21pc2VpZCB9ID0gcmVxO1xuXG4gICAgdGhpcy5fZGVidWcoJ2VuZCcsIHByb21pc2VpZCk7XG5cbiAgICBjb25zdCB7IHByb21pc2UsIG1ldGhvZCB9ID0gdGhpcy5wcm9taXNlc1twcm9taXNlaWRdO1xuICAgIGlmIChwcm9taXNlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJvbWlzZSB3aXRoIElEOiAke3Byb21pc2VpZH1gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgcmVzdWx0OicsIHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgZXJyb3I6JywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJlc3VsdDogdGhpcy5fZnJvbVNhbmRib3gocmVzdWx0LCBtZXRob2QucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2tzKF9yZXE/OiBhcGkuQ2FsbGJhY2tzUmVxdWVzdCk6IGFwaS5DYWxsYmFja3NSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NhbGxiYWNrcycpO1xuICAgIGNvbnN0IHJldCA9IE9iamVjdC5rZXlzKHRoaXMuY2JzKS5tYXAoKGNiaWQpID0+IHtcbiAgICAgIGNvbnN0IGNiID0gdGhpcy5jYnNbY2JpZF07XG4gICAgICB0aGlzLndhaXRpbmdbY2JpZF0gPSBjYjsgLy8gbW92ZSB0byB3YWl0aW5nXG4gICAgICBjb25zdCBjYWxsYmFjazogYXBpLkNhbGxiYWNrID0ge1xuICAgICAgICBjYmlkLFxuICAgICAgICBjb29raWU6IGNiLm92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgaW52b2tlOiB7XG4gICAgICAgICAgb2JqcmVmOiBjYi5vYmpyZWYsXG4gICAgICAgICAgbWV0aG9kOiBjYi5vdmVycmlkZS5tZXRob2QsXG4gICAgICAgICAgYXJnczogY2IuYXJncyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGFsbCBjYWxsYmFja3MgdG8gdGhlIHdhaXQgcXVldWUgYW5kIGNsZWFuIHRoZSBjYWxsYmFjayBxdWV1ZS5cbiAgICB0aGlzLmNicyA9IHt9O1xuICAgIHJldHVybiB7IGNhbGxiYWNrczogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgY29tcGxldGUocmVxOiBhcGkuQ29tcGxldGVSZXF1ZXN0KTogYXBpLkNvbXBsZXRlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgY2JpZCwgZXJyLCByZXN1bHQgfSA9IHJlcTtcblxuICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZScsIGNiaWQsIGVyciwgcmVzdWx0KTtcblxuICAgIGlmICghKGNiaWQgaW4gdGhpcy53YWl0aW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsYmFjayAke2NiaWR9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGNiID0gdGhpcy53YWl0aW5nW2NiaWRdO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCBlcnJvcjonLCBlcnIpO1xuICAgICAgY2IuZmFpbChuZXcgRXJyb3IoZXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNhbmRveFJlc3VsdCA9IHRoaXMuX3RvU2FuZGJveChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBjYi5leHBlY3RlZFJldHVyblR5cGUgPz8gJ3ZvaWQnLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCByZXN1bHQ6Jywgc2FuZG94UmVzdWx0KTtcbiAgICAgIGNiLnN1Y2NlZWQoc2FuZG94UmVzdWx0KTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy53YWl0aW5nW2NiaWRdO1xuXG4gICAgcmV0dXJuIHsgY2JpZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlLXNwZWNpZmljIG5hbWVzIGZvciBhIGpzaWkgbW9kdWxlLlxuICAgKiBAcGFyYW0gYXNzZW1ibHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBqc2lpIG1vZHVsZSAoaS5lLiBqc2lpJGpzaWlfY2FsY3VsYXRvcl9saWIkKVxuICAgKi9cbiAgcHVibGljIG5hbWluZyhyZXE6IGFwaS5OYW1pbmdSZXF1ZXN0KTogYXBpLk5hbWluZ1Jlc3BvbnNlIHtcbiAgICBjb25zdCBhc3NlbWJseU5hbWUgPSByZXEuYXNzZW1ibHk7XG5cbiAgICB0aGlzLl9kZWJ1ZygnbmFtaW5nJywgYXNzZW1ibHlOYW1lKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcbiAgICBjb25zdCB0YXJnZXRzID0gYXNzZW1ibHkubWV0YWRhdGEudGFyZ2V0cztcbiAgICBpZiAoIXRhcmdldHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCAtIFwidGFyZ2V0c1wiIGZvciAke2Fzc2VtYmx5TmFtZX0gaXMgbWlzc2luZyFgKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1pbmc6IHRhcmdldHMgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0cyhfcmVxPzogYXBpLlN0YXRzUmVxdWVzdCk6IGFwaS5TdGF0c1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0Q291bnQ6IHRoaXMub2JqZWN0cy5jb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkQXNzZW1ibHkoYXNzbTogQXNzZW1ibHkpIHtcbiAgICB0aGlzLmFzc2VtYmxpZXNbYXNzbS5tZXRhZGF0YS5uYW1lXSA9IGFzc207XG5cbiAgICAvLyBhZGQgdGhlIF9fanNpaV9fLmZxbiBwcm9wZXJ0eSBvbiBldmVyeSBjb25zdHJ1Y3Rvci4gdGhpcyBhbGxvd3NcbiAgICAvLyB0cmF2ZXJzaW5nIGJldHdlZW4gdGhlIGphdmFzY3JpcHQgYW5kIGpzaWkgd29ybGRzIGdpdmVuIGFueSBvYmplY3QuXG4gICAgZm9yIChjb25zdCBmcW4gb2YgT2JqZWN0LmtleXMoYXNzbS5tZXRhZGF0YS50eXBlcyA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IHR5cGVkZWYgPSBhc3NtLm1ldGFkYXRhLnR5cGVzIVtmcW5dO1xuICAgICAgc3dpdGNoICh0eXBlZGVmLmtpbmQpIHtcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZTpcbiAgICAgICAgICBjb250aW51ZTsgLy8gaW50ZXJmYWNlcyBkb24ndCByZWFsbHkgZXhpc3RcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuRW51bTpcbiAgICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuX2ZpbmRTeW1ib2woZnFuKTtcbiAgICAgICAgICB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3IsIGZxbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCB0aGUgamF2YXNjcmlwdCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgYSBqc2lpIEZRTi5cbiAgcHJpdmF0ZSBfZmluZEN0b3IoXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgYXJnczogYW55W10sXG4gICk6IHsgY3RvcjogYW55OyBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSB9IHtcbiAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgIHJldHVybiB7IGN0b3I6IE9iamVjdCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVpbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgIHN3aXRjaCAodHlwZWluZm8ua2luZCkge1xuICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjb25zdCBjbGFzc1R5cGUgPSB0eXBlaW5mbyBhcyBzcGVjLkNsYXNzVHlwZTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNZXRob2RBcmd1bWVudHMoY2xhc3NUeXBlLmluaXRpYWxpemVyLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjdG9yOiB0aGlzLl9maW5kU3ltYm9sKGZxbiksXG4gICAgICAgICAgcGFyYW1ldGVyczogY2xhc3NUeXBlLmluaXRpYWxpemVyICYmIGNsYXNzVHlwZS5pbml0aWFsaXplci5wYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IHdpdGggYW4gRlFOIG9mIGFuIGludGVyZmFjZTogJHtmcW59YCxcbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEZRTiBraW5kOiAke2Zxbn1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRQYWNrYWdlRGlyKHBrZ25hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmluc3RhbGxEaXIpIHtcbiAgICAgIHRoaXMuaW5zdGFsbERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2pzaWkta2VybmVsLScpKTtcbiAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKHRoaXMuaW5zdGFsbERpciwgJ25vZGVfbW9kdWxlcycpKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjcmVhdGluZyBqc2lpLWtlcm5lbCBtb2R1bGVzIHdvcmtkaXI6JywgdGhpcy5pbnN0YWxsRGlyKTtcblxuICAgICAgb25FeGl0LnJlbW92ZVN5bmModGhpcy5pbnN0YWxsRGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmluc3RhbGxEaXIsICdub2RlX21vZHVsZXMnLCBwa2duYW1lKTtcbiAgfVxuXG4gIC8vIHByZWZpeGVkIHdpdGggXyB0byBhbGxvdyBjYWxsaW5nIHRoaXMgbWV0aG9kIGludGVybmFsbHkgd2l0aG91dFxuICAvLyBnZXR0aW5nIGl0IHJlY29yZGVkIGZvciB0ZXN0aW5nLlxuICBwcml2YXRlIF9jcmVhdGUocmVxOiBhcGkuQ3JlYXRlUmVxdWVzdCk6IGFwaS5DcmVhdGVSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NyZWF0ZScsIHJlcSk7XG4gICAgY29uc3QgeyBmcW4sIGludGVyZmFjZXMsIG92ZXJyaWRlcyB9ID0gcmVxO1xuXG4gICAgY29uc3QgcmVxdWVzdEFyZ3MgPSByZXEuYXJncyA/PyBbXTtcblxuICAgIGNvbnN0IGN0b3JSZXN1bHQgPSB0aGlzLl9maW5kQ3RvcihmcW4sIHJlcXVlc3RBcmdzKTtcbiAgICBjb25zdCBjdG9yID0gY3RvclJlc3VsdC5jdG9yO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3dyYXBTYW5kYm94Q29kZShcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBjdG9yKC4uLnRoaXMuX3RvU2FuZGJveFZhbHVlcyhyZXF1ZXN0QXJncywgY3RvclJlc3VsdC5wYXJhbWV0ZXJzKSksXG4gICAgKTtcbiAgICBjb25zdCBvYmpyZWYgPSB0aGlzLm9iamVjdHMucmVnaXN0ZXJPYmplY3Qob2JqLCBmcW4sIHJlcS5pbnRlcmZhY2VzID8/IFtdKTtcblxuICAgIC8vIG92ZXJyaWRlczogZm9yIGVhY2ggb25lIG9mIHRoZSBvdmVycmlkZSBtZXRob2QgbmFtZXMsIGluc3RhbGxzIGFcbiAgICAvLyBtZXRob2Qgb24gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlbW90ZSBcInJldmVyc2UgcHJveHlcIi5cblxuICAgIGlmIChvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdvdmVycmlkZXMnLCBvdmVycmlkZXMpO1xuXG4gICAgICBjb25zdCBvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UgPVxuICAgICAgICAnT3ZlcnJpZGUgY2FuIGVpdGhlciBiZSBcIm1ldGhvZFwiIG9yIFwicHJvcGVydHlcIic7XG4gICAgICBjb25zdCBtZXRob2RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChhcGkuaXNNZXRob2RPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICBpZiAoYXBpLmlzUHJvcGVydHlPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWV0aG9kcy5oYXMob3ZlcnJpZGUubWV0aG9kKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBtZXRob2QgJyR7b3ZlcnJpZGUubWV0aG9kfSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWV0aG9kcy5hZGQob3ZlcnJpZGUubWV0aG9kKTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5TWV0aG9kT3ZlcnJpZGUob2JqLCBvYmpyZWYsIGZxbiwgaW50ZXJmYWNlcywgb3ZlcnJpZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGFwaS5pc1Byb3BlcnR5T3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgaWYgKGFwaS5pc01ldGhvZE92ZXJyaWRlKG92ZXJyaWRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhcyhvdmVycmlkZS5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBwcm9wZXJ0eSAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb3BlcnRpZXMuYWRkKG92ZXJyaWRlLnByb3BlcnR5KTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5UHJvcGVydHlPdmVycmlkZShvYmosIG9ianJlZiwgZnFuLCBpbnRlcmZhY2VzLCBvdmVycmlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqcmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3VwZXJQcm9wZXJ0eU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAkanNpaSRzdXBlciQke25hbWV9JGA7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVByb3BlcnR5T3ZlcnJpZGUoXG4gICAgb2JqOiBhbnksXG4gICAgb2JqcmVmOiBhcGkuT2JqUmVmLFxuICAgIHR5cGVGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICkge1xuICAgIC8vIGVycm9yIGlmIHdlIGNhbiBmaW5kIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lXG4gICAgaWYgKHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG92ZXJyaWRlLnByb3BlcnR5LCB0eXBlRnFuLCBpbnRlcmZhY2VzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHJ5aW5nIHRvIG92ZXJyaWRlIG1ldGhvZCAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nIGFzIGEgcHJvcGVydHlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvcEluZm8gPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KFxuICAgICAgb3ZlcnJpZGUucHJvcGVydHksXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuICAgIC8vIGlmIHRoaXMgaXMgYSBwcml2YXRlIHByb3BlcnR5IChpLmUuIGRvZXNuJ3QgaGF2ZSBgcHJvcEluZm9gIHRoZSBvYmplY3QgaGFzIGEga2V5KVxuICAgIGlmICghcHJvcEluZm8gJiYgb3ZlcnJpZGUucHJvcGVydHkgaW4gb2JqKSB7XG4gICAgICB0aGlzLl9kZWJ1ZyhgU2tpcHBpbmcgb3ZlcnJpZGUgb2YgcHJpdmF0ZSBwcm9wZXJ0eSAke292ZXJyaWRlLnByb3BlcnR5fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghcHJvcEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3Qgd2UgaGF2ZSBOTyB0eXBlIGluZm9ybWF0aW9uIG9uIChwcm9iYWJseVxuICAgICAgLy8gYmVjYXVzZSBpdCdzIGFuIGFub255bW91cyBvYmplY3QpLlxuICAgICAgLy8gUHJldGVuZCBpdCdzICdwcm9wOiBhbnknO1xuICAgICAgLy9cbiAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkbyBiZXR0ZXIgdHlwZSBjaGVja2luZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gaWYgSlNJSSBjbGllbnRzXG4gICAgICAvLyB3b3VsZCB0ZWxsIHVzIHRoZSBpbnRlbmRlZCBpbnRlcmZhY2UgdHlwZS5cbiAgICAgIHByb3BJbmZvID0ge1xuICAgICAgICBuYW1lOiBvdmVycmlkZS5wcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZpbmVPdmVycmlkZW5Qcm9wZXJ0eShvYmosIG9ianJlZiwgb3ZlcnJpZGUsIHByb3BJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmluZU92ZXJyaWRlblByb3BlcnR5KFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICAgcHJvcEluZm86IHNwZWMuUHJvcGVydHksXG4gICkge1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IG92ZXJyaWRlLnByb3BlcnR5O1xuXG4gICAgdGhpcy5fZGVidWcoJ2FwcGx5IG92ZXJyaWRlJywgcHJvcGVydHlOYW1lKTtcblxuICAgIC8vIHNhdmUgdGhlIG9sZCBwcm9wZXJ0eSB1bmRlciAkanNpaSRzdXBlciQ8cHJvcD4kIHNvIHRoYXQgcHJvcGVydHkgb3ZlcnJpZGVzXG4gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyBpdCB2aWEgYHN1cGVyLjxwcm9wPmAuXG4gICAgY29uc3QgcHJldiA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSkgPz8ge1xuICAgICAgdmFsdWU6IG9ialtwcm9wZXJ0eU5hbWVdLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2RW51bWVyYWJsZSA9IHByZXYuZW51bWVyYWJsZTtcbiAgICBwcmV2LmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCB0aGlzLl9nZXRTdXBlclByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpLCBwcmV2KTtcblxuICAgIC8vIHdlIGFkZCBjYWxsYmFja3MgZm9yIGJvdGggJ2dldCcgYW5kICdzZXQnLCBldmVuIGlmIHRoZSBwcm9wZXJ0eVxuICAgIC8vIGlzIHJlYWRvbmx5LiB0aGlzIGlzIGZpbmUgYmVjYXVzZSBpZiB5b3UgdHJ5IHRvIHNldCgpIGEgcmVhZG9ubHlcbiAgICAvLyBwcm9wZXJ0eSwgaXQgd2lsbCBmYWlsLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3BlcnR5TmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogcHJldkVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHByZXYuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCd2aXJ0dWFsIGdldCcsIG9ianJlZiwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICBnZXQ6IHsgb2JqcmVmLCBwcm9wZXJ0eTogcHJvcGVydHlOYW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWJ1ZygnY2FsbGJhY2sgcmV0dXJuZWQnLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9TYW5kYm94KHJlc3VsdCwgcHJvcEluZm8pO1xuICAgICAgfSxcbiAgICAgIHNldDogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3ZpcnR1YWwgc2V0Jywgb2JqcmVmLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgICBjYmlkOiB0aGlzLl9tYWtlY2JpZCgpLFxuICAgICAgICAgIHNldDoge1xuICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgcHJvcEluZm8pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIG9iajogYW55LFxuICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgaWYgKGRpcmVjdCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgICAgaWYgKHByb3RvID09IG51bGwgJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgLy8gV2UgcmVhY2hlZCBPYmplY3Qgb3IgdGhlIHByb3RvdHlwZSBjaGFpbiByb290LCBhbGwgaG9wZSBpcyBsb3N0IVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU1ldGhvZE92ZXJyaWRlKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICB0eXBlRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZSxcbiAgKSB7XG4gICAgLy8gZXJyb3IgaWYgd2UgY2FuIGZpbmQgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZVxuICAgIGlmICh0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KG92ZXJyaWRlLm1ldGhvZCwgdHlwZUZxbiwgaW50ZXJmYWNlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyeWluZyB0byBvdmVycmlkZSBwcm9wZXJ0eSAnJHtvdmVycmlkZS5tZXRob2R9JyBhcyBhIG1ldGhvZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBtZXRob2RJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JNZXRob2QoXG4gICAgICBvdmVycmlkZS5tZXRob2QsXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHByaXZhdGUgbWV0aG9kIChkb2Vzbid0IGhhdmUgbWV0aG9kSW5mbywga2V5IHJlc29sdmVzIG9uIHRoZSBvYmplY3QpLCB3ZVxuICAgIC8vIGFyZSBnb2luZyB0byBza2lwIHRoZSBvdmVycmlkZS5cbiAgICBpZiAoIW1ldGhvZEluZm8gJiYgb2JqW292ZXJyaWRlLm1ldGhvZF0pIHtcbiAgICAgIHRoaXMuX2RlYnVnKGBTa2lwcGluZyBvdmVycmlkZSBvZiBwcml2YXRlIG1ldGhvZCAke292ZXJyaWRlLm1ldGhvZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGhvZEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBtZXRob2Qgb24gYW4gb2JqZWN0IHdlIGhhdmUgTk8gdHlwZSBpbmZvcm1hdGlvbiBvbiAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBhbiBhbm9ueW1vdXMgb2JqZWN0KS5cbiAgICAgIC8vIFByZXRlbmQgaXQncyBhbiAoLi4uYXJnczogYW55W10pID0+IGFueVxuICAgICAgbWV0aG9kSW5mbyA9IHtcbiAgICAgICAgbmFtZTogb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICByZXR1cm5zOiB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9LFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2FyZ3MnLFxuICAgICAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmluZU92ZXJyaWRlbk1ldGhvZChvYmosIG9ianJlZiwgb3ZlcnJpZGUsIG1ldGhvZEluZm8pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVmaW5lT3ZlcnJpZGVuTWV0aG9kKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLk1ldGhvZE92ZXJyaWRlLFxuICAgIG1ldGhvZEluZm86IHNwZWMuTWV0aG9kLFxuICApIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gb3ZlcnJpZGUubWV0aG9kO1xuXG4gICAgaWYgKG1ldGhvZEluZm8uYXN5bmMpIHtcbiAgICAgIC8vIGFzeW5jIG1ldGhvZCBvdmVycmlkZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKC4uLm1ldGhvZEFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ2ludm9rZSBhc3luYyBtZXRob2Qgb3ZlcnJpZGUnLCBvdmVycmlkZSk7XG4gICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuX3RvU2FuZGJveFZhbHVlcyhtZXRob2RBcmdzLCBtZXRob2RJbmZvLnBhcmFtZXRlcnMpO1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChzdWNjZWVkLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYmlkID0gdGhpcy5fbWFrZWNiaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhZGRpbmcgY2FsbGJhY2sgdG8gcXVldWUnLCBjYmlkKTtcbiAgICAgICAgICAgIHRoaXMuY2JzW2NiaWRdID0ge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICBleHBlY3RlZFJldHVyblR5cGU6IG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcsXG4gICAgICAgICAgICAgIHN1Y2NlZWQsXG4gICAgICAgICAgICAgIGZhaWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN5bmMgbWV0aG9kIG92ZXJyaWRlIChtZXRob2QgaW5mbyBpcyBub3QgcmVxdWlyZWQpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiAoLi4ubWV0aG9kQXJnczogYW55W10pID0+IHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZyhcbiAgICAgICAgICAgICdpbnZva2Ugc3luYyBtZXRob2Qgb3ZlcnJpZGUnLFxuICAgICAgICAgICAgb3ZlcnJpZGUsXG4gICAgICAgICAgICAnYXJncycsXG4gICAgICAgICAgICBtZXRob2RBcmdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHZhbGlkYXRpbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgIC8vIGRlY2xhcmVkIHBhcmFtZXRlcnMgaGVyZSwgYnV0IGxldCdzIGp1c3QgYXNzdW1lIHRoZSBKU0lJIHJ1bnRpbWUgb24gdGhlXG4gICAgICAgICAgLy8gb3RoZXIgZW5kIGhhcyBkb25lIGl0cyB3b3JrLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICAgIGludm9rZToge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgYXJnczogdGhpcy5fZnJvbVNhbmRib3hWYWx1ZXMobWV0aG9kQXJncywgbWV0aG9kSW5mby5wYXJhbWV0ZXJzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ1Jlc3VsdCcsIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RvU2FuZGJveChyZXN1bHQsIG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEludm9rZVRhcmdldChcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdLFxuICApIHtcbiAgICBjb25zdCB7IGluc3RhbmNlLCBmcW4sIGludGVyZmFjZXMgfSA9IHRoaXMub2JqZWN0cy5maW5kT2JqZWN0KG9ianJlZik7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBmcW4sIGludGVyZmFjZXMpO1xuICAgIHRoaXMuX3ZhbGlkYXRlTWV0aG9kQXJndW1lbnRzKHRpLCBhcmdzKTtcblxuICAgIC8vIGFsd2F5cyBmaXJzdCBsb29rIHVwIHRoZSBtZXRob2QgaW4gdGhlIHByb3RvdHlwZS4gdGhpcyBwcmFjdGljYWxseSBieXBhc3Nlc1xuICAgIC8vIGFueSBtZXRob2RzIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzICh3aGljaCBhcmUgYnkgZGVmaW5pdGlvbiBuYXRpdmVcbiAgICAvLyBtZXRob2RzKS4gdGhpcyBzZXJ2ZXMgdG8gYWxsb3cgbmF0aXZlIGNhbGwgdG8gaW52b2tlIFwic3VwZXIubWV0aG9kKClcIiB3aGVuXG4gICAgLy8gb3ZlcnJpZGluZyB0aGUgbWV0aG9kLlxuICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIHRoZSBtZXRob2Qgb24gdGhlIHByb3RvdHlwZSwgaXQgY291bGQgYmUgYSBsaXRlcmFsIG9iamVjdFxuICAgIC8vIHRoYXQgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UsIHNvIHdlIGxvb2sgaWYgd2UgaGF2ZSB0aGUgbWV0aG9kIG9uIHRoZSBvYmplY3RcbiAgICAvLyBpdHNlbGYuIGlmIHdlIGRvLCB3ZSBpbnZva2UgaXQuXG4gICAgbGV0IGZuID0gaW5zdGFuY2UuY29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdO1xuICAgIGlmICghZm4pIHtcbiAgICAgIGZuID0gaW5zdGFuY2VbbWV0aG9kTmFtZV07XG4gICAgICBpZiAoIWZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHttZXRob2ROYW1lfSBvbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgdGksIG9iajogaW5zdGFuY2UsIGZuIH07XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZU1ldGhvZEFyZ3VtZW50cyhcbiAgICBtZXRob2Q6IHNwZWMuQ2FsbGFibGUgfCB1bmRlZmluZWQsXG4gICAgYXJnczogYW55W10sXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogc3BlYy5QYXJhbWV0ZXJbXSA9IG1ldGhvZD8ucGFyYW1ldGVycyA/PyBbXTtcblxuICAgIC8vIGVycm9yIGlmIGFyZ3MgPiBwYXJhbXNcbiAgICBpZiAoYXJncy5sZW5ndGggPiBwYXJhbXMubGVuZ3RoICYmICEobWV0aG9kICYmIG1ldGhvZC52YXJpYWRpYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRvbyBtYW55IGFyZ3VtZW50cyAobWV0aG9kIGFjY2VwdHMgJHtwYXJhbXMubGVuZ3RofSBwYXJhbWV0ZXJzLCBnb3QgJHthcmdzLmxlbmd0aH0gYXJndW1lbnRzKWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG5cbiAgICAgIGlmIChwYXJhbS52YXJpYWRpYykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIE5vIHZhcmFyZyB3YXMgcHJvdmlkZWRcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBwYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAoIXBhcmFtLm9wdGlvbmFsICYmIHBhcmFtc1tqXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkICd1bmRlZmluZWQnIHZhbHVlIGF0IGluZGV4ICR7XG4gICAgICAgICAgICAgICAgaiAtIGlcbiAgICAgICAgICAgICAgfSBvZiB2YXJpYWRpYyBhcmd1bWVudCAnJHtcbiAgICAgICAgICAgICAgICBwYXJhbS5uYW1lXG4gICAgICAgICAgICAgIH0nIG9mIHR5cGUgJyR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UocGFyYW0udHlwZSl9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcGFyYW0ub3B0aW9uYWwgJiYgYXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBOb3QgZW5vdWdoIGFyZ3VtZW50cy4gTWlzc2luZyBhcmd1bWVudCBmb3IgdGhlIHJlcXVpcmVkIHBhcmFtZXRlciAnJHtcbiAgICAgICAgICAgIHBhcmFtLm5hbWVcbiAgICAgICAgICB9JyBvZiB0eXBlICcke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHBhcmFtLnR5cGUpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLmFzc2VtYmxpZXNbYXNzZW1ibHlOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFzc2VtYmx5OiAke2Fzc2VtYmx5TmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFN5bWJvbChmcW46IHN0cmluZykge1xuICAgIGNvbnN0IFthc3NlbWJseU5hbWUsIC4uLnBhcnRzXSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcblxuICAgIGxldCBjdXJyID0gYXNzZW1ibHkuY2xvc3VyZTtcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnIgPSBjdXJyW25hbWVdO1xuICAgIH1cbiAgICBpZiAoIWN1cnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3ltYm9sICR7ZnFufWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VycjtcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yRnFuKGZxbjogc3RyaW5nKTogc3BlYy5UeXBlIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGNvbXBvbmVudHNbMF07XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuYXNzZW1ibGllc1ttb2R1bGVOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSAnJHttb2R1bGVOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSBhc3NlbWJseS5tZXRhZGF0YS50eXBlcyA/PyB7fTtcbiAgICBjb25zdCBmcW5JbmZvID0gdHlwZXNbZnFuXTtcbiAgICBpZiAoIWZxbkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZSAnJHtmcW59JyBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnFuSW5mbztcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBmcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzPzogc3RyaW5nW10sXG4gICk6IHNwZWMuTWV0aG9kIHtcbiAgICBjb25zdCB0aSA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZE5hbWUsIGZxbiwgaW50ZXJmYWNlcyk7XG4gICAgaWYgKCF0aSkge1xuICAgICAgY29uc3QgYWRkZW5kdW0gPVxuICAgICAgICBpbnRlcmZhY2VzICYmIGludGVyZmFjZXMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYCBvciBpbnRlcmZhY2UocykgJHtpbnRlcmZhY2VzLmpvaW4oJywgJyl9YFxuICAgICAgICAgIDogJyc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDbGFzcyAke2Zxbn0ke2FkZGVuZHVtfSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgJyR7bWV0aG9kTmFtZX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVR5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBjbGFzc0Zxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHNwZWMuTWV0aG9kIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZxbiBvZiBbY2xhc3NGcW4sIC4uLmludGVyZmFjZXNdKSB7XG4gICAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlaW5mbyA9IHRoaXMuX3R5cGVJbmZvRm9yRnFuKGZxbik7XG5cbiAgICAgIGNvbnN0IG1ldGhvZHMgPVxuICAgICAgICAodHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGUgfCBzcGVjLkludGVyZmFjZVR5cGUpLm1ldGhvZHMgPz8gW107XG5cbiAgICAgIGZvciAoY29uc3QgbSBvZiBtZXRob2RzKSB7XG4gICAgICAgIGlmIChtLm5hbWUgPT09IG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZWN1cnNpb24gdG8gcGFyZW50IHR5cGUgKGlmIGV4aXN0cylcbiAgICAgIGNvbnN0IGJhc2VzID0gW1xuICAgICAgICAodHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGUpLmJhc2UsXG4gICAgICAgIC4uLigodHlwZWluZm8gYXMgc3BlYy5JbnRlcmZhY2VUeXBlKS5pbnRlcmZhY2VzID8/IFtdKSxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IGJhc2Ugb2YgYmFzZXMpIHtcbiAgICAgICAgaWYgKCFiYXNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZE5hbWUsIGJhc2UpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGNsYXNzRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gPSBbXSxcbiAgKTogc3BlYy5Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBmcW4gb2YgW2NsYXNzRnFuLCAuLi5pbnRlcmZhY2VzXSkge1xuICAgICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZUluZm8gPSB0aGlzLl90eXBlSW5mb0ZvckZxbihmcW4pO1xuXG4gICAgICBsZXQgcHJvcGVydGllcztcbiAgICAgIGxldCBiYXNlcztcblxuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodHlwZUluZm8pKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzVHlwZUluZm8gPSB0eXBlSW5mbyBhcyBzcGVjLkNsYXNzVHlwZTtcbiAgICAgICAgcHJvcGVydGllcyA9IGNsYXNzVHlwZUluZm8ucHJvcGVydGllcztcbiAgICAgICAgYmFzZXMgPSBjbGFzc1R5cGVJbmZvLmJhc2UgPyBbY2xhc3NUeXBlSW5mby5iYXNlXSA6IFtdO1xuICAgICAgfSBlbHNlIGlmIChzcGVjLmlzSW50ZXJmYWNlVHlwZSh0eXBlSW5mbykpIHtcbiAgICAgICAgY29uc3QgaW50ZXJmYWNlVHlwZUluZm8gPSB0eXBlSW5mbyBhcyBzcGVjLkludGVyZmFjZVR5cGU7XG4gICAgICAgIHByb3BlcnRpZXMgPSBpbnRlcmZhY2VUeXBlSW5mby5wcm9wZXJ0aWVzO1xuICAgICAgICBiYXNlcyA9IGludGVyZmFjZVR5cGVJbmZvLmludGVyZmFjZXMgPz8gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFR5cGUgb2Yga2luZCAke3R5cGVJbmZvLmtpbmR9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgICAgIGlmIChwLm5hbWUgPT09IHByb3BlcnR5KSB7XG4gICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmVjdXJzZSB0byBwYXJlbnQgdHlwZSAoaWYgZXhpc3RzKVxuICAgICAgZm9yIChjb25zdCBiYXNlRnFuIG9mIGJhc2VzKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGJhc2VGcW4pO1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0ZvclByb3BlcnR5KFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBzcGVjLlByb3BlcnR5IHtcbiAgICBjb25zdCB0eXBlSW5mbyA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG4gICAgaWYgKCF0eXBlSW5mbykge1xuICAgICAgY29uc3QgYWRkZW5kdW0gPVxuICAgICAgICBpbnRlcmZhY2VzICYmIGludGVyZmFjZXMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYCBvciBpbnRlcmZhY2UocykgJHtpbnRlcmZhY2VzLmpvaW4oJywgJyl9YFxuICAgICAgICAgIDogJyc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeXBlICR7ZnFufSR7YWRkZW5kdW19IGRvZXNuJ3QgaGF2ZSBhIHByb3BlcnR5ICcke3Byb3BlcnR5fSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9TYW5kYm94KHY6IGFueSwgZXhwZWN0ZWRUeXBlOiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHNlclR5cGVzID0gd2lyZS5zZXJpYWxpemF0aW9uVHlwZShcbiAgICAgIGV4cGVjdGVkVHlwZSxcbiAgICAgIHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygndG9TYW5kYm94JywgdiwgSlNPTi5zdHJpbmdpZnkoc2VyVHlwZXMpKTtcblxuICAgIGNvbnN0IGhvc3Q6IHdpcmUuU2VyaWFsaXplckhvc3QgPSB7XG4gICAgICBvYmplY3RzOiB0aGlzLm9iamVjdHMsXG4gICAgICBkZWJ1ZzogdGhpcy5fZGVidWcuYmluZCh0aGlzKSxcbiAgICAgIGZpbmRTeW1ib2w6IHRoaXMuX2ZpbmRTeW1ib2wuYmluZCh0aGlzKSxcbiAgICAgIGxvb2t1cFR5cGU6IHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgICByZWN1cnNlOiB0aGlzLl90b1NhbmRib3guYmluZCh0aGlzKSxcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3JzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHsgc2VyaWFsaXphdGlvbkNsYXNzLCB0eXBlUmVmIH0gb2Ygc2VyVHlwZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3aXJlLlNFUklBTElaRVJTW3NlcmlhbGl6YXRpb25DbGFzc10uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdixcbiAgICAgICAgICB0eXBlUmVmLFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIG5vIHVuaW9uICg5OSUgY2FzZSksIHJldGhyb3cgaW1tZWRpYXRlbHkgdG8gcHJlc2VydmUgc3RhY2sgdHJhY2VcbiAgICAgICAgaWYgKHNlclR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVmFsdWUgZGlkIG5vdCBtYXRjaCBhbnkgdHlwZSBpbiB1bmlvbjogJHtlcnJvcnMuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9tU2FuZGJveCh2OiBhbnksIHRhcmdldFR5cGU6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGFueSB7XG4gICAgY29uc3Qgc2VyVHlwZXMgPSB3aXJlLnNlcmlhbGl6YXRpb25UeXBlKFxuICAgICAgdGFyZ2V0VHlwZSxcbiAgICAgIHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygnZnJvbVNhbmRib3gnLCB2LCBKU09OLnN0cmluZ2lmeShzZXJUeXBlcykpO1xuXG4gICAgY29uc3QgaG9zdDogd2lyZS5TZXJpYWxpemVySG9zdCA9IHtcbiAgICAgIG9iamVjdHM6IHRoaXMub2JqZWN0cyxcbiAgICAgIGRlYnVnOiB0aGlzLl9kZWJ1Zy5iaW5kKHRoaXMpLFxuICAgICAgZmluZFN5bWJvbDogdGhpcy5fZmluZFN5bWJvbC5iaW5kKHRoaXMpLFxuICAgICAgbG9va3VwVHlwZTogdGhpcy5fdHlwZUluZm9Gb3JGcW4uYmluZCh0aGlzKSxcbiAgICAgIHJlY3Vyc2U6IHRoaXMuX2Zyb21TYW5kYm94LmJpbmQodGhpcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB7IHNlcmlhbGl6YXRpb25DbGFzcywgdHlwZVJlZiB9IG9mIHNlclR5cGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd2lyZS5TRVJJQUxJWkVSU1tzZXJpYWxpemF0aW9uQ2xhc3NdLnNlcmlhbGl6ZSh2LCB0eXBlUmVmLCBob3N0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgbm8gdW5pb24gKDk5JSBjYXNlKSwgcmV0aHJvdyBpbW1lZGlhdGVseSB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZVxuICAgICAgICBpZiAoc2VyVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvcnMucHVzaChlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBWYWx1ZSBkaWQgbm90IG1hdGNoIGFueSB0eXBlIGluIHVuaW9uOiAke2Vycm9ycy5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvU2FuZGJveFZhbHVlcyh4czogYW55W10sIHBhcmFtZXRlcnM/OiBzcGVjLlBhcmFtZXRlcltdKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JveFVuYm94UGFyYW1ldGVycyh4cywgcGFyYW1ldGVycywgdGhpcy5fdG9TYW5kYm94LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnJvbVNhbmRib3hWYWx1ZXMoeHM6IGFueVtdLCBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSkge1xuICAgIHJldHVybiB0aGlzLl9ib3hVbmJveFBhcmFtZXRlcnMoXG4gICAgICB4cyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICB0aGlzLl9mcm9tU2FuZGJveC5iaW5kKHRoaXMpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9ib3hVbmJveFBhcmFtZXRlcnMoXG4gICAgeHM6IGFueVtdLFxuICAgIHBhcmFtZXRlcnM6IHNwZWMuUGFyYW1ldGVyW10gfCB1bmRlZmluZWQsXG4gICAgYm94VW5ib3g6ICh4OiBhbnksIHQ6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZCkgPT4gYW55LFxuICApIHtcbiAgICBwYXJhbWV0ZXJzID0gWy4uLihwYXJhbWV0ZXJzID8/IFtdKV07XG4gICAgY29uc3QgdmFyaWFkaWMgPVxuICAgICAgcGFyYW1ldGVycy5sZW5ndGggPiAwICYmICEhcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdLnZhcmlhZGljO1xuICAgIC8vIFJlcGVhdCB0aGUgbGFzdCAodmFyaWFkaWMpIHR5cGUgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBhY3R1YWwgYXJndW1lbnRzXG4gICAgd2hpbGUgKHZhcmlhZGljICYmIHBhcmFtZXRlcnMubGVuZ3RoIDwgeHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG4gICAgaWYgKHhzLmxlbmd0aCA+IHBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcmd1bWVudCBsaXN0ICgke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHhzLFxuICAgICAgICApfSkgbm90IHNhbWUgc2l6ZSBhcyBleHBlY3RlZCBhcmd1bWVudCBsaXN0IChsZW5ndGggJHtcbiAgICAgICAgICBwYXJhbWV0ZXJzLmxlbmd0aFxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4geHMubWFwKCh4LCBpKSA9PiBib3hVbmJveCh4LCBwYXJhbWV0ZXJzIVtpXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVidWcoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAodGhpcy50cmFjZUVuYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tAanNpaS9rZXJuZWxdJywgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCBgZm5gIGlzIGNhbGxlZCBhbmQgZGVmZW5kcyBhZ2FpbnN0IGJlZ2lubmluZyB0byBpbnZva2VcbiAgICogYXN5bmMgbWV0aG9kcyB1bnRpbCBmbiBmaW5pc2hlcyAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuXG4gICAqL1xuICBwcml2YXRlIF9lbnN1cmVTeW5jPFQ+KGRlc2M6IHN0cmluZywgZm46ICgpID0+IFQpOiBUIHtcbiAgICB0aGlzLnN5bmNJblByb2dyZXNzID0gZGVzYztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN5bmNJblByb2dyZXNzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRQcm9wZXJ0eVRhcmdldChvYmo6IGFueSwgcHJvcGVydHk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1cGVyUHJvcCA9IHRoaXMuX2dldFN1cGVyUHJvcGVydHlOYW1lKHByb3BlcnR5KTtcbiAgICBpZiAoc3VwZXJQcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHN1cGVyUHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgLy9cbiAgLy8gdHlwZSBpbmZvcm1hdGlvblxuICAvL1xuXG4gIHByaXZhdGUgX21ha2VjYmlkKCkge1xuICAgIHJldHVybiBganNpaTo6Y2FsbGJhY2s6OiR7dGhpcy5uZXh0aWQrK31gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFrZXByaWQoKSB7XG4gICAgcmV0dXJuIGBqc2lpOjpwcm9taXNlOjoke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgX3dyYXBTYW5kYm94Q29kZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFyYml0cmFyeSBjb2RlIGluIGEgVk0gc2FuZGJveC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgICAgICAgSmF2YVNjcmlwdCBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBWTVxuICAgKiBAcGFyYW0gc2FuZGJveCAgICBhIFZNIGNvbnRleHQgdG8gdXNlIGZvciBydW5uaW5nIHRoZSBjb2RlXG4gICAqIEBwYXJhbSBzb3VyY2VNYXBzIHNvdXJjZSBtYXBzIHRvIGJlIHVzZWQgaW4gY2FzZSBhbiBleGNlcHRpb24gaXMgdGhyb3duXG4gICAqIEBwYXJhbSBmaWxlbmFtZSAgIHRoZSBmaWxlIG5hbWUgdG8gdXNlIGZvciB0aGUgZXhlY3V0ZWQgY29kZVxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGNvZGVcbiAgICovXG4gIHByaXZhdGUgX2V4ZWN1dGUoY29kZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gbmV3IHZtLlNjcmlwdChjb2RlLCB7IGZpbGVuYW1lIH0pO1xuICAgIHJldHVybiBzY3JpcHQucnVuSW5Db250ZXh0KHRoaXMuc2FuZGJveCwgeyBkaXNwbGF5RXJyb3JzOiB0cnVlIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWxsYmFjayB7XG4gIG9ianJlZjogYXBpLk9ialJlZjtcbiAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZTtcbiAgYXJnczogYW55W107XG4gIGV4cGVjdGVkUmV0dXJuVHlwZTogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkO1xuXG4gIC8vIGNvbXBsZXRpb24gY2FsbGJhY2tzXG4gIHN1Y2NlZWQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuICBmYWlsOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbn1cblxuaW50ZXJmYWNlIEFzeW5jSW52b2NhdGlvbiB7XG4gIG1ldGhvZDogc3BlYy5NZXRob2Q7XG4gIHByb21pc2U6IFByb21pc2U8YW55Pjtcbn1cblxuY2xhc3MgQXNzZW1ibHkge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhOiBzcGVjLkFzc2VtYmx5LFxuICAgIHB1YmxpYyByZWFkb25seSBjbG9zdXJlOiBhbnksXG4gICkge31cbn1cbiJdfQ==
920
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsb0NBQW9DO0FBQ3BDLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFFekIsNkJBQTZCO0FBQzdCLCtCQUFrQztBQUNsQyx1Q0FBNEQ7QUFDNUQsb0NBQW9DO0FBQ3BDLHdDQUF3QztBQUV4QyxNQUFhLE1BQU07SUFpQmpCOzs7Ozs7T0FNRztJQUNILFlBQTBCLGVBQWdEO1FBQ3hFLGdFQUFnRTtRQUNoRSxxREFBcUQ7UUFGN0Isb0JBQWUsR0FBZixlQUFlLENBQWlDO1FBdkIxRTs7V0FFRztRQUNJLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxJQUFJLHFCQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRSxRQUFHLEdBQWlDLEVBQUUsQ0FBQztRQUN2QyxZQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQXdDLEVBQUUsQ0FBQztRQUNuRCxXQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsa0RBQWtEO1FBaUJ4RSwyREFBMkQ7UUFFM0QsZ0ZBQWdGO1FBQ2hGLGdGQUFnRjtRQUNoRiw4REFBOEQ7UUFDOUQsK0VBQStFO1FBQy9FLGVBQWU7UUFDZixvR0FBb0c7UUFDcEcsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxPQUFPLEdB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QUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQUs7SUFDM0IsQ0FBQztDQUNMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRhciBmcm9tICd0YXInO1xuaW1wb3J0ICogYXMgdm0gZnJvbSAndm0nO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgVE9LRU5fUkVGIH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgT2JqZWN0VGFibGUsIHRhZ0pzaWlDb25zdHJ1Y3RvciB9IGZyb20gJy4vb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBvbkV4aXQgZnJvbSAnLi9vbi1leGl0JztcbmltcG9ydCAqIGFzIHdpcmUgZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcblxuZXhwb3J0IGNsYXNzIEtlcm5lbCB7XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBmb3IgdmVyYm9zZSBkZWJ1Z2dpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhY2VFbmFibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBhc3NlbWJsaWVzOiB7IFtuYW1lOiBzdHJpbmddOiBBc3NlbWJseSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0cyA9IG5ldyBPYmplY3RUYWJsZSh0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpKTtcbiAgcHJpdmF0ZSBjYnM6IHsgW2NiaWQ6IHN0cmluZ106IENhbGxiYWNrIH0gPSB7fTtcbiAgcHJpdmF0ZSB3YWl0aW5nOiB7IFtjYmlkOiBzdHJpbmddOiBDYWxsYmFjayB9ID0ge307XG4gIHByaXZhdGUgcHJvbWlzZXM6IHsgW3ByaWQ6IHN0cmluZ106IEFzeW5jSW52b2NhdGlvbiB9ID0ge307XG4gIHByaXZhdGUgbmV4dGlkID0gMjAwMDA7IC8vIGluY3JlbWVudGluZyBjb3VudGVyIGZvciBvYmppZCwgY2JpZCwgcHJvbWlzZWlkXG4gIHByaXZhdGUgc3luY0luUHJvZ3Jlc3M/OiBzdHJpbmc7IC8vIGZvcmJpZHMgYXN5bmMgY2FsbHMgKGJlZ2luKSB3aGlsZSBwcm9jZXNzaW5nIHN5bmMgY2FsbHMgKGdldC9zZXQvaW52b2tlKVxuICBwcml2YXRlIGluc3RhbGxEaXI/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzYW5kYm94OiB2bS5Db250ZXh0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEganNpaSBrZXJuZWwgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tIYW5kbGVyIFRoaXMgaGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBzeW5jaHJvbm91cyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZXNwb25zaWJpbGl0eSBpcyB0byBleGVjdXRlIHRoZSBjYWxsYmFjayBhbmQgcmV0dXJuIGl0J3NcbiAgICogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKG9yIHRocm93IGFuIGVycm9yKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY2FsbGJhY2tIYW5kbGVyOiAoY2FsbGJhY2s6IGFwaS5DYWxsYmFjaykgPT4gYW55KSB7XG4gICAgLy8gYHNldEltbWVkaWF0ZWAgaXMgcmVxdWlyZWQgZm9yIHRlc3RzIHRvIHBhc3MgKGl0IGlzIG90aGVyd2lzZVxuICAgIC8vIGltcG9zc2libGUgdG8gd2FpdCBmb3IgaW4tVk0gcHJvbWlzZXMgdG8gY29tcGxldGUpXG5cbiAgICAvLyBgQnVmZmVyYCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHNpbXBsZS1yZXNvdXJjZS1idW5kbGVyLlxuXG4gICAgLy8gSEFDSzogd2hlbiB3ZSB3ZWJwYWNrIEBqc2lpL3J1bnRpbWUsIGFsbCBcInJlcXVpcmVcIiBzdGF0ZW1lbnRzIGdldCB0cmFuc3BpbGVkLFxuICAgIC8vIHNvIG1vZHVsZXMgY2FuIGJlIHJlc29sdmVkIHdpdGhpbiB0aGUgcGFjay4gSG93ZXZlciwgaGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvXG4gICAgLy8gbGV0IGxvYWRlZCBtb2R1bGVzIHRvIHVzZSB0aGUgbmF0aXZlIG5vZGUgXCJyZXF1aXJlXCIgbWV0aG9kLlxuICAgIC8vIEkgd29uZGVyIGlmIHdlYnBhY2sgaGFzIHNvbWUgcHJhZ21hIHRoYXQgYWxsb3dzIG9wdGluZy1vdXQgYXQgY2VydGFpbiBwb2ludHNcbiAgICAvLyBpbiB0aGUgY29kZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgbW9kdWxlTG9hZCA9IHJlcXVpcmUoJ21vZHVsZScpLk1vZHVsZS5fbG9hZDtcbiAgICBjb25zdCBub2RlUmVxdWlyZSA9IChwOiBzdHJpbmcpID0+IG1vZHVsZUxvYWQocCwgbW9kdWxlLCBmYWxzZSk7XG5cbiAgICB0aGlzLnNhbmRib3ggPSB2bS5jcmVhdGVDb250ZXh0KHtcbiAgICAgIEJ1ZmZlciwgLy8gdG8gdXNlIHNpbXBsZS1yZXNvdXJjZS1idW5kbGVyXG4gICAgICBzZXRJbW1lZGlhdGUsIC8vIGFzeW5jIHRlc3RzXG4gICAgICByZXF1aXJlOiBub2RlUmVxdWlyZSwgLy8gbW9kdWxlcyBuZWVkIHRvIFwicmVxdWlyZVwiXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZChyZXE6IGFwaS5Mb2FkUmVxdWVzdCk6IGFwaS5Mb2FkUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdsb2FkJywgcmVxKTtcblxuICAgIGlmICgnYXNzZW1ibHknIGluIHJlcSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYGFzc2VtYmx5YCBmaWVsZCBpcyBkZXByZWNhdGVkIGZvciBcImxvYWRcIiwgdXNlIGBuYW1lYCwgYHZlcnNpb25gIGFuZCBgdGFyYmFsbGAgaW5zdGVhZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBrZ25hbWUgPSByZXEubmFtZTtcbiAgICBjb25zdCBwa2d2ZXIgPSByZXEudmVyc2lvbjtcblxuICAgIC8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBzdWNoIGEgbW9kdWxlXG4gICAgY29uc3QgcGFja2FnZURpciA9IHRoaXMuX2dldFBhY2thZ2VEaXIocGtnbmFtZSk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBhY2thZ2VEaXIpKSB7XG4gICAgICAvLyBtb2R1bGUgZXhpc3RzLCB2ZXJpZnkgdmVyc2lvblxuICAgICAgY29uc3QgZXBrZyA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICAgIGlmIChlcGtnLnZlcnNpb24gIT09IHBrZ3Zlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE11bHRpcGxlIHZlcnNpb25zICR7cGtndmVyfSBhbmQgJHtlcGtnLnZlcnNpb259IG9mIHRoZSBgICtcbiAgICAgICAgICAgIGBwYWNrYWdlICcke3BrZ25hbWV9JyBjYW5ub3QgYmUgbG9hZGVkIHRvZ2V0aGVyIHNpbmNlIHRoaXMgaXMgdW5zdXBwb3J0ZWQgYnkgYCArXG4gICAgICAgICAgICAnc29tZSBydW50aW1lIGVudmlyb25tZW50cycsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNhbWUgdmVyc2lvbiwgbm8tb3BcbiAgICAgIHRoaXMuX2RlYnVnKCdsb29rIHVwIGFscmVhZHktbG9hZGVkIGFzc2VtYmx5JywgcGtnbmFtZSk7XG4gICAgICBjb25zdCBhc3NtID0gdGhpcy5hc3NlbWJsaWVzW3BrZ25hbWVdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc3NlbWJseTogYXNzbS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICB0eXBlczogT2JqZWN0LmtleXMoYXNzbS5tZXRhZGF0YS50eXBlcyA/PyB7fSkubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGluc3RhbGwgZGlyZWN0b3J5ICh0aGVyZSBtYXkgYmUgc2V2ZXJhbCBwYXRoIGNvbXBvbmVudHMgZm9yIEBzY29wZWQvcGFja2FnZXMpXG4gICAgZnMubWtkaXJwU3luYyhwYWNrYWdlRGlyKTtcblxuICAgIC8vIEZvcmNlIHVtYXNrIHRvIGhhdmUgbnBtLWluc3RhbGwtbGlrZSBwZXJtaXNzaW9uc1xuICAgIGNvbnN0IG9yaWdpbmFsVW1hc2sgPSBwcm9jZXNzLnVtYXNrKDBvMDIyKTtcbiAgICB0cnkge1xuICAgICAgLy8gdW50YXIgdGhlIGFyY2hpdmUgdG8gaXRzIGZpbmFsIGxvY2F0aW9uXG4gICAgICB0YXIuZXh0cmFjdCh7XG4gICAgICAgIGN3ZDogcGFja2FnZURpcixcbiAgICAgICAgZmlsZTogcmVxLnRhcmJhbGwsXG4gICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgc3RyaXA6IDEsIC8vIFJlbW92ZXMgdGhlICdwYWNrYWdlLycgcGF0aCBlbGVtZW50IGZyb20gZW50cmllc1xuICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICB1bmxpbms6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVzZXQgdW1hc2sgdG8gdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIHByb2Nlc3MudW1hc2sob3JpZ2luYWxVbWFzayk7XG4gICAgfVxuXG4gICAgLy8gcmVhZCAuanNpaSBtZXRhZGF0YSBmcm9tIHRoZSByb290IG9mIHRoZSBwYWNrYWdlXG4gICAgY29uc3QganNpaU1ldGFkYXRhRmlsZSA9IHBhdGguam9pbihwYWNrYWdlRGlyLCBzcGVjLlNQRUNfRklMRV9OQU1FKTtcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGpzaWlNZXRhZGF0YUZpbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQYWNrYWdlIHRhcmJhbGwgJHtyZXEudGFyYmFsbH0gbXVzdCBoYXZlIGEgZmlsZSBuYW1lZCAke3NwZWMuU1BFQ19GSUxFX05BTUV9IGF0IHRoZSByb290YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFzc21TcGVjID0gZnMucmVhZEpzb25TeW5jKGpzaWlNZXRhZGF0YUZpbGUpIGFzIHNwZWMuQXNzZW1ibHk7XG5cbiAgICAvLyBsb2FkIHRoZSBtb2R1bGUgYW5kIGNhcHR1cmUgaXQncyBjbG9zdXJlXG4gICAgY29uc3QgY2xvc3VyZSA9IHRoaXMuX2V4ZWN1dGUoXG4gICAgICBgcmVxdWlyZShTdHJpbmcucmF3XFxgJHtwYWNrYWdlRGlyfVxcYClgLFxuICAgICAgcGFja2FnZURpcixcbiAgICApO1xuICAgIGNvbnN0IGFzc20gPSBuZXcgQXNzZW1ibHkoYXNzbVNwZWMsIGNsb3N1cmUpO1xuICAgIHRoaXMuX2FkZEFzc2VtYmx5KGFzc20pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzc2VtYmx5OiBhc3NtU3BlYy5uYW1lLFxuICAgICAgdHlwZXM6IE9iamVjdC5rZXlzKGFzc21TcGVjLnR5cGVzID8/IHt9KS5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbnZva2VCaW5TY3JpcHQoXG4gICAgcmVxOiBhcGkuSW52b2tlU2NyaXB0UmVxdWVzdCxcbiAgKTogYXBpLkludm9rZVNjcmlwdFJlc3BvbnNlIHtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gdGhpcy5fZ2V0UGFja2FnZURpcihyZXEuYXNzZW1ibHkpO1xuICAgIGlmIChmcy5wYXRoRXhpc3RzU3luYyhwYWNrYWdlRGlyKSkge1xuICAgICAgLy8gbW9kdWxlIGV4aXN0cywgdmVyaWZ5IHZlcnNpb25cbiAgICAgIGNvbnN0IGVwa2cgPSBmcy5yZWFkSnNvblN5bmMocGF0aC5qb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSk7XG5cbiAgICAgIGlmICghZXBrZy5iaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBiaW4gc2NyaXB0cyBkZWZpbmVkIGZvciB0aGlzIHBhY2thZ2UuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcmlwdFBhdGggPSBlcGtnLmJpbltyZXEuc2NyaXB0XTtcblxuICAgICAgaWYgKCFlcGtnLmJpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCB3aXRoIG5hbWUgJHtyZXEuc2NyaXB0fSB3YXMgbm90IGRlZmluZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNwLnNwYXduU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHBhY2thZ2VEaXIsIHNjcmlwdFBhdGgpLFxuICAgICAgICByZXEuYXJncyA/PyBbXSxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgTk9ERV9PUFRJT05TIGFyZSBob25vcmVkIGlmIHdlIHNoZWxsIG91dCB0byBub2RlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbignICcpLFxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIFwidGhpc1wiIG5vZGUgaXMgYWhlYWQgb2YgJFBBVEgganVzdCBpbiBjYXNlXG4gICAgICAgICAgICBQQVRIOiBgJHtwYXRoLmRpcm5hbWUocHJvY2Vzcy5leGVjUGF0aCl9OiR7cHJvY2Vzcy5lbnYuUEFUSH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hlbGw6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGRvdXQ6IHJlc3VsdC5zdGRvdXQsXG4gICAgICAgIHN0ZGVycjogcmVzdWx0LnN0ZGVycixcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICBzaWduYWw6IHJlc3VsdC5zaWduYWwsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhY2thZ2Ugd2l0aCBuYW1lICR7cmVxLmFzc2VtYmx5fSB3YXMgbm90IGxvYWRlZC5gKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUocmVxOiBhcGkuQ3JlYXRlUmVxdWVzdCk6IGFwaS5DcmVhdGVSZXNwb25zZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZShyZXEpO1xuICB9XG5cbiAgcHVibGljIGRlbChyZXE6IGFwaS5EZWxSZXF1ZXN0KTogYXBpLkRlbFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiB9ID0gcmVxO1xuXG4gICAgdGhpcy5fZGVidWcoJ2RlbCcsIG9ianJlZik7XG4gICAgdGhpcy5vYmplY3RzLmRlbGV0ZU9iamVjdChvYmpyZWYpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIHNnZXQocmVxOiBhcGkuU3RhdGljR2V0UmVxdWVzdCk6IGFwaS5HZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBmcW4sIHByb3BlcnR5IH0gPSByZXE7XG4gICAgY29uc3Qgc3ltYm9sID0gYCR7ZnFufS4ke3Byb3BlcnR5fWA7XG4gICAgdGhpcy5fZGVidWcoJ3NnZXQnLCBzeW1ib2wpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7c3ltYm9sfSBpcyBub3Qgc3RhdGljYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAke3Byb3BlcnR5fWAsICgpID0+XG4gICAgICB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT4gcHJvdG90eXBlW3Byb3BlcnR5XSksXG4gICAgKTtcblxuICAgIHRoaXMuX2RlYnVnKCd2YWx1ZTonLCB2YWx1ZSk7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZnJvbVNhbmRib3godmFsdWUsIHRpKTtcbiAgICB0aGlzLl9kZWJ1ZygncmV0JywgcmV0KTtcbiAgICByZXR1cm4geyB2YWx1ZTogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgc3NldChyZXE6IGFwaS5TdGF0aWNTZXRSZXF1ZXN0KTogYXBpLlNldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgcHJvcGVydHksIHZhbHVlIH0gPSByZXE7XG4gICAgY29uc3Qgc3ltYm9sID0gYCR7ZnFufS4ke3Byb3BlcnR5fWA7XG4gICAgdGhpcy5fZGVidWcoJ3NzZXQnLCBzeW1ib2wpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7c3ltYm9sfSBpcyBub3Qgc3RhdGljYCk7XG4gICAgfVxuXG4gICAgaWYgKHRpLmltbXV0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGF0aWMgcHJvcGVydHkgJHtzeW1ib2x9IGlzIHJlYWRvbmx5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuXG4gICAgdGhpcy5fZW5zdXJlU3luYyhgcHJvcGVydHkgJHtwcm9wZXJ0eX1gLCAoKSA9PlxuICAgICAgdGhpcy5fd3JhcFNhbmRib3hDb2RlKFxuICAgICAgICAoKSA9PiAocHJvdG90eXBlW3Byb3BlcnR5XSA9IHRoaXMuX3RvU2FuZGJveCh2YWx1ZSwgdGkpKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQocmVxOiBhcGkuR2V0UmVxdWVzdCk6IGFwaS5HZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBvYmpyZWYsIHByb3BlcnR5IH0gPSByZXE7XG4gICAgdGhpcy5fZGVidWcoJ2dldCcsIG9ianJlZiwgcHJvcGVydHkpO1xuICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiwgaW50ZXJmYWNlcyB9ID0gdGhpcy5vYmplY3RzLmZpbmRPYmplY3Qob2JqcmVmKTtcbiAgICBjb25zdCB0aSA9IHRoaXMuX3R5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG5cbiAgICAvLyBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSB0aGUgbmF0aXZlIGNvZGUgYW5kIFwiZ2V0XCIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QsIGl0XG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgbmF0aXZlIGNvZGUgaXMgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgXCJzdXBlclwiIHByb3BlcnR5LiBpbiBvcmRlciB0byBlbmFibGVcbiAgICAvLyB0aGF0LCB3ZSBhY3R1YWxseSBrZWVwIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgcHJvcGVydHkgZGVzY3JpcHRvciB3aGVuIHdlIG92ZXJyaWRlLFxuICAgIC8vIHNvIGBmaW5kUHJvcGVydHlUYXJnZXRgIHdpbGwgcmV0dXJuIGVpdGhlciB0aGUgb3JpZ2luYWwgcHJvcGVydHkgbmFtZSAoXCJwcm9wZXJ0eVwiKSBvclxuICAgIC8vIHRoZSBcInN1cGVyXCIgcHJvcGVydHkgbmFtZSAoc29tZWhpbmcgbGlrZSBcIiRqc2lpJHN1cGVyJDxwcm9wZXJ0eT4kXCIpLlxuICAgIGNvbnN0IHByb3BlcnR5VG9HZXQgPSB0aGlzLl9maW5kUHJvcGVydHlUYXJnZXQoaW5zdGFuY2UsIHByb3BlcnR5KTtcblxuICAgIC8vIG1ha2UgdGhlIGFjdHVhbCBcImdldFwiLCBhbmQgYmxvY2sgYW55IGFzeW5jIGNhbGxzIHRoYXQgbWlnaHQgYmUgcGVyZm9ybWVkXG4gICAgLy8gYnkganNpaSBvdmVycmlkZXMuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9lbnN1cmVTeW5jKFxuICAgICAgYHByb3BlcnR5ICcke29ianJlZltUT0tFTl9SRUZdfS4ke3Byb3BlcnR5VG9HZXR9J2AsXG4gICAgICAoKSA9PiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT4gaW5zdGFuY2VbcHJvcGVydHlUb0dldF0pLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICBjb25zdCByZXQgPSB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgdGkpO1xuICAgIHRoaXMuX2RlYnVnKCdyZXQ6JywgcmV0KTtcbiAgICByZXR1cm4geyB2YWx1ZTogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgc2V0KHJlcTogYXBpLlNldFJlcXVlc3QpOiBhcGkuU2V0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBwcm9wZXJ0eSwgdmFsdWUgfSA9IHJlcTtcbiAgICB0aGlzLl9kZWJ1Zygnc2V0Jywgb2JqcmVmLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiwgaW50ZXJmYWNlcyB9ID0gdGhpcy5vYmplY3RzLmZpbmRPYmplY3Qob2JqcmVmKTtcblxuICAgIGNvbnN0IHByb3BJbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShyZXEucHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG5cbiAgICBpZiAocHJvcEluZm8uaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IHZhbHVlIG9mIGltbXV0YWJsZSBwcm9wZXJ0eSAke3JlcS5wcm9wZXJ0eX0gdG8gJHtyZXEudmFsdWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydHlUb1NldCA9IHRoaXMuX2ZpbmRQcm9wZXJ0eVRhcmdldChpbnN0YW5jZSwgcHJvcGVydHkpO1xuXG4gICAgdGhpcy5fZW5zdXJlU3luYyhgcHJvcGVydHkgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7cHJvcGVydHlUb1NldH0nYCwgKCkgPT5cbiAgICAgIHRoaXMuX3dyYXBTYW5kYm94Q29kZShcbiAgICAgICAgKCkgPT4gKGluc3RhbmNlW3Byb3BlcnR5VG9TZXRdID0gdGhpcy5fdG9TYW5kYm94KHZhbHVlLCBwcm9wSW5mbykpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGludm9rZShyZXE6IGFwaS5JbnZva2VSZXF1ZXN0KTogYXBpLkludm9rZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ2ludm9rZScsIG9ianJlZiwgbWV0aG9kLCBhcmdzKTtcbiAgICBjb25zdCB7IHRpLCBvYmosIGZuIH0gPSB0aGlzLl9maW5kSW52b2tlVGFyZ2V0KG9ianJlZiwgbWV0aG9kLCBhcmdzKTtcblxuICAgIC8vIHZlcmlmeSB0aGlzIGlzIG5vdCBhbiBhc3luYyBtZXRob2RcbiAgICBpZiAodGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IGlzIGFuIGFzeW5jIG1ldGhvZCwgdXNlIFwiYmVnaW5cIiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZW5zdXJlU3luYyhcbiAgICAgIGBtZXRob2QgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7bWV0aG9kfSdgLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICAgICAgZm4uYXBwbHkob2JqLCB0aGlzLl90b1NhbmRib3hWYWx1ZXMoYXJncywgdGkucGFyYW1ldGVycykpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZnJvbVNhbmRib3gocmV0LCB0aS5yZXR1cm5zID8/ICd2b2lkJyk7XG4gICAgdGhpcy5fZGVidWcoJ2ludm9rZSByZXN1bHQnLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gIH1cblxuICBwdWJsaWMgc2ludm9rZShyZXE6IGFwaS5TdGF0aWNJbnZva2VSZXF1ZXN0KTogYXBpLkludm9rZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ3NpbnZva2UnLCBmcW4sIG1ldGhvZCwgYXJncyk7XG5cbiAgICBjb25zdCB0aSA9IHRoaXMuX3R5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZCwgZnFuKTtcblxuICAgIGlmICghdGkuc3RhdGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZnFufS4ke21ldGhvZH0gaXMgbm90IGEgc3RhdGljIG1ldGhvZGApO1xuICAgIH1cblxuICAgIC8vIHZlcmlmeSB0aGlzIGlzIG5vdCBhbiBhc3luYyBtZXRob2RcbiAgICBpZiAodGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IGlzIGFuIGFzeW5jIG1ldGhvZCwgdXNlIFwiYmVnaW5cIiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5fZmluZFN5bWJvbChmcW4pO1xuICAgIGNvbnN0IGZuID0gcHJvdG90eXBlW21ldGhvZF0gYXMgKC4uLnBhcmFtczogYW55W10pID0+IGFueTtcblxuICAgIGNvbnN0IHJldCA9IHRoaXMuX2Vuc3VyZVN5bmMoYG1ldGhvZCAnJHtmcW59LiR7bWV0aG9kfSdgLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICAgIGZuLmFwcGx5KHByb3RvdHlwZSwgdGhpcy5fdG9TYW5kYm94VmFsdWVzKGFyZ3MsIHRpLnBhcmFtZXRlcnMpKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kZWJ1ZygnbWV0aG9kIHJldHVybmVkOicsIHJldCk7XG4gICAgcmV0dXJuIHsgcmVzdWx0OiB0aGlzLl9mcm9tU2FuZGJveChyZXQsIHRpLnJldHVybnMgPz8gJ3ZvaWQnKSB9O1xuICB9XG5cbiAgcHVibGljIGJlZ2luKHJlcTogYXBpLkJlZ2luUmVxdWVzdCk6IGFwaS5CZWdpblJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgbWV0aG9kIH0gPSByZXE7XG4gICAgY29uc3QgYXJncyA9IHJlcS5hcmdzID8/IFtdO1xuXG4gICAgdGhpcy5fZGVidWcoJ2JlZ2luJywgb2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgaWYgKHRoaXMuc3luY0luUHJvZ3Jlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBpbnZva2UgYXN5bmMgbWV0aG9kICcke3JlcS5vYmpyZWZbVE9LRU5fUkVGXX0uJHtyZXEubWV0aG9kfScgd2hpbGUgc3luYyAke3RoaXMuc3luY0luUHJvZ3Jlc3N9IGlzIGJlaW5nIHByb2Nlc3NlZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGksIG9iaiwgZm4gfSA9IHRoaXMuX2ZpbmRJbnZva2VUYXJnZXQob2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgaW5kZWVkIGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICghdGkuYXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kICR7bWV0aG9kfSBpcyBleHBlY3RlZCB0byBiZSBhbiBhc3luYyBtZXRob2RgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fd3JhcFNhbmRib3hDb2RlKCgpID0+XG4gICAgICBmbi5hcHBseShvYmosIHRoaXMuX3RvU2FuZGJveFZhbHVlcyhhcmdzLCB0aS5wYXJhbWV0ZXJzKSksXG4gICAgKSBhcyBQcm9taXNlPGFueT47XG5cbiAgICAvLyBzaW5jZSB3ZSBhcmUgcGxhbm5pbmcgdG8gcmVzb2x2ZSB0aGlzIHByb21pc2UgaW4gYSBkaWZmZXJlbnQgc2NvcGVcbiAgICAvLyB3ZSBuZWVkIHRvIGhhbmRsZSByZWplY3Rpb25zIGhlcmUgWzFdXG4gICAgLy8gWzFdOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDkyMDE3OS9zaG91bGQtaS1yZWZyYWluLWZyb20taGFuZGxpbmctcHJvbWlzZS1yZWplY3Rpb24tYXN5bmNocm9ub3VzbHkvNDA5MjE1MDVcbiAgICBwcm9taXNlLmNhdGNoKChfKSA9PiB1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgcHJpZCA9IHRoaXMuX21ha2VwcmlkKCk7XG4gICAgdGhpcy5wcm9taXNlc1twcmlkXSA9IHtcbiAgICAgIHByb21pc2UsXG4gICAgICBtZXRob2Q6IHRpLFxuICAgIH07XG5cbiAgICByZXR1cm4geyBwcm9taXNlaWQ6IHByaWQgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbmQocmVxOiBhcGkuRW5kUmVxdWVzdCk6IFByb21pc2U8YXBpLkVuZFJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyBwcm9taXNlaWQgfSA9IHJlcTtcblxuICAgIHRoaXMuX2RlYnVnKCdlbmQnLCBwcm9taXNlaWQpO1xuXG4gICAgY29uc3QgeyBwcm9taXNlLCBtZXRob2QgfSA9IHRoaXMucHJvbWlzZXNbcHJvbWlzZWlkXTtcbiAgICBpZiAocHJvbWlzZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHByb21pc2Ugd2l0aCBJRDogJHtwcm9taXNlaWR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgIHRoaXMuX2RlYnVnKCdwcm9taXNlIHJlc3VsdDonLCByZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdwcm9taXNlIGVycm9yOicsIGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMuX2Zyb21TYW5kYm94KHJlc3VsdCwgbWV0aG9kLnJldHVybnMgPz8gJ3ZvaWQnKSB9O1xuICB9XG5cbiAgcHVibGljIGNhbGxiYWNrcyhfcmVxPzogYXBpLkNhbGxiYWNrc1JlcXVlc3QpOiBhcGkuQ2FsbGJhY2tzUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdjYWxsYmFja3MnKTtcbiAgICBjb25zdCByZXQgPSBPYmplY3Qua2V5cyh0aGlzLmNicykubWFwKChjYmlkKSA9PiB7XG4gICAgICBjb25zdCBjYiA9IHRoaXMuY2JzW2NiaWRdO1xuICAgICAgdGhpcy53YWl0aW5nW2NiaWRdID0gY2I7IC8vIG1vdmUgdG8gd2FpdGluZ1xuICAgICAgY29uc3QgY2FsbGJhY2s6IGFwaS5DYWxsYmFjayA9IHtcbiAgICAgICAgY2JpZCxcbiAgICAgICAgY29va2llOiBjYi5vdmVycmlkZS5jb29raWUsXG4gICAgICAgIGludm9rZToge1xuICAgICAgICAgIG9ianJlZjogY2Iub2JqcmVmLFxuICAgICAgICAgIG1ldGhvZDogY2Iub3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICAgIGFyZ3M6IGNiLmFyZ3MsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH0pO1xuXG4gICAgLy8gbW92ZSBhbGwgY2FsbGJhY2tzIHRvIHRoZSB3YWl0IHF1ZXVlIGFuZCBjbGVhbiB0aGUgY2FsbGJhY2sgcXVldWUuXG4gICAgdGhpcy5jYnMgPSB7fTtcbiAgICByZXR1cm4geyBjYWxsYmFja3M6IHJldCB9O1xuICB9XG5cbiAgcHVibGljIGNvbXBsZXRlKHJlcTogYXBpLkNvbXBsZXRlUmVxdWVzdCk6IGFwaS5Db21wbGV0ZVJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGNiaWQsIGVyciwgcmVzdWx0IH0gPSByZXE7XG5cbiAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGUnLCBjYmlkLCBlcnIsIHJlc3VsdCk7XG5cbiAgICBpZiAoIShjYmlkIGluIHRoaXMud2FpdGluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FsbGJhY2sgJHtjYmlkfSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYiA9IHRoaXMud2FpdGluZ1tjYmlkXTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGVkIHdpdGggZXJyb3I6JywgZXJyKTtcbiAgICAgIGNiLmZhaWwobmV3IEVycm9yKGVycikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzYW5kb3hSZXN1bHQgPSB0aGlzLl90b1NhbmRib3goXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgY2IuZXhwZWN0ZWRSZXR1cm5UeXBlID8/ICd2b2lkJyxcbiAgICAgICk7XG4gICAgICB0aGlzLl9kZWJ1ZygnY29tcGxldGVkIHdpdGggcmVzdWx0OicsIHNhbmRveFJlc3VsdCk7XG4gICAgICBjYi5zdWNjZWVkKHNhbmRveFJlc3VsdCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMud2FpdGluZ1tjYmlkXTtcblxuICAgIHJldHVybiB7IGNiaWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBuYW1lcyBmb3IgYSBqc2lpIG1vZHVsZS5cbiAgICogQHBhcmFtIGFzc2VtYmx5TmFtZSBUaGUgbmFtZSBvZiB0aGUganNpaSBtb2R1bGUgKGkuZS4ganNpaSRqc2lpX2NhbGN1bGF0b3JfbGliJClcbiAgICovXG4gIHB1YmxpYyBuYW1pbmcocmVxOiBhcGkuTmFtaW5nUmVxdWVzdCk6IGFwaS5OYW1pbmdSZXNwb25zZSB7XG4gICAgY29uc3QgYXNzZW1ibHlOYW1lID0gcmVxLmFzc2VtYmx5O1xuXG4gICAgdGhpcy5fZGVidWcoJ25hbWluZycsIGFzc2VtYmx5TmFtZSk7XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZSk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGFzc2VtYmx5Lm1ldGFkYXRhLnRhcmdldHM7XG4gICAgaWYgKCF0YXJnZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgLSBcInRhcmdldHNcIiBmb3IgJHthc3NlbWJseU5hbWV9IGlzIG1pc3NpbmchYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbmFtaW5nOiB0YXJnZXRzIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdHMoX3JlcT86IGFwaS5TdGF0c1JlcXVlc3QpOiBhcGkuU3RhdHNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9iamVjdENvdW50OiB0aGlzLm9iamVjdHMuY291bnQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEFzc2VtYmx5KGFzc206IEFzc2VtYmx5KSB7XG4gICAgdGhpcy5hc3NlbWJsaWVzW2Fzc20ubWV0YWRhdGEubmFtZV0gPSBhc3NtO1xuXG4gICAgLy8gYWRkIHRoZSBfX2pzaWlfXy5mcW4gcHJvcGVydHkgb24gZXZlcnkgY29uc3RydWN0b3IuIHRoaXMgYWxsb3dzXG4gICAgLy8gdHJhdmVyc2luZyBiZXR3ZWVuIHRoZSBqYXZhc2NyaXB0IGFuZCBqc2lpIHdvcmxkcyBnaXZlbiBhbnkgb2JqZWN0LlxuICAgIGZvciAoY29uc3QgZnFuIG9mIE9iamVjdC5rZXlzKGFzc20ubWV0YWRhdGEudHlwZXMgPz8ge30pKSB7XG4gICAgICBjb25zdCB0eXBlZGVmID0gYXNzbS5tZXRhZGF0YS50eXBlcyFbZnFuXTtcbiAgICAgIHN3aXRjaCAodHlwZWRlZi5raW5kKSB7XG4gICAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5JbnRlcmZhY2U6XG4gICAgICAgICAgY29udGludWU7IC8vIGludGVyZmFjZXMgZG9uJ3QgcmVhbGx5IGV4aXN0XG4gICAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkVudW06XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG4gICAgICAgICAgdGFnSnNpaUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLCBmcW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgdGhlIGphdmFzY3JpcHQgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEganNpaSBGUU4uXG4gIHByaXZhdGUgX2ZpbmRDdG9yKFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdLFxuICApOiB7IGN0b3I6IGFueTsgcGFyYW1ldGVycz86IHNwZWMuUGFyYW1ldGVyW10gfSB7XG4gICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICByZXR1cm4geyBjdG9yOiBPYmplY3QgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlaW5mbyA9IHRoaXMuX3R5cGVJbmZvRm9yRnFuKGZxbik7XG5cbiAgICBzd2l0Y2ggKHR5cGVpbmZvLmtpbmQpIHtcbiAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgY29uc3QgY2xhc3NUeXBlID0gdHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTWV0aG9kQXJndW1lbnRzKGNsYXNzVHlwZS5pbml0aWFsaXplciwgYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3RvcjogdGhpcy5fZmluZFN5bWJvbChmcW4pLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IGNsYXNzVHlwZS5pbml0aWFsaXplciAmJiBjbGFzc1R5cGUuaW5pdGlhbGl6ZXIucGFyYW1ldGVycyxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZTpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY3JlYXRlIGFuIG9iamVjdCB3aXRoIGFuIEZRTiBvZiBhbiBpbnRlcmZhY2U6ICR7ZnFufWAsXG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBGUU4ga2luZDogJHtmcW59YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFja2FnZURpcihwa2duYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pbnN0YWxsRGlyKSB7XG4gICAgICB0aGlzLmluc3RhbGxEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdqc2lpLWtlcm5lbC0nKSk7XG4gICAgICBmcy5ta2RpcnBTeW5jKHBhdGguam9pbih0aGlzLmluc3RhbGxEaXIsICdub2RlX21vZHVsZXMnKSk7XG4gICAgICB0aGlzLl9kZWJ1ZygnY3JlYXRpbmcganNpaS1rZXJuZWwgbW9kdWxlcyB3b3JrZGlyOicsIHRoaXMuaW5zdGFsbERpcik7XG5cbiAgICAgIG9uRXhpdC5yZW1vdmVTeW5jKHRoaXMuaW5zdGFsbERpcik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5pbnN0YWxsRGlyLCAnbm9kZV9tb2R1bGVzJywgcGtnbmFtZSk7XG4gIH1cblxuICAvLyBwcmVmaXhlZCB3aXRoIF8gdG8gYWxsb3cgY2FsbGluZyB0aGlzIG1ldGhvZCBpbnRlcm5hbGx5IHdpdGhvdXRcbiAgLy8gZ2V0dGluZyBpdCByZWNvcmRlZCBmb3IgdGVzdGluZy5cbiAgcHJpdmF0ZSBfY3JlYXRlKHJlcTogYXBpLkNyZWF0ZVJlcXVlc3QpOiBhcGkuQ3JlYXRlUmVzcG9uc2Uge1xuICAgIHRoaXMuX2RlYnVnKCdjcmVhdGUnLCByZXEpO1xuICAgIGNvbnN0IHsgZnFuLCBpbnRlcmZhY2VzLCBvdmVycmlkZXMgfSA9IHJlcTtcblxuICAgIGNvbnN0IHJlcXVlc3RBcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICBjb25zdCBjdG9yUmVzdWx0ID0gdGhpcy5fZmluZEN0b3IoZnFuLCByZXF1ZXN0QXJncyk7XG4gICAgY29uc3QgY3RvciA9IGN0b3JSZXN1bHQuY3RvcjtcbiAgICBjb25zdCBvYmogPSB0aGlzLl93cmFwU2FuZGJveENvZGUoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgY3RvciguLi50aGlzLl90b1NhbmRib3hWYWx1ZXMocmVxdWVzdEFyZ3MsIGN0b3JSZXN1bHQucGFyYW1ldGVycykpLFxuICAgICk7XG4gICAgY29uc3Qgb2JqcmVmID0gdGhpcy5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KG9iaiwgZnFuLCByZXEuaW50ZXJmYWNlcyA/PyBbXSk7XG5cbiAgICAvLyBvdmVycmlkZXM6IGZvciBlYWNoIG9uZSBvZiB0aGUgb3ZlcnJpZGUgbWV0aG9kIG5hbWVzLCBpbnN0YWxscyBhXG4gICAgLy8gbWV0aG9kIG9uIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSByZW1vdGUgXCJyZXZlcnNlIHByb3h5XCIuXG5cbiAgICBpZiAob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLl9kZWJ1Zygnb3ZlcnJpZGVzJywgb3ZlcnJpZGVzKTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGVUeXBlRXJyb3JNZXNzYWdlID1cbiAgICAgICAgJ092ZXJyaWRlIGNhbiBlaXRoZXIgYmUgXCJtZXRob2RcIiBvciBcInByb3BlcnR5XCInO1xuICAgICAgY29uc3QgbWV0aG9kcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIG92ZXJyaWRlcykge1xuICAgICAgICBpZiAoYXBpLmlzTWV0aG9kT3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgaWYgKGFwaS5pc1Byb3BlcnR5T3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iob3ZlcnJpZGVUeXBlRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZHMuaGFzKG92ZXJyaWRlLm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYER1cGxpY2F0ZSBvdmVycmlkZSBmb3IgbWV0aG9kICcke292ZXJyaWRlLm1ldGhvZH0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1ldGhvZHMuYWRkKG92ZXJyaWRlLm1ldGhvZCk7XG5cbiAgICAgICAgICB0aGlzLl9hcHBseU1ldGhvZE92ZXJyaWRlKG9iaiwgb2JqcmVmLCBmcW4sIGludGVyZmFjZXMsIG92ZXJyaWRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcGkuaXNQcm9wZXJ0eU92ZXJyaWRlKG92ZXJyaWRlKSkge1xuICAgICAgICAgIGlmIChhcGkuaXNNZXRob2RPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXMob3ZlcnJpZGUucHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgYER1cGxpY2F0ZSBvdmVycmlkZSBmb3IgcHJvcGVydHkgJyR7b3ZlcnJpZGUucHJvcGVydHl9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wZXJ0aWVzLmFkZChvdmVycmlkZS5wcm9wZXJ0eSk7XG5cbiAgICAgICAgICB0aGlzLl9hcHBseVByb3BlcnR5T3ZlcnJpZGUob2JqLCBvYmpyZWYsIGZxbiwgaW50ZXJmYWNlcywgb3ZlcnJpZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ianJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFN1cGVyUHJvcGVydHlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgJGpzaWkkc3VwZXIkJHtuYW1lfSRgO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlQcm9wZXJ0eU92ZXJyaWRlKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICB0eXBlRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IGFwaS5Qcm9wZXJ0eU92ZXJyaWRlLFxuICApIHtcbiAgICAvLyBlcnJvciBpZiB3ZSBjYW4gZmluZCBhIG1ldGhvZCB3aXRoIHRoaXMgbmFtZVxuICAgIGlmICh0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChvdmVycmlkZS5wcm9wZXJ0eSwgdHlwZUZxbiwgaW50ZXJmYWNlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyeWluZyB0byBvdmVycmlkZSBtZXRob2QgJyR7b3ZlcnJpZGUucHJvcGVydHl9JyBhcyBhIHByb3BlcnR5YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHByb3BJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICAgIG92ZXJyaWRlLnByb3BlcnR5LFxuICAgICAgdHlwZUZxbixcbiAgICAgIGludGVyZmFjZXMsXG4gICAgKTtcbiAgICAvLyBpZiB0aGlzIGlzIGEgcHJpdmF0ZSBwcm9wZXJ0eSAoaS5lLiBkb2Vzbid0IGhhdmUgYHByb3BJbmZvYCB0aGUgb2JqZWN0IGhhcyBhIGtleSlcbiAgICBpZiAoIXByb3BJbmZvICYmIG92ZXJyaWRlLnByb3BlcnR5IGluIG9iaikge1xuICAgICAgdGhpcy5fZGVidWcoYFNraXBwaW5nIG92ZXJyaWRlIG9mIHByaXZhdGUgcHJvcGVydHkgJHtvdmVycmlkZS5wcm9wZXJ0eX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BJbmZvKSB7XG4gICAgICAvLyBXZSd2ZSBvdmVycmlkaW5nIGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IHdlIGhhdmUgTk8gdHlwZSBpbmZvcm1hdGlvbiBvbiAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBhbiBhbm9ueW1vdXMgb2JqZWN0KS5cbiAgICAgIC8vIFByZXRlbmQgaXQncyAncHJvcDogYW55JztcbiAgICAgIC8vXG4gICAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gYmV0dGVyIHR5cGUgY2hlY2tpbmcgZHVyaW5nIHRoZSBjb252ZXJzaW9uIGlmIEpTSUkgY2xpZW50c1xuICAgICAgLy8gd291bGQgdGVsbCB1cyB0aGUgaW50ZW5kZWQgaW50ZXJmYWNlIHR5cGUuXG4gICAgICBwcm9wSW5mbyA9IHtcbiAgICAgICAgbmFtZTogb3ZlcnJpZGUucHJvcGVydHksXG4gICAgICAgIHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmaW5lT3ZlcnJpZGVuUHJvcGVydHkob2JqLCBvYmpyZWYsIG92ZXJyaWRlLCBwcm9wSW5mbyk7XG4gIH1cblxuICBwcml2YXRlIF9kZWZpbmVPdmVycmlkZW5Qcm9wZXJ0eShcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgb3ZlcnJpZGU6IGFwaS5Qcm9wZXJ0eU92ZXJyaWRlLFxuICAgIHByb3BJbmZvOiBzcGVjLlByb3BlcnR5LFxuICApIHtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBvdmVycmlkZS5wcm9wZXJ0eTtcblxuICAgIHRoaXMuX2RlYnVnKCdhcHBseSBvdmVycmlkZScsIHByb3BlcnR5TmFtZSk7XG5cbiAgICAvLyBzYXZlIHRoZSBvbGQgcHJvcGVydHkgdW5kZXIgJGpzaWkkc3VwZXIkPHByb3A+JCBzbyB0aGF0IHByb3BlcnR5IG92ZXJyaWRlc1xuICAgIC8vIGNhbiBzdGlsbCBhY2Nlc3MgaXQgdmlhIGBzdXBlci48cHJvcD5gLlxuICAgIGNvbnN0IHByZXYgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpID8/IHtcbiAgICAgIHZhbHVlOiBvYmpbcHJvcGVydHlOYW1lXSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldkVudW1lcmFibGUgPSBwcmV2LmVudW1lcmFibGU7XG4gICAgcHJldi5lbnVtZXJhYmxlID0gZmFsc2U7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgdGhpcy5fZ2V0U3VwZXJQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSwgcHJldik7XG5cbiAgICAvLyB3ZSBhZGQgY2FsbGJhY2tzIGZvciBib3RoICdnZXQnIGFuZCAnc2V0JywgZXZlbiBpZiB0aGUgcHJvcGVydHlcbiAgICAvLyBpcyByZWFkb25seS4gdGhpcyBpcyBmaW5lIGJlY2F1c2UgaWYgeW91IHRyeSB0byBzZXQoKSBhIHJlYWRvbmx5XG4gICAgLy8gcHJvcGVydHksIGl0IHdpbGwgZmFpbC5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgIGVudW1lcmFibGU6IHByZXZFbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiBwcmV2LmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9kZWJ1ZygndmlydHVhbCBnZXQnLCBvYmpyZWYsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWxsYmFja0hhbmRsZXIoe1xuICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICAgIGNiaWQ6IHRoaXMuX21ha2VjYmlkKCksXG4gICAgICAgICAgZ2V0OiB7IG9ianJlZiwgcHJvcGVydHk6IHByb3BlcnR5TmFtZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWcoJ2NhbGxiYWNrIHJldHVybmVkJywgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvU2FuZGJveChyZXN1bHQsIHByb3BJbmZvKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCd2aXJ0dWFsIHNldCcsIG9ianJlZiwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIG9ianJlZixcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fZnJvbVNhbmRib3godmFsdWUsIHByb3BJbmZvKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICBvYmo6IGFueSxcbiAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgICk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBkaXJlY3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIGlmIChkaXJlY3QgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZGlyZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgIGlmIChwcm90byA9PSBudWxsICYmIHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgIC8vIFdlIHJlYWNoZWQgT2JqZWN0IG9yIHRoZSBwcm90b3R5cGUgY2hhaW4gcm9vdCwgYWxsIGhvcGUgaXMgbG9zdCFcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlNZXRob2RPdmVycmlkZShcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgdHlwZUZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIG92ZXJyaWRlOiBhcGkuTWV0aG9kT3ZlcnJpZGUsXG4gICkge1xuICAgIC8vIGVycm9yIGlmIHdlIGNhbiBmaW5kIGEgcHJvcGVydHkgd2l0aCB0aGlzIG5hbWVcbiAgICBpZiAodGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShvdmVycmlkZS5tZXRob2QsIHR5cGVGcW4sIGludGVyZmFjZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcnlpbmcgdG8gb3ZlcnJpZGUgcHJvcGVydHkgJyR7b3ZlcnJpZGUubWV0aG9kfScgYXMgYSBtZXRob2RgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbWV0aG9kSW5mbyA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKFxuICAgICAgb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgdHlwZUZxbixcbiAgICAgIGludGVyZmFjZXMsXG4gICAgKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSBwcml2YXRlIG1ldGhvZCAoZG9lc24ndCBoYXZlIG1ldGhvZEluZm8sIGtleSByZXNvbHZlcyBvbiB0aGUgb2JqZWN0KSwgd2VcbiAgICAvLyBhcmUgZ29pbmcgdG8gc2tpcCB0aGUgb3ZlcnJpZGUuXG4gICAgaWYgKCFtZXRob2RJbmZvICYmIG9ialtvdmVycmlkZS5tZXRob2RdKSB7XG4gICAgICB0aGlzLl9kZWJ1ZyhgU2tpcHBpbmcgb3ZlcnJpZGUgb2YgcHJpdmF0ZSBtZXRob2QgJHtvdmVycmlkZS5tZXRob2R9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFtZXRob2RJbmZvKSB7XG4gICAgICAvLyBXZSd2ZSBvdmVycmlkaW5nIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3ZSBoYXZlIE5PIHR5cGUgaW5mb3JtYXRpb24gb24gKHByb2JhYmx5XG4gICAgICAvLyBiZWNhdXNlIGl0J3MgYW4gYW5vbnltb3VzIG9iamVjdCkuXG4gICAgICAvLyBQcmV0ZW5kIGl0J3MgYW4gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbiAgICAgIG1ldGhvZEluZm8gPSB7XG4gICAgICAgIG5hbWU6IG92ZXJyaWRlLm1ldGhvZCxcbiAgICAgICAgcmV0dXJuczogeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSxcbiAgICAgICAgcGFyYW1ldGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdhcmdzJyxcbiAgICAgICAgICAgIHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgIHZhcmlhZGljOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHZhcmlhZGljOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZpbmVPdmVycmlkZW5NZXRob2Qob2JqLCBvYmpyZWYsIG92ZXJyaWRlLCBtZXRob2RJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmluZU92ZXJyaWRlbk1ldGhvZChcbiAgICBvYmo6IGFueSxcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZSxcbiAgICBtZXRob2RJbmZvOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IG92ZXJyaWRlLm1ldGhvZDtcblxuICAgIGlmIChtZXRob2RJbmZvLmFzeW5jKSB7XG4gICAgICAvLyBhc3luYyBtZXRob2Qgb3ZlcnJpZGVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6ICguLi5tZXRob2RBcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCdpbnZva2UgYXN5bmMgbWV0aG9kIG92ZXJyaWRlJywgb3ZlcnJpZGUpO1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl90b1NhbmRib3hWYWx1ZXMobWV0aG9kQXJncywgbWV0aG9kSW5mby5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pigoc3VjY2VlZCwgZmFpbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2JpZCA9IHRoaXMuX21ha2VjYmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnYWRkaW5nIGNhbGxiYWNrIHRvIHF1ZXVlJywgY2JpZCk7XG4gICAgICAgICAgICB0aGlzLmNic1tjYmlkXSA9IHtcbiAgICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgICBvdmVycmlkZSxcbiAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgZXhwZWN0ZWRSZXR1cm5UeXBlOiBtZXRob2RJbmZvLnJldHVybnMgPz8gJ3ZvaWQnLFxuICAgICAgICAgICAgICBzdWNjZWVkLFxuICAgICAgICAgICAgICBmYWlsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzeW5jIG1ldGhvZCBvdmVycmlkZSAobWV0aG9kIGluZm8gaXMgbm90IHJlcXVpcmVkKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKC4uLm1ldGhvZEFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoXG4gICAgICAgICAgICAnaW52b2tlIHN5bmMgbWV0aG9kIG92ZXJyaWRlJyxcbiAgICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgICAgJ2FyZ3MnLFxuICAgICAgICAgICAgbWV0aG9kQXJncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFdlIHNob3VsZCBiZSB2YWxpZGF0aW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIGFjY29yZGluZyB0byB0aGVcbiAgICAgICAgICAvLyBkZWNsYXJlZCBwYXJhbWV0ZXJzIGhlcmUsIGJ1dCBsZXQncyBqdXN0IGFzc3VtZSB0aGUgSlNJSSBydW50aW1lIG9uIHRoZVxuICAgICAgICAgIC8vIG90aGVyIGVuZCBoYXMgZG9uZSBpdHMgd29yay5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgICAgIGNiaWQ6IHRoaXMuX21ha2VjYmlkKCksXG4gICAgICAgICAgICBpbnZva2U6IHtcbiAgICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIGFyZ3M6IHRoaXMuX2Zyb21TYW5kYm94VmFsdWVzKG1ldGhvZEFyZ3MsIG1ldGhvZEluZm8ucGFyYW1ldGVycyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCdSZXN1bHQnLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiB0aGlzLl90b1NhbmRib3gocmVzdWx0LCBtZXRob2RJbmZvLnJldHVybnMgPz8gJ3ZvaWQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRJbnZva2VUYXJnZXQoXG4gICAgb2JqcmVmOiBhcGkuT2JqUmVmLFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBhcmdzOiBhbnlbXSxcbiAgKSB7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JNZXRob2QobWV0aG9kTmFtZSwgZnFuLCBpbnRlcmZhY2VzKTtcbiAgICB0aGlzLl92YWxpZGF0ZU1ldGhvZEFyZ3VtZW50cyh0aSwgYXJncyk7XG5cbiAgICAvLyBhbHdheXMgZmlyc3QgbG9vayB1cCB0aGUgbWV0aG9kIGluIHRoZSBwcm90b3R5cGUuIHRoaXMgcHJhY3RpY2FsbHkgYnlwYXNzZXNcbiAgICAvLyBhbnkgbWV0aG9kcyBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3NlcyAod2hpY2ggYXJlIGJ5IGRlZmluaXRpb24gbmF0aXZlXG4gICAgLy8gbWV0aG9kcykuIHRoaXMgc2VydmVzIHRvIGFsbG93IG5hdGl2ZSBjYWxsIHRvIGludm9rZSBcInN1cGVyLm1ldGhvZCgpXCIgd2hlblxuICAgIC8vIG92ZXJyaWRpbmcgdGhlIG1ldGhvZC5cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCB0aGUgbWV0aG9kIG9uIHRoZSBwcm90b3R5cGUsIGl0IGNvdWxkIGJlIGEgbGl0ZXJhbCBvYmplY3RcbiAgICAvLyB0aGF0IGltcGxlbWVudHMgYW4gaW50ZXJmYWNlLCBzbyB3ZSBsb29rIGlmIHdlIGhhdmUgdGhlIG1ldGhvZCBvbiB0aGUgb2JqZWN0XG4gICAgLy8gaXRzZWxmLiBpZiB3ZSBkbywgd2UgaW52b2tlIGl0LlxuICAgIGxldCBmbiA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXTtcbiAgICBpZiAoIWZuKSB7XG4gICAgICBmbiA9IGluc3RhbmNlW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKCFmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kICR7bWV0aG9kTmFtZX0gb24gb2JqZWN0YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHRpLCBvYmo6IGluc3RhbmNlLCBmbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsaWRhdGVNZXRob2RBcmd1bWVudHMoXG4gICAgbWV0aG9kOiBzcGVjLkNhbGxhYmxlIHwgdW5kZWZpbmVkLFxuICAgIGFyZ3M6IGFueVtdLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IHNwZWMuUGFyYW1ldGVyW10gPSBtZXRob2Q/LnBhcmFtZXRlcnMgPz8gW107XG5cbiAgICAvLyBlcnJvciBpZiBhcmdzID4gcGFyYW1zXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gcGFyYW1zLmxlbmd0aCAmJiAhKG1ldGhvZCAmJiBtZXRob2QudmFyaWFkaWMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUb28gbWFueSBhcmd1bWVudHMgKG1ldGhvZCBhY2NlcHRzICR7cGFyYW1zLmxlbmd0aH0gcGFyYW1ldGVycywgZ290ICR7YXJncy5sZW5ndGh9IGFyZ3VtZW50cylgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbXNbaV07XG4gICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuXG4gICAgICBpZiAocGFyYW0udmFyaWFkaWMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPD0gaSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBObyB2YXJhcmcgd2FzIHByb3ZpZGVkXG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgcGFyYW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKCFwYXJhbS5vcHRpb25hbCAmJiBwYXJhbXNbal0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVW5leHBlY3RlZCAndW5kZWZpbmVkJyB2YWx1ZSBhdCBpbmRleCAke1xuICAgICAgICAgICAgICAgIGogLSBpXG4gICAgICAgICAgICAgIH0gb2YgdmFyaWFkaWMgYXJndW1lbnQgJyR7XG4gICAgICAgICAgICAgICAgcGFyYW0ubmFtZVxuICAgICAgICAgICAgICB9JyBvZiB0eXBlICcke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHBhcmFtLnR5cGUpfSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXBhcmFtLm9wdGlvbmFsICYmIGFyZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm90IGVub3VnaCBhcmd1bWVudHMuIE1pc3NpbmcgYXJndW1lbnQgZm9yIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgJyR7XG4gICAgICAgICAgICBwYXJhbS5uYW1lXG4gICAgICAgICAgfScgb2YgdHlwZSAnJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShwYXJhbS50eXBlKX0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hc3NlbWJseUZvcihhc3NlbWJseU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5hc3NlbWJsaWVzW2Fzc2VtYmx5TmFtZV07XG4gICAgaWYgKCFhc3NlbWJseSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhc3NlbWJseTogJHthc3NlbWJseU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBhc3NlbWJseTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRTeW1ib2woZnFuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBbYXNzZW1ibHlOYW1lLCAuLi5wYXJ0c10gPSBmcW4uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZSk7XG5cbiAgICBsZXQgY3VyciA9IGFzc2VtYmx5LmNsb3N1cmU7XG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjdXJyID0gY3VycltuYW1lXTtcbiAgICB9XG4gICAgaWYgKCFjdXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHN5bWJvbCAke2Zxbn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnI7XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0ZvckZxbihmcW46IHN0cmluZyk6IHNwZWMuVHlwZSB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBjb21wb25lbnRzWzBdO1xuXG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLmFzc2VtYmxpZXNbbW9kdWxlTmFtZV07XG4gICAgaWYgKCFhc3NlbWJseSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgJyR7bW9kdWxlTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVzID0gYXNzZW1ibHkubWV0YWRhdGEudHlwZXMgPz8ge307XG4gICAgY29uc3QgZnFuSW5mbyA9IHR5cGVzW2Zxbl07XG4gICAgaWYgKCFmcW5JbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJyR7ZnFufScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZxbkluZm87XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0Zvck1ldGhvZChcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBzcGVjLk1ldGhvZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBmcW4sIGludGVyZmFjZXMpO1xuICAgIGlmICghdGkpIHtcbiAgICAgIGNvbnN0IGFkZGVuZHVtID1cbiAgICAgICAgaW50ZXJmYWNlcyAmJiBpbnRlcmZhY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAgb3IgaW50ZXJmYWNlKHMpICR7aW50ZXJmYWNlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2xhc3MgJHtmcW59JHthZGRlbmR1bX0gZG9lc24ndCBoYXZlIGEgbWV0aG9kICcke21ldGhvZE5hbWV9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGk7XG4gIH1cblxuICBwcml2YXRlIF90cnlUeXBlSW5mb0Zvck1ldGhvZChcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgY2xhc3NGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSA9IFtdLFxuICApOiBzcGVjLk1ldGhvZCB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBmcW4gb2YgW2NsYXNzRnFuLCAuLi5pbnRlcmZhY2VzXSkge1xuICAgICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZWluZm8gPSB0aGlzLl90eXBlSW5mb0ZvckZxbihmcW4pO1xuXG4gICAgICBjb25zdCBtZXRob2RzID1cbiAgICAgICAgKHR5cGVpbmZvIGFzIHNwZWMuQ2xhc3NUeXBlIHwgc3BlYy5JbnRlcmZhY2VUeXBlKS5tZXRob2RzID8/IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbWV0aG9kcykge1xuICAgICAgICBpZiAobS5uYW1lID09PSBtZXRob2ROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmVjdXJzaW9uIHRvIHBhcmVudCB0eXBlIChpZiBleGlzdHMpXG4gICAgICBjb25zdCBiYXNlcyA9IFtcbiAgICAgICAgKHR5cGVpbmZvIGFzIHNwZWMuQ2xhc3NUeXBlKS5iYXNlLFxuICAgICAgICAuLi4oKHR5cGVpbmZvIGFzIHNwZWMuSW50ZXJmYWNlVHlwZSkuaW50ZXJmYWNlcyA/PyBbXSksXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBiYXNlIG9mIGJhc2VzKSB7XG4gICAgICAgIGlmICghYmFzZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl90cnlUeXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBiYXNlKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkoXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBjbGFzc0Zxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHNwZWMuUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgZnFuIG9mIFtjbGFzc0ZxbiwgLi4uaW50ZXJmYWNlc10pIHtcbiAgICAgIGlmIChmcW4gPT09IHdpcmUuRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgICAgbGV0IHByb3BlcnRpZXM7XG4gICAgICBsZXQgYmFzZXM7XG5cbiAgICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKHR5cGVJbmZvKSkge1xuICAgICAgICBjb25zdCBjbGFzc1R5cGVJbmZvID0gdHlwZUluZm8gYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICAgIHByb3BlcnRpZXMgPSBjbGFzc1R5cGVJbmZvLnByb3BlcnRpZXM7XG4gICAgICAgIGJhc2VzID0gY2xhc3NUeXBlSW5mby5iYXNlID8gW2NsYXNzVHlwZUluZm8uYmFzZV0gOiBbXTtcbiAgICAgIH0gZWxzZSBpZiAoc3BlYy5pc0ludGVyZmFjZVR5cGUodHlwZUluZm8pKSB7XG4gICAgICAgIGNvbnN0IGludGVyZmFjZVR5cGVJbmZvID0gdHlwZUluZm8gYXMgc3BlYy5JbnRlcmZhY2VUeXBlO1xuICAgICAgICBwcm9wZXJ0aWVzID0gaW50ZXJmYWNlVHlwZUluZm8ucHJvcGVydGllcztcbiAgICAgICAgYmFzZXMgPSBpbnRlcmZhY2VUeXBlSW5mby5pbnRlcmZhY2VzID8/IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUeXBlIG9mIGtpbmQgJHt0eXBlSW5mby5raW5kfSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvcGVydGllcyA/PyBbXSkge1xuICAgICAgICBpZiAocC5uYW1lID09PSBwcm9wZXJ0eSkge1xuICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlY3Vyc2UgdG8gcGFyZW50IHR5cGUgKGlmIGV4aXN0cylcbiAgICAgIGZvciAoY29uc3QgYmFzZUZxbiBvZiBiYXNlcykge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBiYXNlRnFuKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM/OiBzdHJpbmdbXSxcbiAgKTogc3BlYy5Qcm9wZXJ0eSB7XG4gICAgY29uc3QgdHlwZUluZm8gPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4sIGludGVyZmFjZXMpO1xuICAgIGlmICghdHlwZUluZm8pIHtcbiAgICAgIGNvbnN0IGFkZGVuZHVtID1cbiAgICAgICAgaW50ZXJmYWNlcyAmJiBpbnRlcmZhY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAgb3IgaW50ZXJmYWNlKHMpICR7aW50ZXJmYWNlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHlwZSAke2Zxbn0ke2FkZGVuZHVtfSBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSAnJHtwcm9wZXJ0eX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlSW5mbztcbiAgfVxuXG4gIHByaXZhdGUgX3RvU2FuZGJveCh2OiBhbnksIGV4cGVjdGVkVHlwZTogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkKTogYW55IHtcbiAgICBjb25zdCBzZXJUeXBlcyA9IHdpcmUuc2VyaWFsaXphdGlvblR5cGUoXG4gICAgICBleHBlY3RlZFR5cGUsXG4gICAgICB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ3RvU2FuZGJveCcsIHYsIEpTT04uc3RyaW5naWZ5KHNlclR5cGVzKSk7XG5cbiAgICBjb25zdCBob3N0OiB3aXJlLlNlcmlhbGl6ZXJIb3N0ID0ge1xuICAgICAgb2JqZWN0czogdGhpcy5vYmplY3RzLFxuICAgICAgZGVidWc6IHRoaXMuX2RlYnVnLmJpbmQodGhpcyksXG4gICAgICBmaW5kU3ltYm9sOiB0aGlzLl9maW5kU3ltYm9sLmJpbmQodGhpcyksXG4gICAgICBsb29rdXBUeXBlOiB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICAgcmVjdXJzZTogdGhpcy5fdG9TYW5kYm94LmJpbmQodGhpcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB7IHNlcmlhbGl6YXRpb25DbGFzcywgdHlwZVJlZiB9IG9mIHNlclR5cGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd2lyZS5TRVJJQUxJWkVSU1tzZXJpYWxpemF0aW9uQ2xhc3NdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHYsXG4gICAgICAgICAgdHlwZVJlZixcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiBubyB1bmlvbiAoOTklIGNhc2UpLCByZXRocm93IGltbWVkaWF0ZWx5IHRvIHByZXNlcnZlIHN0YWNrIHRyYWNlXG4gICAgICAgIGlmIChzZXJUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGVycm9ycy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZhbHVlIGRpZCBub3QgbWF0Y2ggYW55IHR5cGUgaW4gdW5pb246ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnJvbVNhbmRib3godjogYW55LCB0YXJnZXRUeXBlOiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHNlclR5cGVzID0gd2lyZS5zZXJpYWxpemF0aW9uVHlwZShcbiAgICAgIHRhcmdldFR5cGUsXG4gICAgICB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICk7XG4gICAgdGhpcy5fZGVidWcoJ2Zyb21TYW5kYm94JywgdiwgSlNPTi5zdHJpbmdpZnkoc2VyVHlwZXMpKTtcblxuICAgIGNvbnN0IGhvc3Q6IHdpcmUuU2VyaWFsaXplckhvc3QgPSB7XG4gICAgICBvYmplY3RzOiB0aGlzLm9iamVjdHMsXG4gICAgICBkZWJ1ZzogdGhpcy5fZGVidWcuYmluZCh0aGlzKSxcbiAgICAgIGZpbmRTeW1ib2w6IHRoaXMuX2ZpbmRTeW1ib2wuYmluZCh0aGlzKSxcbiAgICAgIGxvb2t1cFR5cGU6IHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgICByZWN1cnNlOiB0aGlzLl9mcm9tU2FuZGJveC5iaW5kKHRoaXMpLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgeyBzZXJpYWxpemF0aW9uQ2xhc3MsIHR5cGVSZWYgfSBvZiBzZXJUeXBlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdpcmUuU0VSSUFMSVpFUlNbc2VyaWFsaXphdGlvbkNsYXNzXS5zZXJpYWxpemUodiwgdHlwZVJlZiwgaG9zdCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIG5vIHVuaW9uICg5OSUgY2FzZSksIHJldGhyb3cgaW1tZWRpYXRlbHkgdG8gcHJlc2VydmUgc3RhY2sgdHJhY2VcbiAgICAgICAgaWYgKHNlclR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVmFsdWUgZGlkIG5vdCBtYXRjaCBhbnkgdHlwZSBpbiB1bmlvbjogJHtlcnJvcnMuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF90b1NhbmRib3hWYWx1ZXMoeHM6IGFueVtdLCBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSkge1xuICAgIHJldHVybiB0aGlzLl9ib3hVbmJveFBhcmFtZXRlcnMoeHMsIHBhcmFtZXRlcnMsIHRoaXMuX3RvU2FuZGJveC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zyb21TYW5kYm94VmFsdWVzKHhzOiBhbnlbXSwgcGFyYW1ldGVycz86IHNwZWMuUGFyYW1ldGVyW10pIHtcbiAgICByZXR1cm4gdGhpcy5fYm94VW5ib3hQYXJhbWV0ZXJzKFxuICAgICAgeHMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgdGhpcy5fZnJvbVNhbmRib3guYmluZCh0aGlzKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYm94VW5ib3hQYXJhbWV0ZXJzKFxuICAgIHhzOiBhbnlbXSxcbiAgICBwYXJhbWV0ZXJzOiBzcGVjLlBhcmFtZXRlcltdIHwgdW5kZWZpbmVkLFxuICAgIGJveFVuYm94OiAoeDogYW55LCB0OiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpID0+IGFueSxcbiAgKSB7XG4gICAgcGFyYW1ldGVycyA9IFsuLi4ocGFyYW1ldGVycyA/PyBbXSldO1xuICAgIGNvbnN0IHZhcmlhZGljID1cbiAgICAgIHBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhIXBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXS52YXJpYWRpYztcbiAgICAvLyBSZXBlYXQgdGhlIGxhc3QgKHZhcmlhZGljKSB0eXBlIHRvIG1hdGNoIHRoZSBudW1iZXIgb2YgYWN0dWFsIGFyZ3VtZW50c1xuICAgIHdoaWxlICh2YXJpYWRpYyAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA8IHhzLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXSk7XG4gICAgfVxuICAgIGlmICh4cy5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXJndW1lbnQgbGlzdCAoJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB4cyxcbiAgICAgICAgKX0pIG5vdCBzYW1lIHNpemUgYXMgZXhwZWN0ZWQgYXJndW1lbnQgbGlzdCAobGVuZ3RoICR7XG4gICAgICAgICAgcGFyYW1ldGVycy5sZW5ndGhcbiAgICAgICAgfSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHhzLm1hcCgoeCwgaSkgPT4gYm94VW5ib3goeCwgcGFyYW1ldGVycyFbaV0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlYnVnKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudHJhY2VFbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQGpzaWkva2VybmVsXScsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoYXQgYGZuYCBpcyBjYWxsZWQgYW5kIGRlZmVuZHMgYWdhaW5zdCBiZWdpbm5pbmcgdG8gaW52b2tlXG4gICAqIGFzeW5jIG1ldGhvZHMgdW50aWwgZm4gZmluaXNoZXMgKHN1Y2Nlc3NmdWxseSBvciBub3QpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZW5zdXJlU3luYzxUPihkZXNjOiBzdHJpbmcsIGZuOiAoKSA9PiBUKTogVCB7XG4gICAgdGhpcy5zeW5jSW5Qcm9ncmVzcyA9IGRlc2M7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgdGhpcy5zeW5jSW5Qcm9ncmVzcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maW5kUHJvcGVydHlUYXJnZXQob2JqOiBhbnksIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdXBlclByb3AgPSB0aGlzLl9nZXRTdXBlclByb3BlcnR5TmFtZShwcm9wZXJ0eSk7XG4gICAgaWYgKHN1cGVyUHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBzdXBlclByb3A7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIC8vXG4gIC8vIHR5cGUgaW5mb3JtYXRpb25cbiAgLy9cblxuICBwcml2YXRlIF9tYWtlY2JpZCgpIHtcbiAgICByZXR1cm4gYGpzaWk6OmNhbGxiYWNrOjoke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VwcmlkKCkge1xuICAgIHJldHVybiBganNpaTo6cHJvbWlzZTo6JHt0aGlzLm5leHRpZCsrfWA7XG4gIH1cblxuICBwcml2YXRlIF93cmFwU2FuZGJveENvZGU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhcmJpdHJhcnkgY29kZSBpbiBhIFZNIHNhbmRib3guXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlICAgICAgIEphdmFTY3JpcHQgY29kZSB0byBiZSBleGVjdXRlZCBpbiB0aGUgVk1cbiAgICogQHBhcmFtIHNhbmRib3ggICAgYSBWTSBjb250ZXh0IHRvIHVzZSBmb3IgcnVubmluZyB0aGUgY29kZVxuICAgKiBAcGFyYW0gc291cmNlTWFwcyBzb3VyY2UgbWFwcyB0byBiZSB1c2VkIGluIGNhc2UgYW4gZXhjZXB0aW9uIGlzIHRocm93blxuICAgKiBAcGFyYW0gZmlsZW5hbWUgICB0aGUgZmlsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIGV4ZWN1dGVkIGNvZGVcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBjb2RlXG4gICAqL1xuICBwcml2YXRlIF9leGVjdXRlKGNvZGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjcmlwdCA9IG5ldyB2bS5TY3JpcHQoY29kZSwgeyBmaWxlbmFtZSB9KTtcbiAgICByZXR1cm4gc2NyaXB0LnJ1bkluQ29udGV4dCh0aGlzLnNhbmRib3gsIHsgZGlzcGxheUVycm9yczogdHJ1ZSB9KTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FsbGJhY2sge1xuICBvYmpyZWY6IGFwaS5PYmpSZWY7XG4gIG92ZXJyaWRlOiBhcGkuTWV0aG9kT3ZlcnJpZGU7XG4gIGFyZ3M6IGFueVtdO1xuICBleHBlY3RlZFJldHVyblR5cGU6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZDtcblxuICAvLyBjb21wbGV0aW9uIGNhbGxiYWNrc1xuICBzdWNjZWVkOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbiAgZmFpbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG59XG5cbmludGVyZmFjZSBBc3luY0ludm9jYXRpb24ge1xuICBtZXRob2Q6IHNwZWMuTWV0aG9kO1xuICBwcm9taXNlOiBQcm9taXNlPGFueT47XG59XG5cbmNsYXNzIEFzc2VtYmx5IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogc3BlYy5Bc3NlbWJseSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xvc3VyZTogYW55LFxuICApIHt9XG59XG4iXX0=
package/lib/objects.d.ts CHANGED
@@ -52,3 +52,4 @@ export interface RegisteredObject {
52
52
  fqn: string;
53
53
  interfaces?: string[];
54
54
  }
55
+ //# sourceMappingURL=objects.d.ts.map