@kontur.candy/tools 2.201.0 → 2.203.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +11 -3
  2. package/distr/Common/CandyApiClient/CandyApiClient.js +9 -1
  3. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -1
  4. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +7 -1
  5. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -1
  6. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  7. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -1
  8. package/distr/Common/FSPrinterClient/FSPrinterClient.js +22 -6
  9. package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -1
  10. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +1 -1
  11. package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -1
  12. package/distr/Common/HttpClient/HttpClient.js +5 -1
  13. package/distr/Common/HttpClient/HttpClient.js.map +1 -1
  14. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  15. package/distr/Common/HttpClient/IHttpClient.js.map +1 -1
  16. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +3 -3
  17. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -1
  18. package/distr/Common/ModelPath/ModelPath.js +10 -1
  19. package/distr/Common/ModelPath/ModelPath.js.map +1 -1
  20. package/distr/Common/TypingUtils.js +8 -1
  21. package/distr/Common/TypingUtils.js.map +1 -1
  22. package/distr/Common/UseTypedSelector.js +3 -2
  23. package/distr/Common/UseTypedSelector.js.map +1 -1
  24. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +7 -2
  25. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -1
  26. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +7 -2
  27. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -1
  28. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +7 -2
  29. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -1
  30. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +25 -5
  31. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -1
  32. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +10 -4
  33. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -1
  34. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +35 -13
  35. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -1
  36. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  37. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  38. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  39. package/distr/Tools/src/SelfUpdate.js +8 -2
  40. package/distr/Tools/src/SelfUpdate.js.map +1 -1
  41. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +37 -29
  42. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  43. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +59 -54
  44. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  45. package/package.json +4 -2
package/README.md CHANGED
@@ -204,6 +204,14 @@ candy upgrade --engine latest 9900101
204
204
 
205
205
  Не выполнять генарцию формы из сахара, будет выполняться только компиляция исходников формы из каталога форм.
206
206
 
207
+ * `--skip-webpack`
208
+
209
+ Не запускать компиляцию сгенерированного кода. Для отладки результатов генерации.
210
+
211
+ * `--skip-engine`
212
+
213
+ Не запускать сборку runtime-движка. Для отладки результатов генерации.
214
+
207
215
  * `--no-reformat`
208
216
 
209
217
  Отлючает форматирование генерируемого кода. Работает, только если версия генератора поддерживает эту опцию. Используется для ускорения сборки форм.
@@ -227,7 +235,7 @@ candy upgrade --engine latest 9900101
227
235
  ### Примеры использования
228
236
  ### Написание и просмотр форм
229
237
 
230
- В каталоге candy.farm запустить команды
238
+ В каталоге candy.farm запустить команды
231
239
 
232
240
  ```
233
241
  candy build 123456 -w
@@ -246,7 +254,7 @@ candy local-server
246
254
  candy build 123456
247
255
  ```
248
256
 
249
- ### Переключение и сборка формы на использование последней стабильной
257
+ ### Переключение и сборка формы на использование последней стабильной
250
258
 
251
259
  ```
252
260
  candy build 123456 --use-last-stable-version
@@ -256,7 +264,7 @@ candy build 123456 --use-last-stable-version
256
264
 
257
265
  ### Отладка форм с локальным движком
258
266
 
259
- В каталоге candy.farm запустить команды
267
+ В каталоге candy.farm запустить команды
260
268
 
261
269
  ```
262
270
  candy dev-build 123456 -w
@@ -120,6 +120,9 @@ class CandyApiDraftClient {
120
120
  getHrefToConvertationLog() {
121
121
  return this.httpClient.url(this.getDraftUrl("conversion"));
122
122
  }
123
+ async getInnerFuf() {
124
+ return (await this.httpClient.get(this.getDraftUrl(_DraftPresentationType.DraftPresentationType.innerFuf))).text();
125
+ }
123
126
  getHrefToDownloadInnerFuf() {
124
127
  return this.getHrefDownloadDraftPresentation(_DraftPresentationType.DraftPresentationType.innerFuf);
125
128
  }
@@ -508,6 +511,11 @@ class CandyApiDraftClient {
508
511
  }));
509
512
  await this.httpClient.patch(uri).withJsonBody(finalRules);
510
513
  }
514
+ async normalizeDirtyMasks() {
515
+ const uri = this.getDraftUrl("inner/normalize-dirty-masks");
516
+ const result = await this.httpClient.post(uri);
517
+ return result.status == 200 ? await result.json() : result.status;
518
+ }
511
519
  async searchInstancesByText(text, pathsPrefix, pathsToSearch, maxInstanceCount) {
512
520
  const maxInstanceCountParams = maxInstanceCount != undefined ? {
513
521
  maxInstanceCount: maxInstanceCount
@@ -567,4 +575,4 @@ class CandyApiDraftClient {
567
575
  }
568
576
  }
569
577
  exports.CandyApiDraftClient = CandyApiDraftClient;
570
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJDYW5keVJlc291cmNlWm9uZXMiLCJleHBvcnRzIiwiVGVzdEZvcm1zIiwiU2VydmVyRXJyb3JzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImV4Y2VwdGlvbkxvZ2dlciIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmIiwiZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24iLCJEcmFmdFByZXNlbnRhdGlvblR5cGUiLCJpbm5lckZ1ZiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic3RhdHVzIiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJjcmVhdGVEcmFmdEF0dGFjaG1lbnQiLCJwYXRoIiwib3BlbkxvYWRlZEF0dGFjaG1lbnRBc0RyYWZ0IiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0Iiwid2l0aFJhd0JvZHkiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImlnbm9yZVNpemVDaGVjayIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsImFyZ3MiLCJhcmd1bWVudHMiLCJpbXBvcnRYbWxzIiwiaXNJbXBvcnRCeUZ1ZiIsImltcG9ydEJ5RnVmIiwiRnVmRHJpdmVVcmlzIiwic2V0RHJhZnRTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0RHJhZnRTZXR0aW5ncyIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uIiwidXJpIiwiZmluYWxSdWxlcyIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsInF1ZXJ5Q29sbGVjdGlvbiIsInJlc29sdmVJbm5lclBhdGgiLCJjdXN0b21Ob3JtYWxpemUiLCJwYXRoUHJlZml4ZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJkZWxldGVJbnN0YW5jZXMiLCJkZWxldGluZ1J1bGVzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsInF1ZXJ5UGFyYW1zIiwicHJpbnQiLCJ0eXBlIiwicHJpbnRFeGNlbCIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgRXhjZXB0aW9uTG9nZ2VyLCBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IElDb21iaW5lQnlUcmFuc2ZlcnMgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvTW9kYWxzL1VwbG9hZFNlY3Rpb24vVHlwZXNcIjtcbmltcG9ydCB7IEFic29sdXRlTW9kZWxQYXRoLCBjb252ZXJ0VG9MZWdhY3lQYXRoIH0gZnJvbSBcIi4uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBCYXNlR2V0RnVmUmVzcG9uc2UsXG4gICAgQ2hlY2tTY2VuYXJpb1R5cGUsXG4gICAgRHJhZnRTZXR0aW5ncyxcbiAgICBGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZSxcbiAgICBJQ2FuZHlBcGlDbGllbnQsXG4gICAgSUNhbmR5QXBpRHJhZnRDbGllbnQsXG4gICAgSUlubmVyQ2hhbmdlUmVzdWx0LFxuICAgIElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZ1ZlNpemVUb29MYXJnZUVycm9yIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0Z1ZlNpemVUb29MYXJnZUVycm9yXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9RdWVyeUNvbGxlY3Rvbi9Jbm5lclF1ZXJ5UmVxdWVzdFwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUXVlcnlDb2xsZWN0b24vSW5uZXJRdWVyeVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNvbHZlSW5uZXJQYXRoUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1Jlc29sdmVJbm5lclBhdGhSZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNvbHZlUGF0aFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvUmVzb2x2ZVBhdGhSZXNwb25zZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGNvbnN0IENhbmR5UmVzb3VyY2Vab25lcyA9IHtcbiAgICBUZXN0Rm9ybXM6IFwiY2FuZHkucmVzb3VyY2VzLnRlc3QtZm9ybXNcIixcbn07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKHNwZWM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHNwZWMuc2tpcCA/IFwiLVwiIDogXCJcIikgK1xuICAgICAgICAoc3BlYy5wYXRoT3JQYXRoUHJlZml4ID09PSBcIipcIiA/IHNwZWMucGF0aE9yUGF0aFByZWZpeCA6IHNwZWMucGF0aE9yUGF0aFByZWZpeC50b0xlZ2FjeVBhdGgoKSlcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGUsXG4gICAgICAgIGV4Y2VwdGlvbkxvZ2dlcj86IEV4Y2VwdGlvbkxvZ2dlclxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChcbiAgICAgICAgICAgIGZldGNoSW1wbCxcbiAgICAgICAgICAgIGJhc2VVcmwsXG4gICAgICAgICAgICBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJlcnJvcmxvZ1wiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBjaGVja1NjZW5hcmlvczogY2hlY2tTY2VuYXJpb3MgfSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RnVmV2l0aEF0dGFjaG1lbnRzKCk6IFByb21pc2U8RnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFVybChcImdldC1mdWYtd2l0aC1hdHRhY2htZW50c1wiKSlcbiAgICAgICAgICAgIC5qc29uPEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxGdWYocnVsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxCYXNlR2V0RnVmUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248QmFzZUdldEZ1ZlJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDkpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gYXdhaXQgcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0KFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9wYXRjaC13aXRoLW5vcm1hbGl6YXRpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiwgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBJSW5uZXJDaGFuZ2VSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXIyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEF0dGFjaG1lbnQoZ2Z2OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvY3JlYXRlLWF0dGFjaG1lbnQtZHJhZnRcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIHBhdGg6IHBhdGggfSlcbiAgICAgICAgICAgIC5qc29uPEF0dGFjaEluZm8+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5Mb2FkZWRBdHRhY2htZW50QXNEcmFmdChpZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvb3Blbi1sb2FkZWQtYXR0YWNobWVudC1hcy1kcmFmdFwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBhdHRhY2htZW50SWQ6IGlkIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248QXR0YWNoSW5mbz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGlnbm9yZVNpemVDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpLCBpZ25vcmVTaXplQ2hlY2s6IGlnbm9yZVNpemVDaGVjayA/PyBmYWxzZSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZShcbiAgICAgICAgZmlsZXM6IElDb21iaW5lQnlUcmFuc2ZlcnNbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmUtbXVsdGlwbGVgKVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZmlsZXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoXCJ2MS9maWxlcy9leGNlbHMtdG8tcGFydGlhbC1mdWZzXCIpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aChcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZVxuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFyZ3M/OiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZzXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBkcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg1MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0WG1scyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgY29tYmluYXRvclR5cGU6IENvbWJpbmF0b3JUeXBlLFxuICAgICAgICBpc0ltcG9ydEJ5RnVmOiBib29sZWFuLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQteG1sc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgY29tYmluYXRvclR5cGU6IGNvbWJpbmF0b3JUeXBlLFxuICAgICAgICAgICAgICAgIGltcG9ydEJ5RnVmOiBpc0ltcG9ydEJ5RnVmLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBGdWZEcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RHJhZnRTZXR0aW5ncyhzZXR0aW5nczogRHJhZnRTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL3NldC1zZXR0aW5nc1wiKSkud2l0aEpzb25Cb2R5KHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHJhZnRTZXR0aW5ncygpOiBQcm9taXNlPERyYWZ0U2V0dGluZ3M+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9nZXQtc2V0dGluZ3NcIikpO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uPERyYWZ0U2V0dGluZ3M+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidGVzdC1ub3JtYWxpemVcIikpLndpdGhKc29uQm9keShydWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zLyR7cHJlc2VudGF0aW9uVHlwZS50b1N0cmluZygpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uKHJ1bGVzOiBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL3NldC1tdWx0aXBsZS13aXRoLW5vcm1hbGl6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IGZpbmFsUnVsZXMgPSBydWxlcy5tYXAoeCA9PiAoeyAuLi54LCBwYXRoOiBjb252ZXJ0VG9MZWdhY3lQYXRoKHgucGF0aCkgfSkpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoSnNvbkJvZHkoZmluYWxSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5Q29sbGVjdGlvbihyZXF1ZXN0OiBJbm5lclF1ZXJ5UmVxdWVzdCwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8SW5uZXJRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9xdWVyeS1jb2xsZWN0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShyZXF1ZXN0KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPElubmVyUXVlcnlSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUlubmVyUGF0aChcbiAgICAgICAgcmVxdWVzdDogUmVzb2x2ZUlubmVyUGF0aFJlcXVlc3QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFJlc29sdmVQYXRoUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3Jlc29sdmUtaW5uZXItcGF0aFwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWVzdClcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxSZXNvbHZlUGF0aFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBBYnNvbHV0ZU1vZGVsUGF0aFtdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBub3JtYWxpemVySWQ6IG5vcm1hbGl6ZXJJZCB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jdXN0b20tbm9ybWFsaXplXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhQcmVmaXhlcy5tYXAoeCA9PiB4LnRvU3RyaW5nKCkpKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxu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
578
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJDYW5keVJlc291cmNlWm9uZXMiLCJleHBvcnRzIiwiVGVzdEZvcm1zIiwiU2VydmVyRXJyb3JzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImV4Y2VwdGlvbkxvZ2dlciIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRJbm5lckZ1ZiIsIkRyYWZ0UHJlc2VudGF0aW9uVHlwZSIsImlubmVyRnVmIiwidGV4dCIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic3RhdHVzIiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJjcmVhdGVEcmFmdEF0dGFjaG1lbnQiLCJwYXRoIiwib3BlbkxvYWRlZEF0dGFjaG1lbnRBc0RyYWZ0IiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0Iiwid2l0aFJhd0JvZHkiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImlnbm9yZVNpemVDaGVjayIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsImFyZ3MiLCJhcmd1bWVudHMiLCJpbXBvcnRYbWxzIiwiaXNJbXBvcnRCeUZ1ZiIsImltcG9ydEJ5RnVmIiwiRnVmRHJpdmVVcmlzIiwic2V0RHJhZnRTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0RHJhZnRTZXR0aW5ncyIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uIiwidXJpIiwiZmluYWxSdWxlcyIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJub3JtYWxpemVEaXJ0eU1hc2tzIiwic2VhcmNoSW5zdGFuY2VzQnlUZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsInF1ZXJ5Q29sbGVjdGlvbiIsInJlc29sdmVJbm5lclBhdGgiLCJjdXN0b21Ob3JtYWxpemUiLCJwYXRoUHJlZml4ZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJkZWxldGVJbnN0YW5jZXMiLCJkZWxldGluZ1J1bGVzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsInF1ZXJ5UGFyYW1zIiwicHJpbnQiLCJ0eXBlIiwicHJpbnRFeGNlbCIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgRXhjZXB0aW9uTG9nZ2VyLCBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IElDb21iaW5lQnlUcmFuc2ZlcnMgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvTW9kYWxzL1VwbG9hZFNlY3Rpb24vVHlwZXNcIjtcbmltcG9ydCB7IEFic29sdXRlTW9kZWxQYXRoLCBjb252ZXJ0VG9MZWdhY3lQYXRoIH0gZnJvbSBcIi4uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBCYXNlR2V0RnVmUmVzcG9uc2UsXG4gICAgQ2hlY2tTY2VuYXJpb1R5cGUsXG4gICAgRHJhZnRTZXR0aW5ncyxcbiAgICBGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZSxcbiAgICBJQ2FuZHlBcGlDbGllbnQsXG4gICAgSUNhbmR5QXBpRHJhZnRDbGllbnQsXG4gICAgSUlubmVyQ2hhbmdlUmVzdWx0LFxuICAgIElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZ1ZlNpemVUb29MYXJnZUVycm9yIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0Z1ZlNpemVUb29MYXJnZUVycm9yXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9RdWVyeUNvbGxlY3Rvbi9Jbm5lclF1ZXJ5UmVxdWVzdFwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUXVlcnlDb2xsZWN0b24vSW5uZXJRdWVyeVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNvbHZlSW5uZXJQYXRoUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1Jlc29sdmVJbm5lclBhdGhSZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNvbHZlUGF0aFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvUmVzb2x2ZVBhdGhSZXNwb25zZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGNvbnN0IENhbmR5UmVzb3VyY2Vab25lcyA9IHtcbiAgICBUZXN0Rm9ybXM6IFwiY2FuZHkucmVzb3VyY2VzLnRlc3QtZm9ybXNcIixcbn07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKHNwZWM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHNwZWMuc2tpcCA/IFwiLVwiIDogXCJcIikgK1xuICAgICAgICAoc3BlYy5wYXRoT3JQYXRoUHJlZml4ID09PSBcIipcIiA/IHNwZWMucGF0aE9yUGF0aFByZWZpeCA6IHNwZWMucGF0aE9yUGF0aFByZWZpeC50b0xlZ2FjeVBhdGgoKSlcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGUsXG4gICAgICAgIGV4Y2VwdGlvbkxvZ2dlcj86IEV4Y2VwdGlvbkxvZ2dlclxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChcbiAgICAgICAgICAgIGZldGNoSW1wbCxcbiAgICAgICAgICAgIGJhc2VVcmwsXG4gICAgICAgICAgICBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbm5lckZ1ZigpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpKSkudGV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJlcnJvcmxvZ1wiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBjaGVja1NjZW5hcmlvczogY2hlY2tTY2VuYXJpb3MgfSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RnVmV2l0aEF0dGFjaG1lbnRzKCk6IFByb21pc2U8RnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFVybChcImdldC1mdWYtd2l0aC1hdHRhY2htZW50c1wiKSlcbiAgICAgICAgICAgIC5qc29uPEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxGdWYocnVsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxCYXNlR2V0RnVmUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248QmFzZUdldEZ1ZlJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDkpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gYXdhaXQgcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0KFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9wYXRjaC13aXRoLW5vcm1hbGl6YXRpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiwgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBJSW5uZXJDaGFuZ2VSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXIyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEF0dGFjaG1lbnQoZ2Z2OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvY3JlYXRlLWF0dGFjaG1lbnQtZHJhZnRcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIHBhdGg6IHBhdGggfSlcbiAgICAgICAgICAgIC5qc29uPEF0dGFjaEluZm8+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5Mb2FkZWRBdHRhY2htZW50QXNEcmFmdChpZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvb3Blbi1sb2FkZWQtYXR0YWNobWVudC1hcy1kcmFmdFwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBhdHRhY2htZW50SWQ6IGlkIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248QXR0YWNoSW5mbz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGlnbm9yZVNpemVDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpLCBpZ25vcmVTaXplQ2hlY2s6IGlnbm9yZVNpemVDaGVjayA/PyBmYWxzZSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZShcbiAgICAgICAgZmlsZXM6IElDb21iaW5lQnlUcmFuc2ZlcnNbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmUtbXVsdGlwbGVgKVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZmlsZXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoXCJ2MS9maWxlcy9leGNlbHMtdG8tcGFydGlhbC1mdWZzXCIpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aChcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZVxuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFyZ3M/OiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZzXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBkcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg1MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0WG1scyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgY29tYmluYXRvclR5cGU6IENvbWJpbmF0b3JUeXBlLFxuICAgICAgICBpc0ltcG9ydEJ5RnVmOiBib29sZWFuLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQteG1sc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgY29tYmluYXRvclR5cGU6IGNvbWJpbmF0b3JUeXBlLFxuICAgICAgICAgICAgICAgIGltcG9ydEJ5RnVmOiBpc0ltcG9ydEJ5RnVmLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBGdWZEcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RHJhZnRTZXR0aW5ncyhzZXR0aW5nczogRHJhZnRTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL3NldC1zZXR0aW5nc1wiKSkud2l0aEpzb25Cb2R5KHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHJhZnRTZXR0aW5ncygpOiBQcm9taXNlPERyYWZ0U2V0dGluZ3M+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9nZXQtc2V0dGluZ3NcIikpO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uPERyYWZ0U2V0dGluZ3M+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidGVzdC1ub3JtYWxpemVcIikpLndpdGhKc29uQm9keShydWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zLyR7cHJlc2VudGF0aW9uVHlwZS50b1N0cmluZygpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uKHJ1bGVzOiBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL3NldC1tdWx0aXBsZS13aXRoLW5vcm1hbGl6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IGZpbmFsUnVsZXMgPSBydWxlcy5tYXAoeCA9PiAoeyAuLi54LCBwYXRoOiBjb252ZXJ0VG9MZWdhY3lQYXRoKHgucGF0aCkgfSkpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoSnNvbkJvZHkoZmluYWxSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZURpcnR5TWFza3MoKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL25vcm1hbGl6ZS1kaXJ0eS1tYXNrc1wiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodXJpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5Q29sbGVjdGlvbihyZXF1ZXN0OiBJbm5lclF1ZXJ5UmVxdWVzdCwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8SW5uZXJRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9xdWVyeS1jb2xsZWN0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShyZXF1ZXN0KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPElubmVyUXVlcnlSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUlubmVyUGF0aChcbiAgICAgICAgcmVxdWVzdDogUmVzb2x2ZUlubmVyUGF0aFJlcXVlc3QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFJlc29sdmVQYXRoUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3Jlc29sdmUtaW5uZXItcGF0aFwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWVzdClcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxSZXNvbHZlUGF0aFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBBYnNvbHV0ZU1vZGVsUGF0aFtdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBub3JtYWxpemVySWQ6IG5vcm1hbGl6ZXJJZCB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jdXN0b20tbm9ybWFsaXplXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhQcmVmaXhlcy5tYXAoeCA9PiB4LnRvU3RyaW5nKCkpKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxtQkFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBMkJBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLHNCQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFHQSxJQUFBTyxxQkFBQSxHQUFBUCxPQUFBO0FBY0EsTUFBTVEsY0FBYyxHQUFHO0VBQUVDLEdBQUcsRUFBRSxXQUFXO0VBQUVDLFdBQVcsRUFBRTtBQUFJLENBQUM7QUFFdEQsTUFBTUMsa0JBQWtCLEdBQUFDLE9BQUEsQ0FBQUQsa0JBQUEsR0FBRztFQUM5QkUsU0FBUyxFQUFFO0FBQ2YsQ0FBQztBQUFDLElBRVVDLFlBQVksR0FBQUYsT0FBQSxDQUFBRSxZQUFBLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBTXhCLFNBQVNDLG9DQUFvQ0EsQ0FBQ0MsSUFBMkIsRUFBVTtFQUMvRSxPQUNJLENBQUNBLElBQUksQ0FBQ0MsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQ3BCRCxJQUFJLENBQUNFLGdCQUFnQixLQUFLLEdBQUcsR0FBR0YsSUFBSSxDQUFDRSxnQkFBZ0IsR0FBR0YsSUFBSSxDQUFDRSxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUV0RztBQUVPLE1BQU1DLGNBQWMsQ0FBNEI7RUFHNUNDLFdBQVdBLENBQ2RDLFNBQWdCLEVBQ2hCQyxPQUFlLEVBQ2ZDLFlBQWdDLEVBQ2hDQyxjQUE4QyxFQUM5Q0MsZUFBaUMsRUFDbkM7SUFBQSxLQVJlQyxVQUFVO0lBU3ZCLElBQUksQ0FBQ0EsVUFBVSxHQUFHLElBQUlDLHNCQUFVLENBQzVCTixTQUFTLEVBQ1RDLE9BQU8sRUFDUCxJQUFBTSxnREFBNEIsRUFBQ0osY0FBYyxDQUFDLEVBQzVDO01BQ0lELFlBQVksRUFBRUE7SUFDbEIsQ0FBQyxFQUNERSxlQUNKLENBQUM7RUFDTDtFQUVPSSxRQUFRQSxDQUFDQyxXQUF3QixFQUF3QjtJQUM1RCxPQUFPLElBQUlDLG1CQUFtQixDQUFDLElBQUksQ0FBQ0wsVUFBVSxFQUFFSSxXQUFXLENBQUM7RUFDaEU7RUFFQSxNQUFhRSxhQUFhQSxDQUFDRixXQUF3QixFQUFFRyxJQUF1QixFQUE2QjtJQUNyRyxNQUFNQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsR0FBRyxDQUFDQyxHQUFHLElBQUksVUFBVUEsR0FBRyxFQUFFLENBQUM7SUFDOUMsTUFBTUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUNULFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUNoRFUsWUFBWSxDQUFDTixLQUFLLENBQUMsQ0FDbkJPLElBQUksQ0FBc0IsQ0FBQztJQUNoQyxNQUFNQyxNQUF3QixHQUFHLENBQUMsQ0FBQztJQUNuQyxLQUFLLE1BQU1OLEdBQUcsSUFBSUgsSUFBSSxFQUFFO01BQUEsSUFBQVUsU0FBQTtNQUNwQixNQUFNQyxjQUFjLElBQUFELFNBQUEsR0FBR04sUUFBUSxDQUFDLFVBQVVELEdBQUcsRUFBRSxDQUFDLGNBQUFPLFNBQUEsdUJBQXpCQSxTQUFBLENBQTJCRSxLQUFLO01BQ3ZELElBQUlELGNBQWMsSUFBSUUsU0FBUyxFQUFFO1FBQzdCSixNQUFNLENBQUNOLEdBQUcsQ0FBQyxHQUFHO1VBQ1ZTLEtBQUssRUFBRUMsU0FBUztVQUNoQkMsS0FBSyxFQUFFLGlDQUFpQztVQUN4Q0MsU0FBUyxFQUFFQyxnQ0FBb0IsQ0FBQ0M7UUFDcEMsQ0FBQztNQUNMLENBQUMsTUFBTTtRQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO1FBQ0hYLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLEdBQUc7VUFDVlMsS0FBSyxHQUFBTSxxQkFBQSxHQUFFUCxjQUFjLENBQUNDLEtBQUssY0FBQU0scUJBQUEsY0FBQUEscUJBQUEsR0FBSUwsU0FBUztVQUN4Q0UsU0FBUyxHQUFBSSxxQkFBQSxHQUFFUixjQUFjLENBQUNJLFNBQVMsY0FBQUkscUJBQUEsY0FBQUEscUJBQUEsR0FBSU4sU0FBUztVQUNoREMsS0FBSyxHQUFBTSxzQkFBQSxHQUFFVCxjQUFjLENBQUNHLEtBQUssY0FBQU0sc0JBQUEsY0FBQUEsc0JBQUEsR0FBSVA7UUFDbkMsQ0FBQztNQUNMO0lBQ0o7SUFDQSxPQUFPSixNQUFNO0VBQ2pCO0VBRUEsTUFBYVksVUFBVUEsQ0FBQ0MsV0FBeUIsRUFBcUI7SUFDbEUsTUFBTUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDOUIsVUFBVSxDQUFDK0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUNoQixJQUFJLENBQVcsQ0FBQztJQUM1RSxPQUFPZSxJQUFJO0VBQ2Y7RUFFQSxNQUFhRSxvQkFBb0JBLENBQzdCQyxFQUFVLEVBQ1ZDLFdBQW1CLEVBQ25CTCxXQUF5QixFQUNHO0lBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUM3QixVQUFVLENBQ3ZCWSxJQUFJLENBQUMsU0FBU3FCLEVBQUUsMEJBQTBCLENBQUMsQ0FDM0NFLGVBQWUsQ0FBQztNQUNiRixFQUFFLEVBQUVBLEVBQUU7TUFDTkMsV0FBVyxFQUFFQTtJQUNqQixDQUFDLENBQUMsQ0FDREUsZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUJkLElBQUksQ0FBc0IsQ0FBQztFQUNwQztFQUVBLE1BQWFzQixnQkFBZ0JBLENBQUNKLEVBQVUsRUFBRUssR0FBVyxFQUFFVCxXQUF5QixFQUFnQztJQUM1RyxPQUFPLE1BQU0sSUFBSSxDQUFDN0IsVUFBVSxDQUN2QlksSUFBSSxDQUFDLFNBQVNxQixFQUFFLGVBQWUsQ0FBQyxDQUNoQ0UsZUFBZSxDQUFDO01BQUVHLEdBQUcsRUFBRUE7SUFBSSxDQUFDLENBQUMsQ0FDN0JGLGVBQWUsQ0FBQ1AsV0FBVyxDQUFDLENBQzVCZCxJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFJQSxNQUFhd0IsV0FBV0EsQ0FBQ04sRUFBVSxFQUFFSyxHQUF1QixFQUFFRSxVQUFtQixFQUFnQztJQUM3RyxJQUFJRixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ3BCLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENRLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUMzQ0Msa0JBQWtCLENBQUNGLFVBQVUsQ0FBQyxDQUM5QnpCLElBQUksQ0FBc0IsQ0FBQztJQUNwQztJQUNBLElBQUl1QixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ3BCLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENFLGVBQWUsQ0FBQztRQUFFRyxHQUFHLEVBQUVBO01BQUksQ0FBQyxDQUFDLENBQzdCRyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDM0NDLGtCQUFrQixDQUFDQyxNQUFNLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNuQzdCLElBQUksQ0FBc0IsQ0FBQztJQUNwQztJQUNBLElBQUl1QixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsTUFBTSxJQUFJeUIsS0FBSyxDQUFDLGtEQUFrRCxDQUFDO0lBQ3ZFO0lBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQzdDLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENFLGVBQWUsQ0FBQztNQUFFRyxHQUFHLEVBQUVBO0lBQUksQ0FBQyxDQUFDLENBQzdCRyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDM0NDLGtCQUFrQixDQUFDRixVQUFVLENBQUMsQ0FDOUJ6QixJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFFQSxNQUFhK0IsVUFBVUEsQ0FBQSxFQUFrQjtJQUNyQyxNQUFNLElBQUksQ0FBQzlDLFVBQVUsQ0FBQytCLEdBQUcsQ0FBQyxjQUFjLENBQUM7RUFDN0M7RUFFUWxCLFdBQVdBLENBQUNULFdBQXdCLEVBQUUyQyxlQUF1QixFQUFVO0lBQzNFLE9BQU8sU0FBUzNDLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVzdCLFdBQVcsQ0FBQzRDLE9BQU8sSUFBSUQsZUFBZSxFQUFFO0VBQ3JGO0VBRUEsTUFBYUUsZUFBZUEsQ0FBQSxFQUFrQztJQUMxRCxPQUFPLE1BQU0sSUFBSSxDQUFDakQsVUFBVSxDQUFDK0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUNoQixJQUFJLENBQXVCLENBQUM7RUFDdEY7QUFDSjtBQUFDOUIsT0FBQSxDQUFBUSxjQUFBLEdBQUFBLGNBQUE7QUFFTSxNQUFNWSxtQkFBbUIsQ0FBaUM7RUFJdERYLFdBQVdBLENBQUNNLFVBQXVCLEVBQUVJLFdBQXdCLEVBQUU7SUFBQSxLQUhyREosVUFBVTtJQUFBLEtBQ1ZJLFdBQVc7SUFHeEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDSSxXQUFXLEdBQUdBLFdBQVc7RUFDbEM7RUFFTzhDLG9CQUFvQkEsQ0FBQSxFQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDbEQsVUFBVSxDQUFDbUQsR0FBRyxDQUFDLG1CQUFtQixJQUFJLENBQUMvQyxXQUFXLENBQUM2QixFQUFFLFdBQVcsSUFBSSxDQUFDN0IsV0FBVyxDQUFDNEMsT0FBTyxFQUFFLENBQUM7RUFDM0c7RUFFT0ksa0JBQWtCQSxDQUFBLEVBQVc7SUFDaEMsT0FBTyxJQUFJLENBQUNwRCxVQUFVLENBQUNtRCxHQUFHLENBQUMsSUFBSSxDQUFDdEMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzNEO0VBRU93Qyx3QkFBd0JBLENBQUEsRUFBVztJQUN0QyxPQUFPLElBQUksQ0FBQ3JELFVBQVUsQ0FBQ21ELEdBQUcsQ0FBQyxJQUFJLENBQUN0QyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDOUQ7RUFFQSxNQUFheUMsV0FBV0EsQ0FBQSxFQUFnQztJQUNwRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUN0RCxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDbEIsV0FBVyxDQUFDMEMsNENBQXFCLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQUVDLElBQUksQ0FBQyxDQUFDO0VBQy9GO0VBRU9DLHlCQUF5QkEsQ0FBQSxFQUFXO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDQyxnQ0FBZ0MsQ0FBQ0osNENBQXFCLENBQUNDLFFBQVEsQ0FBQztFQUNoRjtFQUVPSSwyQkFBMkJBLENBQUEsRUFBVztJQUN6QyxPQUFPLElBQUksQ0FBQ0QsZ0NBQWdDLENBQUNKLDRDQUFxQixDQUFDTSxVQUFVLENBQUM7RUFDbEY7RUFFT0MsZ0NBQWdDQSxDQUFBLEVBQVc7SUFDOUMsT0FBTyxJQUFJLENBQUNILGdDQUFnQyxDQUFDSiw0Q0FBcUIsQ0FBQ1EsZUFBZSxDQUFDO0VBQ3ZGO0VBRU9DLG9CQUFvQkEsQ0FBQSxFQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDTCxnQ0FBZ0MsQ0FBQ0osNENBQXFCLENBQUNVLEtBQUssQ0FBQztFQUM3RTtFQUVBLE1BQWFDLFdBQVdBLENBQUEsRUFBNEI7SUFDaEQsT0FBTyxJQUFJLENBQUNsRSxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDb0MsdUJBQXVCLENBQUNaLDRDQUFxQixDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFDckQsSUFBSSxDQUFpQixDQUFDO0VBQ25IO0VBRUEsTUFBYXNELDZCQUE2QkEsQ0FBQ0MsY0FBbUMsRUFBMkI7SUFDckcsT0FBTyxJQUFJLENBQUN0RSxVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDbENDLFlBQVksQ0FBQztNQUFFd0QsY0FBYyxFQUFFQTtJQUFlLENBQUMsQ0FBQyxDQUNoRHZELElBQUksQ0FBaUIsQ0FBQztFQUMvQjtFQUVBLE1BQWF3RCxXQUFXQSxDQUFDQyxNQUFjLEVBQW1DO0lBQUEsSUFBQUMsTUFBQTtJQUN0RSxNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMxRSxVQUFVLENBQzlCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3pCQyxJQUFJLENBQXlCLENBQUM7SUFDbkMsUUFBQTBELE1BQUEsR0FBT0MsS0FBSyxDQUFDLFNBQVNGLE1BQU0sRUFBRSxDQUFDLGNBQUFDLE1BQUEsdUJBQXhCQSxNQUFBLENBQTBCdEQsS0FBSztFQUMxQztFQUVBLE1BQWF3RCxxQkFBcUJBLENBQUEsRUFBb0Q7SUFDbEYsTUFBTWhFLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQytCLEdBQUcsQ0FBQyxJQUFJLENBQUNsQixXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUNqREUsSUFBSSxDQUE2QixDQUFDO0lBQ3ZDLE9BQU9KLFFBQVE7RUFDbkI7RUFFQSxNQUFhaUUsYUFBYUEsQ0FBQ0MsS0FBZSxFQUEyQztJQUNqRixNQUFNbEUsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUN6Q0MsWUFBWSxDQUFDK0QsS0FBSyxDQUFDLENBQ25COUQsSUFBSSxDQUFxQixDQUFDO0lBQy9CLE9BQU9KLFFBQVE7RUFDbkI7RUFFQSxNQUFhbUUsV0FBV0EsQ0FBQSxFQUEwQjtJQUM5QyxNQUFNSixLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMxRSxVQUFVLENBQzlCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3pCQyxJQUFJLENBQXlCLENBQUM7SUFDbkMsT0FBT2dFLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQ2pFLEdBQUcsQ0FBQ3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDOUQsS0FBSyxDQUFDO0VBQ2pEO0VBRUEsTUFBYStELFdBQVdBLENBQUNWLE1BQWMsRUFBRVcsUUFBNkMsRUFBaUI7SUFDbkcsTUFBTSxJQUFJLENBQUNuRixVQUFVLENBQ2hCWSxJQUFJLENBQUMsSUFBSSxDQUFDdUQsdUJBQXVCLENBQUNaLDRDQUFxQixDQUFDVSxLQUFLLENBQUMsQ0FBQyxDQUMvRDlCLGVBQWUsQ0FBQ3RELGNBQWMsQ0FBQyxDQUMvQmlDLFlBQVksQ0FBQztNQUNWc0UsS0FBSyxFQUFFLEVBQUU7TUFDVEMsT0FBTyxFQUFFO1FBQ0wsQ0FBQyxTQUFTYixNQUFNLEVBQUUsR0FBRztVQUNqQixHQUFHVyxRQUFRO1VBQ1hHLEVBQUUsRUFBRWQ7UUFDUjtNQUNKLENBQUM7TUFDRGUsT0FBTyxFQUFFO0lBQ2IsQ0FBQyxDQUFDO0VBQ1Y7RUFFQSxNQUFhQyxVQUFVQSxDQUFDaEIsTUFBYyxFQUFpQjtJQUNuRCxNQUFNLElBQUksQ0FBQ3hFLFVBQVUsQ0FDaEJZLElBQUksQ0FBQyxJQUFJLENBQUN1RCx1QkFBdUIsQ0FBQ1osNENBQXFCLENBQUNVLEtBQUssQ0FBQyxDQUFDLENBQy9EOUIsZUFBZSxDQUFDdEQsY0FBYyxDQUFDLENBQy9CaUMsWUFBWSxDQUFDO01BQ1ZzRSxLQUFLLEVBQUUsRUFBRTtNQUNUQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hFLE9BQU8sRUFBRSxDQUFDLFNBQVNmLE1BQU0sRUFBRTtJQUMvQixDQUFDLENBQUM7RUFDVjtFQUVPaUIsaUJBQWlCQSxDQUFBLEVBQTRCO0lBQ2hELE9BQU8sSUFBSSxDQUFDekYsVUFBVSxDQUNqQitCLEdBQUcsQ0FBQyxJQUFJLENBQUNvQyx1QkFBdUIsQ0FBQ1osNENBQXFCLENBQUNtQyxjQUFjLENBQUMsQ0FBQyxDQUN2RTNFLElBQUksQ0FBaUIsQ0FBQztFQUMvQjtFQUVPNEUsb0JBQW9CQSxDQUFDQyxZQUFvQixFQUFFQyxTQUFpQixFQUFVO0lBQ3pFLE9BQU8sSUFBSSxDQUFDN0YsVUFBVSxDQUFDbUQsR0FBRyxDQUFDLElBQUksQ0FBQ3RDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO01BQ3pFK0UsWUFBWSxFQUFFQSxZQUFZO01BQzFCRSxjQUFjLEVBQUVEO0lBQ3BCLENBQUMsQ0FBQztFQUNOO0VBRUEsTUFBYUUsVUFBVUEsQ0FBQSxFQUFrQjtJQUNyQyxNQUFNLElBQUksQ0FBQy9GLFVBQVUsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3pEO0VBRUEsTUFBYW1GLHVCQUF1QkEsQ0FBQztJQUFFQyxjQUFjO0lBQUUzRDtFQUF5QixDQUFDLEVBQWlCO0lBQzlGLE1BQU0sSUFBSSxDQUFDdEMsVUFBVSxDQUFDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ3NCLGVBQWUsQ0FBQztNQUNwRW1ELEVBQUUsRUFBRVcsY0FBYztNQUNsQjNELEdBQUcsRUFBRUE7SUFDVCxDQUFDLENBQUM7RUFDTjtFQUVBLE1BQWE0RCxhQUFhQSxDQUFDQyxJQUFxQixFQUFFQyxrQkFBMEIsRUFBK0I7SUFDdkcsTUFBTXBGLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ2hCLFVBQVUsQ0FDL0JZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMvQnNCLGVBQWUsQ0FBQztNQUFFcEQsV0FBVyxFQUFFcUg7SUFBbUIsQ0FBQyxDQUFDLENBQ3BEdEYsWUFBWSxDQUFDcUYsSUFBSSxDQUFDLENBQ2xCRSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBRXBCLE1BQU1DLGdCQUFnQixHQUFHLE1BQUFBLENBQUEsS0FBWTtNQUFBLElBQUFDLHFCQUFBO01BQ2pDLE1BQU1DLFVBQVUsR0FBRyxNQUFNeEYsTUFBTSxDQUFDRCxJQUFJLENBQTJCLENBQUM7TUFDaEUsT0FBTztRQUNIaEMsV0FBVyxHQUFBd0gscUJBQUEsR0FBRUMsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUV6SCxXQUFXLGNBQUF3SCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUFFLG1CQUFNLEVBQUMsZ0RBQWdEO01BQ25HLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBT3pGLE1BQU0sQ0FBQzBGLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTUosZ0JBQWdCLENBQUMsQ0FBQyxHQUFHdEYsTUFBTSxDQUFDMEYsTUFBTTtFQUMxRTtFQUVBLE1BQWFDLDhCQUE4QkEsQ0FDdkNSLElBQXFCLEVBQ3JCQyxrQkFBMEIsRUFDMUJRLFlBQXFCLEVBQ007SUFDM0IsTUFBTTVGLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ2hCLFVBQVUsQ0FDL0JZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQ3hEc0IsZUFBZSxDQUFDO01BQUVwRCxXQUFXLEVBQUVxSCxrQkFBa0I7TUFBRVEsWUFBWSxFQUFFQTtJQUFhLENBQUMsQ0FBQyxDQUNoRjlGLFlBQVksQ0FBQ3FGLElBQUksQ0FBQyxDQUNsQkUsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUVwQixPQUFPckYsTUFBTSxDQUFDMEYsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNMUYsTUFBTSxDQUFDRCxJQUFJLENBQTRCLENBQUMsR0FBR0MsTUFBTSxDQUFDMEYsTUFBTTtFQUNoRztFQUVPRyxpQkFBaUJBLENBQ3BCVixJQUFxQixFQUNyQkMsa0JBQTBCLEVBQzFCUSxZQUFxQixFQUNIO0lBQ2xCLE1BQU01RixNQUFNLEdBQUcsSUFBSSxDQUFDaEIsVUFBVSxDQUFDOEcsUUFBUSxDQUFDLElBQUksQ0FBQ2pHLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUFFOUIsV0FBVyxFQUFFcUg7SUFBbUIsQ0FBQyxFQUFFRCxJQUFJLENBQUM7SUFFN0csTUFBTVksb0JBQW9CLEdBQUdBLENBQUEsS0FBTTtNQUFBLElBQUFDLHNCQUFBO01BQy9CLE1BQU1SLFVBQVUsR0FBR3hGLE1BQU0sQ0FBQ0QsSUFBSSxDQUEyQixDQUFDO01BQzFELE9BQU87UUFDSGhDLFdBQVcsR0FBQWlJLHNCQUFBLEdBQUVSLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFekgsV0FBVyxjQUFBaUksc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFBUCxtQkFBTSxFQUFDLGdEQUFnRDtNQUNuRyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU96RixNQUFNLENBQUMwRixNQUFNLElBQUksR0FBRyxHQUFHSyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcvRixNQUFNLENBQUMwRixNQUFNO0VBQ3hFO0VBRUEsTUFBYU8sYUFBYUEsQ0FBQ0MsYUFBZ0MsRUFBcUM7SUFDNUYsT0FBTyxNQUFNLElBQUksQ0FBQ2xILFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUNuQ0MsWUFBWSxDQUFDb0csYUFBYSxDQUFDLENBQzNCbkcsSUFBSSxDQUEyQixDQUFDO0VBQ3pDO0VBRUEsTUFBYW9HLFFBQVFBLENBQUMzRyxLQUFvQyxFQUFnQztJQUN0RixPQUFPLE1BQU0sSUFBSSxDQUFDUixVQUFVLENBQ3ZCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQ04sS0FBSyxDQUFDLENBQ25CTyxJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFFT3FHLGVBQWVBLENBQUN2QyxLQUE4QixFQUFFd0MsZ0JBQXlCLEVBQWdDO0lBQzVHLE1BQU1DLGNBQWMsR0FBR3pDLEtBQUssQ0FBQ3BFLEdBQUcsQ0FBQ3JCLG9DQUFvQyxDQUFDO0lBQ3RFLE9BQU8sSUFBSSxDQUFDWSxVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUMzQ3NCLGVBQWUsQ0FBQ2tGLGdCQUFnQixJQUFJakcsU0FBUyxJQUFJO01BQUVpRyxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNFLFFBQVEsQ0FBQztJQUFFLENBQUMsQ0FBQyxDQUNuR3pHLFlBQVksQ0FBQ3dHLGNBQWMsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsR0FBR0YsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDaEV2RyxJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFFQSxNQUFhMEcseUJBQXlCQSxDQUNsQzVDLEtBQThCLEVBQzlCd0MsZ0JBQXlCLEVBQ0U7SUFDM0IsTUFBTUMsY0FBYyxHQUFHekMsS0FBSyxDQUFDcEUsR0FBRyxDQUFDckIsb0NBQW9DLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUNZLFVBQVUsQ0FDakJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQzNDc0IsZUFBZSxDQUFDa0YsZ0JBQWdCLElBQUlqRyxTQUFTLElBQUk7TUFBRWlHLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ0UsUUFBUSxDQUFDO0lBQUUsQ0FBQyxDQUFDLENBQ25HcEYsZUFBZSxDQUFDO01BQUV1RixNQUFNLEVBQUU7SUFBVyxDQUFDLENBQUMsQ0FDdkM1RyxZQUFZLENBQUN3RyxjQUFjLENBQUNFLE1BQU0sR0FBRyxDQUFDLEdBQUdGLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2hFdkcsSUFBSSxDQUFxQixDQUFDO0VBQ25DO0VBRU80Ryw0QkFBNEJBLENBQy9COUMsS0FBdUMsRUFDdkN3QyxnQkFBeUIsRUFDQztJQUMxQixNQUFNQyxjQUFjLEdBQUd6QyxLQUFLLENBQUNwRSxHQUFHLENBQUNyQixvQ0FBb0MsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQ1ksVUFBVSxDQUNqQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDNUNzQixlQUFlLENBQUNrRixnQkFBZ0IsSUFBSWpHLFNBQVMsSUFBSTtNQUFFaUcsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDRSxRQUFRLENBQUM7SUFBRSxDQUFDLENBQUMsQ0FDbkd6RyxZQUFZLENBQUN3RyxjQUFjLENBQUNFLE1BQU0sR0FBRyxDQUFDLEdBQUdGLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2hFdkcsSUFBSSxDQUFvQixDQUFDO0VBQ2xDO0VBRU82RyxjQUFjQSxDQUFBLEVBQW9CO0lBQ3JDLE9BQU8sSUFBSSxDQUFDNUgsVUFBVSxDQUFDK0IsR0FBRyxDQUFDLElBQUksQ0FBQ2xCLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUNFLElBQUksQ0FBUyxDQUFDO0VBQ3pGO0VBRUEsTUFBYThHLGtCQUFrQkEsQ0FBQSxFQUEyQztJQUN0RSxPQUFPLE1BQU0sSUFBSSxDQUFDN0gsVUFBVSxDQUN2QitCLEdBQUcsQ0FBQyxJQUFJLENBQUNvQyx1QkFBdUIsQ0FBQ1osNENBQXFCLENBQUN1RSxlQUFlLENBQUMsQ0FBQyxDQUN4RS9HLElBQUksQ0FBZ0MsQ0FBQztFQUM5QztFQUVBLE1BQWFnSCxpQkFBaUJBLENBQUNDLFlBQW9CLEVBQXVCO0lBQUEsSUFBQUMsYUFBQSxFQUFBQyxPQUFBO0lBQ3RFLE1BQU1sSCxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNoQixVQUFVLENBQy9CWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLGVBQWVrSCxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQzdDakgsSUFBSSxDQUF5QixDQUFDO0lBQ25DLFFBQUFrSCxhQUFBLElBQUFDLE9BQUEsR0FBT2xILE1BQU0sQ0FBQyxlQUFlZ0gsWUFBWSxFQUFFLENBQUMsY0FBQUUsT0FBQSx1QkFBckNBLE9BQUEsQ0FBdUMvRyxLQUFLLGNBQUE4RyxhQUFBLGNBQUFBLGFBQUEsR0FBSSxJQUFBeEIsbUJBQU0sRUFBQyxDQUFDO0VBQ25FO0VBRUEsTUFBYTBCLGlCQUFpQkEsQ0FBQSxFQUEwQjtJQUNwRCxNQUFNbkgsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDaEIsVUFBVSxDQUMvQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ25DQyxZQUFZLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUMvQkMsSUFBSSxDQUF5QixDQUFDO0lBQ25DLE9BQU9nRSxNQUFNLENBQUNDLE1BQU0sQ0FBQ2hFLE1BQU0sQ0FBQyxDQUFDUCxHQUFHLENBQUN3RSxDQUFDLElBQUlBLENBQUMsQ0FBQzlELEtBQUssQ0FBQztFQUNsRDtFQUVBLE1BQWFpSCxpQkFBaUJBLENBQUNDLGFBQWdDLEVBQWlCO0lBQzVFLE1BQU0sSUFBSSxDQUFDckksVUFBVSxDQUNoQlksSUFBSSxDQUFDLElBQUksQ0FBQ3VELHVCQUF1QixDQUFDWiw0Q0FBcUIsQ0FBQ1UsS0FBSyxDQUFDLENBQUMsQ0FDL0Q5QixlQUFlLENBQUN0RCxjQUFjLENBQUMsQ0FDL0JpQyxZQUFZLENBQUM7TUFDVnNFLEtBQUssRUFBRSxFQUFFO01BQ1RDLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDWEUsT0FBTyxFQUFFOEMsYUFBYSxDQUFDNUgsR0FBRyxDQUFDNkUsRUFBRSxJQUFJLGVBQWVBLEVBQUUsRUFBRTtJQUN4RCxDQUFDLENBQUM7RUFDVjtFQUVBLE1BQWFnRCx5QkFBeUJBLENBQUNDLFdBQWtDLEVBQWlCO0lBQ3RGLE1BQU1sRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEtBQUssTUFBTW1ELFVBQVUsSUFBSUQsV0FBVyxFQUFFO01BQ2xDbEQsT0FBTyxDQUFDLGVBQWVtRCxVQUFVLENBQUNsRCxFQUFFLEVBQUUsQ0FBQyxHQUFHO1FBQ3RDbUQsVUFBVSxFQUFFRCxVQUFVLENBQUNDLFVBQVU7UUFDakNuRCxFQUFFLEVBQUVrRCxVQUFVLENBQUNsRCxFQUFFO1FBQ2pCb0QsSUFBSSxFQUFFRixVQUFVLENBQUNFO01BQ3JCLENBQUM7SUFDTDtJQUNBLE1BQU0sSUFBSSxDQUFDMUksVUFBVSxDQUNoQlksSUFBSSxDQUFDLElBQUksQ0FBQ3VELHVCQUF1QixDQUFDWiw0Q0FBcUIsQ0FBQ1UsS0FBSyxDQUFDLENBQUMsQ0FDL0Q5QixlQUFlLENBQUN0RCxjQUFjLENBQUMsQ0FDL0JpQyxZQUFZLENBQUM7TUFDVnNFLEtBQUssRUFBRSxFQUFFO01BQ1RDLE9BQU8sRUFBRUEsT0FBTztNQUNoQkUsT0FBTyxFQUFFO0lBQ2IsQ0FBQyxDQUFDO0VBQ1Y7RUFFQSxNQUFhb0QscUJBQXFCQSxDQUFDckcsR0FBVyxFQUFFc0csSUFBWSxFQUF1QjtJQUMvRSxPQUFPLE1BQU0sSUFBSSxDQUFDNUksVUFBVSxDQUN2QlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FDMURzQixlQUFlLENBQUM7TUFBRUcsR0FBRyxFQUFFQSxHQUFHO01BQUVzRyxJQUFJLEVBQUVBO0lBQUssQ0FBQyxDQUFDLENBQ3pDN0gsSUFBSSxDQUFhLENBQUM7RUFDM0I7RUFFQSxNQUFhOEgsMkJBQTJCQSxDQUFDdkQsRUFBVSxFQUF1QjtJQUN0RSxNQUFNM0UsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUNsRXNCLGVBQWUsQ0FBQztNQUFFNkYsWUFBWSxFQUFFMUM7SUFBRyxDQUFDLENBQUMsQ0FDckNlLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFFcEIsSUFBSTFGLFFBQVEsQ0FBQytGLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDekIsTUFBTW9DLFNBQVMsR0FBRyxNQUFNbkksUUFBUSxDQUFDSSxJQUFJLENBQXlDLENBQUM7TUFDL0UsSUFBSStILFNBQVMsQ0FBQ3hILFNBQVMsS0FBSyxpQkFBaUIsRUFBRTtRQUMzQyxNQUFNLElBQUl5SCwwQ0FBb0IsQ0FBQ0QsU0FBUyxDQUFDRSxPQUFPLENBQUM7TUFDckQ7TUFDQSxNQUFNLElBQUlDLHFCQUFTLENBQUNILFNBQVMsQ0FBQ0UsT0FBTyxFQUFFckksUUFBUSxDQUFDK0YsTUFBTSxDQUFDO0lBQzNEO0lBQ0EsT0FBTyxNQUFNL0YsUUFBUSxDQUFDSSxJQUFJLENBQWEsQ0FBQztFQUM1QztFQUVBLE1BQWFtSSxlQUFlQSxDQUFDQyxnQkFBdUMsRUFBRUMsT0FBeUIsRUFBaUI7SUFDNUcsSUFBSUMsT0FBTyxHQUFHLElBQUksQ0FBQ3JKLFVBQVUsQ0FBQ3NKLEdBQUcsQ0FBQyxJQUFJLENBQUNuRix1QkFBdUIsQ0FBQ2dGLGdCQUFnQixDQUFDLENBQUM7SUFDakYsSUFBSSxPQUFPQyxPQUFPLEtBQUssUUFBUSxFQUFFO01BQzdCQyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0UsV0FBVyxDQUFDSCxPQUFPLENBQUM7SUFDMUMsQ0FBQyxNQUFNLElBQUksSUFBQUksa0JBQVEsRUFBQ0osT0FBTyxDQUFDLEVBQUU7TUFDMUJDLE9BQU8sR0FBR0EsT0FBTyxDQUFDRSxXQUFXLENBQUNILE9BQU8sQ0FBQztJQUMxQyxDQUFDLE1BQU07TUFDSEMsT0FBTyxHQUFHQSxPQUFPLENBQUN2SSxZQUFZLENBQUNzSSxPQUFPLENBQUM7SUFDM0M7SUFDQSxNQUFNQyxPQUFPO0VBQ2pCO0VBRUEsTUFBYUksaUJBQWlCQSxDQUMxQk4sZ0JBQXVDLEVBQ3ZDTyxtQkFBd0MsRUFDM0I7SUFDYixNQUFNLElBQUksQ0FBQzFKLFVBQVUsQ0FBQzJKLEtBQUssQ0FBQyxJQUFJLENBQUN4Rix1QkFBdUIsQ0FBQ2dGLGdCQUFnQixDQUFDLENBQUMsQ0FBQ3JJLFlBQVksQ0FBQzRJLG1CQUFtQixDQUFDO0VBQ2pIO0VBRUEsTUFBYUUsaUJBQWlCQSxDQUMxQkMsUUFBZ0IsRUFDaEJDLGVBQXFDLEVBQ0Y7SUFDbkMsTUFBTW5KLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQytCLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUM5QkksZUFBZSxDQUFDO01BQUUwSCxRQUFRLEVBQUVBLFFBQVE7TUFBRUMsZUFBZSxFQUFFQSxlQUFlLGFBQWZBLGVBQWUsY0FBZkEsZUFBZSxHQUFJO0lBQU0sQ0FBQyxDQUFDLENBQ2xGekQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUNmQSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUkxRixRQUFRLENBQUMrRixNQUFNLEtBQUssR0FBRyxJQUFJL0YsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsSUFBSS9GLFFBQVEsQ0FBQytGLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDL0UsT0FBTy9GLFFBQVEsQ0FBQ0ksSUFBSSxDQUFpQixDQUFDO0lBQzFDO0lBQ0EsT0FBT0ssU0FBUztFQUNwQjtFQUVBLE1BQWEySSwyQkFBMkJBLENBQUNGLFFBQWdCLEVBQUV2SCxHQUFXLEVBQXVDO0lBQ3pHLE1BQU0zQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakMrQixHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FDMUNJLGVBQWUsQ0FBQztNQUFFRyxHQUFHLEVBQUVBLEdBQUc7TUFBRXVILFFBQVEsRUFBRUE7SUFBUyxDQUFDLENBQUMsQ0FDakR4RCxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUkxRixRQUFRLENBQUMrRixNQUFNLEtBQUssR0FBRyxFQUFFO01BQ3pCLE9BQU90RixTQUFTO0lBQ3BCO0lBQ0EsSUFBSVQsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN6QixNQUFNb0MsU0FBUyxHQUFHLE1BQU1uSSxRQUFRLENBQUNJLElBQUksQ0FBeUMsQ0FBQztNQUMvRSxJQUFJK0gsU0FBUyxDQUFDeEgsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1FBQzNDLE1BQU0sSUFBSXlILDBDQUFvQixDQUFDRCxTQUFTLENBQUNFLE9BQU8sQ0FBQztNQUNyRDtNQUNBLE1BQU0sSUFBSUMscUJBQVMsQ0FBQ0gsU0FBUyxDQUFDRSxPQUFPLEVBQUVySSxRQUFRLENBQUMrRixNQUFNLENBQUM7SUFDM0Q7SUFDQSxPQUFPLE1BQU0vRixRQUFRLENBQUNJLElBQUksQ0FBaUIsQ0FBQztFQUNoRDtFQUVBLE1BQWFpSiwwQkFBMEJBLENBQ25DQyxTQUFtQixFQUNuQjNILEdBQVcsRUFDWFQsV0FBeUIsRUFDWTtJQUNyQyxJQUFJO01BQ0EsTUFBTWxCLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQzFDdUIsZUFBZSxDQUFDO1FBQUVHLEdBQUcsRUFBRUE7TUFBSSxDQUFDLENBQUMsQ0FDN0J4QixZQUFZLENBQUNtSixTQUFTLENBQUMsQ0FDdkI3SCxlQUFlLENBQUNQLFdBQVcsQ0FBQyxDQUM1QndFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztNQUNwQixJQUFJMUYsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixNQUFNUCxJQUFJLEdBQUcsTUFBTXhGLFFBQVEsQ0FBQ0ksSUFBSSxDQUErQyxDQUFDO1FBQ2hGLE9BQU87VUFBRW1KLFdBQVcsRUFBRS9ELElBQUksQ0FBQzdFLFNBQVM7VUFBRTZJLDhCQUE4QixFQUFFLEVBQUU7VUFBRUMsaUJBQWlCLEVBQUU7UUFBRSxDQUFDO01BQ3BHO01BQ0EsTUFBTWpFLElBQUksR0FBRyxNQUFNeEYsUUFBUSxDQUFDSSxJQUFJLENBQStCLENBQUM7TUFDaEUsT0FBT29GLElBQUk7SUFDZixDQUFDLENBQUMsT0FBT2tFLENBQUMsRUFBRTtNQUNSLE9BQU87UUFDSEgsV0FBVyxFQUFFL0ssWUFBWSxDQUFDbUwsWUFBWTtRQUN0Q0gsOEJBQThCLEVBQUUsRUFBRTtRQUNsQ0MsaUJBQWlCLEVBQUU7TUFDdkIsQ0FBQztJQUNMO0VBQ0o7RUFFQSxNQUFhRyxrQkFBa0JBLENBQzNCckksV0FBbUIsRUFDbkJzSSxZQUFvQixFQUNwQjNJLFdBQXlCLEVBQ2U7SUFDeEMsSUFBSTtNQUNBLE1BQU1sQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQ1IsV0FBVyxDQUFDNkIsRUFBRSxXQUFXLElBQUksQ0FBQzdCLFdBQVcsQ0FBQzRDLE9BQU8sbUJBQW1CLENBQUMsQ0FDeEZiLGVBQWUsQ0FBQztRQUFFRCxXQUFXLEVBQUVBLFdBQVc7UUFBRXVJLE1BQU0sRUFBRUQ7TUFBYSxDQUFDLENBQUMsQ0FDbkVwSSxlQUFlLENBQUNQLFdBQVcsQ0FBQyxDQUM1QndFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztNQUNwQixJQUFJMUYsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixNQUFNUCxJQUFJLEdBQUcsTUFBTXhGLFFBQVEsQ0FBQ0ksSUFBSSxDQUErQyxDQUFDO1FBQ2hGLE9BQU87VUFBRW1KLFdBQVcsRUFBRS9ELElBQUksQ0FBQzdFO1FBQVUsQ0FBQztNQUMxQztNQUNBLE9BQU9GLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9pSixDQUFDLEVBQUU7TUFDUixPQUFPO1FBQUVILFdBQVcsRUFBRS9LLFlBQVksQ0FBQ21MO01BQWEsQ0FBQztJQUNyRDtFQUNKO0VBRUEsTUFBYUksMEJBQTBCQSxDQUNuQ0MsS0FBNEIsRUFDNUI5SSxXQUF5QixFQUNlO0lBQ3hDLElBQUk7TUFDQSxNQUFNbEIsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUNSLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVyxJQUFJLENBQUM3QixXQUFXLENBQUM0QyxPQUFPLDRCQUE0QixDQUFDLENBQ2pHbEMsWUFBWSxDQUFDNkosS0FBSyxDQUFDLENBQ25CdkksZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUJ3RSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQ2ZBLFVBQVUsQ0FBQyxHQUFHLENBQUM7TUFDcEIsSUFBSTFGLFFBQVEsQ0FBQytGLE1BQU0sS0FBSyxHQUFHLEVBQUU7UUFDekIsTUFBTVAsSUFBSSxHQUFHLE1BQU14RixRQUFRLENBQUNJLElBQUksQ0FBK0MsQ0FBQztRQUNoRixPQUFPO1VBQUVtSixXQUFXLEVBQUUvRCxJQUFJLENBQUM3RTtRQUFVLENBQUM7TUFDMUM7TUFDQSxPQUFPRixTQUFTO0lBQ3BCLENBQUMsQ0FBQyxPQUFPaUosQ0FBQyxFQUFFO01BQ1IsT0FBTztRQUFFSCxXQUFXLEVBQUUvSyxZQUFZLENBQUNtTDtNQUFhLENBQUM7SUFDckQ7RUFDSjtFQUVBLE1BQWFNLGdCQUFnQkEsQ0FBQ2YsUUFBZ0IsRUFBaUI7SUFDM0QsTUFBTSxJQUFJLENBQUM3SixVQUFVLENBQUNzSixHQUFHLENBQUMsSUFBSSxDQUFDekksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNzQixlQUFlLENBQUM7TUFBRTBILFFBQVEsRUFBRUE7SUFBUyxDQUFDLENBQUM7RUFDbEc7RUFFQSxNQUFhZ0Isb0JBQW9CQSxDQUM3QmhCLFFBQWdCLEVBQ2hCaUIsYUFBK0IsRUFDL0JqSixXQUF5QixFQUNZO0lBQ3JDLE1BQU1sQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQ25Ec0IsZUFBZSxDQUFDO01BQUVELFdBQVcsRUFBRTJILFFBQVE7TUFBRWlCLGFBQWEsRUFBRUE7SUFBYyxDQUFDLENBQUMsQ0FDeEUxSSxlQUFlLENBQUNQLFdBQVcsQ0FBQztJQUNqQyxJQUFJbEIsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN6QixPQUFPdEYsU0FBUztJQUNwQjtJQUNBLE9BQU8sTUFBTVQsUUFBUSxDQUFDSSxJQUFJLENBQW1CLENBQUM7RUFDbEQ7RUFFQSxNQUFhZ0ssbUJBQW1CQSxDQUM1QnpJLEdBQVcsRUFDWDBJLFdBQW1CLEVBQ25CZixTQUFtQixFQUM2QjtJQUNoRCxJQUFJO01BQ0EsTUFBTXRKLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQ3ZDdUIsZUFBZSxDQUFDO1FBQUVHLEdBQUcsRUFBRUEsR0FBRztRQUFFMEksV0FBVyxFQUFFQTtNQUFZLENBQUMsQ0FBQyxDQUN2RGxLLFlBQVksQ0FBQ21KLFNBQVMsQ0FBQztNQUM1QixJQUFJdEosUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixPQUFPLE1BQU0vRixRQUFRLENBQUNJLElBQUksQ0FBOEIsQ0FBQztNQUM3RDtNQUNBLE9BQU9LLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9pSixDQUFDLEVBQUU7TUFDUixPQUFPakosU0FBUztJQUNwQjtFQUNKO0VBRUEsTUFBYTZKLDJCQUEyQkEsQ0FDcENELFdBQW1CLEVBQ25CbkIsUUFBa0IsRUFDbEJpQixhQUFxQixFQUNyQkksY0FBOEIsRUFDMEI7SUFDeEQsSUFBSTtNQUNBLE1BQU12SyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQ25Fc0IsZUFBZSxDQUFDO1FBQ2I2SSxXQUFXLEVBQUVBLFdBQVc7UUFDeEJGLGFBQWEsRUFBRUEsYUFBYTtRQUM1QkksY0FBYyxFQUFFQTtNQUNwQixDQUFDLENBQUMsQ0FDRHBLLFlBQVksQ0FBQytJLFFBQVEsQ0FBQztNQUMzQixJQUFJbEosUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixPQUFPLE1BQU0vRixRQUFRLENBQUNJLElBQUksQ0FBc0MsQ0FBQztNQUNyRTtNQUNBLE9BQU9LLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9pSixDQUFDLEVBQUU7TUFDUixPQUFPakosU0FBUztJQUNwQjtFQUNKO0VBRUEsTUFBYStKLDRCQUE0QkEsQ0FDckNsQixTQUFtQixFQUNuQmEsYUFBK0IsRUFDL0JNLElBQWUsRUFDc0I7SUFDckMsTUFBTXpLLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FDcERzQixlQUFlLENBQUM7TUFBRTJJLGFBQWEsRUFBRUE7SUFBYyxDQUFDLENBQUMsQ0FDakRoSyxZQUFZLENBQUM7TUFBRW1KLFNBQVMsRUFBRUEsU0FBUztNQUFFb0IsU0FBUyxFQUFFRDtJQUFLLENBQUMsQ0FBQyxDQUN2RC9FLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUNwQixJQUFJMUYsUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsSUFBSS9GLFFBQVEsQ0FBQytGLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDcEQsT0FBT3RGLFNBQVM7SUFDcEI7SUFDQSxPQUFPLE1BQU1ULFFBQVEsQ0FBQ0ksSUFBSSxDQUFtQixDQUFDO0VBQ2xEO0VBRUEsTUFBYXVLLFVBQVVBLENBQ25CckIsU0FBbUIsRUFDbkJhLGFBQStCLEVBQy9CSSxjQUE4QixFQUM5QkssYUFBc0IsRUFDdEJILElBQWUsRUFDc0I7SUFDckMsTUFBTXpLLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FDOUNzQixlQUFlLENBQUM7TUFDYjJJLGFBQWEsRUFBRUEsYUFBYTtNQUM1QkksY0FBYyxFQUFFQSxjQUFjO01BQzlCTSxXQUFXLEVBQUVEO0lBQ2pCLENBQUMsQ0FBQyxDQUNEekssWUFBWSxDQUFDO01BQUUySyxZQUFZLEVBQUV4QixTQUFTO01BQUVvQixTQUFTLEVBQUVEO0lBQUssQ0FBQyxDQUFDO0lBQy9ELElBQUl6SyxRQUFRLENBQUMrRixNQUFNLEtBQUssR0FBRyxFQUFFO01BQ3pCLE9BQU90RixTQUFTO0lBQ3BCO0lBQ0EsT0FBTyxNQUFNVCxRQUFRLENBQUNJLElBQUksQ0FBbUIsQ0FBQztFQUNsRDtFQUVBLE1BQWEySyxnQkFBZ0JBLENBQUNDLFFBQXVCLEVBQWlCO0lBQ2xFLE1BQU0sSUFBSSxDQUFDM0wsVUFBVSxDQUFDMkosS0FBSyxDQUFDLElBQUksQ0FBQzlJLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQzZLLFFBQVEsQ0FBQztFQUNqRztFQUVBLE1BQWFDLGdCQUFnQkEsQ0FBQSxFQUEyQjtJQUNwRCxNQUFNakwsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDbEIsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFckYsT0FBT0YsUUFBUSxDQUFDSSxJQUFJLENBQWdCLENBQUM7RUFDekM7RUFFQSxNQUFhOEssZ0JBQWdCQSxDQUFDaEgsS0FBYSxFQUFpQjtJQUN4RCxNQUFNLElBQUksQ0FBQzdFLFVBQVUsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDK0QsS0FBSyxDQUFDO0VBQ3RGO0VBRVFsQixnQ0FBZ0NBLENBQUN3RixnQkFBdUMsRUFBVTtJQUN0RixPQUFPLElBQUksQ0FBQ25KLFVBQVUsQ0FBQ21ELEdBQUcsQ0FBQyxJQUFJLENBQUNnQix1QkFBdUIsQ0FBQ2dGLGdCQUFnQixDQUFDLENBQUM7RUFDOUU7RUFFUXRJLFdBQVdBLENBQUNrQyxlQUF1QixFQUFVO0lBQ2pELE9BQU8sU0FBUyxJQUFJLENBQUMzQyxXQUFXLENBQUM2QixFQUFFLFdBQVcsSUFBSSxDQUFDN0IsV0FBVyxDQUFDNEMsT0FBTyxJQUFJRCxlQUFlLEVBQUU7RUFDL0Y7RUFFUW9CLHVCQUF1QkEsQ0FBQ2dGLGdCQUF1QyxFQUFVO0lBQzdFLE9BQU8sSUFBSSxDQUFDdEksV0FBVyxDQUFDLGlCQUFpQnNJLGdCQUFnQixDQUFDNUIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQzNFO0VBRUEsTUFBYXVFLDRCQUE0QkEsQ0FBQ2pILEtBQXFDLEVBQWlCO0lBQzVGLE1BQU1rSCxHQUFHLEdBQUcsSUFBSSxDQUFDbEwsV0FBVyxDQUFDLHVDQUF1QyxDQUFDO0lBQ3JFLE1BQU1tTCxVQUFVLEdBQUduSCxLQUFLLENBQUNwRSxHQUFHLENBQUN3RSxDQUFDLEtBQUs7TUFBRSxHQUFHQSxDQUFDO01BQUUyRCxJQUFJLEVBQUUsSUFBQXFELDhCQUFtQixFQUFDaEgsQ0FBQyxDQUFDMkQsSUFBSTtJQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxDQUFDNUksVUFBVSxDQUFDMkosS0FBSyxDQUFDb0MsR0FBRyxDQUFDLENBQUNqTCxZQUFZLENBQUNrTCxVQUFVLENBQUM7RUFDN0Q7RUFFQSxNQUFhRSxtQkFBbUJBLENBQUEsRUFBZ0M7SUFDNUQsTUFBTUgsR0FBRyxHQUFHLElBQUksQ0FBQ2xMLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztJQUMzRCxNQUFNRyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNoQixVQUFVLENBQUNZLElBQUksQ0FBQ21MLEdBQUcsQ0FBQztJQUM5QyxPQUFPL0ssTUFBTSxDQUFDMEYsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNMUYsTUFBTSxDQUFDRCxJQUFJLENBQTRCLENBQUMsR0FBR0MsTUFBTSxDQUFDMEYsTUFBTTtFQUNoRztFQUVBLE1BQWF5RixxQkFBcUJBLENBQzlCMUksSUFBWSxFQUNaMkksV0FBbUIsRUFDbkJDLGFBQXVCLEVBQ3ZCaEYsZ0JBQXlCLEVBQ1I7SUFDakIsTUFBTWlGLHNCQUFzQixHQUFHakYsZ0JBQWdCLElBQUlqRyxTQUFTLEdBQUc7TUFBRWlHLGdCQUFnQixFQUFFQTtJQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFHLE1BQU1rRixNQUFNLEdBQUc7TUFBRUMsWUFBWSxFQUFFL0ksSUFBSTtNQUFFMkksV0FBVyxFQUFFQSxXQUFXO01BQUUsR0FBR0U7SUFBdUIsQ0FBQztJQUMxRixPQUFPLElBQUksQ0FBQ3RNLFVBQVUsQ0FDakJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQ2hEc0IsZUFBZSxDQUFDb0ssTUFBTSxDQUFDLENBQ3ZCekwsWUFBWSxDQUFDdUwsYUFBYSxDQUFDLENBQzNCdEwsSUFBSSxDQUFXLENBQUM7RUFDekI7RUFFQSxNQUFhMEwsZUFBZUEsQ0FBQ3BELE9BQTBCLEVBQUV4SCxXQUF5QixFQUErQjtJQUM3RyxPQUFPLElBQUksQ0FBQzdCLFVBQVUsQ0FDakJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQ2hEQyxZQUFZLENBQUN1SSxPQUFPLENBQUMsQ0FDckJqSCxlQUFlLENBQUNQLFdBQVcsQ0FBQyxDQUM1QmQsSUFBSSxDQUFxQixDQUFDO0VBQ25DO0VBRUEsTUFBYTJMLGdCQUFnQkEsQ0FDekJyRCxPQUFnQyxFQUNoQ3hILFdBQXlCLEVBQ0c7SUFDNUIsT0FBTyxJQUFJLENBQUM3QixVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUNsREMsWUFBWSxDQUFDdUksT0FBTyxDQUFDLENBQ3JCakgsZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUJkLElBQUksQ0FBc0IsQ0FBQztFQUNwQztFQUVBLE1BQWE0TCxlQUFlQSxDQUN4Qi9GLFlBQTJCLEVBQzNCZ0csWUFBaUMsRUFDakMvSyxXQUF5QixFQUNFO0lBQzNCLE1BQU0wSyxNQUFNLEdBQUc7TUFBRTNGLFlBQVksRUFBRUE7SUFBYSxDQUFDO0lBQzdDLE1BQU01RixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNoQixVQUFVLENBQy9CWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUNoRHNCLGVBQWUsQ0FBQ29LLE1BQU0sQ0FBQyxDQUN2QnpMLFlBQVksQ0FBQzhMLFlBQVksQ0FBQ25NLEdBQUcsQ0FBQ3dFLENBQUMsSUFBSUEsQ0FBQyxDQUFDc0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pEbkYsZUFBZSxDQUFDUCxXQUFXLENBQUM7SUFFakMsT0FBT2IsTUFBTSxDQUFDMEYsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNMUYsTUFBTSxDQUFDRCxJQUFJLENBQTRCLENBQUMsR0FBR0MsTUFBTSxDQUFDMEYsTUFBTTtFQUNoRztFQUVBLE1BQWFtRyxlQUFlQSxDQUFDeEQsT0FBK0IsRUFBaUI7SUFDekUsTUFBTSxJQUFJLENBQUNySixVQUFVLENBQUMySixLQUFLLENBQUMsSUFBSSxDQUFDOUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQ3VJLE9BQU8sQ0FBQztFQUNoRjtFQUVBLE1BQWF5RCxlQUFlQSxDQUFDQyxhQUFzQyxFQUFpQjtJQUNoRixNQUFNLElBQUksQ0FBQy9NLFVBQVUsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDaU0sYUFBYSxDQUFDO0VBQ3RHO0VBRUEsTUFBYUMsYUFBYUEsQ0FBQ0MsUUFBZ0IsRUFBRUMsVUFBaUMsRUFBaUI7SUFDM0YsTUFBTUMsV0FBVyxHQUFHO01BQUVGLFFBQVEsRUFBRUE7SUFBUyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxDQUFDak4sVUFBVSxDQUNoQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FDM0NzQixlQUFlLENBQUNnTCxXQUFXLENBQUMsQ0FDNUJyTSxZQUFZLENBQUNvTSxVQUFVLENBQUM7RUFDakM7RUFFT0UsS0FBS0EsQ0FBQ0MsSUFBZSxFQUFFdkwsSUFBZSxFQUEwQjtJQUNuRSxPQUFPLElBQUksQ0FBQzlCLFVBQVUsQ0FDakJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyw2QkFBNkJ3TSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzNEdk0sWUFBWSxDQUFDZ0IsSUFBSSxDQUFDLENBQ2xCZixJQUFJLENBQWdCLENBQUM7RUFDOUI7RUFFQSxNQUFhdU0sVUFBVUEsQ0FBQ3RDLFdBQW1CLEVBQXNDO0lBQzdFLElBQUk7TUFDQSxNQUFNckssUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUNuRHNCLGVBQWUsQ0FBQztRQUFFNkksV0FBVyxFQUFFQTtNQUFZLENBQUMsQ0FBQztNQUNsRCxJQUFJckssUUFBUSxDQUFDK0YsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixNQUFNNkcsVUFBVSxHQUFHNU0sUUFBUSxDQUFDSSxJQUFJLENBQWdCLENBQUM7UUFDakQsT0FBT3dNLFVBQVU7TUFDckI7TUFDQSxPQUFPbk0sU0FBUztJQUNwQixDQUFDLENBQUMsT0FBT2lKLENBQUMsRUFBRTtNQUNSLE9BQU9qSixTQUFTO0lBQ3BCO0VBQ0o7RUFFQSxNQUFhb00sV0FBV0EsQ0FBQSxFQUErQjtJQUNuRCxNQUFNN00sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQUMrQixHQUFHLENBQ3RDLFNBQVMsSUFBSSxDQUFDM0IsV0FBVyxDQUFDNkIsRUFBRSxXQUFXLElBQUksQ0FBQzdCLFdBQVcsQ0FBQzRDLE9BQU8sY0FDbkUsQ0FBQztJQUVELE9BQU9yQyxRQUFRLENBQUNJLElBQUksQ0FBb0IsQ0FBQztFQUM3QztBQUNKO0FBQUM5QixPQUFBLENBQUFvQixtQkFBQSxHQUFBQSxtQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==