oxygen-cli 1.43.0 → 1.43.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
package/build/lib/cli.js
CHANGED
|
@@ -120,4 +120,4 @@ Web test options:
|
|
|
120
120
|
Mobile test options:
|
|
121
121
|
-s, --server=SERVER_URL Appium server URL. Default is http://localhost:4723/wd/hub.`);
|
|
122
122
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiY2xpdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xhdW5jaGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9wYXJhbGxlbExhdW5jaGVyIiwiX1JlcG9ydEFnZ3JlZ2F0b3IiLCJfV2ViU29ja2V0UmVwb3J0ZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwcm9jZXNzIiwib24iLCJoYW5kbGVTaWdJbnQiLCJlcnJvciIsImNvbnNvbGUiLCJhcmd2Iiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsImN3ZCIsImNvbmZpZyIsImdldENvbmZpZ3VyYXRpb25zIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsInRoZW4iLCJvcHRpb25zIiwicHJlcGFyZUFuZFN0YXJ0VGhlVGVzdCIsImNvZGUiLCJmcmFtZXdvcmsiLCJzdWl0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJFcnJvciIsImNhcHNBcnIiLCJjYXBhYmlsaXRpZXMiLCJleGl0Q29kZSIsInJlcG9ydGVyIiwiUmVwb3J0QWdncmVnYXRvciIsImluaXQiLCJ3c1JlcG9ydGVyIiwid3NQb3J0IiwidW5kZWZpbmVkIiwiV2ViU29ja2V0UmVwb3J0ZXIiLCJsYXVuY2hlciIsInBhcmFsbGVsIiwid29ya2VycyIsImlzTmFOIiwiUGFyYWxsZWxMYXVuY2hlciIsIkxhdW5jaGVyIiwic3RhcnRBbmRXYWl0Rm9yQ2xpZW50Iiwib25MYXVuY2hTdGFydCIsInJ1biIsIm9uTGF1bmNoRW5kIiwiZ2VuZXJhdGVSZXBvcnRzIiwic3RvcCIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jbGkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XHJcbmltcG9ydCBMYXVuY2hlciBmcm9tICcuL2xhdW5jaGVyJztcclxuaW1wb3J0IFBhcmFsbGVsTGF1bmNoZXIgZnJvbSAnLi9wYXJhbGxlbC1sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5pbXBvcnQgV2ViU29ja2V0UmVwb3J0ZXIgZnJvbSAnLi4vcmVwb3J0ZXIvV2ViU29ja2V0UmVwb3J0ZXInO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5pZiAoYXJndi5kIHx8IGFyZ3YuZGVsYXkpIHtcclxuICAgIGNvbnN0IGRlbGF5ID0gYXJndi5kIHx8IGFyZ3YuZGVsYXk7XHJcbiAgICBpZiAoIShwYXJzZUludChkZWxheSkgPiAwKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ2RlbGF5JyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcclxuICAgICAgICBwcmludFVzYWdlKCk7XHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCB0YXJnZXRGaWxlID0gY2xpdXRpbC5wcm9jZXNzVGFyZ2V0UGF0aChhcmd2Ll9bMF0sIGFyZ3YuY3dkKTtcclxuaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkge1xyXG4gICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSBjbGl1dGlsLmdldENvbmZpZ3VyYXRpb25zKHRhcmdldEZpbGUsIGFyZ3YpO1xyXG5cclxuY2xpdXRpbC5nZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikudGhlbihcclxuICAgIChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgICAoY29kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RvbmUhJyk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUZXN0IGZhaWxlZDogJywgZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSxcclxuICAgIChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQgb24gZ2VuZXJhdGUgc3RhdGU6ICcsIGUpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxuKTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMuZnJhbWV3b3JrID09PSAnb3h5Z2VuJyAmJiAoIW9wdGlvbnMuc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnMuc3VpdGVzKSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB0aGUgdGVzdCAtIG5vIHN1aXRlcyBhcmUgc3BlY2lmaWVkLicpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhcHNBcnIgPSBvcHRpb25zLmNhcGFiaWxpdGllcyB8fCBbe31dO1xyXG4gICAgLy8gY2hlY2sgaWYgY2FwYWJpbGl0aWVzIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIGhhc2h0YWJsZVxyXG4gICAgaWYgKCEoY2Fwc0FyciBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgIGNhcHNBcnIgPSBbY2Fwc0Fycl07XHJcbiAgICB9XHJcbiAgICBsZXQgZXhpdENvZGUgPSAwO1xyXG4gICAgLy8gc3RhcnQgbGF1bmNoZXJcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0QWdncmVnYXRvcihvcHRpb25zKTtcclxuICAgICAgICBhd2FpdCByZXBvcnRlci5pbml0KCk7XHJcbiAgICAgICAgY29uc3Qgd3NSZXBvcnRlciA9IG9wdGlvbnMud3NQb3J0ICE9PSB1bmRlZmluZWQgP1xyXG4gICAgICAgICAgICBuZXcgV2ViU29ja2V0UmVwb3J0ZXIocmVwb3J0ZXIpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGxhdW5jaGVyID0gb3B0aW9ucy5wYXJhbGxlbCAmJiBvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMgJiYgIWlzTmFOKG9wdGlvbnMucGFyYWxsZWwud29ya2VycykgJiYgb3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzID4gMVxyXG4gICAgICAgICAgICA/IG5ldyBQYXJhbGxlbExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKSA6IG5ldyBMYXVuY2hlcihvcHRpb25zLCByZXBvcnRlcik7XHJcbiAgICAgICAgYXdhaXQgd3NSZXBvcnRlcj8uc3RhcnRBbmRXYWl0Rm9yQ2xpZW50KG9wdGlvbnMud3NQb3J0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVGVzdCBzdGFydGVkLi4uJyk7XHJcbiAgICAgICAgYXdhaXQgcmVwb3J0ZXIub25MYXVuY2hTdGFydChvcHRpb25zKTtcclxuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XHJcbiAgICAgICAgYXdhaXQgcmVwb3J0ZXIub25MYXVuY2hFbmQoKTtcclxuICAgICAgICAvLyBHZW5lcmF0ZSBmaWxlIHJlcG9ydCBvbmx5IHdoZW4gbm8gd3Nwb3J0IGFyZ3VtZW50IGlzIHByb3ZpZGVkXHJcbiAgICAgICAgaWYgKCF3c1JlcG9ydGVyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHJlcG9ydGVyLmdlbmVyYXRlUmVwb3J0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3c1JlcG9ydGVyPy5zdG9wKCk7XHJcbiAgICAgICAgZXhpdENvZGUgPSByZXBvcnRlci5nZXRFeGl0Q29kZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcicsIGUpO1xyXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpdENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcclxuICAgIC8vIGRlbGF5IHByb2Nlc3MgZXhpdCB0byBsZXQgT3h5Z2VuIHRvIHByb3Blcmx5IGRpc3Bvc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCAyMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXHJcblxyXG5GSUxFIC0gUGF0aCB0byBhIHRlc3Qgc2NyaXB0ICguanMpIG9yIGEgcHJvamVjdCBjb25maWd1cmF0aW9uICguanNvbikgZmlsZS5cclxuXHJcbkdlbmVyYWwgb3B0aW9uczpcclxuICAtZCwgLS1kZWxheT1TRUNPTkRTICAgICAgICBEZWxheSBiZXR3ZWVuIGVhY2ggY29tbWFuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cclxuICAgICAgLS1ybz1QQVRIICAgICAgICAgICAgICBPdXRwdXQgcGF0aCBmb3IgcmVwb3J0IGZpbGUuIElmIHNwZWNpZmllZCwgdGhlIHJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cyByZXBvcnRzLlxyXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cclxuICAtcCwgLS1wYXJhbT1GSUxFICAgICAgICAgICBQYXJhbWV0ZXJzIGZpbGUuIElmIG5vdCBzcGVjaWZpZWQgYW4gYXR0ZW1wdCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byBsb2FkIHBhcmFtZXRlcnMgZnJvbSBhIGZpbGUgbmFtZWQgc2FtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmluZyBleHRlbnNpb24gLSB4bHN4LCB4bHMsIGNzdiwgb3IgdHh0LlxyXG4gICAgICAtLXBtPXtzZXF8cmFuZG9tfGFsbH0gIE9yZGVyIGluIHdoaWNoIHRvIHJlYWQgdGhlIHBhcmFtZXRlcnMgLSBzZXF1ZW50aWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnc2VxJyBhbmQgJ3JhbmRvbScgbW9kZXMgdGVzdCB3aWxsIHJ1biBleGFjdCBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aW1lcyBzcGVjaWZpZWQgd2l0aCB0aGUgLWkgb3B0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW50aWFsbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgb3B0aW9uLlxyXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXHJcbiAgICAgIC0td3Nwb3J0PVBPUlQgICAgICAgICAgV2ViU29ja2V0IGV2ZW50cyByZXBvcnRlciBwb3J0LlxyXG4gICAgICAtLXN1aXRlcyAgICAgICAgICAgICAgIEZpbHRlciBvdXQgc3VpdGVzIGJ5IG5hbWVcclxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcbiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0LlxyXG5cclxuV2ViIHRlc3Qgb3B0aW9uczpcclxuICAtYiwgLS1icm93c2VyPXtjaHJvbWV8aWV8c2FmYXJpfGZpcmVmb3h9ICBCcm93c2VyIG5hbWUuIERlZmF1bHQgaXMgY2hyb21lLlxyXG4gIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICAgIFNlbGVuaXVtIGh1YiBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yi5cclxuICAgICAgLS1yZW9wZW49e3RydWV8ZmFsc2V9ICBSZW9wZW4gYnJvd3NlciBvbiBlYWNoIGl0ZXJhdGlvbi4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgICAgXHJcbk1vYmlsZSB0ZXN0IG9wdGlvbnM6XHJcbiAgICAtcywgLS1zZXJ2ZXI9U0VSVkVSX1VSTCAgQXBwaXVtIHNlcnZlciBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yi5gKTtcclxufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBb0I7O0FBQUFBLE9BQUE7QUFTcEIsSUFB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
|
|
123
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiY2xpdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xhdW5jaGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9wYXJhbGxlbExhdW5jaGVyIiwiX1JlcG9ydEFnZ3JlZ2F0b3IiLCJfV2ViU29ja2V0UmVwb3J0ZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwcm9jZXNzIiwib24iLCJoYW5kbGVTaWdJbnQiLCJlcnJvciIsImNvbnNvbGUiLCJhcmd2Iiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsImN3ZCIsImNvbmZpZyIsImdldENvbmZpZ3VyYXRpb25zIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsInRoZW4iLCJvcHRpb25zIiwicHJlcGFyZUFuZFN0YXJ0VGhlVGVzdCIsImNvZGUiLCJmcmFtZXdvcmsiLCJzdWl0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJFcnJvciIsImNhcHNBcnIiLCJjYXBhYmlsaXRpZXMiLCJleGl0Q29kZSIsInJlcG9ydGVyIiwiUmVwb3J0QWdncmVnYXRvciIsImluaXQiLCJ3c1JlcG9ydGVyIiwid3NQb3J0IiwidW5kZWZpbmVkIiwiV2ViU29ja2V0UmVwb3J0ZXIiLCJsYXVuY2hlciIsInBhcmFsbGVsIiwid29ya2VycyIsImlzTmFOIiwiUGFyYWxsZWxMYXVuY2hlciIsIkxhdW5jaGVyIiwic3RhcnRBbmRXYWl0Rm9yQ2xpZW50Iiwib25MYXVuY2hTdGFydCIsInJ1biIsIm9uTGF1bmNoRW5kIiwiZ2VuZXJhdGVSZXBvcnRzIiwic3RvcCIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jbGkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcbi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XG5pbXBvcnQgTGF1bmNoZXIgZnJvbSAnLi9sYXVuY2hlcic7XG5pbXBvcnQgUGFyYWxsZWxMYXVuY2hlciBmcm9tICcuL3BhcmFsbGVsLWxhdW5jaGVyJztcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xuaW1wb3J0IFdlYlNvY2tldFJlcG9ydGVyIGZyb20gJy4uL3JlcG9ydGVyL1dlYlNvY2tldFJlcG9ydGVyJztcblxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyb3IgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyb3IpO1xufSk7XG5cbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIGVycm9yID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XG59KTtcblxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuY29uc3QgYXJndiA9IHJlcXVpcmUoJ21pbmltaXN0JykocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcblxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcbiAgICBjb25zb2xlLmxvZyhyZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcbiAgICBwcmludFVzYWdlKCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xufVxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XG4gICAgY29uc3QgZGVsYXkgPSBhcmd2LmQgfHwgYXJndi5kZWxheTtcbiAgICBpZiAoIShwYXJzZUludChkZWxheSkgPiAwKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XG4gICAgICAgIHByaW50VXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbn1cblxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdLCBhcmd2LmN3ZCk7XG5pZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7XG4gICAgcHJpbnRVc2FnZSgpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbn1cblxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcblxuY2xpdXRpbC5nZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikudGhlbihcbiAgICAob3B0aW9ucykgPT4ge1xuICAgICAgICBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpLnRoZW4oXG4gICAgICAgICAgICAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkOiAnLCBlKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSxcbiAgICAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdUZXN0IGZhaWxlZCBvbiBnZW5lcmF0ZSBzdGF0ZTogJywgZSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4pO1xuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5mcmFtZXdvcmsgPT09ICdveHlnZW4nICYmICghb3B0aW9ucy5zdWl0ZXMgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy5zdWl0ZXMpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB0aGUgdGVzdCAtIG5vIHN1aXRlcyBhcmUgc3BlY2lmaWVkLicpO1xuICAgIH1cbiAgICBsZXQgY2Fwc0FyciA9IG9wdGlvbnMuY2FwYWJpbGl0aWVzIHx8IFt7fV07XG4gICAgLy8gY2hlY2sgaWYgY2FwYWJpbGl0aWVzIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIGhhc2h0YWJsZVxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgY2Fwc0FyciA9IFtjYXBzQXJyXTtcbiAgICB9XG4gICAgbGV0IGV4aXRDb2RlID0gMDtcbiAgICAvLyBzdGFydCBsYXVuY2hlclxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHJlcG9ydGVyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd3NSZXBvcnRlciA9IG9wdGlvbnMud3NQb3J0ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgbmV3IFdlYlNvY2tldFJlcG9ydGVyKHJlcG9ydGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbGF1bmNoZXIgPSBvcHRpb25zLnBhcmFsbGVsICYmIG9wdGlvbnMucGFyYWxsZWwud29ya2VycyAmJiAhaXNOYU4ob3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzKSAmJiBvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMgPiAxXG4gICAgICAgICAgICA/IG5ldyBQYXJhbGxlbExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKSA6IG5ldyBMYXVuY2hlcihvcHRpb25zLCByZXBvcnRlcik7XG4gICAgICAgIGF3YWl0IHdzUmVwb3J0ZXI/LnN0YXJ0QW5kV2FpdEZvckNsaWVudChvcHRpb25zLndzUG9ydCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUZXN0IHN0YXJ0ZWQuLi4nKTtcbiAgICAgICAgYXdhaXQgcmVwb3J0ZXIub25MYXVuY2hTdGFydChvcHRpb25zKTtcbiAgICAgICAgYXdhaXQgbGF1bmNoZXIucnVuKGNhcHNBcnIpO1xuICAgICAgICBhd2FpdCByZXBvcnRlci5vbkxhdW5jaEVuZCgpO1xuICAgICAgICAvLyBHZW5lcmF0ZSBmaWxlIHJlcG9ydCBvbmx5IHdoZW4gbm8gd3Nwb3J0IGFyZ3VtZW50IGlzIHByb3ZpZGVkXG4gICAgICAgIGlmICghd3NSZXBvcnRlcikge1xuICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgd3NSZXBvcnRlcj8uc3RvcCgpO1xuICAgICAgICBleGl0Q29kZSA9IHJlcG9ydGVyLmdldEV4aXRDb2RlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yJywgZSk7XG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpdENvZGU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcbiAgICAvLyBkZWxheSBwcm9jZXNzIGV4aXQgdG8gbGV0IE94eWdlbiB0byBwcm9wZXJseSBkaXNwb3NlXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMCksIDIwMDApO1xufVxuXG5mdW5jdGlvbiBwcmludFVzYWdlKCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXG5cbkZJTEUgLSBQYXRoIHRvIGEgdGVzdCBzY3JpcHQgKC5qcykgb3IgYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gKC5qc29uKSBmaWxlLlxuXG5HZW5lcmFsIG9wdGlvbnM6XG4gIC1kLCAtLWRlbGF5PVNFQ09ORFMgICAgICAgIERlbGF5IGJldHdlZW4gZWFjaCBjb21tYW5kIGluIHNlY29uZHMuXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cbiAgICAgIC0tcm89UEFUSCAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIHJlcG9ydCBmaWxlLiBJZiBzcGVjaWZpZWQsIHRoZSByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzIHJlcG9ydHMuXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cbiAgLXAsIC0tcGFyYW09RklMRSAgICAgICAgICAgUGFyYW1ldGVycyBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkIGFuIGF0dGVtcHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIHRvIGxvYWQgcGFyYW1ldGVycyBmcm9tIGEgZmlsZSBuYW1lZCBzYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZpbmcgZXh0ZW5zaW9uIC0geGxzeCwgeGxzLCBjc3YsIG9yIHR4dC5cbiAgICAgIC0tcG09e3NlcXxyYW5kb218YWxsfSAgT3JkZXIgaW4gd2hpY2ggdG8gcmVhZCB0aGUgcGFyYW1ldGVycyAtIHNlcXVlbnRpYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gJ3NlcScgYW5kICdyYW5kb20nIG1vZGVzIHRlc3Qgd2lsbCBydW4gZXhhY3QgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRpbWVzIHNwZWNpZmllZCB3aXRoIHRoZSAtaSBvcHRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVudGlhbGx5LiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaSBvcHRpb24uXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXG4gICAgICAtLXdzcG9ydD1QT1JUICAgICAgICAgIFdlYlNvY2tldCBldmVudHMgcmVwb3J0ZXIgcG9ydC5cbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxuICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cblxuV2ViIHRlc3Qgb3B0aW9uczpcbiAgLWIsIC0tYnJvd3Nlcj17Y2hyb21lfGllfHNhZmFyaXxmaXJlZm94fSAgQnJvd3NlciBuYW1lLiBEZWZhdWx0IGlzIGNocm9tZS5cbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxuICAgICAgLS1yZW9wZW49e3RydWV8ZmFsc2V9ICBSZW9wZW4gYnJvd3NlciBvbiBlYWNoIGl0ZXJhdGlvbi4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICAgIFxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcbiAgICAtcywgLS1zZXJ2ZXI9U0VSVkVSX1VSTCAgQXBwaXVtIHNlcnZlciBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yi5gKTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQW9COztBQUFBQSxPQUFBO0FBU3BCLElBQUFDLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGlCQUFBLEdBQUFELHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUE4RCxTQUFBSSx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFOLHdCQUFB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
|
package/build/lib/launcher.js
CHANGED
|
@@ -18,7 +18,13 @@ class Launcher {
|
|
|
18
18
|
this._queue = null;
|
|
19
19
|
}
|
|
20
20
|
async run(capsSet) {
|
|
21
|
-
|
|
21
|
+
let concurrency = 1;
|
|
22
|
+
if (Number.isInteger(this._config.parallel)) {
|
|
23
|
+
concurrency = this._config.parallel;
|
|
24
|
+
} else if (Number.isInteger(this._config.concurrency)) {
|
|
25
|
+
concurrency = this._config.concurrency;
|
|
26
|
+
}
|
|
27
|
+
this._queue = (0, _queue.default)((task, cb) => this._launchTest(task, cb), concurrency);
|
|
22
28
|
this._queue.error((err, task) => {
|
|
23
29
|
console.log('Error in queue:', err);
|
|
24
30
|
});
|
|
@@ -73,4 +79,4 @@ class Launcher {
|
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
81
|
exports.default = Launcher;
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJSdW5uZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVldWUiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJMYXVuY2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVwb3J0ZXIiLCJfY29uZmlnIiwiX3Jlc3VsdHMiLCJydW4iLCJjYXBzU2V0IiwicXVldWUiLCJ0YXNrIiwiY2IiLCJfbGF1bmNoVGVzdCIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJlcnJvciIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiX3RoaXMiLCJfIiwiZWFjaCIsImNhcHMiLCJkcmFpbiIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsIm94eWdlbiIsImNhbGxiYWNrIiwicnVubmVyIiwiRXJyb3IiLCJpbml0IiwicmVzdWx0Iiwia2lsbCIsImVyck1zZyIsInR5cGUiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sYXVuY2hlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBxdWV1ZSBmcm9tICdhc3luYy9xdWV1ZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihjYXBzU2V0KSB7XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBxdWV1ZSgodGFzaywgY2IpID0+IHRoaXMuX2xhdW5jaFRlc3QodGFzaywgY2IpLCB0aGlzLl9jb25maWcucGFyYWxsZWwgfHwgdGhpcy5fY29uZmlnLmNvbmN1cnJlbmN5IHx8IDEpO1xyXG4gICAgICAgIHRoaXMuX3F1ZXVlLmVycm9yKChlcnIsIHRhc2spID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHF1ZXVlOicsIGVycik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGlmIG5vIGNhcGFiaWxpdGllcyBhcmUgc3BlY2lmaWVkLCBydW4gc2luZ2xlIGluc3RhbmNlIHdpdGggZGVmYXVsdCBhcmd1bWVudHNcclxuICAgICAgICBpZiAoIWNhcHNTZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUucHVzaChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjYXBzU2V0IGlzIGFuIGFycmF5IFxyXG4gICAgICAgICAgICBjYXBzU2V0ID0gQXJyYXkuaXNBcnJheShjYXBzU2V0KSA/IGNhcHNTZXQgOiBbY2Fwc1NldF07XHJcbiAgICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgXy5lYWNoKGNhcHNTZXQsIGZ1bmN0aW9uKGNhcHMpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9xdWV1ZS5wdXNoKGNhcHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcXVldWUuZHJhaW4oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBfaW5zdGFudGlhdGVSdW5uZXIoY2Fwcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiB0aGlzLl9jb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJ1bm5lcnMsIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnNbdGhpcy5fY29uZmlnLmZyYW1ld29ya10oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzLm94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9sYXVuY2hUZXN0KGNhcHMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IHRoaXMuX2luc3RhbnRpYXRlUnVubmVyKGNhcHMpO1xyXG4gICAgICAgIGlmICghcnVubmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHRoaXMuX2NvbmZpZy5mcmFtZXdvcms7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcnVubmVyIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1ld29yazogJHtmcmFtZXdvcmt9LmApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIG94eWdlblxyXG4gICAgICAgICAgICBhd2FpdCBydW5uZXIuaW5pdCh0aGlzLl9jb25maWcsIGNhcHMsIHRoaXMucmVwb3J0ZXIpO1xyXG4gICAgICAgICAgICAvLyBydW4gT3h5Z2VuIHRlc3QgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bm5lci5ydW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsYXVuY2ggdGhlIHRlc3Q6JywgZSk7XHJcbiAgICAgICAgICAgIC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgcXVldWVcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUua2lsbCgpO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGN1c3RvbSBlcnJvciBtZXNzYWdlXHJcbiAgICAgICAgICAgIGlmIChlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyTXNnID0gJyc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gZS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLnR5cGUgKyAnIC0gJztcclxuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnID0gZXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoZXJyTXNnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlKTsgICAgLy8gY2FsbCBiYWNrIHdpdGggdGhlIG9yaWdpbmFsIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUFnQyxTQUFBRSx3QkFBQUUsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUosdUJBQUEsWUFBQUEsQ0FBQUUsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEs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
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJSdW5uZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVldWUiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJMYXVuY2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVwb3J0ZXIiLCJfY29uZmlnIiwiX3Jlc3VsdHMiLCJydW4iLCJjYXBzU2V0IiwiY29uY3VycmVuY3kiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJwYXJhbGxlbCIsInF1ZXVlIiwidGFzayIsImNiIiwiX2xhdW5jaFRlc3QiLCJlcnJvciIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiX3RoaXMiLCJfIiwiZWFjaCIsImNhcHMiLCJkcmFpbiIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsIm94eWdlbiIsImNhbGxiYWNrIiwicnVubmVyIiwiRXJyb3IiLCJpbml0IiwicmVzdWx0Iiwia2lsbCIsImVyck1zZyIsInR5cGUiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sYXVuY2hlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBxdWV1ZSBmcm9tICdhc3luYy9xdWV1ZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihjYXBzU2V0KSB7XHJcbiAgICAgICAgbGV0IGNvbmN1cnJlbmN5ID0gMTtcclxuXHJcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodGhpcy5fY29uZmlnLnBhcmFsbGVsKSkge1xyXG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHRoaXMuX2NvbmZpZy5wYXJhbGxlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcih0aGlzLl9jb25maWcuY29uY3VycmVuY3kpKSB7XHJcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gdGhpcy5fY29uZmlnLmNvbmN1cnJlbmN5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBxdWV1ZSgodGFzaywgY2IpID0+IHRoaXMuX2xhdW5jaFRlc3QodGFzaywgY2IpLCBjb25jdXJyZW5jeSk7XHJcbiAgICAgICAgdGhpcy5fcXVldWUuZXJyb3IoKGVyciwgdGFzaykgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gcXVldWU6JywgZXJyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gaWYgbm8gY2FwYWJpbGl0aWVzIGFyZSBzcGVjaWZpZWQsIHJ1biBzaW5nbGUgaW5zdGFuY2Ugd2l0aCBkZWZhdWx0IGFyZ3VtZW50c1xyXG4gICAgICAgIGlmICghY2Fwc1NldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNhcHNTZXQgaXMgYW4gYXJyYXkgXHJcbiAgICAgICAgICAgIGNhcHNTZXQgPSBBcnJheS5pc0FycmF5KGNhcHNTZXQpID8gY2Fwc1NldCA6IFtjYXBzU2V0XTtcclxuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICBfLmVhY2goY2Fwc1NldCwgZnVuY3Rpb24oY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3F1ZXVlLnB1c2goY2Fwcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9xdWV1ZS5kcmFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIF9pbnN0YW50aWF0ZVJ1bm5lcihjYXBzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUnVubmVycywgdGhpcy5fY29uZmlnLmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVubmVyc1t0aGlzLl9jb25maWcuZnJhbWV3b3JrXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnMub3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2xhdW5jaFRlc3QoY2FwcywgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnVubmVyID0gdGhpcy5faW5zdGFudGlhdGVSdW5uZXIoY2Fwcyk7XHJcbiAgICAgICAgaWYgKCFydW5uZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gdGhpcy5fY29uZmlnLmZyYW1ld29yaztcclxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBDYW5ub3QgZmluZCBydW5uZXIgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWV3b3JrOiAke2ZyYW1ld29ya30uYCkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgb3h5Z2VuXHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5pbml0KHRoaXMuX2NvbmZpZywgY2FwcywgdGhpcy5yZXBvcnRlcik7XHJcbiAgICAgICAgICAgIC8vIHJ1biBPeHlnZW4gdGVzdCBcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVubmVyLnJ1bigpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxhdW5jaCB0aGUgdGVzdDonLCBlKTtcclxuICAgICAgICAgICAgLy8gc3RvcCBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgY3VzdG9tIGVycm9yIG1lc3NhZ2VcclxuICAgICAgICAgICAgaWYgKGUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSAnJztcclxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBlLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIudHlwZSArICcgLSAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgPSBlcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnJNc2cpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGUpOyAgICAvLyBjYWxsIGJhY2sgd2l0aCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQWdDLFNBQUFFLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSix1QkFBQSxZQUFBQSxDQUFBRSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFOLHVCQUFBSyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBRWpCLE1BQU1tQixRQUFRLENBQUM7RUFDMUJDLFdBQVdBLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO0lBQzFCLElBQUksQ0FBQ0MsT0FBTyxHQUFHRixNQUFNO0lBQ3JCLElBQUksQ0FBQ0MsUUFBUSxHQUFHQSxRQUFRO0lBQ3hCLElBQUksQ0FBQ0UsUUFBUSxHQUFHLEVBQUU7SUFDbEIsSUFBSSxDQUFDekIsTUFBTSxHQUFHLElBQUk7RUFDdEI7RUFFQSxNQUFNMEIsR0FBR0EsQ0FBQ0MsT0FBTyxFQUFFO0lBQ2YsSUFBSUMsV0FBVyxHQUFHLENBQUM7SUFFbkIsSUFBSUMsTUFBTSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDTixPQUFPLENBQUNPLFFBQVEsQ0FBQyxFQUFFO01BQ3pDSCxXQUFXLEdBQUcsSUFBSSxDQUFDSixPQUFPLENBQUNPLFFBQVE7SUFDdkMsQ0FBQyxNQUNJLElBQUlGLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQ04sT0FBTyxDQUFDSSxXQUFXLENBQUMsRUFBRTtNQUNqREEsV0FBVyxHQUFHLElBQUksQ0FBQ0osT0FBTyxDQUFDSSxXQUFXO0lBQzFDO0lBRUEsSUFBSSxDQUFDNUIsTUFBTSxHQUFHLElBQUFnQyxjQUFLLEVBQUMsQ0FBQ0MsSUFBSSxFQUFFQyxFQUFFLEtBQUssSUFBSSxDQUFDQyxXQUFXLENBQUNGLElBQUksRUFBRUMsRUFBRSxDQUFDLEVBQUVOLFdBQVcsQ0FBQztJQUMxRSxJQUFJLENBQUM1QixNQUFNLENBQUNvQyxLQUFLLENBQUMsQ0FBQ0MsR0FBRyxFQUFFSixJQUFJLEtBQUs7TUFDN0JLLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGlCQUFpQixFQUFFRixHQUFHLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBR0YsSUFBSSxDQUFDVixPQUFPLEVBQUU7TUFDVixJQUFJLENBQUMzQixNQUFNLENBQUN3QyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUMsTUFDSTtNQUVEYixPQUFPLEdBQUdjLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZixPQUFPLENBQUMsR0FBR0EsT0FBTyxHQUFHLENBQUNBLE9BQU8sQ0FBQztNQUN0RCxNQUFNZ0IsS0FBSyxHQUFHLElBQUk7TUFDbEJDLGVBQUMsQ0FBQ0MsSUFBSSxDQUFDbEIsT0FBTyxFQUFFLFVBQVNtQixJQUFJLEVBQUU7UUFDM0JILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dDLElBQUksQ0FBQ00sSUFBSSxDQUFDO01BQzNCLENBQUMsQ0FBQztJQUNOO0lBQ0EsTUFBTSxJQUFJLENBQUM5QyxNQUFNLENBQUMrQyxLQUFLLENBQUMsQ0FBQztFQUM3QjtFQUtBQyxrQkFBa0JBLENBQUNGLElBQUksRUFBRTtJQUNyQixJQUFJLElBQUksQ0FBQ3RCLE9BQU8sQ0FBQ3lCLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ3lCLFNBQVMsS0FBSyxRQUFRLEVBQUU7TUFDdEUsSUFBSWhDLE1BQU0sQ0FBQ2lDLFNBQVMsQ0FBQ25DLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQzBCLE9BQU8sQ0FBQ3lCLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sSUFBSW5ELE9BQU8sQ0FBQyxJQUFJLENBQUMwQixPQUFPLENBQUN5QixTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ2hEO01BQ0EsT0FBTyxJQUFJO0lBQ2Y7SUFDQSxPQUFPLElBQUluRCxPQUFPLENBQUNxRCxNQUFNLENBQUMsQ0FBQztFQUMvQjtFQUVBLE1BQU1oQixXQUFXQSxDQUFDVyxJQUFJLEVBQUVNLFFBQVEsRUFBRTtJQUM5QixJQUFJLENBQUNBLFFBQVEsRUFBRTtNQUNYO0lBQ0o7SUFDQSxNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQ0YsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQ08sTUFBTSxFQUFFO01BQ1QsTUFBTUosU0FBUyxHQUFHLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ3lCLFNBQVM7TUFDeENHLFFBQVEsQ0FBQyxJQUFJRSxLQUFLLENBQUMsbURBQW1ETCxTQUFTLEdBQUcsQ0FBQyxDQUFDO01BQ3BGO0lBQ0o7SUFDQSxJQUFJO01BRUEsTUFBTUksTUFBTSxDQUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDL0IsT0FBTyxFQUFFc0IsSUFBSSxFQUFFLElBQUksQ0FBQ3ZCLFFBQVEsQ0FBQztNQUVwRCxNQUFNaUMsTUFBTSxHQUFHLE1BQU1ILE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQyxDQUFDO01BQ2pDLElBQUksQ0FBQ0QsUUFBUSxDQUFDZSxJQUFJLENBQUNnQixNQUFNLENBQUM7TUFDMUJKLFFBQVEsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUNELE9BQU9uRCxDQUFDLEVBQUU7TUFDTnFDLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDLDRCQUE0QixFQUFFbkMsQ0FBQyxDQUFDO01BRTlDLElBQUksQ0FBQ0QsTUFBTSxDQUFDeUQsSUFBSSxDQUFDLENBQUM7TUFFbEIsSUFBSXhELENBQUMsQ0FBQ21DLEtBQUssRUFBRTtRQUNULElBQUlzQixNQUFNLEdBQUcsRUFBRTtRQUNmLElBQUlyQixHQUFHLEdBQUdwQyxDQUFDLENBQUNtQyxLQUFLO1FBQ2pCLElBQUlDLEdBQUcsQ0FBQ3NCLElBQUksRUFDUkQsTUFBTSxJQUFJckIsR0FBRyxDQUFDc0IsSUFBSSxHQUFHLEtBQUs7UUFDOUIsSUFBSXRCLEdBQUcsQ0FBQ3VCLE9BQU8sRUFDWEYsTUFBTSxJQUFJckIsR0FBRyxDQUFDdUIsT0FBTyxDQUFDLEtBRXRCRixNQUFNLEdBQUdyQixHQUFHLENBQUN3QixRQUFRLENBQUMsQ0FBQztRQUMzQlQsUUFBUSxDQUFDLElBQUlFLEtBQUssQ0FBQ0ksTUFBTSxDQUFDLENBQUM7TUFDL0IsQ0FBQyxNQUNJO1FBQ0ROLFFBQVEsQ0FBQ25ELENBQUMsQ0FBQztNQUNmO0lBQ0o7RUFDSjtBQUNKO0FBQUM2RCxPQUFBLENBQUFuRCxPQUFBLEdBQUFTLFFBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -4,14 +4,12 @@ require("source-map-support/register");
|
|
|
4
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
5
5
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
6
|
module.exports = function (filePath, mode, fileType) {
|
|
7
|
-
var defer = require('when').defer;
|
|
8
7
|
var path = require('path');
|
|
9
8
|
var ExcelReader = require('./param-reader-excel');
|
|
10
9
|
var CsvReader = require('./param-reader-csv');
|
|
11
10
|
var JsonReader = require('./param-reader-json');
|
|
12
11
|
var errHelper = require('../errors/helper');
|
|
13
12
|
var module = {};
|
|
14
|
-
var _whenInitialized = defer();
|
|
15
13
|
module.init = function () {
|
|
16
14
|
var ext = path.extname(filePath);
|
|
17
15
|
if (fileType) {
|
|
@@ -26,19 +24,16 @@ module.exports = function (filePath, mode, fileType) {
|
|
|
26
24
|
} else if (ext === '.json' || ext === '.js') {
|
|
27
25
|
reader = new JsonReader();
|
|
28
26
|
} else {
|
|
29
|
-
|
|
30
|
-
return _whenInitialized.promise;
|
|
27
|
+
return Promise.reject(new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, 'Unsupported parameters file type: ' + ext));
|
|
31
28
|
}
|
|
32
29
|
this.mode = mode;
|
|
33
|
-
reader.read(filePath, fileType || null).then(function (result) {
|
|
30
|
+
return reader.read(filePath, fileType || null).then(function (result) {
|
|
34
31
|
self.table = result;
|
|
35
32
|
self.currentRow = self.mode === 'random' ? random(0, self.table.length) : 0;
|
|
36
|
-
|
|
33
|
+
return null;
|
|
37
34
|
}).catch(function (err) {
|
|
38
|
-
|
|
39
|
-
${err.message}`));
|
|
35
|
+
throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file: ${err.message}`);
|
|
40
36
|
});
|
|
41
|
-
return _whenInitialized.promise;
|
|
42
37
|
};
|
|
43
38
|
module.getMode = function () {
|
|
44
39
|
return this.mode;
|
|
@@ -73,4 +68,4 @@ ${err.message}`));
|
|
|
73
68
|
}
|
|
74
69
|
return module;
|
|
75
70
|
};
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsInBhdGgiLCJFeGNlbFJlYWRlciIsIkNzdlJlYWRlciIsIkpzb25SZWFkZXIiLCJlcnJIZWxwZXIiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJQcm9taXNlIiwicmVqZWN0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlBBUkFNRVRFUlNfRVJST1IiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImdldE1vZGUiLCJyZWFkTmV4dCIsInByZXZSb3ciLCJyZWFkUHJldiIsImdldFZhbHVlcyIsIl9fZGVmaW5lR2V0dGVyX18iLCJtaW4iLCJtYXgiLCJNYXRoIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BhcmFtLW1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbGVQYXRoLCBtb2RlLCBmaWxlVHlwZSAvKm9wdGlvbmFsKi8pIHtcclxuICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG4gICAgdmFyIEV4Y2VsUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItZXhjZWwnKTtcclxuICAgIHZhciBDc3ZSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1jc3YnKTtcclxuICAgIHZhciBKc29uUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItanNvbicpO1xyXG4gICAgdmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuICAgIHZhciBtb2R1bGUgPSB7fTtcclxuXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVR5cGUpIHtcclxuICAgICAgICAgICAgZXh0ID0gZmlsZVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZWFkZXIgPSBudWxsO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjaG9vc2UgdGhlIHJpZ2h0IGNvbnZlcnRlciBiYXNlZCBvbiBlaXRoZXIgeGxzIG9yIHhsc3ggZmlsZSBleHRlbnNpb25cclxuICAgICAgICBpZiAoZXh0ID09PSAnLnhsc3gnIHx8IGV4dCA9PT0gJy54bHMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBFeGNlbFJlYWRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChleHQgPT09ICcuY3N2JyB8fCBleHQgPT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICByZWFkZXIgPSBuZXcgQ3N2UmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5qc29uJyB8fCBleHQgPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBKc29uUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCAnVW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBmaWxlIHR5cGU6ICcgKyBleHQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcblxyXG4gICAgICAgIHJldHVybiByZWFkZXIucmVhZChmaWxlUGF0aCwgZmlsZVR5cGUgfHwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRhYmxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50Um93IGFjY29yZGluZyB3aXRoIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgKHJhbmRvbSBvciBzZXF1ZW50aWFsKVxyXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50Um93ID0gc2VsZi5tb2RlID09PSAncmFuZG9tJyA/IHJhbmRvbSgwLCBzZWxmLnRhYmxlLmxlbmd0aCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgYFVuYWJsZSB0byBsb2FkIHBhcmFtZXRlcnMgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWROZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJldlJvdyA9IHRoaXMuY3VycmVudFJvdztcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmFuZG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSByYW5kb20oMCwgdGhpcy50YWJsZS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvdyA+IHRoaXMudGFibGUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWRQcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2Um93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSB0aGlzLnByZXZSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlIHx8IHRoaXMudGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1BhcmFtZXRlcnMgdGFibGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVbdGhpcy5jdXJyZW50Um93XTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLl9fZGVmaW5lR2V0dGVyX18oJ3Jvd3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQzVDRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFlO0VBQzlELElBQUlDLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUMxQixJQUFJVSxXQUFXLEdBQUdWLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztFQUNqRCxJQUFJVyxTQUFTLEdBQUdYLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QyxJQUFJWSxVQUFVLEdBQUdaLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUMvQyxJQUFJYSxTQUFTLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWZBLE1BQU0sQ0FBQ1UsSUFBSSxHQUFHLFlBQVc7SUFDckIsSUFBSUMsR0FBRyxHQUFHTixJQUFJLENBQUNPLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDO0lBRWhDLElBQUlFLFFBQVEsRUFBRTtNQUNWTyxHQUFHLEdBQUdQLFFBQVE7SUFDbEI7SUFDQSxJQUFJUyxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUVmLElBQUlILEdBQUcsS0FBSyxPQUFPLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUU7TUFDbkNFLE1BQU0sR0FBRyxJQUFJUCxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDLE1BQ0ksSUFBSUssR0FBRyxLQUFLLE1BQU0sSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUN2Q0UsTUFBTSxHQUFHLElBQUlOLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsTUFDSSxJQUFJSSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssS0FBSyxFQUFFO01BQ3ZDRSxNQUFNLEdBQUcsSUFBSUwsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUNJO01BQ0QsT0FBT08sT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSUMsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxHQUFHUixHQUFHLENBQUMsQ0FBQztJQUN4SDtJQUVBLElBQUksQ0FBQ1IsSUFBSSxHQUFHQSxJQUFJO0lBRWhCLE9BQU9VLE1BQU0sQ0FBQ08sSUFBSSxDQUFDbEIsUUFBUSxFQUFFRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQ3pDaUIsSUFBSSxDQUFDLFVBQVNDLE1BQU0sRUFBRTtNQUNuQlIsSUFBSSxDQUFDUyxLQUFLLEdBQUdELE1BQU07TUFFbkJSLElBQUksQ0FBQ1UsVUFBVSxHQUFHVixJQUFJLENBQUNYLElBQUksS0FBSyxRQUFRLEdBQUdzQixNQUFNLENBQUMsQ0FBQyxFQUFFWCxJQUFJLENBQUNTLEtBQUssQ0FBQ0csTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUMzRSxPQUFPLElBQUk7SUFDZixDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVNDLEdBQUcsRUFBRTtNQUNqQixNQUFNLElBQUlYLG9CQUFPLENBQUNSLFNBQVMsQ0FBQ1MsU0FBUyxDQUFDQyxnQkFBZ0IsRUFBRSxtQ0FBbUNTLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFLENBQUM7SUFDN0csQ0FBQyxDQUFDO0VBQ1YsQ0FBQztFQUVEN0IsTUFBTSxDQUFDOEIsT0FBTyxHQUFHLFlBQVc7SUFDeEIsT0FBTyxJQUFJLENBQUMzQixJQUFJO0VBQ3BCLENBQUM7RUFFREgsTUFBTSxDQUFDK0IsUUFBUSxHQUFHLFlBQVk7SUFDMUIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSSxDQUFDUixVQUFVO0lBQzlCLElBQUksSUFBSSxDQUFDckIsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUN4QixJQUFJLENBQUNxQixVQUFVLEdBQUdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixLQUFLLENBQUNHLE1BQU0sQ0FBQztJQUNsRCxDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNGLFVBQVUsRUFBRTtJQUNyQjtJQUVBLElBQUksSUFBSSxDQUFDQSxVQUFVLEdBQUcsSUFBSSxDQUFDRCxLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDekMsSUFBSSxDQUFDRixVQUFVLEdBQUcsQ0FBQztJQUN2QjtFQUNKLENBQUM7RUFFRHhCLE1BQU0sQ0FBQ2lDLFFBQVEsR0FBRyxZQUFZO0lBQzFCLElBQUksT0FBTyxJQUFJLENBQUNELE9BQU8sS0FBSyxXQUFXLEVBQUU7TUFDckMsSUFBSSxDQUFDUixVQUFVLEdBQUcsSUFBSSxDQUFDUSxPQUFPO0lBQ2xDO0VBQ0osQ0FBQztFQUVEaEMsTUFBTSxDQUFDa0MsU0FBUyxHQUFHLFlBQVc7SUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQ1gsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDRyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3hDLE1BQU0sSUFBSVQsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO0lBQ3hGO0lBQ0EsT0FBTyxJQUFJLENBQUNJLEtBQUssQ0FBQyxJQUFJLENBQUNDLFVBQVUsQ0FBQztFQUN0QyxDQUFDO0VBRUR4QixNQUFNLENBQUNtQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBVztJQUN2QyxPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDRyxNQUFNO0VBQzVCLENBQUMsQ0FBQztFQUVGLFNBQVNELE1BQU1BLENBQUNXLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQ3RCLE9BQU9DLElBQUksQ0FBQ0MsS0FBSyxDQUFDRCxJQUFJLENBQUNiLE1BQU0sQ0FBQyxDQUFDLElBQUlZLEdBQUcsR0FBR0QsR0FBRyxDQUFDLENBQUMsR0FBR0EsR0FBRztFQUN4RDtFQUVBLE9BQU9wQyxNQUFNO0FBQ2pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -917,4 +917,4 @@ class WebModule extends _WebDriverModule.default {
|
|
|
917
917
|
}
|
|
918
918
|
}
|
|
919
919
|
exports.default = WebModule;
|
|
920
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJfc2FuaXRpemVIdG1sIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiU0FOSVRJWkVfSFRNTF9PUFRTIiwiYWxsb3dlZFRhZ3MiLCJhbGxvd2VkQXR0cmlidXRlcyIsImFsbG93ZWRDbGFzc2VzIiwidW5kZWZpbmVkIiwiYWxsb3dlZFN0eWxlcyIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0Iiwid2RQcm9jIiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiYXV0b1N0YXJ0V2ViRHJpdmVyIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsInJlbW90ZVVybCIsInByb2MiLCJkZWZhdWx0QnJvd3NlciIsImJyb3dzZXJOYW1lIiwiZXJyb3JDb2RlIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5Iiwic2VsZW5pdW1VcmxCYXNlIiwiaXNSdW5uaW5nT25TZWxlbm9pZCIsIl9pc1NlbGVub2lkSHViIiwiZW5hYmxlVmlkZW8iLCJ2aWRlb0ZyYW1lUmF0ZSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJkcml2ZXIiLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsImRlZmVyIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwia2lsbCIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJleGVjU3luYyIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiUHJvbWlzZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImV3IiwiX3Rha2VTbmFwc2hvdFNpbGVudCIsImdldFBhZ2VTb3VyY2UiLCJyZXN1bHQiLCJzYW5pdGl6ZUh0bWwiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBOT19TTkFQU0hPVF9DT01NQU5EUyA9IFtcclxuICAgICdpbml0JyxcclxuICAgICdhc3NlcnRBbGVydCcsXHJcbiAgICAnZGlzcG9zZScsXHJcbiAgICAndHJhbnNhY3Rpb24nLFxyXG4gICAgJ2RlbGV0ZUNvb2tpZXMnLFxyXG4gICAgJ2dldENvb2tpZXMnLFxyXG4gICAgJ2dldENzc1ZhbHVlJyxcclxuICAgICdnZXRIVE1MJyxcclxuICAgICdnZXRTb3VyY2UnLFxyXG4gICAgJ2dldFRpdGxlJyxcclxuICAgICdnZXRXaW5kb3dIYW5kbGVzJyxcclxuICAgICdnZXRXaW5kb3dTaXplJyxcclxuICAgICdnZXRYTUxQYWdlU291cmNlJyxcclxuICAgICdpc0FsZXJ0UHJlc2VudCcsXHJcbiAgICAnaXNDaGVja2VkJyxcclxuICAgICdpc0V4aXN0JyxcclxuICAgICdpc0ludGVyYWN0YWJsZScsXHJcbiAgICAnaXNTZWxlY3RlZCcsXHJcbiAgICAnaXNWaXNpYmxlJyxcclxuICAgICdtb2NrJyxcclxuICAgICdtb2NrQ2xlYXJBbGwnLFxyXG4gICAgJ21vY2tSZXN0b3JlQWxsJyxcclxuICAgICduZXdXaW5kb3cnLFxyXG4gICAgJ3NldEF1dG9XYWl0Rm9yQW5ndWxhcicsXHJcbiAgICAnc2V0VGltZW91dCcsXHJcbiAgICAndGFrZVNjcmVlbnNob3QnLFxyXG4gICAgJ3dhaXRGb3JBbmd1bGFyJyxcclxuICAgICd3YWl0Rm9yV2luZG93J1xyXG4gICAgXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywgJ2NsaWNrJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuY29uc3QgU0FOSVRJWkVfSFRNTF9PUFRTID0ge1xyXG4gICAgYWxsb3dlZFRhZ3M6IFtcclxuICAgICdib2R5JyxcclxuICAgICdidXR0b24nLFxyXG4gICAgJ2Zvcm0nLFxyXG4gICAgJ2ltZycsXHJcbiAgICAnaW5wdXQnLFxyXG4gICAgJ3NlbGVjdCcsXHJcbiAgICAndGV4dGFyZWEnLFxyXG4gICAgJ29wdGlvbicsXHJcbiAgICAnYWRkcmVzcycsXHJcbiAgICAnYXJ0aWNsZScsXHJcbiAgICAnYXNpZGUnLFxyXG4gICAgJ2Zvb3RlcicsXHJcbiAgICAnaGVhZGVyJyxcclxuICAgICdoMScsXHJcbiAgICAnaDInLFxyXG4gICAgJ2gzJyxcclxuICAgICdoNCcsXHJcbiAgICAnaDUnLFxyXG4gICAgJ2g2JyxcclxuICAgICdoZ3JvdXAnLFxyXG4gICAgJ21haW4nLFxyXG4gICAgJ25hdicsXHJcbiAgICAnc2VjdGlvbicsXHJcbiAgICAnYmxvY2txdW90ZScsXHJcbiAgICAnZGQnLFxyXG4gICAgJ2RpdicsXHJcbiAgICAnZGwnLFxyXG4gICAgJ2R0JyxcclxuICAgICdmaWdjYXB0aW9uJyxcclxuICAgICdmaWd1cmUnLFxyXG4gICAgJ2hyJyxcclxuICAgICdsaScsXHJcbiAgICAnbWFpbicsXHJcbiAgICAnb2wnLFxyXG4gICAgJ3AnLFxyXG4gICAgJ3ByZScsXHJcbiAgICAndWwnLFxyXG4gICAgJ2EnLFxyXG4gICAgJ2FiYnInLFxyXG4gICAgJ2InLFxyXG4gICAgJ2JkaScsXHJcbiAgICAnYmRvJyxcclxuICAgICdjaXRlJyxcclxuICAgICdjb2RlJyxcclxuICAgICdkYXRhJyxcclxuICAgICdkZm4nLFxyXG4gICAgJ2VtJyxcclxuICAgICdpJyxcclxuICAgICdrYmQnLFxyXG4gICAgJ21hcmsnLFxyXG4gICAgJ3EnLFxyXG4gICAgJ3JiJyxcclxuICAgICdycCcsXHJcbiAgICAncnQnLFxyXG4gICAgJ3J0YycsXHJcbiAgICAncnVieScsXHJcbiAgICAncycsXHJcbiAgICAnc2FtcCcsXHJcbiAgICAnc21hbGwnLFxyXG4gICAgJ3NwYW4nLFxyXG4gICAgJ3N0cm9uZycsXHJcbiAgICAnc3ViJyxcclxuICAgICdzdXAnLFxyXG4gICAgJ3RpbWUnLFxyXG4gICAgJ3UnLFxyXG4gICAgJ3ZhcicsXHJcbiAgICAnd2JyJyxcclxuICAgICdjYXB0aW9uJyxcclxuICAgICdjb2wnLFxyXG4gICAgJ2NvbGdyb3VwJyxcclxuICAgICd0YWJsZScsXHJcbiAgICAndGJvZHknLFxyXG4gICAgJ3RkJyxcclxuICAgICd0Zm9vdCcsXHJcbiAgICAndGgnLFxyXG4gICAgJ3RoZWFkJyxcclxuICAgICd0cicsXHJcbiAgICAndGl0bGUnXHJcbiAgICBdLFxyXG4gICAgYWxsb3dlZEF0dHJpYnV0ZXM6IGZhbHNlLC8qe1xyXG4gICAgJyonOiBbXHJcbiAgICAgICdpZCcsXHJcbiAgICAgICdjbGFzcycsXHJcbiAgICAgICduYW1lJyxcclxuICAgICAgJ2RhdGEtKicsXHJcbiAgICAgICdyb2xlJyxcclxuICAgICAgJ3R5cGUnLFxyXG4gICAgICAnYXJpYS0qJyxcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnYWx0JyxcclxuICAgICAgJ3NyYydcclxuICAgIF1cclxuICB9LCovXHJcbiAgICBhbGxvd2VkQ2xhc3NlczogdW5kZWZpbmVkLFxyXG4gICAgYWxsb3dlZFN0eWxlczogdW5kZWZpbmVkXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgbmV3IFNlbGVuaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHNlbGVuaXVtVXJsIC0gUmVtb3RlIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVuaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXV0b1N0YXJ0V2ViRHJpdmVyKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGFwcGl1bVVybCBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgZXhlY3V0aW9uIGdyaWQgKHN1Y2ggYXMgQlMpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXBwaXVtVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly9sb2NhbGhvc3QnKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGluZGV0aWZ5IGFuZCBhdXRvLXN0YXJ0IGEgcmVsZXZhbnQgd2ViZHJpdmVyXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmF1dG9TdGFydFdlYkRyaXZlcikge1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlbW90ZVVybCwgcHJvYyB9ID0gYXdhaXQgYXV0b1N0YXJ0V2ViRHJpdmVyKHRoaXMuY2Fwcyk7XHJcbiAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gcmVtb3RlVXJsO1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYyA9IHByb2M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZW5pdW1VcmxCYXNlID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fToke3BvcnR9YDtcclxuICAgICAgICAvLyBjaGVjayBpZiBzZWxlbml1bSBodWIgaXMgYmFzZWQgb24gU2VsZW5vaWQsIHRoZW4gZW5hYmxlIHZpZGVvIHJlY29yZGluZ1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCA9IGF3YWl0IHRoaXMuX2lzU2VsZW5vaWRIdWIodGhpcy5zZWxlbml1bVVybEJhc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10udmlkZW9GcmFtZVJhdGUgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIFdlYmRyaXZlci5pbyBvcHRpb25zXHJcbiAgICAgICAgY29uc3Qgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpbml0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBjb25zdCBuYW1lID0gbW9kVXRpbHMuZW5yaWNoUHJvdmlkZXJXZGlvT3B0aW9ucyhwcm92aWRlciwgd2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBicm93c2VyIGZvciBtb2JpbGUgd2ViIHRlc3RzLCBpZiBleGVjdXRlZCBhZ2FpbnN0IHJlbW90ZSBkZXZpY2VzIG9mIGEgY2xvdWQgcHJvdmlkZXJcclxuICAgICAgICBpZiAoZGVmYXVsdEJyb3dzZXIgJiYgcHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9NT0JJTEVfQlJPV1NFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlVOS05PV05fRVJST1IsIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBtb2RVdGlscy5vdmVyd3JpdGVXZGlvQ29tbWFuZHModGhpcy5kcml2ZXIpO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMud2RQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jLmtpbGwoKTtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIG9ubHkgaWYgbm8gc2Vzc2lvbiB0aW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0YWtlIDUgbWluIHRvIGV4ZWN1dGUgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uICYmICF0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzICYmICdGQUlMRUQnID09PSBzdGF0dXMudG9VcHBlckNhc2UoKSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKHN0YXR1cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2VDb250aW51ZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGNocm9tZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjU3luYygndGFza2tpbGwgL0lNIGNocm9tZWRyaXZlci5leGUgL0YnLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgY2hyb21lZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBlZGdlZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgbXNlZGdlZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzID09PSB0cnVlICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QnJvd3NlckxvZyhsb2cpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCBjbGVhciB0cmFuc2FjdGlvbnMgdG8gYXZvaWQgZHVwbGljYXRlIG5hbWVzIGFjcm9zcyBpdGVyYXRpb25zXHJcbiAgICAgICAgLy8gYWxzbyBzaG91bGQgdGhyb3cgb24gZHVwbGljYXRlIG5hbWVzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgLy8gdGhlcmUgbWlnaHQgYmUgbm8gdHJhbnNhY3Rpb25zIHNldCBpZiB0ZXN0IGZhaWxzIGJlZm9yZSB3ZWIudHJhbnNhY3Rpb24gY29tbWFuZFxyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnMuaGFyID0gdGhpcy50cmFuc2FjdGlvbnM7XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgb3BlcmF0aW9uIGZhaWxlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSWdub3JlIGNhbnZhcy1yZWxhdGVkIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMSknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgzKScsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU25hcHNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU05BUFNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldFBhZ2VTb3VyY2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2FuaXRpemVIdG1sKHJldHZhbCwgU0FOSVRJWkVfSFRNTF9PUFRTKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGxpbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKC8oXlsgXFx0XSpcXG4pL2dtLCBcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgxKScsIGVycm9yKTsgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDIpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9hZGp1c3RCcm93c2VyTG9nKGxvZykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgYnJvd3NlciB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgU0VWRVJFIGxvZyBsZXZlbCB0byBFUlJPUlxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsID09PSAnU0VWRVJFJyA/ICdFUlJPUicgOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogJ2Jyb3dzZXInXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogRklYTUU6IFRoZXJlIGlzIGEgYnVnIHdpdGggSUUuIFNlZSB0aGUgY29tbWVudCB3aXRoaW4gZnVuY3Rpb24gYm9keS5cclxuICAgICAqXHJcbiAgICAgKiAgZG9tQ29udGVudExvYWRlZCAoYWthIEZpcnN0IFZpc3VhbCBUaW1lKS0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKiAgbG9hZCAoYWthIEZ1bGwgTG9hZCBUaW1lKSAgICAgICAgICAgICAgIC0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb2Nlc3NpbmcgbW9kZWw6XHJcbiAgICAgKlxyXG4gICAgICogIDEuIG5hdmlnYXRpb25TdGFydCAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgcmVxdWVzdGVkIHRoZSBkb2N1bWVudC5cclxuICAgICAqICAyLiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gTm90IHJlbGV2YW50IHRvIHVzLiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvbmF2aWdhdGlvbi10aW1pbmcvI3Byb2Nlc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiAgMy4gZG9tTG9hZGluZyAgICAgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIHN0YXJ0cyBwYXJzaW5nIHRoZSBkb2N1bWVudC5cclxuICAgICAqICA0LiBkb21JbnRlcmFjdGl2ZSAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50IGFuZCB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZS5cclxuICAgICAqICA1LiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAgIC0gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkIGFuZCBwYXJzZWQgYW5kIGRlZmVycmVkIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC4gXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlc2hlZXRzWzFdLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgbG9hZGluZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gLSBTdHlsZXNoZWV0cyAvdXN1YWxseS8gZGVmZXIgdGhpcyBldmVudCEgLSBodHRwOi8vbW9saWx5LmRlL3dlYmxvZy9kb21jb250ZW50bG9hZGVkXHJcbiAgICAgKiAgNi4gZG9tQ29udGVudExvYWRlZEV2ZW50RW5kICAgICAtIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy4gRS5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRE9NIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXCIpO1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICogIDcuIGRvbUNvbXBsZXRlICAgICAgICAgICAgICAgICAgLSBUaGUgRE9NIHRyZWUgaXMgY29tcGxldGVseSBidWlsdC4gQXN5bmMgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogIDguIGxvYWRFdmVudFN0YXJ0ICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHRoZSByZXNvdXJjZXMgbGlrZSBpbWFnZXMsIHN3ZiwgZXRjLlxyXG4gICAgICogIDkuIGxvYWRFdmVudEVuZCAgICAgICAgICAgICAgICAgLSBUaGUgbG9hZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuXHJcbiAgICAgKi9cclxuICAgIF9nZXRTdGF0cyhjb21tYW5kTmFtZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmV0Y2hTdGF0cyAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5faXNBY3Rpb24oY29tbWFuZE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkID0gMDtcclxuICAgICAgICAgICAgdmFyIGxvYWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2FtZVBhZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxyXG4gICAgICAgICAgICAvLyBpZiBuYXZpZ2F0ZVN0YXJ0IGVxdWFscyB0byB0aGUgb25lIHdlIGdvdCBmcm9tIHByZXZpb3VzIGF0dGVtcHQgKHdlIG5lZWQgdG8gc2F2ZSBpdClcclxuICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgYXJlIHN0aWxsIG9uIHRoZSBzYW1lIHBhZ2UgYW5kIGRvbid0IG5lZWQgdG8gcmVjb3JkIGxvYWQvZG9tQ29udGVudExvYWRlZCB0aW1lc1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3RFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qZ2xvYmFsIHdpbmRvdyovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWluZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubG9hZEV2ZW50U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIHRpbWluZ3MubG9hZEV2ZW50U3RhcnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVQYWdlID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSAmJiB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID09IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA9IHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRXZlbnRTdGFydCA9IHRpbWluZ3MubG9hZEV2ZW50U3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkID0gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBsb2FkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgbG9hZEV2ZW50U3RhcnQgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGVjdXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGVycm9yIGluc2lkZSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXhlY3V0ZUVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZG4ndCBnZXQgdGltaW5ncy5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzYW1lUGFnZSA/IHt9IDogeyBEb21Db250ZW50TG9hZGVkRXZlbnQ6IGRvbUNvbnRlbnRMb2FkZWQsIExvYWRFdmVudDogbG9hZCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uc1tuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNhY3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChuYW1lKSkubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZSsnICgjJytjb3VudGVyKycpJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSBtb2RVdGlscy5nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0SEFSKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9nVHlwZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygncGVyZm9ybWFuY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ3MoJ3BlcmZvcm1hbmNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gb25lIGluc3RhbmNlLCBsb2dzIHdhcyBub3QgaXRlcmFibGUgZm9yIHNvbWUgcmVhc29uIC0gaGVuY2UgdGhlIGZvbGxvd2luZyBjaGVjazpcclxuICAgICAgICAgICAgICAgIGlmICghbG9ncyB8fCB0eXBlb2YgbG9nc1tTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2dldEhBUjogbG9ncyBub3QgaXRlcmFibGU6ICcgKyBKU09OLnN0cmluZ2lmeShsb2dzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ09iaiA9IEpTT04ucGFyc2UobG9nLm1lc3NhZ2UpOyAgIC8vIHJldHVybmVkIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5wdXNoKG1zZ09iai5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXIgPSBoYXJGcm9tTWVzc2FnZXMoZXZlbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSEFSOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrV2FpdEZvckFuZ3VsYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFuZ3VsYXIodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUNyZWRlbnRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50ID0gbGFtYmRhUmVzdENsaWVudC5BdXRvbWF0aW9uQ2xpZW50KFxyXG4gICAgICAgICAgICAgICAgbGFtYmRhQ3JlZGVudGlhbHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNfaW5kOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGFtYmRhQXV0b21hdGlvbkNsaWVudC51cGRhdGVTZXNzaW9uQnlJZChzZXNzaW9uSWQsIHJlcXVlc3RCb2R5LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gTGFtYmRhVGVzdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRiID0gbmV3IFRlc3RpbmdCb3Qoe1xyXG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYXBpX3NlY3JldDogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhID0geyBcInRlc3Rbc3VjY2Vzc11cIiA6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyBcIjFcIiA6IFwiMFwiIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0Yi51cGRhdGVUZXN0KHRlc3REYXRhLCBzZXNzaW9uSWQsIGZ1bmN0aW9uKGVycm9yLCB0ZXN0RGV0YWlscykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBUZXN0aW5nQm90OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXNTZWxlbm9pZEh1YihzZWxlbml1bVVybCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3NlbGVuaXVtVXJsfWAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5ICYmIGJvZHkubGVuZ3RoICYmIGJvZHkuaW5kZXhPZignWW91IGFyZSB1c2luZyBTZWxlbm9pZCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBpbnNpZGUgU2VsZW5vaWQsIHRoZW4gZG93bmxvYWQgdGhlIHZpZGVvIGlmIHRlc3QgaGFzIGZhaWxlZFxyXG4gICAgYXN5bmMgX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZWNvcmRWaWRlbyAmJiAhaGFzRmFpbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmlkZW9GaWxlVXJsID0gYCR7dGhpcy5zZWxlbml1bVVybEJhc2V9L3ZpZGVvLyR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICB0aGlzLnJzLmF0dGFjaG1lbnRzLnB1c2gobW9kVXRpbHMubmV3VmlkZW9BdHRhY2htZW50KGZpbGVOYW1lLCB2aWRlb0ZpbGVVcmwpKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTs7QUFDWjtBQUNBO0FB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
|
|
920
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJfc2FuaXRpemVIdG1sIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiU0FOSVRJWkVfSFRNTF9PUFRTIiwiYWxsb3dlZFRhZ3MiLCJhbGxvd2VkQXR0cmlidXRlcyIsImFsbG93ZWRDbGFzc2VzIiwidW5kZWZpbmVkIiwiYWxsb3dlZFN0eWxlcyIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0Iiwid2RQcm9jIiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiYXV0b1N0YXJ0V2ViRHJpdmVyIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsInJlbW90ZVVybCIsInByb2MiLCJkZWZhdWx0QnJvd3NlciIsImJyb3dzZXJOYW1lIiwiZXJyb3JDb2RlIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5Iiwic2VsZW5pdW1VcmxCYXNlIiwiaXNSdW5uaW5nT25TZWxlbm9pZCIsIl9pc1NlbGVub2lkSHViIiwiZW5hYmxlVmlkZW8iLCJ2aWRlb0ZyYW1lUmF0ZSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJkcml2ZXIiLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsImRlZmVyIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwia2lsbCIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJleGVjU3luYyIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiUHJvbWlzZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImV3IiwiX3Rha2VTbmFwc2hvdFNpbGVudCIsImdldFBhZ2VTb3VyY2UiLCJyZXN1bHQiLCJzYW5pdGl6ZUh0bWwiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBOT19TTkFQU0hPVF9DT01NQU5EUyA9IFtcclxuICAgICdpbml0JyxcclxuICAgICdhc3NlcnRBbGVydCcsXHJcbiAgICAnZGlzcG9zZScsXHJcbiAgICAndHJhbnNhY3Rpb24nLFxyXG4gICAgJ2RlbGV0ZUNvb2tpZXMnLFxyXG4gICAgJ2dldENvb2tpZXMnLFxyXG4gICAgJ2dldENzc1ZhbHVlJyxcclxuICAgICdnZXRIVE1MJyxcclxuICAgICdnZXRTb3VyY2UnLFxyXG4gICAgJ2dldFRpdGxlJyxcclxuICAgICdnZXRXaW5kb3dIYW5kbGVzJyxcclxuICAgICdnZXRXaW5kb3dTaXplJyxcclxuICAgICdnZXRYTUxQYWdlU291cmNlJyxcclxuICAgICdpc0FsZXJ0UHJlc2VudCcsXHJcbiAgICAnaXNDaGVja2VkJyxcclxuICAgICdpc0V4aXN0JyxcclxuICAgICdpc0ludGVyYWN0YWJsZScsXHJcbiAgICAnaXNTZWxlY3RlZCcsXHJcbiAgICAnaXNWaXNpYmxlJyxcclxuICAgICdtb2NrJyxcclxuICAgICdtb2NrQ2xlYXJBbGwnLFxyXG4gICAgJ21vY2tSZXN0b3JlQWxsJyxcclxuICAgICduZXdXaW5kb3cnLFxyXG4gICAgJ3NldEF1dG9XYWl0Rm9yQW5ndWxhcicsXHJcbiAgICAnc2V0VGltZW91dCcsXHJcbiAgICAndGFrZVNjcmVlbnNob3QnLFxyXG4gICAgJ3dhaXRGb3JBbmd1bGFyJyxcclxuICAgICd3YWl0Rm9yV2luZG93J1xyXG5dO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5jb25zdCBTQU5JVElaRV9IVE1MX09QVFMgPSB7XHJcbiAgICBhbGxvd2VkVGFnczogW1xyXG4gICAgJ2JvZHknLFxyXG4gICAgJ2J1dHRvbicsXHJcbiAgICAnZm9ybScsXHJcbiAgICAnaW1nJyxcclxuICAgICdpbnB1dCcsXHJcbiAgICAnc2VsZWN0JyxcclxuICAgICd0ZXh0YXJlYScsXHJcbiAgICAnb3B0aW9uJyxcclxuICAgICdhZGRyZXNzJyxcclxuICAgICdhcnRpY2xlJyxcclxuICAgICdhc2lkZScsXHJcbiAgICAnZm9vdGVyJyxcclxuICAgICdoZWFkZXInLFxyXG4gICAgJ2gxJyxcclxuICAgICdoMicsXHJcbiAgICAnaDMnLFxyXG4gICAgJ2g0JyxcclxuICAgICdoNScsXHJcbiAgICAnaDYnLFxyXG4gICAgJ2hncm91cCcsXHJcbiAgICAnbWFpbicsXHJcbiAgICAnbmF2JyxcclxuICAgICdzZWN0aW9uJyxcclxuICAgICdibG9ja3F1b3RlJyxcclxuICAgICdkZCcsXHJcbiAgICAnZGl2JyxcclxuICAgICdkbCcsXHJcbiAgICAnZHQnLFxyXG4gICAgJ2ZpZ2NhcHRpb24nLFxyXG4gICAgJ2ZpZ3VyZScsXHJcbiAgICAnaHInLFxyXG4gICAgJ2xpJyxcclxuICAgICdtYWluJyxcclxuICAgICdvbCcsXHJcbiAgICAncCcsXHJcbiAgICAncHJlJyxcclxuICAgICd1bCcsXHJcbiAgICAnYScsXHJcbiAgICAnYWJicicsXHJcbiAgICAnYicsXHJcbiAgICAnYmRpJyxcclxuICAgICdiZG8nLFxyXG4gICAgJ2NpdGUnLFxyXG4gICAgJ2NvZGUnLFxyXG4gICAgJ2RhdGEnLFxyXG4gICAgJ2RmbicsXHJcbiAgICAnZW0nLFxyXG4gICAgJ2knLFxyXG4gICAgJ2tiZCcsXHJcbiAgICAnbWFyaycsXHJcbiAgICAncScsXHJcbiAgICAncmInLFxyXG4gICAgJ3JwJyxcclxuICAgICdydCcsXHJcbiAgICAncnRjJyxcclxuICAgICdydWJ5JyxcclxuICAgICdzJyxcclxuICAgICdzYW1wJyxcclxuICAgICdzbWFsbCcsXHJcbiAgICAnc3BhbicsXHJcbiAgICAnc3Ryb25nJyxcclxuICAgICdzdWInLFxyXG4gICAgJ3N1cCcsXHJcbiAgICAndGltZScsXHJcbiAgICAndScsXHJcbiAgICAndmFyJyxcclxuICAgICd3YnInLFxyXG4gICAgJ2NhcHRpb24nLFxyXG4gICAgJ2NvbCcsXHJcbiAgICAnY29sZ3JvdXAnLFxyXG4gICAgJ3RhYmxlJyxcclxuICAgICd0Ym9keScsXHJcbiAgICAndGQnLFxyXG4gICAgJ3Rmb290JyxcclxuICAgICd0aCcsXHJcbiAgICAndGhlYWQnLFxyXG4gICAgJ3RyJyxcclxuICAgICd0aXRsZSdcclxuICAgIF0sXHJcbiAgICBhbGxvd2VkQXR0cmlidXRlczogZmFsc2UsLyp7XHJcbiAgICAnKic6IFtcclxuICAgICAgJ2lkJyxcclxuICAgICAgJ2NsYXNzJyxcclxuICAgICAgJ25hbWUnLFxyXG4gICAgICAnZGF0YS0qJyxcclxuICAgICAgJ3JvbGUnLFxyXG4gICAgICAndHlwZScsXHJcbiAgICAgICdhcmlhLSonLFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdhbHQnLFxyXG4gICAgICAnc3JjJ1xyXG4gICAgXVxyXG4gIH0sKi9cclxuICAgIGFsbG93ZWRDbGFzc2VzOiB1bmRlZmluZWQsXHJcbiAgICBhbGxvd2VkU3R5bGVzOiB1bmRlZmluZWRcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYk1vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9OyAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbi0+aGFyIGRpY3Rpb25hcnlcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgICAgICB0aGlzLndkUHJvYyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRha2UgY2FwYWJpbGl0aWVzIGVpdGhlciBmcm9tIGluaXQgbWV0aG9kIGFyZ3VtZW50IG9yIGZyb20gY29udGV4dCBwYXJhbWV0ZXJzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3JcclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hdXRvU3RhcnRXZWJEcml2ZXIpIHtcclxuICAgICAgICAgICAgLy8gaWYgYXBwaXVtVXJsIHBvaW50cyB0byBhbiBleHRlcm5hbCBleGVjdXRpb24gZ3JpZCAoc3VjaCBhcyBCUylcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hcHBpdW1Vcmwuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1Vcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiB3ZSBzaG91bGQgaW5kZXRpZnkgYW5kIGF1dG8tc3RhcnQgYSByZWxldmFudCB3ZWJkcml2ZXJcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYXV0b1N0YXJ0V2ViRHJpdmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVtb3RlVXJsLCBwcm9jIH0gPSBhd2FpdCBhdXRvU3RhcnRXZWJEcml2ZXIodGhpcy5jYXBzKTtcclxuICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSByZW1vdGVVcmw7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jID0gcHJvYztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIGJyb3dzZXJOYW1lIGNhcHMgZnJvbSBvcHRpb25zLiBGSVhNRTogd2h5IGlzIHRoaXMgZXZlbiBuZWVkZWQ/XHJcbiAgICAgICAgbGV0IGRlZmF1bHRCcm93c2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5vcHRpb25zLmJyb3dzZXJOYW1lIHx8IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgICAgICBkZWZhdWx0QnJvd3NlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZJWE1FOiBzaGFsbCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgYnJvd3Nlck5hbWUgaXMgbm90IHNwZWNpZmllZCwgbmVpdGhlciBpbiBjYXBzIG5vciBpbiBvcHRpb25zPyFcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLklOVkFMSURfQ0FQQUJJTElUSUVTLFxyXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIGB3ZWJgIG1vZHVsZSAtIGJyb3dzZXJOYW1lIG11c3QgYmUgc3BlY2lmaWVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGJyb3dzZXJOYW1lLXNcclxuICAgICAgICBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZScpIHtcclxuICAgICAgICAgICAgLy8gSUUgaXMgc3BlY2lmaWVkIGFzICdpZScgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lIGFuZCBwb3NzaWJseSBzdWl0ZXNcclxuICAgICAgICAgICAgLy8gYnV0IHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgJ2ludGVybmV0IGV4cGxvcmVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSAnaW50ZXJuZXQgZXhwbG9yZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydsYW1iZGE6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIGxhbWJkYXRlc3QgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBwZXJmZWN0b01vYmlsZSBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAhPT0gJ01pY3Jvc29mdEVkZ2UnKSB7XHJcbiAgICAgICAgICAgIC8vIHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgYWxsIGJyb3dzZXJOYW1lcyB0byBiZSBsb3dlcmNhc2VcclxuICAgICAgICAgICAgLy8gZXhjZXB0IFwiTWljcm9zb2Z0RWRnZVwiXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoaXMgbGVhZHMgQ2hyb21lIDc3KyB0byByZWZ1c2UgbG9hZGluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMubG9nZ2luZ1ByZWZzID0geyAgICAgICAgICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyIDwgNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5jaHJvbWVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgcGVyZkxvZ2dpbmdQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZU5ldHdvcms6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlUGFnZTogZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShzZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVVybEJhc2UgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9OiR7cG9ydH1gO1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHNlbGVuaXVtIGh1YiBpcyBiYXNlZCBvbiBTZWxlbm9pZCwgdGhlbiBlbmFibGUgdmlkZW8gcmVjb3JkaW5nXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmdPblNlbGVub2lkID0gYXdhaXQgdGhpcy5faXNTZWxlbm9pZEh1Yih0aGlzLnNlbGVuaXVtVXJsQmFzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS52aWRlb0ZyYW1lUmF0ZSA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgV2ViZHJpdmVyLmlvIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGluaXRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBtb2RVdGlscy5lbnJpY2hQcm92aWRlcldkaW9PcHRpb25zKHByb3ZpZGVyLCB3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGJyb3dzZXIgZm9yIG1vYmlsZSB3ZWIgdGVzdHMsIGlmIGV4ZWN1dGVkIGFnYWluc3QgcmVtb3RlIGRldmljZXMgb2YgYSBjbG91ZCBwcm92aWRlclxyXG4gICAgICAgIGlmIChkZWZhdWx0QnJvd3NlciAmJiBwcm92aWRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX01PQklMRV9CUk9XU0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0U2VsZW5pdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBicm93c2VyIGxvZ3MgaWYgYXV0byBjb2xsZWN0IGxvZ3Mgb3B0aW9uIGlzIGVuYWJsZWRcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaW1wbHkgY2FsbCB0aGlzIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBsb2dzIGFuZCBzdGFydCB0aGUgdGVzdCB3aXRoIHRoZSBjbGVhbiBsb2dzXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBbbW9kVXRpbHMucHJvdmlkZXIuTEFNQkRBVEVTVCwgbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLLCBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUT10uaW5jbHVkZXModGhpcy5kcml2ZXIucHJvdmlkZXIpXHJcbiAgICAgICAgICAgICAgICAvL1snTWljcm9zb2Z0RWRnZScsICdtc2VkZ2UnLCAnRWRnZScsICdJbnRlcm5ldCBFeHBsb3JlciddLmluY2x1ZGVzKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgbWF4aW1pemUgd2luZG93IGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIGFnYWluc3QgZXh0ZXJuYWwgY2xvdWQgcHJvdmlkZXIgaW5mcmFzdHJ1Y3R1cmVcclxuICAgICAgICAgICAgICAgIC8vIGFzIG1vc3Qgb2YgY2xvdWQgcHJvdmlkZXJzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbWF4aW1pemUgYnJvd3NlciB3aW5kb3dcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLm1heGltaXplV2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5pdGlhbCBUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgICdwYWdlTG9hZCc6IHRoaXMud2FpdEZvclRpbWVvdXRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVU5LTk9XTl9FUlJPUiwgZXJyLm1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IG1vZFV0aWxzLm92ZXJ3cml0ZVdkaW9Db21tYW5kcyh0aGlzLmRyaXZlcik7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlID0gZGVmZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlNBVUNFTEFCUykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsndXNlcm5hbWUnXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NLZXkgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddWydhY2Nlc3NLZXknXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXNzZWQgPSBzdGF0dXMgPT09ICdQQVNTRUQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBcIntcXFwicGFzc2VkXFxcIjpcIitwYXNzZWQrXCJ9XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG15QWNjb3VudCA9IG5ldyBTYXVjZUxhYnMoeyB1c2VyOiB1c2VybmFtZSwga2V5OiBhY2Nlc3NLZXl9KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteUFjY291bnQudXBkYXRlSm9iKHVzZXJuYW1lLCBpZCwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnN0b3BKb2IodXNlcm5hbWUsIGlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5URVNUSU5HQk9UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBudWxsICYmIFsnUEFTU0VEJywnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWxlZCBvciBvdGhlciBzdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnLCBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53ZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2Mua2lsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gb25seSBpZiBubyBzZXNzaW9uIHRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRha2UgNSBtaW4gdG8gZXhlY3V0ZSBvdGhlcndpc2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24gJiYgIXRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgJiYgJ0ZBSUxFRCcgPT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoc3RhdHVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZUNvbnRpbnVlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgY2hyb21lZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGVkZ2Vkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGZvciBub3dcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBtc2VkZ2Vkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgPT09IHRydWUgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RCcm93c2VyTG9nKGxvZykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNsZWFyIHRyYW5zYWN0aW9ucyB0byBhdm9pZCBkdXBsaWNhdGUgbmFtZXMgYWNyb3NzIGl0ZXJhdGlvbnNcclxuICAgICAgICAvLyBhbHNvIHNob3VsZCB0aHJvdyBvbiBkdXBsaWNhdGUgbmFtZXMuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBubyB0cmFuc2FjdGlvbnMgc2V0IGlmIHRlc3QgZmFpbHMgYmVmb3JlIHdlYi50cmFuc2FjdGlvbiBjb21tYW5kXHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ycy5oYXIgPSB0aGlzLnRyYW5zYWN0aW9ucztcclxuICAgICAgICBjb25zdCBoYXNGYWlsZWQgPSBlcnJvciAhPT0gdW5kZWZpbmVkICYmIGVycm9yICE9PSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJiBoYW5kbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGVJbWFnZSAmJiB0eXBlb2YgdGl0bGVJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnZhcyBvcGVyYXRpb24gZmFpbGVkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBJZ25vcmUgY2FudmFzLXJlbGF0ZWQgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgxKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgyKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTbmFwc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TTkFQU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRQYWdlU291cmNlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBzYW5pdGl6ZUh0bWwocmV0dmFsLCBTQU5JVElaRV9IVE1MX09QVFMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZW1wdHkgbGluZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsLnJlcGxhY2UoLyheWyBcXHRdKlxcbikvZ20sIFwiXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDEpJywgZXJyb3IpOyByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCAoMyknLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2FkanVzdEJyb3dzZXJMb2cobG9nKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBicm93c2VyIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gY29udmVydCBTRVZFUkUgbG9nIGxldmVsIHRvIEVSUk9SXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwgPT09ICdTRVZFUkUnID8gJ0VSUk9SJyA6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiAnYnJvd3NlcidcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGSVhNRTogVGhlcmUgaXMgYSBidWcgd2l0aCBJRS4gU2VlIHRoZSBjb21tZW50IHdpdGhpbiBmdW5jdGlvbiBib2R5LlxyXG4gICAgICpcclxuICAgICAqICBkb21Db250ZW50TG9hZGVkIChha2EgRmlyc3QgVmlzdWFsIFRpbWUpLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqICBsb2FkIChha2EgRnVsbCBMb2FkIFRpbWUpICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9hZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvY2Vzc2luZyBtb2RlbDpcclxuICAgICAqXHJcbiAgICAgKiAgMS4gbmF2aWdhdGlvblN0YXJ0ICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDIuIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3QgcmVsZXZhbnQgdG8gdXMuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9uYXZpZ2F0aW9uLXRpbWluZy8jcHJvY2VzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqICAzLiBkb21Mb2FkaW5nICAgICAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgc3RhcnRzIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDQuIGRvbUludGVyYWN0aXZlICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQgYW5kIHRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlLlxyXG4gICAgICogIDUuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ICAgLSBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQgYW5kIHBhcnNlZCBhbmQgZGVmZXJyZWQgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLiBcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmMgc2NyaXB0cywgaWYgYW55LCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzaGVldHNbMV0sIGltYWdlcywgYW5kIHN1YmZyYW1lcyBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSAtIFN0eWxlc2hlZXRzIC91c3VhbGx5LyBkZWZlciB0aGlzIGV2ZW50ISAtIGh0dHA6Ly9tb2xpbHkuZGUvd2VibG9nL2RvbWNvbnRlbnRsb2FkZWRcclxuICAgICAqICA2LiBkb21Db250ZW50TG9hZGVkRXZlbnRFbmQgICAgIC0gVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLiBFLmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJET00gZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcIik7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgKiAgNy4gZG9tQ29tcGxldGUgICAgICAgICAgICAgICAgICAtIFRoZSBET00gdHJlZSBpcyBjb21wbGV0ZWx5IGJ1aWx0LiBBc3luYyBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgOC4gbG9hZEV2ZW50U3RhcnQgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhdmUgZmluaXNoZWQgbG9hZGluZyBhbGwgdGhlIHJlc291cmNlcyBsaWtlIGltYWdlcywgc3dmLCBldGMuXHJcbiAgICAgKiAgOS4gbG9hZEV2ZW50RW5kICAgICAgICAgICAgICAgICAtIFRoZSBsb2FkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgICAqL1xyXG4gICAgX2dldFN0YXRzKGNvbW1hbmROYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mZXRjaFN0YXRzICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLl9pc0FjdGlvbihjb21tYW5kTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgbG9hZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzYW1lUGFnZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZvbGxvd2luZyBzaXR1YXRpb246XHJcbiAgICAgICAgICAgIC8vIGlmIG5hdmlnYXRlU3RhcnQgZXF1YWxzIHRvIHRoZSBvbmUgd2UgZ290IGZyb20gcHJldmlvdXMgYXR0ZW1wdCAod2UgbmVlZCB0byBzYXZlIGl0KVxyXG4gICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBhcmUgc3RpbGwgb24gdGhlIHNhbWUgcGFnZSBhbmQgZG9uJ3QgbmVlZCB0byByZWNvcmQgbG9hZC9kb21Db250ZW50TG9hZGVkIHRpbWVzXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypnbG9iYWwgd2luZG93Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5sb2FkRXZlbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgdGltaW5ncy5sb2FkRXZlbnRTdGFydCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhZ2UgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lICYmIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPT0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydCA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID0gdGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRFdmVudFN0YXJ0ID0gdGltaW5ncy5sb2FkRXZlbnRTdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWQgPSBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGxvYWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiBsb2FkRXZlbnRTdGFydCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4ZWN1dGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZXJyb3IgaW5zaWRlIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBleGVjdXRlRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGdldCB0aW1pbmdzLlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhbWVQYWdlID8ge30gOiB7IERvbUNvbnRlbnRMb2FkZWRFdmVudDogZG9tQ29udGVudExvYWRlZCwgTG9hZEV2ZW50OiBsb2FkIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIGxpbWl0IHRoZSBuYW1lIGxlbmd0aCAoc2luY2Ugd2UgY2FuJ3Qgc3RvcmUgdmFsdWVzIGxhcmdlciB0aGFuIDUxMkIgaW4gdGhlIGRhdGFiYXNlKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XHJcblxyXG4gICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50cmFuc2FjdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zdGFydHNXaXRoKG5hbWUpKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lKycgKCMnK2NvdW50ZXIrJyknO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IG1vZFV0aWxzLmdldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRIQVIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dUeXBlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdwZXJmb3JtYW5jZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9ncygncGVyZm9ybWFuY2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpbiBvbmUgaW5zdGFuY2UsIGxvZ3Mgd2FzIG5vdCBpdGVyYWJsZSBmb3Igc29tZSByZWFzb24gLSBoZW5jZSB0aGUgZm9sbG93aW5nIGNoZWNrOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dzIHx8IHR5cGVvZiBsb2dzW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZ2V0SEFSOiBsb2dzIG5vdCBpdGVyYWJsZTogJyArIEpTT04uc3RyaW5naWZ5KGxvZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnT2JqID0gSlNPTi5wYXJzZShsb2cubWVzc2FnZSk7ICAgLy8gcmV0dXJuZWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2gobXNnT2JqLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhciA9IGhhckZyb21NZXNzYWdlcyhldmVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBIQVI6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tXYWl0Rm9yQW5ndWxhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQW5ndWxhcih0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQ3JlZGVudGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUF1dG9tYXRpb25DbGllbnQgPSBsYW1iZGFSZXN0Q2xpZW50LkF1dG9tYXRpb25DbGllbnQoXHJcbiAgICAgICAgICAgICAgICBsYW1iZGFDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1c19pbmQ6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50LnVwZGF0ZVNlc3Npb25CeUlkKHNlc3Npb25JZCwgcmVxdWVzdEJvZHksIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBMYW1iZGFUZXN0OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdGIgPSBuZXcgVGVzdGluZ0JvdCh7XHJcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhcGlfc2VjcmV0OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSB7IFwidGVzdFtzdWNjZXNzXVwiIDogc3RhdHVzID09PSAnUEFTU0VEJyA/IFwiMVwiIDogXCIwXCIgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRiLnVwZGF0ZVRlc3QodGVzdERhdGEsIHNlc3Npb25JZCwgZnVuY3Rpb24oZXJyb3IsIHRlc3REZXRhaWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIFRlc3RpbmdCb3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmtleSxcclxuICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pc1NlbGVub2lkSHViKHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYCR7c2VsZW5pdW1Vcmx9YCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggJiYgYm9keS5pbmRleE9mKCdZb3UgYXJlIHVzaW5nIFNlbGVub2lkJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIGluc2lkZSBTZWxlbm9pZCwgdGhlbiBkb3dubG9hZCB0aGUgdmlkZW8gaWYgdGVzdCBoYXMgZmFpbGVkXHJcbiAgICBhc3luYyBfYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlY29yZFZpZGVvICYmICFoYXNGYWlsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2aWRlb0ZpbGVVcmwgPSBgJHt0aGlzLnNlbGVuaXVtVXJsQmFzZX0vdmlkZW8vJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIHRoaXMucnMuYXR0YWNobWVudHMucHVzaChtb2RVdGlscy5uZXdWaWRlb0F0dGFjaG1lbnQoZmlsZU5hbWUsIHZpZGVvRmlsZVVybCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtB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
|
|
@@ -23,7 +23,7 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
23
23
|
constructor(options, reporterOpts, aggregator) {
|
|
24
24
|
super(options);
|
|
25
25
|
this.reporterOpts = reporterOpts || options.rp;
|
|
26
|
-
this.reportSteps = reporterOpts.reportSteps
|
|
26
|
+
this.reportSteps = !reporterOpts.reportSteps && reporterOpts.reportSteps !== false ? true : reporterOpts.reportSteps;
|
|
27
27
|
this.reportLogs = reporterOpts.reportLogs || false;
|
|
28
28
|
this.cbSuiteToRpIdHash = {};
|
|
29
29
|
this.cbCaseToRpIdHash = {};
|
|
@@ -76,7 +76,7 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
76
76
|
await Promise.all(this.promises);
|
|
77
77
|
const {
|
|
78
78
|
promise
|
|
79
|
-
} =
|
|
79
|
+
} = this.rpClient.finishLaunch(this.tempLaunchId, {
|
|
80
80
|
status: hasFailed ? 'FAILED' : 'PASSED'
|
|
81
81
|
});
|
|
82
82
|
await promise;
|
|
@@ -342,7 +342,16 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
342
342
|
if (!this.tempLaunchId) {
|
|
343
343
|
return;
|
|
344
344
|
}
|
|
345
|
-
|
|
345
|
+
let rpParentId;
|
|
346
|
+
if (stepId) {
|
|
347
|
+
rpParentId = this.cbStepToRpIdHash[stepId];
|
|
348
|
+
}
|
|
349
|
+
if (!rpParentId && caseId) {
|
|
350
|
+
rpParentId = this.cbCaseToRpIdHash[caseId];
|
|
351
|
+
}
|
|
352
|
+
if (!rpParentId && suiteId) {
|
|
353
|
+
rpParentId = this.cbSuiteToRpIdHash[suiteId];
|
|
354
|
+
}
|
|
346
355
|
const rpLevel = this._getRpLevel(level);
|
|
347
356
|
const logMsg = this._stringify(msg);
|
|
348
357
|
if (logMsg) {
|
|
@@ -475,4 +484,4 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
475
484
|
}
|
|
476
485
|
}
|
|
477
486
|
exports.default = ReportPortalReporter;
|
|
478
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUmVwb3J0ZXJCYXNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3RhdHVzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUlBDbGllbnQiLCJMQVVOQ0hfTU9ERVMiLCJERUZBVUxUIiwiREVCVUciLCJURVNUX0lURU1fVFlQRVMiLCJTVUlURSIsIlRFU1QiLCJTVEVQIiwiTUFYX05BTUVfTEVOR1RIIiwiUmVwb3J0UG9ydGFsUmVwb3J0ZXIiLCJSZXBvcnRlckJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJyZXBvcnRlck9wdHMiLCJhZ2dyZWdhdG9yIiwicnAiLCJyZXBvcnRTdGVwcyIsInJlcG9ydExvZ3MiLCJjYlN1aXRlVG9ScElkSGFzaCIsImNiQ2FzZVRvUnBJZEhhc2giLCJjYlN0ZXBUb1JwSWRIYXNoIiwiY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkIiwiY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZCIsImNiQ2FzZVRvQ3VycmVudFN1YlN0ZXBJZCIsInByb21pc2VzIiwiYXBpS2V5IiwiZW5kcG9pbnQiLCJwcm9qZWN0IiwiRXJyb3IiLCJycENsaWVudCIsImxhdW5jaCIsIm5hbWUiLCJpbml0IiwiY2hlY2tDb25uZWN0IiwibWVzc2FnZSIsImdlbmVyYXRlIiwicmVzdWx0cyIsIm9uTGF1bmNoU3RhcnQiLCJ0ZW1wSWQiLCJwcm9taXNlIiwic3RhcnRMYXVuY2giLCJtb2RlIiwiZGVidWciLCJhdHRyaWJ1dGVzIiwidGVtcExhdW5jaElkIiwiaGFuZGxlUHJvbWlzZSIsImNvbnNvbGUiLCJkaXIiLCJvbkxhdW5jaEVuZCIsIl9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMiLCJoYXNGYWlsZWQiLCJzb21lIiwieCIsInN0YXR1cyIsIlN0YXR1cyIsIkZBSUxFRCIsIlByb21pc2UiLCJhbGwiLCJmaW5pc2hMYXVuY2giLCJvblJ1bm5lclN0YXJ0IiwicmlkIiwib3B0cyIsImNhcHMiLCJvblJ1bm5lckVuZCIsInJlc3VsdCIsIm9uU3VpdGVTdGFydCIsInN1aXRlSWQiLCJzdWl0ZSIsInN1aXRlRGVmIiwic3VpdGVSZWZJZCIsInJlZklkIiwic3RhcnRUZXN0SXRlbVJlcSIsInR5cGUiLCJzdGFydFRlc3RJdGVtIiwib25TdWl0ZUVuZCIsInB1c2giLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjb2RlUmVmIiwicGF0aCIsInJwU3VpdGVJZCIsIm9uQ2FzZUVuZCIsInJwVGVzdElkIiwidG9Mb3dlckNhc2UiLCJmYWlsdXJlIiwicnBGaWxlIiwic2NyZWVuc2hvdCIsImNvbnRlbnQiLCJ1bmRlZmluZWQiLCJsb2dNc2ciLCJfc3RyaW5naWZ5IiwibG9nUmVxIiwibGV2ZWwiLCJzZW5kTG9nIiwidHJhbnNJZCIsImZpbmlzaFRyYW5zYWN0aW9uUmVxIiwidHJhbnNScElkIiwiZmluaXNoVGVzdEl0ZW0iLCJmaW5pc2hUZXN0SXRlbVJlcSIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsIm1vZHVsZSIsInJlcG9ydExvZ1N0ZXAiLCJycENhc2VJZCIsInJwUGFyZW50SWQiLCJpZCIsInN0ZXBOYW1lIiwiX2dldFN0ZXBOYW1lIiwibG9jYXRpb24iLCJ0ZXN0Q2FzZUlkIiwiaGFzU3RhdHMiLCJvblN0ZXBFbmQiLCJzdGFydHNXaXRoIiwicnBTdGVwSWQiLCJmaWxlIiwib25Mb2ciLCJzdGVwSWQiLCJtc2ciLCJ0aW1lIiwic3JjIiwicnBMZXZlbCIsIl9nZXRScExldmVsIiwiYXJncyIsImxlbmd0aCIsInNlbmRScExvZyIsIk9iamVjdCIsImtleXMiLCJoYXNGYWlsZWRTdWl0ZSIsIm94TGV2ZWwiLCJzaWduYXR1cmUiLCJzdWJzdHJpbmciLCJTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJjYXRjaCIsImVyciIsImxvZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXJwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogT3h5Z2VuIFJlcG9ydGVyIGZvciBSZXBvcnRQb3J0YWxcclxuICovXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi4vcmVwb3J0ZXIvUmVwb3J0ZXJCYXNlJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5jb25zdCBSUENsaWVudCA9IHJlcXVpcmUoJ0BveHlnZW5ocS9ycC1jbGllbnQtamF2YXNjcmlwdCcpO1xyXG5jb25zdCBMQVVOQ0hfTU9ERVMgPSB7XHJcbiAgICBERUZBVUxUOiAnREVGQVVMVCcsXHJcbiAgICBERUJVRzogJ0RFQlVHJyxcclxufTtcclxuY29uc3QgVEVTVF9JVEVNX1RZUEVTID0ge1xyXG4gICAgU1VJVEU6ICdTVUlURScsXHJcbiAgICBURVNUOiAnVEVTVCcsXHJcbiAgICBTVEVQOiAnU1RFUCcsXHJcbn07XHJcbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDEyODtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydFBvcnRhbFJlcG9ydGVyIGV4dGVuZHMgUmVwb3J0ZXJCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHJlcG9ydGVyT3B0cywgYWdncmVnYXRvcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJPcHRzID0gcmVwb3J0ZXJPcHRzIHx8IG9wdGlvbnMucnA7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTdGVwcyA9IHJlcG9ydGVyT3B0cy5yZXBvcnRTdGVwcyB8fCB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVwb3J0TG9ncyA9IHJlcG9ydGVyT3B0cy5yZXBvcnRMb2dzIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiQ2FzZVRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiU3RlcFRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JDYXNlVG9DdXJyZW50U3ViU3RlcElkID0ge307XHJcbiAgICAgICAgdGhpcy5wcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLnJlcG9ydGVyT3B0c1xyXG4gICAgICAgICAgICB8fCAhdGhpcy5yZXBvcnRlck9wdHMuYXBpS2V5XHJcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5lbmRwb2ludFxyXG4gICAgICAgICAgICB8fCAhdGhpcy5yZXBvcnRlck9wdHMucHJvamVjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydFBvcnRhbCBvcHRpb25zIGFyZSBtaXNzaW5nIGluIG94eWdlbi5jb25mIGZpbGUuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5ycENsaWVudCA9IG5ldyBSUENsaWVudCh7XHJcbiAgICAgICAgICAgIGxhdW5jaDogdGhpcy5yZXBvcnRlck9wdHMubGF1bmNoIHx8IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICAuLi50aGlzLnJlcG9ydGVyT3B0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5ycENsaWVudC5jaGVja0Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSUCAtIEVycm9yIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZlcjogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgZ2VuZXJhdGUocmVzdWx0cykge1xyXG4gICAgfVxyXG4gICAgLy8gRXZlbnRzXHJcbiAgICBhc3luYyBvbkxhdW5jaFN0YXJ0KHsgb3B0aW9ucyB9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRMYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgbW9kZTogdGhpcy5yZXBvcnRlck9wdHMubW9kZSB8fCBMQVVOQ0hfTU9ERVMuREVGQVVMVCxcclxuICAgICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMucmVwb3J0ZXJPcHRzLmF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcExhdW5jaElkID0gdGVtcElkO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc3RhcnQgbGF1bmNoOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25MYXVuY2hFbmQoeyByZXN1bHRzIH0pIHtcclxuICAgICAgICAvLyByZXBvcnQgdGhlIGVuZCBvZiBhbGwgc3RhcnRlZCBzdWl0ZXNcclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMoKTtcclxuICAgICAgICAvLyBDYWxjdWxhdGUgbGF1bmNoIHN0YXR1c1xyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZCA9IHJlc3VsdHMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wcm9taXNlcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IGF3YWl0IHRoaXMucnBDbGllbnQuZmluaXNoTGF1bmNoKHRoaXMudGVtcExhdW5jaElkLCB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGhhc0ZhaWxlZCA/ICdGQUlMRUQnIDogJ1BBU1NFRCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBlbmQgbGF1bmNoOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25SdW5uZXJTdGFydCh7IHJpZCwgb3B0cywgY2FwcyB9KSB7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblJ1bm5lckVuZCh7IHJpZCwgcmVzdWx0IH0pIHtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uU3VpdGVTdGFydCh7IHJpZCwgc3VpdGVJZCwgc3VpdGU6IHN1aXRlRGVmIH0pIHtcclxuICAgICAgICAvLyBpbiBwYXJhbGxlbCB0ZXN0IGV4ZWN1dGlvbiwgb25TdWl0ZVN0YXJ0IHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBzdWl0ZSBcclxuICAgICAgICAvLyBtYWtlIHN1cmUgd2UgY2FsbCBcInN0YXJ0VGVzdEl0ZW1cIiB0aGUgc2FtZSBzdWl0ZSBvbmx5IG9uY2VcclxuICAgICAgICBjb25zdCBzdWl0ZVJlZklkID0gc3VpdGVEZWYucmVmSWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhc3NpZ24gZW1wdHkgb2JqZWN0IGFzIGEgZm9ybSBvZiBtdWx0aS10aHJlYWQgbG9jayxcclxuICAgICAgICAvLyBzbyB0aGUgcGFyYWxsZWwgY2FsbCB0byBvblN1aXRlU3RhcnQgZnJvbSB0aGUgbmV4dCB0aHJlYWRcclxuICAgICAgICAvLyB3aWxsIG5vdCB0cnkgdG8gcHJvY2VlZCB3aXRoIHRoZSBjb2RlIGJlbG93XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkW3N1aXRlUmVmSWRdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgbmFtZTogc3VpdGVEZWYubmFtZSB8fCB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlNVSVRFLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdID0gdGVtcElkO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzdGFydCBzdWl0ZSBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25TdWl0ZUVuZCh7IHJpZCwgc3VpdGVJZCwgcmVzdWx0IH0pIHtcclxuICAgICAgICBjb25zdCBzdWl0ZVJlZklkID0gcmVzdWx0LnJlZklkO1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkW3N1aXRlUmVmSWRdICYmIHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkW3N1aXRlUmVmSWRdLnB1c2gocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uQ2FzZVN0YXJ0KHsgcmlkLCBzdWl0ZUlkLCBzdWl0ZVJlZklkLCBjYXNlSWQsICdjYXNlJzogY2FzZURlZiB9KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgbmFtZTogY2FzZURlZi5uYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiBURVNUX0lURU1fVFlQRVMuVEVTVCxcclxuICAgICAgICAgICAgY29kZVJlZjogY2FzZURlZi5wYXRoLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcnBTdWl0ZUlkID0gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXTtcclxuICAgICAgICBpZiAoIXJwU3VpdGVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHRlbXBJZCwgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zdGFydFRlc3RJdGVtKHN0YXJ0VGVzdEl0ZW1SZXEsIHRoaXMudGVtcExhdW5jaElkLCBycFN1aXRlSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNiQ2FzZVRvUnBJZEhhc2hbY2FzZUlkXSA9IHRlbXBJZDtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc3RhcnQgY2FzZSBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25DYXNlRW5kKHsgcmlkLCBzdWl0ZUlkLCBzdWl0ZVJlZklkLCBjYXNlSWQsIHJlc3VsdCB9KSB7XHJcbiAgICAgICAgY29uc3QgcnBUZXN0SWQgPSB0aGlzLmNiQ2FzZVRvUnBJZEhhc2hbY2FzZUlkXTtcclxuICAgICAgICBpZiAoIXJwVGVzdElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnICYmIHJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJwRmlsZSA9IHJlc3VsdC5zY3JlZW5zaG90ID9cclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3NjcmVlbnNob3QnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiByZXN1bHQuc2NyZWVuc2hvdCxcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShyZXN1bHQuZmFpbHVyZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgaWYgKGxvZ01zZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGxvZ01zZyxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwVGVzdElkLCBsb2dSZXEsIHJwRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzZW5kIGxvZyBmb3IgZmluaXNoZWQgY2FzZSBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRyYW5zSWQgPSB0aGlzLmNiQ2FzZVRvQ3VycmVudFRyYW5zYWN0aW9uSWRbY2FzZUlkXTtcclxuXHJcbiAgICAgICAgaWYgKHRyYW5zSWQpIHtcclxuICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjYWxjdWxhdGUgcHJvcGVyIHN0YXR1c1xyXG4gICAgICAgICAgICBjb25zdCBmaW5pc2hUcmFuc2FjdGlvblJlcSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ3Bhc3NlZCcgLy9yZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNScElkID0gdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3RyYW5zSWRdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbSh0cmFuc1JwSWQsIGZpbmlzaFRyYW5zYWN0aW9uUmVxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCB0cmFuc2FjdGlvbiBpdGVtIG9uIGNhc2UgZW5kOiAke2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNiQ2FzZVRvQ3VycmVudFRyYW5zYWN0aW9uSWRbY2FzZUlkXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmlzaFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0ocnBUZXN0SWQsIGZpbmlzaFRlc3RJdGVtUmVxKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIGNhc2UgaXRlbTogJHtlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN0ZXBTdGFydCh7IHJpZCwgY2FzZUlkLCBzdGVwIH0pIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVwb3J0U3RlcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RlcC5tb2R1bGUgJiYgc3RlcC5tb2R1bGUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0TG9nU3RlcChjYXNlSWQsIHN0ZXApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJwQ2FzZUlkID0gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF07XHJcbiAgICAgICAgbGV0IHJwUGFyZW50SWQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHRyYW5zSWQgPSB0aGlzLmNiQ2FzZVRvQ3VycmVudFRyYW5zYWN0aW9uSWRbY2FzZUlkXTtcclxuXHJcbiAgICAgICAgaWYgKHN0ZXAubmFtZSA9PT0gJ3RyYW5zYWN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAodHJhbnNJZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjYWxjdWxhdGUgcHJvcGVyIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmluaXNoVHJhbnNhY3Rpb25SZXEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAncGFzc2VkJyAvL3Jlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc1JwSWQgPSB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbdHJhbnNJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LmZpbmlzaFRlc3RJdGVtKHRyYW5zUnBJZCwgZmluaXNoVHJhbnNhY3Rpb25SZXEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCB0cmFuc2FjdGlvbiBpdGVtIG9uIGNhc2UgZW5kOiAke2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdID0gc3RlcC5pZDtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2JDYXNlVG9DdXJyZW50U3ViU3RlcElkW2Nhc2VJZF07XHJcbiAgICAgICAgICAgIHJwUGFyZW50SWQgPSBycENhc2VJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2JDYXNlVG9DdXJyZW50U3ViU3RlcElkW2Nhc2VJZF0gPSBzdGVwLmlkO1xyXG4gICAgICAgICAgICBycFBhcmVudElkID0gdHJhbnNJZCA/IHRoaXMuY2JTdGVwVG9ScElkSGFzaFt0cmFuc0lkXSA6IHJwQ2FzZUlkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFycFBhcmVudElkIHx8ICFycENhc2VJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gdGhpcy5fZ2V0U3RlcE5hbWUoc3RlcCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgbmFtZTogc3RlcE5hbWUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRFU1RfSVRFTV9UWVBFUy5TVEVQLFxyXG4gICAgICAgICAgICAvLyBcImNvZGVSZWZcIiArIFwicGFyYW1ldGVyc1wiIHVzZWQgYnkgUlAgbGliIHRvIGdlbmVyYXRlIHRlc3RDYXNlSWQgaWYgdGVzdENhc2VJZCBpcyBub3QgZGVmaW5lZFxyXG4gICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlcG9ydHBvcnRhbC9jbGllbnQtamF2YXNjcmlwdC9ibG9iLzQ4NmVmNzBjNjM4YTlhMjMyNjcyOTBjNjJkZjFmYWY5MDBmN2RmNmEvbGliL3JlcG9ydC1wb3J0YWwtY2xpZW50LmpzI0w0OTdcclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXNhYmxlZCBmb3Igbm93LiBub3Qgc3VyZSBpZiBhY3R1YWxseSBuZWVkZWQuLi5cclxuICAgICAgICAgICAgLy9wYXJhbWV0ZXJzOiB0aGlzLl9nZXRScEFyZ3Moc3RlcC5hcmdzKSxcclxuICAgICAgICAgICAgY29kZVJlZjogc3RlcC5sb2NhdGlvbixcclxuICAgICAgICAgICAgdGVzdENhc2VJZDogcnBDYXNlSWQsXHJcbiAgICAgICAgICAgIGhhc1N0YXRzOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHRlbXBJZCwgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zdGFydFRlc3RJdGVtKHN0YXJ0VGVzdEl0ZW1SZXEsIHRoaXMudGVtcExhdW5jaElkLCBycFBhcmVudElkKTtcclxuICAgICAgICAgICAgdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3N0ZXAuaWRdID0gdGVtcElkO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzdGFydCBzdGVwIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblN0ZXBFbmQoeyByaWQsIGNhc2VJZCwgc3RlcDogcmVzdWx0IH0pIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVwb3J0U3RlcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0Lm5hbWUgJiYgKHJlc3VsdC5uYW1lLnN0YXJ0c1dpdGgoJ2xvZy4nKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUuc3RhcnRzV2l0aCgnd2ViLnRyYW5zYWN0aW9uJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lLnN0YXJ0c1dpdGgoJ21vYi50cmFuc2FjdGlvbicpKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJwU3RlcElkID0gdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3Jlc3VsdC5pZF07XHJcbiAgICAgICAgaWYgKCFycFN0ZXBJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWxldGUgdGhpcy5jYkNhc2VUb0N1cnJlbnRTdWJTdGVwSWRbY2FzZUlkXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnICYmIHJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJwRmlsZSA9IHJlc3VsdC5zY3JlZW5zaG90ID9cclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3NjcmVlbnNob3QnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiByZXN1bHQuc2NyZWVuc2hvdCxcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShyZXN1bHQuZmFpbHVyZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgaWYgKGxvZ01zZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGxvZ01zZyxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlOiBycEZpbGUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnNlbmRMb2cocnBTdGVwSWQsIGxvZ1JlcSwgcnBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHNlbmQgbG9nIGZvciBmaW5pc2hlZCBzdGVwIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaW5pc2hUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LmZpbmlzaFRlc3RJdGVtKHJwU3RlcElkLCBmaW5pc2hUZXN0SXRlbVJlcSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCBzdGVwIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbkxvZyh7IHN1aXRlSWQsIGNhc2VJZCwgc3RlcElkLCBsZXZlbCwgbXNnLCB0aW1lLCBzcmMgfSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRMb2dzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cclxuICAgICAgICBpZiAoIXRoaXMudGVtcExhdW5jaElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBQYXJlbnRJZCA9IHN0ZXBJZCA/XHJcbiAgICAgICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwSWRdXHJcbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cclxuICAgICAgICAgICAgOiBzdWl0ZUlkID8gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZUlkXVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIGlmIChsb2dNc2cpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwUGFyZW50SWQgfHwgdGhpcy50ZW1wTGF1bmNoSWQsIGxvZ1JlcSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBjcmVhdGUgbG9nIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIHJlcG9ydExvZ1N0ZXAoY2FzZUlkLCBzdGVwKSB7XHJcbiAgICAgICAgaWYgKCFzdGVwLmFyZ3MgfHwgIXN0ZXAuYXJncy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZXZlbCA9IHN0ZXAubmFtZTtcclxuICAgICAgICBjb25zdCBtc2cgPSBzdGVwLmFyZ3NbMF07XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHN0ZXAudGltZTtcclxuICAgICAgICBsZXQgc3RlcElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0aGlzLmNiQ2FzZVRvQ3VycmVudFN1YlN0ZXBJZFtjYXNlSWRdKSB7XHJcbiAgICAgICAgICAgIHN0ZXBJZCA9IHRoaXMuY2JDYXNlVG9DdXJyZW50U3ViU3RlcElkW2Nhc2VJZF07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNiQ2FzZVRvQ3VycmVudFRyYW5zYWN0aW9uSWRbY2FzZUlkXSkge1xyXG4gICAgICAgICAgICBzdGVwSWQgPSB0aGlzLmNiQ2FzZVRvQ3VycmVudFRyYW5zYWN0aW9uSWRbY2FzZUlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZW5kUnBMb2coeyBzdWl0ZUlkOiB1bmRlZmluZWQsIGNhc2VJZCwgc3RlcElkLCBsZXZlbCwgbXNnLCB0aW1lIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgc2VuZFJwTG9nKHsgc3VpdGVJZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUgfSkge1xyXG4gICAgICAgIC8vIE94eWdlbiBtaWdodCBzdGFydCBnZW5lcmF0aW5nIGxvZ3MgYmVmb3JlIG9uUnVubmVyU3RhcnQgZXZlbnQsIGlnbm9yZSB0aGVtXHJcbiAgICAgICAgaWYgKCF0aGlzLnRlbXBMYXVuY2hJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJwUGFyZW50SWQgPSBzdGVwSWQgP1xyXG4gICAgICAgICAgICB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbc3RlcElkXVxyXG4gICAgICAgICAgICA6IGNhc2VJZCA/IHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdXHJcbiAgICAgICAgICAgIDogc3VpdGVJZCA/IHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVJZF1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgcnBMZXZlbCA9IHRoaXMuX2dldFJwTGV2ZWwobGV2ZWwpO1xyXG5cclxuICAgICAgICBjb25zdCBsb2dNc2cgPSB0aGlzLl9zdHJpbmdpZnkobXNnKTtcclxuICAgICAgICBpZiAobG9nTXNnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ1JlcSA9IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGxvZ01zZyxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBycExldmVsLFxyXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFBhcmVudElkIHx8IHRoaXMudGVtcExhdW5jaElkLCBsb2dSZXEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gY3JlYXRlIGxvZyBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfcmVwb3J0RW5kT2ZTdGFydGVkU3VpdGVzKCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qgc3VpdGVSZWZJZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNiU3VpdGVUb1JwSWRIYXNoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBycFN1aXRlSWQgPSB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF07XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZSA9IHJlc3VsdHMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgY29uc3QgZmluaXNoVGVzdEl0ZW1SZXEgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGhhc0ZhaWxlZFN1aXRlID8gJ2ZhaWxlZCcgOiAncGFzc2VkJyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0ocnBTdWl0ZUlkLCBmaW5pc2hUZXN0SXRlbVJlcSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBmaW5pc2ggc3VpdGUgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2dldFJwTGV2ZWwob3hMZXZlbCkge1xyXG4gICAgICAgIGlmIChveExldmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBveExldmVsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaW5mbyc7XHJcbiAgICB9XHJcbiAgICAvKl9nZXRScEFyZ3MoY2JBcmdzKSB7XHJcbiAgICAgICAgaWYgKCFjYkFyZ3MgfHwgIWNiQXJncy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgY2JBcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGNiQXJnc1tpXTtcclxuICAgICAgICAgICAgbGV0IGFyZ1N0ciA9IHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IGFyZyBpbnN0YW5jZW9mIFN0cmluZyA/IGFyZyA6IEpTT04uc3RyaW5naWZ5KGFyZyk7XHJcbiAgICAgICAgICAgIHJwQXJncy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGtleTogYGFyZyR7aX1gLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ1N0clxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJwQXJncztcclxuICAgIH0qL1xyXG4gICAgX2dldFN0ZXBOYW1lKHN0ZXApIHtcclxuICAgICAgICBsZXQgbmFtZTtcclxuXHJcbiAgICAgICAgaWYgKHN0ZXAubmFtZSA9PT0gJ3RyYW5zYWN0aW9uJyAmJiBzdGVwLmFyZ3MubGVuZ3RoID4gMCkgeyAgLy8gRklYTUU6IHN0ZXBzIG5lZWQgdG8gYmUgbmVzdGVkIHVuZGVyIHRyYW5zYWN0aW9uc1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5hcmdzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdGVwLnNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5zaWduYXR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ZXAubW9kdWxlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIGV2ZXIgcmVhY2hlZD8gXCJzdGVwLnNpZ25hdHVyZVwiIHNlZW1zIHRvIGFsd2F5cyBleGlzdFxyXG4gICAgICAgICAgICBuYW1lID0gYCR7c3RlcC5tb2R1bGV9LiR7c3RlcC5uYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWF4aW11bSBhbGxvd2VkIG5hbWUgbGVuZ3RoIGluIFJQIGlzIDEwMjQgYnl0ZXNcclxuICAgICAgICAvLyB3ZSB0cnVuY2F0ZSBpdCBldmVuIGxvd2VyIHNvIGl0IHdpbGwgZGlzcGxheSBuaWNlbHlcclxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPiBNQVhfTkFNRV9MRU5HVEgpIHtcclxuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIE1BWF9OQU1FX0xFTkdUSC0zKSArICcuLi4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm5zIG51bGwgaWYgbXNnIGNhbm5vdCBiZSBzdHJpbmdpZmllZCwgb3Igc3RyaWdpZmllcyBpdCBpZiBpdCdzIG5vdCBhIHN0cmluZyBhbHJlYWR5XHJcbiAgICBfc3RyaW5naWZ5KG1zZykge1xyXG4gICAgICAgIC8vIHdlIHRlc3QgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBleHBsaWNpdGx5IG9uIHB1cnBvc2UgYmVjYXVzZSBvdGhlciBmYWxzeSB2YWx1ZXMgKGUuZy4gMCkgYXJlIG9rXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnIHx8IG1zZyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJyB8fCBtc2cgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUlAgLSBlcnJvciBzZW5kaW5nIGxvZzogbXNnIG9iamVjdCBjYW5ub3QgYmUgc2VyaWFsaXplZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVQcm9taXNlKHByb21pc2UpIHtcclxuICAgICAgICBwcm9taXNlLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JQIGVycm9yOiAnLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUEsSUFBQUEsYUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQXFDLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQ3JDLE1BQU1HLFFBQVEsR0FBR0wsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO0FBQzFELE1BQU1NLFlBQVksR0FBRztFQUNqQkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLEtB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
|
|
487
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUmVwb3J0ZXJCYXNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3RhdHVzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUlBDbGllbnQiLCJMQVVOQ0hfTU9ERVMiLCJERUZBVUxUIiwiREVCVUciLCJURVNUX0lURU1fVFlQRVMiLCJTVUlURSIsIlRFU1QiLCJTVEVQIiwiTUFYX05BTUVfTEVOR1RIIiwiUmVwb3J0UG9ydGFsUmVwb3J0ZXIiLCJSZXBvcnRlckJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJyZXBvcnRlck9wdHMiLCJhZ2dyZWdhdG9yIiwicnAiLCJyZXBvcnRTdGVwcyIsInJlcG9ydExvZ3MiLCJjYlN1aXRlVG9ScElkSGFzaCIsImNiQ2FzZVRvUnBJZEhhc2giLCJjYlN0ZXBUb1JwSWRIYXNoIiwiY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkIiwiY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZCIsImNiQ2FzZVRvQ3VycmVudFN1YlN0ZXBJZCIsInByb21pc2VzIiwiYXBpS2V5IiwiZW5kcG9pbnQiLCJwcm9qZWN0IiwiRXJyb3IiLCJycENsaWVudCIsImxhdW5jaCIsIm5hbWUiLCJpbml0IiwiY2hlY2tDb25uZWN0IiwibWVzc2FnZSIsImdlbmVyYXRlIiwicmVzdWx0cyIsIm9uTGF1bmNoU3RhcnQiLCJ0ZW1wSWQiLCJwcm9taXNlIiwic3RhcnRMYXVuY2giLCJtb2RlIiwiZGVidWciLCJhdHRyaWJ1dGVzIiwidGVtcExhdW5jaElkIiwiaGFuZGxlUHJvbWlzZSIsImNvbnNvbGUiLCJkaXIiLCJvbkxhdW5jaEVuZCIsIl9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMiLCJoYXNGYWlsZWQiLCJzb21lIiwieCIsInN0YXR1cyIsIlN0YXR1cyIsIkZBSUxFRCIsIlByb21pc2UiLCJhbGwiLCJmaW5pc2hMYXVuY2giLCJvblJ1bm5lclN0YXJ0IiwicmlkIiwib3B0cyIsImNhcHMiLCJvblJ1bm5lckVuZCIsInJlc3VsdCIsIm9uU3VpdGVTdGFydCIsInN1aXRlSWQiLCJzdWl0ZSIsInN1aXRlRGVmIiwic3VpdGVSZWZJZCIsInJlZklkIiwic3RhcnRUZXN0SXRlbVJlcSIsInR5cGUiLCJzdGFydFRlc3RJdGVtIiwib25TdWl0ZUVuZCIsInB1c2giLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjb2RlUmVmIiwicGF0aCIsInJwU3VpdGVJZCIsIm9uQ2FzZUVuZCIsInJwVGVzdElkIiwidG9Mb3dlckNhc2UiLCJmYWlsdXJlIiwicnBGaWxlIiwic2NyZWVuc2hvdCIsImNvbnRlbnQiLCJ1bmRlZmluZWQiLCJsb2dNc2ciLCJfc3RyaW5naWZ5IiwibG9nUmVxIiwibGV2ZWwiLCJzZW5kTG9nIiwidHJhbnNJZCIsImZpbmlzaFRyYW5zYWN0aW9uUmVxIiwidHJhbnNScElkIiwiZmluaXNoVGVzdEl0ZW0iLCJmaW5pc2hUZXN0SXRlbVJlcSIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsIm1vZHVsZSIsInJlcG9ydExvZ1N0ZXAiLCJycENhc2VJZCIsInJwUGFyZW50SWQiLCJpZCIsInN0ZXBOYW1lIiwiX2dldFN0ZXBOYW1lIiwibG9jYXRpb24iLCJ0ZXN0Q2FzZUlkIiwiaGFzU3RhdHMiLCJvblN0ZXBFbmQiLCJzdGFydHNXaXRoIiwicnBTdGVwSWQiLCJmaWxlIiwib25Mb2ciLCJzdGVwSWQiLCJtc2ciLCJ0aW1lIiwic3JjIiwicnBMZXZlbCIsIl9nZXRScExldmVsIiwiYXJncyIsImxlbmd0aCIsInNlbmRScExvZyIsIk9iamVjdCIsImtleXMiLCJoYXNGYWlsZWRTdWl0ZSIsIm94TGV2ZWwiLCJzaWduYXR1cmUiLCJzdWJzdHJpbmciLCJTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJjYXRjaCIsImVyciIsImxvZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXJwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogT3h5Z2VuIFJlcG9ydGVyIGZvciBSZXBvcnRQb3J0YWxcclxuICovXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi4vcmVwb3J0ZXIvUmVwb3J0ZXJCYXNlJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5jb25zdCBSUENsaWVudCA9IHJlcXVpcmUoJ0BveHlnZW5ocS9ycC1jbGllbnQtamF2YXNjcmlwdCcpO1xyXG5jb25zdCBMQVVOQ0hfTU9ERVMgPSB7XHJcbiAgICBERUZBVUxUOiAnREVGQVVMVCcsXHJcbiAgICBERUJVRzogJ0RFQlVHJyxcclxufTtcclxuY29uc3QgVEVTVF9JVEVNX1RZUEVTID0ge1xyXG4gICAgU1VJVEU6ICdTVUlURScsXHJcbiAgICBURVNUOiAnVEVTVCcsXHJcbiAgICBTVEVQOiAnU1RFUCcsXHJcbn07XHJcbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDEyODtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydFBvcnRhbFJlcG9ydGVyIGV4dGVuZHMgUmVwb3J0ZXJCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHJlcG9ydGVyT3B0cywgYWdncmVnYXRvcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJPcHRzID0gcmVwb3J0ZXJPcHRzIHx8IG9wdGlvbnMucnA7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTdGVwcyA9ICFyZXBvcnRlck9wdHMucmVwb3J0U3RlcHMgJiYgcmVwb3J0ZXJPcHRzLnJlcG9ydFN0ZXBzICE9PSBmYWxzZSA/IHRydWUgOiByZXBvcnRlck9wdHMucmVwb3J0U3RlcHM7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRMb2dzID0gcmVwb3J0ZXJPcHRzLnJlcG9ydExvZ3MgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlVG9ScElkSGFzaCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JDYXNlVG9ScElkSGFzaCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkID0ge307XHJcbiAgICAgICAgdGhpcy5jYkNhc2VUb0N1cnJlbnRUcmFuc2FjdGlvbklkID0ge307XHJcbiAgICAgICAgdGhpcy5jYkNhc2VUb0N1cnJlbnRTdWJTdGVwSWQgPSB7fTtcclxuICAgICAgICB0aGlzLnByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMucmVwb3J0ZXJPcHRzXHJcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5hcGlLZXlcclxuICAgICAgICAgICAgfHwgIXRoaXMucmVwb3J0ZXJPcHRzLmVuZHBvaW50XHJcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5wcm9qZWN0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVwb3J0UG9ydGFsIG9wdGlvbnMgYXJlIG1pc3NpbmcgaW4gb3h5Z2VuLmNvbmYgZmlsZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcjtcclxuICAgICAgICB0aGlzLnJwQ2xpZW50ID0gbmV3IFJQQ2xpZW50KHtcclxuICAgICAgICAgICAgbGF1bmNoOiB0aGlzLnJlcG9ydGVyT3B0cy5sYXVuY2ggfHwgdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgICAgICAgIC4uLnRoaXMucmVwb3J0ZXJPcHRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJwQ2xpZW50LmNoZWNrQ29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJQIC0gRXJyb3IgY29ubmVjdGluZyB0byB0aGUgc2VydmVyOiAke2UubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBnZW5lcmF0ZShyZXN1bHRzKSB7XHJcbiAgICB9XHJcbiAgICAvLyBFdmVudHNcclxuICAgIGFzeW5jIG9uTGF1bmNoU3RhcnQoeyBvcHRpb25zIH0pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHRlbXBJZCwgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zdGFydExhdW5jaCh7XHJcbiAgICAgICAgICAgICAgICBtb2RlOiB0aGlzLnJlcG9ydGVyT3B0cy5tb2RlIHx8IExBVU5DSF9NT0RFUy5ERUZBVUxULFxyXG4gICAgICAgICAgICAgICAgZGVidWc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy5yZXBvcnRlck9wdHMuYXR0cmlidXRlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy50ZW1wTGF1bmNoSWQgPSB0ZW1wSWQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzdGFydCBsYXVuY2g6ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbkxhdW5jaEVuZCh7IHJlc3VsdHMgfSkge1xyXG4gICAgICAgIC8vIHJlcG9ydCB0aGUgZW5kIG9mIGFsbCBzdGFydGVkIHN1aXRlc1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydEVuZE9mU3RhcnRlZFN1aXRlcygpO1xyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBsYXVuY2ggc3RhdHVzXHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gcmVzdWx0cy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnByb21pc2VzKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hMYXVuY2godGhpcy50ZW1wTGF1bmNoSWQsIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogaGFzRmFpbGVkID8gJ0ZBSUxFRCcgOiAnUEFTU0VEJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgcHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGVuZCBsYXVuY2g6ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblJ1bm5lclN0YXJ0KHsgcmlkLCBvcHRzLCBjYXBzIH0pIHtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uUnVubmVyRW5kKHsgcmlkLCByZXN1bHQgfSkge1xyXG4gICAgfVxyXG4gICAgYXN5bmMgb25TdWl0ZVN0YXJ0KHsgcmlkLCBzdWl0ZUlkLCBzdWl0ZTogc3VpdGVEZWYgfSkge1xyXG4gICAgICAgIC8vIGluIHBhcmFsbGVsIHRlc3QgZXhlY3V0aW9uLCBvblN1aXRlU3RhcnQgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIHN1aXRlIFxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYWxsIFwic3RhcnRUZXN0SXRlbVwiIHRoZSBzYW1lIHN1aXRlIG9ubHkgb25jZVxyXG4gICAgICAgIGNvbnN0IHN1aXRlUmVmSWQgPSBzdWl0ZURlZi5yZWZJZDtcclxuICAgICAgICBpZiAodGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFzc2lnbiBlbXB0eSBvYmplY3QgYXMgYSBmb3JtIG9mIG11bHRpLXRocmVhZCBsb2NrLFxyXG4gICAgICAgIC8vIHNvIHRoZSBwYXJhbGxlbCBjYWxsIHRvIG9uU3VpdGVTdGFydCBmcm9tIHRoZSBuZXh0IHRocmVhZFxyXG4gICAgICAgIC8vIHdpbGwgbm90IHRyeSB0byBwcm9jZWVkIHdpdGggdGhlIGNvZGUgYmVsb3dcclxuICAgICAgICB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdID0ge307XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0gPSBbXTtcclxuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBzdWl0ZURlZi5uYW1lIHx8IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiBURVNUX0lURU1fVFlQRVMuU1VJVEUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRUZXN0SXRlbShzdGFydFRlc3RJdGVtUmVxLCB0aGlzLnRlbXBMYXVuY2hJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF0gPSB0ZW1wSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IHN1aXRlIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblN1aXRlRW5kKHsgcmlkLCBzdWl0ZUlkLCByZXN1bHQgfSkge1xyXG4gICAgICAgIGNvbnN0IHN1aXRlUmVmSWQgPSByZXN1bHQucmVmSWQ7XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0gJiYgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0ucHVzaChyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgb25DYXNlU3RhcnQoeyByaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgJ2Nhc2UnOiBjYXNlRGVmIH0pIHtcclxuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBjYXNlRGVmLm5hbWUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRFU1RfSVRFTV9UWVBFUy5URVNULFxyXG4gICAgICAgICAgICBjb2RlUmVmOiBjYXNlRGVmLnBhdGgsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBycFN1aXRlSWQgPSB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdO1xyXG4gICAgICAgIGlmICghcnBTdWl0ZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQsIHJwU3VpdGVJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdID0gdGVtcElkO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzdGFydCBjYXNlIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbkNhc2VFbmQoeyByaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgcmVzdWx0IH0pIHtcclxuICAgICAgICBjb25zdCBycFRlc3RJZCA9IHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdO1xyXG4gICAgICAgIGlmICghcnBUZXN0SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgY29uc3QgcnBGaWxlID0gcmVzdWx0LnNjcmVlbnNob3QgP1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2NyZWVuc2hvdCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5zY3JlZW5zaG90LFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KHJlc3VsdC5mYWlsdXJlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBpZiAobG9nTXNnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dSZXEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnNlbmRMb2cocnBUZXN0SWQsIGxvZ1JlcSwgcnBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHNlbmQgbG9nIGZvciBmaW5pc2hlZCBjYXNlIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdHJhbnNJZCA9IHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdO1xyXG5cclxuICAgICAgICBpZiAodHJhbnNJZCkge1xyXG4gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGNhbGN1bGF0ZSBwcm9wZXIgc3RhdHVzXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmlzaFRyYW5zYWN0aW9uUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAncGFzc2VkJyAvL3Jlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc1JwSWQgPSB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbdHJhbnNJZF07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LmZpbmlzaFRlc3RJdGVtKHRyYW5zUnBJZCwgZmluaXNoVHJhbnNhY3Rpb25SZXEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIHRyYW5zYWN0aW9uIGl0ZW0gb24gY2FzZSBlbmQ6ICR7ZX1gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmluaXNoVGVzdEl0ZW1SZXEgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbShycFRlc3RJZCwgZmluaXNoVGVzdEl0ZW1SZXEpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBmaW5pc2ggY2FzZSBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3RlcFN0YXJ0KHsgcmlkLCBjYXNlSWQsIHN0ZXAgfSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRTdGVwcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGVwLm1vZHVsZSAmJiBzdGVwLm1vZHVsZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRMb2dTdGVwKGNhc2VJZCwgc3RlcCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBDYXNlSWQgPSB0aGlzLmNiQ2FzZVRvUnBJZEhhc2hbY2FzZUlkXTtcclxuICAgICAgICBsZXQgcnBQYXJlbnRJZDtcclxuXHJcbiAgICAgICAgY29uc3QgdHJhbnNJZCA9IHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdO1xyXG5cclxuICAgICAgICBpZiAoc3RlcC5uYW1lID09PSAndHJhbnNhY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFuc0lkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGNhbGN1bGF0ZSBwcm9wZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5pc2hUcmFuc2FjdGlvblJlcSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdwYXNzZWQnIC8vcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zUnBJZCA9IHRoaXMuY2JTdGVwVG9ScElkSGFzaFt0cmFuc0lkXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0odHJhbnNScElkLCBmaW5pc2hUcmFuc2FjdGlvblJlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIHRyYW5zYWN0aW9uIGl0ZW0gb24gY2FzZSBlbmQ6ICR7ZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jYkNhc2VUb0N1cnJlbnRUcmFuc2FjdGlvbklkW2Nhc2VJZF0gPSBzdGVwLmlkO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYkNhc2VUb0N1cnJlbnRTdWJTdGVwSWRbY2FzZUlkXTtcclxuICAgICAgICAgICAgcnBQYXJlbnRJZCA9IHJwQ2FzZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYkNhc2VUb0N1cnJlbnRTdWJTdGVwSWRbY2FzZUlkXSA9IHN0ZXAuaWQ7XHJcbiAgICAgICAgICAgIHJwUGFyZW50SWQgPSB0cmFuc0lkID8gdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3RyYW5zSWRdIDogcnBDYXNlSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJwUGFyZW50SWQgfHwgIXJwQ2FzZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLl9nZXRTdGVwTmFtZShzdGVwKTtcclxuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBzdGVwTmFtZSxcclxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlNURVAsXHJcbiAgICAgICAgICAgIC8vIFwiY29kZVJlZlwiICsgXCJwYXJhbWV0ZXJzXCIgdXNlZCBieSBSUCBsaWIgdG8gZ2VuZXJhdGUgdGVzdENhc2VJZCBpZiB0ZXN0Q2FzZUlkIGlzIG5vdCBkZWZpbmVkXHJcbiAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVwb3J0cG9ydGFsL2NsaWVudC1qYXZhc2NyaXB0L2Jsb2IvNDg2ZWY3MGM2MzhhOWEyMzI2NzI5MGM2MmRmMWZhZjkwMGY3ZGY2YS9saWIvcmVwb3J0LXBvcnRhbC1jbGllbnQuanMjTDQ5N1xyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGRpc2FibGVkIGZvciBub3cuIG5vdCBzdXJlIGlmIGFjdHVhbGx5IG5lZWRlZC4uLlxyXG4gICAgICAgICAgICAvL3BhcmFtZXRlcnM6IHRoaXMuX2dldFJwQXJncyhzdGVwLmFyZ3MpLFxyXG4gICAgICAgICAgICBjb2RlUmVmOiBzdGVwLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICB0ZXN0Q2FzZUlkOiBycENhc2VJZCxcclxuICAgICAgICAgICAgaGFzU3RhdHM6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQsIHJwUGFyZW50SWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbc3RlcC5pZF0gPSB0ZW1wSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IHN0ZXAgaXRlbTogJHtlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIG9uU3RlcEVuZCh7IHJpZCwgY2FzZUlkLCBzdGVwOiByZXN1bHQgfSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRTdGVwcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQubmFtZSAmJiAocmVzdWx0Lm5hbWUuc3RhcnRzV2l0aCgnbG9nLicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubmFtZS5zdGFydHNXaXRoKCd3ZWIudHJhbnNhY3Rpb24nKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUuc3RhcnRzV2l0aCgnbW9iLnRyYW5zYWN0aW9uJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBTdGVwSWQgPSB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbcmVzdWx0LmlkXTtcclxuICAgICAgICBpZiAoIXJwU3RlcElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNiQ2FzZVRvQ3VycmVudFN1YlN0ZXBJZFtjYXNlSWRdO1xyXG5cclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgY29uc3QgcnBGaWxlID0gcmVzdWx0LnNjcmVlbnNob3QgP1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2NyZWVuc2hvdCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5zY3JlZW5zaG90LFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KHJlc3VsdC5mYWlsdXJlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBpZiAobG9nTXNnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dSZXEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGU6IHJwRmlsZSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFN0ZXBJZCwgbG9nUmVxLCBycEZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc2VuZCBsb2cgZm9yIGZpbmlzaGVkIHN0ZXAgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbmlzaFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0ocnBTdGVwSWQsIGZpbmlzaFRlc3RJdGVtUmVxKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIHN0ZXAgaXRlbTogJHtlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIG9uTG9nKHsgc3VpdGVJZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUsIHNyYyB9KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcG9ydExvZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBPeHlnZW4gbWlnaHQgc3RhcnQgZ2VuZXJhdGluZyBsb2dzIGJlZm9yZSBvblJ1bm5lclN0YXJ0IGV2ZW50LCBpZ25vcmUgdGhlbVxyXG4gICAgICAgIGlmICghdGhpcy50ZW1wTGF1bmNoSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJwUGFyZW50SWQ7XHJcblxyXG4gICAgICAgIGlmIChzdGVwSWQpIHtcclxuICAgICAgICAgICAgcnBQYXJlbnRJZCA9IHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwSWRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFycFBhcmVudElkICYmIGNhc2VJZCkge1xyXG4gICAgICAgICAgICBycFBhcmVudElkID0gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJwUGFyZW50SWQgJiYgc3VpdGVJZCkge1xyXG4gICAgICAgICAgICBycFBhcmVudElkID0gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZUlkXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJwTGV2ZWwgPSB0aGlzLl9nZXRScExldmVsKGxldmVsKTtcclxuXHJcbiAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KG1zZyk7XHJcbiAgICAgICAgaWYgKGxvZ01zZykge1xyXG4gICAgICAgICAgICBjb25zdCBsb2dSZXEgPSB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBsb2dNc2csXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogcnBMZXZlbCxcclxuICAgICAgICAgICAgICAgIHRpbWU6IHRpbWUsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnNlbmRMb2cocnBQYXJlbnRJZCB8fCB0aGlzLnRlbXBMYXVuY2hJZCwgbG9nUmVxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGNyZWF0ZSBsb2cgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgcmVwb3J0TG9nU3RlcChjYXNlSWQsIHN0ZXApIHtcclxuICAgICAgICBpZiAoIXN0ZXAuYXJncyB8fCAhc3RlcC5hcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxldmVsID0gc3RlcC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IHN0ZXAuYXJnc1swXTtcclxuICAgICAgICBjb25zdCB0aW1lID0gc3RlcC50aW1lO1xyXG4gICAgICAgIGxldCBzdGVwSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY2JDYXNlVG9DdXJyZW50U3ViU3RlcElkW2Nhc2VJZF0pIHtcclxuICAgICAgICAgICAgc3RlcElkID0gdGhpcy5jYkNhc2VUb0N1cnJlbnRTdWJTdGVwSWRbY2FzZUlkXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdKSB7XHJcbiAgICAgICAgICAgIHN0ZXBJZCA9IHRoaXMuY2JDYXNlVG9DdXJyZW50VHJhbnNhY3Rpb25JZFtjYXNlSWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRScExvZyh7IHN1aXRlSWQ6IHVuZGVmaW5lZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBzZW5kUnBMb2coeyBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXBJZCwgbGV2ZWwsIG1zZywgdGltZSB9KSB7XHJcbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cclxuICAgICAgICBpZiAoIXRoaXMudGVtcExhdW5jaElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBQYXJlbnRJZCA9IHN0ZXBJZCA/XHJcbiAgICAgICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwSWRdXHJcbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cclxuICAgICAgICAgICAgOiBzdWl0ZUlkID8gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZUlkXVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIGlmIChsb2dNc2cpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwUGFyZW50SWQgfHwgdGhpcy50ZW1wTGF1bmNoSWQsIGxvZ1JlcSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBjcmVhdGUgbG9nIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBzdWl0ZVJlZklkIG9mIE9iamVjdC5rZXlzKHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2gpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJwU3VpdGVJZCA9IHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZFtzdWl0ZVJlZklkXTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlID0gcmVzdWx0cy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5pc2hUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogaGFzRmFpbGVkU3VpdGUgPyAnZmFpbGVkJyA6ICdwYXNzZWQnLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbShycFN1aXRlSWQsIGZpbmlzaFRlc3RJdGVtUmVxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCBzdWl0ZSBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfZ2V0UnBMZXZlbChveExldmVsKSB7XHJcbiAgICAgICAgaWYgKG94TGV2ZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG94TGV2ZWwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdpbmZvJztcclxuICAgIH1cclxuICAgIC8qX2dldFJwQXJncyhjYkFyZ3MpIHtcclxuICAgICAgICBpZiAoIWNiQXJncyB8fCAhY2JBcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBycEFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBjYkFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYXJnID0gY2JBcmdzW2ldO1xyXG4gICAgICAgICAgICBsZXQgYXJnU3RyID0gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgYXJnIGluc3RhbmNlb2YgU3RyaW5nID8gYXJnIDogSlNPTi5zdHJpbmdpZnkoYXJnKTtcclxuICAgICAgICAgICAgcnBBcmdzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAga2V5OiBgYXJnJHtpfWAsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJnU3RyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcnBBcmdzO1xyXG4gICAgfSovXHJcbiAgICBfZ2V0U3RlcE5hbWUoc3RlcCkge1xyXG4gICAgICAgIGxldCBuYW1lO1xyXG5cclxuICAgICAgICBpZiAoc3RlcC5uYW1lID09PSAndHJhbnNhY3Rpb24nICYmIHN0ZXAuYXJncy5sZW5ndGggPiAwKSB7ICAvLyBGSVhNRTogc3RlcHMgbmVlZCB0byBiZSBuZXN0ZWQgdW5kZXIgdHJhbnNhY3Rpb25zXHJcbiAgICAgICAgICAgIG5hbWUgPSBzdGVwLmFyZ3NbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ZXAuc2lnbmF0dXJlKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBzdGVwLnNpZ25hdHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RlcC5tb2R1bGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgZXZlciByZWFjaGVkPyBcInN0ZXAuc2lnbmF0dXJlXCIgc2VlbXMgdG8gYWx3YXlzIGV4aXN0XHJcbiAgICAgICAgICAgIG5hbWUgPSBgJHtzdGVwLm1vZHVsZX0uJHtzdGVwLm5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBzdGVwLm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYXhpbXVtIGFsbG93ZWQgbmFtZSBsZW5ndGggaW4gUlAgaXMgMTAyNCBieXRlc1xyXG4gICAgICAgIC8vIHdlIHRydW5jYXRlIGl0IGV2ZW4gbG93ZXIgc28gaXQgd2lsbCBkaXNwbGF5IG5pY2VseVxyXG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IE1BWF9OQU1FX0xFTkdUSCkge1xyXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgTUFYX05BTUVfTEVOR1RILTMpICsgJy4uLic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybnMgbnVsbCBpZiBtc2cgY2Fubm90IGJlIHN0cmluZ2lmaWVkLCBvciBzdHJpZ2lmaWVzIGl0IGlmIGl0J3Mgbm90IGEgc3RyaW5nIGFscmVhZHlcclxuICAgIF9zdHJpbmdpZnkobXNnKSB7XHJcbiAgICAgICAgLy8gd2UgdGVzdCBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIGV4cGxpY2l0bHkgb24gcHVycG9zZSBiZWNhdXNlIG90aGVyIGZhbHN5IHZhbHVlcyAoZS5nLiAwKSBhcmUgb2tcclxuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcgfHwgbXNnID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnIHx8IG1zZyBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1zZyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSUCAtIGVycm9yIHNlbmRpbmcgbG9nOiBtc2cgb2JqZWN0IGNhbm5vdCBiZSBzZXJpYWxpemVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIHByb21pc2UuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUlAgZXJyb3I6ICcsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFZQSxJQUFBQSxhQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNC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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oxygen-cli",
|
|
3
|
-
"version": "1.43.
|
|
3
|
+
"version": "1.43.2-beta.1",
|
|
4
4
|
"description": "Automation framework for testing modern applications",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@lambdatest/node-rest-client": "1.0.5",
|
|
58
58
|
"@oxygenhq/logger": "0.5.1",
|
|
59
59
|
"@oxygenhq/mitmproxy-node": "1.0.1",
|
|
60
|
-
"@oxygenhq/rp-client-javascript": "5.
|
|
60
|
+
"@oxygenhq/rp-client-javascript": "5.5.7-beta.1",
|
|
61
61
|
"@wdio/cli": "7.30.0",
|
|
62
62
|
"@wdio/devtools-service": "7.30.0",
|
|
63
63
|
"@wdio/sync": "7.30.0",
|