@discordeno/gateway 21.0.1-next.d9831f6 → 21.0.1-next.df3cfeb

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.
@@ -225,7 +225,8 @@ function createGatewayManager(options) {
225
225
  leakyBucket: new _utils.LeakyBucket({
226
226
  max: 1,
227
227
  refillAmount: 1,
228
- refillInterval: gateway.spawnShardDelay
228
+ refillInterval: gateway.spawnShardDelay,
229
+ logger: this.logger
229
230
  })
230
231
  });
231
232
  }
@@ -475,4 +476,4 @@ function createGatewayManager(options) {
475
476
  return gateway;
476
477
  }
477
478
 
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nXG5pbXBvcnQge1xuICB0eXBlIEF0TGVhc3RPbmUsXG4gIHR5cGUgQmlnU3RyaW5nLFxuICB0eXBlIENhbWVsaXplLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkUmVhZHksXG4gIHR5cGUgRGlzY29yZFVwZGF0ZVByZXNlbmNlLFxuICBHYXRld2F5SW50ZW50cyxcbiAgR2F0ZXdheU9wY29kZXMsXG4gIHR5cGUgUmVxdWVzdEd1aWxkTWVtYmVycyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uLCBMZWFreUJ1Y2tldCwganNvblNhZmVSZXBsYWNlciwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcydcbmltcG9ydCB7IHR5cGUgU2hhcmRFdmVudHMsIFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsIHR5cGUgVHJhbnNwb3J0Q29tcHJlc3Npb24sIHR5cGUgVXBkYXRlVm9pY2VTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gb3B0aW9ucy5jb25uZWN0aW9uID8/IHtcbiAgICB1cmw6ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnLFxuICAgIHNoYXJkczogMSxcbiAgICBzZXNzaW9uU3RhcnRMaW1pdDoge1xuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICB0b3RhbDogMTAwMCxcbiAgICAgIHJlc2V0QWZ0ZXI6IDEwMDAgKiA2MCAqIDYwICogMjQsXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IGdhdGV3YXk6IEdhdGV3YXlNYW5hZ2VyID0ge1xuICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gZmFsc2UsXG4gICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IG9wdGlvbnMudHJhbnNwb3J0Q29tcHJlc3Npb24gPz8gbnVsbCxcbiAgICBpbnRlbnRzOiBvcHRpb25zLmludGVudHMgPz8gMCxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBvczogb3B0aW9ucy5wcm9wZXJ0aWVzPy5vcyA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgYnJvd3Nlcjogb3B0aW9ucy5wcm9wZXJ0aWVzPy5icm93c2VyID8/ICdEaXNjb3JkZW5vJyxcbiAgICAgIGRldmljZTogb3B0aW9ucy5wcm9wZXJ0aWVzPy5kZXZpY2UgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgIH0sXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdXJsOiBvcHRpb25zLnVybCA/PyBjb25uZWN0aW9uT3B0aW9ucy51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25PcHRpb25zLFxuICAgIHRvdGFsU2hhcmRzOiBvcHRpb25zLnRvdGFsU2hhcmRzID8/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyA/PyAxLFxuICAgIGxhc3RTaGFyZElkOiBvcHRpb25zLmxhc3RTaGFyZElkID8/IChvcHRpb25zLnRvdGFsU2hhcmRzID8gb3B0aW9ucy50b3RhbFNoYXJkcyAtIDEgOiBjb25uZWN0aW9uT3B0aW9ucyA/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyAtIDEgOiAwKSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbjogb3B0aW9ucy5zcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4gPz8gZmFsc2UsXG4gICAgcHJlZmVyU25ha2VDYXNlOiBvcHRpb25zLnByZWZlclNuYWtlQ2FzZSA/PyBmYWxzZSxcbiAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICBidWNrZXRzOiBuZXcgTWFwKCksXG4gICAgY2FjaGU6IHtcbiAgICAgIHJlcXVlc3RNZW1iZXJzOiB7XG4gICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuY2FjaGU/LnJlcXVlc3RNZW1iZXJzPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICBwZW5kaW5nOiBuZXcgQ29sbGVjdGlvbigpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIG1ha2VQcmVzZW5jZTogb3B0aW9ucy5tYWtlUHJlc2VuY2UgPz8gKCgpID0+IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpKSxcbiAgICByZXNoYXJkaW5nOiB7XG4gICAgICBlbmFibGVkOiBvcHRpb25zLnJlc2hhcmRpbmc/LmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiBvcHRpb25zLnJlc2hhcmRpbmc/LnNoYXJkc0Z1bGxQZXJjZW50YWdlID8/IDgwLFxuICAgICAgY2hlY2tJbnRlcnZhbDogb3B0aW9ucy5yZXNoYXJkaW5nPy5jaGVja0ludGVydmFsID8/IDI4ODAwMDAwLCAvLyA4IGhvdXJzXG4gICAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICAgIGdldFNlc3Npb25JbmZvOiBvcHRpb25zLnJlc2hhcmRpbmc/LmdldFNlc3Npb25JbmZvLFxuICAgICAgdXBkYXRlR3VpbGRzU2hhcmRJZDogb3B0aW9ucy5yZXNoYXJkaW5nPy51cGRhdGVHdWlsZHNTaGFyZElkLFxuICAgICAgYXN5bmMgY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBDaGVja2luZyBpZiByZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZGlzYWJsZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFnYXRld2F5LnJlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBlbmFibGVkIGJ1dCBubyAncmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbygpJyBpcyBub3QgcHJvdmlkZWQuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZC4nKVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNlc3Npb24gaW5mbyByZXRyaWV2ZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkluZm8pfWApXG5cbiAgICAgICAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2ggaWRlbnRpZnkgbGltaXRzIHRvIHRyeSByZXNoYXJkaW5nXG4gICAgICAgIGlmIChzZXNzaW9uSW5mby5zZXNzaW9uU3RhcnRMaW1pdC5yZW1haW5pbmcgPCBzZXNzaW9uSW5mby5zaGFyZHMpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIE5vdCBlbm91Z2ggc2Vzc2lvbiBzdGFydCBsaW1pdHMgbGVmdCB0byByZXNoYXJkLicpXG5cbiAgICAgICAgICByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIEFibGUgdG8gcmVzaGFyZCwgY2hlY2tpbmcgd2hldGhlciBuZWNlc3Nhcnkgbm93LicpXG5cbiAgICAgICAgLy8gMjUwMCBpcyB0aGUgbWF4IGFtb3VudCBvZiBndWlsZHMgYSBzaW5nbGUgc2hhcmQgY2FuIGhhbmRsZVxuICAgICAgICAvLyAxMDAwIGlzIHRoZSBhbW91bnQgb2YgZ3VpbGRzIGRpc2NvcmQgdXNlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgc2hhcmRzIHRvIHJlY29tbWVuZC5cbiAgICAgICAgLy8gVGhpcyBhbGdvIGhlbHBzIGNoZWNrIGlmIHlvdXIgYm90IGhhcyBncm93biBlbm91Z2ggdG8gcmVzaGFyZC5cbiAgICAgICAgLy8gV2hpbGUgdGhpcyBpcyBpbXByZWNpc2UgYXMgZGlzY29yZCBjaGFuZ2VzIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2Ygc2hhcmQgZXZlcnkgMTAwMCBndWlsZHMgaXQgaXMgZ29vZCBlbm91Z2hcbiAgICAgICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHN0b3JlIHRoZSBndWlsZCBjb3VudCBmb3IgZWFjaCBzaGFyZCBhbmQgcmVxdWlyZSB0aGUgR3VpbGRzIGludGVudCBmb3IgYEdVSUxEX0NSRUFURWAgYW5kIGBHVUlMRF9ERUxFVEVgIGV2ZW50c1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gKHNlc3Npb25JbmZvLnNoYXJkcyAvICgoZ2F0ZXdheS50b3RhbFNoYXJkcyAqIDI1MDApIC8gMTAwMCkpICogMTAwXG5cbiAgICAgICAgLy8gTGVzcyB0aGFuIG5lY2Vzc2FyeSUgYmVpbmcgdXNlZCBzbyBkbyBub3RoaW5nXG4gICAgICAgIGlmIChwZXJjZW50YWdlIDwgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkc0Z1bGxQZXJjZW50YWdlKSB7XG4gICAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIG5vdCBuZWVkZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UsIGluZm86IHNlc3Npb25JbmZvIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIHJldHVybiB7IG5lZWRlZDogdHJ1ZSwgaW5mbzogc2Vzc2lvbkluZm8gfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHJlc2hhcmQoaW5mbykge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gU3RhcnRpbmcgdGhlIHJlc2hhcmQgcHJvY2Vzcy4gUHJldmlvdXMgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgLy8gU2V0IHZhbHVlcyBvbiBnYXRld2F5XG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBpbmZvLnNoYXJkc1xuICAgICAgICAvLyBIYW5kbGVzIHByZXBhcmluZyBtaWQgc2l6ZWQgYm90cyBmb3IgTEJTXG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBnYXRld2F5LmNhbGN1bGF0ZVRvdGFsU2hhcmRzKClcbiAgICAgICAgLy8gU2V0IGZpcnN0IHNoYXJkIGlkIGlmIHByb3ZpZGVkIGluIGluZm9cbiAgICAgICAgaWYgKHR5cGVvZiBpbmZvLmZpcnN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkuZmlyc3RTaGFyZElkID0gaW5mby5maXJzdFNoYXJkSWRcbiAgICAgICAgLy8gU2V0IGxhc3Qgc2hhcmQgaWQgaWYgcHJvdmlkZWQgaW4gaW5mb1xuICAgICAgICBpZiAodHlwZW9mIGluZm8ubGFzdFNoYXJkSWQgPT09ICdudW1iZXInKSBnYXRld2F5Lmxhc3RTaGFyZElkID0gaW5mby5sYXN0U2hhcmRJZFxuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFueSBsYXN0U2hhcmRJZCwgd2UgYXNzdW1lIGFsbCB0aGUgc2hhcmRzIGFyZSB0byBiZSB1c2VkXG4gICAgICAgIGVsc2UgZ2F0ZXdheS5sYXN0U2hhcmRJZCA9IGdhdGV3YXkudG90YWxTaGFyZHMgLSAxXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTdGFydGluZyB0aGUgcmVzaGFyZCBwcm9jZXNzLiBOZXcgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcblxuICAgICAgICAvLyBSZXNldHRpbmcgYnVja2V0c1xuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuY2xlYXIoKVxuICAgICAgICAvLyBSZWZpbGxpbmcgYnVja2V0cyB3aXRoIG5ldyB2YWx1ZXNcbiAgICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGJ1Y2tldHMgYW5kIHRlbGwgdGhlaXIgd29ya2VycyAmIHNoYXJkcyB0byBpZGVudGlmeVxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKSkubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcudGVsbFdvcmtlclRvUHJlcGFyZSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gQWxsIHNoYXJkcyBhcmUgbm93IG9ubGluZS5gKVxuXG4gICAgICAgIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5vblJlc2hhcmRpbmdTd2l0Y2goKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gVGVsbGluZyB3b3JrZXIgdG8gcHJlcGFyZS4gV29ya2VyOiAke3dvcmtlcklkfSB8IFNoYXJkOiAke3NoYXJkSWR9IHwgQnVja2V0OiAke2J1Y2tldElkfS5gKVxuICAgICAgICBjb25zdCBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IGdhdGV3YXkuY29tcHJlc3MsXG4gICAgICAgICAgICB0cmFuc3BvcnRDb21wcmVzc2lvbjogZ2F0ZXdheS50cmFuc3BvcnRDb21wcmVzc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgaW50ZW50czogZ2F0ZXdheS5pbnRlbnRzLFxuICAgICAgICAgICAgcHJvcGVydGllczogZ2F0ZXdheS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdG9rZW46IGdhdGV3YXkudG9rZW4sXG4gICAgICAgICAgICB0b3RhbFNoYXJkczogZ2F0ZXdheS50b3RhbFNoYXJkcyxcbiAgICAgICAgICAgIHVybDogZ2F0ZXdheS51cmwsXG4gICAgICAgICAgICB2ZXJzaW9uOiBnYXRld2F5LnZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGFzeW5jIG1lc3NhZ2UoX3NoYXJkLCBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgZXZlbnRzIHVudGlsIHdlIHN3aWNoIGZyb20gdGhlIG9sZCBzaGFyZHMgdG8gdGhlIG5ldyBvbmVzLlxuICAgICAgICAgICAgICBpZiAocGF5bG9hZC50ID09PSAnUkVBRFknKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnVwZGF0ZUd1aWxkc1NoYXJkSWQ/LihcbiAgICAgICAgICAgICAgICAgIChwYXlsb2FkLmQgYXMgRGlzY29yZFJlYWR5KS5ndWlsZHMubWFwKChnKSA9PiBnLmlkKSxcbiAgICAgICAgICAgICAgICAgIHNoYXJkSWQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9nZ2VyOiBnYXRld2F5LmxvZ2dlcixcbiAgICAgICAgICByZXF1ZXN0SWRlbnRpZnk6IGFzeW5jICgpID0+IGF3YWl0IGdhdGV3YXkucmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpLFxuICAgICAgICAgIG1ha2VQcmVzZW5jZTogZ2F0ZXdheS5tYWtlUHJlc2VuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdhdGV3YXkucHJlZmVyU25ha2VDYXNlKSB7XG4gICAgICAgICAgc2hhcmQuZm9yd2FyZFRvQm90ID0gYXN5bmMgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50cz8ubWVzc2FnZT8uKHNoYXJkLCBwYXlsb2FkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuXG4gICAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNoYXJkICMke3NoYXJkSWR9IGlkZW50aWZpZWQuYClcbiAgICAgIH0sXG4gICAgICBhc3luYyBvblJlc2hhcmRpbmdTd2l0Y2goKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gTWFraW5nIHRoZSBzd2l0Y2ggZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXMuYClcblxuICAgICAgICAvLyBNb3ZlIHRoZSBldmVudHMgZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0gb3B0aW9ucy5ldmVudHMgPz8ge31cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9sZCBzaGFyZHMgc3RvcCBwcm9jZXNzaW5nIGV2ZW50c1xuICAgICAgICBmb3IgKGNvbnN0IHNoYXJkIG9mIGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSGFuZGxlciA9IHNoYXJkLmV2ZW50cy5tZXNzYWdlXG5cbiAgICAgICAgICAvLyBDaGFuZ2Ugd2l0aCBzcHJlYWQgb3BlcmF0b3IgdG8gbm90IGFmZmVjdCBuZXcgc2hhcmRzLCBhcyBjaGFuZ2luZyBhbnl0aGluZyBvbiBzaGFyZC5ldmVudHMgd2lsbCBkaXJlY3RseSBjaGFuZ2Ugb3B0aW9ucy5ldmVudHMsIHdoaWNoIGNoYW5nZXMgbmV3IHNoYXJkcycgZXZlbnRzXG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0ge1xuICAgICAgICAgICAgLi4uc2hhcmQuZXZlbnRzLFxuICAgICAgICAgICAgbWVzc2FnZTogYXN5bmMgZnVuY3Rpb24gKF8sIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gTWVtYmVyIGNoZWNrcyBuZWVkIHRvIGNvbnRpbnVlIGJ1dCBvdGhlcnMgY2FuIHN0b3BcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudCA9PT0gJ0dVSUxEX01FTUJFUlNfQ0hVTksnKSB7XG4gICAgICAgICAgICAgICAgb2xkSGFuZGxlcj8uKHNoYXJkLCBtZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTaHV0dGluZyBkb3duIG9sZCBzaGFyZHMuYClcbiAgICAgICAgYXdhaXQgZ2F0ZXdheS5zaHV0ZG93bihTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkLCAnUmVzaGFyZGVkIScsIGZhbHNlKVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBDb21wbGV0ZWQuYClcbiAgICAgICAgZ2F0ZXdheS5zaGFyZHMgPSBuZXcgTWFwKGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMpXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuY2xlYXIoKVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsY3VsYXRlVG90YWxTaGFyZHMoKSB7XG4gICAgICAvLyBCb3RzIHVuZGVyIDEwMGsgc2VydmVycyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTEJTLlxuICAgICAgaWYgKGdhdGV3YXkudG90YWxTaGFyZHMgPCAxMDApIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIENhbGN1bGF0aW5nIHRvdGFsIHNoYXJkc2AsIGdhdGV3YXkudG90YWxTaGFyZHMsIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgIC8vIENhbGN1bGF0ZSBhIG11bHRpcGxlIG9mIGBtYXhDb25jdXJyZW5jeWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZ2F0ZXdheS5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICBnYXRld2F5LnRvdGFsU2hhcmRzIC9cbiAgICAgICAgICAgIC8vIElmIGBtYXhDb25jdXJyZW5jeWAgaXMgMSwgd2UgY2FuIHNhZmVseSB1c2UgMTYgdG8gZ2V0IGB0b3RhbFNoYXJkc2AgdG8gYmUgaW4gYSBtdWx0aXBsZSBvZiAxNiBzbyB0aGF0IHdlIGNhbiBwcmVwYXJlIGJvdHMgd2l0aCAxMDBrIHNlcnZlcnMgZm9yIExCUy5cbiAgICAgICAgICAgIChnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgPT09IDEgPyAxNiA6IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSksXG4gICAgICAgICkgKiAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICBjb25zdCB3b3JrZXJJZCA9IG9wdGlvbnMuc3ByZWFkU2hhcmRzSW5Sb3VuZFJvYmluXG4gICAgICAgID8gc2hhcmRJZCAlIGdhdGV3YXkudG90YWxXb3JrZXJzXG4gICAgICAgIDogTWF0aC5taW4oTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpLCBnYXRld2F5LnRvdGFsV29ya2VycyAtIDEpXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFtHYXRld2F5XSBDYWxjdWxhdGluZyB3b3JrZXJJZDogU2hhcmQ6ICR7c2hhcmRJZH0gLT4gV29ya2VyOiAke3dvcmtlcklkfSAtPiBQZXIgV29ya2VyOiAke2dhdGV3YXkuc2hhcmRzUGVyV29ya2VyfSAtPiBUb3RhbDogJHtnYXRld2F5LnRvdGFsV29ya2Vyc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHdvcmtlcklkXG4gICAgfSxcbiAgICBwcmVwYXJlQnVja2V0cygpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5OyArK2kpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBQcmVwYXJpbmcgYnVja2V0cyBmb3IgY29uY3VycmVuY3k6ICR7aX1gKVxuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuc2V0KGksIHtcbiAgICAgICAgICB3b3JrZXJzOiBbXSxcbiAgICAgICAgICBsZWFreUJ1Y2tldDogbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiBnYXRld2F5LnNwYXduU2hhcmREZWxheSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gT3JnYW5pemUgYWxsIHNoYXJkcyBpbnRvIHRoZWlyIG93biBidWNrZXRzXG4gICAgICBmb3IgKGxldCBzaGFyZElkID0gZ2F0ZXdheS5maXJzdFNoYXJkSWQ7IHNoYXJkSWQgPD0gZ2F0ZXdheS5sYXN0U2hhcmRJZDsgKytzaGFyZElkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gUHJlcGFyaW5nIGJ1Y2tldHMgZm9yIHNoYXJkOiAke3NoYXJkSWR9YClcblxuICAgICAgICBpZiAoc2hhcmRJZCA+PSBnYXRld2F5LnRvdGFsU2hhcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGlzIGJpZ2dlciBvciBlcXVhbCB0byB0aGUgdXNlZCBhbW91bnQgb2YgdXNlZCBzaGFyZHMgd2hpY2ggaXMgJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3lcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChidWNrZXRJZClcblxuICAgICAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGdvdCBhc3NpZ25lZCB0byBhbiBpbGxlZ2FsIGJ1Y2tldCBpZDogJHtidWNrZXRJZH0sIGV4cGVjdGVkIGEgYnVja2V0IGlkIGJldHdlZW4gMCBhbmQgJHtcbiAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5IC0gMVxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB3b3JrZXIgaWQgZm9yIHRoaXMgc2hhcmRcbiAgICAgICAgY29uc3Qgd29ya2VySWQgPSBnYXRld2F5LmNhbGN1bGF0ZVdvcmtlcklkKHNoYXJkSWQpXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IGJ1Y2tldC53b3JrZXJzLmZpbmQoKHcpID0+IHcuaWQgPT09IHdvcmtlcklkKVxuXG4gICAgICAgIC8vIElmIHRoaXMgd29ya2VyIGFscmVhZHkgZXhpc3RzLCBhZGQgdGhlIHNoYXJkIHRvIGl0cyBxdWV1ZVxuICAgICAgICBpZiAod29ya2VyKSB7XG4gICAgICAgICAgd29ya2VyLnF1ZXVlLnB1c2goc2hhcmRJZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWNrZXQud29ya2Vycy5wdXNoKHsgaWQ6IHdvcmtlcklkLCBxdWV1ZTogW3NoYXJkSWRdIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNwYXduU2hhcmRzKCkge1xuICAgICAgLy8gUHJlcGFyZSB0aGUgY29uY3VycmVuY3kgYnVja2V0c1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIGNvbnN0IHByb21pc2VzID0gWy4uLmdhdGV3YXkuYnVja2V0cy5lbnRyaWVzKCldLm1hcChhc3luYyAoW2J1Y2tldElkLCBidWNrZXRdKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgd29ya2VyIG9mIGJ1Y2tldC53b3JrZXJzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS50ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gV2UgdXNlIFByb21pc2UuYWxsIHNvIHdlIGNhbiBzdGFydCBhbGwgYnVja2V0cyBhdCB0aGUgc2FtZSB0aW1lXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuICAgICAgLy8gQ2hlY2sgYW5kIHJlc2hhcmQgYXV0b21hdGljYWxseSBpZiBhdXRvIHJlc2hhcmRpbmcgaXMgZW5hYmxlZC5cbiAgICAgIGlmIChnYXRld2F5LnJlc2hhcmRpbmcuZW5hYmxlZCAmJiBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbCAhPT0gLTEpIHtcbiAgICAgICAgLy8gSXQgaXMgYmV0dGVyIHRvIGVuc3VyZSB0aGVyZSBpcyBhbHdheXMgb25seSBvbmVcbiAgICAgICAgY2xlYXJJbnRlcnZhbChnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbElkKVxuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKSB7XG4gICAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQgPSBmYWxzZVxuICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLndhcm4oXCJbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBlbmFibGVkIGJ1dCAncmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbygpJyB3YXMgbm90IHByb3ZpZGVkLiBEaXNhYmxpbmcgcmVzaGFyZGluZy5cIilcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNoYXJkaW5nSW5mbyA9IGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkKClcblxuICAgICAgICAgIGlmIChyZXNoYXJkaW5nSW5mby5uZWVkZWQgJiYgcmVzaGFyZGluZ0luZm8uaW5mbykgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnJlc2hhcmQocmVzaGFyZGluZ0luZm8uaW5mbylcbiAgICAgICAgfSwgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWwpXG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzaHV0ZG93bihjb2RlLCByZWFzb24sIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsID0gdHJ1ZSkge1xuICAgICAgaWYgKGNsZWFyUmVzaGFyZGluZ0ludGVydmFsKSBjbGVhckludGVydmFsKGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQpXG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oZ2F0ZXdheS5zaGFyZHMudmFsdWVzKCkpLm1hcCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpKVxuICAgIH0sXG4gICAgYXN5bmMgc2VuZFBheWxvYWQoc2hhcmRJZCwgcGF5bG9hZCkge1xuICAgICAgY29uc3Qgc2hhcmQgPSBnYXRld2F5LnNoYXJkcy5nZXQoc2hhcmRJZClcblxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJkIChpZDogJHtzaGFyZElkfSBub3QgZm91bmRgKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzaGFyZC5zZW5kKHBheWxvYWQpXG4gICAgfSxcbiAgICBhc3luYyB0ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gVGVsbCB3b3JrZXIgIyR7d29ya2VySWR9IHRvIGlkZW50aWZ5IHNoYXJkICMke3NoYXJkSWR9IGZyb20gYnVja2V0ICR7YnVja2V0SWR9YClcbiAgICAgIGF3YWl0IGdhdGV3YXkuaWRlbnRpZnkoc2hhcmRJZClcbiAgICB9LFxuICAgIGFzeW5jIGlkZW50aWZ5KHNoYXJkSWQ6IG51bWJlcikge1xuICAgICAgbGV0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIElkZW50aWZ5aW5nICR7c2hhcmQgPyAnZXhpc3RpbmcnIDogJ25ldyd9IHNoYXJkICgke3NoYXJkSWR9KWApXG5cbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgc2hhcmQgPSBuZXcgU2hhcmQoe1xuICAgICAgICAgIGlkOiBzaGFyZElkLFxuICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmNvbXByZXNzLFxuICAgICAgICAgICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IGdhdGV3YXkudHJhbnNwb3J0Q29tcHJlc3Npb24sXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICByZXF1ZXN0SWRlbnRpZnk6IGFzeW5jICgpID0+IGF3YWl0IGdhdGV3YXkucmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpLFxuICAgICAgICAgIG1ha2VQcmVzZW5jZTogZ2F0ZXdheS5tYWtlUHJlc2VuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRoaXMucHJlZmVyU25ha2VDYXNlKSB7XG4gICAgICAgICAgc2hhcmQuZm9yd2FyZFRvQm90ID0gYXN5bmMgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHNoYXJkIS5ldmVudHMubWVzc2FnZT8uKHNoYXJkISwgcGF5bG9hZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNoYXJkcy5zZXQoc2hhcmRJZCwgc2hhcmQpXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KClcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gU2hhcmQgIyR7c2hhcmRJZH0gcmVxdWVzdGVkIGFuIGlkZW50aWZ5LmApXG5cbiAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcblxuICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVxdWVzdCBpZGVudGlmeSBmb3IgYSBzaGFyZCB0aGF0IGlzIG5vdCBhc3NpZ25lZCB0byBhbnkgYnVja2V0LlwiKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBidWNrZXQubGVha3lCdWNrZXQuYWNxdWlyZSgpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gQXBwcm92ZWQgaWRlbnRpZnkgcmVxdWVzdCBmb3IgU2hhcmQgIyR7c2hhcmRJZH0uYClcbiAgICB9LFxuXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gU2hhcmQgIyR7c2hhcmRJZH0gd2FzIHJlcXVlc3RlZCB0byBiZSBraWxsZWQsIGJ1dCB0aGUgc2hhcmQgY291bGQgbm90IGJlIGZvdW5kLmApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIEtpbGxpbmcgU2hhcmQgIyR7c2hhcmRJZH1gKVxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICBhd2FpdCBzaGFyZC5zaHV0ZG93bigpXG4gICAgfSxcblxuICAgIC8vIEhlbHBlcnMgbWV0aG9kcyBiZWxvdyB0aGlzXG5cbiAgICBjYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQsIHRvdGFsU2hhcmRzKSB7XG4gICAgICAvLyBJZiBub25lIGlzIHByb3ZpZGVkLCB1c2UgdGhlIHRvdGFsIHNoYXJkcyBudW1iZXIgZnJvbSBnYXRld2F5IG9iamVjdC5cbiAgICAgIGlmICghdG90YWxTaGFyZHMpIHRvdGFsU2hhcmRzID0gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgLy8gSWYgaXQgaXMgb25seSAxIHNoYXJkLCBpdCB3aWxsIGFsd2F5cyBiZSBzaGFyZCBpZCAwXG4gICAgICBpZiAodG90YWxTaGFyZHMgPT09IDEpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBjYWxjdWxhdGVTaGFyZElkICgxIHNoYXJkKWApXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoZ3VpbGRJZDogJHtndWlsZElkfSwgdG90YWxTaGFyZHM6ICR7dG90YWxTaGFyZHN9KWApXG4gICAgICByZXR1cm4gTnVtYmVyKChCaWdJbnQoZ3VpbGRJZCkgPj4gMjJuKSAlIEJpZ0ludCh0b3RhbFNoYXJkcykpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5Wb2ljZUNoYW5uZWwoZ3VpbGRJZCwgY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gam9pblZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IGNoYW5uZWxJZDogJHtjaGFubmVsSWR9YClcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5Wb2ljZVN0YXRlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGFubmVsX2lkOiBjaGFubmVsSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBzZWxmX211dGU6IG9wdGlvbnM/LnNlbGZNdXRlID8/IGZhbHNlLFxuICAgICAgICAgIHNlbGZfZGVhZjogb3B0aW9ucz8uc2VsZkRlYWYgPz8gdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RTdGF0dXMoZGF0YSkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBlZGl0Qm90U3RhdHVzIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSwganNvblNhZmVSZXBsYWNlcil9YClcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIFsuLi5nYXRld2F5LnNoYXJkcy52YWx1ZXMoKV0ubWFwKGFzeW5jIChzaGFyZCkgPT4ge1xuICAgICAgICAgIGdhdGV3YXkuZWRpdFNoYXJkU3RhdHVzKHNoYXJkLmlkLCBkYXRhKVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNoYXJkU3RhdHVzKHNoYXJkSWQsIGRhdGEpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gZWRpdFNoYXJkU3RhdHVzIHNoYXJkSWQ6ICR7c2hhcmRJZH0gLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlByZXNlbmNlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgc2luY2U6IG51bGwsXG4gICAgICAgICAgYWZrOiBmYWxzZSxcbiAgICAgICAgICBhY3Rpdml0aWVzOiBkYXRhLmFjdGl2aXRpZXMsXG4gICAgICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3RNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgaWYgKGdhdGV3YXkuaW50ZW50cyAmJiAoIW9wdGlvbnM/LmxpbWl0IHx8IG9wdGlvbnMubGltaXQgPiAxKSAmJiAhKGdhdGV3YXkuaW50ZW50cyAmIEdhdGV3YXlJbnRlbnRzLkd1aWxkTWVtYmVycykpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZldGNoIG1vcmUgdGhlbiAxIG1lbWJlciB3aXRob3V0IHRoZSBHVUlMRF9NRU1CRVJTIGludGVudCcpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBkYXRhOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG5cbiAgICAgIGlmIChvcHRpb25zPy51c2VySWRzPy5sZW5ndGgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSByZXF1ZXN0TWVtYmVycyBndWlsZElkOiAke2d1aWxkSWR9IC0+IHNldHRpbmcgdXNlciBsaW1pdCBiYXNlZCBvbiB1c2VySWRzIGxlbmd0aDogJHtvcHRpb25zLnVzZXJJZHMubGVuZ3RofWApXG5cbiAgICAgICAgb3B0aW9ucy5saW1pdCA9IG9wdGlvbnMudXNlcklkcy5sZW5ndGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zPy5ub25jZSkge1xuICAgICAgICBsZXQgbm9uY2UgPSAnJ1xuXG4gICAgICAgIHdoaWxlICghbm9uY2UgfHwgZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5wZW5kaW5nLmhhcyhub25jZSkpIHtcbiAgICAgICAgICBub25jZSA9IHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4JylcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPz89IHsgbGltaXQ6IDAgfVxuICAgICAgICBvcHRpb25zLm5vbmNlID0gbm9uY2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVtYmVycyA9ICFnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLmVuYWJsZWRcbiAgICAgICAgPyBbXVxuICAgICAgICA6IG5ldyBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgICAgICAgIGlmICghZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkIHx8ICFvcHRpb25zPy5ub25jZSkge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ2FuJ3QgcmVxdWVzdCB0aGUgbWVtYmVycyB3aXRob3V0IHRoZSBub25jZSBvciB3aXRoIHRoZSBmZWF0dXJlIGRpc2FibGVkLlwiKSlcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMucGVuZGluZy5zZXQob3B0aW9ucy5ub25jZSwge1xuICAgICAgICAgICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgbWVtYmVyczogW10sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVxdWVzdEd1aWxkTWVtYmVycyxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgLy8gSWYgYSBxdWVyeSBpcyBwcm92aWRlZCB1c2UgaXQsIE9SIGlmIGEgbGltaXQgaXMgTk9UIHByb3ZpZGVkIHVzZSBcIlwiXG4gICAgICAgICAgcXVlcnk6IG9wdGlvbnM/LnF1ZXJ5ID8/IChvcHRpb25zPy5saW1pdCA/IHVuZGVmaW5lZCA6ICcnKSxcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucz8ubGltaXQgPz8gMCxcbiAgICAgICAgICBwcmVzZW5jZXM6IG9wdGlvbnM/LnByZXNlbmNlcyA/PyBmYWxzZSxcbiAgICAgICAgICB1c2VyX2lkczogb3B0aW9ucz8udXNlcklkcz8ubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgICAgbm9uY2U6IG9wdGlvbnM/Lm5vbmNlLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGF3YWl0IG1lbWJlcnNcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVWb2ljZUNoYW5uZWwoZ3VpbGRJZCkge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGxlYXZlVm9pY2VDaGFubmVsIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gU2hhcmQgJHtzaGFyZElkfWApXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogbnVsbCxcbiAgICAgICAgICBzZWxmX211dGU6IGZhbHNlLFxuICAgICAgICAgIHNlbGZfZGVhZjogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0U291bmRib2FyZFNvdW5kcyhndWlsZElkcykge1xuICAgICAgLyoqXG4gICAgICAgKiBEaXNjb3JkIHdpbGwgc2VuZCB0aGUgZXZlbnRzIGZvciB0aGUgZ3VpbGRzIHRoYXQgYXJlIFwidW5kZXIgdGhlIHNoYXJkXCIgdGhhdCBzZW5kcyB0aGUgb3Bjb2RlLlxuICAgICAgICogRm9yIHRoaXMgcmVhc29uIHdlIG5lZWQgdG8gZ3JvdXAgdGhlIGlkcyB3aXRoIHRoZSBzaGFyZCB0aGUgY2FsY3VsYXRlU2hhcmRJZCBtZXRob2QgZ2l2ZXNcbiAgICAgICAqL1xuXG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgQmlnU3RyaW5nW10+KClcblxuICAgICAgZm9yIChjb25zdCBndWlsZElkIG9mIGd1aWxkSWRzKSB7XG4gICAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgICBjb25zdCBpZHMgPSBtYXAuZ2V0KHNoYXJkSWQpID8/IFtdXG4gICAgICAgIG1hcC5zZXQoc2hhcmRJZCwgaWRzKVxuXG4gICAgICAgIGlkcy5wdXNoKGd1aWxkSWQpXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4ubWFwLmVudHJpZXMoKV0ubWFwKChbc2hhcmRJZCwgaWRzXSkgPT5cbiAgICAgICAgICBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXF1ZXN0U291bmRib2FyZFNvdW5kcyxcbiAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgZ3VpbGRfaWRzOiBpZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gZ2F0ZXdheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgZmlyc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZmlyc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgbGFzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBsYXN0U2hhcmRJZD86IG51bWJlclxuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNwYXduaW5nIG5leHQgc2hhcmQuIE9QVElNQUwgSVMgQUJPVkUgNTEwMC4gWU9VIERPTidUIFdBTlQgVE8gSElUIFRIRSBSQVRFIExJTUlUISEhXG4gICAqIEBkZWZhdWx0IDUzMDBcbiAgICovXG4gIHNwYXduU2hhcmREZWxheT86IG51bWJlclxuICAvKipcbiAgICogV2hldGhlciB0byBzZW5kIHRoZSBkaXNjb3JkIHBhY2tldHMgaW4gc25ha2UgY2FzZSBmb3JtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJlZmVyU25ha2VDYXNlPzogYm9vbGVhblxuICAvKipcbiAgICogVG90YWwgYW1vdW50IG9mIHNoYXJkcyB5b3VyIGJvdCB1c2VzLiBVc2VmdWwgZm9yIHplcm8tZG93bnRpbWUgdXBkYXRlcyBvciByZXNoYXJkaW5nLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkcz86IG51bWJlclxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiBzaGFyZHMgdG8gbG9hZCBwZXIgd29ya2VyLlxuICAgKiBAZGVmYXVsdCAyNVxuICAgKi9cbiAgc2hhcmRzUGVyV29ya2VyPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIHdvcmtlcnMgdG8gdXNlIGZvciB5b3VyIGJvdC5cbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgdG90YWxXb3JrZXJzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNwcmVhZCBzaGFyZHMgYWNyb3NzIHdvcmtlcnMgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJ5IGRlZmF1bHQsIHNoYXJkcyBhcmUgYXNzaWduZWQgdG8gd29ya2VycyBpbiBjb250aWd1b3VzIGJsb2NrcyBiYXNlZCBvbiBzaGFyZHNQZXJXb3JrZXIuIElmIGFueSBzaGFyZCBpcyBsZWZ0IG92ZXIsIGl0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGxhc3Qgd29ya2VyLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGhhdmUgMyB3b3JrZXJzIGFuZCA0MCBzaGFyZHMgd2hpbGUgc2hhcmRzUGVyV29ya2VyIGlzIDEwLCB0aGUgZmlyc3Qgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAwLTksIHRoZSBzZWNvbmQgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAxMC0xOSwgYW5kIHNvIG9uLCB0aGUgbGFzdCB3b3JrZXIgd2lsbCBnZXQgc2hhcmRzIDIwLTM5LlxuICAgKlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHNoYXJkcyB3aWxsIGJlIGFzc2lnbmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyIHRvIHNwcmVhZCBtb3JlIGV2ZW5seSBhY3Jvc3Mgd29ya2Vycy5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggMyB3b3JrZXJzIGFuZCA0MCBzaGFyZHMsIHRoZSBmaXJzdCBzaGFyZCB3aWxsIGdvIHRvIHdvcmtlciAwLCB0aGUgc2Vjb25kIHNoYXJkIHRvIHdvcmtlciAxLCB0aGUgdGhpcmQgc2hhcmQgdG8gd29ya2VyIDIsIHRoZSBmb3VydGggc2hhcmQgdG8gd29ya2VyIDAsIGFuZCBzbyBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbj86IGJvb2xlYW5cbiAgLyoqIEltcG9ydGFudCBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIG1hbmFnZXIgdG8gY29ubmVjdCBzaGFyZHMgdG8gdGhlIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpb24/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD5cbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzPzogYm9vbGVhblxuICAvKiogV2hhdCB0cmFuc3BvcnQgY29tcHJlc3Npb24gc2hvdWxkIGJlIHVzZWQgKi9cbiAgdHJhbnNwb3J0Q29tcHJlc3Npb24/OiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50cz86IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllcz86IHtcbiAgICAvKiogT3BlcmF0aW5nIHN5c3RlbSB0aGUgc2hhcmQgcnVucyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZGFyd2luXCIgfCBcImxpbnV4XCIgfCBcIndpbmRvd3NcIlxuICAgICAqL1xuICAgIG9zOiBzdHJpbmdcbiAgICAvKiogVGhlIFwiYnJvd3NlclwiIHdoZXJlIHRoaXMgc2hhcmQgaXMgcnVubmluZyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgYnJvd3Nlcjogc3RyaW5nXG4gICAgLyoqIFRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIHNoYXJkIGlzIHJ1bm5pbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGRldmljZTogc3RyaW5nXG4gIH1cbiAgLyoqIEJvdCB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKiBUaGUgVVJMIG9mIHRoZSBnYXRld2F5IHdoaWNoIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwid3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnXCJcbiAgICovXG4gIHVybD86IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb24/OiBudW1iZXJcbiAgLyoqIFRoZSBldmVudHMgaGFuZGxlcnMgKi9cbiAgZXZlbnRzPzogU2hhcmRFdmVudHNcbiAgLyoqIFRoaXMgbWFuYWdlcnMgY2FjaGUgcmVsYXRlZCBzZXR0aW5ncy4gKi9cbiAgY2FjaGU/OiB7XG4gICAgcmVxdWVzdE1lbWJlcnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHJlcXVlc3QgbWVtYmVyIHJlcXVlc3RzIHNob3VsZCBiZSBjYWNoZWQuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBlbmFibGVkPzogYm9vbGVhblxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGxvZ2dlciB0aGF0IHRoZSBnYXRld2F5IG1hbmFnZXIgd2lsbCB1c2UuXG4gICAqIEBkZWZhdWx0IGxvZ2dlciAvLyBUaGUgbG9nZ2VyIGV4cG9ydGVkIGJ5IGBAZGlzY29yZGVuby91dGlsc2BcbiAgICovXG4gIGxvZ2dlcj86IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKipcbiAgICogTWFrZSB0aGUgcHJlc2VuY2UgZm9yIHdoZW4gdGhlIGJvdCBjb25uZWN0cyB0byB0aGUgZ2F0ZXdheVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIFNoYXJkIGlzIGdvaW5nIHRvIGlkZW50aWZ5XG4gICAqL1xuICBtYWtlUHJlc2VuY2U/OiAoKSA9PiBQcm9taXNlPERpc2NvcmRVcGRhdGVQcmVzZW5jZSB8IHVuZGVmaW5lZD5cbiAgLyoqIE9wdGlvbnMgcmVsYXRlZCB0byByZXNoYXJkaW5nLiAqL1xuICByZXNoYXJkaW5nPzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IGF1dG9tYXRlZCByZXNoYXJkaW5nIHNob3VsZCBiZSBlbmFibGVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVkOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlICUgb2YgaG93IGZ1bGwgYSBzaGFyZCBpcyB3aGVuIHJlc2hhcmRpbmcgc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogV2UgdXNlIGRpc2NvcmQgcmVjb21tZW5kZWQgc2hhcmQgdmFsdWUgdG8gZ2V0IGFuICoqYXBwcm94aW1hdGlvbioqIG9mIHRoZSBzaGFyZCBmdWxsIHBlcmNlbnRhZ2UgdG8gY29tcGFyZSB3aXRoIHRoaXMgdmFsdWUgc28gdGhlIGJvdCBtYXkgbm90IHJlc2hhcmQgYXQgdGhlIGV4YWN0IHBlcmNlbnRhZ2UgcHJvdmlkZWQgYnV0IG1heSByZXNoYXJkIHdoZW4gaXQgaXMgYSBiaXQgaGlnaGVyIHRoYW4gdGhlIHByb3ZpZGVkIHBlcmNlbnRhZ2UuXG4gICAgICogRm9yIGFjY3VyYXRlIGNhbGN1bGF0aW9uLCB5b3UgbWF5IG92ZXJyaWRlIHRoZSBgY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZGAgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDgwIGFzIGluIDgwJVxuICAgICAqL1xuICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLCBvZiBob3cgb2Z0ZW4gdG8gY2hlY2sgd2hldGhlciByZXNoYXJkaW5nIGlzIG5lZWRlZCBhbmQgcmVzaGFyZCBhdXRvbWF0aWNhbGx5LiBTZXQgdG8gLTEgdG8gZGlzYWJsZSBhdXRvIHJlc2hhcmRpbmcuXG4gICAgICogQGRlZmF1bHQgMjg4MDAwMDAgKDggaG91cnMpXG4gICAgICovXG4gICAgY2hlY2tJbnRlcnZhbDogbnVtYmVyXG4gICAgLyoqIEhhbmRsZXIgdG8gZ2V0IHNoYXJkIGNvdW50IGFuZCBvdGhlciBzZXNzaW9uIGluZm8uICovXG4gICAgZ2V0U2Vzc2lvbkluZm8/OiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj5cbiAgICAvKiogSGFuZGxlciB0byBlZGl0IHRoZSBzaGFyZCBpZCBvbiBhbnkgY2FjaGVkIGd1aWxkcy4gKi9cbiAgICB1cGRhdGVHdWlsZHNTaGFyZElkPzogKGd1aWxkSWRzOiBzdHJpbmdbXSwgc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5TWFuYWdlciBleHRlbmRzIFJlcXVpcmVkPENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucz4ge1xuICAvKiogVGhlIG1heCBjb25jdXJyZW5jeSBidWNrZXRzLiBUaG9zZSB3aWxsIGJlIGNyZWF0ZWQgd2hlbiB0aGUgYHNwYXduU2hhcmRzYCAod2hpY2ggY2FsbHMgYHByZXBhcmVCdWNrZXRzYCB1bmRlciB0aGUgaG9vZCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuICovXG4gIGJ1Y2tldHM6IE1hcDxcbiAgICBudW1iZXIsXG4gICAge1xuICAgICAgd29ya2VyczogQXJyYXk8eyBpZDogbnVtYmVyOyBxdWV1ZTogbnVtYmVyW10gfT5cbiAgICAgIC8qKiBUaGUgYnVja2V0IHRvIHF1ZXVlIHRoZSBpZGVudGlmaWVzLiAqL1xuICAgICAgbGVha3lCdWNrZXQ6IExlYWt5QnVja2V0XG4gICAgfVxuICA+XG4gIC8qKiBUaGUgc2hhcmRzIHRoYXQgYXJlIGNyZWF0ZWQuICovXG4gIHNoYXJkczogTWFwPG51bWJlciwgU2hhcmQ+XG4gIC8qKiBUaGUgbG9nZ2VyIGZvciB0aGUgZ2F0ZXdheSBtYW5hZ2VyLiAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKiogRXZlcnl0aGluZyByZWxhdGVkIHRvIHJlc2hhcmRpbmcuICovXG4gIHJlc2hhcmRpbmc6IENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9uc1sncmVzaGFyZGluZyddICYge1xuICAgIC8qKiBUaGUgaW50ZXJ2YWwgaWQgb2YgdGhlIGNoZWNrIGludGVydmFsLiBUaGlzIGlzIHVzZWQgdG8gY2xlYXIgdGhlIGludGVydmFsIHdoZW4gdGhlIG1hbmFnZXIgaXMgc2h1dGRvd24uICovXG4gICAgY2hlY2tJbnRlcnZhbElkPzogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWRcbiAgICAvKiogSG9sZHMgdGhlIHNoYXJkcyB0aGF0IHJlc2hhcmRpbmcgaGFzIGNyZWF0ZWQuIE9uY2UgcmVzaGFyZGluZyBpcyBkb25lLCB0aGlzIHJlcGxhY2VzIHRoZSBnYXRld2F5LnNoYXJkcyAqL1xuICAgIHNoYXJkczogTWFwPG51bWJlciwgU2hhcmQ+XG4gICAgLyoqIEhhbmRsZXIgdG8gY2hlY2sgaWYgcmVzaGFyZGluZyBpcyBuZWNlc3NhcnkuICovXG4gICAgY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZDogKCkgPT4gUHJvbWlzZTx7IG5lZWRlZDogYm9vbGVhbjsgaW5mbz86IENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90PiB9PlxuICAgIC8qKlxuICAgICAqIEhhbmRsZXIgdG8gYmVnaW4gcmVzaGFyZGluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc29sdmUgb25jZSB0aGUgcmVzaGFyZGluZyBpcyBkb25lLlxuICAgICAqIFNvIHdoZW4gYWxsIHRoZSBjYWxscyB0byB7QGxpbmsgdGVsbFdvcmtlclRvUHJlcGFyZX0gYW5kIHtAbGluayBvblJlc2hhcmRpbmdTd2l0Y2h9IGFyZSBkb25lLlxuICAgICAqL1xuICAgIHJlc2hhcmQ6IChpbmZvOiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gJiB7IGZpcnN0U2hhcmRJZD86IG51bWJlcjsgbGFzdFNoYXJkSWQ/OiBudW1iZXIgfSkgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKlxuICAgICAqIEhhbmRsZXIgdG8gY29tbXVuaWNhdGUgdG8gYSB3b3JrZXIgdGhhdCBpdCBuZWVkcyB0byBzcGF3biBhIG5ldyBzaGFyZCBhbmQgaWRlbnRpZnkgaXQgZm9yIHRoZSByZXNoYXJkaW5nLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGhhbmRsZXIgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSB7QGxpbmsgdGVsbFdvcmtlclRvSWRlbnRpZnl9IGhhbmRsZXIuXG4gICAgICogU28geW91IHNob3VsZCB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGhhdmUgaWRlbnRpZmllZCB0aGUgc2hhcmQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIHRlbGxXb3JrZXJUb1ByZXBhcmU6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY2FsbGVkIHdoZW4gYWxsIHRoZSB3b3JrZXJzIGhhdmUgZmluaXNoZWQgcHJlcGFyaW5nIGZvciB0aGUgcmVzaGFyZGluZy5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG1ha2UgdGhlIG5ldyByZXNoYXJkZWQgc2hhcmRzIGJlY29tZSB0aGUgYWN0aXZlIG9uZXMgYW5kIHNodXRkb3duIHRoZSBvbGQgb25lc1xuICAgICAqL1xuICAgIG9uUmVzaGFyZGluZ1N3aXRjaDogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICB9XG4gIC8qKiBEZXRlcm1pbmUgbWF4IG51bWJlciBvZiBzaGFyZHMgdG8gdXNlIGJhc2VkIHVwb24gdGhlIG1heCBjb25jdXJyZW5jeS4gKi9cbiAgY2FsY3VsYXRlVG90YWxTaGFyZHM6ICgpID0+IG51bWJlclxuICAvKiogRGV0ZXJtaW5lIHRoZSBpZCBvZiB0aGUgd29ya2VyIHdoaWNoIGlzIGhhbmRsaW5nIGEgc2hhcmQuICovXG4gIGNhbGN1bGF0ZVdvcmtlcklkOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBudW1iZXJcbiAgLyoqIFByZXBhcmVzIGFsbCB0aGUgYnVja2V0cyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIGlkZW50aWZ5aW5nIHRoZSBzaGFyZHMuICovXG4gIHByZXBhcmVCdWNrZXRzOiAoKSA9PiB2b2lkXG4gIC8qKiBTdGFydCBpZGVudGlmeWluZyBhbGwgdGhlIHNoYXJkcy4gKi9cbiAgc3Bhd25TaGFyZHM6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFNodXRkb3duIGFsbCBzaGFyZHMuICovXG4gIHNodXRkb3duOiAoY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZywgY2xlYXJSZXNoYXJkaW5nSW50ZXJ2YWw/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHNlbmRQYXlsb2FkOiAoc2hhcmRJZDogbnVtYmVyLCBwYXlsb2FkOiBTaGFyZFNvY2tldFJlcXVlc3QpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS5cbiAgICogRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBzaG91bGQgd2FpdCBmb3IgdGhlIHdvcmtlciB0byBoYXZlIGlkZW50aWZpZWQgdGhlIHNoYXJkIGJlZm9yZSByZXNvbHZpbmcgdGhlIHJldHVybmVkIHByb21pc2VcbiAgICovXG4gIHRlbGxXb3JrZXJUb0lkZW50aWZ5OiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUZWxsIHRoZSBtYW5hZ2VyIHRvIGlkZW50aWZ5IGEgU2hhcmQuIElmIHRoaXMgU2hhcmQgaXMgbm90IGFscmVhZHkgbWFuYWdlZCB0aGlzIHdpbGwgYWxzbyBhZGQgdGhlIFNoYXJkIHRvIHRoZSBtYW5hZ2VyLiAqL1xuICBpZGVudGlmeTogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogS2lsbCBhIHNoYXJkLiBDbG9zZSBhIHNoYXJkcyBjb25uZWN0aW9uIHRvIERpc2NvcmQncyBnYXRld2F5IChpZiBhbnkpIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbWFuYWdlci4gKi9cbiAga2lsbDogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1Y2tldCBpcyBhbGxvd2VkIHRvIG1ha2UgdGhlIG5leHQgaWRlbnRpZnkgcmVxdWVzdC4gKi9cbiAgcmVxdWVzdElkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGJhc2VkIG9uIHRoZSBndWlsZCBpZCBhbmQgdG90YWwgc2hhcmRzLiAqL1xuICBjYWxjdWxhdGVTaGFyZElkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0b3RhbFNoYXJkcz86IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0aGUgYm90IHVzZXIgdG8gYSB2b2ljZSBvciBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBfVXBkYXRlIFZvaWNlIFN0YXRlXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSB2b2ljZSBjaGFubmVsIHRvIGxlYXZlIGlzIGluLlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHlvdSB3YW50IHRvIGpvaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ09OTkVDVGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfVm9pY2UgU3RhdGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGV9XG4gICAqL1xuICBqb2luVm9pY2VDaGFubmVsOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEF0TGVhc3RPbmU8T21pdDxVcGRhdGVWb2ljZVN0YXRlLCAnZ3VpbGRJZCcgfCAnY2hhbm5lbElkJz4+KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90IHN0YXR1cyBpbiBhbGwgc2hhcmRzIHRoYXQgdGhpcyBnYXRld2F5IG1hbmFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBlZGl0Qm90U3RhdHVzOiAoZGF0YTogRGlzY29yZFVwZGF0ZVByZXNlbmNlKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90J3Mgc3RhdHVzIG9uIG9uZSBzaGFyZC5cbiAgICpcbiAgICogQHBhcmFtIHNoYXJkSWQgVGhlIHNoYXJkIGlkIHRvIGVkaXQgdGhlIHN0YXR1cyBmb3IuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBlZGl0U2hhcmRTdGF0dXM6IChzaGFyZElkOiBudW1iZXIsIGRhdGE6IERpc2NvcmRVcGRhdGVQcmVzZW5jZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkIG92ZXIgdGhlIGdhdGV3YXkuIElmIGBnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLmVuYWJsZWRgIGlzIG5vdCBzZXQsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgYW5kIHlvdSdsbCBoYXZlIHRvIGhhbmRsZSB0aGUgYEdVSUxEX01FTUJFUlNfQ0hVTktgIGV2ZW50cyB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiByZXF1ZXN0aW5nIHRoZSBlbnRpcmUgbWVtYmVyIGxpc3Q6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgcHJlc2VuY2VzICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5wcmVzZW5jZXMgfCBwcmVzZW5jZXN9IHNldCB0byBgdHJ1ZWApOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfUFJFU0VOQ0VTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSBwcmVmaXggKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnF1ZXJ5IHwgcXVlcnl9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSB1c2VycyBieSBJRCAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMudXNlcklkcyB8IHVzZXJJZHN9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlcnMgQ2h1bmtfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IDEwMDAgbWVtYmVycyBmZXRjaGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXF1ZXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqL1xuICByZXF1ZXN0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IE9taXQ8UmVxdWVzdEd1aWxkTWVtYmVycywgJ2d1aWxkSWQnPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gIC8qKlxuICAgKiBMZWF2ZXMgdGhlIHZvaWNlIGNoYW5uZWwgdGhlIGJvdCB1c2VyIGlzIGN1cnJlbnRseSBpbi5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgX1VwZGF0ZSBWb2ljZSBTdGF0ZV8gZ2F0ZXdheSBjb21tYW5kIG92ZXIgdGhlIGdhdGV3YXkgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgdm9pY2UgY2hhbm5lbCB0byBsZWF2ZSBpcyBpbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfVm9pY2UgU3RhdGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGV9XG4gICAqL1xuICBsZWF2ZVZvaWNlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogVXNlZCB0byByZXF1ZXN0IHNvdW5kYm9hcmQgc291bmRzIGZvciBhIGxpc3Qgb2YgZ3VpbGRzLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIG11bHRpcGxlIChzZWUgcmVtYXJrcykgX1JlcXVlc3QgU291bmRib2FyZCBTb3VuZHNfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZHMgLSBUaGUgZ3VpbGRzIHRvIGdldCB0aGUgc291bmRzIGZyb21cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfU291bmRib2FyZCBTb3VuZHNfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIOKaoO+4jyBEaXNjb3JkIHdpbGwgc2VuZCB0aGUgX1NvdW5kYm9hcmQgU291bmRzXyBmb3IgZWFjaCBvZiB0aGUgZ3VpbGQgaWRzXG4gICAqIGhvd2V2ZXIgeW91IG1heSBub3QgcmVjZWl2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZXZlbnRzIGFzIHRoZSBpZHMgcGFzc2VkIHRvIF9SZXF1ZXN0IFNvdW5kYm9hcmQgU291bmRzXyBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbiAgICogLSBUaGUgYm90IGlzIG5vdCBpbiB0aGUgc2VydmVyIHByb3ZpZGVkXG4gICAqIC0gVGhlIHNoYXJkIHRoZSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgZnJvbSBkb2VzIG5vdCByZWNlaXZlIGV2ZW50cyBmb3IgdGhlIHNwZWNpZmllZCBndWlsZFxuICAgKlxuICAgKiBUbyBhdm9pZCB0aGlzIERpc2NvcmRlbm8gd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBncm91cCB0aGUgaWRzIGJhc2VkIG9uIHdoYXQgc2hhcmQgdGhleSB3aWxsIG5lZWQgdG8gYmUgc2VudCwgYnV0IHRoaXMgaW52b2x2ZXMgc2VuZGluZyBtdWx0aXBsZSBtZXNzYWdlcyBpbiBtdWx0aXBsZSBzaGFyZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI3JlcXVlc3Qtc291bmRib2FyZC1zb3VuZHN9XG4gICAqL1xuICByZXF1ZXN0U291bmRib2FyZFNvdW5kczogKGd1aWxkSWRzOiBCaWdTdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGhpcyBtYW5hZ2VycyBjYWNoZSByZWxhdGVkIHNldHRpbmdzLiAqL1xuICBjYWNoZToge1xuICAgIHJlcXVlc3RNZW1iZXJzOiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHJlcXVlc3QgbWVtYmVyIHJlcXVlc3RzIHNob3VsZCBiZSBjYWNoZWQuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBlbmFibGVkOiBib29sZWFuXG4gICAgICAvKiogVGhlIHBlbmRpbmcgcmVxdWVzdHMuICovXG4gICAgICBwZW5kaW5nOiBDb2xsZWN0aW9uPHN0cmluZywgUmVxdWVzdE1lbWJlclJlcXVlc3Q+XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdE1lbWJlclJlcXVlc3Qge1xuICAvKiogVGhlIHVuaXF1ZSBub25jZSBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBub25jZTogc3RyaW5nXG4gIC8qKiBUaGUgcmVzb2x2ZXIgaGFuZGxlciB0byBydW4gd2hlbiBhbGwgbWVtYmVycyBhcnJpdmUuICovXG4gIHJlc29sdmU6ICh2YWx1ZTogQ2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+IHwgUHJvbWlzZUxpa2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PikgPT4gdm9pZFxuICAvKiogVGhlIG1lbWJlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXJyaXZlZCBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBtZW1iZXJzOiBEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUdhdGV3YXlNYW5hZ2VyIiwib3B0aW9ucyIsImNvbm5lY3Rpb25PcHRpb25zIiwiY29ubmVjdGlvbiIsInVybCIsInNoYXJkcyIsInNlc3Npb25TdGFydExpbWl0IiwibWF4Q29uY3VycmVuY3kiLCJyZW1haW5pbmciLCJ0b3RhbCIsInJlc2V0QWZ0ZXIiLCJnYXRld2F5IiwiZXZlbnRzIiwiY29tcHJlc3MiLCJ0cmFuc3BvcnRDb21wcmVzc2lvbiIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsInNwcmVhZFNoYXJkc0luUm91bmRSb2JpbiIsInByZWZlclNuYWtlQ2FzZSIsIk1hcCIsImJ1Y2tldHMiLCJjYWNoZSIsInJlcXVlc3RNZW1iZXJzIiwiZW5hYmxlZCIsInBlbmRpbmciLCJDb2xsZWN0aW9uIiwibG9nZ2VyIiwibWFrZVByZXNlbmNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bmRlZmluZWQiLCJyZXNoYXJkaW5nIiwic2hhcmRzRnVsbFBlcmNlbnRhZ2UiLCJjaGVja0ludGVydmFsIiwiZ2V0U2Vzc2lvbkluZm8iLCJ1cGRhdGVHdWlsZHNTaGFyZElkIiwiY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCIsImRlYnVnIiwibmVlZGVkIiwiRXJyb3IiLCJzZXNzaW9uSW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbmZvIiwicGVyY2VudGFnZSIsInJlc2hhcmQiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsImNsZWFyIiwicHJlcGFyZUJ1Y2tldHMiLCJwcm9taXNlcyIsIkFycmF5IiwiZnJvbSIsImVudHJpZXMiLCJtYXAiLCJidWNrZXRJZCIsImJ1Y2tldCIsIndvcmtlciIsIndvcmtlcnMiLCJzaGFyZElkIiwicXVldWUiLCJ0ZWxsV29ya2VyVG9QcmVwYXJlIiwiaWQiLCJhbGwiLCJvblJlc2hhcmRpbmdTd2l0Y2giLCJ3b3JrZXJJZCIsInNoYXJkIiwiU2hhcmQiLCJtZXNzYWdlIiwiX3NoYXJkIiwicGF5bG9hZCIsInQiLCJkIiwiZ3VpbGRzIiwiZyIsInJlcXVlc3RJZGVudGlmeSIsImZvcndhcmRUb0JvdCIsInNldCIsImlkZW50aWZ5IiwidmFsdWVzIiwib2xkSGFuZGxlciIsIl8iLCJzaHV0ZG93biIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlJlc2hhcmRlZCIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJtaW4iLCJmbG9vciIsImkiLCJsZWFreUJ1Y2tldCIsIkxlYWt5QnVja2V0IiwibWF4IiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJnZXQiLCJmaW5kIiwidyIsInB1c2giLCJzcGF3blNoYXJkcyIsInRlbGxXb3JrZXJUb0lkZW50aWZ5IiwiY2xlYXJJbnRlcnZhbCIsImNoZWNrSW50ZXJ2YWxJZCIsIndhcm4iLCJzZXRJbnRlcnZhbCIsInJlc2hhcmRpbmdJbmZvIiwiY29kZSIsInJlYXNvbiIsImNsZWFyUmVzaGFyZGluZ0ludGVydmFsIiwiY2xvc2UiLCJzZW5kUGF5bG9hZCIsInNlbmQiLCJhY3F1aXJlIiwia2lsbCIsImRlbGV0ZSIsImNhbGN1bGF0ZVNoYXJkSWQiLCJndWlsZElkIiwiTnVtYmVyIiwiQmlnSW50Iiwiam9pblZvaWNlQ2hhbm5lbCIsImNoYW5uZWxJZCIsIm9wIiwiR2F0ZXdheU9wY29kZXMiLCJWb2ljZVN0YXRlVXBkYXRlIiwiZ3VpbGRfaWQiLCJ0b1N0cmluZyIsImNoYW5uZWxfaWQiLCJzZWxmX211dGUiLCJzZWxmTXV0ZSIsInNlbGZfZGVhZiIsInNlbGZEZWFmIiwiZWRpdEJvdFN0YXR1cyIsImRhdGEiLCJqc29uU2FmZVJlcGxhY2VyIiwiZWRpdFNoYXJkU3RhdHVzIiwiUHJlc2VuY2VVcGRhdGUiLCJzaW5jZSIsImFmayIsImFjdGl2aXRpZXMiLCJzdGF0dXMiLCJsaW1pdCIsIkdhdGV3YXlJbnRlbnRzIiwiR3VpbGRNZW1iZXJzIiwidXNlcklkcyIsImxlbmd0aCIsIm5vbmNlIiwiaGFzIiwicmFuZG9tQnl0ZXMiLCJtZW1iZXJzIiwicmVqZWN0IiwiUmVxdWVzdEd1aWxkTWVtYmVycyIsInF1ZXJ5IiwicHJlc2VuY2VzIiwidXNlcl9pZHMiLCJsZWF2ZVZvaWNlQ2hhbm5lbCIsInJlcXVlc3RTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRJZHMiLCJpZHMiLCJSZXF1ZXN0U291bmRib2FyZFNvdW5kcyIsImd1aWxkX2lkcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFpQmdCQTs7O2VBQUFBOzs7NEJBakJZO3VCQVlyQjt1QkFDMkQ7OERBQ2hEO3dCQUNpSDs7Ozs7O0FBRTVILFNBQVNBLHFCQUFxQkMsT0FBb0M7SUFDdkUsTUFBTUMsb0JBQW9CRCxRQUFRRSxVQUFVLElBQUk7UUFDOUNDLEtBQUs7UUFDTEMsUUFBUTtRQUNSQyxtQkFBbUI7WUFDakJDLGdCQUFnQjtZQUNoQkMsV0FBVztZQUNYQyxPQUFPO1lBQ1BDLFlBQVksT0FBTyxLQUFLLEtBQUs7UUFDL0I7SUFDRjtJQUVBLE1BQU1DLFVBQTBCO1FBQzlCQyxRQUFRWCxRQUFRVyxNQUFNLElBQUksQ0FBQztRQUMzQkMsVUFBVVosUUFBUVksUUFBUSxJQUFJO1FBQzlCQyxzQkFBc0JiLFFBQVFhLG9CQUFvQixJQUFJO1FBQ3REQyxTQUFTZCxRQUFRYyxPQUFPLElBQUk7UUFDNUJDLFlBQVk7WUFDVkMsSUFBSWhCLFFBQVFlLFVBQVUsRUFBRUMsTUFBTUMsUUFBUUMsUUFBUTtZQUM5Q0MsU0FBU25CLFFBQVFlLFVBQVUsRUFBRUksV0FBVztZQUN4Q0MsUUFBUXBCLFFBQVFlLFVBQVUsRUFBRUssVUFBVTtRQUN4QztRQUNBQyxPQUFPckIsUUFBUXFCLEtBQUs7UUFDcEJsQixLQUFLSCxRQUFRRyxHQUFHLElBQUlG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
479
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nXG5pbXBvcnQge1xuICB0eXBlIEF0TGVhc3RPbmUsXG4gIHR5cGUgQmlnU3RyaW5nLFxuICB0eXBlIENhbWVsaXplLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkUmVhZHksXG4gIHR5cGUgRGlzY29yZFVwZGF0ZVByZXNlbmNlLFxuICBHYXRld2F5SW50ZW50cyxcbiAgR2F0ZXdheU9wY29kZXMsXG4gIHR5cGUgUmVxdWVzdEd1aWxkTWVtYmVycyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uLCBqc29uU2FmZVJlcGxhY2VyLCBMZWFreUJ1Y2tldCwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcydcbmltcG9ydCB7IHR5cGUgU2hhcmRFdmVudHMsIFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgdHlwZSBTaGFyZFNvY2tldFJlcXVlc3QsIHR5cGUgVHJhbnNwb3J0Q29tcHJlc3Npb24sIHR5cGUgVXBkYXRlVm9pY2VTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gb3B0aW9ucy5jb25uZWN0aW9uID8/IHtcbiAgICB1cmw6ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnLFxuICAgIHNoYXJkczogMSxcbiAgICBzZXNzaW9uU3RhcnRMaW1pdDoge1xuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICB0b3RhbDogMTAwMCxcbiAgICAgIHJlc2V0QWZ0ZXI6IDEwMDAgKiA2MCAqIDYwICogMjQsXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IGdhdGV3YXk6IEdhdGV3YXlNYW5hZ2VyID0ge1xuICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gZmFsc2UsXG4gICAgdHJhbnNwb3J0Q29tcHJlc3Npb246IG9wdGlvbnMudHJhbnNwb3J0Q29tcHJlc3Npb24gPz8gbnVsbCxcbiAgICBpbnRlbnRzOiBvcHRpb25zLmludGVudHMgPz8gMCxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBvczogb3B0aW9ucy5wcm9wZXJ0aWVzPy5vcyA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgYnJvd3Nlcjogb3B0aW9ucy5wcm9wZXJ0aWVzPy5icm93c2VyID8/ICdEaXNjb3JkZW5vJyxcbiAgICAgIGRldmljZTogb3B0aW9ucy5wcm9wZXJ0aWVzPy5kZXZpY2UgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgIH0sXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdXJsOiBvcHRpb25zLnVybCA/PyBjb25uZWN0aW9uT3B0aW9ucy51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25PcHRpb25zLFxuICAgIHRvdGFsU2hhcmRzOiBvcHRpb25zLnRvdGFsU2hhcmRzID8/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyA/PyAxLFxuICAgIGxhc3RTaGFyZElkOiBvcHRpb25zLmxhc3RTaGFyZElkID8/IChvcHRpb25zLnRvdGFsU2hhcmRzID8gb3B0aW9ucy50b3RhbFNoYXJkcyAtIDEgOiBjb25uZWN0aW9uT3B0aW9ucyA/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyAtIDEgOiAwKSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNwcmVhZFNoYXJkc0luUm91bmRSb2Jpbjogb3B0aW9ucy5zcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4gPz8gZmFsc2UsXG4gICAgcHJlZmVyU25ha2VDYXNlOiBvcHRpb25zLnByZWZlclNuYWtlQ2FzZSA/PyBmYWxzZSxcbiAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICBidWNrZXRzOiBuZXcgTWFwKCksXG4gICAgY2FjaGU6IHtcbiAgICAgIHJlcXVlc3RNZW1iZXJzOiB7XG4gICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuY2FjaGU/LnJlcXVlc3RNZW1iZXJzPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICBwZW5kaW5nOiBuZXcgQ29sbGVjdGlvbigpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIG1ha2VQcmVzZW5jZTogb3B0aW9ucy5tYWtlUHJlc2VuY2UgPz8gKCgpID0+IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpKSxcbiAgICByZXNoYXJkaW5nOiB7XG4gICAgICBlbmFibGVkOiBvcHRpb25zLnJlc2hhcmRpbmc/LmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiBvcHRpb25zLnJlc2hhcmRpbmc/LnNoYXJkc0Z1bGxQZXJjZW50YWdlID8/IDgwLFxuICAgICAgY2hlY2tJbnRlcnZhbDogb3B0aW9ucy5yZXNoYXJkaW5nPy5jaGVja0ludGVydmFsID8/IDI4ODAwMDAwLCAvLyA4IGhvdXJzXG4gICAgICBzaGFyZHM6IG5ldyBNYXAoKSxcbiAgICAgIGdldFNlc3Npb25JbmZvOiBvcHRpb25zLnJlc2hhcmRpbmc/LmdldFNlc3Npb25JbmZvLFxuICAgICAgdXBkYXRlR3VpbGRzU2hhcmRJZDogb3B0aW9ucy5yZXNoYXJkaW5nPy51cGRhdGVHdWlsZHNTaGFyZElkLFxuICAgICAgYXN5bmMgY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBDaGVja2luZyBpZiByZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZGlzYWJsZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFnYXRld2F5LnJlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbUmVzaGFyZGluZ10gUmVzaGFyZGluZyBpcyBlbmFibGVkIGJ1dCBubyAncmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbygpJyBpcyBub3QgcHJvdmlkZWQuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZC4nKVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNlc3Npb24gaW5mbyByZXRyaWV2ZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkluZm8pfWApXG5cbiAgICAgICAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2ggaWRlbnRpZnkgbGltaXRzIHRvIHRyeSByZXNoYXJkaW5nXG4gICAgICAgIGlmIChzZXNzaW9uSW5mby5zZXNzaW9uU3RhcnRMaW1pdC5yZW1haW5pbmcgPCBzZXNzaW9uSW5mby5zaGFyZHMpIHtcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIE5vdCBlbm91Z2ggc2Vzc2lvbiBzdGFydCBsaW1pdHMgbGVmdCB0byByZXNoYXJkLicpXG5cbiAgICAgICAgICByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZygnW1Jlc2hhcmRpbmddIEFibGUgdG8gcmVzaGFyZCwgY2hlY2tpbmcgd2hldGhlciBuZWNlc3Nhcnkgbm93LicpXG5cbiAgICAgICAgLy8gMjUwMCBpcyB0aGUgbWF4IGFtb3VudCBvZiBndWlsZHMgYSBzaW5nbGUgc2hhcmQgY2FuIGhhbmRsZVxuICAgICAgICAvLyAxMDAwIGlzIHRoZSBhbW91bnQgb2YgZ3VpbGRzIGRpc2NvcmQgdXNlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgc2hhcmRzIHRvIHJlY29tbWVuZC5cbiAgICAgICAgLy8gVGhpcyBhbGdvIGhlbHBzIGNoZWNrIGlmIHlvdXIgYm90IGhhcyBncm93biBlbm91Z2ggdG8gcmVzaGFyZC5cbiAgICAgICAgLy8gV2hpbGUgdGhpcyBpcyBpbXByZWNpc2UgYXMgZGlzY29yZCBjaGFuZ2VzIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2Ygc2hhcmQgZXZlcnkgMTAwMCBndWlsZHMgaXQgaXMgZ29vZCBlbm91Z2hcbiAgICAgICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHN0b3JlIHRoZSBndWlsZCBjb3VudCBmb3IgZWFjaCBzaGFyZCBhbmQgcmVxdWlyZSB0aGUgR3VpbGRzIGludGVudCBmb3IgYEdVSUxEX0NSRUFURWAgYW5kIGBHVUlMRF9ERUxFVEVgIGV2ZW50c1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gKHNlc3Npb25JbmZvLnNoYXJkcyAvICgoZ2F0ZXdheS50b3RhbFNoYXJkcyAqIDI1MDApIC8gMTAwMCkpICogMTAwXG5cbiAgICAgICAgLy8gTGVzcyB0aGFuIG5lY2Vzc2FyeSUgYmVpbmcgdXNlZCBzbyBkbyBub3RoaW5nXG4gICAgICAgIGlmIChwZXJjZW50YWdlIDwgZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkc0Z1bGxQZXJjZW50YWdlKSB7XG4gICAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIG5vdCBuZWVkZWQuJylcblxuICAgICAgICAgIHJldHVybiB7IG5lZWRlZDogZmFsc2UsIGluZm86IHNlc3Npb25JbmZvIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oJ1tSZXNoYXJkaW5nXSBSZXNoYXJkaW5nIGlzIG5lZWRlZC4nKVxuXG4gICAgICAgIHJldHVybiB7IG5lZWRlZDogdHJ1ZSwgaW5mbzogc2Vzc2lvbkluZm8gfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHJlc2hhcmQoaW5mbykge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gU3RhcnRpbmcgdGhlIHJlc2hhcmQgcHJvY2Vzcy4gUHJldmlvdXMgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgLy8gU2V0IHZhbHVlcyBvbiBnYXRld2F5XG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBpbmZvLnNoYXJkc1xuICAgICAgICAvLyBIYW5kbGVzIHByZXBhcmluZyBtaWQgc2l6ZWQgYm90cyBmb3IgTEJTXG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBnYXRld2F5LmNhbGN1bGF0ZVRvdGFsU2hhcmRzKClcbiAgICAgICAgLy8gU2V0IGZpcnN0IHNoYXJkIGlkIGlmIHByb3ZpZGVkIGluIGluZm9cbiAgICAgICAgaWYgKHR5cGVvZiBpbmZvLmZpcnN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkuZmlyc3RTaGFyZElkID0gaW5mby5maXJzdFNoYXJkSWRcbiAgICAgICAgLy8gU2V0IGxhc3Qgc2hhcmQgaWQgaWYgcHJvdmlkZWQgaW4gaW5mb1xuICAgICAgICBpZiAodHlwZW9mIGluZm8ubGFzdFNoYXJkSWQgPT09ICdudW1iZXInKSBnYXRld2F5Lmxhc3RTaGFyZElkID0gaW5mby5sYXN0U2hhcmRJZFxuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFueSBsYXN0U2hhcmRJZCwgd2UgYXNzdW1lIGFsbCB0aGUgc2hhcmRzIGFyZSB0byBiZSB1c2VkXG4gICAgICAgIGVsc2UgZ2F0ZXdheS5sYXN0U2hhcmRJZCA9IGdhdGV3YXkudG90YWxTaGFyZHMgLSAxXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTdGFydGluZyB0aGUgcmVzaGFyZCBwcm9jZXNzLiBOZXcgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcblxuICAgICAgICAvLyBSZXNldHRpbmcgYnVja2V0c1xuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuY2xlYXIoKVxuICAgICAgICAvLyBSZWZpbGxpbmcgYnVja2V0cyB3aXRoIG5ldyB2YWx1ZXNcbiAgICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGJ1Y2tldHMgYW5kIHRlbGwgdGhlaXIgd29ya2VycyAmIHNoYXJkcyB0byBpZGVudGlmeVxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKSkubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcudGVsbFdvcmtlclRvUHJlcGFyZSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5pbmZvKGBbUmVzaGFyZGluZ10gQWxsIHNoYXJkcyBhcmUgbm93IG9ubGluZS5gKVxuXG4gICAgICAgIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5vblJlc2hhcmRpbmdTd2l0Y2goKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gVGVsbGluZyB3b3JrZXIgdG8gcHJlcGFyZS4gV29ya2VyOiAke3dvcmtlcklkfSB8IFNoYXJkOiAke3NoYXJkSWR9IHwgQnVja2V0OiAke2J1Y2tldElkfS5gKVxuICAgICAgICBjb25zdCBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IGdhdGV3YXkuY29tcHJlc3MsXG4gICAgICAgICAgICB0cmFuc3BvcnRDb21wcmVzc2lvbjogZ2F0ZXdheS50cmFuc3BvcnRDb21wcmVzc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgaW50ZW50czogZ2F0ZXdheS5pbnRlbnRzLFxuICAgICAgICAgICAgcHJvcGVydGllczogZ2F0ZXdheS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdG9rZW46IGdhdGV3YXkudG9rZW4sXG4gICAgICAgICAgICB0b3RhbFNoYXJkczogZ2F0ZXdheS50b3RhbFNoYXJkcyxcbiAgICAgICAgICAgIHVybDogZ2F0ZXdheS51cmwsXG4gICAgICAgICAgICB2ZXJzaW9uOiBnYXRld2F5LnZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGFzeW5jIG1lc3NhZ2UoX3NoYXJkLCBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgZXZlbnRzIHVudGlsIHdlIHN3aWNoIGZyb20gdGhlIG9sZCBzaGFyZHMgdG8gdGhlIG5ldyBvbmVzLlxuICAgICAgICAgICAgICBpZiAocGF5bG9hZC50ID09PSAnUkVBRFknKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnVwZGF0ZUd1aWxkc1NoYXJkSWQ/LihcbiAgICAgICAgICAgICAgICAgIChwYXlsb2FkLmQgYXMgRGlzY29yZFJlYWR5KS5ndWlsZHMubWFwKChnKSA9PiBnLmlkKSxcbiAgICAgICAgICAgICAgICAgIHNoYXJkSWQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9nZ2VyOiBnYXRld2F5LmxvZ2dlcixcbiAgICAgICAgICByZXF1ZXN0SWRlbnRpZnk6IGFzeW5jICgpID0+IGF3YWl0IGdhdGV3YXkucmVxdWVzdElkZW50aWZ5KHNoYXJkSWQpLFxuICAgICAgICAgIG1ha2VQcmVzZW5jZTogZ2F0ZXdheS5tYWtlUHJlc2VuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdhdGV3YXkucHJlZmVyU25ha2VDYXNlKSB7XG4gICAgICAgICAgc2hhcmQuZm9yd2FyZFRvQm90ID0gYXN5bmMgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50cz8ubWVzc2FnZT8uKHNoYXJkLCBwYXlsb2FkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuXG4gICAgICAgIGF3YWl0IHNoYXJkLmlkZW50aWZ5KClcblxuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1Jlc2hhcmRpbmddIFNoYXJkICMke3NoYXJkSWR9IGlkZW50aWZpZWQuYClcbiAgICAgIH0sXG4gICAgICBhc3luYyBvblJlc2hhcmRpbmdTd2l0Y2goKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbUmVzaGFyZGluZ10gTWFraW5nIHRoZSBzd2l0Y2ggZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXMuYClcblxuICAgICAgICAvLyBNb3ZlIHRoZSBldmVudHMgZnJvbSB0aGUgb2xkIHNoYXJkcyB0byB0aGUgbmV3IG9uZXNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0gb3B0aW9ucy5ldmVudHMgPz8ge31cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9sZCBzaGFyZHMgc3RvcCBwcm9jZXNzaW5nIGV2ZW50c1xuICAgICAgICBmb3IgKGNvbnN0IHNoYXJkIG9mIGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSGFuZGxlciA9IHNoYXJkLmV2ZW50cy5tZXNzYWdlXG5cbiAgICAgICAgICAvLyBDaGFuZ2Ugd2l0aCBzcHJlYWQgb3BlcmF0b3IgdG8gbm90IGFmZmVjdCBuZXcgc2hhcmRzLCBhcyBjaGFuZ2luZyBhbnl0aGluZyBvbiBzaGFyZC5ldmVudHMgd2lsbCBkaXJlY3RseSBjaGFuZ2Ugb3B0aW9ucy5ldmVudHMsIHdoaWNoIGNoYW5nZXMgbmV3IHNoYXJkcycgZXZlbnRzXG4gICAgICAgICAgc2hhcmQuZXZlbnRzID0ge1xuICAgICAgICAgICAgLi4uc2hhcmQuZXZlbnRzLFxuICAgICAgICAgICAgbWVzc2FnZTogYXN5bmMgZnVuY3Rpb24gKF8sIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgLy8gTWVtYmVyIGNoZWNrcyBuZWVkIHRvIGNvbnRpbnVlIGJ1dCBvdGhlcnMgY2FuIHN0b3BcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudCA9PT0gJ0dVSUxEX01FTUJFUlNfQ0hVTksnKSB7XG4gICAgICAgICAgICAgICAgb2xkSGFuZGxlcj8uKHNoYXJkLCBtZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBTaHV0dGluZyBkb3duIG9sZCBzaGFyZHMuYClcbiAgICAgICAgYXdhaXQgZ2F0ZXdheS5zaHV0ZG93bihTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkLCAnUmVzaGFyZGVkIScsIGZhbHNlKVxuXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmluZm8oYFtSZXNoYXJkaW5nXSBDb21wbGV0ZWQuYClcbiAgICAgICAgZ2F0ZXdheS5zaGFyZHMgPSBuZXcgTWFwKGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMpXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuY2xlYXIoKVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsY3VsYXRlVG90YWxTaGFyZHMoKSB7XG4gICAgICAvLyBCb3RzIHVuZGVyIDEwMGsgc2VydmVycyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTEJTLlxuICAgICAgaWYgKGdhdGV3YXkudG90YWxTaGFyZHMgPCAxMDApIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIENhbGN1bGF0aW5nIHRvdGFsIHNoYXJkc2AsIGdhdGV3YXkudG90YWxTaGFyZHMsIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgIC8vIENhbGN1bGF0ZSBhIG11bHRpcGxlIG9mIGBtYXhDb25jdXJyZW5jeWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZ2F0ZXdheS5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICBnYXRld2F5LnRvdGFsU2hhcmRzIC9cbiAgICAgICAgICAgIC8vIElmIGBtYXhDb25jdXJyZW5jeWAgaXMgMSwgd2UgY2FuIHNhZmVseSB1c2UgMTYgdG8gZ2V0IGB0b3RhbFNoYXJkc2AgdG8gYmUgaW4gYSBtdWx0aXBsZSBvZiAxNiBzbyB0aGF0IHdlIGNhbiBwcmVwYXJlIGJvdHMgd2l0aCAxMDBrIHNlcnZlcnMgZm9yIExCUy5cbiAgICAgICAgICAgIChnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgPT09IDEgPyAxNiA6IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSksXG4gICAgICAgICkgKiAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICBjb25zdCB3b3JrZXJJZCA9IG9wdGlvbnMuc3ByZWFkU2hhcmRzSW5Sb3VuZFJvYmluXG4gICAgICAgID8gc2hhcmRJZCAlIGdhdGV3YXkudG90YWxXb3JrZXJzXG4gICAgICAgIDogTWF0aC5taW4oTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpLCBnYXRld2F5LnRvdGFsV29ya2VycyAtIDEpXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFtHYXRld2F5XSBDYWxjdWxhdGluZyB3b3JrZXJJZDogU2hhcmQ6ICR7c2hhcmRJZH0gLT4gV29ya2VyOiAke3dvcmtlcklkfSAtPiBQZXIgV29ya2VyOiAke2dhdGV3YXkuc2hhcmRzUGVyV29ya2VyfSAtPiBUb3RhbDogJHtnYXRld2F5LnRvdGFsV29ya2Vyc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHdvcmtlcklkXG4gICAgfSxcbiAgICBwcmVwYXJlQnVja2V0cygpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5OyArK2kpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBQcmVwYXJpbmcgYnVja2V0cyBmb3IgY29uY3VycmVuY3k6ICR7aX1gKVxuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuc2V0KGksIHtcbiAgICAgICAgICB3b3JrZXJzOiBbXSxcbiAgICAgICAgICBsZWFreUJ1Y2tldDogbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiBnYXRld2F5LnNwYXduU2hhcmREZWxheSxcbiAgICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9yZ2FuaXplIGFsbCBzaGFyZHMgaW50byB0aGVpciBvd24gYnVja2V0c1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFByZXBhcmluZyBidWNrZXRzIGZvciBzaGFyZDogJHtzaGFyZElkfWApXG5cbiAgICAgICAgaWYgKHNoYXJkSWQgPj0gZ2F0ZXdheS50b3RhbFNoYXJkcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBpcyBiaWdnZXIgb3IgZXF1YWwgdG8gdGhlIHVzZWQgYW1vdW50IG9mIHVzZWQgc2hhcmRzIHdoaWNoIGlzICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVja2V0SWQgPSBzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoYnVja2V0SWQpXG5cbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBnb3QgYXNzaWduZWQgdG8gYW4gaWxsZWdhbCBidWNrZXQgaWQ6ICR7YnVja2V0SWR9LCBleHBlY3RlZCBhIGJ1Y2tldCBpZCBiZXR3ZWVuIDAgYW5kICR7XG4gICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSAtIDFcbiAgICAgICAgICAgIH1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgd29ya2VyIGlkIGZvciB0aGlzIHNoYXJkXG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcblxuICAgICAgICAvLyBJZiB0aGlzIHdvcmtlciBhbHJlYWR5IGV4aXN0cywgYWRkIHRoZSBzaGFyZCB0byBpdHMgcXVldWVcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFByZXBhcmUgdGhlIGNvbmN1cnJlbmN5IGJ1Y2tldHNcbiAgICAgIGdhdGV3YXkucHJlcGFyZUJ1Y2tldHMoKVxuXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFsuLi5nYXRld2F5LmJ1Y2tldHMuZW50cmllcygpXS5tYXAoYXN5bmMgKFtidWNrZXRJZCwgYnVja2V0XSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2hhcmRJZCBvZiB3b3JrZXIucXVldWUpIHtcbiAgICAgICAgICAgIGF3YWl0IGdhdGV3YXkudGVsbFdvcmtlclRvSWRlbnRpZnkod29ya2VyLmlkLCBzaGFyZElkLCBidWNrZXRJZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFdlIHVzZSBQcm9taXNlLmFsbCBzbyB3ZSBjYW4gc3RhcnQgYWxsIGJ1Y2tldHMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgIC8vIENoZWNrIGFuZCByZXNoYXJkIGF1dG9tYXRpY2FsbHkgaWYgYXV0byByZXNoYXJkaW5nIGlzIGVuYWJsZWQuXG4gICAgICBpZiAoZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQgJiYgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWwgIT09IC0xKSB7XG4gICAgICAgIC8vIEl0IGlzIGJldHRlciB0byBlbnN1cmUgdGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZClcblxuICAgICAgICBpZiAoIWdhdGV3YXkucmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbykge1xuICAgICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgICBnYXRld2F5LmxvZ2dlci53YXJuKFwiW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZCBidXQgJ3Jlc2hhcmRpbmcuZ2V0U2Vzc2lvbkluZm8oKScgd2FzIG5vdCBwcm92aWRlZC4gRGlzYWJsaW5nIHJlc2hhcmRpbmcuXCIpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzaGFyZGluZ0luZm8gPSBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJZlJlc2hhcmRpbmdJc05lZWRlZCgpXG5cbiAgICAgICAgICBpZiAocmVzaGFyZGluZ0luZm8ubmVlZGVkICYmIHJlc2hhcmRpbmdJbmZvLmluZm8pIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5yZXNoYXJkKHJlc2hhcmRpbmdJbmZvLmluZm8pXG4gICAgICAgIH0sIGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsKVxuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2h1dGRvd24oY29kZSwgcmVhc29uLCBjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCA9IHRydWUpIHtcbiAgICAgIGlmIChjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCkgY2xlYXJJbnRlcnZhbChnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbElkKVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGdhdGV3YXkuc2hhcmRzLnZhbHVlcygpKS5tYXAoKHNoYXJkKSA9PiBzaGFyZC5jbG9zZShjb2RlLCByZWFzb24pKSlcbiAgICB9LFxuICAgIGFzeW5jIHNlbmRQYXlsb2FkKHNoYXJkSWQsIHBheWxvYWQpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gZ2F0ZXdheS5zaGFyZHMuZ2V0KHNoYXJkSWQpXG5cbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2hhcmQuc2VuZChwYXlsb2FkKVxuICAgIH0sXG4gICAgYXN5bmMgdGVsbFdvcmtlclRvSWRlbnRpZnkod29ya2VySWQsIHNoYXJkSWQsIGJ1Y2tldElkKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFRlbGwgd29ya2VyICMke3dvcmtlcklkfSB0byBpZGVudGlmeSBzaGFyZCAjJHtzaGFyZElkfSBmcm9tIGJ1Y2tldCAke2J1Y2tldElkfWApXG4gICAgICBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBJZGVudGlmeWluZyAke3NoYXJkID8gJ2V4aXN0aW5nJyA6ICduZXcnfSBzaGFyZCAoJHtzaGFyZElkfSlgKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHNoYXJkID0gbmV3IFNoYXJkKHtcbiAgICAgICAgICBpZDogc2hhcmRJZCxcbiAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBjb21wcmVzczogdGhpcy5jb21wcmVzcyxcbiAgICAgICAgICAgIHRyYW5zcG9ydENvbXByZXNzaW9uOiBnYXRld2F5LnRyYW5zcG9ydENvbXByZXNzaW9uLFxuICAgICAgICAgICAgaW50ZW50czogdGhpcy5pbnRlbnRzLFxuICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudG9rZW4sXG4gICAgICAgICAgICB0b3RhbFNoYXJkczogdGhpcy50b3RhbFNoYXJkcyxcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzID8/IHt9LFxuICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgcmVxdWVzdElkZW50aWZ5OiBhc3luYyAoKSA9PiBhd2FpdCBnYXRld2F5LnJlcXVlc3RJZGVudGlmeShzaGFyZElkKSxcbiAgICAgICAgICBtYWtlUHJlc2VuY2U6IGdhdGV3YXkubWFrZVByZXNlbmNlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLnByZWZlclNuYWtlQ2FzZSkge1xuICAgICAgICAgIHNoYXJkLmZvcndhcmRUb0JvdCA9IGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBzaGFyZCEuZXZlbnRzLm1lc3NhZ2U/LihzaGFyZCEsIHBheWxvYWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzaGFyZC5pZGVudGlmeSgpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3RJZGVudGlmeShzaGFyZElkKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHJlcXVlc3RlZCBhbiBpZGVudGlmeS5gKVxuXG4gICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG5cbiAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgaWRlbnRpZnkgZm9yIGEgc2hhcmQgdGhhdCBpcyBub3QgYXNzaWduZWQgdG8gYW55IGJ1Y2tldC5cIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYnVja2V0LmxlYWt5QnVja2V0LmFjcXVpcmUoKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIEFwcHJvdmVkIGlkZW50aWZ5IHJlcXVlc3QgZm9yIFNoYXJkICMke3NoYXJkSWR9LmApXG4gICAgfSxcblxuICAgIGFzeW5jIGtpbGwoc2hhcmRJZDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFNoYXJkICMke3NoYXJkSWR9IHdhcyByZXF1ZXN0ZWQgdG8gYmUga2lsbGVkLCBidXQgdGhlIHNoYXJkIGNvdWxkIG5vdCBiZSBmb3VuZC5gKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBLaWxsaW5nIFNoYXJkICMke3NoYXJkSWR9YClcbiAgICAgIHRoaXMuc2hhcmRzLmRlbGV0ZShzaGFyZElkKVxuICAgICAgYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICAvLyBIZWxwZXJzIG1ldGhvZHMgYmVsb3cgdGhpc1xuXG4gICAgY2FsY3VsYXRlU2hhcmRJZChndWlsZElkLCB0b3RhbFNoYXJkcykge1xuICAgICAgLy8gSWYgbm9uZSBpcyBwcm92aWRlZCwgdXNlIHRoZSB0b3RhbCBzaGFyZHMgbnVtYmVyIGZyb20gZ2F0ZXdheSBvYmplY3QuXG4gICAgICBpZiAoIXRvdGFsU2hhcmRzKSB0b3RhbFNoYXJkcyA9IGdhdGV3YXkudG90YWxTaGFyZHNcbiAgICAgIC8vIElmIGl0IGlzIG9ubHkgMSBzaGFyZCwgaXQgd2lsbCBhbHdheXMgYmUgc2hhcmQgaWQgMFxuICAgICAgaWYgKHRvdGFsU2hhcmRzID09PSAxKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoMSBzaGFyZClgKVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGNhbGN1bGF0ZVNoYXJkSWQgKGd1aWxkSWQ6ICR7Z3VpbGRJZH0sIHRvdGFsU2hhcmRzOiAke3RvdGFsU2hhcmRzfSlgKVxuICAgICAgcmV0dXJuIE51bWJlcigoQmlnSW50KGd1aWxkSWQpID4+IDIybikgJSBCaWdJbnQodG90YWxTaGFyZHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVm9pY2VDaGFubmVsKGd1aWxkSWQsIGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGpvaW5Wb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBjaGFubmVsSWQ6ICR7Y2hhbm5lbElkfWApXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5lbElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgc2VsZl9tdXRlOiBvcHRpb25zPy5zZWxmTXV0ZSA/PyBmYWxzZSxcbiAgICAgICAgICBzZWxmX2RlYWY6IG9wdGlvbnM/LnNlbGZEZWFmID8/IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90U3RhdHVzKGRhdGEpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gZWRpdEJvdFN0YXR1cyBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGRhdGEsIGpzb25TYWZlUmVwbGFjZXIpfWApXG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5zaGFyZHMudmFsdWVzKCldLm1hcChhc3luYyAoc2hhcmQpID0+IHtcbiAgICAgICAgICBnYXRld2F5LmVkaXRTaGFyZFN0YXR1cyhzaGFyZC5pZCwgZGF0YSlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTaGFyZFN0YXR1cyhzaGFyZElkLCBkYXRhKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGVkaXRTaGFyZFN0YXR1cyBzaGFyZElkOiAke3NoYXJkSWR9IC0+IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YClcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5QcmVzZW5jZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHNpbmNlOiBudWxsLFxuICAgICAgICAgIGFmazogZmFsc2UsXG4gICAgICAgICAgYWN0aXZpdGllczogZGF0YS5hY3Rpdml0aWVzLFxuICAgICAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgIGlmIChnYXRld2F5LmludGVudHMgJiYgKCFvcHRpb25zPy5saW1pdCB8fCBvcHRpb25zLmxpbWl0ID4gMSkgJiYgIShnYXRld2F5LmludGVudHMgJiBHYXRld2F5SW50ZW50cy5HdWlsZE1lbWJlcnMpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBtb3JlIHRoZW4gMSBtZW1iZXIgd2l0aG91dCB0aGUgR1VJTERfTUVNQkVSUyBpbnRlbnQnKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHJlcXVlc3RNZW1iZXJzIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuXG4gICAgICBpZiAob3B0aW9ucz8udXNlcklkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBzZXR0aW5nIHVzZXIgbGltaXQgYmFzZWQgb24gdXNlcklkcyBsZW5ndGg6ICR7b3B0aW9ucy51c2VySWRzLmxlbmd0aH1gKVxuXG4gICAgICAgIG9wdGlvbnMubGltaXQgPSBvcHRpb25zLnVzZXJJZHMubGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucz8ubm9uY2UpIHtcbiAgICAgICAgbGV0IG5vbmNlID0gJydcblxuICAgICAgICB3aGlsZSAoIW5vbmNlIHx8IGdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMucGVuZGluZy5oYXMobm9uY2UpKSB7XG4gICAgICAgICAgbm9uY2UgPSByYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID8/PSB7IGxpbWl0OiAwIH1cbiAgICAgICAgb3B0aW9ucy5ub25jZSA9IG5vbmNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbWJlcnMgPSAhZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkXG4gICAgICAgID8gW11cbiAgICAgICAgOiBuZXcgUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgICAgICBpZiAoIWdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMuZW5hYmxlZCB8fCAhb3B0aW9ucz8ubm9uY2UpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgdGhlIG1lbWJlcnMgd2l0aG91dCB0aGUgbm9uY2Ugb3Igd2l0aCB0aGUgZmVhdHVyZSBkaXNhYmxlZC5cIikpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLnBlbmRpbmcuc2V0KG9wdGlvbnMubm9uY2UsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgIG1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlcXVlc3RHdWlsZE1lbWJlcnMsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIC8vIElmIGEgcXVlcnkgaXMgcHJvdmlkZWQgdXNlIGl0LCBPUiBpZiBhIGxpbWl0IGlzIE5PVCBwcm92aWRlZCB1c2UgXCJcIlxuICAgICAgICAgIHF1ZXJ5OiBvcHRpb25zPy5xdWVyeSA/PyAob3B0aW9ucz8ubGltaXQgPyB1bmRlZmluZWQgOiAnJyksXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnM/LmxpbWl0ID8/IDAsXG4gICAgICAgICAgcHJlc2VuY2VzOiBvcHRpb25zPy5wcmVzZW5jZXMgPz8gZmFsc2UsXG4gICAgICAgICAgdXNlcl9pZHM6IG9wdGlvbnM/LnVzZXJJZHM/Lm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICAgIG5vbmNlOiBvcHRpb25zPy5ub25jZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBhd2FpdCBtZW1iZXJzXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVm9pY2VDaGFubmVsKGd1aWxkSWQpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBsZWF2ZVZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IFNoYXJkICR7c2hhcmRJZH1gKVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlZvaWNlU3RhdGVVcGRhdGUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYW5uZWxfaWQ6IG51bGwsXG4gICAgICAgICAgc2VsZl9tdXRlOiBmYWxzZSxcbiAgICAgICAgICBzZWxmX2RlYWY6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRGlzY29yZCB3aWxsIHNlbmQgdGhlIGV2ZW50cyBmb3IgdGhlIGd1aWxkcyB0aGF0IGFyZSBcInVuZGVyIHRoZSBzaGFyZFwiIHRoYXQgc2VuZHMgdGhlIG9wY29kZS5cbiAgICAgICAqIEZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGdyb3VwIHRoZSBpZHMgd2l0aCB0aGUgc2hhcmQgdGhlIGNhbGN1bGF0ZVNoYXJkSWQgbWV0aG9kIGdpdmVzXG4gICAgICAgKi9cblxuICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEJpZ1N0cmluZ1tdPigpXG5cbiAgICAgIGZvciAoY29uc3QgZ3VpbGRJZCBvZiBndWlsZElkcykge1xuICAgICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgICAgY29uc3QgaWRzID0gbWFwLmdldChzaGFyZElkKSA/PyBbXVxuICAgICAgICBtYXAuc2V0KHNoYXJkSWQsIGlkcylcblxuICAgICAgICBpZHMucHVzaChndWlsZElkKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLm1hcC5lbnRyaWVzKCldLm1hcCgoW3NoYXJkSWQsIGlkc10pID0+XG4gICAgICAgICAgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMsXG4gICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgIGd1aWxkX2lkczogaWRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIGdhdGV3YXlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMge1xuICAvKipcbiAgICogSWQgb2YgdGhlIGZpcnN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGZpcnN0U2hhcmRJZD86IG51bWJlclxuICAvKipcbiAgICogSWQgb2YgdGhlIGxhc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGFzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIERlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzcGF3bmluZyBuZXh0IHNoYXJkLiBPUFRJTUFMIElTIEFCT1ZFIDUxMDAuIFlPVSBET04nVCBXQU5UIFRPIEhJVCBUSEUgUkFURSBMSU1JVCEhIVxuICAgKiBAZGVmYXVsdCA1MzAwXG4gICAqL1xuICBzcGF3blNoYXJkRGVsYXk/OiBudW1iZXJcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2VuZCB0aGUgZGlzY29yZCBwYWNrZXRzIGluIHNuYWtlIGNhc2UgZm9ybS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByZWZlclNuYWtlQ2FzZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFRvdGFsIGFtb3VudCBvZiBzaGFyZHMgeW91ciBib3QgdXNlcy4gVXNlZnVsIGZvciB6ZXJvLWRvd250aW1lIHVwZGF0ZXMgb3IgcmVzaGFyZGluZy5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgdG90YWxTaGFyZHM/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2Ygc2hhcmRzIHRvIGxvYWQgcGVyIHdvcmtlci5cbiAgICogQGRlZmF1bHQgMjVcbiAgICovXG4gIHNoYXJkc1Blcldvcmtlcj86IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIGFtb3VudCBvZiB3b3JrZXJzIHRvIHVzZSBmb3IgeW91ciBib3QuXG4gICAqIEBkZWZhdWx0IDRcbiAgICovXG4gIHRvdGFsV29ya2Vycz86IG51bWJlclxuICAvKipcbiAgICogV2hldGhlciB0byBzcHJlYWQgc2hhcmRzIGFjcm9zcyB3b3JrZXJzIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBCeSBkZWZhdWx0LCBzaGFyZHMgYXJlIGFzc2lnbmVkIHRvIHdvcmtlcnMgaW4gY29udGlndW91cyBibG9ja3MgYmFzZWQgb24gc2hhcmRzUGVyV29ya2VyLiBJZiBhbnkgc2hhcmQgaXMgbGVmdCBvdmVyLCBpdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBsYXN0IHdvcmtlci5cbiAgICogVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBoYXZlIDMgd29ya2VycyBhbmQgNDAgc2hhcmRzIHdoaWxlIHNoYXJkc1BlcldvcmtlciBpcyAxMCwgdGhlIGZpcnN0IHdvcmtlciB3aWxsIGdldCBzaGFyZHMgMC05LCB0aGUgc2Vjb25kIHdvcmtlciB3aWxsIGdldCBzaGFyZHMgMTAtMTksIGFuZCBzbyBvbiwgdGhlIGxhc3Qgd29ya2VyIHdpbGwgZ2V0IHNoYXJkcyAyMC0zOS5cbiAgICpcbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZSBzaGFyZHMgd2lsbCBiZSBhc3NpZ25lZCBpbiBhIHJvdW5kLXJvYmluIG1hbm5lciB0byBzcHJlYWQgbW9yZSBldmVubHkgYWNyb3NzIHdvcmtlcnMuXG4gICAqIEZvciBleGFtcGxlLCB3aXRoIDMgd29ya2VycyBhbmQgNDAgc2hhcmRzLCB0aGUgZmlyc3Qgc2hhcmQgd2lsbCBnbyB0byB3b3JrZXIgMCwgdGhlIHNlY29uZCBzaGFyZCB0byB3b3JrZXIgMSwgdGhlIHRoaXJkIHNoYXJkIHRvIHdvcmtlciAyLCB0aGUgZm91cnRoIHNoYXJkIHRvIHdvcmtlciAwLCBhbmQgc28gb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4/OiBib29sZWFuXG4gIC8qKiBJbXBvcnRhbnQgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBtYW5hZ2VyIHRvIGNvbm5lY3Qgc2hhcmRzIHRvIHRoZSBnYXRld2F5LiAqL1xuICBjb25uZWN0aW9uPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+XG4gIC8qKiBXaGV0aGVyIGluY29taW5nIHBheWxvYWRzIGFyZSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21wcmVzcz86IGJvb2xlYW5cbiAgLyoqIFdoYXQgdHJhbnNwb3J0IGNvbXByZXNzaW9uIHNob3VsZCBiZSB1c2VkICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uPzogVHJhbnNwb3J0Q29tcHJlc3Npb24gfCBudWxsXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM/OiBudW1iZXJcbiAgLyoqIElkZW50aWZ5IHByb3BlcnRpZXMgdG8gdXNlICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw/OiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uPzogbnVtYmVyXG4gIC8qKiBUaGUgZXZlbnRzIGhhbmRsZXJzICovXG4gIGV2ZW50cz86IFNoYXJkRXZlbnRzXG4gIC8qKiBUaGlzIG1hbmFnZXJzIGNhY2hlIHJlbGF0ZWQgc2V0dGluZ3MuICovXG4gIGNhY2hlPzoge1xuICAgIHJlcXVlc3RNZW1iZXJzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsb2dnZXIgdGhhdCB0aGUgZ2F0ZXdheSBtYW5hZ2VyIHdpbGwgdXNlLlxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIHByZXNlbmNlIGZvciB3aGVuIHRoZSBib3QgY29ubmVjdHMgdG8gdGhlIGdhdGV3YXlcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBTaGFyZCBpcyBnb2luZyB0byBpZGVudGlmeVxuICAgKi9cbiAgbWFrZVByZXNlbmNlPzogKCkgPT4gUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+XG4gIC8qKiBPcHRpb25zIHJlbGF0ZWQgdG8gcmVzaGFyZGluZy4gKi9cbiAgcmVzaGFyZGluZz86IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhdXRvbWF0ZWQgcmVzaGFyZGluZyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSAlIG9mIGhvdyBmdWxsIGEgc2hhcmQgaXMgd2hlbiByZXNoYXJkaW5nIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFdlIHVzZSBkaXNjb3JkIHJlY29tbWVuZGVkIHNoYXJkIHZhbHVlIHRvIGdldCBhbiAqKmFwcHJveGltYXRpb24qKiBvZiB0aGUgc2hhcmQgZnVsbCBwZXJjZW50YWdlIHRvIGNvbXBhcmUgd2l0aCB0aGlzIHZhbHVlIHNvIHRoZSBib3QgbWF5IG5vdCByZXNoYXJkIGF0IHRoZSBleGFjdCBwZXJjZW50YWdlIHByb3ZpZGVkIGJ1dCBtYXkgcmVzaGFyZCB3aGVuIGl0IGlzIGEgYml0IGhpZ2hlciB0aGFuIHRoZSBwcm92aWRlZCBwZXJjZW50YWdlLlxuICAgICAqIEZvciBhY2N1cmF0ZSBjYWxjdWxhdGlvbiwgeW91IG1heSBvdmVycmlkZSB0aGUgYGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWRgIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA4MCBhcyBpbiA4MCVcbiAgICAgKi9cbiAgICBzaGFyZHNGdWxsUGVyY2VudGFnZTogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcywgb2YgaG93IG9mdGVuIHRvIGNoZWNrIHdoZXRoZXIgcmVzaGFyZGluZyBpcyBuZWVkZWQgYW5kIHJlc2hhcmQgYXV0b21hdGljYWxseS4gU2V0IHRvIC0xIHRvIGRpc2FibGUgYXV0byByZXNoYXJkaW5nLlxuICAgICAqIEBkZWZhdWx0IDI4ODAwMDAwICg4IGhvdXJzKVxuICAgICAqL1xuICAgIGNoZWNrSW50ZXJ2YWw6IG51bWJlclxuICAgIC8qKiBIYW5kbGVyIHRvIGdldCBzaGFyZCBjb3VudCBhbmQgb3RoZXIgc2Vzc2lvbiBpbmZvLiAqL1xuICAgIGdldFNlc3Npb25JbmZvPzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gICAgLyoqIEhhbmRsZXIgdG8gZWRpdCB0aGUgc2hhcmQgaWQgb24gYW55IGNhY2hlZCBndWlsZHMuICovXG4gICAgdXBkYXRlR3VpbGRzU2hhcmRJZD86IChndWlsZElkczogc3RyaW5nW10sIHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICAvKiogVGhlIGJ1Y2tldCB0byBxdWV1ZSB0aGUgaWRlbnRpZmllcy4gKi9cbiAgICAgIGxlYWt5QnVja2V0OiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogVGhlIGxvZ2dlciBmb3IgdGhlIGdhdGV3YXkgbWFuYWdlci4gKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byByZXNoYXJkaW5nLiAqL1xuICByZXNoYXJkaW5nOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnNbJ3Jlc2hhcmRpbmcnXSAmIHtcbiAgICAvKiogVGhlIGludGVydmFsIGlkIG9mIHRoZSBjaGVjayBpbnRlcnZhbC4gVGhpcyBpcyB1c2VkIHRvIGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBtYW5hZ2VyIGlzIHNodXRkb3duLiAqL1xuICAgIGNoZWNrSW50ZXJ2YWxJZD86IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkXG4gICAgLyoqIEhvbGRzIHRoZSBzaGFyZHMgdGhhdCByZXNoYXJkaW5nIGhhcyBjcmVhdGVkLiBPbmNlIHJlc2hhcmRpbmcgaXMgZG9uZSwgdGhpcyByZXBsYWNlcyB0aGUgZ2F0ZXdheS5zaGFyZHMgKi9cbiAgICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAgIC8qKiBIYW5kbGVyIHRvIGNoZWNrIGlmIHJlc2hhcmRpbmcgaXMgbmVjZXNzYXJ5LiAqL1xuICAgIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQ6ICgpID0+IFByb21pc2U8eyBuZWVkZWQ6IGJvb2xlYW47IGluZm8/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gfT5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIHRvIGJlZ2luIHJlc2hhcmRpbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNvbHZlIG9uY2UgdGhlIHJlc2hhcmRpbmcgaXMgZG9uZS5cbiAgICAgKiBTbyB3aGVuIGFsbCB0aGUgY2FsbHMgdG8ge0BsaW5rIHRlbGxXb3JrZXJUb1ByZXBhcmV9IGFuZCB7QGxpbmsgb25SZXNoYXJkaW5nU3dpdGNofSBhcmUgZG9uZS5cbiAgICAgKi9cbiAgICByZXNoYXJkOiAoaW5mbzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+ICYgeyBmaXJzdFNoYXJkSWQ/OiBudW1iZXI7IGxhc3RTaGFyZElkPzogbnVtYmVyIH0pID0+IFByb21pc2U8dm9pZD5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIHRvIGNvbW11bmljYXRlIHRvIGEgd29ya2VyIHRoYXQgaXQgbmVlZHMgdG8gc3Bhd24gYSBuZXcgc2hhcmQgYW5kIGlkZW50aWZ5IGl0IGZvciB0aGUgcmVzaGFyZGluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBoYW5kbGVyIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUge0BsaW5rIHRlbGxXb3JrZXJUb0lkZW50aWZ5fSBoYW5kbGVyLlxuICAgICAqIFNvIHlvdSBzaG91bGQgd2FpdCBmb3IgdGhlIHdvcmtlciB0byBoYXZlIGlkZW50aWZpZWQgdGhlIHNoYXJkIGJlZm9yZSByZXNvbHZpbmcgdGhlIHByb21pc2VcbiAgICAgKi9cbiAgICB0ZWxsV29ya2VyVG9QcmVwYXJlOiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNhbGxlZCB3aGVuIGFsbCB0aGUgd29ya2VycyBoYXZlIGZpbmlzaGVkIHByZXBhcmluZyBmb3IgdGhlIHJlc2hhcmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBtYWtlIHRoZSBuZXcgcmVzaGFyZGVkIHNoYXJkcyBiZWNvbWUgdGhlIGFjdGl2ZSBvbmVzIGFuZCBzaHV0ZG93biB0aGUgb2xkIG9uZXNcbiAgICAgKi9cbiAgICBvblJlc2hhcmRpbmdTd2l0Y2g6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgfVxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcsIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxuICBzZW5kUGF5bG9hZDogKHNoYXJkSWQ6IG51bWJlciwgcGF5bG9hZDogU2hhcmRTb2NrZXRSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBBbGxvd3MgdXNlcnMgdG8gaG9vayBpbiBhbmQgY2hhbmdlIHRvIGNvbW11bmljYXRlIHRvIGRpZmZlcmVudCB3b3JrZXJzIGFjcm9zcyBkaWZmZXJlbnQgc2VydmVycyBvciBhbnl0aGluZyB0aGV5IGxpa2UuXG4gICAqIEZvciBleGFtcGxlIHVzaW5nIHJlZGlzIHB1YnN1YiB0byB0YWxrIHRvIG90aGVyIHNlcnZlcnMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgc2hvdWxkIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gaGF2ZSBpZGVudGlmaWVkIHRoZSBzaGFyZCBiZWZvcmUgcmVzb2x2aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlXG4gICAqL1xuICB0ZWxsV29ya2VyVG9JZGVudGlmeTogKHdvcmtlcklkOiBudW1iZXIsIHNoYXJkSWQ6IG51bWJlciwgYnVja2V0SWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGVsbCB0aGUgbWFuYWdlciB0byBpZGVudGlmeSBhIFNoYXJkLiBJZiB0aGlzIFNoYXJkIGlzIG5vdCBhbHJlYWR5IG1hbmFnZWQgdGhpcyB3aWxsIGFsc28gYWRkIHRoZSBTaGFyZCB0byB0aGUgbWFuYWdlci4gKi9cbiAgaWRlbnRpZnk6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEtpbGwgYSBzaGFyZC4gQ2xvc2UgYSBzaGFyZHMgY29ubmVjdGlvbiB0byBEaXNjb3JkJ3MgZ2F0ZXdheSAoaWYgYW55KSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hbmFnZXIuICovXG4gIGtpbGw6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHRoZSBidWNrZXQgaXMgYWxsb3dlZCB0byBtYWtlIHRoZSBuZXh0IGlkZW50aWZ5IHJlcXVlc3QuICovXG4gIHJlcXVlc3RJZGVudGlmeTogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNoYXJkcyBiYXNlZCBvbiB0aGUgZ3VpbGQgaWQgYW5kIHRvdGFsIHNoYXJkcy4gKi9cbiAgY2FsY3VsYXRlU2hhcmRJZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdG90YWxTaGFyZHM/OiBudW1iZXIpID0+IG51bWJlclxuICAvKipcbiAgICogQ29ubmVjdHMgdGhlIGJvdCB1c2VyIHRvIGEgdm9pY2Ugb3Igc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgX1VwZGF0ZSBWb2ljZSBTdGF0ZV8gZ2F0ZXdheSBjb21tYW5kIG92ZXIgdGhlIGdhdGV3YXkgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgdm9pY2UgY2hhbm5lbCB0byBsZWF2ZSBpcyBpbi5cbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB5b3Ugd2FudCB0byBqb2luLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENPTk5FQ1RgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgam9pblZvaWNlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBBdExlYXN0T25lPE9taXQ8VXBkYXRlVm9pY2VTdGF0ZSwgJ2d1aWxkSWQnIHwgJ2NoYW5uZWxJZCc+PikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIGJvdCBzdGF0dXMgaW4gYWxsIHNoYXJkcyB0aGF0IHRoaXMgZ2F0ZXdheSBtYW5hZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RhdHVzIGRhdGEgdG8gc2V0IHRoZSBib3RzIHN0YXR1cyB0by5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgZWRpdEJvdFN0YXR1czogKGRhdGE6IERpc2NvcmRVcGRhdGVQcmVzZW5jZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIGJvdCdzIHN0YXR1cyBvbiBvbmUgc2hhcmQuXG4gICAqXG4gICAqIEBwYXJhbSBzaGFyZElkIFRoZSBzaGFyZCBpZCB0byBlZGl0IHRoZSBzdGF0dXMgZm9yLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc3RhdHVzIGRhdGEgdG8gc2V0IHRoZSBib3RzIHN0YXR1cyB0by5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgZWRpdFNoYXJkU3RhdHVzOiAoc2hhcmRJZDogbnVtYmVyLCBkYXRhOiBEaXNjb3JkVXBkYXRlUHJlc2VuY2UpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgYSBndWlsZCBvdmVyIHRoZSBnYXRld2F5LiBJZiBgZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkYCBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGFuZCB5b3UnbGwgaGF2ZSB0byBoYW5kbGUgdGhlIGBHVUlMRF9NRU1CRVJTX0NIVU5LYCBldmVudHMgeW91cnNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVtYmVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgcmVxdWVzdGluZyB0aGUgZW50aXJlIG1lbWJlciBsaXN0OlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIHByZXNlbmNlcyAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMucHJlc2VuY2VzIHwgcHJlc2VuY2VzfSBzZXQgdG8gYHRydWVgKTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEdVSUxEX1BSRVNFTkNFU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgcHJlZml4ICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5xdWVyeSB8IHF1ZXJ5fSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgdXNlcnMgYnkgSUQgKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnVzZXJJZHMgfCB1c2VySWRzfSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXJzIENodW5rXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSAxMDAwIG1lbWJlcnMgZmV0Y2hlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKi9cbiAgcmVxdWVzdE1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFJlcXVlc3RHdWlsZE1lbWJlcnMsICdndWlsZElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PlxuICAvKipcbiAgICogTGVhdmVzIHRoZSB2b2ljZSBjaGFubmVsIHRoZSBib3QgdXNlciBpcyBjdXJyZW50bHkgaW4uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgbGVhdmVWb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVxdWVzdCBzb3VuZGJvYXJkIHNvdW5kcyBmb3IgYSBsaXN0IG9mIGd1aWxkcy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyBtdWx0aXBsZSAoc2VlIHJlbWFya3MpIF9SZXF1ZXN0IFNvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWRzIC0gVGhlIGd1aWxkcyB0byBnZXQgdGhlIHNvdW5kcyBmcm9tXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1NvdW5kYm9hcmQgU291bmRzXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiDimqDvuI8gRGlzY29yZCB3aWxsIHNlbmQgdGhlIF9Tb3VuZGJvYXJkIFNvdW5kc18gZm9yIGVhY2ggb2YgdGhlIGd1aWxkIGlkc1xuICAgKiBob3dldmVyIHlvdSBtYXkgbm90IHJlY2VpdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGV2ZW50cyBhcyB0aGUgaWRzIHBhc3NlZCB0byBfUmVxdWVzdCBTb3VuZGJvYXJkIFNvdW5kc18gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4gICAqIC0gVGhlIGJvdCBpcyBub3QgaW4gdGhlIHNlcnZlciBwcm92aWRlZFxuICAgKiAtIFRoZSBzaGFyZCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGZyb20gZG9lcyBub3QgcmVjZWl2ZSBldmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgZ3VpbGRcbiAgICpcbiAgICogVG8gYXZvaWQgdGhpcyBEaXNjb3JkZW5vIHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gZ3JvdXAgdGhlIGlkcyBiYXNlZCBvbiB3aGF0IHNoYXJkIHRoZXkgd2lsbCBuZWVkIHRvIGJlIHNlbnQsIGJ1dCB0aGlzIGludm9sdmVzIHNlbmRpbmcgbXVsdGlwbGUgbWVzc2FnZXMgaW4gbXVsdGlwbGUgc2hhcmRzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5LWV2ZW50cyNyZXF1ZXN0LXNvdW5kYm9hcmQtc291bmRzfVxuICAgKi9cbiAgcmVxdWVzdFNvdW5kYm9hcmRTb3VuZHM6IChndWlsZElkczogQmlnU3RyaW5nW10pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRoaXMgbWFuYWdlcnMgY2FjaGUgcmVsYXRlZCBzZXR0aW5ncy4gKi9cbiAgY2FjaGU6IHtcbiAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZDogYm9vbGVhblxuICAgICAgLyoqIFRoZSBwZW5kaW5nIHJlcXVlc3RzLiAqL1xuICAgICAgcGVuZGluZzogQ29sbGVjdGlvbjxzdHJpbmcsIFJlcXVlc3RNZW1iZXJSZXF1ZXN0PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RNZW1iZXJSZXF1ZXN0IHtcbiAgLyoqIFRoZSB1bmlxdWUgbm9uY2UgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbm9uY2U6IHN0cmluZ1xuICAvKiogVGhlIHJlc29sdmVyIGhhbmRsZXIgdG8gcnVuIHdoZW4gYWxsIG1lbWJlcnMgYXJyaXZlLiAqL1xuICByZXNvbHZlOiAodmFsdWU6IENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPiB8IFByb21pc2VMaWtlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj4pID0+IHZvaWRcbiAgLyoqIFRoZSBtZW1iZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFycml2ZWQgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbWVtYmVyczogRGlzY29yZE1lbWJlcldpdGhVc2VyW11cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNvbm5lY3Rpb24iLCJ1cmwiLCJzaGFyZHMiLCJzZXNzaW9uU3RhcnRMaW1pdCIsIm1heENvbmN1cnJlbmN5IiwicmVtYWluaW5nIiwidG90YWwiLCJyZXNldEFmdGVyIiwiZ2F0ZXdheSIsImV2ZW50cyIsImNvbXByZXNzIiwidHJhbnNwb3J0Q29tcHJlc3Npb24iLCJpbnRlbnRzIiwicHJvcGVydGllcyIsIm9zIiwicHJvY2VzcyIsInBsYXRmb3JtIiwiYnJvd3NlciIsImRldmljZSIsInRva2VuIiwidmVyc2lvbiIsInRvdGFsU2hhcmRzIiwibGFzdFNoYXJkSWQiLCJmaXJzdFNoYXJkSWQiLCJ0b3RhbFdvcmtlcnMiLCJzaGFyZHNQZXJXb3JrZXIiLCJzcGF3blNoYXJkRGVsYXkiLCJzcHJlYWRTaGFyZHNJblJvdW5kUm9iaW4iLCJwcmVmZXJTbmFrZUNhc2UiLCJNYXAiLCJidWNrZXRzIiwiY2FjaGUiLCJyZXF1ZXN0TWVtYmVycyIsImVuYWJsZWQiLCJwZW5kaW5nIiwiQ29sbGVjdGlvbiIsImxvZ2dlciIsIm1ha2VQcmVzZW5jZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidW5kZWZpbmVkIiwicmVzaGFyZGluZyIsInNoYXJkc0Z1bGxQZXJjZW50YWdlIiwiY2hlY2tJbnRlcnZhbCIsImdldFNlc3Npb25JbmZvIiwidXBkYXRlR3VpbGRzU2hhcmRJZCIsImNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQiLCJkZWJ1ZyIsIm5lZWRlZCIsIkVycm9yIiwic2Vzc2lvbkluZm8iLCJKU09OIiwic3RyaW5naWZ5IiwiaW5mbyIsInBlcmNlbnRhZ2UiLCJyZXNoYXJkIiwiY2FsY3VsYXRlVG90YWxTaGFyZHMiLCJjbGVhciIsInByZXBhcmVCdWNrZXRzIiwicHJvbWlzZXMiLCJBcnJheSIsImZyb20iLCJlbnRyaWVzIiwibWFwIiwiYnVja2V0SWQiLCJidWNrZXQiLCJ3b3JrZXIiLCJ3b3JrZXJzIiwic2hhcmRJZCIsInF1ZXVlIiwidGVsbFdvcmtlclRvUHJlcGFyZSIsImlkIiwiYWxsIiwib25SZXNoYXJkaW5nU3dpdGNoIiwid29ya2VySWQiLCJzaGFyZCIsIlNoYXJkIiwibWVzc2FnZSIsIl9zaGFyZCIsInBheWxvYWQiLCJ0IiwiZCIsImd1aWxkcyIsImciLCJyZXF1ZXN0SWRlbnRpZnkiLCJmb3J3YXJkVG9Cb3QiLCJzZXQiLCJpZGVudGlmeSIsInZhbHVlcyIsIm9sZEhhbmRsZXIiLCJfIiwic2h1dGRvd24iLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJSZXNoYXJkZWQiLCJNYXRoIiwiY2VpbCIsImNhbGN1bGF0ZVdvcmtlcklkIiwibWluIiwiZmxvb3IiLCJpIiwibGVha3lCdWNrZXQiLCJMZWFreUJ1Y2tldCIsIm1heCIsInJlZmlsbEFtb3VudCIsInJlZmlsbEludGVydmFsIiwiZ2V0IiwiZmluZCIsInciLCJwdXNoIiwic3Bhd25TaGFyZHMiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsImNsZWFySW50ZXJ2YWwiLCJjaGVja0ludGVydmFsSWQiLCJ3YXJuIiwic2V0SW50ZXJ2YWwiLCJyZXNoYXJkaW5nSW5mbyIsImNvZGUiLCJyZWFzb24iLCJjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCIsImNsb3NlIiwic2VuZFBheWxvYWQiLCJzZW5kIiwiYWNxdWlyZSIsImtpbGwiLCJkZWxldGUiLCJjYWxjdWxhdGVTaGFyZElkIiwiZ3VpbGRJZCIsIk51bWJlciIsIkJpZ0ludCIsImpvaW5Wb2ljZUNoYW5uZWwiLCJjaGFubmVsSWQiLCJvcCIsIkdhdGV3YXlPcGNvZGVzIiwiVm9pY2VTdGF0ZVVwZGF0ZSIsImd1aWxkX2lkIiwidG9TdHJpbmciLCJjaGFubmVsX2lkIiwic2VsZl9tdXRlIiwic2VsZk11dGUiLCJzZWxmX2RlYWYiLCJzZWxmRGVhZiIsImVkaXRCb3RTdGF0dXMiLCJkYXRhIiwianNvblNhZmVSZXBsYWNlciIsImVkaXRTaGFyZFN0YXR1cyIsIlByZXNlbmNlVXBkYXRlIiwic2luY2UiLCJhZmsiLCJhY3Rpdml0aWVzIiwic3RhdHVzIiwibGltaXQiLCJHYXRld2F5SW50ZW50cyIsIkd1aWxkTWVtYmVycyIsInVzZXJJZHMiLCJsZW5ndGgiLCJub25jZSIsImhhcyIsInJhbmRvbUJ5dGVzIiwibWVtYmVycyIsInJlamVjdCIsIlJlcXVlc3RHdWlsZE1lbWJlcnMiLCJxdWVyeSIsInByZXNlbmNlcyIsInVzZXJfaWRzIiwibGVhdmVWb2ljZUNoYW5uZWwiLCJyZXF1ZXN0U291bmRib2FyZFNvdW5kcyIsImd1aWxkSWRzIiwiaWRzIiwiUmVxdWVzdFNvdW5kYm9hcmRTb3VuZHMiLCJndWlsZF9pZHMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBaUJnQkE7OztlQUFBQTs7OzRCQWpCWTt1QkFZckI7dUJBQzJEOzhEQUNoRDt3QkFDaUg7Ozs7OztBQUU1SCxTQUFTQSxxQkFBcUJDLE9BQW9DO0lBQ3ZFLE1BQU1DLG9CQUFvQkQsUUFBUUUsVUFBVSxJQUFJO1FBQzlDQyxLQUFLO1FBQ0xDLFFBQVE7UUFDUkMsbUJBQW1CO1lBQ2pCQyxnQkFBZ0I7WUFDaEJDLFdBQVc7WUFDWEMsT0FBTztZQUNQQyxZQUFZLE9BQU8sS0FBSyxLQUFLO1FBQy9CO0lBQ0Y7SUFFQSxNQUFNQyxVQUEwQjtRQUM5QkMsUUFBUVgsUUFBUVcsTUFBTSxJQUFJLENBQUM7UUFDM0JDLFVBQVVaLFFBQVFZLFFBQVEsSUFBSTtRQUM5QkMsc0JBQXNCYixRQUFRYSxvQkFBb0IsSUFBSTtRQUN0REMsU0FBU2QsUUFBUWMsT0FBTyxJQUFJO1FBQzVCQyxZQUFZO1lBQ1ZDLElBQUloQixRQUFRZSxVQUFVLEVBQUVDLE1BQU1DLFFBQVFDLFFBQVE7WUFDOUNDLFNBQVNuQixRQUFRZSxVQUFVLEVBQUVJLFdBQVc7WUFDeENDLFFBQVFwQixRQUFRZSxVQUFVLEVBQUVLLFVBQVU7UUFDeEM7UUFDQUMsT0FBT3JCLFFBQVFxQixL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
@@ -42,7 +42,9 @@ var TransportCompression = /*#__PURE__*/ function(TransportCompression) {
42
42
  * ZStd-Stream Transport Compression.
43
43
  *
44
44
  * @remarks
45
- * Uses `fzstd` to decompress the payloads. `fzstd` is an optional dependency, it is required to be installed for this compression.
45
+ * This will use `node:zlib` zstd implementation if available (node v22.15+ or node v23.8+) or `fzstd` otherwise.
46
+ *
47
+ * `fzstd` is an optional dependency. You will need to install it to be able to use it.
46
48
  *
47
49
  * @see https://discord.com/developers/docs/topics/gateway#zstdstream
48
50
  */ TransportCompression["zstd"] = "zstd-stream";
@@ -61,4 +63,4 @@ var ShardSocketCloseCodes = /*#__PURE__*/ function(ShardSocketCloseCodes) {
61
63
  return ShardSocketCloseCodes;
62
64
  }({});
63
65
 
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGBmenN0ZGAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHMuIGBmenN0ZGAgaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSwgaXQgaXMgcmVxdWlyZWQgdG8gYmUgaW5zdGFsbGVkIGZvciB0aGlzIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3pzdGRzdHJlYW1cbiAgICovXG4gIHpzdGQgPSAnenN0ZC1zdHJlYW0nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGF0ZXZlciB0byBlbmFibGUgUGF5bG9hZCBjb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgge0BsaW5rIHRyYW5zcG9ydENvbXByZXNzaW9ufVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3BheWxvYWQtY29tcHJlc3Npb25cbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50czogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb246IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEhlYXJ0IHtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBoZWFydGJlYXQgd2FzIGFja25vd2xlZGdlZCBieSBEaXNjb3JkIGluIHRpbWUuICovXG4gIGFja25vd2xlZGdlZDogYm9vbGVhblxuICAvKiogSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXRzIHJlcXVlc3RlZCBieSBEaXNjb3JkLiAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgaWRlbnRpZmllZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIGZyb20gRGlzY29yZC4gKi9cbiAgbWVzc2FnZT86IChzaGFyZDogU2hhcmQsIHBheWxvYWQ6IENhbWVsaXplPERpc2NvcmRHYXRld2F5UGF5bG9hZD4pID0+IHVua25vd25cbn1cblxuZXhwb3J0IGVudW0gU2hhcmRTb2NrZXRDbG9zZUNvZGVzIHtcbiAgLyoqIEEgcmVndWxhciBTaGFyZCBzaHV0ZG93bi4gKi9cbiAgU2h1dGRvd24gPSAzMDAwLFxuICAvKiogQSByZXN1bWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24gPSAzMDI0LFxuICAvKipcbiAgICogRGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBpbiB0aW1lLlxuICAgKiBDbG9zaW5nIHRoZSBzaGFyZCBhbmQgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbi5cbiAgICovXG4gIFpvbWJpZWRDb25uZWN0aW9uID0gMzAxMCxcbiAgLyoqIERpc2NvcmRlbm8ncyBnYXRld2F5IHRlc3RzIGhhZSBiZWVuIGZpbmlzaGVkLCB0aGVyZWZvcmUgdGhlIFNoYXJkIGNhbiBiZSB0dXJuZWQgb2ZmLiAqL1xuICBUZXN0aW5nRmluaXNoZWQgPSAzMDY0LFxuICAvKiogU3BlY2lhbCBjbG9zZSBjb2RlIHJlc2VydmVkIGZvciBEaXNjb3JkZW5vJ3MgemVyby1kb3dudGltZSByZXNoYXJkaW5nIHN5c3RlbS4gKi9cbiAgUmVzaGFyZGVkID0gMzA2NSxcbiAgLyoqIFNoYXJkIGlzIHJlLWlkZW50aWZ5aW5nIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZUlkZW50aWZ5aW5nID0gMzA2Nixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZFNvY2tldFJlcXVlc3Qge1xuICAvKiogVGhlIE9QLUNvZGUgZm9yIHRoZSBwYXlsb2FkIHRvIHNlbmQuICovXG4gIG9wOiBHYXRld2F5T3Bjb2Rlc1xuICAvKiogUGF5bG9hZCBkYXRhLiAqL1xuICBkOiB1bmtub3duXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVm9pY2VTdGF0ZSB7XG4gIC8qKiBpZCBvZiB0aGUgZ3VpbGQgKi9cbiAgZ3VpbGRJZDogc3RyaW5nXG4gIC8qKiBpZCBvZiB0aGUgdm9pY2UgY2hhbm5lbCBjbGllbnQgd2FudHMgdG8gam9pbiAobnVsbCBpZiBkaXNjb25uZWN0aW5nKSAqL1xuICBjaGFubmVsSWQ6IHN0cmluZyB8IG51bGxcbiAgLyoqIElzIHRoZSBjbGllbnQgbXV0ZWQgKi9cbiAgc2VsZk11dGU6IGJvb2xlYW5cbiAgLyoqIElzIHRoZSBjbGllbnQgZGVhZmVuZWQgKi9cbiAgc2VsZkRlYWY6IGJvb2xlYW5cbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJTaGFyZFN0YXRlIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBd0pZQTtlQUFBQTs7UUFySkFDO2VBQUFBOztRQWlCQUM7ZUFBQUE7OztBQWpCTCxJQUFBLEFBQUtELG9DQUFBQTtJQUNWLCtFQUErRTtJQUUvRSwySEFBMkg7SUFFM0gsdUVBQXVFO0lBRXZFLCtIQUErSDtJQUUvSCwwRUFBMEU7SUFFMUUsMERBQTBEO0lBRTFELGtIQUFrSDtXQWJ4R0E7O0FBaUJMLElBQUEsQUFBS0MsOENBQUFBO0lBQ1Y7Ozs7Ozs7R0FPQztJQUVEOzs7Ozs7O0dBT0M7V0FqQlNBOztBQW9JTCxJQUFBLEFBQUtGLCtDQUFBQTtJQUNWLDhCQUE4QjtJQUU5QixxRkFBcUY7SUFFckY7OztHQUdDO0lBRUQseUZBQXlGO0lBRXpGLGtGQUFrRjtJQUVsRiw2RUFBNkU7V0FkbkVBIn0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHdpbGwgdXNlIGBub2RlOnpsaWJgIHpzdGQgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlIChub2RlIHYyMi4xNSsgb3Igbm9kZSB2MjMuOCspIG9yIGBmenN0ZGAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBgZnpzdGRgIGlzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3kuIFlvdSB3aWxsIG5lZWQgdG8gaW5zdGFsbCBpdCB0byBiZSBhYmxlIHRvIHVzZSBpdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN6c3Rkc3RyZWFtXG4gICAqL1xuICB6c3RkID0gJ3pzdGQtc3RyZWFtJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEdhdGV3YXlDb25maWcge1xuICAvKipcbiAgICogV2hhdGV2ZXIgdG8gZW5hYmxlIFBheWxvYWQgY29tcHJlc3Npb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIHtAbGluayB0cmFuc3BvcnRDb21wcmVzc2lvbn1cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNwYXlsb2FkLWNvbXByZXNzaW9uXG4gICAqL1xuICBjb21wcmVzczogYm9vbGVhblxuICAvKipcbiAgICogV2hhdCBUcmFuc3BvcnQgQ29tcHJlc3Npb24gc2hvdWxkIGJlIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdHJhbnNwb3J0LWNvbXByZXNzaW9uXG4gICAqL1xuICB0cmFuc3BvcnRDb21wcmVzc2lvbjogVHJhbnNwb3J0Q29tcHJlc3Npb24gfCBudWxsXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM6IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllczoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uOiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRzIHRvIGNvbm5lY3QgdG8gYWNyb3NzIHRoZSBlbnRpcmUgYm90LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkczogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRIZWFydCB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhcnRiZWF0IHdhcyBhY2tub3dsZWRnZWQgYnkgRGlzY29yZCBpbiB0aW1lLiAqL1xuICBhY2tub3dsZWRnZWQ6IGJvb2xlYW5cbiAgLyoqIEludGVydmFsIGJldHdlZW4gaGVhcnRiZWF0cyByZXF1ZXN0ZWQgYnkgRGlzY29yZC4gKi9cbiAgaW50ZXJ2YWw6IG51bWJlclxuICAvKiogSWQgb2YgdGhlIGludGVydmFsLCB3aGljaCBpcyB1c2VkIGZvciBzZW5kaW5nIHRoZSBoZWFydGJlYXRzLiAqL1xuICBpbnRlcnZhbElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFVuaXggKGluIG1pbGxpc2Vjb25kcykgdGltZXN0YW1wIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IEFDSyB3YXMgcmVjZWl2ZWQgZnJvbSBEaXNjb3JkLiAqL1xuICBsYXN0QWNrPzogbnVtYmVyXG4gIC8qKiBVbml4IHRpbWVzdGFtcCAoaW4gbWlsbGlzZWNvbmRzKSB3aGVuIHRoZSBsYXN0IGhlYXJ0YmVhdCB3YXMgc2VudC4gKi9cbiAgbGFzdEJlYXQ/OiBudW1iZXJcbiAgLyoqIFJvdW5kIHRyaXAgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIFNoYXJkIHRvIERpc2NvcmQgYW5kIGJhY2suXG4gICAqIENhbGN1bGF0ZWQgdXNpbmcgdGhlIGhlYXJ0YmVhdCBzeXN0ZW0uXG4gICAqIE5vdGU6IHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkIHVudGlsIHRoZSBmaXJzdCBoZWFydGJlYXQgdG8gRGlzY29yZCBoYXMgaGFwcGVuZWQuXG4gICAqL1xuICBydHQ/OiBudW1iZXJcbiAgLyoqIElkIG9mIHRoZSB0aW1lb3V0IHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIHNpbmNlIGl0J3MgXCJzcGVjaWFsXCIuICovXG4gIHRpbWVvdXRJZD86IE5vZGVKUy5UaW1lb3V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRFdmVudHMge1xuICAvKiogQSBoZWFydGJlYXQgaGFzIGJlZW4gc2VuZC4gKi9cbiAgaGVhcnRiZWF0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogQSBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZC4gKi9cbiAgaGVhcnRiZWF0QWNrPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogU2hhcmQgaGFzIHJlY2VpdmVkIGEgSGVsbG8gcGF5bG9hZC4gKi9cbiAgaGVsbG8/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgU2hhcmRzIHNlc3Npb24gaGFzIGJlZW4gaW52YWxpZGF0ZWQuICovXG4gIGludmFsaWRTZXNzaW9uPzogKHNoYXJkOiBTaGFyZCwgcmVzdW1hYmxlOiBib29sZWFuKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgYSByZXN1bWUgYWN0aW9uLiAqL1xuICByZXN1bWluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3VjY2Vzc2Z1bGx5IHJlc3VtZWQgYW4gb2xkIHNlc3Npb24uICovXG4gIHJlc3VtZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBEaXNjb3JkIGhhcyByZXF1ZXN0ZWQgdGhlIFNoYXJkIHRvIHJlY29ubmVjdC4gKi9cbiAgcmVxdWVzdGVkUmVjb25uZWN0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIHN0YXJ0ZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBpcyBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBmcm9tIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBkaXNjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgdG8gaWRlbnRpZnkgaXRzZWxmIHRvIERpc2NvcmQuICovXG4gIGlkZW50aWZ5aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBpZGVudGlmaWVkIGl0c2VsZiB3aXRoIERpc2NvcmQuICovXG4gIHJlYWR5PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyByZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSBEaXNjb3JkLiAqL1xuICBtZXNzYWdlPzogKHNoYXJkOiBTaGFyZCwgcGF5bG9hZDogQ2FtZWxpemU8RGlzY29yZEdhdGV3YXlQYXlsb2FkPikgPT4gdW5rbm93blxufVxuXG5leHBvcnQgZW51bSBTaGFyZFNvY2tldENsb3NlQ29kZXMge1xuICAvKiogQSByZWd1bGFyIFNoYXJkIHNodXRkb3duLiAqL1xuICBTaHV0ZG93biA9IDMwMDAsXG4gIC8qKiBBIHJlc3VtZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiA9IDMwMjQsXG4gIC8qKlxuICAgKiBEaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGluIHRpbWUuXG4gICAqIENsb3NpbmcgdGhlIHNoYXJkIGFuZCBjcmVhdGluZyBhIG5ldyBzZXNzaW9uLlxuICAgKi9cbiAgWm9tYmllZENvbm5lY3Rpb24gPSAzMDEwLFxuICAvKiogRGlzY29yZGVubydzIGdhdGV3YXkgdGVzdHMgaGFlIGJlZW4gZmluaXNoZWQsIHRoZXJlZm9yZSB0aGUgU2hhcmQgY2FuIGJlIHR1cm5lZCBvZmYuICovXG4gIFRlc3RpbmdGaW5pc2hlZCA9IDMwNjQsXG4gIC8qKiBTcGVjaWFsIGNsb3NlIGNvZGUgcmVzZXJ2ZWQgZm9yIERpc2NvcmRlbm8ncyB6ZXJvLWRvd250aW1lIHJlc2hhcmRpbmcgc3lzdGVtLiAqL1xuICBSZXNoYXJkZWQgPSAzMDY1LFxuICAvKiogU2hhcmQgaXMgcmUtaWRlbnRpZnlpbmcgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlSWRlbnRpZnlpbmcgPSAzMDY2LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkU29ja2V0UmVxdWVzdCB7XG4gIC8qKiBUaGUgT1AtQ29kZSBmb3IgdGhlIHBheWxvYWQgdG8gc2VuZC4gKi9cbiAgb3A6IEdhdGV3YXlPcGNvZGVzXG4gIC8qKiBQYXlsb2FkIGRhdGEuICovXG4gIGQ6IHVua25vd25cbn1cblxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVWb2ljZVN0YXRlIHtcbiAgLyoqIGlkIG9mIHRoZSBndWlsZCAqL1xuICBndWlsZElkOiBzdHJpbmdcbiAgLyoqIGlkIG9mIHRoZSB2b2ljZSBjaGFubmVsIGNsaWVudCB3YW50cyB0byBqb2luIChudWxsIGlmIGRpc2Nvbm5lY3RpbmcpICovXG4gIGNoYW5uZWxJZDogc3RyaW5nIHwgbnVsbFxuICAvKiogSXMgdGhlIGNsaWVudCBtdXRlZCAqL1xuICBzZWxmTXV0ZTogYm9vbGVhblxuICAvKiogSXMgdGhlIGNsaWVudCBkZWFmZW5lZCAqL1xuICBzZWxmRGVhZjogYm9vbGVhblxufVxuIl0sIm5hbWVzIjpbIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlNoYXJkU3RhdGUiLCJUcmFuc3BvcnRDb21wcmVzc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUEwSllBO2VBQUFBOztRQXZKQUM7ZUFBQUE7O1FBaUJBQztlQUFBQTs7O0FBakJMLElBQUEsQUFBS0Qsb0NBQUFBO0lBQ1YsK0VBQStFO0lBRS9FLDJIQUEySDtJQUUzSCx1RUFBdUU7SUFFdkUsK0hBQStIO0lBRS9ILDBFQUEwRTtJQUUxRSwwREFBMEQ7SUFFMUQsa0hBQWtIO1dBYnhHQTs7QUFpQkwsSUFBQSxBQUFLQyw4Q0FBQUE7SUFDVjs7Ozs7OztHQU9DO0lBRUQ7Ozs7Ozs7OztHQVNDO1dBbkJTQTs7QUFzSUwsSUFBQSxBQUFLRiwrQ0FBQUE7SUFDViw4QkFBOEI7SUFFOUIscUZBQXFGO0lBRXJGOzs7R0FHQztJQUVELHlGQUF5RjtJQUV6RixrRkFBa0Y7SUFFbEYsNkVBQTZFO1dBZG5FQSJ9