@appium/base-driver 8.6.0 → 8.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/basedriver/commands/execute.d.ts +11 -0
- package/build/lib/basedriver/commands/execute.d.ts.map +1 -0
- package/build/lib/basedriver/commands/execute.js +62 -0
- package/build/lib/basedriver/commands/index.d.ts +1 -1
- package/build/lib/basedriver/commands/index.d.ts.map +1 -1
- package/build/lib/basedriver/commands/index.js +5 -2
- package/build/lib/basedriver/core.d.ts +5 -2
- package/build/lib/basedriver/core.d.ts.map +1 -1
- package/build/lib/basedriver/core.js +2 -1
- package/build/lib/express/server.d.ts +1 -0
- package/build/lib/express/server.d.ts.map +1 -1
- package/build/lib/express/server.js +3 -2
- package/build/lib/index.d.ts +1 -0
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +1 -1
- package/build/lib/protocol/index.d.ts +3 -1
- package/build/lib/protocol/index.js +13 -1
- package/build/lib/protocol/protocol.d.ts +2 -0
- package/build/lib/protocol/protocol.d.ts.map +1 -1
- package/build/lib/protocol/protocol.js +3 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/basedriver/commands/execute.js +65 -0
- package/lib/basedriver/commands/index.js +3 -1
- package/lib/basedriver/core.js +5 -1
- package/lib/express/server.js +3 -1
- package/lib/index.js +4 -0
- package/lib/protocol/index.js +4 -0
- package/lib/protocol/protocol.js +2 -2
- package/package.json +7 -7
|
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.GET_STATUS_COMMAND = exports.DELETE_SESSION_COMMAND = exports.CREATE_SESSION_COMMAND = void 0;
|
|
9
|
+
exports.checkParams = checkParams;
|
|
9
10
|
exports.determineProtocol = determineProtocol;
|
|
10
11
|
exports.driverShouldDoJwpProxy = driverShouldDoJwpProxy;
|
|
11
12
|
exports.isSessionCommand = isSessionCommand;
|
|
13
|
+
exports.makeArgs = makeArgs;
|
|
12
14
|
exports.routeConfiguringFunction = routeConfiguringFunction;
|
|
13
15
|
|
|
14
16
|
require("source-map-support/register");
|
|
@@ -389,4 +391,4 @@ async function doJwpProxy(driver, req, res) {
|
|
|
389
391
|
}
|
|
390
392
|
}
|
|
391
393
|
}
|
|
392
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJmb3JtYXRSZXNwb25zZVZhbHVlIiwidXRpbCIsImhhc1ZhbHVlIiwic3RhdHVzIiwiaXNOYU4iLCJwYXJzZUludCIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwiZXJyIiwiYWN0dWFsRXJyIiwiZXJyTXNnIiwic3RhY2siLCJpc0Vycm9yVHlwZSIsIlByb3h5UmVxdWVzdEVycm9yIiwiZ2V0QWN0dWFsRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwiaXNTdHJpbmciLCJzZW5kIiwiZm9ybWF0U3RhdHVzIiwianNvbiIsInRvTG93ZXJDYXNlIiwiQiIsInJlc29sdmUiLCJkb25lIiwicHJveHlBY3RpdmUiLCJwcm94eVJvdXRlSXNBdm9pZGVkIiwib3JpZ2luYWxVcmwiLCJjYW5Qcm94eSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHt1dGlsLCBsb2dnZXIsIG5vZGV9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge3ZhbGlkYXRvcnN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuICBlcnJvcnMsXG4gIGlzRXJyb3JUeXBlLFxuICBnZXRSZXNwb25zZUZvclczQ0Vycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG59IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7TUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EU30gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge01BWF9MT0dfQk9EWV9MRU5HVEgsIFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzVzNjQ2Fwc30gZnJvbSAnLi4vaGVscGVycy9jYXBhYmlsaXRpZXMnO1xuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9DT01NQU5EID0gJ2NyZWF0ZVNlc3Npb24nO1xuY29uc3QgREVMRVRFX1NFU1NJT05fQ09NTUFORCA9ICdkZWxldGVTZXNzaW9uJztcbmNvbnN0IEdFVF9TVEFUVVNfQ09NTUFORCA9ICdnZXRTdGF0dXMnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbChjcmVhdGVTZXNzaW9uQXJncykge1xuICByZXR1cm4gXy5zb21lKGNyZWF0ZVNlc3Npb25BcmdzLCBpc1czY0NhcHMpID8gUFJPVE9DT0xTLlczQyA6IFBST1RPQ09MUy5NSlNPTldQO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9IF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICA/IGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZClcbiAgICA6IGRyaXZlcjtcbiAgaWYgKGRzdERyaXZlciA9PT0gZHJpdmVyKSB7XG4gICAgLy8gU2hvcnRjaXJjdWl0IGlmIHRoZSBkcml2ZXIgaW5zdGFuY2UgaXMgbm90IGFuIHVtYnJlbGxhIGRyaXZlclxuICAgIC8vIG9yIGl0IGlzIEZha2UgZHJpdmVyIGluc3RhbmNlLCB3aGVyZSBgZHJpdmVyLmRyaXZlckZvclNlc3Npb25gXG4gICAgLy8gYWx3YXlzIHJldHVybnMgc2VsZiBpbnN0YW5jZVxuICAgIHJldHVybiBkcml2ZXIucHJvdG9jb2w7XG4gIH1cblxuICAvLyBFeHRyYWN0IHRoZSBwcm90b2NvbCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZiB0aGUgZ2l2ZW4gZHJpdmVyIGlzIHRoZSB1bWJyZWxsYSBvbmVcbiAgcmV0dXJuIGRzdERyaXZlcj8ucHJvdG9jb2wgPz8gUFJPVE9DT0xTLlczQztcbn1cblxuZnVuY3Rpb24gaXNTZXNzaW9uQ29tbWFuZChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlcm5hbERyaXZlcn0gZHJpdmVyXG4gKiBAcGFyYW0ge3N0cmluZz99IFtzZXNzaW9uSWRdXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfVxuICovXG5mdW5jdGlvbiBnZXRMb2dnZXIoZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9XG4gICAgc2Vzc2lvbklkICYmIF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSA/PyBkcml2ZXJcbiAgICAgIDogZHJpdmVyO1xuICBpZiAoXy5pc0Z1bmN0aW9uKGRzdERyaXZlci5sb2c/LmluZm8pKSB7XG4gICAgcmV0dXJuIGRzdERyaXZlci5sb2c7XG4gIH1cblxuICBsZXQgbG9nUHJlZml4ID0gZHN0RHJpdmVyLmNvbnN0cnVjdG9yXG4gICAgPyBgJHtkc3REcml2ZXIuY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKGRzdERyaXZlcikuc3Vic3RyaW5nKDAsIDgpfWBcbiAgICA6ICdBcHBpdW1Ecml2ZXInO1xuICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgbG9nUHJlZml4ICs9IGAgKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYDtcbiAgfVxuICByZXR1cm4gbG9nZ2VyLmdldExvZ2dlcihsb2dQcmVmaXgpO1xufVxuXG5mdW5jdGlvbiB3cmFwUGFyYW1zKHBhcmFtU2V0cywganNvbk9iaikge1xuICAvKiBUaGVyZSBhcmUgY29tbWFuZHMgbGlrZSBwZXJmb3JtVG91Y2ggd2hpY2ggdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgKHByaW1pdGl2ZSB0eXBlIG9yIGFycmF5KS5cbiAgICogU29tZSBkcml2ZXJzIGNob29zZSB0byBwYXNzIHRoaXMgcGFyYW1ldGVyIGFzIGEgdmFsdWUgKGVnLiBbYWN0aW9uMSwgYWN0aW9uMi4uLl0pIHdoaWxlIG90aGVycyB0b1xuICAgKiB3cmFwIGl0IHdpdGhpbiBhbiBvYmplY3QoZWcnIHtnZXN0dXJlOiAgW2FjdGlvbjEsIGFjdGlvbjIuLi5dfSksIHdoaWNoIG1ha2VzIGl0IGhhcmQgdG8gdmFsaWRhdGUuXG4gICAqIFRoZSB3cmFwIG9wdGlvbiBpbiB0aGUgc3BlYyBlbmZvcmNlIHdyYXBwaW5nIGJlZm9yZSB2YWxpZGF0aW9uLCBzbyB0aGF0IGFsbCBwYXJhbXMgYXJlIHdyYXBwZWQgYXRcbiAgICogdGhlIHRpbWUgdGhleSBhcmUgdmFsaWRhdGVkIGFuZCBsYXRlciBwYXNzZWQgdG8gdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgbGV0IHJlcyA9IGpzb25PYmo7XG4gIGlmIChfLmlzQXJyYXkoanNvbk9iaikgfHwgIV8uaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICByZXMgPSB7fTtcbiAgICByZXNbcGFyYW1TZXRzLndyYXBdID0ganNvbk9iajtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB1bndyYXBQYXJhbXMocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1zKHBhcmFtU2V0cywganNvbk9iaiwgcHJvdG9jb2wpIHtcbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gW107XG4gIGxldCBvcHRpb25hbFBhcmFtcyA9IFtdO1xuICBsZXQgcmVjZWl2ZWRQYXJhbXMgPSBfLmtleXMoanNvbk9iaik7XG5cbiAgaWYgKHBhcmFtU2V0cykge1xuICAgIGlmIChwYXJhbVNldHMucmVxdWlyZWQpIHtcbiAgICAgIC8vIHdlIG1pZ2h0IGhhdmUgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyxcbiAgICAgIC8vIG9yIGFuIGFycmF5IG9mIGFycmF5cyBvZiBwYXJhbWV0ZXJzLCBzbyBzdGFuZGFyZGl6ZVxuICAgICAgaWYgKCFfLmlzQXJyYXkoXy5maXJzdChwYXJhbVNldHMucmVxdWlyZWQpKSkge1xuICAgICAgICByZXF1aXJlZFBhcmFtcyA9IFtwYXJhbVNldHMucmVxdWlyZWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbVNldHMucmVxdWlyZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGp1c3QgYW4gYXJyYXlcbiAgICBpZiAocGFyYW1TZXRzLm9wdGlvbmFsKSB7XG4gICAgICBvcHRpb25hbFBhcmFtcyA9IHBhcmFtU2V0cy5vcHRpb25hbDtcbiAgICB9XG5cbiAgICAvLyBJZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCBhcyB0aGUgJ3ZhbGlkYXRlJyBrZXksIGl0IHdpbGwgaGVyZSBiZSBjYWxsZWQgd2l0aFxuICAgIC8vIGpzb25PYmogYXMgdGhlIHBhcmFtLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBmYWxzeSwgdmVyaWZpY2F0aW9uIHdpbGwgYmVcbiAgICAvLyBjb25zaWRlcmVkIHRvIGhhdmUgcGFzc2VkLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBlbHNlLCB0aGF0IHdpbGwgYmUgdGhlXG4gICAgLy8gYXJndW1lbnQgdG8gYW4gZXJyb3Igd2hpY2ggaXMgdGhyb3duIHRvIHRoZSB1c2VyXG4gICAgaWYgKHBhcmFtU2V0cy52YWxpZGF0ZSkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBwYXJhbVNldHMudmFsaWRhdGUoanNvbk9iaiwgcHJvdG9jb2wpO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IobWVzc2FnZSwganNvbk9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgaGF2ZSBubyByZXF1aXJlZCBwYXJhbWV0ZXJzLCBhbGwgaXMgd2VsbFxuICBpZiAocmVxdWlyZWRQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gdGhlIHNlc3Npb24gaWQgaW4gdGhlIHBhcmFtc1xuICBpZiAob3B0aW9uYWxQYXJhbXMuaW5kZXhPZignc2Vzc2lvbklkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnc2Vzc2lvbklkJyk7XG4gIH1cblxuICAvLyBzb21lIGNsaWVudHMgcGFzcyBpbiBhbiBlbGVtZW50IGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ2lkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnaWQnKTtcbiAgfVxuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYW5kIGNoZWNrIGFnYWluc3Qgb3VyIGFyZ3VtZW50c1xuICBmb3IgKGxldCBwYXJhbXMgb2YgcmVxdWlyZWRQYXJhbXMpIHtcbiAgICBpZiAoXG4gICAgICBfLmRpZmZlcmVuY2UocmVjZWl2ZWRQYXJhbXMsIHBhcmFtcywgb3B0aW9uYWxQYXJhbXMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgXy5kaWZmZXJlbmNlKHBhcmFtcywgcmVjZWl2ZWRQYXJhbXMpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgLy8gd2UgaGF2ZSBhIHNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgaXMgY29ycmVjdFxuICAgICAgLy8gc28gc2hvcnQtY2lyY3VpdFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcihwYXJhbVNldHMsIHJlY2VpdmVkUGFyYW1zKTtcbn1cblxuLypcbiAqIFRoaXMgbWV0aG9kIHRha2VzIDMgcGllY2VzIG9mIGRhdGE6IHJlcXVlc3QgcGFyYW1ldGVycyAoJ3JlcXVlc3RQYXJhbXMnKSxcbiAqIGEgcmVxdWVzdCBKU09OIGJvZHkgKCdqc29uT2JqJyksIGFuZCAncGF5bG9hZFBhcmFtcycsIHdoaWNoIGlzIHRoZSBzZWN0aW9uXG4gKiBmcm9tIHRoZSByb3V0ZSBkZWZpbml0aW9uIGZvciBhIHBhcnRpY3VsYXIgZW5kcG9pbnQgd2hpY2ggaGFzIGluc3RydWN0aW9uc1xuICogb24gaGFuZGxpbmcgcGFyYW1ldGVycy4gVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbFxuICogYmUgYXBwbGllZCB0byBhIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VBcmdzKHJlcXVlc3RQYXJhbXMsIGpzb25PYmosIHBheWxvYWRQYXJhbXMsIHByb3RvY29sKSB7XG4gIC8vIFdlIHdhbnQgdG8gcGFzcyB0aGUgXCJ1cmxcIiBwYXJhbWV0ZXJzIHRvIHRoZSBjb21tYW5kcyBpbiByZXZlcnNlIG9yZGVyXG4gIC8vIHNpbmNlIHRoZSBjb21tYW5kIHdpbGwgc29tZXRpbWVzIHdhbnQgdG8gaWdub3JlLCBzYXksIHRoZSBzZXNzaW9uSWQuXG4gIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcHV0dGluZyBzZXNzaW9uSWQgbGFzdCwgd2hpY2ggbWVhbnMgaW4gSlMgd2UgY2FuXG4gIC8vIG9taXQgaXQgZnJvbSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgaXQuXG4gIGxldCB1cmxQYXJhbXMgPSBfLmtleXMocmVxdWVzdFBhcmFtcykucmV2ZXJzZSgpO1xuXG4gIC8vIEluIHRoZSBzaW1wbGUgY2FzZSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGEgYmFzaWMgYXJyYXkgaW5cbiAgLy8gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gc3RhcnQgdGhlcmUuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVyZSBhcmVcbiAgLy8gbXVsdGlwbGUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRob3VnaCwgc28gaGFuZGxlIHRoYXQgY2FzZVxuICAvLyB0b28uXG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IHBheWxvYWRQYXJhbXMucmVxdWlyZWQ7XG4gIGlmIChfLmlzQXJyYXkoXy5maXJzdChwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSkpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRoZW4gd2Ugd2lsbCBoYXZlIGFuXG4gICAgLy8gYXJyYXkgb2YgYXJyYXlzIGluIHBheWxvYWRQYXJhbXMucmVxdWlyZWQsIHNvIGxvb3AgdGhyb3VnaCBlYWNoIHNldCBhbmRcbiAgICAvLyBwaWNrIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHdoaWNoIEpTT04gcGFyYW1zIHdlcmUgYWN0dWFsbHkgc2VudC4gV2UndmVcbiAgICAvLyBhbHJlYWR5IGJlZW4gdGhyb3VnaCB2YWxpZGF0aW9uIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8gZmluZCBhIG1hdGNoLlxuICAgIGxldCBrZXlzID0gXy5rZXlzKGpzb25PYmopO1xuICAgIGZvciAobGV0IHBhcmFtcyBvZiBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSB7XG4gICAgICBpZiAoXy53aXRob3V0KHBhcmFtcywgLi4ua2V5cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgd2UgY29uc3RydWN0IG91ciBsaXN0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZFxuICBsZXQgYXJncztcbiAgaWYgKF8uaXNGdW5jdGlvbihwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKSkge1xuICAgIC8vIEluIHRoZSByb3V0ZSBzcGVjLCBhIHBhcnRpY3VsYXIgcm91dGUgbWlnaHQgZGVmaW5lIGEgJ21ha2VBcmdzJyBmdW5jdGlvblxuICAgIC8vIGlmIGl0IHdhbnRzIGZ1bGwgY29udHJvbCBvdmVyIGhvdyB0byB0dXJuIEpTT04gcGFyYW1ldGVycyBpbnRvIGNvbW1hbmRcbiAgICAvLyBhcmd1bWVudHMuIFNvIHdlIHBhc3MgaXQgdGhlIEpTT04gcGFyYW1ldGVycyBhbmQgaXQgcmV0dXJucyBhbiBhcnJheVxuICAgIC8vIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgaGFuZGxpbmcgY29tbWFuZC4gRm9yIGV4YW1wbGUgaWYgaXQgcmV0dXJuc1xuICAgIC8vIFsxLCAyLCAzXSwgd2Ugd2lsbCBjYWxsIGBjb21tYW5kKDEsIDIsIDMsIC4uLilgICh1cmwgcGFyYW1zIGFyZSBzZXBhcmF0ZVxuICAgIC8vIGZyb20gSlNPTiBwYXJhbXMgYW5kIGdldCBjb25jYXRlbmF0ZWQgYmVsb3cpLlxuICAgIGFyZ3MgPSBwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKGpzb25PYmosIHByb3RvY29sKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIGNvbGxlY3QgYWxsIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgcGFyYW1zIGFuZCBmbGF0dGVuIHRoZW1cbiAgICAvLyBpbnRvIGFuIGFyZ3VtZW50IGFycmF5XG4gICAgYXJncyA9IF8uZmxhdHRlbihyZXF1aXJlZFBhcmFtcykubWFwKChwKSA9PiBqc29uT2JqW3BdKTtcbiAgICBpZiAocGF5bG9hZFBhcmFtcy5vcHRpb25hbCkge1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KF8uZmxhdHRlbihwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKS5tYXAoKHApID0+IGpzb25PYmpbcF0pKTtcbiAgICB9XG4gIH1cbiAgLy8gRmluYWxseSwgZ2V0IG91ciB1cmwgcGFyYW1zIChzZXNzaW9uIGlkLCBlbGVtZW50IGlkLCBldGMuLi4pIG9uIHRoZSBlbmQgb2ZcbiAgLy8gdGhlIGxpc3RcbiAgYXJncyA9IGFyZ3MuY29uY2F0KHVybFBhcmFtcy5tYXAoKHUpID0+IHJlcXVlc3RQYXJhbXNbdV0pKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29yZX0gZHJpdmVyXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi9leHByZXNzL3NlcnZlcicpLlJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlcikge1xuICBpZiAoIWRyaXZlci5zZXNzaW9uRXhpc3RzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEcml2ZXJzIG11c3QgaW1wbGVtZW50IGBzZXNzaW9uRXhpc3RzYCBwcm9wZXJ0eScpO1xuICB9XG5cbiAgLy8gXCJleGVjdXRlXCIgaXNuJ3QgZGVmaW5lZCBhbnl3aGVyZVxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGlmICghKGRyaXZlci5leGVjdXRlQ29tbWFuZCB8fCBkcml2ZXIuZXhlY3V0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYGV4ZWN1dGVDb21tYW5kYCBvciBgZXhlY3V0ZWAgbWV0aG9kJyk7XG4gIH1cblxuICAvLyByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB3aWxsIGFkZCBhbGwgdGhlIHJvdXRlcyB0byB0aGUgZHJpdmVyLiBIZXJlIGV4dHJhTWV0aG9kcyBtaWdodCBiZVxuICAvLyBwYXNzZWQgaW4gYXMgZGVmaW5lZCBieSBBcHBpdW0gcGx1Z2lucywgc28gd2UgbmVlZCB0byBhZGQgdGhvc2UgdG8gdGhlIGRlZmF1bHQgbGlzdFxuICByZXR1cm4gZnVuY3Rpb24gYWRkUm91dGVzKGFwcCwge2Jhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEgsIGV4dHJhTWV0aG9kTWFwID0ge319ID0ge30pIHtcbiAgICAvLyBzdG9yZSBiYXNlUGF0aCBvbiB0aGUgZHJpdmVyIGluc3RhbmNlIHNvIGl0IGNhbiB1c2UgaXQgaWYgbmVjZXNzYXJ5XG4gICAgLy8gZm9yIGV4YW1wbGUgaW4gZGV0ZXJtaW5pbmcgcHJveHkgYXZvaWRhbmNlXG4gICAgZHJpdmVyLmJhc2VQYXRoID0gYmFzZVBhdGg7XG5cbiAgICBjb25zdCBhbGxNZXRob2RzID0gey4uLk1FVEhPRF9NQVAsIC4uLmV4dHJhTWV0aG9kTWFwfTtcblxuICAgIGZvciAoY29uc3QgW3BhdGgsIG1ldGhvZHNdIG9mIF8udG9QYWlycyhhbGxNZXRob2RzKSkge1xuICAgICAgZm9yIChjb25zdCBbbWV0aG9kLCBzcGVjXSBvZiBfLnRvUGFpcnMobWV0aG9kcykpIHtcbiAgICAgICAgLy8gc2V0IHVwIHRoZSBleHByZXNzIHJvdXRlIGhhbmRsZXJcbiAgICAgICAgYnVpbGRIYW5kbGVyKFxuICAgICAgICAgIGFwcCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgYCR7YmFzZVBhdGh9JHtwYXRofWAsXG4gICAgICAgICAgc3BlYyxcbiAgICAgICAgICBkcml2ZXIsXG4gICAgICAgICAgaXNTZXNzaW9uQ29tbWFuZChzcGVjLmNvbW1hbmQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhhbmRsZXIoYXBwLCBtZXRob2QsIHBhdGgsIHNwZWMsIGRyaXZlciwgaXNTZXNzQ21kKSB7XG4gIGxldCBhc3luY0hhbmRsZXIgPSBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBsZXQganNvbk9iaiA9IHJlcS5ib2R5O1xuICAgIGxldCBodHRwUmVzQm9keSA9IHt9O1xuICAgIGxldCBodHRwU3RhdHVzID0gMjAwO1xuICAgIGxldCBuZXdTZXNzaW9uSWQ7XG4gICAgbGV0IGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBpZiB0aGlzIGlzIGEgc2Vzc2lvbiBjb21tYW5kIGJ1dCB3ZSBkb24ndCBoYXZlIGEgc2Vzc2lvbixcbiAgICAgIC8vIGVycm9yIG91dCBlYXJseSAoZXNwZWNpYWxseSBiZWZvcmUgcHJveHlpbmcpXG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFkcml2ZXIuc2Vzc2lvbkV4aXN0cyhyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZHJpdmVyIGlzIGN1cnJlbnRseSBwcm94eWluZyBjb21tYW5kcyB0byBhbm90aGVyIEpTT05XUCBzZXJ2ZXIsIGJ5cGFzcyBhbGwgb3VyXG4gICAgICAvLyBjaGVja3MgYW5kIGFzc3VtZSB0aGUgdXBzdHJlYW0gc2VydmVyIGtub3dzIHdoYXQgaXQncyBkb2luZy4gQnV0IGtlZXAgdGhpcyBpbiB0aGVcbiAgICAgIC8vIHRyeS9jYXRjaCBibG9jayBzbyBpZiBwcm94eWluZyBpdHNlbGYgZmFpbHMsIHdlIGdpdmUgYSBtZXNzYWdlIHRvIHRoZSBjbGllbnQuIE9mIGNvdXJzZSB3ZVxuICAgICAgLy8gb25seSB3YW50IHRvIGRvIHRoZXNlIHdoZW4gd2UgaGF2ZSBhIHNlc3Npb24gY29tbWFuZDsgdGhlIEFwcGl1bSBkcml2ZXIgbXVzdCBiZVxuICAgICAgLy8gcmVzcG9uc2libGUgZm9yIHN0YXJ0L3N0b3Agc2Vzc2lvbiwgZXRjLi4uIFdlIGFsc28gYWxsb3cgdGhlIGNvbW1hbmQgc3BlYyB0byBkZWNsYXJlIHRoYXRcbiAgICAgIC8vIHRoaXMgY29tbWFuZCBzaG91bGQgbmV2ZXIgYmUgcHJveGllZCAod2hpY2ggaXMgdXNlZnVsIGZvciBwbHVnaW4gZGV2ZWxvcGVycyB3aG8gYWRkXG4gICAgICAvLyBjb21tYW5kcyBhbmQgZ2VuZXJhbGx5IHdvdWxkIG5vdCB3YW50IHRoYXQgY29tbWFuZCB0byBiZSBwcm94aWVkIGluc3RlYWQgb2YgaGFuZGxlZCBieSB0aGVcbiAgICAgIC8vIHBsdWdpbilcbiAgICAgIGxldCBkaWRQbHVnaW5PdmVycmlkZVByb3h5ID0gZmFsc2U7XG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFzcGVjLm5ldmVyUHJveHkgJiYgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgc3BlYy5jb21tYW5kKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQgfHxcbiAgICAgICAgICBkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kKHNwZWMuY29tbWFuZCwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCBkb0p3cFByb3h5KGRyaXZlciwgcmVxLCByZXMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoXG4gICAgICAgICAgYFdvdWxkIGhhdmUgcHJveGllZCBgICtcbiAgICAgICAgICAgIGBjb21tYW5kIGRpcmVjdGx5LCBidXQgYSBwbHVnaW4gZXhpc3RzIHdoaWNoIG1pZ2h0IHJlcXVpcmUgaXRzIHZhbHVlLCBzbyB3aWxsIGxldCBgICtcbiAgICAgICAgICAgIGBpdHMgdmFsdWUgYmUgY29sbGVjdGVkIGludGVybmFsbHkgYW5kIG1hZGUgcGFydCBvZiBwbHVnaW4gY2hhaW5gXG4gICAgICAgICk7XG4gICAgICAgIGRpZFBsdWdpbk92ZXJyaWRlUHJveHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhIGNvbW1hbmQgaXMgbm90IGluIG91ciBtZXRob2QgbWFwLCBpdCdzIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGhhdmUgbm8gcGxhbnMgdG8gZXZlciBpbXBsZW1lbnQgaXRcbiAgICAgIGlmICghc3BlYy5jb21tYW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLndyYXApIHtcbiAgICAgICAganNvbk9iaiA9IHdyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgLy8gdW53cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLnVud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gdW53cmFwUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGRldGVybWluZSBwcm90b2NvbCBieSBzZXNzaW9uIGNyZWF0aW9uIGFyZ3MsIHNvIHdlIGNhbiB0aHJvdyBhXG4gICAgICAgIC8vIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvciBpZiBhcmd1bWVudHMgdmFsaWRhdGlvbiBmYWlsc1xuICAgICAgICBjdXJyZW50UHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbChcbiAgICAgICAgICBtYWtlQXJncyhyZXEucGFyYW1zLCBqc29uT2JqLCBzcGVjLnBheWxvYWRQYXJhbXMgfHwge30pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBqc29uIHBheWxvYWQgY29uZm9ybXMgdG8gdGhlIHNwZWNcbiAgICAgIGNoZWNrUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaiwgY3VycmVudFByb3RvY29sKTtcblxuICAgICAgLy8gdHVybiB0aGUgY29tbWFuZCBhbmQganNvbiBwYXlsb2FkIGludG8gYW4gYXJndW1lbnQgbGlzdCBmb3JcbiAgICAgIC8vIHRoZSBkcml2ZXIgbWV0aG9kc1xuICAgICAgbGV0IGFyZ3MgPSBtYWtlQXJncyhyZXEucGFyYW1zLCBqc29uT2JqLCBzcGVjLnBheWxvYWRQYXJhbXMgfHwge30sIGN1cnJlbnRQcm90b2NvbCk7XG4gICAgICBsZXQgZHJpdmVyUmVzO1xuICAgICAgLy8gdmFsaWRhdGUgY29tbWFuZCBhcmdzIGFjY29yZGluZyB0byBNSlNPTldQXG4gICAgICBpZiAodmFsaWRhdG9yc1tzcGVjLmNvbW1hbmRdKSB7XG4gICAgICAgIHZhbGlkYXRvcnNbc3BlYy5jb21tYW5kXSguLi5hcmdzKTtcbiAgICAgIH1cblxuICAgICAgLy8gcnVuIHRoZSBkcml2ZXIgY29tbWFuZCB3cmFwcGVkIGluc2lkZSB0aGUgYXJndW1lbnQgdmFsaWRhdG9yc1xuICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICBgQ2FsbGluZyBgICtcbiAgICAgICAgICBgJHtkcml2ZXIuY29uc3RydWN0b3IubmFtZX0uJHtzcGVjLmNvbW1hbmR9KCkgd2l0aCBhcmdzOiBgICtcbiAgICAgICAgICBfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSlcbiAgICAgICk7XG5cbiAgICAgIGlmIChkaWRQbHVnaW5PdmVycmlkZVByb3h5KSB7XG4gICAgICAgIC8vIFRPRE8gZm9yIG5vdyB3ZSBhZGQgdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgYXJncyBsaXN0LCBidXQgdGhhdCdzIG1peGluZyBwdXJwb3NlcyBoZXJlLlxuICAgICAgICAvLyBXZSByZWFsbHkgc2hvdWxkIGFkZCBhbm90aGVyICdvcHRpb25zJyBwYXJhbWV0ZXIgdG8gJ2V4ZWN1dGVDb21tYW5kJywgYnV0IHRoaXMgd291bGQgYmVcbiAgICAgICAgLy8gYSBicmVha2luZyBjaGFuZ2UgZm9yIGFsbCBkcml2ZXJzIHNvIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkuXG4gICAgICAgIGFyZ3MucHVzaCh7cmVxRm9yUHJveHk6IHJlcX0pO1xuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUNvbW1hbmQoc3BlYy5jb21tYW5kLCAuLi5hcmdzKTtcblxuICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBhZnRlciBleGVjdXRlQ29tbWFuZFxuICAgICAgY3VycmVudFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpIHx8IGN1cnJlbnRQcm90b2NvbDtcblxuICAgICAgLy8gSWYgYGV4ZWN1dGVDb21tYW5kYCB3YXMgb3ZlcnJpZGRlbiBhbmQgdGhlIG1ldGhvZCByZXR1cm5zIGFuIG9iamVjdFxuICAgICAgLy8gd2l0aCBhIHByb3RvY29sIGFuZCB2YWx1ZS9lcnJvciBwcm9wZXJ0eSwgcmUtYXNzaWduIHRoZSBwcm90b2NvbFxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChkcml2ZXJSZXMpICYmIF8uaGFzKGRyaXZlclJlcywgJ3Byb3RvY29sJykpIHtcbiAgICAgICAgY3VycmVudFByb3RvY29sID0gZHJpdmVyUmVzLnByb3RvY29sIHx8IGN1cnJlbnRQcm90b2NvbDtcbiAgICAgICAgaWYgKGRyaXZlclJlcy5lcnJvcikge1xuICAgICAgICAgIHRocm93IGRyaXZlclJlcy5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHVucGFjayBjcmVhdGVTZXNzaW9uIHJlc3BvbnNlXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBDUkVBVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIG5ld1Nlc3Npb25JZCA9IGRyaXZlclJlc1swXTtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgbmV3U2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgICBgQ2FjaGVkIHRoZSBwcm90b2NvbCB2YWx1ZSAnJHtjdXJyZW50UHJvdG9jb2x9JyBmb3IgdGhlIG5ldyBzZXNzaW9uICR7bmV3U2Vzc2lvbklkfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXNbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0ge1xuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXJSZXNbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBmb3JtYXRSZXNwb25zZVZhbHVlKGRyaXZlclJlcyk7XG5cbiAgICAgIC8vIGRlbGV0ZSBzaG91bGQgbm90IHJldHVybiBhbnl0aGluZyBldmVuIGlmIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICAgIGBSZWNlaXZlZCByZXNwb25zZTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtcbiAgICAgICAgICAgIGxlbmd0aDogTUFYX0xPR19CT0RZX0xFTkdUSCxcbiAgICAgICAgICB9KX1gXG4gICAgICAgICk7XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZygnQnV0IGRlbGV0aW5nIHNlc3Npb24sIHNvIG5vdCByZXR1cm5pbmcnKTtcbiAgICAgICAgZHJpdmVyUmVzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHN0YXR1cyBpcyBub3QgMCwgIHRocm93IHRoZSBhcHByb3ByaWF0ZSBlcnJvciBmb3Igc3RhdHVzIGNvZGUuXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShkcml2ZXJSZXMpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcy5zdGF0dXMpICYmXG4gICAgICAgICAgIWlzTmFOKGRyaXZlclJlcy5zdGF0dXMpICYmXG4gICAgICAgICAgcGFyc2VJbnQoZHJpdmVyUmVzLnN0YXR1cywgMTApICE9PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGRyaXZlclJlcy5zdGF0dXMsIGRyaXZlclJlcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGRyaXZlclJlcy52YWx1ZSkgJiYgZHJpdmVyUmVzLnZhbHVlLmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tVzNDSnNvbkNvZGUoXG4gICAgICAgICAgICBkcml2ZXJSZXMudmFsdWUuZXJyb3IsXG4gICAgICAgICAgICBkcml2ZXJSZXMudmFsdWUubWVzc2FnZSxcbiAgICAgICAgICAgIGRyaXZlclJlcy52YWx1ZS5zdGFja3RyYWNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBodHRwUmVzQm9keS52YWx1ZSA9IGRyaXZlclJlcztcbiAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCkuZGVidWcoXG4gICAgICAgIGBSZXNwb25kaW5nIGAgK1xuICAgICAgICAgIGB0byBjbGllbnQgd2l0aCBkcml2ZXIuJHtzcGVjLmNvbW1hbmR9KCkgcmVzdWx0OiAke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZHJpdmVyUmVzKSwge1xuICAgICAgICAgICAgbGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RILFxuICAgICAgICAgIH0pfWBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCBmaWd1cmUgb3V0IHdoYXQgb3VyIHJlc3BvbnNlIHNob3VsZCBiZVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCB3ZSBlbmNvdW50ZXJlZFxuICAgICAgbGV0IGFjdHVhbEVyciA9IGVycjtcblxuICAgICAgY3VycmVudFByb3RvY29sID1cbiAgICAgICAgY3VycmVudFByb3RvY29sIHx8IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCk7XG5cbiAgICAgIGxldCBlcnJNc2cgPSBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2s7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoZXJyTXNnLCBlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIG1vcmUgaW5mb3JtYXRpb24sIGFkZCBpdC4gYnV0IG9mdGVuIHRoZSBtZXNzYWdlXG4gICAgICAgIC8vIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayB0cmFjZVxuICAgICAgICBlcnJNc2cgPSBgJHtlcnIubWVzc2FnZX0ke2Vyck1zZyA/ICdcXG4nICsgZXJyTXNnIDogJyd9YDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgICAgYWN0dWFsRXJyID0gZXJyLmdldEFjdHVhbEVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICAgIGBFbmNvdW50ZXJlZCBpbnRlcm5hbCBlcnJvciBydW5uaW5nIGNvbW1hbmQ6ICR7ZXJyTXNnfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XSA9IGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoYWN0dWFsRXJyKTtcbiAgICB9XG5cbiAgICAvLyBkZWNvZGUgdGhlIHJlc3BvbnNlLCB3aGljaCBpcyBlaXRoZXIgYSBzdHJpbmcgb3IganNvblxuICAgIGlmIChfLmlzU3RyaW5nKGh0dHBSZXNCb2R5KSkge1xuICAgICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKS5zZW5kKGh0dHBSZXNCb2R5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5ld1Nlc3Npb25JZCkge1xuICAgICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgaHR0cFJlc0JvZHkudmFsdWUuc2Vzc2lvbklkID0gbmV3U2Vzc2lvbklkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGh0dHBSZXNCb2R5LnNlc3Npb25JZCA9IG5ld1Nlc3Npb25JZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHR0cFJlc0JvZHkuc2Vzc2lvbklkID0gcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIERvbid0IGluY2x1ZGUgc2Vzc2lvbklkIGluIFczQyByZXNwb25zZXNcbiAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgZGVsZXRlIGh0dHBSZXNCb2R5LnNlc3Npb25JZDtcbiAgICAgIH1cblxuICAgICAgaHR0cFJlc0JvZHkgPSBmb3JtYXRTdGF0dXMoaHR0cFJlc0JvZHkpO1xuICAgICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKS5qc29uKGh0dHBSZXNCb2R5KTtcbiAgICB9XG4gIH07XG4gIC8vIGFkZCB0aGUgbWV0aG9kIHRvIHRoZSBhcHBcbiAgYXBwW21ldGhvZC50b0xvd2VyQ2FzZSgpXShwYXRoLCAocmVxLCByZXMpID0+IHtcbiAgICBCLnJlc29sdmUoYXN5bmNIYW5kbGVyKHJlcSwgcmVzKSkuZG9uZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZHJpdmVyU2hvdWxkRG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgY29tbWFuZCkge1xuICAvLyBkcml2ZXJzIG5lZWQgdG8gZXhwbGljaXRseSBzYXkgd2hlbiB0aGUgcHJveHkgaXMgYWN0aXZlXG4gIGlmICghZHJpdmVyLnByb3h5QWN0aXZlKHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHdlIHNob3VsZCBuZXZlciBwcm94eSBkZWxldGVTZXNzaW9uIGJlY2F1c2Ugd2UgbmVlZCB0byBnaXZlIHRoZSBjb250YWluaW5nXG4gIC8vIGRyaXZlciBhbiBvcHBvcnR1bml0eSB0byBjbGVhbiBpdHNlbGYgdXBcbiAgaWYgKGNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBhdm9pZGFuY2Ugc2NoZW1hLCBhbmQgc2F5IHdlIHNob3VsZG4ndCBwcm94eSBpZiBhbnl0aGluZyBpbiB0aGVcbiAgLy8gYXZvaWQgbGlzdCBtYXRjaGVzIG91ciByZXFcbiAgaWYgKGRyaXZlci5wcm94eVJvdXRlSXNBdm9pZGVkKHJlcS5wYXJhbXMuc2Vzc2lvbklkLCByZXEubWV0aG9kLCByZXEub3JpZ2luYWxVcmwsIHJlcS5ib2R5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0p3cFByb3h5KGRyaXZlciwgcmVxLCByZXMpIHtcbiAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmluZm8oXG4gICAgJ0RyaXZlciBwcm94eSBhY3RpdmUsIHBhc3NpbmcgcmVxdWVzdCBvbiB2aWEgSFRUUCBwcm94eSdcbiAgKTtcblxuICAvLyBjaGVjayB0aGF0IHRoZSBpbm5lciBkcml2ZXIgaGFzIGEgcHJveHkgZnVuY3Rpb25cbiAgaWYgKCFkcml2ZXIuY2FuUHJveHkocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gcHJveHkgdG8gYSBzZXJ2ZXIgYnV0IHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIHByb3h5Jyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBkcml2ZXIuZXhlY3V0ZUNvbW1hbmQoJ3Byb3h5UmVxUmVzJywgcmVxLCByZXMsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwcm94eS4gUHJveHkgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7XG4gIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgaXNTZXNzaW9uQ29tbWFuZCxcbiAgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSxcbiAgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsXG4gIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsXG4gIEdFVF9TVEFUVVNfQ09NTUFORCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHNCQUFzQixHQUFHLGVBQS9COztBQUNBLE1BQU1DLHNCQUFzQixHQUFHLGVBQS9COztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLFdBQTNCOzs7QUFFQSxTQUFTQyxpQkFBVCxDQUEyQkMsaUJBQTNCLEVBQThDO0VBQzVDLE9BQU9DLGVBQUEsQ0FBRUMsSUFBRixDQUFPRixpQkFBUCxFQUEwQkcsdUJBQTFCLElBQXVDQyxvQkFBQSxDQUFVQyxHQUFqRCxHQUF1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
|
|
394
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJmb3JtYXRSZXNwb25zZVZhbHVlIiwidXRpbCIsImhhc1ZhbHVlIiwic3RhdHVzIiwiaXNOYU4iLCJwYXJzZUludCIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwiZXJyIiwiYWN0dWFsRXJyIiwiZXJyTXNnIiwic3RhY2siLCJpc0Vycm9yVHlwZSIsIlByb3h5UmVxdWVzdEVycm9yIiwiZ2V0QWN0dWFsRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwiaXNTdHJpbmciLCJzZW5kIiwiZm9ybWF0U3RhdHVzIiwianNvbiIsInRvTG93ZXJDYXNlIiwiQiIsInJlc29sdmUiLCJkb25lIiwicHJveHlBY3RpdmUiLCJwcm94eVJvdXRlSXNBdm9pZGVkIiwib3JpZ2luYWxVcmwiLCJjYW5Qcm94eSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHt1dGlsLCBsb2dnZXIsIG5vZGV9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge3ZhbGlkYXRvcnN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuICBlcnJvcnMsXG4gIGlzRXJyb3JUeXBlLFxuICBnZXRSZXNwb25zZUZvclczQ0Vycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG59IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7TUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EU30gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge01BWF9MT0dfQk9EWV9MRU5HVEgsIFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzVzNjQ2Fwc30gZnJvbSAnLi4vaGVscGVycy9jYXBhYmlsaXRpZXMnO1xuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9DT01NQU5EID0gJ2NyZWF0ZVNlc3Npb24nO1xuY29uc3QgREVMRVRFX1NFU1NJT05fQ09NTUFORCA9ICdkZWxldGVTZXNzaW9uJztcbmNvbnN0IEdFVF9TVEFUVVNfQ09NTUFORCA9ICdnZXRTdGF0dXMnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbChjcmVhdGVTZXNzaW9uQXJncykge1xuICByZXR1cm4gXy5zb21lKGNyZWF0ZVNlc3Npb25BcmdzLCBpc1czY0NhcHMpID8gUFJPVE9DT0xTLlczQyA6IFBST1RPQ09MUy5NSlNPTldQO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9IF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICA/IGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZClcbiAgICA6IGRyaXZlcjtcbiAgaWYgKGRzdERyaXZlciA9PT0gZHJpdmVyKSB7XG4gICAgLy8gU2hvcnRjaXJjdWl0IGlmIHRoZSBkcml2ZXIgaW5zdGFuY2UgaXMgbm90IGFuIHVtYnJlbGxhIGRyaXZlclxuICAgIC8vIG9yIGl0IGlzIEZha2UgZHJpdmVyIGluc3RhbmNlLCB3aGVyZSBgZHJpdmVyLmRyaXZlckZvclNlc3Npb25gXG4gICAgLy8gYWx3YXlzIHJldHVybnMgc2VsZiBpbnN0YW5jZVxuICAgIHJldHVybiBkcml2ZXIucHJvdG9jb2w7XG4gIH1cblxuICAvLyBFeHRyYWN0IHRoZSBwcm90b2NvbCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZiB0aGUgZ2l2ZW4gZHJpdmVyIGlzIHRoZSB1bWJyZWxsYSBvbmVcbiAgcmV0dXJuIGRzdERyaXZlcj8ucHJvdG9jb2wgPz8gUFJPVE9DT0xTLlczQztcbn1cblxuZnVuY3Rpb24gaXNTZXNzaW9uQ29tbWFuZChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlcm5hbERyaXZlcn0gZHJpdmVyXG4gKiBAcGFyYW0ge3N0cmluZz99IFtzZXNzaW9uSWRdXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfVxuICovXG5mdW5jdGlvbiBnZXRMb2dnZXIoZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9XG4gICAgc2Vzc2lvbklkICYmIF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSA/PyBkcml2ZXJcbiAgICAgIDogZHJpdmVyO1xuICBpZiAoXy5pc0Z1bmN0aW9uKGRzdERyaXZlci5sb2c/LmluZm8pKSB7XG4gICAgcmV0dXJuIGRzdERyaXZlci5sb2c7XG4gIH1cblxuICBsZXQgbG9nUHJlZml4ID0gZHN0RHJpdmVyLmNvbnN0cnVjdG9yXG4gICAgPyBgJHtkc3REcml2ZXIuY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKGRzdERyaXZlcikuc3Vic3RyaW5nKDAsIDgpfWBcbiAgICA6ICdBcHBpdW1Ecml2ZXInO1xuICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgbG9nUHJlZml4ICs9IGAgKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYDtcbiAgfVxuICByZXR1cm4gbG9nZ2VyLmdldExvZ2dlcihsb2dQcmVmaXgpO1xufVxuXG5mdW5jdGlvbiB3cmFwUGFyYW1zKHBhcmFtU2V0cywganNvbk9iaikge1xuICAvKiBUaGVyZSBhcmUgY29tbWFuZHMgbGlrZSBwZXJmb3JtVG91Y2ggd2hpY2ggdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgKHByaW1pdGl2ZSB0eXBlIG9yIGFycmF5KS5cbiAgICogU29tZSBkcml2ZXJzIGNob29zZSB0byBwYXNzIHRoaXMgcGFyYW1ldGVyIGFzIGEgdmFsdWUgKGVnLiBbYWN0aW9uMSwgYWN0aW9uMi4uLl0pIHdoaWxlIG90aGVycyB0b1xuICAgKiB3cmFwIGl0IHdpdGhpbiBhbiBvYmplY3QoZWcnIHtnZXN0dXJlOiAgW2FjdGlvbjEsIGFjdGlvbjIuLi5dfSksIHdoaWNoIG1ha2VzIGl0IGhhcmQgdG8gdmFsaWRhdGUuXG4gICAqIFRoZSB3cmFwIG9wdGlvbiBpbiB0aGUgc3BlYyBlbmZvcmNlIHdyYXBwaW5nIGJlZm9yZSB2YWxpZGF0aW9uLCBzbyB0aGF0IGFsbCBwYXJhbXMgYXJlIHdyYXBwZWQgYXRcbiAgICogdGhlIHRpbWUgdGhleSBhcmUgdmFsaWRhdGVkIGFuZCBsYXRlciBwYXNzZWQgdG8gdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgbGV0IHJlcyA9IGpzb25PYmo7XG4gIGlmIChfLmlzQXJyYXkoanNvbk9iaikgfHwgIV8uaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICByZXMgPSB7fTtcbiAgICByZXNbcGFyYW1TZXRzLndyYXBdID0ganNvbk9iajtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB1bndyYXBQYXJhbXMocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbVNldHMsIGpzb25PYmosIHByb3RvY29sKSB7XG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IFtdO1xuICBsZXQgb3B0aW9uYWxQYXJhbXMgPSBbXTtcbiAgbGV0IHJlY2VpdmVkUGFyYW1zID0gXy5rZXlzKGpzb25PYmopO1xuXG4gIGlmIChwYXJhbVNldHMpIHtcbiAgICBpZiAocGFyYW1TZXRzLnJlcXVpcmVkKSB7XG4gICAgICAvLyB3ZSBtaWdodCBoYXZlIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMsXG4gICAgICAvLyBvciBhbiBhcnJheSBvZiBhcnJheXMgb2YgcGFyYW1ldGVycywgc28gc3RhbmRhcmRpemVcbiAgICAgIGlmICghXy5pc0FycmF5KF8uZmlyc3QocGFyYW1TZXRzLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBbcGFyYW1TZXRzLnJlcXVpcmVkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1TZXRzLnJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBqdXN0IGFuIGFycmF5XG4gICAgaWYgKHBhcmFtU2V0cy5vcHRpb25hbCkge1xuICAgICAgb3B0aW9uYWxQYXJhbXMgPSBwYXJhbVNldHMub3B0aW9uYWw7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgYXMgdGhlICd2YWxpZGF0ZScga2V5LCBpdCB3aWxsIGhlcmUgYmUgY2FsbGVkIHdpdGhcbiAgICAvLyBqc29uT2JqIGFzIHRoZSBwYXJhbS4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZmFsc3ksIHZlcmlmaWNhdGlvbiB3aWxsIGJlXG4gICAgLy8gY29uc2lkZXJlZCB0byBoYXZlIHBhc3NlZC4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZWxzZSwgdGhhdCB3aWxsIGJlIHRoZVxuICAgIC8vIGFyZ3VtZW50IHRvIGFuIGVycm9yIHdoaWNoIGlzIHRocm93biB0byB0aGUgdXNlclxuICAgIGlmIChwYXJhbVNldHMudmFsaWRhdGUpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gcGFyYW1TZXRzLnZhbGlkYXRlKGpzb25PYmosIHByb3RvY29sKTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKG1lc3NhZ2UsIGpzb25PYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGhhdmUgbm8gcmVxdWlyZWQgcGFyYW1ldGVycywgYWxsIGlzIHdlbGxcbiAgaWYgKHJlcXVpcmVkUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWUgY2xpZW50cyBwYXNzIGluIHRoZSBzZXNzaW9uIGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ3Nlc3Npb25JZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ3Nlc3Npb25JZCcpO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gYW4gZWxlbWVudCBpZCBpbiB0aGUgcGFyYW1zXG4gIGlmIChvcHRpb25hbFBhcmFtcy5pbmRleE9mKCdpZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ2lkJyk7XG4gIH1cblxuICAvLyBnbyB0aHJvdWdoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFuZCBjaGVjayBhZ2FpbnN0IG91ciBhcmd1bWVudHNcbiAgZm9yIChsZXQgcGFyYW1zIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgaWYgKFxuICAgICAgXy5kaWZmZXJlbmNlKHJlY2VpdmVkUGFyYW1zLCBwYXJhbXMsIG9wdGlvbmFsUGFyYW1zKS5sZW5ndGggPT09IDAgJiZcbiAgICAgIF8uZGlmZmVyZW5jZShwYXJhbXMsIHJlY2VpdmVkUGFyYW1zKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIC8vIHdlIGhhdmUgYSBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IGlzIGNvcnJlY3RcbiAgICAgIC8vIHNvIHNob3J0LWNpcmN1aXRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IocGFyYW1TZXRzLCByZWNlaXZlZFBhcmFtcyk7XG59XG5cbi8qXG4gKiBUaGlzIG1ldGhvZCB0YWtlcyAzIHBpZWNlcyBvZiBkYXRhOiByZXF1ZXN0IHBhcmFtZXRlcnMgKCdyZXF1ZXN0UGFyYW1zJyksXG4gKiBhIHJlcXVlc3QgSlNPTiBib2R5ICgnanNvbk9iaicpLCBhbmQgJ3BheWxvYWRQYXJhbXMnLCB3aGljaCBpcyB0aGUgc2VjdGlvblxuICogZnJvbSB0aGUgcm91dGUgZGVmaW5pdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGVuZHBvaW50IHdoaWNoIGhhcyBpbnN0cnVjdGlvbnNcbiAqIG9uIGhhbmRsaW5nIHBhcmFtZXRlcnMuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGxcbiAqIGJlIGFwcGxpZWQgdG8gYSBjb21tYW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFyZ3MocmVxdWVzdFBhcmFtcywganNvbk9iaiwgcGF5bG9hZFBhcmFtcywgcHJvdG9jb2wpIHtcbiAgLy8gV2Ugd2FudCB0byBwYXNzIHRoZSBcInVybFwiIHBhcmFtZXRlcnMgdG8gdGhlIGNvbW1hbmRzIGluIHJldmVyc2Ugb3JkZXJcbiAgLy8gc2luY2UgdGhlIGNvbW1hbmQgd2lsbCBzb21ldGltZXMgd2FudCB0byBpZ25vcmUsIHNheSwgdGhlIHNlc3Npb25JZC5cbiAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwdXR0aW5nIHNlc3Npb25JZCBsYXN0LCB3aGljaCBtZWFucyBpbiBKUyB3ZSBjYW5cbiAgLy8gb21pdCBpdCBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaWYgd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdC5cbiAgbGV0IHVybFBhcmFtcyA9IF8ua2V5cyhyZXF1ZXN0UGFyYW1zKS5yZXZlcnNlKCk7XG5cbiAgLy8gSW4gdGhlIHNpbXBsZSBjYXNlLCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgYSBiYXNpYyBhcnJheSBpblxuICAvLyBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkLCBzbyBzdGFydCB0aGVyZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZVxuICAvLyBtdWx0aXBsZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhvdWdoLCBzbyBoYW5kbGUgdGhhdCBjYXNlXG4gIC8vIHRvby5cbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZDtcbiAgaWYgKF8uaXNBcnJheShfLmZpcnN0KHBheWxvYWRQYXJhbXMucmVxdWlyZWQpKSkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhlbiB3ZSB3aWxsIGhhdmUgYW5cbiAgICAvLyBhcnJheSBvZiBhcnJheXMgaW4gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gbG9vcCB0aHJvdWdoIGVhY2ggc2V0IGFuZFxuICAgIC8vIHBpY2sgdGhlIG9uZSB0aGF0IG1hdGNoZXMgd2hpY2ggSlNPTiBwYXJhbXMgd2VyZSBhY3R1YWxseSBzZW50LiBXZSd2ZVxuICAgIC8vIGFscmVhZHkgYmVlbiB0aHJvdWdoIHZhbGlkYXRpb24gc28gd2UncmUgZ3VhcmFudGVlZCB0byBmaW5kIGEgbWF0Y2guXG4gICAgbGV0IGtleXMgPSBfLmtleXMoanNvbk9iaik7XG4gICAgZm9yIChsZXQgcGFyYW1zIG9mIHBheWxvYWRQYXJhbXMucmVxdWlyZWQpIHtcbiAgICAgIGlmIChfLndpdGhvdXQocGFyYW1zLCAuLi5rZXlzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBjb25zdHJ1Y3Qgb3VyIGxpc3Qgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kXG4gIGxldCBhcmdzO1xuICBpZiAoXy5pc0Z1bmN0aW9uKHBheWxvYWRQYXJhbXMubWFrZUFyZ3MpKSB7XG4gICAgLy8gSW4gdGhlIHJvdXRlIHNwZWMsIGEgcGFydGljdWxhciByb3V0ZSBtaWdodCBkZWZpbmUgYSAnbWFrZUFyZ3MnIGZ1bmN0aW9uXG4gICAgLy8gaWYgaXQgd2FudHMgZnVsbCBjb250cm9sIG92ZXIgaG93IHRvIHR1cm4gSlNPTiBwYXJhbWV0ZXJzIGludG8gY29tbWFuZFxuICAgIC8vIGFyZ3VtZW50cy4gU28gd2UgcGFzcyBpdCB0aGUgSlNPTiBwYXJhbWV0ZXJzIGFuZCBpdCByZXR1cm5zIGFuIGFycmF5XG4gICAgLy8gd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBoYW5kbGluZyBjb21tYW5kLiBGb3IgZXhhbXBsZSBpZiBpdCByZXR1cm5zXG4gICAgLy8gWzEsIDIsIDNdLCB3ZSB3aWxsIGNhbGwgYGNvbW1hbmQoMSwgMiwgMywgLi4uKWAgKHVybCBwYXJhbXMgYXJlIHNlcGFyYXRlXG4gICAgLy8gZnJvbSBKU09OIHBhcmFtcyBhbmQgZ2V0IGNvbmNhdGVuYXRlZCBiZWxvdykuXG4gICAgYXJncyA9IHBheWxvYWRQYXJhbXMubWFrZUFyZ3MoanNvbk9iaiwgcHJvdG9jb2wpO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgY29sbGVjdCBhbGwgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBwYXJhbXMgYW5kIGZsYXR0ZW4gdGhlbVxuICAgIC8vIGludG8gYW4gYXJndW1lbnQgYXJyYXlcbiAgICBhcmdzID0gXy5mbGF0dGVuKHJlcXVpcmVkUGFyYW1zKS5tYXAoKHApID0+IGpzb25PYmpbcF0pO1xuICAgIGlmIChwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKSB7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoXy5mbGF0dGVuKHBheWxvYWRQYXJhbXMub3B0aW9uYWwpLm1hcCgocCkgPT4ganNvbk9ialtwXSkpO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbGx5LCBnZXQgb3VyIHVybCBwYXJhbXMgKHNlc3Npb24gaWQsIGVsZW1lbnQgaWQsIGV0Yy4uLikgb24gdGhlIGVuZCBvZlxuICAvLyB0aGUgbGlzdFxuICBhcmdzID0gYXJncy5jb25jYXQodXJsUGFyYW1zLm1hcCgodSkgPT4gcmVxdWVzdFBhcmFtc1t1XSkpO1xuICByZXR1cm4gYXJncztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db3JlfSBkcml2ZXJcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL2V4cHJlc3Mvc2VydmVyJykuUm91dGVDb25maWd1cmluZ0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oZHJpdmVyKSB7XG4gIGlmICghZHJpdmVyLnNlc3Npb25FeGlzdHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYHNlc3Npb25FeGlzdHNgIHByb3BlcnR5Jyk7XG4gIH1cblxuICAvLyBcImV4ZWN1dGVcIiBpc24ndCBkZWZpbmVkIGFueXdoZXJlXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgaWYgKCEoZHJpdmVyLmV4ZWN1dGVDb21tYW5kIHx8IGRyaXZlci5leGVjdXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyBtdXN0IGltcGxlbWVudCBgZXhlY3V0ZUNvbW1hbmRgIG9yIGBleGVjdXRlYCBtZXRob2QnKTtcbiAgfVxuXG4gIC8vIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYWRkIGFsbCB0aGUgcm91dGVzIHRvIHRoZSBkcml2ZXIuIEhlcmUgZXh0cmFNZXRob2RzIG1pZ2h0IGJlXG4gIC8vIHBhc3NlZCBpbiBhcyBkZWZpbmVkIGJ5IEFwcGl1bSBwbHVnaW5zLCBzbyB3ZSBuZWVkIHRvIGFkZCB0aG9zZSB0byB0aGUgZGVmYXVsdCBsaXN0XG4gIHJldHVybiBmdW5jdGlvbiBhZGRSb3V0ZXMoYXBwLCB7YmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSCwgZXh0cmFNZXRob2RNYXAgPSB7fX0gPSB7fSkge1xuICAgIC8vIHN0b3JlIGJhc2VQYXRoIG9uIHRoZSBkcml2ZXIgaW5zdGFuY2Ugc28gaXQgY2FuIHVzZSBpdCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmb3IgZXhhbXBsZSBpbiBkZXRlcm1pbmluZyBwcm94eSBhdm9pZGFuY2VcbiAgICBkcml2ZXIuYmFzZVBhdGggPSBiYXNlUGF0aDtcblxuICAgIGNvbnN0IGFsbE1ldGhvZHMgPSB7Li4uTUVUSE9EX01BUCwgLi4uZXh0cmFNZXRob2RNYXB9O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgbWV0aG9kc10gb2YgXy50b1BhaXJzKGFsbE1ldGhvZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFttZXRob2QsIHNwZWNdIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICAgICAgICAvLyBzZXQgdXAgdGhlIGV4cHJlc3Mgcm91dGUgaGFuZGxlclxuICAgICAgICBidWlsZEhhbmRsZXIoXG4gICAgICAgICAgYXBwLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBgJHtiYXNlUGF0aH0ke3BhdGh9YCxcbiAgICAgICAgICBzcGVjLFxuICAgICAgICAgIGRyaXZlcixcbiAgICAgICAgICBpc1Nlc3Npb25Db21tYW5kKHNwZWMuY29tbWFuZClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSGFuZGxlcihhcHAsIG1ldGhvZCwgcGF0aCwgc3BlYywgZHJpdmVyLCBpc1Nlc3NDbWQpIHtcbiAgbGV0IGFzeW5jSGFuZGxlciA9IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGxldCBqc29uT2JqID0gcmVxLmJvZHk7XG4gICAgbGV0IGh0dHBSZXNCb2R5ID0ge307XG4gICAgbGV0IGh0dHBTdGF0dXMgPSAyMDA7XG4gICAgbGV0IG5ld1Nlc3Npb25JZDtcbiAgICBsZXQgY3VycmVudFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGlmIHRoaXMgaXMgYSBzZXNzaW9uIGNvbW1hbmQgYnV0IHdlIGRvbid0IGhhdmUgYSBzZXNzaW9uLFxuICAgICAgLy8gZXJyb3Igb3V0IGVhcmx5IChlc3BlY2lhbGx5IGJlZm9yZSBwcm94eWluZylcbiAgICAgIGlmIChpc1Nlc3NDbWQgJiYgIWRyaXZlci5zZXNzaW9uRXhpc3RzKHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBkcml2ZXIgaXMgY3VycmVudGx5IHByb3h5aW5nIGNvbW1hbmRzIHRvIGFub3RoZXIgSlNPTldQIHNlcnZlciwgYnlwYXNzIGFsbCBvdXJcbiAgICAgIC8vIGNoZWNrcyBhbmQgYXNzdW1lIHRoZSB1cHN0cmVhbSBzZXJ2ZXIga25vd3Mgd2hhdCBpdCdzIGRvaW5nLiBCdXQga2VlcCB0aGlzIGluIHRoZVxuICAgICAgLy8gdHJ5L2NhdGNoIGJsb2NrIHNvIGlmIHByb3h5aW5nIGl0c2VsZiBmYWlscywgd2UgZ2l2ZSBhIG1lc3NhZ2UgdG8gdGhlIGNsaWVudC4gT2YgY291cnNlIHdlXG4gICAgICAvLyBvbmx5IHdhbnQgdG8gZG8gdGhlc2Ugd2hlbiB3ZSBoYXZlIGEgc2Vzc2lvbiBjb21tYW5kOyB0aGUgQXBwaXVtIGRyaXZlciBtdXN0IGJlXG4gICAgICAvLyByZXNwb25zaWJsZSBmb3Igc3RhcnQvc3RvcCBzZXNzaW9uLCBldGMuLi4gV2UgYWxzbyBhbGxvdyB0aGUgY29tbWFuZCBzcGVjIHRvIGRlY2xhcmUgdGhhdFxuICAgICAgLy8gdGhpcyBjb21tYW5kIHNob3VsZCBuZXZlciBiZSBwcm94aWVkICh3aGljaCBpcyB1c2VmdWwgZm9yIHBsdWdpbiBkZXZlbG9wZXJzIHdobyBhZGRcbiAgICAgIC8vIGNvbW1hbmRzIGFuZCBnZW5lcmFsbHkgd291bGQgbm90IHdhbnQgdGhhdCBjb21tYW5kIHRvIGJlIHByb3hpZWQgaW5zdGVhZCBvZiBoYW5kbGVkIGJ5IHRoZVxuICAgICAgLy8gcGx1Z2luKVxuICAgICAgbGV0IGRpZFBsdWdpbk92ZXJyaWRlUHJveHkgPSBmYWxzZTtcbiAgICAgIGlmIChpc1Nlc3NDbWQgJiYgIXNwZWMubmV2ZXJQcm94eSAmJiBkcml2ZXJTaG91bGREb0p3cFByb3h5KGRyaXZlciwgcmVxLCBzcGVjLmNvbW1hbmQpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZHJpdmVyLnBsdWdpbnNUb0hhbmRsZUNtZCB8fFxuICAgICAgICAgIGRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQoc3BlYy5jb21tYW5kLCByZXEucGFyYW1zLnNlc3Npb25JZCkubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IGRvSndwUHJveHkoZHJpdmVyLCByZXEsIHJlcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgICBgV291bGQgaGF2ZSBwcm94aWVkIGAgK1xuICAgICAgICAgICAgYGNvbW1hbmQgZGlyZWN0bHksIGJ1dCBhIHBsdWdpbiBleGlzdHMgd2hpY2ggbWlnaHQgcmVxdWlyZSBpdHMgdmFsdWUsIHNvIHdpbGwgbGV0IGAgK1xuICAgICAgICAgICAgYGl0cyB2YWx1ZSBiZSBjb2xsZWN0ZWQgaW50ZXJuYWxseSBhbmQgbWFkZSBwYXJ0IG9mIHBsdWdpbiBjaGFpbmBcbiAgICAgICAgKTtcbiAgICAgICAgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGEgY29tbWFuZCBpcyBub3QgaW4gb3VyIG1ldGhvZCBtYXAsIGl0J3MgYmVjYXVzZSB3ZVxuICAgICAgLy8gaGF2ZSBubyBwbGFucyB0byBldmVyIGltcGxlbWVudCBpdFxuICAgICAgaWYgKCFzcGVjLmNvbW1hbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gd3JhcFBhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmopO1xuICAgICAgfVxuXG4gICAgICAvLyB1bndyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMudW53cmFwKSB7XG4gICAgICAgIGpzb25PYmogPSB1bndyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICAvLyB0cnkgdG8gZGV0ZXJtaW5lIHByb3RvY29sIGJ5IHNlc3Npb24gY3JlYXRpb24gYXJncywgc28gd2UgY2FuIHRocm93IGFcbiAgICAgICAgLy8gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9yIGlmIGFyZ3VtZW50cyB2YWxpZGF0aW9uIGZhaWxzXG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKFxuICAgICAgICAgIG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGpzb24gcGF5bG9hZCBjb25mb3JtcyB0byB0aGUgc3BlY1xuICAgICAgY2hlY2tQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqLCBjdXJyZW50UHJvdG9jb2wpO1xuXG4gICAgICAvLyB0dXJuIHRoZSBjb21tYW5kIGFuZCBqc29uIHBheWxvYWQgaW50byBhbiBhcmd1bWVudCBsaXN0IGZvclxuICAgICAgLy8gdGhlIGRyaXZlciBtZXRob2RzXG4gICAgICBsZXQgYXJncyA9IG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSwgY3VycmVudFByb3RvY29sKTtcbiAgICAgIGxldCBkcml2ZXJSZXM7XG4gICAgICAvLyB2YWxpZGF0ZSBjb21tYW5kIGFyZ3MgYWNjb3JkaW5nIHRvIE1KU09OV1BcbiAgICAgIGlmICh2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0pIHtcbiAgICAgICAgdmFsaWRhdG9yc1tzcGVjLmNvbW1hbmRdKC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBydW4gdGhlIGRyaXZlciBjb21tYW5kIHdyYXBwZWQgaW5zaWRlIHRoZSBhcmd1bWVudCB2YWxpZGF0b3JzXG4gICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoXG4gICAgICAgIGBDYWxsaW5nIGAgK1xuICAgICAgICAgIGAke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfS4ke3NwZWMuY29tbWFuZH0oKSB3aXRoIGFyZ3M6IGAgK1xuICAgICAgICAgIF8udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KVxuICAgICAgKTtcblxuICAgICAgaWYgKGRpZFBsdWdpbk92ZXJyaWRlUHJveHkpIHtcbiAgICAgICAgLy8gVE9ETyBmb3Igbm93IHdlIGFkZCB0aGlzIGluZm9ybWF0aW9uIG9uIHRoZSBhcmdzIGxpc3QsIGJ1dCB0aGF0J3MgbWl4aW5nIHB1cnBvc2VzIGhlcmUuXG4gICAgICAgIC8vIFdlIHJlYWxseSBzaG91bGQgYWRkIGFub3RoZXIgJ29wdGlvbnMnIHBhcmFtZXRlciB0byAnZXhlY3V0ZUNvbW1hbmQnLCBidXQgdGhpcyB3b3VsZCBiZVxuICAgICAgICAvLyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgYWxsIGRyaXZlcnMgc28gd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGNhcmVmdWxseS5cbiAgICAgICAgYXJncy5wdXNoKHtyZXFGb3JQcm94eTogcmVxfSk7XG4gICAgICB9XG5cbiAgICAgIGRyaXZlclJlcyA9IGF3YWl0IGRyaXZlci5leGVjdXRlQ29tbWFuZChzcGVjLmNvbW1hbmQsIC4uLmFyZ3MpO1xuXG4gICAgICAvLyBHZXQgdGhlIHByb3RvY29sIGFmdGVyIGV4ZWN1dGVDb21tYW5kXG4gICAgICBjdXJyZW50UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkgfHwgY3VycmVudFByb3RvY29sO1xuXG4gICAgICAvLyBJZiBgZXhlY3V0ZUNvbW1hbmRgIHdhcyBvdmVycmlkZGVuIGFuZCB0aGUgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0XG4gICAgICAvLyB3aXRoIGEgcHJvdG9jb2wgYW5kIHZhbHVlL2Vycm9yIHByb3BlcnR5LCByZS1hc3NpZ24gdGhlIHByb3RvY29sXG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGRyaXZlclJlcykgJiYgXy5oYXMoZHJpdmVyUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgICBjdXJyZW50UHJvdG9jb2wgPSBkcml2ZXJSZXMucHJvdG9jb2wgfHwgY3VycmVudFByb3RvY29sO1xuICAgICAgICBpZiAoZHJpdmVyUmVzLmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZHJpdmVyUmVzLmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGRyaXZlclJlcyA9IGRyaXZlclJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdW5wYWNrIGNyZWF0ZVNlc3Npb24gcmVzcG9uc2VcbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgbmV3U2Vzc2lvbklkID0gZHJpdmVyUmVzWzBdO1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCBuZXdTZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICAgIGBDYWNoZWQgdGhlIHByb3RvY29sIHZhbHVlICcke2N1cnJlbnRQcm90b2NvbH0nIGZvciB0aGUgbmV3IHNlc3Npb24gJHtuZXdTZXNzaW9uSWR9YFxuICAgICAgICApO1xuICAgICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUCkge1xuICAgICAgICAgIGRyaXZlclJlcyA9IGRyaXZlclJlc1sxXTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSB7XG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IGRyaXZlclJlc1sxXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRyaXZlclJlcyA9IGZvcm1hdFJlc3BvbnNlVmFsdWUoZHJpdmVyUmVzKTtcblxuICAgICAgLy8gZGVsZXRlIHNob3VsZCBub3QgcmV0dXJuIGFueXRoaW5nIGV2ZW4gaWYgc3VjY2Vzc2Z1bFxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoXG4gICAgICAgICAgYFJlY2VpdmVkIHJlc3BvbnNlOiAke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZHJpdmVyUmVzKSwge1xuICAgICAgICAgICAgbGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RILFxuICAgICAgICAgIH0pfWBcbiAgICAgICAgKTtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKCdCdXQgZGVsZXRpbmcgc2Vzc2lvbiwgc28gbm90IHJldHVybmluZycpO1xuICAgICAgICBkcml2ZXJSZXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgc3RhdHVzIGlzIG5vdCAwLCAgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGZvciBzdGF0dXMgY29kZS5cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcykpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzLnN0YXR1cykgJiZcbiAgICAgICAgICAhaXNOYU4oZHJpdmVyUmVzLnN0YXR1cykgJiZcbiAgICAgICAgICBwYXJzZUludChkcml2ZXJSZXMuc3RhdHVzLCAxMCkgIT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoZHJpdmVyUmVzLnN0YXR1cywgZHJpdmVyUmVzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzLnZhbHVlKSAmJiBkcml2ZXJSZXMudmFsdWUuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvckZyb21XM0NKc29uQ29kZShcbiAgICAgICAgICAgIGRyaXZlclJlcy52YWx1ZS5lcnJvcixcbiAgICAgICAgICAgIGRyaXZlclJlcy52YWx1ZS5tZXNzYWdlLFxuICAgICAgICAgICAgZHJpdmVyUmVzLnZhbHVlLnN0YWNrdHJhY2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5LnZhbHVlID0gZHJpdmVyUmVzO1xuICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgYFJlc3BvbmRpbmcgYCArXG4gICAgICAgICAgYHRvIGNsaWVudCB3aXRoIGRyaXZlci4ke3NwZWMuY29tbWFuZH0oKSByZXN1bHQ6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7XG4gICAgICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICAgICAgfSl9YFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcsIGZpZ3VyZSBvdXQgd2hhdCBvdXIgcmVzcG9uc2Ugc2hvdWxkIGJlXG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IHdlIGVuY291bnRlcmVkXG4gICAgICBsZXQgYWN0dWFsRXJyID0gZXJyO1xuXG4gICAgICBjdXJyZW50UHJvdG9jb2wgPVxuICAgICAgICBjdXJyZW50UHJvdG9jb2wgfHwgZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKTtcblxuICAgICAgbGV0IGVyck1zZyA9IGVyci5zdGFja3RyYWNlIHx8IGVyci5zdGFjaztcbiAgICAgIGlmICghXy5pbmNsdWRlcyhlcnJNc2csIGVyci5tZXNzYWdlKSkge1xuICAgICAgICAvLyBpZiB0aGUgbWVzc2FnZSBoYXMgbW9yZSBpbmZvcm1hdGlvbiwgYWRkIGl0LiBidXQgb2Z0ZW4gdGhlIG1lc3NhZ2VcbiAgICAgICAgLy8gaXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0YWNrIHRyYWNlXG4gICAgICAgIGVyck1zZyA9IGAke2Vyci5tZXNzYWdlfSR7ZXJyTXNnID8gJ1xcbicgKyBlcnJNc2cgOiAnJ31gO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBhY3R1YWxFcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCkuZGVidWcoXG4gICAgICAgICAgYEVuY291bnRlcmVkIGludGVybmFsIGVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlcnJNc2d9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldID0gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcihhY3R1YWxFcnIpO1xuICAgIH1cblxuICAgIC8vIGRlY29kZSB0aGUgcmVzcG9uc2UsIHdoaWNoIGlzIGVpdGhlciBhIHN0cmluZyBvciBqc29uXG4gICAgaWYgKF8uaXNTdHJpbmcoaHR0cFJlc0JvZHkpKSB7XG4gICAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpLnNlbmQoaHR0cFJlc0JvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3U2Vzc2lvbklkKSB7XG4gICAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgICBodHRwUmVzQm9keS52YWx1ZS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHR0cFJlc0JvZHkuc2Vzc2lvbklkID0gbmV3U2Vzc2lvbklkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBzZXNzaW9uSWQgaW4gVzNDIHJlc3BvbnNlc1xuICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICBkZWxldGUgaHR0cFJlc0JvZHkuc2Vzc2lvbklkO1xuICAgICAgfVxuXG4gICAgICBodHRwUmVzQm9keSA9IGZvcm1hdFN0YXR1cyhodHRwUmVzQm9keSk7XG4gICAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpLmpzb24oaHR0cFJlc0JvZHkpO1xuICAgIH1cbiAgfTtcbiAgLy8gYWRkIHRoZSBtZXRob2QgdG8gdGhlIGFwcFxuICBhcHBbbWV0aG9kLnRvTG93ZXJDYXNlKCldKHBhdGgsIChyZXEsIHJlcykgPT4ge1xuICAgIEIucmVzb2x2ZShhc3luY0hhbmRsZXIocmVxLCByZXMpKS5kb25lKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkcml2ZXJTaG91bGREb0p3cFByb3h5KGRyaXZlciwgcmVxLCBjb21tYW5kKSB7XG4gIC8vIGRyaXZlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNheSB3aGVuIHRoZSBwcm94eSBpcyBhY3RpdmVcbiAgaWYgKCFkcml2ZXIucHJveHlBY3RpdmUocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIG5ldmVyIHByb3h5IGRlbGV0ZVNlc3Npb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGdpdmUgdGhlIGNvbnRhaW5pbmdcbiAgLy8gZHJpdmVyIGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIGl0c2VsZiB1cFxuICBpZiAoY29tbWFuZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGF2b2lkYW5jZSBzY2hlbWEsIGFuZCBzYXkgd2Ugc2hvdWxkbid0IHByb3h5IGlmIGFueXRoaW5nIGluIHRoZVxuICAvLyBhdm9pZCBsaXN0IG1hdGNoZXMgb3VyIHJlcVxuICBpZiAoZHJpdmVyLnByb3h5Um91dGVJc0F2b2lkZWQocmVxLnBhcmFtcy5zZXNzaW9uSWQsIHJlcS5tZXRob2QsIHJlcS5vcmlnaW5hbFVybCwgcmVxLmJvZHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvSndwUHJveHkoZHJpdmVyLCByZXEsIHJlcykge1xuICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuaW5mbyhcbiAgICAnRHJpdmVyIHByb3h5IGFjdGl2ZSwgcGFzc2luZyByZXF1ZXN0IG9uIHZpYSBIVFRQIHByb3h5J1xuICApO1xuXG4gIC8vIGNoZWNrIHRoYXQgdGhlIGlubmVyIGRyaXZlciBoYXMgYSBwcm94eSBmdW5jdGlvblxuICBpZiAoIWRyaXZlci5jYW5Qcm94eShyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBwcm94eSB0byBhIHNlcnZlciBidXQgdGhlIGRyaXZlciBpcyB1bmFibGUgdG8gcHJveHknKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGRyaXZlci5leGVjdXRlQ29tbWFuZCgncHJveHlSZXFSZXMnLCByZXEsIHJlcywgcmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuUHJveHlSZXF1ZXN0RXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHByb3h5LiBQcm94eSBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICBpc1Nlc3Npb25Db21tYW5kLFxuICBkcml2ZXJTaG91bGREb0p3cFByb3h5LFxuICBkZXRlcm1pbmVQcm90b2NvbCxcbiAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCxcbiAgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbiAgR0VUX1NUQVRVU19DT01NQU5ELFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxXQUEzQjs7O0FBRUEsU0FBU0MsaUJBQVQsQ0FBMkJDLGlCQUEzQixFQUE4QztFQUM1QyxPQUFPQyxlQUFBLENBQUVDLElBQUYsQ0FBT0YsaUJBQVAsRUFBMEJHLHVCQUExQixJQUF1Q0Msb0JBQUEs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
|