appium-remote-debugger 9.1.13 → 9.1.15
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 +14 -0
- package/build/lib/atoms.js +1 -1
- package/build/lib/atoms.js.map +1 -1
- package/build/lib/mixins/connect.js +1 -1
- package/build/lib/mixins/connect.js.map +1 -1
- package/build/lib/mixins/execute.js +7 -5
- package/build/lib/mixins/execute.js.map +1 -1
- package/build/lib/mixins/index.js +1 -1
- package/build/lib/mixins/index.js.map +1 -1
- package/build/lib/mixins/message-handlers.js +1 -1
- package/build/lib/mixins/message-handlers.js.map +1 -1
- package/build/lib/mixins/navigate.js +1 -1
- package/build/lib/mixins/navigate.js.map +1 -1
- package/build/lib/remote-debugger.js +1 -1
- package/build/lib/remote-debugger.js.map +1 -1
- package/build/lib/rpc/remote-messages.js +1 -1
- package/build/lib/rpc/remote-messages.js.map +1 -1
- package/build/lib/rpc/rpc-client-real-device.js +1 -1
- package/build/lib/rpc/rpc-client-real-device.js.map +1 -1
- package/build/lib/rpc/rpc-client-simulator.js +1 -1
- package/build/lib/rpc/rpc-client-simulator.js.map +1 -1
- package/build/lib/rpc/rpc-client.js +1 -1
- package/build/lib/rpc/rpc-client.js.map +1 -1
- package/build/lib/rpc/rpc-message-handler.js +1 -1
- package/build/lib/rpc/rpc-message-handler.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/lib/mixins/execute.js +6 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client-real-device.js","names":["_logger","_interopRequireDefault","require","_rpcClient","_appiumIosDevice","RpcClientRealDevice","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","udid","connect","service","services","startWebInspectorService","osVersion","platformVersion","isSimulator","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","socketChunkSize","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","isConnected","disconnect","log","debug","close","sendMessage","cmd","data","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-real-device.js"],"sourcesContent":["import log from '../logger';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientRealDevice extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n udid,\n } = opts;\n\n this.udid = udid;\n }\n\n async connect () {\n this.service = await services.startWebInspectorService(this.udid, {\n osVersion: this.platformVersion,\n isSimulator: false,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n socketChunkSize: this.socketChunkSize,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n\n this.service.listenMessage(this.receive.bind(this));\n this.isConnected = true;\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) { // eslint-disable-line require-await\n this.service.sendMessage(cmd);\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAGe,MAAMG,mBAAmB,SAASC,kBAAS,CAAC;EACzDC,WAAWA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,KAAK,CAACC,MAAM,CAACC,MAAM,CAAC;MAClBC,oBAAoB,EAAE;IACxB,CAAC,EAAEH,IAAI,CAAC,CAAC;IAET,MAAM;MACJI;IACF,CAAC,GAAGJ,IAAI;IAER,IAAI,CAACI,IAAI,GAAGA,IAAI;EAClB;EAEA,MAAMC,OAAOA,CAAA,EAAI;IACf,IAAI,CAACC,OAAO,GAAG,MAAMC,yBAAQ,CAACC,wBAAwB,CAAC,IAAI,CAACJ,IAAI,EAAE;MAChEK,SAAS,EAAE,IAAI,CAACC,eAAe;MAC/BC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE,IAAI,CAACC,mBAAmB;MACjCC,cAAc,EAAE,IAAI,CAACC,0BAA0B;MAC/CC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCC,cAAc,EAAE,IAAI,CAACC;IACvB,CAAC,CAAC;IAEF,IAAI,CAACZ,OAAO,CAACa,aAAa,CAAC,IAAI,CAACC,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAACC,WAAW,GAAG,IAAI;EACzB;EAEA,MAAMC,UAAUA,CAAA,EAAI;IAClB,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MACrB;IACF;IAEAE,eAAG,CAACC,KAAK,CAAC,oCAAoC,CAAC;IAC/C,MAAM,KAAK,CAACF,UAAU,
|
|
1
|
+
{"version":3,"file":"rpc-client-real-device.js","names":["_logger","_interopRequireDefault","require","_rpcClient","_appiumIosDevice","RpcClientRealDevice","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","udid","connect","service","services","startWebInspectorService","osVersion","platformVersion","isSimulator","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","socketChunkSize","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","isConnected","disconnect","log","debug","close","sendMessage","cmd","data","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-real-device.js"],"sourcesContent":["import log from '../logger';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientRealDevice extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n udid,\n } = opts;\n\n this.udid = udid;\n }\n\n async connect () {\n this.service = await services.startWebInspectorService(this.udid, {\n osVersion: this.platformVersion,\n isSimulator: false,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n socketChunkSize: this.socketChunkSize,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n\n this.service.listenMessage(this.receive.bind(this));\n this.isConnected = true;\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) { // eslint-disable-line require-await\n this.service.sendMessage(cmd);\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAGe,MAAMG,mBAAmB,SAASC,kBAAS,CAAC;EACzDC,WAAWA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,KAAK,CAACC,MAAM,CAACC,MAAM,CAAC;MAClBC,oBAAoB,EAAE;IACxB,CAAC,EAAEH,IAAI,CAAC,CAAC;IAET,MAAM;MACJI;IACF,CAAC,GAAGJ,IAAI;IAER,IAAI,CAACI,IAAI,GAAGA,IAAI;EAClB;EAEA,MAAMC,OAAOA,CAAA,EAAI;IACf,IAAI,CAACC,OAAO,GAAG,MAAMC,yBAAQ,CAACC,wBAAwB,CAAC,IAAI,CAACJ,IAAI,EAAE;MAChEK,SAAS,EAAE,IAAI,CAACC,eAAe;MAC/BC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE,IAAI,CAACC,mBAAmB;MACjCC,cAAc,EAAE,IAAI,CAACC,0BAA0B;MAC/CC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCC,cAAc,EAAE,IAAI,CAACC;IACvB,CAAC,CAAC;IAEF,IAAI,CAACZ,OAAO,CAACa,aAAa,CAAC,IAAI,CAACC,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAACC,WAAW,GAAG,IAAI;EACzB;EAEA,MAAMC,UAAUA,CAAA,EAAI;IAClB,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MACrB;IACF;IAEAE,eAAG,CAACC,KAAK,CAAC,oCAAoC,CAAC;IAC/C,MAAM,KAAK,CAACF,UAAU,CAAC,CAAC;IACxB,IAAI,CAACjB,OAAO,CAACoB,KAAK,CAAC,CAAC;IACpB,IAAI,CAACJ,WAAW,GAAG,KAAK;EAC1B;EAEA,MAAMK,WAAWA,CAAEC,GAAG,EAAE;IACtB,IAAI,CAACtB,OAAO,CAACqB,WAAW,CAACC,GAAG,CAAC;EAC/B;EAEA,MAAMR,OAAOA,CAAES,IAAI,EAAE;IACnB,IAAI,CAAC,IAAI,CAACP,WAAW,EAAE;MACrB;IACF;IACA,MAAM,IAAI,CAACQ,cAAc,CAACC,aAAa,CAACF,IAAI,CAAC;EAC/C;AACF;AAACG,OAAA,CAAAC,OAAA,GAAApC,mBAAA"}
|
|
@@ -131,4 +131,4 @@ class RpcClientSimulator extends _rpcClient.default {
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
exports.default = RpcClientSimulator;
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX25ldCIsIl9ycGNDbGllbnQiLCJfYXBwaXVtSW9zRGV2aWNlIiwiUnBjQ2xpZW50U2ltdWxhdG9yIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzb2NrZXRQYXRoIiwiaG9zdCIsInBvcnQiLCJtZXNzYWdlUHJveHkiLCJzb2NrZXQiLCJjb25uZWN0IiwibG9nIiwiZGVidWciLCJuZXQiLCJvbmNlIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiU29ja2V0IiwidHlwZSIsInNldE5vRGVsYXkiLCJzZXRLZWVwQWxpdmUiLCJvbiIsImlzQ29ubmVjdGVkIiwic2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlIiwidWRpZCIsImlzU2ltdWxhdG9yIiwib3NWZXJzaW9uIiwicGxhdGZvcm1WZXJzaW9uIiwidmVyYm9zZSIsImxvZ0FsbENvbW11bmljYXRpb24iLCJ2ZXJib3NlSGV4RHVtcCIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwibWF4RnJhbWVMZW5ndGgiLCJ3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImxpc3Rlbk1lc3NhZ2UiLCJyZWNlaXZlIiwiYmluZCIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiZGlzY29ubmVjdCIsImNsb3NlIiwic2VuZE1lc3NhZ2UiLCJjbWQiLCJvblNvY2tldEVycm9yIiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwiaWduIiwiZGF0YSIsImtleSIsIl8iLCJpc1VuZGVmaW5lZCIsInRvU3RyaW5nIiwibWVzc2FnZUhhbmRsZXIiLCJoYW5kbGVNZXNzYWdlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcnBjL3JwYy1jbGllbnQtc2ltdWxhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgUnBjQ2xpZW50IGZyb20gJy4vcnBjLWNsaWVudCc7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnRTaW11bGF0b3IgZXh0ZW5kcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7XG4gICAgICBzaG91bGRDaGVja0ZvclRhcmdldDogZmFsc2UsXG4gICAgfSwgb3B0cykpO1xuXG4gICAgY29uc3Qge1xuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIGhvc3QgPSAnOjoxJyxcbiAgICAgIHBvcnQsXG4gICAgICBtZXNzYWdlUHJveHksXG4gICAgfSA9IG9wdHM7XG5cbiAgICAvLyBob3N0L3BvcnQgY29uZmlnIGZvciBUQ1AgY29tbXVuaWNhdGlvbiwgc29ja2V0UGF0aCBmb3IgdW5peCBkb21haW4gc29ja2V0c1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLm1lc3NhZ2VQcm94eSA9IG1lc3NhZ2VQcm94eTtcblxuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7XG4gICAgLy8gY3JlYXRlIHNvY2tldCBhbmQgaGFuZGxlIGl0cyBtZXNzYWdlc1xuICAgIGlmICh0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VQcm94eSkge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXQgdmlhIHByb3h5XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byByZW1vdGUgZGVidWdnZXIgdmlhIHByb3h5IHRocm91Z2ggdW5peCBkb21haW4gc29ja2V0OiAnJHt0aGlzLm1lc3NhZ2VQcm94eX0nYCk7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5tZXNzYWdlUHJveHkpO1xuXG4gICAgICAgIC8vIEZvcndhcmQgdGhlIGFjdHVhbCBzb2NrZXRQYXRoIHRvIHRoZSBwcm94eVxuICAgICAgICB0aGlzLnNvY2tldC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm9yd2FyZGluZyB0aGUgYWN0dWFsIHdlYiBpbnNwZWN0b3Igc29ja2V0IHRvIHRoZSBwcm94eTogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgICB0aGlzLnNvY2tldC53cml0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzb2NrZXRQYXRoOiB0aGlzLnNvY2tldFBhdGhcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXRcbiAgICAgICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIHJlbW90ZSBkZWJ1Z2dlciB0aHJvdWdoIHVuaXggZG9tYWluIHNvY2tldDogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLnNvY2tldFBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlUHJveHkpIHtcbiAgICAgICAgLy8gY29ubmVjdCB0byB0aGUgcHJveHkgaW5zdGVhZCBvZiB0aGUgcmVtb3RlIGRlYnVnZ2VyIGRpcmVjdGx5XG4gICAgICAgIHRoaXMucG9ydCA9IHRoaXMubWVzc2FnZVByb3h5O1xuICAgICAgfVxuXG4gICAgICAvLyB0Y3Agc29ja2V0XG4gICAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gcmVtb3RlIGRlYnVnZ2VyICR7dGhpcy5tZXNzYWdlUHJveHkgPyAndmlhIHByb3h5ICcgOiAnJ310aHJvdWdoIFRDUDogJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApO1xuICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7dHlwZTogJ3RjcDYnfSk7XG4gICAgICB0aGlzLnNvY2tldC5jb25uZWN0KHRoaXMucG9ydCwgdGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgIHRoaXMuc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlKTtcbiAgICB0aGlzLnNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBsb2cuZGVidWcoJ0RlYnVnZ2VyIHNvY2tldCBkaXNjb25uZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnNvY2tldC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSh0aGlzLnVkaWQsIHtcbiAgICAgIHNvY2tldDogdGhpcy5zb2NrZXQsXG4gICAgICBpc1NpbXVsYXRvcjogdHJ1ZSxcbiAgICAgIG9zVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICB2ZXJib3NlOiB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgICB2ZXJib3NlSGV4RHVtcDogdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICAgIG1heEZyYW1lTGVuZ3RoOiB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZS5saXN0ZW5NZXNzYWdlKHRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIGNvbm5lY3QgdGhlIHNvY2tldFxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBvbmx5IHJlc29sdmUgdGhpcyBmdW5jdGlvbiB3aGVuIHdlIGFyZSBhY3R1YWxseSBjb25uZWN0ZWRcbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIHNvY2tldCBjb25uZWN0ZWRgKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNvY2tldC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGNvbm5lY3Rpb24gd2FzIHJlZnVzZWQsIHNvIHJlamVjdCB0aGUgY29ubmVjdCBwcm9taXNlXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ0Rpc2Nvbm5lY3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXInKTtcbiAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKGNtZCkge1xuICAgIGxldCBvblNvY2tldEVycm9yO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhhbmRsZSBzb2NrZXQgcHJvYmxlbXNcbiAgICAgIG9uU29ja2V0RXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgU29ja2V0IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuXG4gICAgICAgIC8vIHRoZSBjb25uZWN0aW9uIHdhcyByZWZ1c2VkLCBzbyByZWplY3QgdGhlIGNvbm5lY3QgcHJvbWlzZVxuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmRNZXNzYWdlKGNtZCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAvLyByZW1vdmUgdGhpcyBsaXN0ZW5lciwgc28gd2UgZG9uJ3QgZXhoYXVzdCB0aGUgc3lzdGVtXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ1dJUk1lc3NhZ2VEYXRhS2V5JywgJ1dJUkRlc3RpbmF0aW9uS2V5JywgJ1dJUlNvY2tldERhdGFLZXknXSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRhdGFba2V5XSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuaGFuZGxlTWVzc2FnZShkYXRhKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFHZSxNQUFNTSxrQkFBa0IsU0FBU0Msa0JBQVMsQ0FBQztFQUN4REMsV0FBV0EsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbEJDLG9CQUFvQixFQUFFO0lBQ3hCLENBQUMsRUFBRUgsSUFBSSxDQUFDLENBQUM7SUFFVCxNQUFNO01BQ0pJLFVBQVU7TUFDVkMsSUFBSSxHQUFHLEtBQUs7TUFDWkMsSUFBSTtNQUNKQztJQUNGLENBQUMsR0FBR1AsSUFBSTtJQUdSLElBQUksQ0FBQ0ssSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7RUFDOUI7RUFFQSxNQUFNSyxPQUFPQSxDQUFBLEVBQUk7SUFFZixJQUFJLElBQUksQ0FBQ0wsVUFBVSxFQUFFO01BQ25CLElBQUksSUFBSSxDQUFDRyxZQUFZ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
|
|
134
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX25ldCIsIl9ycGNDbGllbnQiLCJfYXBwaXVtSW9zRGV2aWNlIiwiUnBjQ2xpZW50U2ltdWxhdG9yIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzb2NrZXRQYXRoIiwiaG9zdCIsInBvcnQiLCJtZXNzYWdlUHJveHkiLCJzb2NrZXQiLCJjb25uZWN0IiwibG9nIiwiZGVidWciLCJuZXQiLCJvbmNlIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiU29ja2V0IiwidHlwZSIsInNldE5vRGVsYXkiLCJzZXRLZWVwQWxpdmUiLCJvbiIsImlzQ29ubmVjdGVkIiwic2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlIiwidWRpZCIsImlzU2ltdWxhdG9yIiwib3NWZXJzaW9uIiwicGxhdGZvcm1WZXJzaW9uIiwidmVyYm9zZSIsImxvZ0FsbENvbW11bmljYXRpb24iLCJ2ZXJib3NlSGV4RHVtcCIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwibWF4RnJhbWVMZW5ndGgiLCJ3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImxpc3Rlbk1lc3NhZ2UiLCJyZWNlaXZlIiwiYmluZCIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiZGlzY29ubmVjdCIsImNsb3NlIiwic2VuZE1lc3NhZ2UiLCJjbWQiLCJvblNvY2tldEVycm9yIiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwiaWduIiwiZGF0YSIsImtleSIsIl8iLCJpc1VuZGVmaW5lZCIsInRvU3RyaW5nIiwibWVzc2FnZUhhbmRsZXIiLCJoYW5kbGVNZXNzYWdlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcnBjL3JwYy1jbGllbnQtc2ltdWxhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgUnBjQ2xpZW50IGZyb20gJy4vcnBjLWNsaWVudCc7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnRTaW11bGF0b3IgZXh0ZW5kcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7XG4gICAgICBzaG91bGRDaGVja0ZvclRhcmdldDogZmFsc2UsXG4gICAgfSwgb3B0cykpO1xuXG4gICAgY29uc3Qge1xuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIGhvc3QgPSAnOjoxJyxcbiAgICAgIHBvcnQsXG4gICAgICBtZXNzYWdlUHJveHksXG4gICAgfSA9IG9wdHM7XG5cbiAgICAvLyBob3N0L3BvcnQgY29uZmlnIGZvciBUQ1AgY29tbXVuaWNhdGlvbiwgc29ja2V0UGF0aCBmb3IgdW5peCBkb21haW4gc29ja2V0c1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLm1lc3NhZ2VQcm94eSA9IG1lc3NhZ2VQcm94eTtcblxuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7XG4gICAgLy8gY3JlYXRlIHNvY2tldCBhbmQgaGFuZGxlIGl0cyBtZXNzYWdlc1xuICAgIGlmICh0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VQcm94eSkge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXQgdmlhIHByb3h5XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byByZW1vdGUgZGVidWdnZXIgdmlhIHByb3h5IHRocm91Z2ggdW5peCBkb21haW4gc29ja2V0OiAnJHt0aGlzLm1lc3NhZ2VQcm94eX0nYCk7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5tZXNzYWdlUHJveHkpO1xuXG4gICAgICAgIC8vIEZvcndhcmQgdGhlIGFjdHVhbCBzb2NrZXRQYXRoIHRvIHRoZSBwcm94eVxuICAgICAgICB0aGlzLnNvY2tldC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm9yd2FyZGluZyB0aGUgYWN0dWFsIHdlYiBpbnNwZWN0b3Igc29ja2V0IHRvIHRoZSBwcm94eTogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgICB0aGlzLnNvY2tldC53cml0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzb2NrZXRQYXRoOiB0aGlzLnNvY2tldFBhdGhcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXRcbiAgICAgICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIHJlbW90ZSBkZWJ1Z2dlciB0aHJvdWdoIHVuaXggZG9tYWluIHNvY2tldDogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLnNvY2tldFBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlUHJveHkpIHtcbiAgICAgICAgLy8gY29ubmVjdCB0byB0aGUgcHJveHkgaW5zdGVhZCBvZiB0aGUgcmVtb3RlIGRlYnVnZ2VyIGRpcmVjdGx5XG4gICAgICAgIHRoaXMucG9ydCA9IHRoaXMubWVzc2FnZVByb3h5O1xuICAgICAgfVxuXG4gICAgICAvLyB0Y3Agc29ja2V0XG4gICAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gcmVtb3RlIGRlYnVnZ2VyICR7dGhpcy5tZXNzYWdlUHJveHkgPyAndmlhIHByb3h5ICcgOiAnJ310aHJvdWdoIFRDUDogJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApO1xuICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7dHlwZTogJ3RjcDYnfSk7XG4gICAgICB0aGlzLnNvY2tldC5jb25uZWN0KHRoaXMucG9ydCwgdGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgIHRoaXMuc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlKTtcbiAgICB0aGlzLnNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBsb2cuZGVidWcoJ0RlYnVnZ2VyIHNvY2tldCBkaXNjb25uZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnNvY2tldC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSh0aGlzLnVkaWQsIHtcbiAgICAgIHNvY2tldDogdGhpcy5zb2NrZXQsXG4gICAgICBpc1NpbXVsYXRvcjogdHJ1ZSxcbiAgICAgIG9zVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICB2ZXJib3NlOiB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgICB2ZXJib3NlSGV4RHVtcDogdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICAgIG1heEZyYW1lTGVuZ3RoOiB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZS5saXN0ZW5NZXNzYWdlKHRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIGNvbm5lY3QgdGhlIHNvY2tldFxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBvbmx5IHJlc29sdmUgdGhpcyBmdW5jdGlvbiB3aGVuIHdlIGFyZSBhY3R1YWxseSBjb25uZWN0ZWRcbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIHNvY2tldCBjb25uZWN0ZWRgKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNvY2tldC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGNvbm5lY3Rpb24gd2FzIHJlZnVzZWQsIHNvIHJlamVjdCB0aGUgY29ubmVjdCBwcm9taXNlXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ0Rpc2Nvbm5lY3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXInKTtcbiAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKGNtZCkge1xuICAgIGxldCBvblNvY2tldEVycm9yO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhhbmRsZSBzb2NrZXQgcHJvYmxlbXNcbiAgICAgIG9uU29ja2V0RXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgU29ja2V0IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuXG4gICAgICAgIC8vIHRoZSBjb25uZWN0aW9uIHdhcyByZWZ1c2VkLCBzbyByZWplY3QgdGhlIGNvbm5lY3QgcHJvbWlzZVxuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmRNZXNzYWdlKGNtZCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAvLyByZW1vdmUgdGhpcyBsaXN0ZW5lciwgc28gd2UgZG9uJ3QgZXhoYXVzdCB0aGUgc3lzdGVtXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ1dJUk1lc3NhZ2VEYXRhS2V5JywgJ1dJUkRlc3RpbmF0aW9uS2V5JywgJ1dJUlNvY2tldERhdGFLZXknXSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRhdGFba2V5XSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuaGFuZGxlTWVzc2FnZShkYXRhKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFHZSxNQUFNTSxrQkFBa0IsU0FBU0Msa0JBQVMsQ0FBQztFQUN4REMsV0FBV0EsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbEJDLG9CQUFvQixFQUFFO0lBQ3hCLENBQUMsRUFBRUgsSUFBSSxDQUFDLENBQUM7SUFFVCxNQUFNO01BQ0pJLFVBQVU7TUFDVkMsSUFBSSxHQUFHLEtBQUs7TUFDWkMsSUFBSTtNQUNKQztJQUNGLENBQUMsR0FBR1AsSUFBSTtJQUdSLElBQUksQ0FBQ0ssSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7RUFDOUI7RUFFQSxNQUFNSyxPQUFPQSxDQUFBLEVBQUk7SUFFZixJQUFJLElBQUksQ0FBQ0wsVUFBVSxFQUFFO01BQ25CLElBQUksSUFBSSxDQUFDRyxZQUFZ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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-client-simulator.js","names":["_logger","_interopRequireDefault","require","_lodash","_bluebird","_net","_rpcClient","_appiumIosDevice","RpcClientSimulator","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","socketPath","host","port","messageProxy","socket","connect","log","debug","net","once","write","JSON","stringify","Socket","type","setNoDelay","setKeepAlive","on","isConnected","service","services","startWebInspectorService","udid","isSimulator","osVersion","platformVersion","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","B","resolve","reject","err","error","message","disconnect","close","sendMessage","cmd","onSocketError","finally","removeListener","ign","data","key","_","isUndefined","toString","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-simulator.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport net from 'net';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientSimulator extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n socketPath,\n host = '::1',\n port,\n messageProxy,\n } = opts;\n\n // host/port config for TCP communication, socketPath for unix domain sockets\n this.host = host;\n this.port = port;\n this.messageProxy = messageProxy;\n\n this.socket = null;\n this.socketPath = socketPath;\n }\n\n async connect () {\n // create socket and handle its messages\n if (this.socketPath) {\n if (this.messageProxy) {\n // unix domain socket via proxy\n log.debug(`Connecting to remote debugger via proxy through unix domain socket: '${this.messageProxy}'`);\n this.socket = net.connect(this.messageProxy);\n\n // Forward the actual socketPath to the proxy\n this.socket.once('connect', () => {\n log.debug(`Forwarding the actual web inspector socket to the proxy: '${this.socketPath}'`);\n this.socket.write(JSON.stringify({\n socketPath: this.socketPath\n }));\n });\n\n } else {\n // unix domain socket\n log.debug(`Connecting to remote debugger through unix domain socket: '${this.socketPath}'`);\n this.socket = net.connect(this.socketPath);\n }\n } else {\n if (this.messageProxy) {\n // connect to the proxy instead of the remote debugger directly\n this.port = this.messageProxy;\n }\n\n // tcp socket\n log.debug(`Connecting to remote debugger ${this.messageProxy ? 'via proxy ' : ''}through TCP: ${this.host}:${this.port}`);\n this.socket = new net.Socket({type: 'tcp6'});\n this.socket.connect(this.port, this.host);\n }\n\n this.socket.setNoDelay(true);\n this.socket.setKeepAlive(true);\n this.socket.on('close', () => {\n if (this.isConnected) {\n log.debug('Debugger socket disconnected');\n }\n this.isConnected = false;\n this.socket = null;\n });\n this.socket.on('end', () => {\n this.isConnected = false;\n });\n this.service = await services.startWebInspectorService(this.udid, {\n socket: this.socket,\n isSimulator: true,\n osVersion: this.platformVersion,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n this.service.listenMessage(this.receive.bind(this));\n\n // connect the socket\n return await new B((resolve, reject) => {\n // only resolve this function when we are actually connected\n this.socket.on('connect', () => {\n log.debug(`Debugger socket connected`);\n this.isConnected = true;\n\n resolve();\n });\n this.socket.on('error', (err) => {\n if (this.isConnected) {\n log.error(`Socket error: ${err.message}`);\n this.isConnected = false;\n }\n\n // the connection was refused, so reject the connect promise\n reject(err);\n });\n });\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) {\n let onSocketError;\n\n return await new B((resolve, reject) => {\n // handle socket problems\n onSocketError = (err) => {\n log.error(`Socket error: ${err.message}`);\n\n // the connection was refused, so reject the connect promise\n reject(err);\n };\n\n this.socket.on('error', onSocketError);\n this.service.sendMessage(cmd);\n resolve();\n })\n .finally(() => {\n // remove this listener, so we don't exhaust the system\n try {\n this.socket.removeListener('error', onSocketError);\n } catch (ign) {}\n });\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n for (const key of ['WIRMessageDataKey', 'WIRDestinationKey', 'WIRSocketDataKey']) {\n if (!_.isUndefined(data[key])) {\n data[key] = data[key].toString('utf8');\n }\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rpc-client-simulator.js","names":["_logger","_interopRequireDefault","require","_lodash","_bluebird","_net","_rpcClient","_appiumIosDevice","RpcClientSimulator","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","socketPath","host","port","messageProxy","socket","connect","log","debug","net","once","write","JSON","stringify","Socket","type","setNoDelay","setKeepAlive","on","isConnected","service","services","startWebInspectorService","udid","isSimulator","osVersion","platformVersion","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","B","resolve","reject","err","error","message","disconnect","close","sendMessage","cmd","onSocketError","finally","removeListener","ign","data","key","_","isUndefined","toString","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-simulator.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport net from 'net';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientSimulator extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n socketPath,\n host = '::1',\n port,\n messageProxy,\n } = opts;\n\n // host/port config for TCP communication, socketPath for unix domain sockets\n this.host = host;\n this.port = port;\n this.messageProxy = messageProxy;\n\n this.socket = null;\n this.socketPath = socketPath;\n }\n\n async connect () {\n // create socket and handle its messages\n if (this.socketPath) {\n if (this.messageProxy) {\n // unix domain socket via proxy\n log.debug(`Connecting to remote debugger via proxy through unix domain socket: '${this.messageProxy}'`);\n this.socket = net.connect(this.messageProxy);\n\n // Forward the actual socketPath to the proxy\n this.socket.once('connect', () => {\n log.debug(`Forwarding the actual web inspector socket to the proxy: '${this.socketPath}'`);\n this.socket.write(JSON.stringify({\n socketPath: this.socketPath\n }));\n });\n\n } else {\n // unix domain socket\n log.debug(`Connecting to remote debugger through unix domain socket: '${this.socketPath}'`);\n this.socket = net.connect(this.socketPath);\n }\n } else {\n if (this.messageProxy) {\n // connect to the proxy instead of the remote debugger directly\n this.port = this.messageProxy;\n }\n\n // tcp socket\n log.debug(`Connecting to remote debugger ${this.messageProxy ? 'via proxy ' : ''}through TCP: ${this.host}:${this.port}`);\n this.socket = new net.Socket({type: 'tcp6'});\n this.socket.connect(this.port, this.host);\n }\n\n this.socket.setNoDelay(true);\n this.socket.setKeepAlive(true);\n this.socket.on('close', () => {\n if (this.isConnected) {\n log.debug('Debugger socket disconnected');\n }\n this.isConnected = false;\n this.socket = null;\n });\n this.socket.on('end', () => {\n this.isConnected = false;\n });\n this.service = await services.startWebInspectorService(this.udid, {\n socket: this.socket,\n isSimulator: true,\n osVersion: this.platformVersion,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n this.service.listenMessage(this.receive.bind(this));\n\n // connect the socket\n return await new B((resolve, reject) => {\n // only resolve this function when we are actually connected\n this.socket.on('connect', () => {\n log.debug(`Debugger socket connected`);\n this.isConnected = true;\n\n resolve();\n });\n this.socket.on('error', (err) => {\n if (this.isConnected) {\n log.error(`Socket error: ${err.message}`);\n this.isConnected = false;\n }\n\n // the connection was refused, so reject the connect promise\n reject(err);\n });\n });\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) {\n let onSocketError;\n\n return await new B((resolve, reject) => {\n // handle socket problems\n onSocketError = (err) => {\n log.error(`Socket error: ${err.message}`);\n\n // the connection was refused, so reject the connect promise\n reject(err);\n };\n\n this.socket.on('error', onSocketError);\n this.service.sendMessage(cmd);\n resolve();\n })\n .finally(() => {\n // remove this listener, so we don't exhaust the system\n try {\n this.socket.removeListener('error', onSocketError);\n } catch (ign) {}\n });\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n for (const key of ['WIRMessageDataKey', 'WIRDestinationKey', 'WIRSocketDataKey']) {\n if (!_.isUndefined(data[key])) {\n data[key] = data[key].toString('utf8');\n }\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":"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"}
|
|
@@ -450,4 +450,4 @@ class RpcClient {
|
|
|
450
450
|
}
|
|
451
451
|
}
|
|
452
452
|
exports.default = RpcClient;
|
|
453
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVtb3RlTWVzc2FnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3JwY01lc3NhZ2VIYW5kbGVyIiwiX3N1cHBvcnQiLCJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJfY21kJF9fYXJndW1lbnQiLCJfY21kJF9fYXJndW1lbnQyIiwid3JhcHBlck1zZ0lkIiwidG9TdHJpbmciLCJ0YXJnZXRJZCIsImZ1bGxPcHRzIiwiZGVmYXVsdHMiLCJpZCIsImNtZCIsImdldFJlbW90ZUNvbW1hbmQiLCJfX2FyZ3VtZW50IiwiV0lSU29ja2V0RGF0YUtleSIsImlzTmlsIiwiQnVmZmVyIiwiZnJvbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlSGFuZGxlZCIsInRydW5jYXRlIiwibGlzdGVuZXJzIiwiX19zZWxlY3RvciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJhcmdzIiwidmFsdWUiLCJjb2RlIiwibXNnIiwicmVzIiwic2VuZE1lc3NhZ2UiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlY2VpdmUiLCJhcHAiLCJ0YXJnZXRJbmZvIiwicGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiIsImlzUHJvdmlzaW9uYWwiLCJoYXMiLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwicHJvdmlzaW9uYWwiLCJfdGhpcyR0YXJnZXRzJGFwcCIsIl90aGlzJHRhcmdldHMkYXBwJHBybyIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZW1vdGVNZXNzYWdlcyBmcm9tICcuL3JlbW90ZS1tZXNzYWdlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBScGNNZXNzYWdlSGFuZGxlciBmcm9tICcuL3JwYy1tZXNzYWdlLWhhbmRsZXInO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBEQVRBX0xPR19MRU5HVEggPSB7bGVuZ3RoOiAyMDB9O1xuXG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgV0FJVF9GT1JfVEFSR0VUX0lOVEVSVkFMID0gMTAwMDtcblxuY29uc3QgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQgPSAnMTIuMic7XG5cbi8vIGBUYXJnZXQuZXhpc3RzYCBwcm90b2NvbCBtZXRob2Qgd2FzIHJlbW92ZWQgZnJvbSBXZWJLaXQgaW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUdBLE1BQU1PLGVBQWUsR0FBRztFQUFDQyxNQUFNLEVBQUU7QUFBRyxDQUFDO0FBRXJDLE1BQU1DLHVCQUF1QixHQUFHLEtBQUs7QUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsSUFBSTtBQUVyQyxNQUFNQyw2QkFBNkIsR0FBRyxNQUFNO0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYUEsQ0FBRUMsUUFBUSxFQUFFQyxlQUFlLEVBQUU7RUFJakQsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFLElBQUksRUFBRUosNkJBQTZCLENBQUM7RUFDaEdRLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhDQUE2Q04sUUFBUSxHQUFHLEVBQUUsR0FBRyxNQUFPLCtCQUE4QkMsZUFBZ0IsSUFBRyxDQUFDO0VBQ2pJSSxlQUFHLENBQUNDLEtBQUssQ0FBRSwwQ0FBeUNULDZCQUE4QixNQUFLSyxhQUFjLEVBQUMsQ0FBQztFQUN2RyxPQUFPQSxhQUFhO0FBQ3RCO0FBRWUsTUFBTUssU0FBUyxDQUFDO0VBQzdCQyxXQUFXQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUNDLHFCQUFxQixHQUFHLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxvQkFBb0I7SUFFeEQsTUFBTTtNQUNKQyxRQUFRO01BQ1JaLGVBQWUsR0FBRyxDQUFDLENBQUM7TUFDcEJELFFBQVEsR0FBRyxJQUFJO01BQ2ZjLG1CQUFtQixHQUFHLEtBQUs7TUFDM0JDLDBCQUEwQixHQUFHLEtBQUs7TUFDbENDLDBCQUEwQjtNQUMxQkMsZUFBZTtNQUNmQyxzQkFBc0IsR0FBRztJQUMzQixDQUFDLEdBQUdULElBQUk7SUFFUixJQUFJLENBQUNULFFBQVEsR0FBR0EsUUFBUTtJQUV4QixJQUFJLENBQUNtQixXQUFXLEdBQUcsS0FBSztJQUN4QixJQUFJLENBQUNDLE1BQU0sR0FBR2pCLGFBQUksQ0FBQ2tCLE1BQU0sRUFBRTtJQUMzQixJQUFJLENBQUNDLFFBQVEsR0FBR25CLGFBQUksQ0FBQ2tCLE1BQU0sRUFBRTtJQUM3QixJQUFJLENBQUNFLEtBQUssR0FBRyxDQUFDO0lBRWQsSUFBSSxDQUFDVCxtQkFBbUIsR0FBR0EsbUJBQW1CO0lBQzlDLElBQUksQ0FBQ0MsMEJBQTBCLEdBQUdBLDBCQUEwQjtJQUM1RCxJQUFJLENBQUNFLGVBQWUsR0FBR0EsZUFBZTtJQUN0QyxJQUFJLENBQUNELDBCQUEwQixHQUFHQSwwQkFBMEI7SUFFNUQsSUFBSSxDQUFDRSxzQkFBc0IsR0FBR0Esc0JBQXNCO0lBRXBELElBQUksQ0FBQ0wsUUFBUSxHQUFHQSxRQUFRO0lBQ3hCLElBQUksQ0FBQ1osZUFBZSxHQUFHQSxlQUFlO0lBRXRDLElBQUksQ0FBQ3VCLFNBQVMsR0FBRyxFQUFFO0lBQ25CLElBQUksQ0FBQ2QsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUdsQixJQUFJLENBQUNYLGFBQWEsR0FBR0EsYUFBYSxDQUFDQyxRQUFRLEVBQUUsSUFBSSxDQUFDQyxlQUFlLENBQUM7RUFDcEU7RUFFQSxJQUFJd0IsUUFBUUEsQ0FBQSxFQUFJO0lBQ2QsT0FBTyxJQUFJLENBQUNELFNBQVM7RUFDdkI7RUFFQSxJQUFJRSxXQUFXQSxDQUFBLEVBQUk7SUFDakIsT0FBTyxJQUFJLENBQUNkLG9CQUFvQixJQUFJLElBQUksQ0FBQ2IsYUFBYTtFQUN4RDtFQUVBLElBQUk0QixPQUFPQSxDQUFBLEVBQUk7SUFDYixPQUFPLElBQUksQ0FBQ2pCLFFBQVE7RUFDdEI7RUFFQSxJQUFJRSxvQkFBb0JBLENBQUEsRUFBSTtJQUMxQixPQUFPLElBQUksQ0FBQ0QscUJBQXFCO0VBQ25DO0VBRUEsSUFBSUMsb0JBQW9CQSxDQUFFQSxvQkFBb0IsRUFBRTtJQUM5QyxJQUFJLENBQUNELHFCQUFxQixHQUFHLENBQUMsQ0FBQ0Msb0JBQW9CO0VBQ3JEO0VBRUEsSUFBSU8sV0FBV0EsQ0FBQSxFQUFJO0lBQ2pCLE9BQU8sSUFBSSxDQUFDUyxTQUFTO0VBQ3ZCO0VBRUEsSUFBSVQsV0FBV0EsQ0FBRVMsU0FBUyxFQUFFO0lBQzFCLElBQUksQ0FBQ0EsU0FBUyxHQUFHLENBQUMsQ0FBQ0EsU0FBUztFQUM5QjtFQUVBQyxFQUFFQSxDQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRTtJQUNuQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0gsRUFBRSxDQUFDQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUN2QyxPQUFPLElBQUk7RUFDYjtFQUVBRSxJQUFJQSxDQUFFSCxLQUFLLEVBQUVDLFFBQVEsRUFBRTtJQUNyQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUN6QyxPQUFPLElBQUk7RUFDYjtFQUVBRyxHQUFHQSxDQUFFSixLQUFLLEVBQUVDLFFBQVEsRUFBRTtJQUNwQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0UsR0FBRyxDQUFDSixLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUN4QyxPQUFPLElBQUk7RUFDYjtFQUVBLElBQUloQyxhQUFhQSxDQUFFQSxhQUFhLEVBQUU7SUFDaENNLGVBQUcsQ0FBQzhCLElBQUksQ0FBRSx5Q0FBd0NwQyxhQUFhLEdBQUcsY0FBYyxHQUFHLDZCQUE4QixnQkFBZSxDQUFDO0lBQ2pJLElBQUksQ0FBQ3FDLGNBQWMsR0FBR3JDLGFBQWE7SUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQ3NDLGNBQWMsRUFBRTtNQUN4QixJQUFJLENBQUNBLGNBQWMsR0FBRyxJQUFJQyx1QkFBYyxDQUFDdkMsYUFBYSxDQUFDO0lBQ3pELENBQUMsTUFBTTtNQUNMLElBQUksQ0FBQ3NDLGNBQWMsQ0FBQ3RDLGFBQWEsR0FBR0EsYUFBYTtJQUNuRDtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNpQyxjQUFjLEVBQUU7TUFDeEIsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSU8sMEJBQWlCLENBQUN4QyxhQUFhLENBQUM7TUFHMUQsSUFBSSxDQUFDaUMsY0FBYyxDQUFDSCxFQUFFLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDVyxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6RSxJQUFJLENBQUNULGNBQWMsQ0FBQ0gsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLElBQUksQ0FBQ2EsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDekYsSUFBSSxDQUFDVCxjQUFjLENBQUNILEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUNjLFlBQVksQ0FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzlFLElBQUksQ0FBQ1QsY0FBYyxDQUFDSCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDZSx5QkFBeUIsQ0FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3BHLElBQUksQ0FBQ1QsY0FBYyxDQUFDSCxFQUFFLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDZ0Isa0JBQWtCLENBQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRixDQUFDLE1BQU07TUFDTCxJQUFJLENBQUNULGNBQWMsQ0FBQ2pDLGFBQWEsR0FBR0EsYUFBYTtJQUNuRDtFQUNGO0VBRUEsSUFBSUEsYUFBYUEsQ0FBQSxFQUFJO0lBQ25CLE9BQU8sSUFBSSxDQUFDcUMsY0FBYztFQUM1QjtFQUVBLE1BQU1VLGFBQWFBLENBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEdBQUcsS0FBSyxFQUFFO0lBQ3ZELElBQUksQ0FBQ0EsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDdkIsV0FBVyxFQUFFO01BQy9CO0lBQ0Y7SUFFQSxJQUFJLElBQUksQ0FBQ3dCLFNBQVMsQ0FBQ0gsUUFBUSxFQUFFQyxTQUFTLENBQUMsRUFBRTtNQUN2QztJQUNGO0lBR0EsSUFBSTtNQUNGLE1BQU0sSUFBQUcsMEJBQWdCLEVBQUMsTUFBTSxDQUFDQyxlQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNILFNBQVMsQ0FBQ0gsUUFBUSxFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQzVFTSxNQUFNLEVBQUUzRCx1QkFBdUI7UUFDL0I0RCxVQUFVLEVBQUUzRCx3QkFBd0I7UUFDcEM0RCxLQUFLLEVBQUU7TUFDVCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFO01BQ1osSUFBSSxDQUFDQSxHQUFHLENBQUNDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDNUMsTUFBTUYsR0FBRztNQUNYO01BQ0EsTUFBTSxJQUFJRyxLQUFLLENBQUMscURBQXFELENBQUM7SUFDeEU7RUFDRjtFQUVBLE1BQU1DLElBQUlBLENBQUVDLE9BQU8sRUFBRXJELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRXNELGVBQWUsR0FBRyxJQUFJLEVBQUU7SUFDdEQsTUFBTUMsS0FBSyxHQUFHLElBQUlDLGVBQU0sQ0FBQ0MsS0FBSyxFQUFFLENBQUNDLEtBQUssRUFBRTtJQUN4QyxNQUFNO01BQ0pwQixRQUFRO01BQ1JDO0lBQ0YsQ0FBQyxHQUFHdkMsSUFBSTtJQUNSLElBQUk7TUFDRixJQUFJLENBQUMyQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ04sUUFBUSxDQUFDLElBQUksQ0FBQ0ssZUFBQyxDQUFDQyxPQUFPLENBQUNMLFNBQVMsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxDQUFDRixhQUFhLENBQUNDLFFBQVEsRUFBRUMsU0FBUyxDQUFDO01BQy9DO01BQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ29CLFlBQVksQ0FBQ04sT0FBTyxFQUFFckQsSUFBSSxFQUFFc0QsZUFBZSxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxPQUFPTixHQUFHLEVBQUU7TUFDWixJQUFJO1FBQUVDLE9BQU8sR0FBRztNQUFHLENBQUMsR0FBR0QsR0FBRztNQUMxQkMsT0FBTyxHQUFHQSxPQUFPLENBQUNXLFdBQVcsRUFBRTtNQUMvQixJQUFJWCxPQUFPLENBQUNDLFFBQVEsQ0FBRSwrQkFBOEIsQ0FBQyxFQUFFO1FBQ3JEdEQsZUFBRyxDQUFDaUUsSUFBSSxDQUFDLGlFQUFpRSxHQUN4RSw2Q0FBNkMsQ0FBQztRQUNoRCxJQUFJLENBQUN2RSxhQUFhLEdBQUcsS0FBSztRQUMxQixPQUFPLE1BQU0sSUFBSSxDQUFDcUUsWUFBWSxDQUFDTixPQUFPLEVBQUVyRCxJQUFJLEVBQUVzRCxlQUFlLENBQUM7TUFDaEUsQ0FBQyxNQUFNLElBQUlMLE9BQU8sQ0FBQ0MsUUFBUSxDQUFFLHNCQUFxQixDQUFDLElBQy9DRCxPQUFPLENBQUNDLFFBQVEsQ0FBRSwwQkFBeUIsQ0FBQyxJQUM1Q0QsT0FBTyxDQUFDQyxRQUFRLENBQUUsZ0JBQWUsQ0FBQyxFQUFFO1FBQ3RDLElBQUksQ0FBQzVELGFBQWEsR0FBRyxJQUFJO1FBQ3pCLE1BQU0sSUFBSSxDQUFDK0MsYUFBYSxDQUFDQyxRQUFRLEVBQUVDLFNBQVMsQ0FBQztRQUM3QyxPQUFPLE1BQU0sSUFBSSxDQUFDb0IsWUFBWSxDQUFDTixPQUFPLEVBQUVyRCxJQUFJLEVBQUVzRCxlQUFlLENBQUM7TUFDaEU7TUFDQSxNQUFNTixHQUFHO0lBQ1gsQ0FBQyxTQUFTO01BQ1JwRCxlQUFHLENBQUNDLEtBQUssQ0FBRSxpQ0FBZ0MwRCxLQUFLLENBQUNPLFdBQVcsRUFBRSxDQUFDQyxjQUFjLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUUsSUFBRyxDQUFDO0lBQy9GO0VBQ0Y7RUFFQSxNQUFNTCxZQUFZQSxDQUFFTixPQUFPLEVBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVzRCxlQUFlLEdBQUcsSUFBSSxFQUFFO0lBQzlELE9BQU8sTUFBTSxJQUFJVyxpQkFBQyxDQUFDLE9BQU9DLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQUEsSUFBQUMsZUFBQSxFQUFBQyxnQkFBQTtNQUs1QyxNQUFNdkQsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxFQUFFO01BQzFCLElBQUl3RCxZQUFZLEdBQUd4RCxLQUFLO01BQ3hCLElBQUksSUFBSSxDQUFDeEIsYUFBYSxFQUFFO1FBRXRCZ0YsWUFBWSxHQUFHLElBQUksQ0FBQ3hELEtBQUssRUFBRTtRQUUzQixJQUFJLENBQUNTLGNBQWMsQ0FBQ0gsRUFBRSxDQUFDa0QsWUFBWSxDQUFDQyxRQUFRLEVBQUUsRUFBRSxVQUFVdkIsR0FBRyxFQUFFO1VBQzdELElBQUlBLEdBQUcsRUFBRTtZQUNQbUIsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO1VBQ2I7UUFDRixDQUFDLENBQUM7TUFDSjtNQUVBLE1BQU1WLFFBQVEsR0FBR3RDLElBQUksQ0FBQ3NDLFFBQVE7TUFDOUIsTUFBTUMsU0FBUyxHQUFHdkMsSUFBSSxDQUFDdUMsU0FBUztNQUNoQyxNQUFNaUMsUUFBUSxHQUFHLElBQUksQ0FBQy9CLFNBQVMsQ0FBQ0gsUUFBUSxFQUFFQyxTQUFTLENBQUM7TUFHcEQsTUFBTWtDLFFBQVEsR0FBRzlCLGVBQUMsQ0FBQytCLFFBQVEsQ0FBQztRQUMxQi9ELE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU07UUFDbkJFLFFBQVEsRUFBRSxJQUFJLENBQUNBLFFBQVE7UUFDdkIyRCxRQUFRO1FBQ1JHLEVBQUUsRUFBRTdEO01BQ04sQ0FBQyxFQUFFZCxJQUFJLENBQUM7TUFDUixNQUFNNEUsR0FBRyxHQUFHLElBQUksQ0FBQ2hELGNBQWMsQ0FBQ2lELGdCQUFnQixDQUFDeEIsT0FBTyxFQUFFb0IsUUFBUSxDQUFDO01BRW5FLElBQUlHLEdBQUcsYUFBSEEsR0FBRyxnQkFBQVIsZUFBQSxHQUFIUSxHQUFHLENBQUVFLFVBQVUsY0FBQVYsZUFBQSxlQUFmQSxlQUFBLENBQWlCVyxnQkFBZ0IsRUFBRTtRQUVyQyxJQUFJcEMsZUFBQyxDQUFDcUMsS0FBSyxDQUFDSixHQUFHLENBQUNFLFVBQVUsQ0FBQ0MsZ0JBQWdCLENBQUNKLEVBQUUsQ0FBQyxFQUFFO1VBQy9DQyxHQUFHLENBQUNFLFVBQVUsQ0FBQ0MsZ0JBQWdCLENBQUNKLEVBQUUsR0FBR0wsWUFBWTtRQUNuRDtRQUNBTSxHQUFHLENBQUNFLFVBQVUsQ0FBQ0MsZ0JBQWdCLEdBQzdCRSxNQUFNLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNSLEdBQUcsQ0FBQ0UsVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ2hFO01BRUEsSUFBSU0sY0FBYyxHQUFHLElBQUk7TUFDekIsSUFBSSxDQUFDL0IsZUFBZSxFQUFFO1FBRXBCK0IsY0FBYyxHQUFHLEtBQUs7UUFFdEIsSUFBSSxDQUFDOUQsY0FBYyxDQUFDQyxJQUFJLENBQUNWLEtBQUssQ0FBQ3lELFFBQVEsRUFBRSxFQUFFLFVBQVV2QixHQUFHLEVBQUU7VUFDeEQsSUFBSUEsR0FBRyxFQUFFO1lBR1BwRCxlQUFHLENBQUNtRCxLQUFLLENBQUUsOERBQTZEakMsS0FBTSxPQUFNNkIsZUFBQyxDQUFDMkMsUUFBUSxDQUFDSCxJQUFJLENBQUNDLFNBQVMsQ0FBQ3BDLEdBQUcsQ0FBQyxFQUFFaEUsZUFBZSxDQUFFLEdBQUUsQ0FBQztZQUl4SW1GLE1BQU0sQ0FBQ25CLEdBQUcsQ0FBQztVQUNiO1FBQ0YsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDekIsY0FBYyxDQUFDZ0UsU0FBUyxDQUFDWCxHQUFHLENBQUNZLFVBQVUsQ0FBQyxDQUFDdkcsTUFBTSxFQUFFO1FBQy9ELElBQUksQ0FBQ3NDLGNBQWMsQ0FBQ2tFLG1CQUFtQixDQUFDYixHQUFHLENBQUNZLFVBQVUsRUFBRSxVQUFVeEMsR0FBRyxFQUFFLEdBQUcwQyxJQUFJLEVBQUU7VUFDOUUsSUFBSTFDLEdBQUcsRUFBRTtZQUNQLE9BQU9tQixNQUFNLENBQUNuQixHQUFHLENBQUM7VUFDcEI7VUFDQXBELGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLG9DQUFtQ2lCLEtBQU0sT0FBTTZCLGVBQUMsQ0FBQzJDLFFBQVEsQ0FBQ0gsSUFBSSxDQUFDQyxTQUFTLENBQUNNLElBQUksQ0FBQyxFQUFFMUcsZUFBZSxDQUFFLEdBQUUsQ0FBQztVQUMvR2tGLE9BQU8sQ0FBQ3dCLElBQUksQ0FBQztRQUNmLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTSxJQUFJZCxHQUFHLGFBQUhBLEdBQUcsZ0JBQUFQLGdCQUFBLEdBQUhPLEdBQUcsQ0FBRUUsVUFBVSxjQUFBVCxnQkFBQSxlQUFmQSxnQkFBQSxDQUFpQlUsZ0JBQWdCLEVBQUU7UUFDNUMsSUFBSSxDQUFDeEQsY0FBYyxDQUFDQyxJQUFJLENBQUNWLEtBQUssQ0FBQ3lELFFBQVEsRUFBRSxFQUFFLFVBQVV2QixHQUFHLEVBQUUyQyxLQUFLLEVBQUU7VUFDL0QsSUFBSTNDLEdBQUcsRUFBRTtZQUNQLE9BQU9tQixNQUFNLENBQUMsSUFBSWhCLEtBQUssQ0FBRSxvQ0FBbUNILEdBQUcsQ0FBQzRDLElBQUssTUFBSzVDLEdBQUcsQ0FBQ0MsT0FBUSxFQUFDLENBQUMsQ0FBQztVQUMzRjtVQUNBckQsZUFBRyxDQUFDQyxLQUFLLENBQUUseUNBQXdDaUIsS0FBTSxPQUFNNkIsZUFBQyxDQUFDMkMsUUFBUSxDQUFDSCxJQUFJLENBQUNDLFNBQVMsQ0FBQ08sS0FBSyxDQUFDLEVBQUUzRyxlQUFlLENBQUUsR0FBRSxDQUFDO1VBQ3JIa0YsT0FBTyxDQUFDeUIsS0FBSyxDQUFDO1FBQ2hCLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUVMTixjQUFjLEdBQUcsS0FBSztNQUN4QjtNQUVBLE1BQU1RLEdBQUcsR0FBSSxZQUFXakIsR0FBRyxDQUFDWSxVQUFXLFdBQVUsSUFDOUNmLFFBQVEsQ0FBQ25DLFFBQVEsR0FBSSxZQUFXbUMsUUFBUSxDQUFDbkMsUUFBUyxHQUFFLEdBQUcsRUFBRSxDQUFDLElBQzFEbUMsUUFBUSxDQUFDbEMsU0FBUyxHQUFJLFdBQVVrQyxRQUFRLENBQUNsQyxTQUFVLEdBQUUsR0FBRyxFQUFFLENBQUMsSUFDM0QsSUFBSSxDQUFDdEIsV0FBVyxJQUFJdUQsUUFBUSxHQUFJLGFBQVlBLFFBQVMsR0FBRSxHQUFHLEVBQUUsQ0FBQyxHQUM3RCxTQUFRMUQsS0FBTSxPQUFNdUMsT0FBUSxHQUFFO01BQ2pDekQsZUFBRyxDQUFDQyxLQUFLLENBQUNnRyxHQUFHLENBQUM7TUFDZCxJQUFJO1FBQ0YsTUFBTUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxXQUFXLENBQUNuQixHQUFHLENBQUM7UUFDdkMsSUFBSSxDQUFDUyxjQUFjLEVBQUU7VUFHbkJuQixPQUFPLENBQUM0QixHQUFHLENBQUM7UUFDZDtNQUNGLENBQUMsQ0FBQyxPQUFPOUMsR0FBRyxFQUFFO1FBQ1osT0FBT21CLE1BQU0sQ0FBQ25CLEdBQUcsQ0FBQztNQUNwQjtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTWdELE9BQU9BLENBQUEsRUFBSTtJQUNmLE1BQU0sSUFBSTdDLEtBQUssQ0FBRSxvREFBbUQsQ0FBQztFQUN2RTtFQUVBLE1BQU04QyxVQUFVQSxDQUFBLEVBQUk7SUFDbEIsSUFBSSxDQUFDMUUsY0FBYyxDQUFDMkUsa0JBQWtCLEVBQUU7RUFDMUM7RUFFQSxNQUFNSCxXQUFXQSxDQUFBLEVBQWlCO0lBQ2hDLE1BQU0sSUFBSTVDLEtBQUssQ0FBRSx3REFBdUQsQ0FBQztFQUMzRTtFQUVBLE1BQU1nRCxPQUFPQSxDQUFBLEVBQWM7SUFDekIsTUFBTSxJQUFJaEQsS0FBSyxDQUFFLG9EQUFtRCxDQUFDO0VBQ3ZFO0VBRUFwQixTQUFTQSxDQUFFaUIsR0FBRyxFQUFFb0QsR0FBRyxFQUFFQyxVQUFVLEVBQUU7SUFDL0IsSUFBSTFELGVBQUMsQ0FBQ3FDLEtBQUssQ0FBQ3FCLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFN0IsUUFBUSxDQUFDLEVBQUU7TUFDakM1RSxlQUFHLENBQUM4QixJQUFJLENBQUUsa0RBQWlEMEUsR0FBSSw0QkFBMkIsQ0FBQztNQUMzRjtJQUNGO0lBQ0EsSUFBSXpELGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQzBELHlCQUF5QixDQUFDLElBQUksQ0FBQ0QsVUFBVSxDQUFDRSxhQUFhLEVBQUU7TUFDMUUzRyxlQUFHLENBQUM4QixJQUFJLENBQUUsa0RBQWlEMEUsR0FBSSw4QkFBNkJqQixJQUFJLENBQUNDLFNBQVMsQ0FBQ2lCLFVBQVUsQ0FBRSxFQUFDLENBQUM7TUFDekg7SUFDRjtJQUVBLElBQUlBLFVBQVUsQ0FBQ0UsYUFBYSxFQUFFO01BQzVCM0csZUFBRyxDQUFDQyxLQUFLLENBQUUsdUNBQXNDdUcsR0FBSSxPQUFNQyxVQUFVLENBQUM3QixRQUFTLHVDQUFzQyxDQUFDO01BQ3RIO0lBQ0Y7SUFFQSxNQUFNLENBQUNsQyxRQUFRLEVBQUVDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQytELHlCQUF5QjtJQUU1RDFHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDJCQUEwQnlDLFFBQVMsZUFBY0MsU0FBVSxNQUFLNEMsSUFBSSxDQUFDQyxTQUFTLENBQUNpQixVQUFVLENBQUUsRUFBQyxDQUFDO0lBQ3hHLElBQUkxRCxlQUFDLENBQUM2RCxHQUFHLENBQUMsSUFBSSxDQUFDdEYsT0FBTyxDQUFDb0IsUUFBUSxDQUFDLEVBQUVDLFNBQVMsQ0FBQyxFQUFFO01BQzVDM0MsZUFBRyxDQUFDQyxLQUFLLENBQUUscURBQW9ELElBQUksQ0FBQ3FCLE9BQU8sQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDQyxTQUFTLENBQUUsK0JBQThCLENBQUM7SUFDbEk7SUFDQSxJQUFJLENBQUNyQixPQUFPLENBQUNrRixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNsRixPQUFPLENBQUNrRixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBSSxDQUFDbEYsT0FBTyxDQUFDb0IsUUFBUSxDQUFDLENBQUNDLFNBQVMsQ0FBQyxHQUFHOEQsVUFBVSxDQUFDN0IsUUFBUTtFQUN6RDtFQUVBdkMsWUFBWUEsQ0FBRWUsR0FBRyxFQUFFb0QsR0FBRyxFQUFFSyxXQUFXLEVBQUVDLFdBQVcsRUFBRTtJQUNoRDlHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDJCQUEwQnVHLEdBQUksbUJBQWtCSyxXQUFZLG1CQUFrQkMsV0FBWSxHQUFFLENBQUM7SUFDeEcsSUFBSSxDQUFDLElBQUksQ0FBQ3hGLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxFQUFFO01BQ3RCeEcsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLCtCQUE4QjBFLEdBQUksd0JBQXVCLENBQUM7TUFDcEU7SUFDRjtJQUVBLElBQUksQ0FBQ2xGLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxDQUFDTyxXQUFXLEdBQUc7TUFDOUJGLFdBQVc7TUFDWEM7SUFDRixDQUFDO0VBQ0g7RUFFQXhFLFlBQVlBLENBQUVjLEdBQUcsRUFBRW9ELEdBQUcsRUFBRUMsVUFBVSxFQUFFO0lBQUEsSUFBQU8saUJBQUEsRUFBQUMscUJBQUE7SUFDbEMsSUFBSWxFLGVBQUMsQ0FBQ3FDLEtBQUssQ0FBQ3FCLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFN0IsUUFBUSxDQUFDLEVBQUU7TUFDakM1RSxlQUFHLENBQUNDLEtBQUssQ0FBRSxrRUFBaUUsQ0FBQztNQUM3RTtJQUNGO0lBRUFELGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDZCQUE0QnVHLEdBQUksTUFBS0MsVUFBVSxDQUFDN0IsUUFBUyxFQUFDLENBQUM7SUFHdEUsSUFBSSxFQUFBb0MsaUJBQUEsT0FBSSxDQUFDMUYsT0FBTyxDQUFDa0YsR0FBRyxDQUFDLGNBQUFRLGlCQUFBLHdCQUFBQyxxQkFBQSxHQUFqQkQsaUJBQUEsQ0FBbUJELFdBQVcsY0FBQUUscUJBQUEsdUJBQTlCQSxxQkFBQSxDQUFnQ0osV0FBVyxNQUFLSixVQUFVLENBQUM3QixRQUFRLEVBQUU7TUFDdkUsTUFBTTtRQUFDaUMsV0FBVztRQUFFQztNQUFXLENBQUMsR0FBRyxJQUFJLENBQUN4RixPQUFPLENBQUNrRixHQUFHLENBQUMsQ0FBQ08sV0FBVztNQUNoRSxPQUFPLElBQUksQ0FBQ3pGLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxDQUFDTyxXQUFXO01BR3BDLE1BQU16RixPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUNrRixHQUFHLENBQUM7TUFDakMsS0FBSyxNQUFNLENBQUNVLElBQUksRUFBRXRDLFFBQVEsQ0FBQyxJQUFJN0IsZUFBQyxDQUFDb0UsT0FBTyxDQUFDN0YsT0FBTyxDQUFDLEVBQUU7UUFDakQsSUFBSXNELFFBQVEsS0FBS2lDLFdBQVcsRUFBRTtVQUM1QjdHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLHFDQUFvQ3VHLEdBQUksbUJBQWtCSyxXQUFZLG1CQUFrQkMsV0FBWSxhQUFZLENBQUM7VUFDNUh4RixPQUFPLENBQUM0RixJQUFJLENBQUMsR0FBR0osV0FBVztVQUMzQjtRQUNGO01BQ0Y7TUFDQTlHLGVBQUcsQ0FBQzhCLElBQUksQ0FBRSwrQkFBOEIwRSxHQUFJLHlFQUF3RSxDQUFDO01BQ3JIeEcsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLGdCQUFlK0UsV0FBWSxtQkFBa0JDLFdBQVksd0JBQXVCdkIsSUFBSSxDQUFDQyxTQUFTLENBQUNsRSxPQUFPLENBQUUsRUFBQyxDQUFDO0lBQ3RIO0lBR0EsTUFBTUEsT0FBTyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxDQUFDa0YsR0FBRyxDQUFDO0lBQ2pDLEtBQUssTUFBTSxDQUFDVSxJQUFJLEVBQUV0QyxRQUFRLENBQUMsSUFBSTdCLGVBQUMsQ0FBQ29FLE9BQU8sQ0FBQzdGLE9BQU8sQ0FBQyxFQUFFO01BQ2pELElBQUlzRCxRQUFRLEtBQUs2QixVQUFVLENBQUM3QixRQUFRLEVBQUU7UUFDcEMsT0FBT3RELE9BQU8sQ0FBQzRGLElBQUksQ0FBQztRQUNwQjtNQUNGO0lBQ0Y7SUFDQWxILGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLFdBQVV3RyxVQUFVLENBQUM3QixRQUFTLHNCQUFxQjRCLEdBQUksOEJBQTZCLENBQUM7RUFDbEc7RUFFQTNELFNBQVNBLENBQUVILFFBQVEsRUFBRUMsU0FBUyxFQUFFO0lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUNyQixPQUFPLENBQUNvQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDO0VBQ2xEO0VBRUEsTUFBTXlFLFVBQVVBLENBQUUxRSxRQUFRLEVBQUVDLFNBQVMsRUFBRTtJQUNyQyxJQUFJLENBQUMrRCx5QkFBeUIsR0FBRyxDQUFDaEUsUUFBUSxFQUFFQyxTQUFTLENBQUM7SUFDdEQsSUFBSSxDQUFDcEMsb0JBQW9CLEdBQUcsS0FBSztJQUtqQyxNQUFNOEcsUUFBUSxHQUFHO01BQ2YzRSxRQUFRO01BQ1JDO0lBQ0YsQ0FBQztJQUdELEtBQUssTUFBTTJFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtNQUNuQyxNQUFNLElBQUksQ0FBQzlELElBQUksQ0FBQyxpQkFBaUIsRUFBRStELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO1FBQy9DRjtNQUNGLENBQUMsRUFBRUQsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RCO0lBRUEsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsY0FBYyxFQUFFNkQsUUFBUSxDQUFDO0lBQ3pDckgsZUFBRyxDQUFDQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFFM0IsSUFBSSxJQUFJLENBQUNQLGFBQWEsSUFBSUksYUFBSSxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDSCxlQUFlLEVBQUUsR0FBRyxFQUFFSCw2QkFBNkIsQ0FBQyxFQUFFO01BQ3hHLE1BQU0sSUFBSSxDQUFDK0QsSUFBSSxDQUFDLGVBQWUsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbkQ7SUFFQSxJQUFJLENBQUM5RyxvQkFBb0IsR0FBRyxJQUFJO0lBRWhDLElBQUksSUFBSSxDQUFDTSxzQkFBc0IsRUFBRTtNQUMvQixNQUFNLElBQUksQ0FBQzRHLGtCQUFrQixDQUFDL0UsUUFBUSxFQUFFQyxTQUFTLENBQUM7SUFDcEQsQ0FBQyxNQUFNO01BQ0wsTUFBTSxJQUFJLENBQUMrRSxjQUFjLENBQUNoRixRQUFRLEVBQUVDLFNBQVMsQ0FBQztJQUNoRDtFQUNGO0VBS0EsTUFBTStFLGNBQWNBLENBQUVoRixRQUFRLEVBQUVDLFNBQVMsRUFBRTtJQUN6QyxNQUFNMEUsUUFBUSxHQUFHO01BQ2YzRSxRQUFRO01BQ1JDO0lBQ0YsQ0FBQztJQUVELE1BQU0sSUFBSSxDQUFDYSxJQUFJLENBQUMsa0JBQWtCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFHL0MsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxhQUFhLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsdUJBQXVCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0VBQzNEO0VBTUEsTUFBTUksa0JBQWtCQSxDQUFFL0UsUUFBUSxFQUFFQyxTQUFTLEVBQUU7SUFDN0MsTUFBTTBFLFFBQVEsR0FBRztNQUNmM0UsUUFBUTtNQUNSQztJQUNGLENBQUM7SUFFRCxNQUFNLElBQUksQ0FBQ2EsSUFBSSxDQUFDLGtCQUFrQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNwRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxhQUFhLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBRy9DLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUN4RCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsb0NBQW9DLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUNsRUcsUUFBUSxFQUFFO0lBQ1osQ0FBQyxFQUFFTixRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsbUJBQW1CLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3JELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDcEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUM5QyxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUMvQyxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2pELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUMzRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyx5Q0FBeUMsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDM0UsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMseUJBQXlCLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUN2REksV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLEtBQUs7SUFDbkQsQ0FBQyxFQUFFUCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUM5REYsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxFQUFFRCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsaUJBQWlCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLCtCQUErQixFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDN0RLLE1BQU0sRUFBRTtJQUNWLENBQUMsRUFBRVIsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLCtCQUErQixFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDN0RNLEtBQUssRUFBRTtJQUNULENBQUMsRUFBRVQsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLCtCQUErQixFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDN0RGLE9BQU8sRUFBRTtJQUNYLENBQUMsRUFBRUQsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGtDQUFrQyxFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDaEVPLEtBQUssRUFBRTtJQUNULENBQUMsRUFBRVYsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLHFDQUFxQyxFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbkVRLFdBQVcsRUFBRTtJQUNmLENBQUMsRUFBRVgsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBRXBCLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNwRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2pELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDakQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRCxNQUFNWSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUN6RSxJQUFJLENBQUMsNEJBQTRCLEVBQUU2RCxRQUFRLENBQUM7SUFDL0UsS0FBSyxNQUFNYSxNQUFNLElBQUksQ0FBQ0QsZUFBZSxDQUFDRSxRQUFRLElBQUksRUFBRSxFQUFFQyxHQUFHLENBQUVDLEtBQUssSUFBS0EsS0FBSyxDQUFDSCxNQUFNLENBQUMsRUFBRTtNQUNsRixNQUFNLElBQUksQ0FBQzFFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRStELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO1FBQzlEVSxNQUFNO1FBQ05JLEtBQUssRUFBRTtNQUNULENBQUMsRUFBRWpCLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0QjtJQUVBLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztFQUMzRDtFQUVBLE1BQU1rQixTQUFTQSxDQUFFN0YsUUFBUSxFQUFFO0lBQ3pCLE9BQU8sTUFBTSxJQUFJMkIsaUJBQUMsQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUl0QyxNQUFNaUUsV0FBVyxHQUFHQSxDQUFDcEYsR0FBRyxFQUFFcUYsSUFBSSxLQUFLO1FBQ2pDLElBQUlyRixHQUFHLEVBQUU7VUFDUCxPQUFPbUIsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO1FBQ3BCO1FBRUEsTUFBTXNGLFdBQVcsR0FBR0QsSUFBSSxDQUFDRSwrQkFBK0I7UUFDeEQsTUFBTUMsZUFBZSxHQUFHSCxJQUFJLENBQUNJLDJCQUEyQjtRQUl4RCxJQUFJSCxXQUFXLElBQUlFLGVBQWUsS0FBS0YsV0FBVyxFQUFFO1VBQ2xEMUksZUFBRyxDQUFDQyxLQUFLLENBQUUsNkRBQTRELEdBQzVELFlBQVcySSxlQUFnQixlQUFjRixXQUFZLEVBQUMsQ0FBQztRQUNwRTtRQUVBbkUsTUFBTSxDQUFDLElBQUloQixLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztNQUNwRCxDQUFDO01BQ0QsSUFBSSxDQUFDNUIsY0FBYyxDQUFDa0UsbUJBQW1CLENBQUMsNEJBQTRCLEVBQUUyQyxXQUFXLENBQUM7TUFHbEYsT0FBTyxDQUFDLFlBQVk7UUFDbEIsSUFBSU0sUUFBUSxFQUFFQyxpQkFBaUI7UUFDL0IsSUFBSTtVQUNELENBQUNBLGlCQUFpQixFQUFFRCxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQ3RGLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDL0RkO1VBQ0YsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLE9BQU9VLEdBQUcsRUFBRTtVQUNacEQsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLDZCQUE0QnNCLEdBQUcsQ0FBQ0MsT0FBUSxFQUFDLENBQUM7VUFDcERrQixNQUFNLENBQUNuQixHQUFHLENBQUM7UUFDYjtRQUlBLElBQUlMLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDOEYsUUFBUSxDQUFDLEVBQUU7VUFDdkIsSUFBSTdDLEdBQUcsR0FBRyxnQ0FBZ0M7VUFDMUNqRyxlQUFHLENBQUNDLEtBQUssQ0FBQ2dHLEdBQUcsQ0FBQztVQUNkMUIsTUFBTSxDQUFDLElBQUloQixLQUFLLENBQUMwQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLE1BQU07VUFDTDNCLE9BQU8sQ0FBQyxDQUFDeUUsaUJBQWlCLEVBQUVELFFBQVEsQ0FBQyxDQUFDO1FBQ3hDO01BQ0YsQ0FBQyxHQUFHO0lBQ04sQ0FBQyxDQUFDO0VBQ0o7RUFFQXZHLHlCQUF5QkEsQ0FBRWEsR0FBRyxFQUFFNEYsT0FBTyxFQUFFO0lBSXZDLElBQUksQ0FBQzVILFFBQVEsQ0FBQzZILElBQUksQ0FBQ0QsT0FBTyxDQUFDakUsRUFBRSxDQUFDO0VBQ2hDO0VBRUF2QyxrQkFBa0JBLENBQUEsRUFBSTtJQUVwQnhDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGlDQUFnQyxDQUFDO0VBQzlDO0VBRUFpSixjQUFjQSxDQUFFOUYsR0FBRyxFQUFFK0YsVUFBVSxFQUFFO0lBRS9CbkosZUFBRyxDQUFDQyxLQUFLLENBQUUsa0JBQWlCc0YsSUFBSSxDQUFDQyxTQUFTLENBQUMyRCxVQUFVLENBQUUsRUFBQyxDQUFDO0VBQzNEO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBQyxPQUFBLEdBQUFuSixTQUFBIn0=
|
|
453
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVtb3RlTWVzc2FnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3JwY01lc3NhZ2VIYW5kbGVyIiwiX3N1cHBvcnQiLCJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJfY21kJF9fYXJndW1lbnQiLCJfY21kJF9fYXJndW1lbnQyIiwid3JhcHBlck1zZ0lkIiwidG9TdHJpbmciLCJ0YXJnZXRJZCIsImZ1bGxPcHRzIiwiZGVmYXVsdHMiLCJpZCIsImNtZCIsImdldFJlbW90ZUNvbW1hbmQiLCJfX2FyZ3VtZW50IiwiV0lSU29ja2V0RGF0YUtleSIsImlzTmlsIiwiQnVmZmVyIiwiZnJvbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlSGFuZGxlZCIsInRydW5jYXRlIiwibGlzdGVuZXJzIiwiX19zZWxlY3RvciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJhcmdzIiwidmFsdWUiLCJjb2RlIiwibXNnIiwicmVzIiwic2VuZE1lc3NhZ2UiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlY2VpdmUiLCJhcHAiLCJ0YXJnZXRJbmZvIiwicGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiIsImlzUHJvdmlzaW9uYWwiLCJoYXMiLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwicHJvdmlzaW9uYWwiLCJfdGhpcyR0YXJnZXRzJGFwcCIsIl90aGlzJHRhcmdldHMkYXBwJHBybyIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZW1vdGVNZXNzYWdlcyBmcm9tICcuL3JlbW90ZS1tZXNzYWdlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBScGNNZXNzYWdlSGFuZGxlciBmcm9tICcuL3JwYy1tZXNzYWdlLWhhbmRsZXInO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBEQVRBX0xPR19MRU5HVEggPSB7bGVuZ3RoOiAyMDB9O1xuXG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgV0FJVF9GT1JfVEFSR0VUX0lOVEVSVkFMID0gMTAwMDtcblxuY29uc3QgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQgPSAnMTIuMic7XG5cbi8vIGBUYXJnZXQuZXhpc3RzYCBwcm90b2NvbCBtZXRob2Qgd2FzIHJlbW92ZWQgZnJvbSBXZWJLaXQgaW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUdBLE1BQU1PLGVBQWUsR0FBRztFQUFDQyxNQUFNLEVBQUU7QUFBRyxDQUFDO0FBRXJDLE1BQU1DLHVCQUF1QixHQUFHLEtBQUs7QUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsSUFBSTtBQUVyQyxNQUFNQyw2QkFBNkIsR0FBRyxNQUFNO0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYUEsQ0FBRUMsUUFBUSxFQUFFQyxlQUFlLEVBQUU7RUFJakQsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFLElBQUksRUFBRUosNkJB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
|