@sunbird-cb/cbp-ai 0.1.54 → 0.1.55

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.
@@ -475,7 +475,7 @@ export class EditCbpPlanComponent {
475
475
  pageSize: reqLimit,
476
476
  };
477
477
  if (searchText?.length) {
478
- requestBody['searchString'] = searchText;
478
+ requestBody['query'] = searchText;
479
479
  // when searching, start from first page
480
480
  requestBody.pageNumber = 0;
481
481
  // allow larger page for search if needed
@@ -717,4 +717,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
717
717
  type: ViewChild,
718
718
  args: ['designation', { read: ElementRef }]
719
719
  }] } });
720
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFRdEIsTUFBTSxPQUFPLG9CQUFvQjtJQTZDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFNBQUksR0FBSixJQUFJLENB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QixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVkaXQtY2JwLXBsYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q2JwUGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIHBsYW5EYXRhOiBhbnlcbiAgY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuICBjYnBGb3JtOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIC8vIEVuaGFuY2VkIGNvbXBldGVuY3kgc2VsZWN0aW9uIHByb3BlcnRpZXNcbiAgY29tcGV0ZW5jaWVzRGF0YTogYW55W10gPSBbXTtcbiAgYXZhaWxhYmxlVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVTdWJUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZFN1YlRoZW1lczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9ICcnO1xuICBzZWxlY3RlZFRoZW1lID0gJyc7XG4gIHNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgbWFudWFsVGhlbWUgPSAnJztcbiAgbWFudWFsU3ViVGhlbWUgPSAnJztcbiAgdGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIHN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICBlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWcgPSBmYWxzZVxuICBlZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgb3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnI6IGFueSA9IFtdXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbk9mZnNldCA9IDBcbiAgb2Rjc0Rlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBkZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQgPSA1MFxuICBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICBkZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGVzaWduYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZGVzaWduYXRpb25SZWY/OiBFbGVtZW50UmVmXG4gIG1hc3RlckRhdGE6IGFueSA9IHt9XG4gIHBvcnRhbERhdGE6IGFueVxuICBhY3RpdmVSb3dFbGVtZW50OiBhbnlcbiAgcmVxdWVzdERhdGE6IGFueVxuICByZXF1ZXN0Um93RGF0YTogYW55XG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZCA9XG4gICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFZGl0Q2JwUGxhbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIHRoaXMucmVxdWVzdFJvd0RhdGEgPSBkYXRhPy5yZXF1ZXN0RGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBkYXRhOicsIGRhdGEpO1xuICAgIC8vIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoY29tcGV0ZW5jaWVzOmFueSk9PntcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddICsgMSBcbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnQmVoYXZpb3JhbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0Z1bmN0aW9uYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRDb21wZXRlbmNpZXNEYXRhKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ3JlcXVlc3RJZCcsIHJlcXVlc3RJZClcbiAgfVxuXG4gIGxvYWRDb21wZXRlbmNpZXNEYXRhKCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb21wZXRlbmN5SnNvbigpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0RhdGEgPSBkYXRhO1xuICAgICAgICBjb25zb2xlLmxvZygnQ29tcGV0ZW5jaWVzIGRhdGEgbG9hZGVkOicsIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbXBldGVuY2llcyBkYXRhOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKSB7XG4gICAgY29uc3QgY29tcHMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcbiAgICBjb21wcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuYmVoYXZpb3JhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZnVuY3Rpb25hbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZnVuY3Rpb25hbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZG9tYWluJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5kb21haW4rKztcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuY2JwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW3RoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgd2luZ19kaXZpc2lvbl9zZWN0aW9uOiBbdGhpcy5wbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBhY3Rpdml0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBjb21wZXRlbmN5U2VhcmNoVGV4dDogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUeXBlOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVRoZW1lOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiBbJyddLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICB0aGVtZVNlYXJjaDogWycnXSxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgY29tcGV0ZW5jaWVzOiB0aGlzLmZiLmFycmF5KHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcyB8fCBbXSksIC8vIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IFt0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnXVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10pIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG5cbiAgZ2V0IHJvbGVSZXNwb25zaWJpbGl0aWVzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3JvbGVfcmVzcG9uc2liaWxpdGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSB8fCBbXSkuZmlsdGVyKGMgPT4gYy50eXBlID09PSB0eXBlKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBzYXZlUm9sZU1hcHBpbmcoKSB7XG4gICAgaWYgKHRoaXMuY2JwRm9ybS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY2JwRm9ybS52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGVkIERhdGE6JywgZm9ybURhdGEpO1xuICAgIGxldCBjYnBQbGFuRGF0YTogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iajtcbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkRhdGEnLCBjYnBQbGFuRGF0YSlcbiAgICBjb25zdCByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5ID0gdGhpcy5jYnBGb3JtLnZhbHVlLnJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSk7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IHRoaXMuY2JwRm9ybS52YWx1ZS5hY3Rpdml0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcSA9XG4gICAge1xuICAgICAgXCJzZWN0b3JfbmFtZVwiOiBjYnBQbGFuRGF0YT8uc2VjdG9ycz8uam9pbihcIixcIiksXG4gICAgICBcImluc3RydWN0aW9uXCI6IGNicFBsYW5EYXRhPy5pbnN0cnVjdGlvbiA/IGNicFBsYW5EYXRhLmluc3RydWN0aW9uIDogJycsXG4gICAgICBcIndpbmdfZGl2aXNpb25fc2VjdGlvblwiOiBmb3JtRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgXCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNcIjogcm9sZVJlc3BvbnNpYmlsaXRpZXNBcnJheSxcbiAgICAgIFwiYWN0aXZpdGllc1wiOiBhY3Rpdml0aWVzLFxuICAgICAgXCJjb21wZXRlbmNpZXNcIjogZm9ybURhdGEuY29tcGV0ZW5jaWVzXG4gICAgfVxuXG4gICAgaWYgKGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkKSB7XG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gZm9ybURhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJycsXG4gICAgICAgIHJlcVtcImRlc2lnbmF0aW9uX25hbWVcIl0gPSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZSA/IGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWUgOiAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgcmVxWydyZXF1ZXN0X2lkJ10gPSB0aGlzLnJlcXVlc3RSb3dEYXRhPy5kZW1hbmRfaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cblxuICBnZXREZXNpZ25hdGlvbihzZWFyY2hUZXh0Pzogc3RyaW5nLCBvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcblxuICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgIGlmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hUZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBjb25zdCByZXFPZmZzZXQgPSAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicpID8gb2Zmc2V0IDogdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgIGxldCByZXFMaW1pdCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgY29uc3QgcGFnZUluZGV4ID0gTWF0aC5mbG9vcihyZXFPZmZzZXQgLyB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCk7XG4gICAgLy8gaWYgd2UncmUgcmVxdWVzdGluZyBmcm9tIGZpcnN0IHBhZ2UsIGNsZWFyIHRoZSBuby1tb3JlLWRhdGEgZ3VhcmRcbiAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICByZXFMaW1pdCA9IDUwXG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgICB9LFxuICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICB9XG4gICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdEJvZHlbJ3NlYXJjaFN0cmluZyddID0gc2VhcmNoVGV4dFxuICAgICAgLy8gd2hlbiBzZWFyY2hpbmcsIHN0YXJ0IGZyb20gZmlyc3QgcGFnZVxuICAgICAgcmVxdWVzdEJvZHkucGFnZU51bWJlciA9IDBcbiAgICAgIC8vIGFsbG93IGxhcmdlciBwYWdlIGZvciBzZWFyY2ggaWYgbmVlZGVkXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlU2l6ZSA9IHBhZ2VJbmRleCA9PT0gMCA/IDUwIDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgIC8vIHJlc2V0IGd1YXJkIHdoZW4gcGVyZm9ybWluZyBhIGZyZXNoIHNlYXJjaFxuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIGluZGljYXRlIGxvYWRpbmcgc3RhdGUgc28gc2Nyb2xsIGhhbmRsZXJzIGRvbid0IHRyaWdnZXIgcGFyYWxsZWwgY2FsbHNcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VhcmNoUHVibGljRGVzaWduYXRpb24ocmVxdWVzdEJvZHkpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKVxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIHN0YXR1czogaXRlbT8uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgLy8gdG90YWwgY291bnQgbWF5IGJlIHByZXNlbnQgaW4gZGlmZmVyZW50IGtleXMgZGVwZW5kaW5nIG9uIEFQSSB2ZXJzaW9uLlxuICAgICAgICAgIC8vIFByZWZlciAncmVzdWx0LnJlc3VsdC50b3RhbGNvdW50JyAobGVnYWN5IGxvd2VyLWNhc2UpIHRoZW4gZGF0YS50b3RhbENvdW50LCB0aGVuIHRvdGFsQ291bnRcbiAgICAgICAgICAvLyBjb25zdCB0b3RhbCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsIF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JywgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMCkpKVxuICAgICAgICAgIC8vIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSB0b3RhbFxuICAgICAgICAgIGNvbnN0IHRvdGFsID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMCk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gTnVtYmVyKHRvdGFsKSB8fCAwO1xuXG4gICAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIHplcm8gKGZpcnN0IHBhZ2UpIHJlcGxhY2UgYmFja3VwLCBvdGhlcndpc2UgYXBwZW5kICsgZGVkdXBlXG4gICAgICAgICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgcmVxT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tYmluZWQgPSAodGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKS5jb25jYXQobWFwcGVkKVxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gXy51bmlxQnkoY29tYmluZWQsIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgc2VydmVyIHJldHVybmVkIG5vIG5ldyBpdGVtcywgbWFyayBhcyBuby1tb3JlLWRhdGEgdG8gc3RvcCBmdXJ0aGVyIHNjcm9sbCByZXF1ZXN0c1xuICAgICAgICAgIGlmICghbWFwcGVkIHx8IG1hcHBlZD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB3ZSd2ZSBsb2FkZWQgYXQgbGVhc3QgdGhlIHRvdGFsIGNvdW50LCBtYXJrIG5vLW1vcmUtZGF0YVxuICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PSB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdmlzaWJsZSBsaXN0IG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBkaXNwbGF5IGNvdW50XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tYXN0ZXJEYXRhLFxuICAgICAgICAgICAgZGVzaWduYXRpb246IFtcbiAgICAgICAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5lbnN1cmVTZWxlY3RlZERlc2lnbmF0aW9uRXhpc3RzKCk7XG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIC8vIFN0b3AgZnVydGhlciBhdXRvbWF0aWMgY2FsbHMgb24gcmVwZWF0ZWQgZXJyb3JzIHRvIGF2b2lkIHRpZ2h0IGxvb3BzXG4gICAgICAgICAgLy8gbG9hZGluZyBmbGFnIGNsZWFyZWQgaW4gZmluYWxpemUoKVxuICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZVxuICAgICAgICAgIC8vIHRoaXMubWF0U25hY2tCYXIub3BlbignVW5hYmxlIHRvIGZldGNoIGRlc2lnbmF0aW9uIGRldGFpbHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIhJylcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uc2V0VmFsdWUoXG4gICAgICB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIHx8ICcnXG4gICAgKTtcbiAgfVxuXG4gIGVuc3VyZVNlbGVjdGVkRGVzaWduYXRpb25FeGlzdHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXT8uc29tZShcbiAgICAgIChkOiBhbnkpID0+IGQubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgY29uc3QgY3VzdG9tT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZCxcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJyxcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9uYW1lOiB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiB0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8IFwiREVTRy0wMDIzMTRcIixcbiAgICAgIH07XG5cbiAgICAgIC8vIOKchSBBZGQgYXQgVE9QIHNvIGl0J3MgdmlzaWJsZSBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pXG4gICAgICBdO1xuXG4gICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gPSBbXG4gICAgICAgIGN1c3RvbU9iaixcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb24nXSB8fCBbXSlcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb25zOiBzdHJpbmdbXSA9XG4gICAgICB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8IFtdO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlbGVjdGVkRGVzaWduYXRpb25zKSB8fCAhc2VsZWN0ZWREZXNpZ25hdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZWN0ZWREZXNpZ25hdGlvbnMuZm9yRWFjaCgoc2VsZWN0ZWROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbi5zb21lKFxuICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgIGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkTmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3RGVzaWduYXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogc2VsZWN0ZWROYW1lLFxuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZScsXG4gICAgICAgICAgaWQ6ICdjdXN0b20tJyArIERhdGUubm93KCkgKyAnLScgKyBNYXRoLnJhbmRvbSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRvIGJhY2t1cCBsaXN0IGFzIHdlbGxcbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW107XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnVuc2hpZnQobmV3RGVzaWduYXRpb24pO1xuXG4gICAgICAgIC8vIEFsc28gdXBkYXRlIHZpc2libGUgbGlzdFxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24udW5zaGlmdChuZXdEZXNpZ25hdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKGN1cnJlbnREZXNpZ25hdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8gcmVzZXQgb25seSBvbiBmcmVzaCBvcGVuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAvLyBpbml0aWFsIGFwaSBsb2FkXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcubWF0LW1kYy1zZWxlY3QtcGFuZWwnXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gcmVtb3ZlIG9sZCBsaXN0ZW5lclxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kXG4gICAgICApO1xuXG4gICAgICAvLyBhZGQgbmV3IGxpc3RlbmVyXG4gICAgICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmQsXG4gICAgICAgIHsgcGFzc2l2ZTogdHJ1ZSB9XG4gICAgICApO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGNvbnN0IGF0Qm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZWxlbWVudC5zY3JvbGxUb3AgPD1cbiAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTA7XG5cbiAgICBpZiAoIWF0Qm90dG9tIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZCA9XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGggfHwgMDtcblxuICAgIGNvbnN0IHZpc2libGUgPVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8ubGVuZ3RoIHx8IDA7XG5cbiAgICBjb25zb2xlLmxvZyh7XG4gICAgICBsb2FkZWQsXG4gICAgICB2aXNpYmxlLFxuICAgICAgdG90YWw6IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnRcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNURVAgMVxuICAgICAqIFNIT1cgTU9SRSBGUk9NIExPQ0FMIENBQ0hFXG4gICAgICovXG4gICAgaWYgKHZpc2libGUgPCBsb2FkZWQpIHtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIC8vIElNUE9SVEFOVFxuICAgICAgLy8gY3JlYXRlIE5FVyBBUlJBWSByZWZlcmVuY2VcbiAgICAgIHRoaXMubWFzdGVyRGF0YSA9IHtcbiAgICAgICAgLi4udGhpcy5tYXN0ZXJEYXRhLFxuICAgICAgICBkZXNpZ25hdGlvbjogW1xuICAgICAgICAgIC4uLnRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgLy8gRk9SQ0UgVUkgVVBEQVRFXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gcmVzdG9yZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wIC0gMjA7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNURVAgMlxuICAgICAqIEZFVENIIE5FWFQgUEFHRVxuICAgICAqL1xuICAgIGlmIChcbiAgICAgIGxvYWRlZCA8IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9uc1xuICAgICkge1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWF0LW1kYy1zZWxlY3QtcGFuZWwnXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwYW5lbCkge1xuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCIgI2RpYWxvZ0NvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+RWRpdCBSb2xlIE1hcHBpbmc8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImNicEZvcm1cIj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cblxuXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibXQtNCBtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjZGVzaWduYXRpb24gZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGRlc2lnbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoKVwiIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktc2VhcmNoLWNvbnRhaW5lclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGRlc2lnbmF0aW9uXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoRGVzaWduYXRpb25cIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZGVzaWduYXRpb25TZWFyY2goJGV2ZW50KVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2w/LnZhbHVlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xlYXItaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZGVzaWduYXRpb24/Lm5hbWVcIiAqbmdGb3I9XCJsZXQgZGVzaWduYXRpb24gb2YgbWFzdGVyRGF0YT8uZGVzaWduYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCBNb3JlLi4uXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIobWFzdGVyRGF0YT8uZGVzaWduYXRpb24pPy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZCBjbGFzcz1cIm5vLWRhdGEtb3B0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udG91Y2hlZCAmJiBkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZGVzaWduYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gLS0+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py50b3RhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uYmVoYXZpb3JhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZnVuY3Rpb25hbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBEb21haW4gQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmRvbWFpbn19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPldpbmcvRGl2aXNpb248L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6MTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Sb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cInJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBsYW5EYXRhPy5yb2xlX3Jlc3BvbnNpYmlsaXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5BY3Rpdml0aWVzPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpdml0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFjdGl2aXRpZXNcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmFjdGl2aXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmN5PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbmhhbmNlZC1jb21wZXRlbmN5LXNlY3Rpb24gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMTogU2VsZWN0IENvbXBldGVuY3kgVHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjEuIFNlbGVjdCBDb3JlIENvbXBldGVuY3kgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVR5cGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDb21wZXRlbmN5IFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQmVoYXZpb3JhbFwiPkJlaGF2aW9yYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb21haW5cIj5Eb21haW48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAyOiBUaGVtZSBTZWxlY3Rpb24gKEJlaGF2aW9yYWwvRnVuY3Rpb25hbCBmcm9tIEpTT04sIERvbWFpbiBtYW51YWwpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+Mi4gU2VsZWN0L0VudGVyIFRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBmcm9tIEpTT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VGhlbWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdGhlbWVzLi4uXCIgZm9ybUNvbnRyb2xOYW1lPVwidGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclRoZW1lcygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRoZW1lIG9mIGZpbHRlcmVkVGhlbWVzXCIgW3ZhbHVlXT1cInRoZW1lLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoZW1lLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRUaGVtZXMubGVuZ3RoID09PSAwICYmIHRoZW1lU2VhcmNoVGV4dFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7dGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFRoZW1lSW5wdXRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFRoZW1lIG1hbnVhbGx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYW51YWwtaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAzOiBTdWItdGhlbWUgU2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lIHx8IChzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4zLiBTZWxlY3QvRW50ZXIgU3ViLXRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBiYXNlZCBvbiBzZWxlY3RlZCB0aGVtZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lTdWJUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHN1Yi10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU3ViVGhlbWVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggaW5wdXQgaW5zaWRlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJzZWFyY2gtb3B0aW9uXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN1Yi10aGVtZXMuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3ViVGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclN1YlRoZW1lcygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWItdGhlbWUgb3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdWJUaGVtZSBvZiBmaWx0ZXJlZFN1YlRoZW1lc1wiIFt2YWx1ZV09XCJzdWJUaGVtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3ViVGhlbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRTdWJUaGVtZXMubGVuZ3RoID09PSAwICYmIHN1YlRoZW1lU2VhcmNoVGV4dFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN1Yi10aGVtZXMgZm91bmQgbWF0Y2hpbmcgXCJ7e3N1YlRoZW1lU2VhcmNoVGV4dH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgRG9tYWluOiBNYW51YWwgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFudWFsLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW51YWxTdWJUaGVtZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBTdWItdGhlbWUgbWFudWFsbHlcIiBjbGFzcz1cIm1hbnVhbC1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWJ1dHRvbi1zZWN0aW9uXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkQ29tcGV0ZW5jeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjYW5BZGRDb21wZXRlbmN5KCkgPyAnYnRuLWFjdGl2ZScgOiAnYnRuLWRpc2FibGUnXCIgKGNsaWNrKT1cImFkZENvbXBldGVuY3koKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBDb21wZXRlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG4gYnRuLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUNvbXBldGVuY3koKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBDb21wZXRlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG4gYnRuLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiIChjbGljayk9XCJjYW5jZWxVcGRhdGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3JhbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBmdW5jdGlvbmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBkb21haW4tcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdFwiIChjbGljayk9XCJlZGl0Q29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIlNhdmVcIiAoY2xpY2spPVwic2F2ZVJvbGVNYXBwaW5nKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PiJdfQ==
720
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFRdEIsTUFBTSxPQUFPLG9CQUFvQjtJQTZDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFNBQUksR0FBSixJQUFJLENB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QixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVkaXQtY2JwLXBsYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q2JwUGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIHBsYW5EYXRhOiBhbnlcbiAgY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuICBjYnBGb3JtOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIC8vIEVuaGFuY2VkIGNvbXBldGVuY3kgc2VsZWN0aW9uIHByb3BlcnRpZXNcbiAgY29tcGV0ZW5jaWVzRGF0YTogYW55W10gPSBbXTtcbiAgYXZhaWxhYmxlVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVTdWJUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZFN1YlRoZW1lczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9ICcnO1xuICBzZWxlY3RlZFRoZW1lID0gJyc7XG4gIHNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgbWFudWFsVGhlbWUgPSAnJztcbiAgbWFudWFsU3ViVGhlbWUgPSAnJztcbiAgdGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIHN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICBlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWcgPSBmYWxzZVxuICBlZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgb3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnI6IGFueSA9IFtdXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbk9mZnNldCA9IDBcbiAgb2Rjc0Rlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBkZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQgPSA1MFxuICBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICBkZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGVzaWduYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZGVzaWduYXRpb25SZWY/OiBFbGVtZW50UmVmXG4gIG1hc3RlckRhdGE6IGFueSA9IHt9XG4gIHBvcnRhbERhdGE6IGFueVxuICBhY3RpdmVSb3dFbGVtZW50OiBhbnlcbiAgcmVxdWVzdERhdGE6IGFueVxuICByZXF1ZXN0Um93RGF0YTogYW55XG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZCA9XG4gICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFZGl0Q2JwUGxhbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIHRoaXMucmVxdWVzdFJvd0RhdGEgPSBkYXRhPy5yZXF1ZXN0RGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBkYXRhOicsIGRhdGEpO1xuICAgIC8vIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoY29tcGV0ZW5jaWVzOmFueSk9PntcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddICsgMSBcbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnQmVoYXZpb3JhbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0Z1bmN0aW9uYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRDb21wZXRlbmNpZXNEYXRhKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ3JlcXVlc3RJZCcsIHJlcXVlc3RJZClcbiAgfVxuXG4gIGxvYWRDb21wZXRlbmNpZXNEYXRhKCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb21wZXRlbmN5SnNvbigpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0RhdGEgPSBkYXRhO1xuICAgICAgICBjb25zb2xlLmxvZygnQ29tcGV0ZW5jaWVzIGRhdGEgbG9hZGVkOicsIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbXBldGVuY2llcyBkYXRhOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKSB7XG4gICAgY29uc3QgY29tcHMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcbiAgICBjb21wcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuYmVoYXZpb3JhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZnVuY3Rpb25hbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZnVuY3Rpb25hbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZG9tYWluJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5kb21haW4rKztcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuY2JwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW3RoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgd2luZ19kaXZpc2lvbl9zZWN0aW9uOiBbdGhpcy5wbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBhY3Rpdml0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBjb21wZXRlbmN5U2VhcmNoVGV4dDogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUeXBlOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVRoZW1lOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiBbJyddLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICB0aGVtZVNlYXJjaDogWycnXSxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgY29tcGV0ZW5jaWVzOiB0aGlzLmZiLmFycmF5KHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcyB8fCBbXSksIC8vIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IFt0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnXVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10pIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG5cbiAgZ2V0IHJvbGVSZXNwb25zaWJpbGl0aWVzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3JvbGVfcmVzcG9uc2liaWxpdGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSB8fCBbXSkuZmlsdGVyKGMgPT4gYy50eXBlID09PSB0eXBlKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBzYXZlUm9sZU1hcHBpbmcoKSB7XG4gICAgaWYgKHRoaXMuY2JwRm9ybS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY2JwRm9ybS52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGVkIERhdGE6JywgZm9ybURhdGEpO1xuICAgIGxldCBjYnBQbGFuRGF0YTogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iajtcbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkRhdGEnLCBjYnBQbGFuRGF0YSlcbiAgICBjb25zdCByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5ID0gdGhpcy5jYnBGb3JtLnZhbHVlLnJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSk7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IHRoaXMuY2JwRm9ybS52YWx1ZS5hY3Rpdml0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcSA9XG4gICAge1xuICAgICAgXCJzZWN0b3JfbmFtZVwiOiBjYnBQbGFuRGF0YT8uc2VjdG9ycz8uam9pbihcIixcIiksXG4gICAgICBcImluc3RydWN0aW9uXCI6IGNicFBsYW5EYXRhPy5pbnN0cnVjdGlvbiA/IGNicFBsYW5EYXRhLmluc3RydWN0aW9uIDogJycsXG4gICAgICBcIndpbmdfZGl2aXNpb25fc2VjdGlvblwiOiBmb3JtRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgXCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNcIjogcm9sZVJlc3BvbnNpYmlsaXRpZXNBcnJheSxcbiAgICAgIFwiYWN0aXZpdGllc1wiOiBhY3Rpdml0aWVzLFxuICAgICAgXCJjb21wZXRlbmNpZXNcIjogZm9ybURhdGEuY29tcGV0ZW5jaWVzXG4gICAgfVxuXG4gICAgaWYgKGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkKSB7XG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gZm9ybURhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJycsXG4gICAgICAgIHJlcVtcImRlc2lnbmF0aW9uX25hbWVcIl0gPSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZSA/IGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWUgOiAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgcmVxWydyZXF1ZXN0X2lkJ10gPSB0aGlzLnJlcXVlc3RSb3dEYXRhPy5kZW1hbmRfaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cblxuICBnZXREZXNpZ25hdGlvbihzZWFyY2hUZXh0Pzogc3RyaW5nLCBvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcblxuICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgIGlmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hUZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBjb25zdCByZXFPZmZzZXQgPSAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicpID8gb2Zmc2V0IDogdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgIGxldCByZXFMaW1pdCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgY29uc3QgcGFnZUluZGV4ID0gTWF0aC5mbG9vcihyZXFPZmZzZXQgLyB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCk7XG4gICAgLy8gaWYgd2UncmUgcmVxdWVzdGluZyBmcm9tIGZpcnN0IHBhZ2UsIGNsZWFyIHRoZSBuby1tb3JlLWRhdGEgZ3VhcmRcbiAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICByZXFMaW1pdCA9IDUwXG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgICB9LFxuICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICB9XG4gICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdEJvZHlbJ3F1ZXJ5J10gPSBzZWFyY2hUZXh0XG4gICAgICAvLyB3aGVuIHNlYXJjaGluZywgc3RhcnQgZnJvbSBmaXJzdCBwYWdlXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlTnVtYmVyID0gMFxuICAgICAgLy8gYWxsb3cgbGFyZ2VyIHBhZ2UgZm9yIHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VTaXplID0gcGFnZUluZGV4ID09PSAwID8gNTAgOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgLy8gcmVzZXQgZ3VhcmQgd2hlbiBwZXJmb3JtaW5nIGEgZnJlc2ggc2VhcmNoXG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaW5kaWNhdGUgbG9hZGluZyBzdGF0ZSBzbyBzY3JvbGwgaGFuZGxlcnMgZG9uJ3QgdHJpZ2dlciBwYXJhbGxlbCBjYWxsc1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pXG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgfSkpXG5cbiAgICAgICAgICAvLyB0b3RhbCBjb3VudCBtYXkgYmUgcHJlc2VudCBpbiBkaWZmZXJlbnQga2V5cyBkZXBlbmRpbmcgb24gQVBJIHZlcnNpb24uXG4gICAgICAgICAgLy8gUHJlZmVyICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnIChsZWdhY3kgbG93ZXItY2FzZSkgdGhlbiBkYXRhLnRvdGFsQ291bnQsIHRoZW4gdG90YWxDb3VudFxuICAgICAgICAgIC8vIGNvbnN0IHRvdGFsID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbGNvdW50JywgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLCBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKSkpXG4gICAgICAgICAgLy8gdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IHRvdGFsXG4gICAgICAgICAgY29uc3QgdG90YWwgPSBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKTtcblxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSBOdW1iZXIodG90YWwpIHx8IDA7XG5cbiAgICAgICAgICAvLyBJZiBvZmZzZXQgaXMgemVybyAoZmlyc3QgcGFnZSkgcmVwbGFjZSBiYWNrdXAsIG90aGVyd2lzZSBhcHBlbmQgKyBkZWR1cGVcbiAgICAgICAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCByZXFPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IG1hcHBlZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9ICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShjb21iaW5lZCwgKGl0OiBhbnkpID0+IChpdD8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiBzZXJ2ZXIgcmV0dXJuZWQgbm8gbmV3IGl0ZW1zLCBtYXJrIGFzIG5vLW1vcmUtZGF0YSB0byBzdG9wIGZ1cnRoZXIgc2Nyb2xsIHJlcXVlc3RzXG4gICAgICAgICAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHdlJ3ZlIGxvYWRlZCBhdCBsZWFzdCB0aGUgdG90YWwgY291bnQsIG1hcmsgbm8tbW9yZS1kYXRhXG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiYgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuc3VyZSB2aXNpYmxlIGxpc3QgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGRpc3BsYXkgY291bnRcbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm1hc3RlckRhdGEsXG4gICAgICAgICAgICBkZXNpZ25hdGlvbjogW1xuICAgICAgICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKVxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLmVuc3VyZVNlbGVjdGVkRGVzaWduYXRpb25FeGlzdHMoKTtcbiAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgLy8gU3RvcCBmdXJ0aGVyIGF1dG9tYXRpYyBjYWxscyBvbiByZXBlYXRlZCBlcnJvcnMgdG8gYXZvaWQgdGlnaHQgbG9vcHNcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggZGVzaWduYXRpb24gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy5zZXRWYWx1ZShcbiAgICAgIHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJydcbiAgICApO1xuICB9XG5cbiAgZW5zdXJlU2VsZWN0ZWREZXNpZ25hdGlvbkV4aXN0cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWU7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddPy5zb21lKFxuICAgICAgKGQ6IGFueSkgPT4gZC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICBjb25zdCBjdXN0b21PYmogPSB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IHRoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgXCJERVNHLTAwMjMxNFwiLFxuICAgICAgfTtcblxuICAgICAgLy8g4pyFIEFkZCBhdCBUT1Agc28gaXQncyB2aXNpYmxlIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBbXG4gICAgICAgIGN1c3RvbU9iaixcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSlcbiAgICAgIF07XG5cbiAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb24nXSA9IFtcbiAgICAgICAgY3VzdG9tT2JqLFxuICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbiddIHx8IFtdKVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBjaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfHwgW107XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWREZXNpZ25hdGlvbnMpIHx8ICFzZWxlY3RlZERlc2lnbmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxlY3RlZERlc2lnbmF0aW9ucy5mb3JFYWNoKChzZWxlY3RlZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uLnNvbWUoXG4gICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWROYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBuZXdEZXNpZ25hdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBzZWxlY3RlZE5hbWUsXG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJyxcbiAgICAgICAgICBpZDogJ2N1c3RvbS0nICsgRGF0ZS5ub3coKSArICctJyArIE1hdGgucmFuZG9tKClcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdG8gYmFja3VwIGxpc3QgYXMgd2VsbFxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPVxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAudW5zaGlmdChuZXdEZXNpZ25hdGlvbik7XG5cbiAgICAgICAgLy8gQWxzbyB1cGRhdGUgdmlzaWJsZSBsaXN0XG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbi51bnNoaWZ0KG5ld0Rlc2lnbmF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoKTogdm9pZCB7XG4gICAgLy8gS2VlcCB0aGUgZGVzaWduYXRpb24gdmFsdWUgYnV0IGNsZWFyIHRoZSBzZWFyY2ggaW5wdXRcbiAgICBjb25zdCBjdXJyZW50RGVzaWduYXRpb24gPSB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJykhLnZhbHVlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIS5zZXRWYWx1ZSgnJylcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSB0aGUgZGVzaWduYXRpb24gdmFsdWUgcmVtYWlucyBzZWxlY3RlZFxuICAgICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG4gICAgICAgIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoY3VycmVudERlc2lnbmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTAwKVxuICB9XG5cbiAgZGVzaWduYXRpb25TZWFyY2goZXZ0OiBhbnkpIHtcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZ0Py50YXJnZXQ/LnZhbHVlXG4gICAgY29uc3QgdHh0ID0gKHNlYXJjaFRleHQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykgcmV0dXJuXG5cbiAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dFxuICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWVcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKVxuICAgIH0gZWxzZSBpZiAodGhpcy5tYXN0ZXJEYXRhICYmIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXApIHtcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoMCwgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQpXG4gICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgICB9XG4gIH1cblxuICBzZXR1cFNjcm9sbExpc3RlbmVyKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuXG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyByZXNldCBvbmx5IG9uIGZyZXNoIG9wZW5cbiAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgIC8vIGluaXRpYWwgYXBpIGxvYWRcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgMCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtbWRjLXNlbGVjdC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgb2xkIGxpc3RlbmVyXG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmRcbiAgICAgICk7XG5cbiAgICAgIC8vIGFkZCBuZXcgbGlzdGVuZXJcbiAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzY3JvbGwnLFxuICAgICAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZCxcbiAgICAgICAgeyBwYXNzaXZlOiB0cnVlIH1cbiAgICAgICk7XG5cbiAgICB9LCAzMDApO1xuICB9XG5cbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgY29uc3QgYXRCb3R0b20gPVxuICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCA8PVxuICAgICAgZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxMDtcblxuICAgIGlmICghYXRCb3R0b20gfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVkID1cbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCB8fCAwO1xuXG4gICAgY29uc3QgdmlzaWJsZSA9XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5sZW5ndGggfHwgMDtcblxuICAgIGNvbnNvbGUubG9nKHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHZpc2libGUsXG4gICAgICB0b3RhbDogdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU1RFUCAxXG4gICAgICogU0hPVyBNT1JFIEZST00gTE9DQUwgQ0FDSEVcbiAgICAgKi9cbiAgICBpZiAodmlzaWJsZSA8IGxvYWRlZCkge1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgLy8gSU1QT1JUQU5UXG4gICAgICAvLyBjcmVhdGUgTkVXIEFSUkFZIHJlZmVyZW5jZVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgICAuLi50aGlzLm1hc3RlckRhdGEsXG4gICAgICAgIGRlc2lnbmF0aW9uOiBbXG4gICAgICAgICAgLi4udGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9O1xuXG4gICAgICAvLyBGT1JDRSBVSSBVUERBVEVcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyByZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgLSAyMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU1RFUCAyXG4gICAgICogRkVUQ0ggTkVYVCBQQUdFXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgbG9hZGVkIDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgIXRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24oXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5tYXQtbWRjLXNlbGVjdC1wYW5lbCdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHBhbmVsKSB7XG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIiAjZGlhbG9nQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5FZGl0IFJvbGUgTWFwcGluZzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiY2JwRm9ybVwiPlxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiIFt2YWx1ZV09XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtdC00IG1hcmdpbi10b3AtcyB3LWZ1bGwgcmVxdWlyZWQtc2VsZWN0XCIgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXNpZ25hdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpXCIgcGFuZWxDbGFzcz1cInNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgIChvcGVuZWRDaGFuZ2UpPVwic2V0dXBTY3JvbGxMaXN0ZW5lcigkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbGVhci1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJkZXNpZ25hdGlvbj8ubmFtZVwiICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkZXNpZ25hdGlvbj8ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkIGNsYXNzPVwibm8tZGF0YS1vcHRpb25cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb24gTm90IEZvdW5kLlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPCEtLSA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy50b3VjaGVkICYmIGRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPiAtLT5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5iZWhhdmlvcmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5mdW5jdGlvbmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbiBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZG9tYWlufX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+V2luZy9EaXZpc2lvbjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ3aW5nX2RpdmlzaW9uX3NlY3Rpb25cIiBbdmFsdWVdPVwicGxhbkRhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDoxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlJvbGVzICYgUmVzcG9uc2liaWxpdGllczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwicm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJvbGVzICYgUmVzcG9uc2liaWxpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGxhbkRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFjdGl2aXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cImFjdGl2aXRpZXNfdGV4dFwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWN0aXZpdGllc1wiIFt2YWx1ZV09XCJwbGFuRGF0YT8uYWN0aXZpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY3k8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuaGFuY2VkLWNvbXBldGVuY3ktc2VjdGlvbiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAxOiBTZWxlY3QgQ29tcGV0ZW5jeSBUeXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+MS4gU2VsZWN0IENvcmUgQ29tcGV0ZW5jeSBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VHlwZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENvbXBldGVuY3kgVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ29tcGV0ZW5jeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCZWhhdmlvcmFsXCI+QmVoYXZpb3JhbDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRvbWFpblwiPkRvbWFpbjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDI6IFRoZW1lIFNlbGVjdGlvbiAoQmVoYXZpb3JhbC9GdW5jdGlvbmFsIGZyb20gSlNPTiwgRG9tYWluIG1hbnVhbCkgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4yLiBTZWxlY3QvRW50ZXIgVGhlbWU8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsOiBTZWFyY2hhYmxlIERyb3Bkb3duIGZyb20gSlNPTiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lUaGVtZVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3QgdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRoZW1lQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGlucHV0IGluc2lkZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwic2VhcmNoLW9wdGlvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aGVtZXMuLi5cIiBmb3JtQ29udHJvbE5hbWU9XCJ0aGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyVGhlbWVzKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRoZW1lIG9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGhlbWUgb2YgZmlsdGVyZWRUaGVtZXNcIiBbdmFsdWVdPVwidGhlbWUubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhlbWUubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFRoZW1lcy5sZW5ndGggPT09IDAgJiYgdGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gdGhlbWVzIGZvdW5kIG1hdGNoaW5nIFwie3t0aGVtZVNlYXJjaFRleHR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIERvbWFpbjogTWFudWFsIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hbnVhbC1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibWFudWFsVGhlbWVJbnB1dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgVGhlbWUgbWFudWFsbHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hbnVhbC1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDM6IFN1Yi10aGVtZSBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWUgfHwgKHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjMuIFNlbGVjdC9FbnRlciBTdWItdGhlbWU8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsOiBTZWFyY2hhYmxlIERyb3Bkb3duIGJhc2VkIG9uIHNlbGVjdGVkIHRoZW1lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdCZWhhdmlvcmFsJyB8fCBzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3Qgc3ViLXRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdWJUaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3ViLXRoZW1lcy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJUaGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyU3ViVGhlbWVzKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN1Yi10aGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN1YlRoZW1lIG9mIGZpbHRlcmVkU3ViVGhlbWVzXCIgW3ZhbHVlXT1cInN1YlRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJUaGVtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFN1YlRoZW1lcy5sZW5ndGggPT09IDAgJiYgc3ViVGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc3ViLXRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7c3ViVGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFN1YlRoZW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFN1Yi10aGVtZSBtYW51YWxseVwiIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRDb21wZXRlbmN5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNhbkFkZENvbXBldGVuY3koKSA/ICdidG4tYWN0aXZlJyA6ICdidG4tZGlzYWJsZSdcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCIgKGNsaWNrKT1cImNhbmNlbFVwZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gYmVoYXZpb3VyYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0XCIgKGNsaWNrKT1cImVkaXRDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiU2F2ZVwiIChjbGljayk9XCJzYXZlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
@@ -1974,7 +1974,7 @@ class EditCbpPlanComponent {
1974
1974
  pageSize: reqLimit,
1975
1975
  };
1976
1976
  if (searchText?.length) {
1977
- requestBody['searchString'] = searchText;
1977
+ requestBody['query'] = searchText;
1978
1978
  // when searching, start from first page
1979
1979
  requestBody.pageNumber = 0;
1980
1980
  // allow larger page for search if needed
@@ -12341,7 +12341,7 @@ class AddDesignationComponent {
12341
12341
  pageSize: reqLimit,
12342
12342
  };
12343
12343
  if (searchText?.length) {
12344
- requestBody['searchString'] = searchText;
12344
+ requestBody['query'] = searchText;
12345
12345
  // when searching, start from first page
12346
12346
  requestBody.pageNumber = 0;
12347
12347
  // allow larger page for search if needed