oxygen-cli 1.40.2 → 1.41.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/CHANGELOG.md
CHANGED
package/build/errors/helper.js
CHANGED
|
@@ -36,6 +36,7 @@ const ERROR_CODES = {
|
|
|
36
36
|
DB_QUERY_ERROR: 'DB_QUERY_ERROR',
|
|
37
37
|
SOAP_ERROR: 'SOAP_ERROR',
|
|
38
38
|
SHELL_ERROR: 'SHELL_ERROR',
|
|
39
|
+
MONGODB_ERROR: 'MONGODB_ERROR',
|
|
39
40
|
NOT_IMPLEMENTED_ERROR: 'NOT_IMPLEMENTED_ERROR',
|
|
40
41
|
SERIAL_PORT_ERROR: 'SERIAL_PORT_ERROR',
|
|
41
42
|
HTTP_ERROR: 'HTTP_ERROR',
|
|
@@ -296,4 +297,4 @@ function extractOriginalError(msg) {
|
|
|
296
297
|
|
|
297
298
|
return msg;
|
|
298
299
|
}
|
|
299
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJTSEVMTF9FUlJPUiIsIk5PVF9JTVBMRU1FTlRFRF9FUlJPUiIsIlNFUklBTF9QT1JUX0VSUk9SIiwiSFRUUF9FUlJPUiIsIkVNQUlMX0VSUk9SIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsIkRFVklDRV9OT1RfRk9VTkQiLCJQQVJBTUVURVJTX0VSUk9SIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IiLCJBUFBJVU1fQ09OTkVDVElPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX0VSUk9SIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNSWVBUT19FUlJPUiIsIkROU19FUlJPUiIsIkNJUkNVTEFSX0VSUk9SIiwiWE1MX0VSUk9SIiwiSkFWQVNDUklQVF9FUlJPUiIsIkNIQUlfRVJST1JfQ09ERVMiLCJBc3NlcnRpb25FcnJvciIsIlNDUklQVF9FUlJPUl9DT0RFUyIsIlR5cGVFcnJvciIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImVyciIsIk94RXJyb3IiLCJnZXRPeHlnZW5FcnJvciIsInR5cGUiLCJtZXNzYWdlIiwiZGF0YSIsImxvY2F0aW9uIiwic3RhY2t0cmFjZSIsImdldERiRXJyb3JNZXNzYWdlIiwib2RiY0Vycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJjbWQiLCJhcmdzIiwiZXJyVHlwZSIsIm5hbWUiLCJpbmNsdWRlcyIsIm1hdGNoZXMiLCJtYXRjaCIsInN0YXJ0c1dpdGgiLCJleHRyYWN0T3JpZ2luYWxFcnJvciIsIk9SSUdJTkFMX0VSUk9SX01FU1NBR0UiLCJpbnNwZWN0IiwiY29kZSIsImVyck1lc3NhZ2UiLCJyZXBsYWNlIiwib3hFcnJvckNvZGUiLCJBU1NFUlQiLCJpbmRleE9mIiwiVkVSSUZZIiwiY29uc29sZSIsImxvZyIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiaWVab29tRXJyb3JNc2ciLCJ0b1N0cmluZyIsImNocm9tZURyaXZlck1zZyIsImdldEFwcGl1bUluaXRFcnJvciIsImdldEFzc2VydEVycm9yIiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJpc0ZhdGFsIiwidW5kZWZpbmVkIiwiZ2V0VmVyaWZ5RXJyb3IiLCJlcnJvckNvZGUiLCJVTktOT1dOX0VSUk9SX01FU1NBR0UiLCJtc2ciLCJlcnJvckluZGV4MSIsImVycm9ySW5kZXgyIiwic3Vic3RyaW5nIiwidW5rbm93bkVycm9ySW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7OztBQUNBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FERTtBQUVoQkMsRUFBQUEsYUFBYSxFQUFFLGVBRkM7QUFHaEJDLEVBQUFBLFlBQVksRUFBRSxjQUhFO0FBSWhCQyxFQUFBQSxTQUFTLEVBQUUsV0FKSztBQUtoQkMsRUFBQUEsWUFBWSxFQUFFLGNBTEU7QUFNaEJDLEVBQUFBLGlCQUFpQixFQUFFLG1CQU5IO0FBT2hCQyxFQUFBQSxlQUFlLEVBQUUsaUJBUEQ7QUFRaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQVJQO0FBU2hCQyxFQUFBQSx1QkFBdUIsRUFBRSx5QkFUVDtBQVVoQkMsRUFBQUEsbUJBQW1CLEVBQUUscUJBVkw7QUFXaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQVhWO0FBWWhCQyxFQUFBQSxpQ0FBaUMsRUFBRSxtQ0FabkI7QUFhaEJDLEVBQUFBLG9CQUFvQixFQUFFLHNCQWJOO0FBY2hCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFkVjtBQWVoQkMsRUFBQUEsT0FBTyxFQUFFLFNBZk87QUFnQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFoQkY7QUFpQmhCQyxFQUFBQSxxQkFBcUIsRUFBRSx1QkFqQlA7QUFrQmhC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RCxXQUFXLEdBQUcsQ0FBQyxDQUFmLEdBQW1CQSxXQUFuQixHQUFpQ0QsV0FBbEMsSUFBa0R6QixzQkFBc0IsQ0FBQ1osTUFBdkYsQ0FBTjtBQUdBLE1BQUl3QyxpQkFBaUIsR0FBR0osR0FBRyxDQUFDakIsT0FBSixDQUFZZ0IscUJBQVosQ0FBeEI7O0FBQ0EsTUFBSUssaUJBQWlCLEdBQUcsQ0FBQyxDQUF6QixFQUE0QjtBQUN4QixXQUFPSixHQUFHLENBQUNHLFNBQUosQ0FBY0MsaUJBQWlCLEdBQUdMLHFCQUFxQixDQUFDbkMsTUFBeEQsQ0FBUDtBQUNIOztBQUVELFNBQU9vQyxHQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBoYW5kbGluZyBhbmQgY29udmVydGluZyB2YXJpb3VzIGVycm9yIHR5cGVzXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi9PeHlnZW5FcnJvcic7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcblxyXG5jb25zdCBFUlJPUl9DT0RFUyA9IHtcclxuICAgIFNDUklQVF9FUlJPUjogJ1NDUklQVF9FUlJPUicsXHJcbiAgICBVTktOT1dOX0VSUk9SOiAnVU5LTk9XTl9FUlJPUicsXHJcbiAgICBBU1NFUlRfRVJST1I6ICdBU1NFUlRfRVJST1InLFxyXG4gICAgUERGX0VSUk9SOiAnUERGX0VSUk9SJyxcclxuICAgIFZFUklGWV9FUlJPUjogJ1ZFUklGWV9FUlJPUicsXHJcbiAgICBFTEVNRU5UX05PVF9GT1VORDogJ0VMRU1FTlRfTk9UX0ZPVU5EJyxcclxuICAgIEZSQU1FX05PVF9GT1VORDogJ0ZSQU1FX05PVF9GT1VORCcsXHJcbiAgICBVTktOT1dOX0NPTU1BTkRfRVJST1I6ICdVTktOT1dOX0NPTU1BTkRfRVJST1InLFxyXG4gICAgU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0U6ICdTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRScsXHJcbiAgICBFTEVNRU5UX05PVF9WSVNJQkxFOiAnRUxFTUVOVF9OT1RfVklTSUJMRScsXHJcbiAgICBFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEU6ICdFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUnLFxyXG4gICAgTE9DQVRPUl9NQVRDSEVTX01VTFRJUExFX0VMRU1FTlRTOiAnTE9DQVRPUl9NQVRDSEVTX01VTFRJUExFX0VMRU1FTlRTJyxcclxuICAgIEVMRU1FTlRfU1RJTExfRVhJU1RTOiAnRUxFTUVOVF9TVElMTF9FWElTVFMnLFxyXG4gICAgQlJPV1NFUl9KU19FWEVDVVRFX0VSUk9SOiAnQlJPV1NFUl9KU19FWEVDVVRFX0VSUk9SJyxcclxuICAgIFRJTUVPVVQ6ICdUSU1FT1VUJyxcclxuICAgIFdJTkRPV19OT1RfRk9VTkQ6ICdXSU5ET1dfTk9UX0ZPVU5EJyxcclxuICAgIFVORVhQRUNURURfQUxFUlRfT1BFTjogJ1VORVhQRUNURURfQUxFUlRfT1BFTicsXHJcbiAgICBOT19BTEVSVF9PUEVOX0VSUk9SOiAnTk9fQUxFUlRfT1BFTl9FUlJPUicsXHJcbiAgICBNQUlMSU5BVE9SX0VSUk9SOiAnTUFJTElOQVRPUl9FUlJPUicsXHJcbiAgICBBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1I6ICdBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1InLFxyXG4gICAgU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1I6ICdTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUicsXHJcbiAgICBDSFJPTUVEUklWRVJfRVJST1I6ICdDSFJPTUVEUklWRVJfRVJST1InLFxyXG4gICAgV0VCRFJJVkVSX0VSUk9SOiAnV0VCRFJJVkVSX0VSUk9SJyxcclxuICAgIERCX0NPTk5FQ1RJT05fRVJST1I6ICdEQl9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIERCX1FVRVJZX0VSUk9SOiAnREJfUVVFUllfRVJST1InLFxyXG4gICAgU09BUF9FUlJPUjogJ1NPQVBfRVJST1InLFxyXG4gICAgU0hFTExfRVJST1I6ICdTSEVMTF9FUlJPUicsXHJcbiAgICBOT1RfSU1QTEVNRU5URURfRVJST1I6ICdOT1RfSU1QTEVNRU5URURfRVJST1InLFxyXG4gICAgU0VSSUFMX1BPUlRfRVJST1I6ICdTRVJJQUxfUE9SVF9FUlJPUicsXHJcbiAgICBIVFRQX0VSUk9SOiAnSFRUUF9FUlJPUicsXHJcbiAgICBFTUFJTF9FUlJPUjogJ0VNQUlMX0VSUk9SJyxcclxuICAgIE1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1I6ICdNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SJyxcclxuICAgIERFVklDRV9OT1RfRk9VTkQ6ICdERVZJQ0VfTk9UX0ZPVU5EJyxcclxuICAgIFBBUkFNRVRFUlNfRVJST1I6ICdQQVJBTUVURVJTX0VSUk9SJyxcclxuICAgIElOVkFMSURfQ0FQQUJJTElUSUVTOiAnSU5WQUxJRF9DQVBBQklMSVRJRVMnLFxyXG4gICAgQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SOiAnQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9DT05ORUNUSU9OX0VSUk9SOiAnQVBQSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fRVJST1I6ICdBUFBJVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fU0VTU0lPTl9USU1FT1VUOiAnQVBQSVVNX1NFU1NJT05fVElNRU9VVCcsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX0VSUk9SOiAnU0VMRU5JVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQ6ICdTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUjogJ1NFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgVVJMX09QRU5fRVJST1I6ICdVUkxfT1BFTl9FUlJPUicsXHJcbiAgICBPUFRJT05fTk9UX0ZPVU5EOiAnT1BUSU9OX05PVF9GT1VORCcsXHJcbiAgICBBVFRSSUJVVEVfTk9UX0ZPVU5EOiAnQVRUUklCVVRFX05PVF9GT1VORCcsXHJcbiAgICBFTEVNRU5UX1NUQVRFX0VSUk9SOiAnRUxFTUVOVF9TVEFURV9FUlJPUicsXHJcbiAgICBNT0JJTEVfQ09OVEVYVF9FUlJPUjogJ01PQklMRV9DT05URVhUX0VSUk9SJyxcclxuICAgIEFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUjogJ0FQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUicsXHJcbiAgICBUV0lMSU9fRVJST1I6ICdUV0lMSU9fRVJST1InLFxyXG4gICAgSE9PS19FUlJPUjogJ0hPT0tfRVJST1InLFxyXG4gICAgTk9UX1NVUFBPUlRFRDogJ05PVF9TVVBQT1JURUQnLFxyXG4gICAgQVNTRVJUX1BBU1NFRDogJ0FTU0VSVF9QQVNTRUQnLFxyXG4gICAgTU9EVUxFX05PVF9GT1VORDogJ01PRFVMRV9OT1RfRk9VTkQnLFxyXG4gICAgRklMRV9CUk9XU0VfRVJST1I6ICdGSUxFX0JST1dTRV9FUlJPUicsXHJcbiAgICBDU1ZfRVJST1I6ICdDU1ZfRVJST1InLFxyXG4gICAgQ1JZUFRPX0VSUk9SOiAnQ1JZUFRPX0VSUk9SJyxcclxuICAgIEROU19FUlJPUjogJ0ROU19FUlJPUicsXHJcbiAgICBDSVJDVUxBUl9FUlJPUjogJ0NJUkNVTEFSX0VSUk9SJyxcclxuICAgIFhNTF9FUlJPUjogJ1hNTF9FUlJPUicsXHJcbiAgICBKQVZBU0NSSVBUX0VSUk9SOiAnSkFWQVNDUklQVF9FUlJPUidcclxufTtcclxuXHJcbi8vIENoYWkgdG8gT3h5Z2VuIGVycm9yIGNvZGVzIG1hcHBpbmdcclxuY29uc3QgQ0hBSV9FUlJPUl9DT0RFUyA9IHtcclxuICAgIEFzc2VydGlvbkVycm9yOiBFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1JcclxufTtcclxuXHJcbi8vIEdlbmVyYWwgSmF2YVNjcmlwdCBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IFNDUklQVF9FUlJPUl9DT0RFUyA9IHtcclxuICAgIFR5cGVFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG4gICAgU3ludGF4RXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFJlZmVyZW5jZUVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGdldEZhaWx1cmVGcm9tRXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICghZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSkge1xyXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmdldE94eWdlbkVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IGVyci50eXBlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgICAgICAgICAgZGF0YTogZXJyLmRhdGEsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uOiBlcnIubG9jYXRpb24sXHJcbiAgICAgICAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGdldERiRXJyb3JNZXNzYWdlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVyciAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycyAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGVyci5vZGJjRXJyb3JzKSAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVyci5vZGJjRXJyb3JzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJzogJyAraXRlbS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfSxcclxuICAgIGdldE94eWdlbkVycm9yOiBmdW5jdGlvbihlcnIsIG1vZHVsZSwgY21kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBlcnJvciBhcyBpcyBpZiBpdCBoYXMgYmVlbiBhbHJlYWR5IHByb2Nlc3NlZFxyXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZXJyVHlwZSA9IGVyci50eXBlIHx8IGVyci5uYW1lIHx8IHR5cGVvZiBlcnI7XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiQ2FuJ3QgY2FsbCA8Y29tbWFuZD4gb24gZWxlbWVudCB3aXRoIHNlbGVjdG9yIDxzZWxlY3Rvcj4gYmVjYXVzZSBlbGVtZW50IHdhc24ndCBmb3VuZFwiXHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdiZWNhdXNlIGVsZW1lbnQgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIGFyZ3VtZW50OiBVbnN1cHBvcnRlZCBsb2NhdG9yIHN0cmF0ZWd5OiAtYW5kcm9pZCB1aWF1dG9tYXRvclwiIGZvciBtb2JpbGUuXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gbm90IHVzaW5nIHRoZSBjb3JyZWN0IGNvbnRleHRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneScpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goL2ludmFsaWQgYXJndW1lbnQ6ICguKikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0JJTEVfQ09OVEVYVF9FUlJPUiwgKG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSArXHJcbiAgICAgICAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtb2JpbGUgY29udGV4dC4gU2VlIG1vYi5zZXROYXRpdmVDb250ZXh0IGFuZCBtb2Iuc2V0V2ViVmlld0NvbnRleHQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSBcImludmFsaWQgc2VsZWN0b3I6IFVuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uXCJcclxuICAgICAgICAvLyB1c3VhbGx5IGR1ZSB0byBpbnZhbGlkIHhwYXRoXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFRoZSBzdHJpbmcgJy4qJyBpcyBub3QgYSB2YWxpZCBYUGF0aCBleHByZXNzaW9uLikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gQ2hyb21lL0lFLiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBjc3MgbG9jYXRvciBvbiBGaXJlZm94LiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbiBcIi4qXCIgaXMgaW52YWxpZCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSB2YXJpb3VzIHR5cGVzIG9mICdPcmlnaW5hbCBlcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcyhPUklHSU5BTF9FUlJPUl9NRVNTQUdFKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgVVJMIGluIG9wZW4gY29tbWFuZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIFVSTCcpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyggSW52YWxpZCBVUkw6IC4qJCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBvbiBtb2JpbGUgQ2hyb21lIHdoZW4gZWxlbWVudCBpcyBvdmVybGFwcGVkIGJ5IGFub3RoZXIgZWxlbWVudFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9lbGVtZW50IGNsaWNrIGludGVyY2VwdGVkOiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfVklTSUJMRSwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBiZWNhdXNlIFNlbGVuaXVtIGhhcyBraWxsZWQgdGhlIHNlc3Npb24gZHVlIHRvIGV4Y2VlZGluZyAnLXRpbWVvdXQnIHRpbWVvdXRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdObyBhY3RpdmUgc2Vzc2lvbiB3aXRoIElEJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fRVJST1IsICdFeGVjdXRpb24gdGltZSBleGNlZWRlZCB0aGUgdGltZW91dCBzZXQgYnkgU2VsZW5pdW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkcml2ZXIgKElFRHJpdmVyU2VydmVyLCBDaHJvbWVEcml2ZXIsIGV0YykgY3Jhc2hlc1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjogQ29ubmVjdGlvbiByZWZ1c2VkOiBjb25uZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0VCRFJJVkVSX0VSUk9SLCAnVGhlIHVuZGVybHlpbmcgV2ViRHJpdmVyIHNlZW1zIHRvIGhhdmUgY3Jhc2hlZDogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhbGUgZWxlbWVudCByZWZlcmVuY2VcclxuICAgICAgICBlbHNlIGlmIChlcnIubmFtZSAmJiBlcnIubmFtZS5pbmNsdWRlcygnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UsIGVyci5uYW1lICsgJyAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIuY29kZSAmJiBlcnIuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0RVTEVfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICB3aGVuIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiBhbiBlbGVtZW50IChlLmcuIGNsaWNrKSBidXQgdGhlIHdpbmRvdyB3YXMgYWxyZWFkeSBjbG9zZWRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnbm8gc3VjaCB3aW5kb3cnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygndGFyZ2V0IHdpbmRvdyBhbHJlYWR5IGNsb3NlZCcpICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd3ZWIgdmlldyBub3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0lORE9XX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBleGFtcGxlOiBUaGUgZWxlbWVudCB3aXRoIHNlbGVjdG9yICoqKiB5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2Fzbid0IGZvdW5kXHJcbiAgICAgICAgLy8gd2hlbiBlbGVtZW50IHdhcyBkZWxldGVkIGZyb20gRE9NXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3lvdSB0cnlpbmcgdG8gcGFzcyBpbnRvIHRoZSBleGVjdXRlIG1ldGhvZCB3YXNuXFwndCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3aGVuIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiBhbiBlbGVtZW50IHJlZmVyZW5jZSAoZS5nLiBjbGljaykgYnV0IHRoZSBwYWdlIHdhcyBhbHJlYWR5IGNoYW5nZWRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnZWxlbWVudCBub3QgaW50ZXJhY3RhYmxlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRSwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGNsaWNrYWJsZSBhZnRlcicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBzZWxlY3RvcjogamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbXBpbGUgc2VsZWN0b3IgLi4uXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm5hbWUgPT09ICdpbnZhbGlkIHNlbGVjdG9yJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlcXVlc3RFcnJvcjogVGltZW91dCBhd2FpdGluZyAncmVxdWVzdCcgZm9yIDMxMDAwMG1zLCBuYW1lOiAnVGltZW91dEVycm9yJ1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdUaW1lb3V0IGF3YWl0aW5nIFxcJ3JlcXVlc3RcXCcgZm9yJykpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoXHJcbiAgICAgICAgICAgICAgICAnVGltZW91dCBhd2FpdGluZyBcXCdyZXF1ZXN0XFwnIGZvcicsXHJcbiAgICAgICAgICAgICAgICAnQ291bGRuXFwndCBnZXQgYSByZXNwb25zZSBmcm9tIFNlbGVuaXVtL1dlYkRyaXZlciB3aXRoaW4nXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihtb2R1bGUgPT09ICd3ZWInID8gRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIDogRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyciAmJiBlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnc29ja2V0IGhhbmcgdXAnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IobW9kdWxlID09PSAnd2ViJyA/IEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCA6IEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2phdmFzY3JpcHQgZXJyb3InKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuSkFWQVNDUklQVF9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhcHBpdW1cclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCBvbiB0aGUgcGFnZSB1c2luZyB0aGUgZ2l2ZW4gc2VhcmNoIHBhcmFtZXRlcnMnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIENoYWkgZXJyb3IgY29kZVxyXG4gICAgICAgIHZhciBveEVycm9yQ29kZSA9IENIQUlfRVJST1JfQ09ERVNbZXJyVHlwZV07XHJcbiAgICAgICAgaWYgKG94RXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93IG5vbi1mYXRhbCBlcnJvciBpZiBpdCdzIGEgXCJ2ZXJpZnlcIiBtb2R1bGUgb3IgbWV0aG9kIFxyXG4gICAgICAgICAgICBpZiAob3hFcnJvckNvZGUgPT09IEVSUk9SX0NPREVTLkFTU0VSVCAmJlxyXG5cdFx0XHRcdChtb2R1bGUgPT09ICd2ZXJpZnknIHx8IGNtZC5pbmRleE9mKCd2ZXJpZnknKSA9PT0gMCkpIHsgLy8gdmVyaWZ5LiosICoudmVyaWZ5KlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlZFUklGWSwgZXJyLm1lc3NhZ2UsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3Iob3hFcnJvckNvZGUsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgSmF2YVNjcmlwdCBlcnJvciBjb2RlXHJcbiAgICAgICAgb3hFcnJvckNvZGUgPSBTQ1JJUFRfRVJST1JfQ09ERVNbZXJyVHlwZV07XHJcbiAgICAgICAgaWYgKG94RXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93IG5vbi1mYXRhbCBlcnJvciBpZiBpdCdzIGEgXCJ2ZXJpZnlcIiBtb2R1bGUgb3IgbWV0aG9kIFxyXG4gICAgICAgICAgICBpZiAob3hFcnJvckNvZGUgPT09IEVSUk9SX0NPREVTLkFTU0VSVCAmJlxyXG5cdFx0XHRcdChtb2R1bGUgPT09ICd2ZXJpZnknIHx8IGNtZC5pbmRleE9mKCd2ZXJpZnknKSA9PT0gMCkpIHsgLy8gdmVyaWZ5LiosICoudmVyaWZ5KlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlZFUklGWSwgZXJyLm1lc3NhZ2UsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3Iob3hFcnJvckNvZGUsIGVyci5tZXNzYWdlIHx8IG51bGwsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVyck1lc3NhZ2UgPSBlcnIubWVzc2FnZSA/IGAke2VyclR5cGV9OiAke2Vyci5tZXNzYWdlfWAgOiBgJHtlcnJUeXBlfWA7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyck1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpLCB0cnVlLCBlcnIpO1xyXG4gICAgfSxcclxuICAgIGdldFNlbGVuaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdmFyIGllWm9vbUVycm9yTXNnID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhVbmV4cGVjdGVkIGVycm9yIGxhdW5jaGluZyBJbnRlcm5ldCBFeHBsb3JlclxcLiBCcm93c2VyIHpvb20gbGV2ZWwgd2FzIHNldCB0byBcXGQrJVxcLiBJdCBzaG91bGQgYmUgc2V0IHRvIFxcZCslKS9nbSk7XHJcbiAgICAgICAgICAgIGlmIChpZVpvb21FcnJvck1zZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkJST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUiwgaWVab29tRXJyb3JNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTogQ2hyb21lRHJpdmVyU2VydmljZScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOicpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1IsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY2hyb21lRHJpdmVyTXNnID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGlzIHZlcnNpb24gb2YgQ2hyb21lRHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24gWzAtOV0qKS9nbSk7XHJcbiAgICAgICAgICAgIGlmIChjaHJvbWVEcml2ZXJNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGNocm9tZURyaXZlck1zZy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgJ0Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJyB8fCBlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnIHx8IGVyci5jb2RlID09PSAnRU5PVEZPVU5EJyB8fCBlcnIubWVzc2FnZSA9PT0gJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi5cXG5zb2NrZXQgaGFuZyB1cCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gU2VsZW5pdW0gc2VydmVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UgKyAnXFxuXFxuVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gbWlzc2luZyBDaHJvbWVEcml2ZXIvSUVEcml2ZXJTZXJ2ZXIvR2Vja29Ecml2ZXIgYmluYXJ5LlxcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXJyLnR5cGUgKyAnOiAnICsgZXJyLm1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgIH0sXHJcbiAgICBnZXRBcHBpdW1Jbml0RXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IsIFwiQ291bGRuJ3QgY29ubmVjdCB0byBBcHBpdW0gc2VydmVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvdWxkIG5vdCBmaW5kIGEgY29ubmVjdGVkIEFuZHJvaWQgZGV2aWNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsICdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbicpKSB7ICAgICAgICAgIC8vIGFwcGl1bSA8PSAxLjE0XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlJykpIHsgICAgLy8gYXBwaXVtID49IDEuMTVcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIHdpdGgnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuREVWSUNFX05PVF9GT1VORCwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdpcyBub3QgaW5zdGFsbGVkIG9uIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ0FsbCBtaW51dGVzIGZvciB0aGlzIG9yZ2FuaXphdGlvbiBoYXMgYmVlbiBleGF1c3RlZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICc0MDEgVW5hdXRob3JpemVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChcclxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpIHx8XHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLicpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgIH0sXHJcbiAgICBnZXRBc3NlcnRFcnJvcjogZnVuY3Rpb24oZXhwZWN0ZWQsIGFjdHVhbCwgaXNGYXRhbCA9IHRydWUpIHtcclxuICAgICAgICBhY3R1YWwgPSBhY3R1YWwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkOiBcIiR7ZXhwZWN0ZWR9XCIuIEdvdDogXCIke2FjdHVhbH1cImAsIHVuZGVmaW5lZCwgaXNGYXRhbCk7XHJcbiAgICB9LFxyXG4gICAgZ2V0VmVyaWZ5RXJyb3I6IGZ1bmN0aW9uKGV4cGVjdGVkLCBhY3R1YWwpIHtcclxuICAgICAgICBhY3R1YWwgPSBhY3R1YWwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlZFUklGWV9FUlJPUiwgYEV4cGVjdGVkOiBcIiR7ZXhwZWN0ZWR9XCIuIEdvdDogXCIke2FjdHVhbH1cImAsIHVuZGVmaW5lZCwgZmFsc2UgLyogbm90IGZhdGFsICovKTtcclxuICAgIH0sXHJcbiAgICBlcnJvckNvZGU6IEVSUk9SX0NPREVTXHJcbn07XHJcblxyXG5jb25zdCBPUklHSU5BTF9FUlJPUl9NRVNTQUdFID0gJ09yaWdpbmFsIGVycm9yOiAnO1xyXG5jb25zdCBVTktOT1dOX0VSUk9SX01FU1NBR0UgPSAndW5rbm93biBlcnJvcjogJztcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RPcmlnaW5hbEVycm9yKG1zZykge1xyXG4gICAgaWYgKCFtc2cpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVycm9ySW5kZXgxID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSk7XHJcbiAgICBpZiAoZXJyb3JJbmRleDEgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGVyZSBjb3VsZCBhbm90aGUgbmVzdGVkIFwib3JpZ2luYWwgZXJyb3JcIlxyXG4gICAgdmFyIGVycm9ySW5kZXgyID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSwgZXJyb3JJbmRleDEgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgbXNnID0gbXNnLnN1YnN0cmluZygoZXJyb3JJbmRleDIgPiAtMSA/IGVycm9ySW5kZXgyIDogZXJyb3JJbmRleDEpICArIE9SSUdJTkFMX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBzdHJpcCAndW5rbm93biBlcnJvcjonXHJcbiAgICB2YXIgdW5rbm93bkVycm9ySW5kZXggPSBtc2cuaW5kZXhPZihVTktOT1dOX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKHVua25vd25FcnJvckluZGV4ID4gLTEpIHtcclxuICAgICAgICByZXR1cm4gbXNnLnN1YnN0cmluZyh1bmtub3duRXJyb3JJbmRleCArIFVOS05PV05fRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtc2c7XHJcbn1cclxuIl19
|
|
300
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJTSEVMTF9FUlJPUiIsIk1PTkdPREJfRVJST1IiLCJOT1RfSU1QTEVNRU5URURfRVJST1IiLCJTRVJJQUxfUE9SVF9FUlJPUiIsIkhUVFBfRVJST1IiLCJFTUFJTF9FUlJPUiIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJERVZJQ0VfTk9UX0ZPVU5EIiwiUEFSQU1FVEVSU19FUlJPUiIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwiQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SIiwiQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IiLCJBUFBJVU1fU0VTU0lPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9TRVNTSU9OX0VSUk9SIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiIsIlVSTF9PUEVOX0VSUk9SIiwiT1BUSU9OX05PVF9GT1VORCIsIkFUVFJJQlVURV9OT1RfRk9VTkQiLCJFTEVNRU5UX1NUQVRFX0VSUk9SIiwiTU9CSUxFX0NPTlRFWFRfRVJST1IiLCJBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1IiLCJUV0lMSU9fRVJST1IiLCJIT09LX0VSUk9SIiwiTk9UX1NVUFBPUlRFRCIsIkFTU0VSVF9QQVNTRUQiLCJNT0RVTEVfTk9UX0ZPVU5EIiwiRklMRV9CUk9XU0VfRVJST1IiLCJDU1ZfRVJST1IiLCJDUllQVE9fRVJST1IiLCJETlNfRVJST1IiLCJDSVJDVUxBUl9FUlJPUiIsIlhNTF9FUlJPUiIsIkpBVkFTQ1JJUFRfRVJST1IiLCJDSEFJX0VSUk9SX0NPREVTIiwiQXNzZXJ0aW9uRXJyb3IiLCJTQ1JJUFRfRVJST1JfQ09ERVMiLCJUeXBlRXJyb3IiLCJTeW50YXhFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJlcnIiLCJPeEVycm9yIiwiZ2V0T3h5Z2VuRXJyb3IiLCJ0eXBlIiwibWVzc2FnZSIsImRhdGEiLCJsb2NhdGlvbiIsInN0YWNrdHJhY2UiLCJnZXREYkVycm9yTWVzc2FnZSIsIm9kYmNFcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJtYXAiLCJpdGVtIiwiY21kIiwiYXJncyIsImVyclR5cGUiLCJuYW1lIiwiaW5jbHVkZXMiLCJtYXRjaGVzIiwibWF0Y2giLCJzdGFydHNXaXRoIiwiZXh0cmFjdE9yaWdpbmFsRXJyb3IiLCJPUklHSU5BTF9FUlJPUl9NRVNTQUdFIiwiaW5zcGVjdCIsImNvZGUiLCJlcnJNZXNzYWdlIiwicmVwbGFjZSIsIm94RXJyb3JDb2RlIiwiQVNTRVJUIiwiaW5kZXhPZiIsIlZFUklGWSIsImNvbnNvbGUiLCJsb2ciLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImllWm9vbUVycm9yTXNnIiwidG9TdHJpbmciLCJjaHJvbWVEcml2ZXJNc2ciLCJnZXRBcHBpdW1Jbml0RXJyb3IiLCJnZXRBc3NlcnRFcnJvciIsImV4cGVjdGVkIiwiYWN0dWFsIiwiaXNGYXRhbCIsInVuZGVmaW5lZCIsImdldFZlcmlmeUVycm9yIiwiZXJyb3JDb2RlIiwiVU5LTk9XTl9FUlJPUl9NRVNTQUdFIiwibXNnIiwiZXJyb3JJbmRleDEiLCJlcnJvckluZGV4MiIsInN1YnN0cmluZyIsInVua25vd25FcnJvckluZGV4Il0sIm1hcHBpbmdzIjoiOzs7O0FBYUE7Ozs7QUFDQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUVBLE1BQU1DLFdBQVcsR0FBRztBQUNoQkMsRUFBQUEsWUFBWSxFQUFFLGNBREU7QUFFaEJDLEVBQUFBLGFBQWEsRUFBRSxlQUZDO0FBR2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FIRTtBQUloQkMsRUFBQUEsU0FBUyxFQUFFLFdBSks7QUFLaEJDLEVBQUFBLFlBQVksRUFBRSxjQUxFO0FBTWhCQyxFQUFBQSxpQkFBaUIsRUFBRSxtQkFOSDtBQU9oQkMsRUFBQUEsZUFBZSxFQUFFLGlCQVBEO0FBUWhCQyxFQUFBQSxxQkFBcUIsRUFBRSx1QkFSUDtBQVNoQkMsRUFBQUEsdUJBQXVCLEVBQUUseUJBVFQ7QUFVaEJDLEVBQUFBLG1CQUFtQixFQUFFLHFCQVZMO0FBV2hCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFYVjtBQVloQkMsRUFBQUEsaUNBQWlDLEVBQUUsbUNBWm5CO0FBYWhCQyxFQUFBQSxvQkFBb0IsRUFBRSxzQkFiTjtBQWNoQkMsRUFBQUEsd0JBQXdCLEVBQUUsMEJBZFY7QUFlaEJDLEVBQUFBLE9BQU8sRUFBRSxTQWZPO0FBZ0JoQkMsRUFBQUEsZ0JBQWdCLEVBQUUsa0JBaEJGO0FBaUJoQkMsRUFBQUEscUJBQXFCLEVB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QW9DLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRyxTQUFKLENBQWMsQ0FBQ0QsV0FBVyxHQUFHLENBQUMsQ0FBZixHQUFtQkEsV0FBbkIsR0FBaUNELFdBQWxDLElBQWtEekIsc0JBQXNCLENBQUNaLE1BQXZGLENBQU47QUFHQSxNQUFJd0MsaUJBQWlCLEdBQUdKLEdBQUcsQ0FBQ2pCLE9BQUosQ0FBWWdCLHFCQUFaLENBQXhCOztBQUNBLE1BQUlLLGlCQUFpQixHQUFHLENBQUMsQ0FBekIsRUFBNEI7QUFDeEIsV0FBT0osR0FBRyxDQUFDRyxTQUFKLENBQWNDLGlCQUFpQixHQUFHTCxxQkFBcUIsQ0FBQ25DLE1BQXhELENBQVA7QUFDSDs7QUFFRCxTQUFPb0MsR0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaGFuZGxpbmcgYW5kIGNvbnZlcnRpbmcgdmFyaW91cyBlcnJvciB0eXBlc1xyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4vT3h5Z2VuRXJyb3InO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5cclxuY29uc3QgRVJST1JfQ09ERVMgPSB7XHJcbiAgICBTQ1JJUFRfRVJST1I6ICdTQ1JJUFRfRVJST1InLFxyXG4gICAgVU5LTk9XTl9FUlJPUjogJ1VOS05PV05fRVJST1InLFxyXG4gICAgQVNTRVJUX0VSUk9SOiAnQVNTRVJUX0VSUk9SJyxcclxuICAgIFBERl9FUlJPUjogJ1BERl9FUlJPUicsXHJcbiAgICBWRVJJRllfRVJST1I6ICdWRVJJRllfRVJST1InLFxyXG4gICAgRUxFTUVOVF9OT1RfRk9VTkQ6ICdFTEVNRU5UX05PVF9GT1VORCcsXHJcbiAgICBGUkFNRV9OT1RfRk9VTkQ6ICdGUkFNRV9OT1RfRk9VTkQnLFxyXG4gICAgVU5LTk9XTl9DT01NQU5EX0VSUk9SOiAnVU5LTk9XTl9DT01NQU5EX0VSUk9SJyxcclxuICAgIFNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFOiAnU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UnLFxyXG4gICAgRUxFTUVOVF9OT1RfVklTSUJMRTogJ0VMRU1FTlRfTk9UX1ZJU0lCTEUnLFxyXG4gICAgRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFOiAnRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFJyxcclxuICAgIExPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUzogJ0xPQ0FUT1JfTUFUQ0hFU19NVUxUSVBMRV9FTEVNRU5UUycsXHJcbiAgICBFTEVNRU5UX1NUSUxMX0VYSVNUUzogJ0VMRU1FTlRfU1RJTExfRVhJU1RTJyxcclxuICAgIEJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUjogJ0JST1dTRVJfSlNfRVhFQ1VURV9FUlJPUicsXHJcbiAgICBUSU1FT1VUOiAnVElNRU9VVCcsXHJcbiAgICBXSU5ET1dfTk9UX0ZPVU5EOiAnV0lORE9XX05PVF9GT1VORCcsXHJcbiAgICBVTkVYUEVDVEVEX0FMRVJUX09QRU46ICdVTkVYUEVDVEVEX0FMRVJUX09QRU4nLFxyXG4gICAgTk9fQUxFUlRfT1BFTl9FUlJPUjogJ05PX0FMRVJUX09QRU5fRVJST1InLFxyXG4gICAgTUFJTElOQVRPUl9FUlJPUjogJ01BSUxJTkFUT1JfRVJST1InLFxyXG4gICAgQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIFNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SOiAnU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1InLFxyXG4gICAgQ0hST01FRFJJVkVSX0VSUk9SOiAnQ0hST01FRFJJVkVSX0VSUk9SJyxcclxuICAgIFdFQkRSSVZFUl9FUlJPUjogJ1dFQkRSSVZFUl9FUlJPUicsXHJcbiAgICBEQl9DT05ORUNUSU9OX0VSUk9SOiAnREJfQ09OTkVDVElPTl9FUlJPUicsXHJcbiAgICBEQl9RVUVSWV9FUlJPUjogJ0RCX1FVRVJZX0VSUk9SJyxcclxuICAgIFNPQVBfRVJST1I6ICdTT0FQX0VSUk9SJyxcclxuICAgIFNIRUxMX0VSUk9SOiAnU0hFTExfRVJST1InLFxyXG4gICAgTU9OR09EQl9FUlJPUjogJ01PTkdPREJfRVJST1InLFxyXG4gICAgTk9UX0lNUExFTUVOVEVEX0VSUk9SOiAnTk9UX0lNUExFTUVOVEVEX0VSUk9SJyxcclxuICAgIFNFUklBTF9QT1JUX0VSUk9SOiAnU0VSSUFMX1BPUlRfRVJST1InLFxyXG4gICAgSFRUUF9FUlJPUjogJ0hUVFBfRVJST1InLFxyXG4gICAgRU1BSUxfRVJST1I6ICdFTUFJTF9FUlJPUicsXHJcbiAgICBNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SOiAnTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUicsXHJcbiAgICBERVZJQ0VfTk9UX0ZPVU5EOiAnREVWSUNFX05PVF9GT1VORCcsXHJcbiAgICBQQVJBTUVURVJTX0VSUk9SOiAnUEFSQU1FVEVSU19FUlJPUicsXHJcbiAgICBJTlZBTElEX0NBUEFCSUxJVElFUzogJ0lOVkFMSURfQ0FQQUJJTElUSUVTJyxcclxuICAgIEJST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUjogJ0JST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fQ09OTkVDVElPTl9FUlJPUjogJ0FQUElVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9TRVNTSU9OX0VSUk9SOiAnQVBQSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fVElNRU9VVDogJ0FQUElVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9FUlJPUjogJ1NFTEVOSVVNX1NFU1NJT05fRVJST1InLFxyXG4gICAgU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUOiAnU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUJyxcclxuICAgIFNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1I6ICdTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIFVSTF9PUEVOX0VSUk9SOiAnVVJMX09QRU5fRVJST1InLFxyXG4gICAgT1BUSU9OX05PVF9GT1VORDogJ09QVElPTl9OT1RfRk9VTkQnLFxyXG4gICAgQVRUUklCVVRFX05PVF9GT1VORDogJ0FUVFJJQlVURV9OT1RfRk9VTkQnLFxyXG4gICAgRUxFTUVOVF9TVEFURV9FUlJPUjogJ0VMRU1FTlRfU1RBVEVfRVJST1InLFxyXG4gICAgTU9CSUxFX0NPTlRFWFRfRVJST1I6ICdNT0JJTEVfQ09OVEVYVF9FUlJPUicsXHJcbiAgICBBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1I6ICdBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1InLFxyXG4gICAgVFdJTElPX0VSUk9SOiAnVFdJTElPX0VSUk9SJyxcclxuICAgIEhPT0tfRVJST1I6ICdIT09LX0VSUk9SJyxcclxuICAgIE5PVF9TVVBQT1JURUQ6ICdOT1RfU1VQUE9SVEVEJyxcclxuICAgIEFTU0VSVF9QQVNTRUQ6ICdBU1NFUlRfUEFTU0VEJyxcclxuICAgIE1PRFVMRV9OT1RfRk9VTkQ6ICdNT0RVTEVfTk9UX0ZPVU5EJyxcclxuICAgIEZJTEVfQlJPV1NFX0VSUk9SOiAnRklMRV9CUk9XU0VfRVJST1InLFxyXG4gICAgQ1NWX0VSUk9SOiAnQ1NWX0VSUk9SJyxcclxuICAgIENSWVBUT19FUlJPUjogJ0NSWVBUT19FUlJPUicsXHJcbiAgICBETlNfRVJST1I6ICdETlNfRVJST1InLFxyXG4gICAgQ0lSQ1VMQVJfRVJST1I6ICdDSVJDVUxBUl9FUlJPUicsXHJcbiAgICBYTUxfRVJST1I6ICdYTUxfRVJST1InLFxyXG4gICAgSkFWQVNDUklQVF9FUlJPUjogJ0pBVkFTQ1JJUFRfRVJST1InXHJcbn07XHJcblxyXG4vLyBDaGFpIHRvIE94eWdlbiBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IENIQUlfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBBc3NlcnRpb25FcnJvcjogRVJST1JfQ09ERVMuQVNTRVJUX0VSUk9SXHJcbn07XHJcblxyXG4vLyBHZW5lcmFsIEphdmFTY3JpcHQgZXJyb3IgY29kZXMgbWFwcGluZ1xyXG5jb25zdCBTQ1JJUFRfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBUeXBlRXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFN5bnRheEVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbiAgICBSZWZlcmVuY2VFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBnZXRGYWlsdXJlRnJvbUVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikpIHtcclxuICAgICAgICAgICAgZXJyID0gdGhpcy5nZXRPeHlnZW5FcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBlcnIudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGRhdGE6IGVyci5kYXRhLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogZXJyLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBnZXREYkVycm9yTWVzc2FnZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlcnIgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlcnIub2RiY0Vycm9ycykgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICc6ICcgK2l0ZW0ubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH0sXHJcbiAgICBnZXRPeHlnZW5FcnJvcjogZnVuY3Rpb24oZXJyLCBtb2R1bGUsIGNtZCwgYXJncykge1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgZXJyb3IgYXMgaXMgaWYgaXQgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWRcclxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVyclR5cGUgPSBlcnIudHlwZSB8fCBlcnIubmFtZSB8fCB0eXBlb2YgZXJyO1xyXG4gICAgICAgIC8vIGhhbmRsZSBcIkNhbid0IGNhbGwgPGNvbW1hbmQ+IG9uIGVsZW1lbnQgd2l0aCBzZWxlY3RvciA8c2VsZWN0b3I+IGJlY2F1c2UgZWxlbWVudCB3YXNuJ3QgZm91bmRcIlxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnYmVjYXVzZSBlbGVtZW50IHdhc25cXCd0IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiaW52YWxpZCBhcmd1bWVudDogVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneTogLWFuZHJvaWQgdWlhdXRvbWF0b3JcIiBmb3IgbW9iaWxlLlxyXG4gICAgICAgIC8vIHVzdWFsbHkgZHVlIHRvIG5vdCB1c2luZyB0aGUgY29ycmVjdCBjb250ZXh0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Vuc3VwcG9ydGVkIGxvY2F0b3Igc3RyYXRlZ3knKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9pbnZhbGlkIGFyZ3VtZW50OiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9CSUxFX0NPTlRFWFRfRVJST1IsIChtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkgK1xyXG4gICAgICAgICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbW9iaWxlIGNvbnRleHQuIFNlZSBtb2Iuc2V0TmF0aXZlQ29udGV4dCBhbmQgbW9iLnNldFdlYlZpZXdDb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIHNlbGVjdG9yOiBVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvblwiXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gaW52YWxpZCB4cGF0aFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGUgc3RyaW5nICcuKicgaXMgbm90IGEgdmFsaWQgWFBhdGggZXhwcmVzc2lvbi4pL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIGNzcyBsb2NhdG9yIG9uIENocm9tZS9JRS4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gRmlyZWZveC4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24nKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24gXCIuKlwiIGlzIGludmFsaWQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgdmFyaW91cyB0eXBlcyBvZiAnT3JpZ2luYWwgZXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIFVSTCBpbiBvcGVuIGNvbW1hbmRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBVUkwnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oIEludmFsaWQgVVJMOiAuKiQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgb24gbW9iaWxlIENocm9tZSB3aGVuIGVsZW1lbnQgaXMgb3ZlcmxhcHBlZCBieSBhbm90aGVyIGVsZW1lbnRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZDogKC4qKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgYmVjYXVzZSBTZWxlbml1bSBoYXMga2lsbGVkIHRoZSBzZXNzaW9uIGR1ZSB0byBleGNlZWRpbmcgJy10aW1lb3V0JyB0aW1lb3V0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTm8gYWN0aXZlIHNlc3Npb24gd2l0aCBJRCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX0VSUk9SLCAnRXhlY3V0aW9uIHRpbWUgZXhjZWVkZWQgdGhlIHRpbWVvdXQgc2V0IGJ5IFNlbGVuaXVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZHJpdmVyIChJRURyaXZlclNlcnZlciwgQ2hyb21lRHJpdmVyLCBldGMpIGNyYXNoZXNcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ2phdmEubmV0LkNvbm5lY3RFeGNlcHRpb246IENvbm5lY3Rpb24gcmVmdXNlZDogY29ubmVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldFQkRSSVZFUl9FUlJPUiwgJ1RoZSB1bmRlcmx5aW5nIFdlYkRyaXZlciBzZWVtcyB0byBoYXZlIGNyYXNoZWQ6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm5hbWUgJiYgZXJyLm5hbWUuaW5jbHVkZXMoJ3N0YWxlIGVsZW1lbnQgcmVmZXJlbmNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFLCBlcnIubmFtZSArICcgJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgJiYgZXJyLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9EVUxFX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCAoZS5nLiBjbGljaykgYnV0IHRoZSB3aW5kb3cgd2FzIGFscmVhZHkgY2xvc2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIHN1Y2ggd2luZG93JykgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3RhcmdldCB3aW5kb3cgYWxyZWFkeSBjbG9zZWQnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnd2ViIHZpZXcgbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldJTkRPV19OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXhhbXBsZTogVGhlIGVsZW1lbnQgd2l0aCBzZWxlY3RvciAqKiogeW91IHRyeWluZyB0byBwYXNzIGludG8gdGhlIGV4ZWN1dGUgbWV0aG9kIHdhc24ndCBmb3VuZFxyXG4gICAgICAgIC8vIHdoZW4gZWxlbWVudCB3YXMgZGVsZXRlZCBmcm9tIERPTVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCByZWZlcmVuY2UgKGUuZy4gY2xpY2spIGJ1dCB0aGUgcGFnZSB3YXMgYWxyZWFkeSBjaGFuZ2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBjbGlja2FibGUgYWZ0ZXInKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgc2VsZWN0b3I6IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IFVuYWJsZSB0byBjb21waWxlIHNlbGVjdG9yIC4uLlxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5uYW1lID09PSAnaW52YWxpZCBzZWxlY3RvcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXF1ZXN0RXJyb3I6IFRpbWVvdXQgYXdhaXRpbmcgJ3JlcXVlc3QnIGZvciAzMTAwMDBtcywgbmFtZTogJ1RpbWVvdXRFcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVGltZW91dCBhd2FpdGluZyBcXCdyZXF1ZXN0XFwnIGZvcicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyck1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICAgJ1RpbWVvdXQgYXdhaXRpbmcgXFwncmVxdWVzdFxcJyBmb3InLFxyXG4gICAgICAgICAgICAgICAgJ0NvdWxkblxcJ3QgZ2V0IGEgcmVzcG9uc2UgZnJvbSBTZWxlbml1bS9XZWJEcml2ZXIgd2l0aGluJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IobW9kdWxlID09PSAnd2ViJyA/IEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCA6IEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQsIGVyck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3NvY2tldCBoYW5nIHVwJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdqYXZhc2NyaXB0IGVycm9yJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkpBVkFTQ1JJUFRfRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYXBwaXVtXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuIHNlYXJjaCBwYXJhbWV0ZXJzJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBDaGFpIGVycm9yIGNvZGVcclxuICAgICAgICB2YXIgb3hFcnJvckNvZGUgPSBDSEFJX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIEphdmFTY3JpcHQgZXJyb3IgY29kZVxyXG4gICAgICAgIG94RXJyb3JDb2RlID0gU0NSSVBUX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSB8fCBudWxsLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgPyBgJHtlcnJUeXBlfTogJHtlcnIubWVzc2FnZX1gIDogYCR7ZXJyVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnJNZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSwgdHJ1ZSwgZXJyKTtcclxuICAgIH0sXHJcbiAgICBnZXRTZWxlbml1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpZVpvb21FcnJvck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVW5leHBlY3RlZCBlcnJvciBsYXVuY2hpbmcgSW50ZXJuZXQgRXhwbG9yZXJcXC4gQnJvd3NlciB6b29tIGxldmVsIHdhcyBzZXQgdG8gXFxkKyVcXC4gSXQgc2hvdWxkIGJlIHNldCB0byBcXGQrJSkvZ20pO1xyXG4gICAgICAgICAgICBpZiAoaWVab29tRXJyb3JNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5CUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IsIGllWm9vbUVycm9yTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6IENocm9tZURyaXZlclNlcnZpY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNocm9tZURyaXZlck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVGhpcyB2ZXJzaW9uIG9mIENocm9tZURyaXZlciBvbmx5IHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uIFswLTldKikvZ20pO1xyXG4gICAgICAgICAgICBpZiAoY2hyb21lRHJpdmVyTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBjaHJvbWVEcml2ZXJNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIFNlbGVuaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlICsgJ1xcblxcblRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIG1pc3NpbmcgQ2hyb21lRHJpdmVyL0lFRHJpdmVyU2VydmVyL0dlY2tvRHJpdmVyIGJpbmFyeS5cXG4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyci50eXBlICsgJzogJyArIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gQXBwaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCAnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSkgeyAgICAgICAgICAvLyBhcHBpdW0gPD0gMS4xNFxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSB7ICAgIC8vIGFwcGl1bSA+PSAxLjE1XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciB3aXRoJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnaXMgbm90IGluc3RhbGxlZCBvbiBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiAoXHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKSB8fFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXNzZXJ0RXJyb3I6IGZ1bmN0aW9uKGV4cGVjdGVkLCBhY3R1YWwsIGlzRmF0YWwgPSB0cnVlKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgLCB1bmRlZmluZWQsIGlzRmF0YWwpO1xyXG4gICAgfSxcclxuICAgIGdldFZlcmlmeUVycm9yOiBmdW5jdGlvbihleHBlY3RlZCwgYWN0dWFsKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRllfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgLCB1bmRlZmluZWQsIGZhbHNlIC8qIG5vdCBmYXRhbCAqLyk7XHJcbiAgICB9LFxyXG4gICAgZXJyb3JDb2RlOiBFUlJPUl9DT0RFU1xyXG59O1xyXG5cclxuY29uc3QgT1JJR0lOQUxfRVJST1JfTUVTU0FHRSA9ICdPcmlnaW5hbCBlcnJvcjogJztcclxuY29uc3QgVU5LTk9XTl9FUlJPUl9NRVNTQUdFID0gJ3Vua25vd24gZXJyb3I6ICc7XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxFcnJvcihtc2cpIHtcclxuICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBlcnJvckluZGV4MSA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKGVycm9ySW5kZXgxID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlcmUgY291bGQgYW5vdGhlIG5lc3RlZCBcIm9yaWdpbmFsIGVycm9yXCJcclxuICAgIHZhciBlcnJvckluZGV4MiA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UsIGVycm9ySW5kZXgxICsgT1JJR0lOQUxfRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG5cclxuICAgIG1zZyA9IG1zZy5zdWJzdHJpbmcoKGVycm9ySW5kZXgyID4gLTEgPyBlcnJvckluZGV4MiA6IGVycm9ySW5kZXgxKSAgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gc3RyaXAgJ3Vua25vd24gZXJyb3I6J1xyXG4gICAgdmFyIHVua25vd25FcnJvckluZGV4ID0gbXNnLmluZGV4T2YoVU5LTk9XTl9FUlJPUl9NRVNTQUdFKTtcclxuICAgIGlmICh1bmtub3duRXJyb3JJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZy5zdWJzdHJpbmcodW5rbm93bkVycm9ySW5kZXggKyBVTktOT1dOX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbXNnO1xyXG59XHJcbiJdfQ==
|
package/build/lib/cli-util.js
CHANGED
|
@@ -347,7 +347,11 @@ function processTargetPath(targetPath, userCwd) {
|
|
|
347
347
|
return null;
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
+
} else if (targetPath.endsWith(OXYGEN_CONFIG_FILE_NAME + '.js') || targetPath.endsWith(OXYGEN_CONFIG_FILE_NAME + '.json')) {
|
|
351
|
+
configFilePath = targetPath;
|
|
352
|
+
cwd = targetPath = _path.default.dirname(targetPath);
|
|
350
353
|
} else {
|
|
354
|
+
cwd = userCwd || _path.default.dirname(targetPath);
|
|
351
355
|
configFilePath = _path.default.join(cwd, OXYGEN_CONFIG_FILE_NAME + '.js');
|
|
352
356
|
|
|
353
357
|
if (!_fs.default.existsSync(configFilePath)) {
|
|
@@ -373,4 +377,4 @@ function processTargetPath(targetPath, userCwd) {
|
|
|
373
377
|
extension: _path.default.extname(targetPath)
|
|
374
378
|
};
|
|
375
379
|
}
|
|
376
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsImNvbmZpZ1BhdGgiLCJwdXNoIiwib3h1dGlsIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwicGF0aCIsInBhcmFtZXRlcnMiLCJmaWxlIiwibW9kZSIsIml0ZXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsInN1aXRlRGVmcyIsIkFycmF5IiwiaXNBcnJheSIsInN1aXRlc0ZvbGRlciIsImpvaW4iLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwic3VpdGVEZWYiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic2VsZWN0ZWRTdWl0ZU5hbWVzIiwic3BsaXQiLCJmaWx0ZXIiLCJ4IiwiaW5jbHVkZXMiLCJmb2xkZXJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImV4dG5hbWUiLCJmdWxsUGF0aCIsInBvRmlsZU5hbWUiLCJwcm9jZXNzIiwicG9GaWxlUGF0aCIsInJlc29sdmUiLCJlIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJlbnZOYW1lIiwiZW52aXJvbm1lbnQiLCJkZWZhdWx0RW52RmlsZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZGljYXRlZEVudkZpbGVKcyIsImRlZGljYXRlZEVudkZpbGVKc29uIiwiZ2V0RW52aXJvbm1lbnRzIiwidGFyZ2V0Q3dkIiwiZ2V0Q29uZmlndXJhdGlvbnMiLCJERUZBVUxUX09QVFMiLCJicm93c2VyTmFtZSIsInNlbGVuaXVtVXJsIiwiYXBwaXVtVXJsIiwicmVvcGVuU2Vzc2lvbiIsInJlUnVuT25GYWlsZWQiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJyZXBvcnRlcnMiLCJjbWRPcHRzIiwiZ2V0Q29tbWFuZExpbmVPcHRpb25zIiwicHJvakNvbmZpZ09wdHMiLCJlbnZzIiwiaXNDbWRPcHRzUmVwb3J0Rm9ybWF0IiwiaXNDb25maWdSZXBvcnRGb3JtYXQiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsIndzUG9ydCIsIndzcG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJ1c2VyQ3dkIiwicmVzb2x2ZVBhdGgiLCJzdGF0cyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3IiLCJpc0RpcmVjdG9yeSIsImNvbmZpZ0ZpbGVQYXRoIiwiZGlybmFtZSIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsImZ1bGxOYW1lIiwiYmFzZW5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdBQUcsYUFBaEM7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsWUFBN0I7O0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsV0FBckM7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsTUFBekI7OztBQUVBLGVBQWVDLG1CQUFmLENBQW1DQyxNQUFuQyxFQUEyQ0MsSUFBM0MsRUFBaUQ7QUFDcEQsUUFBTUMsT0FBTyxHQUFHLEVBQUUsR0FBR0Y7QUFBTCxHQUFoQjtBQUNBRSxFQUFBQSxPQUFPLENBQUNDLEdBQVIsR0FBY0Msd0JBQXdCLENBQUNKLE1BQUQsRUFBU0MsSUFBVCxDQUF0QztBQUNBQyxFQUFBQSxPQUFPLENBQUNHLEVBQVIsR0FBYUMscUJBQXFCLENBQUNOLE1BQUQsRUFBU0MsSUFBVCxDQUFsQztBQUNBQyxFQUFBQSxPQUFPLENBQUNLLE1BQVIsR0FBaUIsTUFBTUMsVUFBVSxDQUFDUixNQUFELEVBQVNDLElBQVQsQ0FBakM7QUFDQSxTQUFPQyxPQUFQO0FBQ0g7O0FBRU0sZUFBZU0sVUFBZixDQUEwQlIsTUFBMUIsRUFBa0NDLElBQWxDLEVBQXdDO0FBQzNDLE1BQUlELE1BQU0sQ0FBQ1MsU0FBUCxJQUFvQixPQUFPVCxNQUFNLENBQUNTLFNBQWQsS0FBNEIsUUFBaEQsSUFBNERULE1BQU0sQ0FBQ1MsU0FBUCxDQUFpQkMsV0FBakIsT0FBbUMsUUFBbkcsRUFBNkc7QUFDekc7QUFDSDs7QUFDRCxRQUFNO0FBQUVDLElBQUFBO0FBQUYsTUFBYVgsTUFBbkI7QUFDQSxRQUFNWSxZQUFZLEdBQUdELE1BQU0sS0FDdEJBLE1BQU0sQ0FBQ0UsSUFBUCxJQUFlRixNQUFNLENBQUNFLElBQVAsQ0FBWUMsT0FBWixDQUFvQm5CLHVCQUFwQixNQUFpRCxDQUFqRSxJQUNJZ0IsTUFBTSxDQUFDSSxTQUFQLEtBQXFCLEVBQXJCLElBQTJCSixNQUFNLENBQUNLLFVBQWxDLElBQWdETCxNQUFNLENBQUNLLFVBQVAsQ0FBa0JGLE9BQWxCLENBQTBCbkIsdUJBQTFCLElBQXFELENBQUMsQ0FGbkYsQ0FBM0I7QUFJQSxNQUFJWSxNQUFNLEdBQUcsRUFBYjs7QUFFQSxNQUFJLENBQUNLLFlBQUwsRUFBbUI7QUFDZixRQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0ksU0FBUCxLQUFxQixLQUFuQyxFQUEwQztBQUN0Q1IsTUFBQUEsTUFBTSxDQUFDVSxJQUFQLENBQVksTUFBTUMsY0FBT0MsMkJBQVAsQ0FBbUNSLE1BQU0sQ0FBQ1MsSUFBMUMsRUFBZ0RwQixNQUFNLENBQUNxQixVQUFQLENBQWtCQyxJQUFsRSxFQUF3RXRCLE1BQU0sQ0FBQ3FCLFVBQVAsQ0FBa0JFLElBQTFGLEVBQWdHLEtBQWhHLEVBQXVHdkIsTUFBTSxDQUFDd0IsVUFBUCxJQUFxQixDQUE1SCxDQUFsQjtBQUNILEtBRkQsTUFHSyxJQUFJYixNQUFNLElBQUlBLE1BQU0sQ0FBQ0ksU0FBUCxLQUFxQixPQUFuQyxFQUE0QztBQUM3Q1IsTUFBQUEsTUFBTSxDQUFDVSxJQUFQLENBQVksTUFBTUMsY0FBT08sNkJBQVAsQ0FBcUNkLE1BQU0sQ0FBQ1MsSUFBNUMsRUFBa0RwQixNQUFNLENBQUNxQixVQUFQLENBQWtCQyxJQUFwRSxFQUEwRXRCLE1BQU0sQ0FBQ3FCLFVBQVAsQ0FBa0JFLElBQTVGLEVBQWtHdkIsTUFBbEcsQ0FBbEI7QUFDSDtBQUNKLEdBUEQsTUFTSztBQUNELFVBQUkwQixTQUFTLEdBQUcsRUFBaEI7O0FBQ0EsVUFBSTFCLE1BQU0sQ0FBQ08sTUFBUCxJQUFpQm9CLEtBQUssQ0FBQ0MsT0FBTixDQUFjNUIsTUFBTSxDQUFDTyxNQUFyQixDQUFyQixFQUFtRDtBQUMvQ21CLFFBQUFBLFNBQVMsR0FBRzFCLE1BQU0sQ0FBQ08sTUFBbkI7QUFDSDs7QUFFRCxZQUFNc0IsWUFBWSxHQUFHVCxjQUFLVSxJQUFMLENBQVVuQixNQUFNLENBQUNvQixHQUFqQixFQUFzQixRQUF0QixDQUFyQjs7QUFDQSxVQUFJQyxZQUFHQyxVQUFILENBQWNKLFlBQWQsQ0FBSixFQUFpQztBQUM3QkgsUUFBQUEsU0FBUyxHQUFHLENBQ1IsR0FBR0EsU0FESyxFQUVSLEdBQUdRLDhCQUE4QixDQUFDTCxZQUFELENBRnpCLENBQVo7QUFJSDs7QUFFRHRCLE1BQUFBLE1BQU0sR0FBRyxNQUFNNEIsT0FBTyxDQUFDQyxHQUFSLENBQVlWLFNBQVMsQ0FBQ1csR0FBVixDQUFjLE1BQU9DLFFBQVAsSUFBb0IsTUFBTXBCLGNBQU9xQix5QkFBUCxDQUFpQ0QsUUFBakMsRUFBMkN0QyxNQUEzQyxDQUF4QyxDQUFaLENBQWY7QUFDSDs7QUFFRCxNQUFJQyxJQUFJLENBQUNNLE1BQUwsSUFBZSxPQUFPTixJQUFJLENBQUNNLE1BQVosS0FBdUIsUUFBMUMsRUFBb0Q7QUFDaEQsVUFBTWlDLGtCQUFrQixHQUFHdkMsSUFBSSxDQUFDTSxNQUFMLENBQVlrQyxLQUFaLENBQWtCLEdBQWxCLENBQTNCO0FBQ0FsQyxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ21DLE1BQVAsQ0FBY0MsQ0FBQyxJQUFJSCxrQkFBa0IsQ0FBQ0ksUUFBbkIsQ0FBNEJELENBQUMsQ0FBQzlCLElBQTlCLENBQW5CLENBQVQ7QUFDSDs7QUFDRCxTQUFPTixNQUFQO0FBQ0g7O0FBRU0sU0FBUzJCLDhCQUFULENBQXdDVyxVQUF4QyxFQUFvRDtBQUN2RCxRQUFNQyxLQUFLLEdBQUdkLFlBQUdlLFdBQUgsQ0FBZUYsVUFBZixDQUFkOztBQUNBLE1BQUluQixTQUFTLEdBQUcsRUFBaEI7QUFDQSxzQkFBUW9CLEtBQVIsRUFBZXhCLElBQUksSUFBSTtBQUNuQixRQUFJRixjQUFLNEIsT0FBTCxDQUFhMUIsSUFBYixNQUF1QixPQUEzQixFQUFvQztBQUNoQyxZQUFNMkIsUUFBUSxHQUFHN0IsY0FBS1UsSUFBTCxDQUFVZSxVQUFWLEVBQXNCdkIsSUFBdEIsQ0FBakI7O0FBQ0FJLE1BQUFBLFNBQVMsQ0FBQ1QsSUFBVixDQUFlLDRCQUFjZ0MsUUFBZCxDQUFmO0FBQ0g7QUFDSixHQUxEO0FBTUEsU0FBT3ZCLFNBQVA7QUFDSDs7QUFFTSxTQUFTcEIscUJBQVQsQ0FBK0JOLE1BQS9CLEVBQXVDQyxJQUFJLEdBQUcsRUFBOUMsRUFBa0Q7QUFDckQsUUFBTVUsTUFBTSxHQUFHWCxNQUFNLENBQUNXLE1BQVAsSUFBaUIsRUFBaEM7QUFDQSxRQUFNdUMsVUFBVSxHQUFHakQsSUFBSSxDQUFDSSxFQUFMLElBQVksR0FBRVIsNEJBQTZCLEtBQTlEO0FBQ0EsUUFBTWtDLEdBQUcsR0FBR3BCLE1BQU0sQ0FBQ29CLEdBQVAsSUFBY29CLE9BQU8sQ0FBQ3BCLEdBQVIsRUFBMUI7O0FBQ0EsTUFBSXFCLFVBQVUsR0FBR2hDLGNBQUtpQyxPQUFMLENBQWF0QixHQUFiLEVBQWtCbUIsVUFBbEIsQ0FBakI7O0FBQ0FFLEVBQUFBLFVBQVUsR0FBR3BCLFlBQUdDLFVBQUgsQ0FBY21CLFVBQWQsSUFBNEJBLFVBQTVCLEdBQXlDLElBQXREOztBQUVBLE1BQUlBLFVBQUosRUFBZ0I7QUFDWixRQUFJO0FBQ0Esa0NBQWNBLFVBQWQ7QUFDQSxhQUFPQSxVQUFQO0FBQ0gsS0FIRCxDQUdFLE9BQU9FLENBQVAsRUFBVTtBQUNSLFlBQU1DLEdBQUcsR0FBRyxJQUFJQyxLQUFKLENBQVcsd0JBQXVCSixVQUFXLGFBQVlFLENBQUMsQ0FBQ0csT0FBUSxJQUFHSCxDQUFDLENBQUNJLEtBQU0sRUFBOUUsQ0FBWjtBQUNBLFlBQU1ILEdBQU47QUFDSDtBQUNKLEdBUkQsTUFRTztBQUNILFdBQU8sSUFBUDtBQUNIO0FBQ0o7O0FBRU0sU0FBU25ELHdCQUFULENBQWtDSixNQUFsQyxFQUEwQ0MsSUFBMUMsRUFBZ0Q7QUFDbkQsUUFBTVUsTUFBTSxHQUFHWCxNQUFNLENBQUNXLE1BQVAsSUFBaUIsRUFBaEM7QUFDQSxRQUFNZ0QsT0FBTyxHQUFHMUQsSUFBSSxDQUFDRSxHQUFMLElBQVlILE1BQU0sQ0FBQzRELFdBQW5CLElBQWtDLFNBQWxEO0FBQ0EsUUFBTTdCLEdBQUcsR0FBR3BCLE1BQU0sQ0FBQ29CLEdBQVAsSUFBY29CLE9BQU8sQ0FBQ3BCLEdBQVIsRUFBMUI7O0FBQ0EsUUFBTThCLGNBQWMsR0FBR3pDLGNBQUtVLElBQUwsQ0FBVUMsR0FBVixFQUFnQixHQUFFbkMsb0JBQXFCLEtBQXZDLENBQXZCOztBQUNBLE1BQUlvQyxZQUFHQyxVQUFILENBQWM0QixjQUFkLENBQUosRUFBbUM7QUFDL0IsVUFBTTFELEdBQUcsR0FBRyw0QkFBYzBELGNBQWQsQ0FBWjs7QUFDQSxRQUFJMUQsR0FBRyxJQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUF0QixJQUFrQzJELE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDOUQsR0FBckMsRUFBMEN3RCxPQUExQyxDQUF0QyxFQUEwRjtBQUN0RixhQUFPeEQsR0FBRyxDQUFDd0QsT0FBRCxDQUFWO0FBQ0g7QUFDSjs7QUFFRCxRQUFNTyxrQkFBa0IsR0FBRzlDLGNBQUtVLElBQUwsQ0FBVUMsR0FBVixFQUFlLEtBQWYsRUFBdUIsR0FBRTRCLE9BQVEsS0FBakMsQ0FBM0I7O0FBQ0EsUUFBTVEsb0JBQW9CLEdBQUcvQyxjQUFLVSxJQUFMLENBQVVDLEdBQVYsRUFBZSxLQUFmLEVBQXVCLEdBQUU0QixPQUFRLE9BQWpDLENBQTdCOztBQUNBLE1BQUkzQixZQUFHQyxVQUFILENBQWNpQyxrQkFBZCxDQUFKLEVBQXVDO0FBQ25DLFdBQU8sNEJBQWNBLGtCQUFkLENBQVA7QUFDSCxHQUZELE1BR0ssSUFBSWxDLFlBQUdDLFVBQUgsQ0FBY2tDLG9CQUFkLENBQUosRUFBeUM7QUFDMUMsV0FBTyw0QkFBY0Esb0JBQWQsQ0FBUDtBQUNIOztBQUNELFNBQU8sRUFBUDtBQUNIOztBQUVNLFNBQVNDLGVBQVQsQ0FBeUJ6RCxNQUF6QixFQUFpQztBQUNwQyxNQUFJMEQsU0FBUyxHQUFHLElBQWhCOztBQUVBLE1BQUkxRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ29CLEdBQXJCLEVBQTBCO0FBQ3RCc0MsSUFBQUEsU0FBUyxHQUFHMUQsTUFBTSxDQUFDb0IsR0FBbkI7QUFDSDs7QUFFRCxRQUFNQSxHQUFHLEdBQUdzQyxTQUFTLElBQUlsQixPQUFPLENBQUNwQixHQUFSLEVBQXpCOztBQUNBLFFBQU04QixjQUFjLEdBQUd6QyxjQUFLVSxJQUFMLENBQVVDLEdBQVYsRUFBZ0IsR0FBRW5DLG9CQUFxQixLQUF2QyxDQUF2Qjs7QUFDQSxNQUFJb0MsWUFBR0MsVUFBSCxDQUFjNEIsY0FBZCxDQUFKLEVBQW1DO0FBQy9CLFFBQUk7QUFDQSxhQUFPLDRCQUFjQSxjQUFkLENBQVA7QUFDSCxLQUZELENBRUUsT0FBT1AsQ0FBUCxFQUFVO0FBQ1IsWUFBTUMsR0FBRyxHQUFHLElBQUlDLEtBQUosQ0FBVyx3QkFBdUJLLGNBQWUsYUFBWVAsQ0FBQyxDQUFDRyxPQUFRLElBQUdILENBQUMsQ0FBQ0ksS0FBTSxFQUFsRixDQUFaO0FBQ0EsWUFBTUgsR0FBTjtBQUNIO0FBQ0o7O0FBQ0QsU0FBTyxFQUFQO0FBQ0g7O0FBRU0sU0FBU2UsaUJBQVQsQ0FBMkIzRCxNQUEzQixFQUFtQ1YsSUFBbkMsRUFBeUM7QUFFNUMsTUFBSW9FLFNBQVMsR0FBRyxJQUFoQjs7QUFFQSxNQUFJMUQsTUFBTSxJQUFJQSxNQUFNLENBQUNvQixHQUFyQixFQUEwQjtBQUN0QnNDLElBQUFBLFNBQVMsR0FBRzFELE1BQU0sQ0FBQ29CLEdBQW5CO0FBQ0g7O0FBQ0QsUUFBTXdDLFlBQVksR0FBRztBQUNqQnhDLElBQUFBLEdBQUcsRUFBRXBCLE1BQU0sR0FBSTBELFNBQVMsSUFBSWxCLE9BQU8sQ0FBQ3BCLEdBQVIsRUFBakIsR0FBa0NvQixPQUFPLENBQUNwQixHQUFSLEVBRDVCO0FBRWpCcEIsSUFBQUEsTUFBTSxFQUFFQSxNQUZTO0FBR2pCNkQsSUFBQUEsV0FBVyxFQUFFLFFBSEk7QUFJakJDLElBQUFBLFdBQVcsRUFBRyw4QkFKRztBQUtqQkMsSUFBQUEsU0FBUyxFQUFHLDhCQUxLO0FBTWpCQyxJQUFBQSxhQUFhLEVBQUUsS0FORTtBQU9qQkMsSUFBQUEsYUFBYSxFQUFFLEtBUEU7QUFRakJwRCxJQUFBQSxVQUFVLEVBQUcsQ0FSSTtBQVNqQnFELElBQUFBLFNBQVMsRUFBRSxJQVRNO0FBVWpCQyxJQUFBQSxLQUFLLEVBQUUsSUFWVTtBQVdqQkMsSUFBQUEsaUJBQWlCLEVBQUUsS0FYRjtBQVlqQkMsSUFBQUEsaUJBQWlCLEVBQUUsS0FaRjtBQWFqQkMsSUFBQUEsa0JBQWtCLEVBQUUsS0FiSDtBQWNqQkMsSUFBQUEsU0FBUyxFQUFFO0FBQ1BDLE1BQUFBLFNBQVMsRUFBRSxDQUFDckYsZ0JBQUQ7QUFESixLQWRNO0FBaUJqQnVCLElBQUFBLFVBQVUsRUFBRztBQUNUQyxNQUFBQSxJQUFJLEVBQUUsSUFERztBQUVUQyxNQUFBQSxJQUFJLEVBQUU7QUFGRztBQWpCSSxHQUFyQjtBQXVCQSxRQUFNNkQsT0FBTyxHQUFHQyxxQkFBcUIsQ0FBQ3BGLElBQUQsQ0FBckM7QUFFQSxNQUFJcUYsY0FBYyxHQUFHLEVBQXJCOztBQUNBLE1BQUkzRSxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBUCxLQUFnQmxCLHVCQUExQixLQUFzRGdCLE1BQU0sQ0FBQ0ksU0FBUCxLQUFxQixLQUFyQixJQUE4QkosTUFBTSxDQUFDSSxTQUFQLEtBQXFCLE9BQXpHLENBQUosRUFBdUg7QUFDbkgsUUFBSTtBQUNBdUUsTUFBQUEsY0FBYyxHQUFHLDRCQUFjM0UsTUFBTSxDQUFDUyxJQUFyQixDQUFqQjtBQUNILEtBRkQsQ0FFRSxPQUFPa0MsQ0FBUCxFQUFVO0FBQ1IsWUFBTUMsR0FBRyxHQUFHLElBQUlDLEtBQUosQ0FBVyx3QkFBdUI3QyxNQUFNLENBQUNTLElBQUssYUFBWWtDLENBQUMsQ0FBQ0csT0FBUSxJQUFHSCxDQUFDLENBQUNJLEtBQU0sRUFBL0UsQ0FBWjtBQUNBLFlBQU1ILEdBQU47QUFDSDtBQUNKLEdBUEQsTUFRSyxJQUFJNUMsTUFBTSxJQUFJQSxNQUFNLENBQUNLLFVBQXJCLEVBQWlDO0FBQ2xDLFFBQUk7QUFDQXNFLE1BQUFBLGNBQWMsR0FBRyw0QkFBYzNFLE1BQU0sQ0FBQ0ssVUFBckIsQ0FBakI7QUFDSCxLQUZELENBRUUsT0FBT3NDLENBQVAsRUFBVTtBQUNSLFlBQU1DLEdBQUcsR0FBRyxJQUFJQyxLQUFKLENBQVcsd0JBQXVCN0MsTUFBTSxDQUFDSyxVQUFXLGFBQVlzQyxDQUFDLENBQUNHLE9BQVEsSUFBR0gsQ0FBQyxDQUFDSSxLQUFNLEVBQXJGLENBQVo7QUFDQSxZQUFNSCxHQUFOO0FBQ0g7QUFDSjs7QUFDRCxRQUFNZ0MsSUFBSSxHQUFHbkIsZUFBZSxDQUFDekQsTUFBRCxDQUE1Qjs7QUFFQSxNQUFJMkUsY0FBYyxDQUFDQyxJQUFuQixFQUF5QjtBQUVyQkQsSUFBQUEsY0FBYyxDQUFDQyxJQUFmLEdBQXNCLEVBQUUsR0FBR0QsY0FBYyxDQUFDQyxJQUFwQjtBQUEwQixTQUFHQTtBQUE3QixLQUF0QjtBQUNILEdBSEQsTUFJSztBQUNERCxJQUFBQSxjQUFjLEdBQUcsRUFBRSxHQUFHQSxjQUFMO0FBQXFCQyxNQUFBQSxJQUFJLEVBQUVBO0FBQTNCLEtBQWpCO0FBQ0g7O0FBRUQsUUFBTUMscUJBQXFCLEdBQUdKLE9BQU8sQ0FBQ0YsU0FBUixJQUFxQkUsT0FBTyxDQUFDRixTQUFSLENBQWtCQyxTQUFyRTtBQUNBLFFBQU1NLG9CQUFvQixHQUFHSCxjQUFjLENBQUNKLFNBQWYsSUFBNEJJLGNBQWMsQ0FBQ0osU0FBZixDQUF5QkMsU0FBbEY7O0FBQ0EsTUFBSSxDQUFDSyxxQkFBRCxJQUEwQixDQUFDQyxvQkFBL0IsRUFBcUQ7QUFDakQsUUFBSSxDQUFDSCxjQUFjLENBQUNKLFNBQXBCLEVBQStCO0FBQzNCSSxNQUFBQSxjQUFjLENBQUNKLFNBQWYsR0FBMkIsRUFBM0I7QUFDSDs7QUFDREksSUFBQUEsY0FBYyxDQUFDSixTQUFmLENBQXlCQyxTQUF6QixHQUFxQyxDQUFDckYsZ0JBQUQsQ0FBckM7QUFDSDs7QUFFRCxNQUFJZSxJQUFJLEdBQUd1RSxPQUFPLENBQUN2RSxJQUFSLElBQWdCeUUsY0FBYyxDQUFDekUsSUFBL0IsSUFBdUMsSUFBbEQ7O0FBQ0EsTUFBSSxDQUFDQSxJQUFELElBQVNGLE1BQWIsRUFBcUI7QUFDakJFLElBQUFBLElBQUksR0FBR0YsTUFBTSxDQUFDRSxJQUFQLEtBQWdCbEIsdUJBQWhCLEdBQTBDZ0IsTUFBTSxDQUFDRSxJQUFqRCxHQUF3REYsTUFBTSxDQUFDK0UsUUFBdEU7QUFDSDs7QUFHRCxTQUFPLEVBQUUsR0FBR25CLFlBQUw7QUFBbUIsT0FBR2UsY0FBdEI7QUFBc0MsT0FBR0YsT0FBekM7QUFBa0R2RSxJQUFBQSxJQUFJLEVBQUVBO0FBQXhELEdBQVA7QUFDSDs7QUFFTSxTQUFTd0UscUJBQVQsQ0FBK0JwRixJQUEvQixFQUFxQztBQUN4QyxRQUFNMEYsSUFBSSxHQUFHO0FBRVQ5RSxJQUFBQSxJQUFJLEVBQUVaLElBQUksQ0FBQ1ksSUFBTCxJQUFhLElBRlY7QUFJVDJELElBQUFBLFdBQVcsRUFBR3ZFLElBQUksQ0FBQzJGLENBQUwsSUFBVTNGLElBQUksQ0FBQzRGLE9BQWYsSUFBMEIsSUFKL0I7QUFLVHBCLElBQUFBLFdBQVcsRUFBR3hFLElBQUksQ0FBQzZGLENBQUwsSUFBVTdGLElBQUksQ0FBQzhGLE1BQWYsSUFBeUIsSUFMOUI7QUFNVHJCLElBQUFBLFNBQVMsRUFBR3pFLElBQUksQ0FBQzZGLENBQUwsSUFBVTdGLElBQUksQ0FBQzhGLE1BQWYsSUFBeUIsSUFONUI7QUFPVHBCLElBQUFBLGFBQWEsRUFBRTFFLElBQUksQ0FBQytGLE1BQUwsR0FBYy9GLElBQUksQ0FBQytGLE1BQUwsS0FBZ0IsTUFBOUIsR0FBdUMsSUFQN0M7QUFRVHhFLElBQUFBLFVBQVUsRUFBR3ZCLElBQUksQ0FBQ2dHLENBQUwsR0FBU0MsUUFBUSxDQUFDakcsSUFBSSxDQUFDZ0csQ0FBTixDQUFqQixHQUE2QmhHLElBQUksQ0FBQ2tHLElBQUwsR0FBWUQsUUFBUSxDQUFDakcsSUFBSSxDQUFDa0csSUFBTixDQUFwQixHQUFrQyxJQVJuRTtBQVNUdEIsSUFBQUEsU0FBUyxFQUFFNUUsSUFBSSxDQUFDbUcsT0FBTCxJQUFnQixJQVRsQjtBQVVUQyxJQUFBQSxNQUFNLEVBQUVwRyxJQUFJLENBQUNxRyxNQUFMLElBQWUsSUFWZDtBQVdUeEIsSUFBQUEsS0FBSyxFQUFFN0UsSUFBSSxDQUFDc0csQ0FBTCxJQUFVdEcsSUFBSSxDQUFDNkUsS0FBZixJQUF3QjtBQVh0QixHQUFiOztBQWNBLE1BQUk3RSxJQUFJLENBQUN1RyxFQUFMLElBQVcsT0FBT3ZHLElBQUksQ0FBQ3VHLEVBQVosS0FBbUIsUUFBOUIsSUFBMEN2RyxJQUFJLENBQUN1RyxFQUFMLENBQVFDLE1BQVIsR0FBaUIsQ0FBL0QsRUFBa0U7QUFDOUQsVUFBTUMsYUFBYSxHQUFHekcsSUFBSSxDQUFDdUcsRUFBTCxDQUFRL0QsS0FBUixDQUFjLEdBQWQsQ0FBdEI7QUFDQWtELElBQUFBLElBQUksQ0FBQ1QsU0FBTCxHQUFpQjtBQUNiQyxNQUFBQSxTQUFTLEVBQUV1QjtBQURFLEtBQWpCOztBQUtBLFFBQUl6RyxJQUFJLENBQUMwRyxFQUFMLElBQVcsT0FBTzFHLElBQUksQ0FBQzBHLEVBQVosS0FBbUIsUUFBOUIsSUFBMEMxRyxJQUFJLENBQUMwRyxFQUFMLENBQVFGLE1BQVIsR0FBaUIsQ0FBL0QsRUFBa0U7QUFDOURkLE1BQUFBLElBQUksQ0FBQ1QsU0FBTCxDQUFlMEIsU0FBZixHQUEyQjNHLElBQUksQ0FBQzBHLEVBQWhDO0FBQ0g7QUFDSjs7QUFFRCxNQUFJMUcsSUFBSSxDQUFDNEcsQ0FBTCxJQUFVNUcsSUFBSSxDQUFDNkcsS0FBbkIsRUFBMEI7QUFDdEJuQixJQUFBQSxJQUFJLENBQUN0RSxVQUFMLEdBQWtCO0FBQ2RDLE1BQUFBLElBQUksRUFBRXJCLElBQUksQ0FBQzRHLENBQUwsSUFBVTVHLElBQUksQ0FBQzZHLEtBQWYsSUFBd0IsSUFEaEI7QUFFZHZGLE1BQUFBLElBQUksRUFBRXRCLElBQUksQ0FBQzhHLEVBQUwsSUFBVztBQUZILEtBQWxCO0FBSUg7O0FBR0QsTUFBSTlHLElBQUksQ0FBQytHLEtBQUwsSUFBYyxPQUFPL0csSUFBSSxDQUFDK0csS0FBWixLQUFzQixRQUFwQyxJQUFnRC9HLElBQUksQ0FBQytHLEtBQUwsQ0FBV1AsTUFBWCxHQUFvQixDQUF4RSxFQUEyRTtBQUN2RSxVQUFNTyxLQUFLLEdBQUcvRyxJQUFJLENBQUMrRyxLQUFMLENBQVd2RSxLQUFYLENBQWlCLEdBQWpCLENBQWQ7QUFDQWtELElBQUFBLElBQUksQ0FBQ3FCLEtBQUwsR0FBYUEsS0FBYjtBQUNIOztBQUVELE1BQUkvRyxJQUFJLENBQUNnSCxPQUFMLElBQWdCLE9BQU9oSCxJQUFJLENBQUNnSCxPQUFaLEtBQXdCLFFBQXhDLElBQW9EaEgsSUFBSSxDQUFDZ0gsT0FBTCxDQUFhUixNQUFiLEdBQXNCLENBQTlFLEVBQWlGO0FBQzdFLFVBQU1RLE9BQU8sR0FBR2hILElBQUksQ0FBQ2dILE9BQUwsQ0FBYXhFLEtBQWIsQ0FBbUIsR0FBbkIsQ0FBaEI7QUFDQWtELElBQUFBLElBQUksQ0FBQ3NCLE9BQUwsR0FBZUEsT0FBZjtBQUNIOztBQUVELFNBQU9DLG9CQUFvQixDQUFDdkIsSUFBRCxDQUEzQjtBQUNIOztBQUVELFNBQVN1QixvQkFBVCxDQUE4QkMsR0FBOUIsRUFBbUM7QUFDL0IsTUFBSSxPQUFPQSxHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDekIsV0FBT0EsR0FBUDtBQUNIOztBQUNELFFBQU1DLEtBQUssR0FBRyxFQUFFLEdBQUdEO0FBQUwsR0FBZDtBQUNBLFFBQU1FLElBQUksR0FBR3ZELE1BQU0sQ0FBQ3VELElBQVAsQ0FBWUYsR0FBWixDQUFiO0FBQ0Esc0JBQVNFLElBQVQsRUFBZUMsR0FBRyxJQUFJO0FBQ2xCLFFBQUl4RCxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ2tELEdBQXJDLEVBQTBDRyxHQUExQyxNQUFtREgsR0FBRyxDQUFDRyxHQUFELENBQUgsSUFBWSxJQUFaLElBQW9CSCxHQUFHLENBQUNHLEdBQUQsQ0FBSCxJQUFZQyxTQUFuRixDQUFKLEVBQW1HO0FBQy9GLGFBQU9ILEtBQUssQ0FBQ0UsR0FBRCxDQUFaO0FBQ0g7QUFDSixHQUpEO0FBS0EsU0FBT0YsS0FBUDtBQUNIOztBQUVNLFNBQVNJLGlCQUFULENBQTJCQyxVQUEzQixFQUF1Q0MsT0FBdkMsRUFBZ0Q7QUFDbkQsTUFBSTNGLEdBQUcsR0FBRzJGLE9BQU8sSUFBSXZFLE9BQU8sQ0FBQ3BCLEdBQVIsRUFBckI7O0FBRUEsTUFBSSxPQUFPMEYsVUFBUCxLQUF1QixXQUEzQixFQUF3QztBQUNwQ0EsSUFBQUEsVUFBVSxHQUFHMUYsR0FBYjtBQUNILEdBRkQsTUFJSztBQUNEMEYsTUFBQUEsVUFBVSxHQUFHdkcsY0FBT3lHLFdBQVAsQ0FBbUJGLFVBQW5CLEVBQStCMUYsR0FBL0IsQ0FBYjtBQUNIOztBQUVELE1BQUksQ0FBQ0MsWUFBR0MsVUFBSCxDQUFjd0YsVUFBZCxDQUFMLEVBQWdDO0FBQzVCLFdBQU8sSUFBUDtBQUNIOztBQUVELFFBQU1HLEtBQUssR0FBRzVGLFlBQUc2RixTQUFILENBQWFKLFVBQWIsQ0FBZDs7QUFDQSxRQUFNSyxVQUFVLEdBQUdGLEtBQUssQ0FBQ0csV0FBTixFQUFuQjtBQUNBLE1BQUlDLGNBQUo7O0FBQ0EsTUFBSUYsVUFBSixFQUFnQjtBQUlaL0YsSUFBQUEsR0FBRyxHQUFHMkYsT0FBTyxJQUFJRCxVQUFqQjtBQUVBTyxJQUFBQSxjQUFjLEdBQUc1RyxjQUFLVSxJQUFMLENBQVUyRixVQUFWLEVBQXNCOUgsdUJBQXVCLEdBQUcsS0FBaEQsQ0FBakI7O0FBQ0EsUUFBSSxDQUFDcUMsWUFBR0MsVUFBSCxDQUFjK0YsY0FBZCxDQUFMLEVBQW9DO0FBQ2hDQSxNQUFBQSxjQUFjLEdBQUc1RyxjQUFLVSxJQUFMLENBQVUyRixVQUFWLEVBQXNCOUgsdUJBQXVCLEdBQUcsT0FBaEQsQ0FBakI7O0FBQ0EsVUFBSSxDQUFDcUMsWUFBR0MsVUFBSCxDQUFjK0YsY0FBZCxDQUFMLEVBQW9DO0FBQ2hDLGVBQU8sSUFBUDtBQUNIO0FBQ0o7QUFDSixHQWJELE1BY0s7QUFDREEsSUFBQUEsY0FBYyxHQUFHNUcsY0FBS1UsSUFBTCxDQUFVQyxHQUFWLEVBQWVwQyx1QkFBdUIsR0FBRyxLQUF6QyxDQUFqQjs7QUFDQSxRQUFJLENBQUNxQyxZQUFHQyxVQUFILENBQWMrRixjQUFkLENBQUwsRUFBb0M7QUFDaENBLE1BQUFBLGNBQWMsR0FBRzVHLGNBQUtVLElBQUwsQ0FBVUMsR0FBVixFQUFlcEMsdUJBQXVCLEdBQUcsT0FBekMsQ0FBakI7O0FBQ0EsVUFBSSxDQUFDcUMsWUFBR0MsVUFBSCxDQUFjK0YsY0FBZCxDQUFMLEVBQW9DO0FBQ2hDQSxRQUFBQSxjQUFjLEdBQUdULFNBQWpCO0FBQ0g7QUFDSjtBQUNKOztBQUNELE1BQUksQ0FBQ0UsVUFBTCxFQUFpQjtBQUNiLFdBQU8sSUFBUDtBQUNIOztBQUNELFNBQU87QUFFSHJHLElBQUFBLElBQUksRUFBRXFHLFVBRkg7QUFHSHpHLElBQUFBLFVBQVUsRUFBRWdILGNBSFQ7QUFLSGpHLElBQUFBLEdBQUcsRUFBRUEsR0FBRyxJQUFJWCxjQUFLNkcsT0FBTCxDQUFhUixVQUFiLENBTFQ7QUFPSDVHLElBQUFBLElBQUksRUFBRUssY0FBT2dILHFCQUFQLENBQTZCVCxVQUE3QixDQVBIO0FBU0hVLElBQUFBLFFBQVEsRUFBRS9HLGNBQUtnSCxRQUFMLENBQWNYLFVBQWQsQ0FUUDtBQVdIL0IsSUFBQUEsUUFBUSxFQUFFdEUsY0FBS2dILFFBQUwsQ0FBY2hILGNBQUs2RyxPQUFMLENBQWFSLFVBQWIsQ0FBZCxDQVhQO0FBYUgxRyxJQUFBQSxTQUFTLEVBQUVLLGNBQUs0QixPQUFMLENBQWF5RSxVQUFiO0FBYlIsR0FBUDtBQWVIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2FzeW5jJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcclxuXHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA9ICdveHlnZW4uY29uZic7XHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUgPSAnb3h5Z2VuLnBvJztcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVQT1JURVIgPSAnaHRtbCc7XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmNvbmZpZyB9O1xyXG4gICAgb3B0aW9ucy5lbnYgPSBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMucG8gPSBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMuc3VpdGVzID0gYXdhaXQgbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3VpdGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgaWYgKGNvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIGNvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnICYmIGNvbmZpZy5mcmFtZXdvcmsudG9Mb3dlckNhc2UoKSAhPT0gJ294eWdlbicpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgaXNDb25maWdGaWxlID0gdGFyZ2V0ICYmIChcclxuICAgICAgICAodGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDApXHJcbiAgICAgICAgfHwgKHRhcmdldC5leHRlbnNpb24gPT09ICcnICYmIHRhcmdldC5jb25maWdQYXRoICYmIHRhcmdldC5jb25maWdQYXRoLmluZGV4T2YoT1hZR0VOX0NPTkZJR19GSUxFX05BTUUpID4gLTEpXHJcbiAgICApO1xyXG4gICAgbGV0IHN1aXRlcyA9IFtdO1xyXG4gICAgLy8gaWYgYW4gaW5kaXZpZHVhbCBzY3JpcHQgb3Igc3VpdGUgZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBpZiAoIWlzQ29uZmlnRmlsZSkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgZmFsc2UsIGNvbmZpZy5pdGVyYXRpb25zIHx8IDEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBjb25maWcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhIGZvbGRlciBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zdWl0ZXMgJiYgQXJyYXkuaXNBcnJheShjb25maWcuc3VpdGVzKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBjb25maWcuc3VpdGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiBtb3JlIHN1aXRlcyBhcmUgZGVmaW5lZCBpbiB0aGUgJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgY29uc3Qgc3VpdGVzRm9sZGVyID0gcGF0aC5qb2luKHRhcmdldC5jd2QsICdzdWl0ZXMnKTtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzdWl0ZXNGb2xkZXIpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnN1aXRlRGVmcyxcclxuICAgICAgICAgICAgICAgIC4uLmxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihzdWl0ZXNGb2xkZXIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1lcmdlIHN1aXRlcyBjb25maWd1cmVkIGluIHRoZSBwcm9qZWN0IGNvbmZpZyBmaWxlIGFuZCB0aG9zZSBmb3VuZCBpbiAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBzdWl0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChzdWl0ZURlZnMubWFwKGFzeW5jIChzdWl0ZURlZikgPT4gYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24oc3VpdGVEZWYsIGNvbmZpZykpKTtcclxuICAgIH1cclxuICAgIC8vIGZpbHRlciBvdXQgc3VpdGVzIGlmICctLXN1aXRlcycgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWRcclxuICAgIGlmIChhcmd2LnN1aXRlcyAmJiB0eXBlb2YgYXJndi5zdWl0ZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWl0ZU5hbWVzID0gYXJndi5zdWl0ZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBzdWl0ZXMgPSBzdWl0ZXMuZmlsdGVyKHggPT4gc2VsZWN0ZWRTdWl0ZU5hbWVzLmluY2x1ZGVzKHgubmFtZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1aXRlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihmb2xkZXJQYXRoKSB7XHJcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGZvbGRlclBhdGgpO1xyXG4gICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgZm9yRWFjaChmaWxlcywgZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShmaWxlKSA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlKTtcclxuICAgICAgICAgICAgc3VpdGVEZWZzLnB1c2gobW9kdWxlUmVxdWlyZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1aXRlRGVmcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YgPSB7fSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IHBvRmlsZU5hbWUgPSBhcmd2LnBvIHx8IGAke09YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUV9LmpzYDtcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGxldCBwb0ZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgcG9GaWxlTmFtZSk7XHJcbiAgICBwb0ZpbGVQYXRoID0gZnMuZXhpc3RzU3luYyhwb0ZpbGVQYXRoKSA/IHBvRmlsZVBhdGggOiBudWxsO1xyXG5cclxuICAgIGlmIChwb0ZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbW9kdWxlUmVxdWlyZShwb0ZpbGVQYXRoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvRmlsZVBhdGg7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7cG9GaWxlUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgZW52TmFtZSA9IGFyZ3YuZW52IHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnZGVmYXVsdCc7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgY29uc3QgZW52ID0gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgaWYgKGVudiAmJiB0eXBlb2YgZW52ID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW52LCBlbnZOYW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZW52W2Vudk5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRyeSB0byByZXNvbHZlIGEgZGVkaWNhdGVkIGVudmlyb25tZW50IGZpbGUgaW4gJ2Vudicgc3ViIGZvbGRlclxyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9LmpzYCk7XHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnNvbiA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc29uYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnMpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzb24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCkge1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7ZGVmYXVsdEVudkZpbGV9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9ucyh0YXJnZXQsIGFyZ3YpIHtcclxuICAgIC8vIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbREVGQVVMVF9SRVBPUlRFUl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcmFtZXRlcnMgOiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6ICdzZXEnXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvLyByZXRyaWV2ZSBvcHRpb25zIHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBjb25zdCBjbWRPcHRzID0gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpO1xyXG4gICAgLy8gaWYgdGhlIHRhcmdldCBpcyBveHlnZW4gY29uZmlnIGZpbGUsIG1lcmdlIGl0cyBjb250ZW50IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgbGV0IHByb2pDb25maWdPcHRzID0ge307XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5uYW1lID09PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSAmJiAodGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycgfHwgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IG1vZHVsZVJlcXVpcmUodGFyZ2V0LnBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5wYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5jb25maWdQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5jb25maWdQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQuY29uZmlnUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIG1ha2Ugc3VyZSB0byBzZXQgZGVmYXVsdCBIVE1MIHJlcG9ydGVyIGlmIHJlcG9ydGluZyBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQgaW4gb3h5Z2VuLmNvbmYgZmlsZSBhbmQgdmlhIGNvbW1hbmQgbGluZVxyXG4gICAgY29uc3QgaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ID0gY21kT3B0cy5yZXBvcnRpbmcgJiYgY21kT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xyXG4gICAgY29uc3QgaXNDb25maWdSZXBvcnRGb3JtYXQgPSBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcgJiYgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycztcclxuICAgIGlmICghaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ICYmICFpc0NvbmZpZ1JlcG9ydEZvcm1hdCkge1xyXG4gICAgICAgIGlmICghcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzLnJlcG9ydGluZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzID0gW0RFRkFVTFRfUkVQT1JURVJdO1xyXG4gICAgfVxyXG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxyXG4gICAgbGV0IG5hbWUgPSBjbWRPcHRzLm5hbWUgfHwgcHJvakNvbmZpZ09wdHMubmFtZSB8fCBudWxsO1xyXG4gICAgaWYgKCFuYW1lICYmIHRhcmdldCkge1xyXG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcclxuICAgIH1cclxuICAgIC8vIG1lcmdlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHRoZSBsYXN0IG9uZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIG9uZSk6XHJcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfT1BUUywgLi4ucHJvakNvbmZpZ09wdHMsIC4uLmNtZE9wdHMsIG5hbWU6IG5hbWUgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxyXG4gICAgICAgIG5hbWU6IGFyZ3YubmFtZSB8fCBudWxsLFxyXG4gICAgICAgIC8vIHN3aXRjaDogLWIgb3IgLS1icm93c2VyXHJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXHJcbiAgICAgICAgc2VsZW5pdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICBhcHBpdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbnMgOiBhcmd2LmkgPyBwYXJzZUludChhcmd2LmkpIDogKGFyZ3YuaXRlciA/IHBhcnNlSW50KGFyZ3YuaXRlcikgOiBudWxsKSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IGFyZ3YuZGJncG9ydCB8fCBudWxsLFxyXG4gICAgICAgIHdzUG9ydDogYXJndi53c3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCwgdXNlckN3ZCkge1xyXG4gICAgbGV0IGN3ZCA9IHVzZXJDd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIC8vIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBwYXRoXHJcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBjd2Q7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgY3dkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcclxuICAgIGNvbnN0IGlzRGlyZWN0b3IgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xyXG4gICAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xyXG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcclxuICAgICAgICAvLyBpZiBcInRhcmdldFwiIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGlzIGEgZGlyZWN0b3J5LFxyXG4gICAgICAgIC8vIHRoZW4gdW5sZXNzIFwiY3dkXCIgaXMgcHJvdmlkZWQgZXhwbGljaXRseSBieSB0aGUgdXNlclxyXG4gICAgICAgIC8vIHVzZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGN3ZFxyXG4gICAgICAgIGN3ZCA9IHVzZXJDd2QgfHwgdGFyZ2V0UGF0aDtcclxuICAgICAgICAvLyBhcHBlbmQgb3h5Z2VuIGNvbmZpZyBmaWxlIG5hbWUgdG8gdGhlIGRpcmVjdG9yeSwgaWYgbm8gdGVzdCBjYXNlIGZpbGUgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanNvbicpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0YXJnZXRQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgY29uZmlnUGF0aDogY29uZmlnRmlsZVBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
|
380
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsImNvbmZpZ1BhdGgiLCJwdXNoIiwib3h1dGlsIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwicGF0aCIsInBhcmFtZXRlcnMiLCJmaWxlIiwibW9kZSIsIml0ZXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsInN1aXRlRGVmcyIsIkFycmF5IiwiaXNBcnJheSIsInN1aXRlc0ZvbGRlciIsImpvaW4iLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwic3VpdGVEZWYiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic2VsZWN0ZWRTdWl0ZU5hbWVzIiwic3BsaXQiLCJmaWx0ZXIiLCJ4IiwiaW5jbHVkZXMiLCJmb2xkZXJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImV4dG5hbWUiLCJmdWxsUGF0aCIsInBvRmlsZU5hbWUiLCJwcm9jZXNzIiwicG9GaWxlUGF0aCIsInJlc29sdmUiLCJlIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJlbnZOYW1lIiwiZW52aXJvbm1lbnQiLCJkZWZhdWx0RW52RmlsZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZGljYXRlZEVudkZpbGVKcyIsImRlZGljYXRlZEVudkZpbGVKc29uIiwiZ2V0RW52aXJvbm1lbnRzIiwidGFyZ2V0Q3dkIiwiZ2V0Q29uZmlndXJhdGlvbnMiLCJERUZBVUxUX09QVFMiLCJicm93c2VyTmFtZSIsInNlbGVuaXVtVXJsIiwiYXBwaXVtVXJsIiwicmVvcGVuU2Vzc2lvbiIsInJlUnVuT25GYWlsZWQiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJyZXBvcnRlcnMiLCJjbWRPcHRzIiwiZ2V0Q29tbWFuZExpbmVPcHRpb25zIiwicHJvakNvbmZpZ09wdHMiLCJlbnZzIiwiaXNDbWRPcHRzUmVwb3J0Rm9ybWF0IiwiaXNDb25maWdSZXBvcnRGb3JtYXQiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsIndzUG9ydCIsIndzcG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJ1c2VyQ3dkIiwicmVzb2x2ZVBhdGgiLCJzdGF0cyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3IiLCJpc0RpcmVjdG9yeSIsImNvbmZpZ0ZpbGVQYXRoIiwiZW5kc1dpdGgiLCJkaXJuYW1lIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwiZnVsbE5hbWUiLCJiYXNlbmFtZSJdLCJtYXBwaW5ncyI6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RUFBRUssY0FBSzRCLE9BQUwsQ0FBYXlFLFVBQWI7QUFiUixHQUFQO0FBZUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVBPUlRFUiA9ICdodG1sJztcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uY29uZmlnIH07XHJcbiAgICBvcHRpb25zLmVudiA9IGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5wbyA9IGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5zdWl0ZXMgPSBhd2FpdCBsb2FkU3VpdGVzKGNvbmZpZywgYXJndik7XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBpZiAoY29uZmlnLmZyYW1ld29yayAmJiB0eXBlb2YgY29uZmlnLmZyYW1ld29yayA9PT0gJ3N0cmluZycgJiYgY29uZmlnLmZyYW1ld29yay50b0xvd2VyQ2FzZSgpICE9PSAnb3h5Z2VuJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBjb25maWc7XHJcbiAgICBjb25zdCBpc0NvbmZpZ0ZpbGUgPSB0YXJnZXQgJiYgKFxyXG4gICAgICAgICh0YXJnZXQubmFtZSAmJiB0YXJnZXQubmFtZS5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA9PT0gMClcclxuICAgICAgICB8fCAodGFyZ2V0LmV4dGVuc2lvbiA9PT0gJycgJiYgdGFyZ2V0LmNvbmZpZ1BhdGggJiYgdGFyZ2V0LmNvbmZpZ1BhdGguaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPiAtMSlcclxuICAgICk7XHJcbiAgICBsZXQgc3VpdGVzID0gW107XHJcbiAgICAvLyBpZiBhbiBpbmRpdmlkdWFsIHNjcmlwdCBvciBzdWl0ZSBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGlmICghaXNDb25maWdGaWxlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBmYWxzZSwgY29uZmlnLml0ZXJhdGlvbnMgfHwgMSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGNvbmZpZykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIGEgZm9sZGVyIG9yIGEgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgICAgICBpZiAoY29uZmlnLnN1aXRlcyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5zdWl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IGNvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIG1vcmUgc3VpdGVzIGFyZSBkZWZpbmVkIGluIHRoZSAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBjb25zdCBzdWl0ZXNGb2xkZXIgPSBwYXRoLmpvaW4odGFyZ2V0LmN3ZCwgJ3N1aXRlcycpO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHN1aXRlc0ZvbGRlcikpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4uc3VpdGVEZWZzLFxyXG4gICAgICAgICAgICAgICAgLi4ubG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKHN1aXRlc0ZvbGRlcilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWVyZ2Ugc3VpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIHByb2plY3QgY29uZmlnIGZpbGUgYW5kIHRob3NlIGZvdW5kIGluICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIHN1aXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKHN1aXRlRGVmcy5tYXAoYXN5bmMgKHN1aXRlRGVmKSA9PiBhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihzdWl0ZURlZiwgY29uZmlnKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZmlsdGVyIG91dCBzdWl0ZXMgaWYgJy0tc3VpdGVzJyBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2FzIHNwZWNpZmllZFxyXG4gICAgaWYgKGFyZ3Yuc3VpdGVzICYmIHR5cGVvZiBhcmd2LnN1aXRlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN1aXRlTmFtZXMgPSBhcmd2LnN1aXRlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHN1aXRlcyA9IHN1aXRlcy5maWx0ZXIoeCA9PiBzZWxlY3RlZFN1aXRlTmFtZXMuaW5jbHVkZXMoeC5uYW1lKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VpdGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKGZvbGRlclBhdGgpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICBmb3JFYWNoKGZpbGVzLCBmaWxlID0+IHtcclxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGZpbGUpID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGZvbGRlclBhdGgsIGZpbGUpO1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMucHVzaChtb2R1bGVSZXF1aXJlKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VpdGVEZWZzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndiA9IHt9KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgcG9GaWxlTmFtZSA9IGFyZ3YucG8gfHwgYCR7T1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRX0uanNgO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgbGV0IHBvRmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCBwb0ZpbGVOYW1lKTtcclxuICAgIHBvRmlsZVBhdGggPSBmcy5leGlzdHNTeW5jKHBvRmlsZVBhdGgpID8gcG9GaWxlUGF0aCA6IG51bGw7XHJcblxyXG4gICAgaWYgKHBvRmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtb2R1bGVSZXF1aXJlKHBvRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcG9GaWxlUGF0aDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtwb0ZpbGVQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBlbnZOYW1lID0gYXJndi5lbnYgfHwgY29uZmlnLmVudmlyb25tZW50IHx8ICdkZWZhdWx0JztcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICBpZiAoZW52ICYmIHR5cGVvZiBlbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnYsIGVudk5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbnZbZW52TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHJ5IHRvIHJlc29sdmUgYSBkZWRpY2F0ZWQgZW52aXJvbm1lbnQgZmlsZSBpbiAnZW52JyBzdWIgZm9sZGVyXHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnMgPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNgKTtcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKc29uID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9Lmpzb25gKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKcykpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnNvbikpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnNvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnZpcm9ubWVudHModGFyZ2V0KSB7XHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtkZWZhdWx0RW52RmlsZX0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25zKHRhcmdldCwgYXJndikge1xyXG4gICAgLy8gcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgICAgIGN3ZDogdGFyZ2V0ID8gKHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpKSA6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdjaHJvbWUnLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInLFxyXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBmYWxzZSxcclxuICAgICAgICByZVJ1bk9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBpdGVyYXRpb25zIDogMSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IG51bGwsXHJcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3RBcHBpdW1Mb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydGluZzoge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IFtERUZBVUxUX1JFUE9SVEVSXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyYW1ldGVycyA6IHtcclxuICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogJ3NlcSdcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuICAgIC8vIHJldHJpZXZlIG9wdGlvbnMgcHJvdmlkZWQgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGNvbnN0IGNtZE9wdHMgPSBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndik7XHJcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG94eWdlbiBjb25maWcgZmlsZSwgbWVyZ2UgaXRzIGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBsZXQgcHJvakNvbmZpZ09wdHMgPSB7fTtcclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgPT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICYmICh0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJyB8fCB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzID0gbW9kdWxlUmVxdWlyZSh0YXJnZXQucGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7dGFyZ2V0LnBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmNvbmZpZ1BhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IG1vZHVsZVJlcXVpcmUodGFyZ2V0LmNvbmZpZ1BhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5jb25maWdQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZW52cyA9IGdldEVudmlyb25tZW50cyh0YXJnZXQpO1xyXG5cclxuICAgIGlmIChwcm9qQ29uZmlnT3B0cy5lbnZzKSB7XHJcbiAgICAgICAgLy8gbWVyZ2UgZXh0ZXJuYWwgZW52aXJvbm1lbnRzIGRlZmluaXRpb24gd2l0aCB0aGUgb25lIGluIHRoZSBjb25maWcgZmlsZVxyXG4gICAgICAgIHByb2pDb25maWdPcHRzLmVudnMgPSB7IC4uLnByb2pDb25maWdPcHRzLmVudnMsIC4uLmVudnMgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByb2pDb25maWdPcHRzID0geyAuLi5wcm9qQ29uZmlnT3B0cywgZW52czogZW52cyB9O1xyXG4gICAgfVxyXG4gICAgLy8gbWFrZSBzdXJlIHRvIHNldCBkZWZhdWx0IEhUTUwgcmVwb3J0ZXIgaWYgcmVwb3J0aW5nIG9wdGlvbnMgYXJlIG5vdCBwcm92aWRlZCBpbiBveHlnZW4uY29uZiBmaWxlIGFuZCB2aWEgY29tbWFuZCBsaW5lXHJcbiAgICBjb25zdCBpc0NtZE9wdHNSZXBvcnRGb3JtYXQgPSBjbWRPcHRzLnJlcG9ydGluZyAmJiBjbWRPcHRzLnJlcG9ydGluZy5yZXBvcnRlcnM7XHJcbiAgICBjb25zdCBpc0NvbmZpZ1JlcG9ydEZvcm1hdCA9IHByb2pDb25maWdPcHRzLnJlcG9ydGluZyAmJiBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xyXG4gICAgaWYgKCFpc0NtZE9wdHNSZXBvcnRGb3JtYXQgJiYgIWlzQ29uZmlnUmVwb3J0Rm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKCFwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcpIHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2pDb25maWdPcHRzLnJlcG9ydGluZy5yZXBvcnRlcnMgPSBbREVGQVVMVF9SRVBPUlRFUl07XHJcbiAgICB9XHJcbiAgICAvLyBkZXRlcm1pbmUgdGVzdCBuYW1lXHJcbiAgICBsZXQgbmFtZSA9IGNtZE9wdHMubmFtZSB8fCBwcm9qQ29uZmlnT3B0cy5uYW1lIHx8IG51bGw7XHJcbiAgICBpZiAoIW5hbWUgJiYgdGFyZ2V0KSB7XHJcbiAgICAgICAgbmFtZSA9IHRhcmdldC5uYW1lICE9PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA/IHRhcmdldC5uYW1lIDogdGFyZ2V0LmJhc2VOYW1lO1xyXG4gICAgfVxyXG4gICAgLy8gbWVyZ2Ugb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBvcmRlciAodGhlIGxhc3Qgb25lIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgb25lKTpcclxuICAgIC8vIGRlZmF1bHQgb3B0aW9ucywgcHJvamVjdCBjb25maWcgZmlsZSwgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVF9PUFRTLCAuLi5wcm9qQ29uZmlnT3B0cywgLi4uY21kT3B0cywgbmFtZTogbmFtZSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLW5hbWUgXHJcbiAgICAgICAgbmFtZTogYXJndi5uYW1lIHx8IG51bGwsXHJcbiAgICAgICAgLy8gc3dpdGNoOiAtYiBvciAtLWJyb3dzZXJcclxuICAgICAgICBicm93c2VyTmFtZSA6IGFyZ3YuYiB8fCBhcmd2LmJyb3dzZXIgfHwgbnVsbCxcclxuICAgICAgICBzZWxlbml1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIGFwcGl1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIHJlb3BlblNlc3Npb246IGFyZ3YucmVvcGVuID8gYXJndi5yZW9wZW4gPT09ICd0cnVlJyA6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IGFyZ3YuaSA/IHBhcnNlSW50KGFyZ3YuaSkgOiAoYXJndi5pdGVyID8gcGFyc2VJbnQoYXJndi5pdGVyKSA6IG51bGwpLFxyXG4gICAgICAgIGRlYnVnUG9ydDogYXJndi5kYmdwb3J0IHx8IG51bGwsXHJcbiAgICAgICAgd3NQb3J0OiBhcmd2LndzcG9ydCB8fCBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBhcmd2LmQgfHwgYXJndi5kZWxheSB8fCBudWxsLFxyXG4gICAgfTtcclxuICAgIC8vIHN3aXRjaDogLS1yZiBmbGFnXHJcbiAgICBpZiAoYXJndi5yZiAmJiB0eXBlb2YgYXJndi5yZiA9PT0gJ3N0cmluZycgJiYgYXJndi5yZi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0Rm9ybWF0cyA9IGFyZ3YucmYuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLnJlcG9ydGluZyA9IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiByZXBvcnRGb3JtYXRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tcm8gLSBzZXQgcmVwb3J0ZXIgb3V0cHV0IGRpcmVjdG9yeSBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgICAgIC8vIE5PVEU6IC0tcm8gc3dpdGNoIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggLS1yZlxyXG4gICAgICAgIGlmIChhcmd2LnJvICYmIHR5cGVvZiBhcmd2LnJvID09PSAnc3RyaW5nJyAmJiBhcmd2LnJvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0cy5yZXBvcnRpbmcub3V0cHV0RGlyID0gYXJndi5ybztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBvcHRpb246IC1wIG9yIC0tcGFyYW0gYW5kIC0tcG1cclxuICAgIGlmIChhcmd2LnAgfHwgYXJndi5wYXJhbSkge1xyXG4gICAgICAgIG9wdHMucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgZmlsZTogYXJndi5wIHx8IGFyZ3YucGFyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogYXJndi5wbSB8fCAnc2VxJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3dpdGNoOiAtLXNwZWNzIC0gc2V0IHNwZWNzIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICBpZiAoYXJndi5zcGVjcyAmJiB0eXBlb2YgYXJndi5zcGVjcyA9PT0gJ3N0cmluZycgJiYgYXJndi5zcGVjcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3Qgc3BlY3MgPSBhcmd2LnNwZWNzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5zcGVjcyA9IHNwZWNzO1xyXG4gICAgfVxyXG4gICAgLy8gc3dpdGNoOiAtLW1vZHVsZXMgLSBzZXQgYSBsaXN0IG9mIG1vZHVsZXMgdG8gYmUgbG9hZGVkLCBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3YubW9kdWxlcyAmJiB0eXBlb2YgYXJndi5tb2R1bGVzID09PSAnc3RyaW5nJyAmJiBhcmd2Lm1vZHVsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBhcmd2Lm1vZHVsZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLm1vZHVsZXMgPSBtb2R1bGVzO1xyXG4gICAgfVxyXG4gICAgLy8gcmVtb3ZlIGFueSBwcm9wZXJ0eSB3aXRoIG51bGwgdmFsdWUgKHNvIGl0IHdvbid0IG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIGlmIGl0J3MgbnVsbClcclxuICAgIHJldHVybiBkZWxldGVOdWxsUHJvcGVydGllcyhvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVsZXRlTnVsbFByb3BlcnRpZXMob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xvbmUgPSB7IC4uLm9iaiB9O1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3JFYWNoIChrZXlzLCBrZXkgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpICYmIChvYmpba2V5XSA9PSBudWxsIHx8IG9ialtrZXldID09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzVGFyZ2V0UGF0aCh0YXJnZXRQYXRoLCB1c2VyQ3dkKSB7XHJcbiAgICBsZXQgY3dkID0gdXNlckN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcclxuICAgIGlmICh0eXBlb2YodGFyZ2V0UGF0aCkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IGN3ZDtcclxuICAgIH1cclxuICAgIC8vIHVzZXIncyBwYXRoIG1pZ2h0IGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFrZSBzdXJlIHRoZSByZWxhdGl2ZSBwYXRoIHdpbGwgd29ya1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IG94dXRpbC5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBjd2QpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRzID0gZnMubHN0YXRTeW5jKHRhcmdldFBhdGgpO1xyXG4gICAgY29uc3QgaXNEaXJlY3RvciA9IHN0YXRzLmlzRGlyZWN0b3J5KCk7XHJcbiAgICBsZXQgY29uZmlnRmlsZVBhdGg7XHJcbiAgICBpZiAoaXNEaXJlY3Rvcikge1xyXG4gICAgICAgIC8vIGlmIFwidGFyZ2V0XCIgcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgYSBkaXJlY3RvcnksXHJcbiAgICAgICAgLy8gdGhlbiB1bmxlc3MgXCJjd2RcIiBpcyBwcm92aWRlZCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyXHJcbiAgICAgICAgLy8gdXNlIHRhcmdldCBkaXJlY3RvcnkgYXMgY3dkXHJcbiAgICAgICAgY3dkID0gdXNlckN3ZCB8fCB0YXJnZXRQYXRoO1xyXG4gICAgICAgIC8vIGFwcGVuZCBveHlnZW4gY29uZmlnIGZpbGUgbmFtZSB0byB0aGUgZGlyZWN0b3J5LCBpZiBubyB0ZXN0IGNhc2UgZmlsZSB3YXMgcHJvdmlkZWRcclxuICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFyZ2V0UGF0aC5lbmRzV2l0aChPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKSB8fCB0YXJnZXRQYXRoLmVuZHNXaXRoKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJykpIHtcclxuICAgICAgICBjb25maWdGaWxlUGF0aCA9IHRhcmdldFBhdGg7XHJcbiAgICAgICAgY3dkID0gdGFyZ2V0UGF0aCA9IHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGN3ZCA9IHVzZXJDd2QgfHwgcGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpO1xyXG4gICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0YXJnZXRQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgY29uZmlnUGF0aDogY29uZmlnRmlsZVBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
|
@@ -111,6 +111,12 @@ Object.defineProperty(exports, "utils", {
|
|
|
111
111
|
return _moduleUtils.default;
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
|
+
Object.defineProperty(exports, "mongo", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return _moduleMongo.default;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
114
120
|
|
|
115
121
|
require("source-map-support/register");
|
|
116
122
|
|
|
@@ -150,5 +156,7 @@ var _moduleProxy = _interopRequireDefault(require("./module-proxy"));
|
|
|
150
156
|
|
|
151
157
|
var _moduleUtils = _interopRequireDefault(require("./module-utils"));
|
|
152
158
|
|
|
159
|
+
var _moduleMongo = _interopRequireDefault(require("./module-mongo"));
|
|
160
|
+
|
|
153
161
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
154
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgYXNzZXJ0fSBmcm9tICcuL21vZHVsZS1hc3NlcnQnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgZGF0ZX0gZnJvbSAnLi9tb2R1bGUtZGF0ZSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkYn0gZnJvbSAnLi9tb2R1bGUtZGInO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgZW1haWx9IGZyb20gJy4vbW9kdWxlLWVtYWlsJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIGV5ZXN9IGZyb20gJy4vbW9kdWxlLWV5ZXMnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgaHR0cH0gZnJvbSAnLi9tb2R1bGUtaHR0cCc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2d9IGZyb20gJy4vbW9kdWxlLWxvZyc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYWlsaW5hdG9yfSBmcm9tICcuL21vZHVsZS1tYWlsaW5hdG9yJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIG1vYn0gZnJvbSAnLi9tb2R1bGUtbW9iJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHBkZn0gZnJvbSAnLi9tb2R1bGUtcGRmJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHNlcmlhbH0gZnJvbSAnLi9tb2R1bGUtc2VyaWFsJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHNoZWxsfSBmcm9tICcuL21vZHVsZS1zaGVsbCc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzb2FwfSBmcm9tICcuL21vZHVsZS1zb2FwJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHR3aWxpb30gZnJvbSAnLi9tb2R1bGUtdHdpbGlvJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHdlYn0gZnJvbSAnLi9tb2R1bGUtd2ViJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHdpbn0gZnJvbSAnLi9tb2R1bGUtd2luJztcclxuZXhwb3J0IHtkZWZhdWx0IGFzIHByb3h5fSBmcm9tICcuL21vZHVsZS1wcm94eSc7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyB1dGlsc30gZnJvbSAnLi9tb2R1bGUtdXRpbHMnO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgbW9uZ299IGZyb20gJy4vbW9kdWxlLW1vbmdvJzsiXX0=
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
11
|
+
|
|
12
|
+
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
13
|
+
|
|
14
|
+
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* Copyright (C) 2015-current CloudBeat Limited
|
|
20
|
+
*
|
|
21
|
+
* This program is free software: you can redistribute it and/or modify
|
|
22
|
+
* it under the terms of the GNU General Public License as published by
|
|
23
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
24
|
+
* (at your option) any later version.
|
|
25
|
+
*/
|
|
26
|
+
const {
|
|
27
|
+
MongoClient
|
|
28
|
+
} = require('mongodb');
|
|
29
|
+
|
|
30
|
+
const MODULE_NAME = 'mongo';
|
|
31
|
+
/**
|
|
32
|
+
* @name shell
|
|
33
|
+
* @description Provides methods for working with operating system shell.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
class MongoDbModule extends _OxygenModule.default {
|
|
37
|
+
constructor(options, context, rs, logger, modules, services) {
|
|
38
|
+
super(options, context, rs, logger, modules, services);
|
|
39
|
+
this._alwaysInitialized = false;
|
|
40
|
+
this._isInitialized = false;
|
|
41
|
+
this.client;
|
|
42
|
+
this.db;
|
|
43
|
+
this.collection;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @summary Initializes MongoDB session.
|
|
47
|
+
* @function init
|
|
48
|
+
* @param {string} hostOrUrl - Host name or full URL of the target MongoDB server.
|
|
49
|
+
* @param {string} dbName - Database name. You can change it later using "setDatabase" method.
|
|
50
|
+
* @param {string} [username] - Optional username for authentication.
|
|
51
|
+
* @param {string} [password] - Optional password for authentication.
|
|
52
|
+
* @param {string} [authSource=admin] - Optional authentication source. Default value is "admin".
|
|
53
|
+
* @param {number} [port=27017] - Optional MongoDB server port. Default value is 27017.
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
async init(hostOrUrl, dbName, username, password, authSource = 'admin', port = 27017) {
|
|
58
|
+
if (!hostOrUrl || typeof hostOrUrl !== 'string') {
|
|
59
|
+
throw new Error('MongoDB host name or full URL is not specified!');
|
|
60
|
+
} else if (!dbName) {
|
|
61
|
+
throw new Error('MongoDB database name is not specified!');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const isFullUrl = /^mongodb(\+srv)?:\/\//i.test(hostOrUrl);
|
|
65
|
+
const uri = isFullUrl ? hostOrUrl : (() => {
|
|
66
|
+
if (username) {
|
|
67
|
+
const encUsername = encodeURIComponent(username);
|
|
68
|
+
const encPassword = password ? encodeURIComponent(password) : undefined;
|
|
69
|
+
return `mongodb://${encUsername}:${encPassword || ''}@${hostOrUrl}:${port}/${dbName}?authSource=${authSource}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return `mongodb://${hostOrUrl}:${port}/${dbName}?authSource=${authSource}`;
|
|
73
|
+
})();
|
|
74
|
+
this.client = new MongoClient(uri, {
|
|
75
|
+
useNewUrlParser: true,
|
|
76
|
+
useUnifiedTopology: true
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
await this.client.connect();
|
|
81
|
+
this.db = this.client.db(dbName);
|
|
82
|
+
this._isInitialized = true;
|
|
83
|
+
} catch (e) {
|
|
84
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @summary Sets the current database to perform further actions.
|
|
89
|
+
* @function setDatabase
|
|
90
|
+
* @param {string} dbName - Database name.
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
setDatabase(dbName) {
|
|
95
|
+
this.db = this.client.db(dbName);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* @summary Sets the current collection to perform further actions.
|
|
99
|
+
* @function setCollection
|
|
100
|
+
* @param {string} collectionName - Collection name.
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
setCollection(collectionName) {
|
|
105
|
+
if (!this.db) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
this.collection = this.db.collection(collectionName);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @summary Finds documents in the current collection.
|
|
114
|
+
* @function find
|
|
115
|
+
* @param {object} filter - The filter predicate.
|
|
116
|
+
* @param {object} options - Optional settings for the command.
|
|
117
|
+
* @return {object} A list of documents.
|
|
118
|
+
*/
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
async find(filter, options) {
|
|
122
|
+
if (!this.collection) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
return await this.collection.find(filter, options).toArray();
|
|
128
|
+
} catch (e) {
|
|
129
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @summary Gets the number of documents matching the filter.
|
|
134
|
+
* @function countDocuments
|
|
135
|
+
* @param {object} filter - The filter for the count.
|
|
136
|
+
* @param {object} options - Optional settings for the command.
|
|
137
|
+
* @return {number} Number of documents matching the filter.
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
async countDocuments(filter, options) {
|
|
142
|
+
if (!this.collection) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
try {
|
|
147
|
+
return await this.collection.countDocuments(filter, options);
|
|
148
|
+
} catch (e) {
|
|
149
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* @summary Inserts a single document into a collection.
|
|
154
|
+
* @function insertOne
|
|
155
|
+
* @param {object} doc - The document to insert.
|
|
156
|
+
* @param {object} options - Optional settings for the command.
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
async insertOne(doc, options) {
|
|
161
|
+
if (!this.collection) {
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
return await this.collection.insertOne(doc, options);
|
|
167
|
+
} catch (e) {
|
|
168
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* @summary Inserts an array of documents into a collection.
|
|
173
|
+
* @function insertMany
|
|
174
|
+
* @param {object} docs - The documents to insert.
|
|
175
|
+
* @param {object} options - Optional settings for the command.
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
async insertMany(docs, options) {
|
|
180
|
+
if (!this.collection) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
return await this.collection.insertMany(docs, options);
|
|
186
|
+
} catch (e) {
|
|
187
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @summary Update a single document in a collection.
|
|
192
|
+
* @function updateOne
|
|
193
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
194
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
195
|
+
* @param {object} options - Optional settings for the command.
|
|
196
|
+
*/
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
async updateOne(filter, update) {
|
|
200
|
+
if (!this.collection) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
try {
|
|
205
|
+
return await this.collection.updateOne(filter, update);
|
|
206
|
+
} catch (e) {
|
|
207
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @summary Update multiple documents in a collection.
|
|
212
|
+
* @function updateMany
|
|
213
|
+
* @param {object} filter - The filter used to select the document to update.
|
|
214
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
215
|
+
* @param {object} options - Optional settings for the command.
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
async updateMany(filter, update, options) {
|
|
220
|
+
if (!this.collection) {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
try {
|
|
225
|
+
return await this.collection.updateMany(filter, update, options);
|
|
226
|
+
} catch (e) {
|
|
227
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* @summary Replace a document in a collection with another document.
|
|
232
|
+
* @function replaceOne
|
|
233
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
234
|
+
* @param {object} doc - The Document that replaces the matching document.
|
|
235
|
+
* @param {object} options - Optional settings for the command.
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
async replaceOne(filter, doc) {
|
|
240
|
+
if (!this.collection) {
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
try {
|
|
245
|
+
return await this.collection.replaceOne(filter, doc);
|
|
246
|
+
} catch (e) {
|
|
247
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* @summary Delete a document from a collection.
|
|
252
|
+
* @function deleteOne
|
|
253
|
+
* @param {object} filter - The filter used to select the document to remove.
|
|
254
|
+
* @param {object} options - Optional settings for the command.
|
|
255
|
+
*/
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
async deleteOne(filter) {
|
|
259
|
+
if (!this.collection) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
try {
|
|
264
|
+
return await this.collection.deleteOne(filter);
|
|
265
|
+
} catch (e) {
|
|
266
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* @summary Delete multiple documents from a collection.
|
|
271
|
+
* @function deleteMany
|
|
272
|
+
* @param {object} filter - The filter used to select the documents to remove.
|
|
273
|
+
* @param {object} options - Optional settings for the command.
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
async deleteMany(filter) {
|
|
278
|
+
if (!this.collection) {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
try {
|
|
283
|
+
return await this.collection.deleteMany(filter);
|
|
284
|
+
} catch (e) {
|
|
285
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* @summary Gets module name
|
|
290
|
+
* @function name
|
|
291
|
+
* @return {String} Constant value "shell".
|
|
292
|
+
*/
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
get name() {
|
|
296
|
+
return MODULE_NAME;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
exports.default = MongoDbModule;
|
|
302
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb25nby5qcyJdLCJuYW1lcyI6WyJNb25nb0NsaWVudCIsInJlcXVpcmUiLCJNT0RVTEVfTkFNRSIsIk1vbmdvRGJNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfaXNJbml0aWFsaXplZCIsImNsaWVudCIsImRiIiwiY29sbGVjdGlvbiIsImluaXQiLCJob3N0T3JVcmwiLCJkYk5hbWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXV0aFNvdXJjZSIsInBvcnQiLCJFcnJvciIsImlzRnVsbFVybCIsInRlc3QiLCJ1cmkiLCJlbmNVc2VybmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY1Bhc3N3b3JkIiwidW5kZWZpbmVkIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiY29ubmVjdCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTU9OR09EQl9FUlJPUiIsIm1lc3NhZ2UiLCJzZXREYXRhYmFzZSIsInNldENvbGxlY3Rpb24iLCJjb2xsZWN0aW9uTmFtZSIsImZpbmQiLCJmaWx0ZXIiLCJ0b0FycmF5IiwiY291bnREb2N1bWVudHMiLCJpbnNlcnRPbmUiLCJkb2MiLCJpbnNlcnRNYW55IiwiZG9jcyIsInVwZGF0ZU9uZSIsInVwZGF0ZSIsInVwZGF0ZU1hbnkiLCJyZXBsYWNlT25lIiwiZGVsZXRlT25lIiwiZGVsZXRlTWFueSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBOztBQUNBOztBQUNBOzs7O0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFrQkMsT0FBTyxDQUFDLFNBQUQsQ0FBL0I7O0FB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dCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuY29uc3QgeyBNb25nb0NsaWVudCB9ID0gcmVxdWlyZSgnbW9uZ29kYicpO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ21vbmdvJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzaGVsbFxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIG9wZXJhdGluZyBzeXN0ZW0gc2hlbGwuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb25nb0RiTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2xpZW50O1xyXG4gICAgICAgIHRoaXMuZGI7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBNb25nb0RCIHNlc3Npb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhvc3RPclVybCAtIEhvc3QgbmFtZSBvciBmdWxsIFVSTCBvZiB0aGUgdGFyZ2V0IE1vbmdvREIgc2VydmVyLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSAtIERhdGFiYXNlIG5hbWUuIFlvdSBjYW4gY2hhbmdlIGl0IGxhdGVyIHVzaW5nIFwic2V0RGF0YWJhc2VcIiBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3VzZXJuYW1lXSAtIE9wdGlvbmFsIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdXRoU291cmNlPWFkbWluXSAtIE9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIHNvdXJjZS4gRGVmYXVsdCB2YWx1ZSBpcyBcImFkbWluXCIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3BvcnQ9MjcwMTddIC0gT3B0aW9uYWwgTW9uZ29EQiBzZXJ2ZXIgcG9ydC4gRGVmYXVsdCB2YWx1ZSBpcyAyNzAxNy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChcclxuICAgICAgICBob3N0T3JVcmwsXHJcbiAgICAgICAgZGJOYW1lLFxyXG4gICAgICAgIHVzZXJuYW1lLFxyXG4gICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgIGF1dGhTb3VyY2UgPSAnYWRtaW4nLFxyXG4gICAgICAgIHBvcnQgPSAyNzAxNyxcclxuICAgICkge1xyXG4gICAgICAgIGlmICghaG9zdE9yVXJsIHx8IHR5cGVvZiBob3N0T3JVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTW9uZ29EQiBob3N0IG5hbWUgb3IgZnVsbCBVUkwgaXMgbm90IHNwZWNpZmllZCEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWRiTmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vbmdvREIgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkIScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0Z1bGxVcmwgPSAvXm1vbmdvZGIoXFwrc3J2KT86XFwvXFwvL2kudGVzdChob3N0T3JVcmwpO1xyXG4gICAgICAgIGNvbnN0IHVyaSA9IGlzRnVsbFVybFxyXG4gICAgICAgICAgICA/IGhvc3RPclVybFxyXG4gICAgICAgICAgICA6ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmNVc2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jUGFzc3dvcmQgPSBwYXNzd29yZCA/IGVuY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBtb25nb2RiOi8vJHtlbmNVc2VybmFtZX06JHtlbmNQYXNzd29yZCB8fCAnJ31AJHtob3N0T3JVcmx9OiR7cG9ydH0vJHtkYk5hbWV9P2F1dGhTb3VyY2U9JHthdXRoU291cmNlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYG1vbmdvZGI6Ly8ke2hvc3RPclVybH06JHtwb3J0fS8ke2RiTmFtZX0/YXV0aFNvdXJjZT0ke2F1dGhTb3VyY2V9YDtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBNb25nb0NsaWVudCh1cmksIHsgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLCB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRiID0gdGhpcy5jbGllbnQuZGIoZGJOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBjdXJyZW50IGRhdGFiYXNlIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldERhdGFiYXNlIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRiTmFtZSAtIERhdGFiYXNlIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFiYXNlKGRiTmFtZSkge1xyXG4gICAgICAgIHRoaXMuZGIgPSB0aGlzLmNsaWVudC5kYihkYk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgY3VycmVudCBjb2xsZWN0aW9uIHRvIHBlcmZvcm0gZnVydGhlciBhY3Rpb25zLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldENvbGxlY3Rpb24gXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sbGVjdGlvbk5hbWUgLSBDb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHNldENvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRmluZHMgZG9jdW1lbnRzIGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZmluZCBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHByZWRpY2F0ZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBBIGxpc3Qgb2YgZG9jdW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBmaW5kKGZpbHRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZChmaWx0ZXIsIG9wdGlvbnMpLnRvQXJyYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgdGhlIG51bWJlciBvZiBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIGZpbHRlci5cclxuICAgICAqIEBmdW5jdGlvbiBjb3VudERvY3VtZW50cyBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIGZvciB0aGUgY291bnQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gTnVtYmVyIG9mIGRvY3VtZW50cyBtYXRjaGluZyB0aGUgZmlsdGVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjb3VudERvY3VtZW50cyhmaWx0ZXIsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmNvdW50RG9jdW1lbnRzKGZpbHRlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbnNlcnRzIGEgc2luZ2xlIGRvY3VtZW50IGludG8gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGluc2VydE9uZSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb2MgLSBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc2VydE9uZShkb2MsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmluc2VydE9uZShkb2MsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5zZXJ0cyBhbiBhcnJheSBvZiBkb2N1bWVudHMgaW50byBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5zZXJ0TWFueSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb2NzIC0gVGhlIGRvY3VtZW50cyB0byBpbnNlcnQuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5zZXJ0TWFueShkb2NzLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXBkYXRlIGEgc2luZ2xlIGRvY3VtZW50IGluIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiB1cGRhdGVPbmUgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gcmVwbGFjZS5cclxuICAgICAqIEBwYXJhbSB7VXBkYXRlRmlsdGVyPFRTY2hlbWE+fERvY3VtZW50W119IHVwZGF0ZSAtIFRoZSBtb2RpZmljYXRpb25zIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU9uZShmaWx0ZXIsIHVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKGZpbHRlciwgdXBkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVwZGF0ZSBtdWx0aXBsZSBkb2N1bWVudHMgaW4gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIHVwZGF0ZU1hbnkgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciB1c2VkIHRvIHNlbGVjdCB0aGUgZG9jdW1lbnQgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtVcGRhdGVGaWx0ZXI8VFNjaGVtYT58RG9jdW1lbnRbXX0gdXBkYXRlIC0gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYXBwbHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTWFueShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlTWFueShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXBsYWNlIGEgZG9jdW1lbnQgaW4gYSBjb2xsZWN0aW9uIHdpdGggYW5vdGhlciBkb2N1bWVudC5cclxuICAgICAqIEBmdW5jdGlvbiByZXBsYWNlT25lIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHJlcGxhY2UuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9jIC0gVGhlIERvY3VtZW50IHRoYXQgcmVwbGFjZXMgdGhlIG1hdGNoaW5nIGRvY3VtZW50LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlcGxhY2VPbmUoZmlsdGVyLCBkb2MpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnJlcGxhY2VPbmUoZmlsdGVyLCBkb2MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVsZXRlIGEgZG9jdW1lbnQgZnJvbSBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVsZXRlT25lIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHJlbW92ZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVPbmUoZmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVsZXRlIG11bHRpcGxlIGRvY3VtZW50cyBmcm9tIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiBkZWxldGVNYW55IFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50cyB0byByZW1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTWFueShmaWx0ZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU1hbnkoZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwic2hlbGxcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -29,22 +29,23 @@ var _reporterPdf = _interopRequireDefault(require("../ox_reporters/reporter-pdf"
|
|
|
29
29
|
|
|
30
30
|
var _reporterXml = _interopRequireDefault(require("../ox_reporters/reporter-xml"));
|
|
31
31
|
|
|
32
|
-
var _reporterRp = _interopRequireDefault(require("../ox_reporters/reporter-rp"));
|
|
33
|
-
|
|
34
32
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
35
33
|
|
|
36
34
|
var _status = _interopRequireDefault(require("../model/status"));
|
|
37
35
|
|
|
38
36
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
37
|
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
|
+
|
|
40
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
|
+
|
|
40
42
|
const Reporters = {
|
|
41
43
|
json: _reporterJson.default,
|
|
42
44
|
junit: _reporterJunit.default,
|
|
43
45
|
html: _reporterHtml.default,
|
|
44
46
|
excel: _reporterExcel.default,
|
|
45
47
|
pdf: _reporterPdf.default,
|
|
46
|
-
xml: _reporterXml.default
|
|
47
|
-
rp: _reporterRp.default
|
|
48
|
+
xml: _reporterXml.default
|
|
48
49
|
};
|
|
49
50
|
const DEFAULT_TEST_NAME = 'Oxygen Test';
|
|
50
51
|
const DEFAULT_REPORTERS = [];
|
|
@@ -74,6 +75,13 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
async init() {
|
|
78
|
+
if (!this.options._oxide) {
|
|
79
|
+
const {
|
|
80
|
+
default: ReportPortalReporter
|
|
81
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require('../ox_reporters/reporter-rp')));
|
|
82
|
+
Reporters.rp = ReportPortalReporter;
|
|
83
|
+
}
|
|
84
|
+
|
|
77
85
|
this.reporters = [];
|
|
78
86
|
const generalReportingOpts = this.options.reporting || {};
|
|
79
87
|
|
|
@@ -596,4 +604,4 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
596
604
|
}
|
|
597
605
|
|
|
598
606
|
exports.default = ReportAggregator;
|
|
599
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsInJwIiwiUmVwb3J0UG9ydGFsUmVwb3J0ZXIiLCJERUZBVUxUX1RFU1RfTkFNRSIsIkRFRkFVTFRfUkVQT1JURVJTIiwiUmVwb3J0QWdncmVnYXRvciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInJlc3VsdHMiLCJydW5uZXJFbmRQcm9taXNlcyIsImdldEV4aXRDb2RlIiwiZXhpdENvZGUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ0ZXN0RmFpbGRlZCIsImZpbmQiLCJpdGVtIiwic3RhdHVzIiwiaW5pdCIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwidW5kZWZpbmVkIiwiZW5hYmxlZCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJtZXNzYWdlIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImUiLCJlcnJvciIsIndhaXRGb3JSZXN1bHQiLCJyaWQiLCJ3YWl0Rm9yUmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJvbkxhdW5jaFN0YXJ0IiwiZXZlbnRBcmdzIiwiX2ludm9rZVJlcG9ydGVyc0hvb2siLCJvbkxhdW5jaEVuZCIsImVtaXQiLCJvblJ1bm5lclN0YXJ0Iiwib3B0cyIsImNhcHMiLCJFcnJvciIsInRlc3RSZXN1bHQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwib3h1dGlsIiwiZ2V0VGltZVN0YW1wIiwiY2FwYWJpbGl0aWVzIiwiZW52aXJvbm1lbnQiLCJlbnZWYXJzIiwib25SdW5uZXJFbmQiLCJmaW5hbFJlc3VsdCIsImZhdGFsRXJyb3IiLCJ4IiwiZW5kVGltZSIsImR1cmF0aW9uIiwiX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyIsIlN0YXR1cyIsIkZBSUxFRCIsImZhaWx1cmUiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfZ2V0Rmlyc3RGYWlsdXJlIiwidHlwZSIsImxvY2F0aW9uIiwidG9VcHBlckNhc2UiLCJyZXN1bHQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJyZXNvbHZlIiwiaGFzRmFpbGVkU3VpdGVzIiwic3VpdGVzIiwic29tZSIsImhhc1dhcm5pbmdTdWl0ZXMiLCJXQVJOSU5HIiwiYWxsU3VpdGVzU2tpcHBlZCIsImV2ZXJ5IiwiU0tJUFBFRCIsIlBBU1NFRCIsIm9uSXRlcmF0aW9uU3RhcnQiLCJpdGVyYXRpb24iLCJzdGFydCIsIm1zZyIsIm9uTG9nRW50cnkiLCJvbkl0ZXJhdGlvbkVuZCIsIml0ZXJhdGlvbk51bSIsIm9uU3VpdGVTdGFydCIsInN1aXRlSWQiLCJzdWl0ZSIsIm9uU3VpdGVFbmQiLCJzdWl0ZVJlc3VsdCIsIm9uQ2FzZVN0YXJ0Iiwic3VpdGVSZWZJZCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIl9zYXZlVGVzdENhc2VWaWRlb0F0dGFjaG1lbnQiLCJvblN0ZXBTdGFydCIsInN0ZXAiLCJyb290UGF0aCIsImZyYW1ld29yayIsImZ1bGxQYXRoIiwicGF0aCIsIm9uU3RlcEVuZCIsInN0ZXBSZXN1bHQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJzdGVwSWQiLCJEYXRlIiwibm93IiwiY2FzZXMiLCJzdGVwcyIsInVuZ3JvdXBlZFJlc3VsdHMiLCJfZ3JvdXBSZXN1bHQiLCJyZXN1bHRLZXkiLCJzdWl0ZUtleSIsImdyb3VwZWRSZXN1bHQiLCJNYXRoIiwibWluIiwibWF4IiwiY3VycmVudFN1aXRlUmVzdWx0IiwiZ3JvdXBLZXkiLCJncm91cGVkU3VpdGVSZXN1bHQiLCJfc3VpdGVzSGFzaCIsImMiLCJncm91cGVkUmVzdWx0c0xpc3QiLCJrZXlzIiwibWFwIiwic3VpdGVHcm91cEtleSIsImZpcnN0RmFpbGVkU3VpdGUiLCJzIiwiZmlyc3RTdWl0ZVdpdGhXYXJuaW5nIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyIsImluY2x1ZGVzIiwid2FybiIsImhvb2tOYW1lIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50c1RvUmVtb3ZlIiwiaSIsImF0dGFjaG1lbnQiLCJfdXJsIiwidmlkZW9GaWxlUGF0aCIsImRvd25sb2FkVmlkZW8iLCJmaWxlTmFtZSIsImZpbGVQYXRoIiwiZWxtSW5kZXhUb1JlbW92ZSIsImluZGV4T2YiLCJzcGxpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHO0FBQ2RDLEVBQUFBLElBQUksRUFBRUMscUJBRFE7QUFFZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFGTztBQUdkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQUhRO0FBSWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBSk87QUFLZEMsRUFBQUEsR0FBRyxFQUFFQyxvQkFMUztBQU1kQyxFQUFBQSxHQUFHLEVBQUVDLG9CQU5TO0FBT2RDLEVBQUFBLEVBQUUsRUFBRUM7QUFQVSxDQUFsQjtBQVVBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFB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QjtBQUNBLGlCQUFPRixVQUFVLENBQUMsTUFBRCxDQUFqQjtBQUNIO0FBQ0osT0FWRCxDQVdBLE9BQU92SCxDQUFQLEVBQVU7QUFDTlYsUUFBQUEsT0FBTyxDQUFDNEgsSUFBUixDQUFhLGlDQUFiLEVBQWdEbEgsQ0FBQyxDQUFDUixPQUFsRDtBQUNBNkgsUUFBQUEsbUJBQW1CLENBQUM1SCxJQUFwQixDQUF5QjhILFVBQXpCO0FBQ0g7QUFDSjs7QUFFRCxTQUFLLElBQUlELENBQUMsR0FBQyxDQUFYLEVBQWNBLENBQUMsR0FBRUQsbUJBQW1CLENBQUNuSixNQUFyQyxFQUE2Q29KLENBQUMsRUFBOUMsRUFBa0Q7QUFDOUMsWUFBTU8sZ0JBQWdCLEdBQUd0RCxVQUFVLENBQUM2QyxXQUFYLENBQXVCVSxPQUF2QixDQUErQlQsbUJBQW1CLENBQUNDLENBQUQsQ0FBbEQsQ0FBekI7O0FBQ0EsVUFBSSxDQUFDTyxnQkFBRCxHQUFvQixDQUFDLENBQXpCLEVBQTRCO0FBQ3hCdEQsUUFBQUEsVUFBVSxDQUFDNkMsV0FBWCxDQUF1QlcsTUFBdkIsQ0FBOEJGLGdCQUE5QixFQUFnRCxDQUFoRDtBQUNIO0FBQ0o7QUFDSjs7QUF4aEJzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogUmVwb3J0IGFnZ3JlZ2F0b3JcclxuICovXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gaW1wb3J0IGFsbCBidWlsdC1pbiByZXBvcnRlcnNcclxuaW1wb3J0IEpzb25SZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanNvbic7XHJcbmltcG9ydCBKVW5pdFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qdW5pdCc7XHJcbmltcG9ydCBIdG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWh0bWwnO1xyXG5pbXBvcnQgRXhjZWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItZXhjZWwnO1xyXG5pbXBvcnQgUGRmUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXBkZic7XHJcbmltcG9ydCBYbWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sJztcclxuaW1wb3J0IFJlcG9ydFBvcnRhbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1ycCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyLFxyXG4gICAgcnA6IFJlcG9ydFBvcnRhbFJlcG9ydGVyLFxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgLy8gdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHJlcG9ydGVyIFwiZW5hYmxlZFwiIHByb3BlcnR5IGlzIFwiZmFsc2VcIiB0aGVuIHNraXAgdGhlIHJlcG9ydGVyXHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0ZXJPcHRzICYmIHR5cGVvZiByZXBvcnRlck9wdHMuZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nICYmICFyZXBvcnRlck9wdHMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcG9ydGVyIGhhcyBcImluaXRcIiBmdW5jdGlvbiwgdXNlIGl0IHRvIGluaXRpYWxpemUgdGhlIHJlcG9ydGVyXHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0ZXIuaW5pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlcG9ydGVyLmluaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGluaXRpYWxpemUgXCIke3JlcG9ydGVyTmFtZX1cIiByZXBvcnRlcjogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGVycy5wdXNoKHJlcG9ydGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFBhdGggPSBhd2FpdCByZXBvcnRlci5nZW5lcmF0ZShncm91cGVkUmVzdWx0cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3VyIHJlcG9ydCBpcyByZWFkeTogJHtyZXBvcnRQYXRofWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZXBvcnQgZ2VuZXJhdGlvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTGF1bmNoU3RhcnQob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25MYXVuY2hTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25MYXVuY2hFbmQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByZXN1bHRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2xhdW5jaDplbmQnLCByZXN1bHRzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxhdW5jaEVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25SdW5uZXJTdGFydChyaWQsIG9wdHMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXJpZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmlkXCIgY2Fubm90IGJlIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnJpZCA9IHJpZDtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm5hbWUgPSBvcHRzLm5hbWUgfHwgREVGQVVMVF9URVNUX05BTUU7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuZW52aXJvbm1lbnQgPSBvcHRzLmVudlZhcnMgfHwge307XHJcbiAgICAgICAgdGVzdFJlc3VsdC5vcHRpb25zID0gb3B0cztcclxuICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgcHJvbWlzZSBmb3IgbGF0ZXIgdG8gYmUgcmVzb2x2ZWQgb24gcnVubmVyOmVuZCBldmVudFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblJ1bm5lclN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IHN0YXR1cyBiYXNlZCBvbiBzdWl0ZXMgc3RhdHVzZXNcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSB0aGlzLl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcik7XHJcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uUnVubmVyRW5kJywgZXZlbnRBcmdzKTtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgbmV4dFRpY2soKSB3aWxsIGhlbHAgdXMgdG8gaW5zdXJlIHRoYXQgd2UgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhZnRlciBlbWl0KCdydW5uZXI6ZW5kJykgaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXS5yZXNvbHZlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgaWYgKGhhc0ZhaWxlZFN1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFzV2FybmluZ1N1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpO1xyXG4gICAgICAgIGlmIChoYXNXYXJuaW5nU3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuV0FSTklORztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsU3VpdGVzU2tpcHBlZCA9IHRlc3RSZXN1bHQuc3VpdGVzLmV2ZXJ5KHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5TS0lQUEVEKTtcclxuICAgICAgICBpZiAoYWxsU3VpdGVzU2tpcHBlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNLSVBQRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke2l0ZXJhdGlvbn0gc3RhcnRlZC4uLmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25JdGVyYXRpb25FbmQocmlkLCByZXN1bHQsIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXM/LnRvVXBwZXJDYXNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7cmVzdWx0Lml0ZXJhdGlvbk51bX0gZW5kZWQgd2l0aCBzdGF0dXM6ICR7cmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VpdGVTdGFydChyaWQsIHN1aXRlSWQsIHN1aXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1aXRlIFwiJHtzdWl0ZS5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgbGV0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkOiBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBzdWl0ZTogc3VpdGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN1aXRlU3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdWl0ZTplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3VpdGVFbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlUmVmSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTpzdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25DYXNlU3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50KGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBzdWl0ZVJlZklkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogY2FzZVJlc3VsdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uQ2FzZUVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdGVwU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXApIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcC5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN0ZXBTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdGVwRW5kKHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBzdGVwUmVzdWx0KSB7XHJcbiAgICAgICAgLy9jb25zdCBzdGF0dXMgPSBzdGVwUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIC8vY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcFJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCBpbiAke2R1cmF0aW9ufXMgd2l0aCBzdGF0dXM6ICR7c3RhdHVzfS5gKTtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25TdGVwRW5kJywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkxvZ0VudHJ5KHRpbWUsIGxldmVsLCBtc2csIHNyYyA9IG51bGwsIHsgc3VpdGVJZCwgY2FzZUlkLCBzdGVwSWQgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHN0ZXBJZCxcclxuICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgdGltZSxcclxuICAgICAgICAgICAgc3JjXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2xvZycsIGV2ZW50QXJncyk7XHJcblxyXG4gICAgICAgIGlmICghdGltZSkge1xyXG4gICAgICAgICAgICBldmVudEFyZ3MudGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxvZycsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBmYWlsdXJlIG9iamVjdCBpbiBvbmUgb2YgdGVzdCByZXN1bHQncyBlbnRpdGllcy4gXHJcbiAgICAgKiBAcGFyYW0ge1Rlc3RSZXN1bHR9IHRlc3RSZXN1bHQgXHJcbiAgICAgKi9cclxuICAgIF9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCkge1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlUmVzdWx0IG9mIHRlc3RSZXN1bHQuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZVJlc3VsdCBvZiBzdWl0ZVJlc3VsdC5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNlUmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3RlcFJlc3VsdCBvZiBjYXNlUmVzdWx0LnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXBSZXN1bHQuZmFpbHVyZSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBncm91cFJlc3VsdHMoKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHMgPSB7fTtcclxuICAgICAgICBjb25zdCB1bmdyb3VwZWRSZXN1bHRzID0gW107XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVzdWx0cykgfHwgdGhpcy5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHRoaXMucmVzdWx0cykge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdCB8fCAhcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnJlc3VsdEtleSkge1xyXG4gICAgICAgICAgICAgICAgdW5ncm91cGVkUmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5O1xyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZUtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5zdWl0ZUtleTtcclxuICAgICAgICAgICAgbGV0IGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tyZXN1bHRLZXldO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tyZXN1bHRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUsIHJlc3VsdC5zdGFydFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFJlc3VsdC5lbmRUaW1lLCByZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFJlc3VsdC5lbmRUaW1lIC0gZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgZ3JvdXBpbmcgaXMgYnkgcmVzdWx0IG9ubHksIHRoZW4ganVzdCBhcHBlbmQgY3VycmVudCByZXN1bHQncyBzdWl0ZXMgdG8gdGhlIGdyb3VwJ3Mgc3VpdGVzXHJcbiAgICAgICAgICAgIGlmICghc3VpdGVLZXkpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3VpdGVzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwZWRSZXN1bHQuc3VpdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zdWl0ZXNcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRTdWl0ZVJlc3VsdCBvZiByZXN1bHQuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHtzdWl0ZUtleX0tJHtjdXJyZW50U3VpdGVSZXN1bHQuaXRlcmF0aW9uTnVtfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFN1aXRlUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtncm91cEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cGVkU3VpdGVSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtncm91cEtleV0gPSB7IC4uLmN1cnJlbnRTdWl0ZVJlc3VsdCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSA9IE1hdGgubWluKGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGFydFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5zdGFydFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuZW5kVGltZSA9IE1hdGgubWF4KGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lLCBjdXJyZW50U3VpdGVSZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lIC0gZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmNhc2VzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFN1aXRlUmVzdWx0LmNhc2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFN1aXRlUmVzdWx0LmNhc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFN1aXRlUmVzdWx0LmNhc2VzLnNvbWUoYyA9PiBjLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29udmVydCBncm91cGVkIHJlc3VsdHMgaGFzaCB0byBhbiBhcnJheVxyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzTGlzdCA9IE9iamVjdC5rZXlzKGdyb3VwZWRSZXN1bHRzKS5tYXAoXHJcbiAgICAgICAgICAgIGdyb3VwS2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tncm91cEtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3VpdGVzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwZWRSZXN1bHQuc3VpdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKGdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2gpLm1hcChzdWl0ZUdyb3VwS2V5ID0+IGdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2hbc3VpdGVHcm91cEtleV0pXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RGYWlsZWRTdWl0ZSA9IGdyb3VwZWRSZXN1bHQuc3VpdGVzLmZpbmQocyA9PiBzLnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RGYWlsZWRTdWl0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdEZhaWxlZFN1aXRlLmZhaWx1cmUgfHwgZ3JvdXBlZFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RTdWl0ZVdpdGhXYXJuaW5nID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0U3VpdGVXaXRoV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdFN1aXRlV2l0aFdhcm5pbmcuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbLi4uZ3JvdXBlZFJlc3VsdHNMaXN0LCAuLi51bmdyb3VwZWRSZXN1bHRzXTtcclxuICAgICAgICAvLyBjaGFuZ2UgcmVzdWx0cyBzdGF0dXMgdG8gZmFpZGVkIGlmIGZhaWxlZCBzdWl0ZXMgYXJlIGZpbmRlZFxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0LnN1aXRlcykgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3VpdGVzLmZpbmQoKHN1aXRlKSA9PiBzdWl0ZS5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzID0gW107XHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2ludm9rZVJlcG9ydGVyc0hvb2soaG9va05hbWUsIGV2ZW50QXJncykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBpZiAocmVwb3J0ZXJbaG9va05hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlcG9ydGVyW2hvb2tOYW1lXShldmVudEFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBpbnZva2UgcmVwb3J0ZXIgaG9vayBcIiR7aG9va05hbWV9XCI6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zYXZlVGVzdENhc2VWaWRlb0F0dGFjaG1lbnQoY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGlmICghY2FzZVJlc3VsdCB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cyB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhdHRhY2htZW50c1RvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnQuX3VybCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvRmlsZVBhdGggPVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG94dXRpbC5kb3dubG9hZFZpZGVvKGF0dGFjaG1lbnQuZmlsZU5hbWUsIGF0dGFjaG1lbnQuX3VybCwgdGhpcy5vcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmICghdmlkZW9GaWxlUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzVG9SZW1vdmUucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQuZmlsZVBhdGggPSB2aWRlb0ZpbGVQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhdHRhY2htZW50WydfdXJsJ107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGRvd25sb2FkIHZpZGVvIGZpbGU6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50c1RvUmVtb3ZlLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVtb3ZlIHZpZGVvIGF0dGFjaG1lbnRzIHRoYXQgY291bGRuJ3QgYmUgZG93bmxvYWRlZFxyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgYXR0YWNobWVudHNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbG1JbmRleFRvUmVtb3ZlID0gY2FzZVJlc3VsdC5hdHRhY2htZW50cy5pbmRleE9mKGF0dGFjaG1lbnRzVG9SZW1vdmVbaV0pO1xyXG4gICAgICAgICAgICBpZiAoIWVsbUluZGV4VG9SZW1vdmUgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cy5zcGxpY2UoZWxtSW5kZXhUb1JlbW92ZSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
607
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiZ2V0RXhpdENvZGUiLCJleGl0Q29kZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInRlc3RGYWlsZGVkIiwiZmluZCIsIml0ZW0iLCJzdGF0dXMiLCJpbml0IiwiX294aWRlIiwiZGVmYXVsdCIsIlJlcG9ydFBvcnRhbFJlcG9ydGVyIiwicnAiLCJyZXBvcnRlcnMiLCJnZW5lcmFsUmVwb3J0aW5nT3B0cyIsInJlcG9ydGluZyIsInJlcG9ydGVyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwb3J0ZXJOYW1lIiwibmFtZSIsInJlcG9ydGVyT3B0cyIsInVuZGVmaW5lZCIsImVuYWJsZWQiLCJlcnIiLCJjb25zb2xlIiwibG9nIiwibWVzc2FnZSIsInB1c2giLCJnZXRSZXN1bHRzIiwiZ2VuZXJhdGVSZXBvcnRzIiwiZ3JvdXBlZFJlc3VsdHMiLCJncm91cFJlc3VsdHMiLCJyZXBvcnRQYXRoIiwiZ2VuZXJhdGUiLCJlIiwiZXJyb3IiLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25MYXVuY2hTdGFydCIsImV2ZW50QXJncyIsIl9pbnZva2VSZXBvcnRlcnNIb29rIiwib25MYXVuY2hFbmQiLCJlbWl0Iiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsIm9uUnVubmVyRW5kIiwiZmluYWxSZXN1bHQiLCJmYXRhbEVycm9yIiwieCIsImVuZFRpbWUiLCJkdXJhdGlvbiIsIl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXMiLCJTdGF0dXMiLCJGQUlMRUQiLCJmYWlsdXJlIiwiZXJyb3JIZWxwZXIiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiX2dldEZpcnN0RmFpbHVyZSIsInR5cGUiLCJsb2NhdGlvbiIsInRvVXBwZXJDYXNlIiwicmVzdWx0IiwicHJvY2VzcyIsIm5leHRUaWNrIiwicmVzb2x2ZSIsImhhc0ZhaWxlZFN1aXRlcyIsInN1aXRlcyIsInNvbWUiLCJoYXNXYXJuaW5nU3VpdGVzIiwiV0FSTklORyIsImFsbFN1aXRlc1NraXBwZWQiLCJldmVyeSIsIlNLSVBQRUQiLCJQQVNTRUQiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsInN1aXRlUmVmSWQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJfc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50Iiwib25TdGVwU3RhcnQiLCJzdGVwIiwicm9vdFBhdGgiLCJmcmFtZXdvcmsiLCJmdWxsUGF0aCIsInBhdGgiLCJvblN0ZXBFbmQiLCJzdGVwUmVzdWx0IiwidGltZSIsImxldmVsIiwic3JjIiwic3RlcElkIiwiRGF0ZSIsIm5vdyIsImNhc2VzIiwic3RlcHMiLCJ1bmdyb3VwZWRSZXN1bHRzIiwiX2dyb3VwUmVzdWx0IiwicmVzdWx0S2V5Iiwic3VpdGVLZXkiLCJncm91cGVkUmVzdWx0IiwiTWF0aCIsIm1pbiIsIm1heCIsImN1cnJlbnRTdWl0ZVJlc3VsdCIsImdyb3VwS2V5IiwiZ3JvdXBlZFN1aXRlUmVzdWx0IiwiX3N1aXRlc0hhc2giLCJjIiwiZ3JvdXBlZFJlc3VsdHNMaXN0Iiwia2V5cyIsIm1hcCIsInN1aXRlR3JvdXBLZXkiLCJmaXJzdEZhaWxlZFN1aXRlIiwicyIsImZpcnN0U3VpdGVXaXRoV2FybmluZyIsInJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzIiwidmFsaWRhdGVSZXN1bHQiLCJmYWlsZWQiLCJ1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMiLCJpbmNsdWRlcyIsIndhcm4iLCJob29rTmFtZSIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHNUb1JlbW92ZSIsImkiLCJhdHRhY2htZW50IiwiX3VybCIsInZpZGVvRmlsZVBhdGgiLCJkb3dubG9hZFZpZGVvIiwiZmlsZU5hbWUiLCJmaWxlUGF0aCIsImVsbUluZGV4VG9SZW1vdmUiLCJpbmRleE9mIiwic3BsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUZPO0FBR2RDLEVBQUFBLElBQUksRUFBRUMscUJBSFE7QUFJZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFKTztBQUtkQyxFQUFBQSxHQUFHLEVBQUVDLG9CQUxTO0FBTWRDLEVBQUFBLEdBQUcsRUFBRUM7QUFOUyxDQUFsQjtBQVNBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdB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QUtqSyxPQUFoRSxDQURWOztBQUVBLFlBQUksQ0FBQ2tLLGFBQUwsRUFBb0I7QUFDaEJKLFVBQUFBLG1CQUFtQixDQUFDNUgsSUFBcEIsQ0FBeUI4SCxVQUF6QjtBQUNILFNBRkQsTUFHSztBQUNEQSxVQUFBQSxVQUFVLENBQUNLLFFBQVgsR0FBc0JILGFBQXRCO0FBQ0EsaUJBQU9GLFVBQVUsQ0FBQyxNQUFELENBQWpCO0FBQ0g7QUFDSixPQVZELENBV0EsT0FBT3ZILENBQVAsRUFBVTtBQUNOVixRQUFBQSxPQUFPLENBQUM0SCxJQUFSLENBQWEsaUNBQWIsRUFBZ0RsSCxDQUFDLENBQUNSLE9BQWxEO0FBQ0E2SCxRQUFBQSxtQkFBbUIsQ0FBQzVILElBQXBCLENBQXlCOEgsVUFBekI7QUFDSDtBQUNKOztBQUVELFNBQUssSUFBSUQsQ0FBQyxHQUFDLENBQVgsRUFBY0EsQ0FBQyxHQUFFRCxtQkFBbUIsQ0FBQ3ZKLE1BQXJDLEVBQTZDd0osQ0FBQyxFQUE5QyxFQUFrRDtBQUM5QyxZQUFNTyxnQkFBZ0IsR0FBR3RELFVBQVUsQ0FBQzZDLFdBQVgsQ0FBdUJVLE9BQXZCLENBQStCVCxtQkFBbUIsQ0FBQ0MsQ0FBRCxDQUFsRCxDQUF6Qjs7QUFDQSxVQUFJLENBQUNPLGdCQUFELEdBQW9CLENBQUMsQ0FBekIsRUFBNEI7QUFDeEJ0RCxRQUFBQSxVQUFVLENBQUM2QyxXQUFYLENBQXVCVyxNQUF2QixDQUE4QkYsZ0JBQTlCLEVBQWdELENBQWhEO0FBQ0g7QUFDSjtBQUNKOztBQTNoQnNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlcixcclxufTtcclxuXHJcbmNvbnN0IERFRkFVTFRfVEVTVF9OQU1FID0gJ094eWdlbiBUZXN0JztcclxuY29uc3QgREVGQVVMVF9SRVBPUlRFUlMgPSBbXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydEFnZ3JlZ2F0b3IgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gcmVzdWx0cyBoYXNoIHRhYmxlIGJhc2VkIG9uIHJ1bm5lciBpZCBrZXlcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAvLyBhIGhhc2ggbGlzdCBvZiBydW5uZXJFbmQgZXZlbnQgcHJvbWlzZXMsIGtleWVkIGJ5IHJ1bm5lciBpZFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXMgPSB7fTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5fb3hpZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkZWZhdWx0OiBSZXBvcnRQb3J0YWxSZXBvcnRlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcnAnKTtcclxuICAgICAgICAgICAgUmVwb3J0ZXJzLnJwID0gUmVwb3J0UG9ydGFsUmVwb3J0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJzID0gW107XHJcbiAgICAgICAgY29uc3QgZ2VuZXJhbFJlcG9ydGluZ09wdHMgPSB0aGlzLm9wdGlvbnMucmVwb3J0aW5nIHx8IHt9O1xyXG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIGdlbmVyYWxSZXBvcnRpbmdPcHRzLnJlcG9ydGVycyB8fCBERUZBVUxUX1JFUE9SVEVSUykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcG9ydGVyICE9PSAnc3RyaW5nJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcG9ydGVyLCAnbmFtZScpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcmVwb3J0ZXJzIHRoYXQgZG8gbm90IGhhdmUgJ25hbWUnIHByb3BlcnR5IGFzIGl0J3MgZXNzZW50aWFsIHRvIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgUmVwb3J0ZXIgY2xhc3NcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck5hbWUgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdzdHJpbmcnID8gcmVwb3J0ZXIgOiByZXBvcnRlci5uYW1lO1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck9wdHMgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdvYmplY3QnID8gcmVwb3J0ZXIgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgcmVwb3J0ZXIgXCJlbmFibGVkXCIgcHJvcGVydHkgaXMgXCJmYWxzZVwiIHRoZW4gc2tpcCB0aGUgcmVwb3J0ZXJcclxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnRlck9wdHMgJiYgdHlwZW9mIHJlcG9ydGVyT3B0cy5lbmFibGVkID09PSAnYm9vbGVhbicgJiYgIXJlcG9ydGVyT3B0cy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXBvcnRlciA9IG5ldyBSZXBvcnRlcnNbcmVwb3J0ZXJOYW1lXSh0aGlzLm9wdGlvbnMsIHJlcG9ydGVyT3B0cywgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVwb3J0ZXIgaGFzIFwiaW5pdFwiIGZ1bmN0aW9uLCB1c2UgaXQgdG8gaW5pdGlhbGl6ZSB0aGUgcmVwb3J0ZXJcclxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnRlci5pbml0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBcIiR7cmVwb3J0ZXJOYW1lfVwiIHJlcG9ydGVyOiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gocmVwb3J0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZW5lcmF0ZVJlcG9ydHMoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVwb3J0ZXJzKSB8fCB0aGlzLnJlcG9ydGVycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzID0gdGhpcy5ncm91cFJlc3VsdHMoKTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IGF3YWl0IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFJlcG9ydCBnZW5lcmF0aW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgd2FpdEZvclJlc3VsdChyaWQpIHtcclxuICAgICAgICBpZiAoIXJpZCB8fCAhdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHRzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzICYmIHRoaXMucnVubmVyRW5kUHJvbWlzZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLnJ1bm5lckVuZFByb21pc2VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25MYXVuY2hTdGFydChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICBvcHRpb25zXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxhdW5jaFN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkxhdW5jaEVuZCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncm91cFJlc3VsdHMoKTtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbGF1bmNoOmVuZCcsIHJlc3VsdHMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uTGF1bmNoRW5kJywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgb3B0cyxcclxuICAgICAgICAgICAgY2Fwc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdydW5uZXI6c3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uUnVubmVyU3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uUnVubmVyRW5kKHJpZCwgZmluYWxSZXN1bHQsIGZhdGFsRXJyb3IpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAodGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZHVyYXRpb24gPSB0ZXN0UmVzdWx0LmVuZFRpbWUgLSB0ZXN0UmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3Qgc3RhdHVzIGJhc2VkIG9uIHN1aXRlcyBzdGF0dXNlc1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IHRoaXMuX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKTtcclxuICAgICAgICAgICAgLy8gdGVzdFJlc3VsdC5zdGF0dXMgPSBmYXRhbEVycm9yID8gU3RhdHVzLkZBSUxFRCA6ICh0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSA/IFN0YXR1cy5GQUlMRUQgOiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaWYgZmF0YWxFcnJvciBpcyBub3QgaW5oZXJpdGVkIGZyb20gRXJyb3IgY2xhc3MgdGhlbiB3ZSBhbHJlYWR5IGdvdCBPeHlnZW4gRmFpbHVyZSBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSBmYXRhbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGZhdGFsRXJyb3IpIDogZmF0YWxFcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IHRoaXMuX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmluYWxSZXN1bHQgJiYgZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUgJiYgdGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfSBhdCAke3Rlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbn0uYCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGVzdFJlc3VsdC5mYWlsdXJlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmV9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBmaW5pc2hlZCB3aXRoIHN0YXR1czogJHt0ZXN0UmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogdGVzdFJlc3VsdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25SdW5uZXJFbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzKHRlc3RSZXN1bHQsIGZhdGFsRXJyb3IpIHtcclxuICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkU3VpdGVzID0gdGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICBpZiAoaGFzRmFpbGVkU3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYXNXYXJuaW5nU3VpdGVzID0gdGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuV0FSTklORyk7XHJcbiAgICAgICAgaWYgKGhhc1dhcm5pbmdTdWl0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhbGxTdWl0ZXNTa2lwcGVkID0gdGVzdFJlc3VsdC5zdWl0ZXMuZXZlcnkoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLlNLSVBQRUQpO1xyXG4gICAgICAgIGlmIChhbGxTdWl0ZXNTa2lwcGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuU0tJUFBFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN0YXR1cy5QQVNTRUQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25JdGVyYXRpb25TdGFydChyaWQsIGl0ZXJhdGlvbiwgc3RhcnQpIHtcclxuICAgICAgICBpZiAoaXRlcmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7aXRlcmF0aW9ufSBzdGFydGVkLi4uYDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkxvZ0VudHJ5KG51bGwsICdJTkZPJywgbXNnLCAndXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkl0ZXJhdGlvbkVuZChyaWQsIHJlc3VsdCwgc3RhcnQpIHtcclxuICAgICAgICBpZiAocmVzdWx0Py5pdGVyYXRpb25OdW0gJiYgcmVzdWx0LnN0YXR1cz8udG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICBsZXQgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6c3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3VpdGVTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWl0ZUVuZChyaWQsIHN1aXRlSWQsIHN1aXRlUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKCF0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVzdFJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1aXRlIFwiJHtzdWl0ZVJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCB3aXRoIHN0YXR1czogJHtzdWl0ZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogc3VpdGVSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25TdWl0ZUVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25DYXNlU3RhcnQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlZklkLCBjYXNlSWQsIGNhc2VEZWYpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgc3VpdGVSZWZJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkNhc2VTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25DYXNlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCBjYXNlUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZVJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCB3aXRoIHN0YXR1czogJHtjYXNlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zYXZlVGVzdENhc2VWaWRlb0F0dGFjaG1lbnQoY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlUmVmSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgcmVzdWx0OiBjYXNlUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOmVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25DYXNlRW5kJywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN0ZXBTdGFydChyaWQsIHN1aXRlSWQsIGNhc2VJZCwgc3RlcCkge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yb290UGF0aCAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrICYmIHRoaXMub3B0aW9ucy5mcmFtZXdvcmsgPT09ICdjdWN1bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnJvb3RQYXRoLCBzdGVwLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGZ1bGxQYXRoKyc6MSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6c3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3RlcFN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN0ZXBFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXBSZXN1bHQpIHtcclxuICAgICAgICAvL2NvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgLy9jb25zdCBkdXJhdGlvbiA9IHN0ZXBSZXN1bHQuZHVyYXRpb24gPyAoc3RlcFJlc3VsdC5kdXJhdGlvbiAvIDEwMDApLnRvRml4ZWQoMikgOiAwO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIGluICR7ZHVyYXRpb259cyB3aXRoIHN0YXR1czogJHtzdGF0dXN9LmApO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXBSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6ZW5kJywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN0ZXBFbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCwgeyBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXBJZCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgc3RlcElkLFxyXG4gICAgICAgICAgICBsZXZlbCxcclxuICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICB0aW1lLFxyXG4gICAgICAgICAgICBzcmNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywgZXZlbnRBcmdzKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aW1lKSB7XHJcbiAgICAgICAgICAgIGV2ZW50QXJncy50aW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uTG9nJywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHVuZ3JvdXBlZFJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICB1bmdyb3VwZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogW10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUgPSBNYXRoLm1pbihncm91cGVkUmVzdWx0LnN0YXJ0VGltZSwgcmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcclxuICAgICAgICAgICAgaWYgKCFzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudFN1aXRlUmVzdWx0IG9mIHJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0IGdyb3VwZWQgcmVzdWx0cyBoYXNoIHRvIGFuIGFycmF5XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcclxuICAgICAgICAgICAgZ3JvdXBLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkubWFwKHN1aXRlR3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtzdWl0ZUdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEZhaWxlZFN1aXRlID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0RmFpbGVkU3VpdGUuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFN1aXRlV2l0aFdhcm5pbmcgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTdWl0ZVdpdGhXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0U3VpdGVXaXRoV2FybmluZy5mYWlsdXJlIHx8IGdyb3VwZWRSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFsuLi5ncm91cGVkUmVzdWx0c0xpc3QsIC4uLnVuZ3JvdXBlZFJlc3VsdHNdO1xyXG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cyk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMgPSBbXTtcclxuICAgICAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcy5pbmNsdWRlcyhzdWl0ZS5pdGVyYXRpb25OdW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzdWl0ZS5pdGVyYXRpb25OdW0nLCBzdWl0ZS5pdGVyYXRpb25OdW0sICcgbm90IHVuaXF1ZScpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMucHVzaChzdWl0ZS5pdGVyYXRpb25OdW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaW52b2tlUmVwb3J0ZXJzSG9vayhob29rTmFtZSwgZXZlbnRBcmdzKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVwb3J0ZXJzKSB8fCB0aGlzLnJlcG9ydGVycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIHRoaXMucmVwb3J0ZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXBvcnRlcltob29rTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXJbaG9va05hbWVdKGV2ZW50QXJncyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGludm9rZSByZXBvcnRlciBob29rIFwiJHtob29rTmFtZX1cIjogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NhdmVUZXN0Q2FzZVZpZGVvQXR0YWNobWVudChjYXNlUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKCFjYXNlUmVzdWx0IHx8ICFjYXNlUmVzdWx0LmF0dGFjaG1lbnRzIHx8ICFjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzVG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IGNhc2VSZXN1bHQuYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGNhc2VSZXN1bHQuYXR0YWNobWVudHNbaV07XHJcbiAgICAgICAgICAgIGlmICghYXR0YWNobWVudC5fdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9GaWxlUGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgb3h1dGlsLmRvd25sb2FkVmlkZW8oYXR0YWNobWVudC5maWxlTmFtZSwgYXR0YWNobWVudC5fdXJsLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2aWRlb0ZpbGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHNUb1JlbW92ZS5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudC5maWxlUGF0aCA9IHZpZGVvRmlsZVBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGF0dGFjaG1lbnRbJ191cmwnXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZG93bmxvYWQgdmlkZW8gZmlsZTogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzVG9SZW1vdmUucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW1vdmUgdmlkZW8gYXR0YWNobWVudHMgdGhhdCBjb3VsZG4ndCBiZSBkb3dubG9hZGVkXHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBhdHRhY2htZW50c1RvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsbUluZGV4VG9SZW1vdmUgPSBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmluZGV4T2YoYXR0YWNobWVudHNUb1JlbW92ZVtpXSk7XHJcbiAgICAgICAgICAgIGlmICghZWxtSW5kZXhUb1JlbW92ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLnNwbGljZShlbG1JbmRleFRvUmVtb3ZlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oxygen-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.41.0",
|
|
4
4
|
"description": "Automation framework for testing modern applications",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"@wdio/sync": "7.30.0",
|
|
64
64
|
"async": "3.2.5",
|
|
65
65
|
"axios": "0.27.2",
|
|
66
|
+
"bson": "4.7.2",
|
|
66
67
|
"canvas": "2.11.2",
|
|
67
68
|
"chai": "4.3.7",
|
|
68
69
|
"chrome-har": "0.13.1",
|
|
@@ -95,6 +96,7 @@
|
|
|
95
96
|
"minimist": "1.2.8",
|
|
96
97
|
"mockery": "2.1.0",
|
|
97
98
|
"moment": "2.29.4",
|
|
99
|
+
"mongodb": "3.7.4",
|
|
98
100
|
"node-addon-api": "3.0.2",
|
|
99
101
|
"nodemailer": "6.9.13",
|
|
100
102
|
"object-hash": "3.0.0",
|