@datorama/core 22.7.1 → 22.8.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/bundles/datorama-core.umd.js +77 -46
  2. package/bundles/datorama-core.umd.js.map +1 -1
  3. package/bundles/datorama-core.umd.min.js +14 -14
  4. package/bundles/datorama-core.umd.min.js.map +1 -1
  5. package/datorama-core.d.ts +1 -0
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/datorama-core.js +2 -1
  8. package/esm2015/lib/breadcrumbs/breadcrumbs.component.js +4 -2
  9. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  10. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +5 -2
  11. package/esm2015/lib/grid-v2/grid-settings.js +2 -2
  12. package/esm2015/lib/grid-v2/grid-store/grid.service.js +5 -3
  13. package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +7 -1
  14. package/esm2015/lib/rich-text/rich-text.directive.js +15 -33
  15. package/esm2015/lib/rich-text/rich-text.service.js +50 -0
  16. package/esm2015/lib/select/select.component.js +5 -10
  17. package/esm2015/lib/version.js +2 -2
  18. package/esm5/datorama-core.js +2 -1
  19. package/esm5/lib/breadcrumbs/breadcrumbs.component.js +4 -2
  20. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  21. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +5 -2
  22. package/esm5/lib/grid-v2/grid-settings.js +2 -2
  23. package/esm5/lib/grid-v2/grid-store/grid.service.js +5 -3
  24. package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +13 -1
  25. package/esm5/lib/rich-text/rich-text.directive.js +16 -34
  26. package/esm5/lib/rich-text/rich-text.service.js +51 -0
  27. package/esm5/lib/select/select.component.js +5 -10
  28. package/esm5/lib/version.js +2 -2
  29. package/fesm2015/datorama-core.js +69 -46
  30. package/fesm2015/datorama-core.js.map +1 -1
  31. package/fesm5/datorama-core.js +77 -47
  32. package/fesm5/datorama-core.js.map +1 -1
  33. package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
  34. package/lib/grid-v2/grid-settings.d.ts +2 -2
  35. package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +2 -0
  36. package/lib/rich-text/rich-text.directive.d.ts +4 -6
  37. package/lib/rich-text/rich-text.service.d.ts +10 -0
  38. package/package.json +1 -1
@@ -342,9 +342,8 @@ var DatoSelectComponent = /** @class */ (function (_super) {
342
342
  DatoSelectComponent.prototype.writeValue = function (activeOptions) {
343
343
  this._model = activeOptions ? coerceArray(activeOptions) : [];
344
344
  if (this.options) {
345
- var overTheLimit = this.limitSelectedTo && this.isMulti && this._model.length >= this.limitSelectedTo;
346
345
  this.markAsActive(this._model, { deselectAll: true });
347
- overTheLimit && this.updateDisabledState();
346
+ this.limitSelectedTo && this.updateDisabledState();
348
347
  }
349
348
  /** For later updates */
350
349
  this.cdr.markForCheck();
@@ -381,7 +380,7 @@ var DatoSelectComponent = /** @class */ (function (_super) {
381
380
  */
382
381
  if (this.hasValue && this._initialOpen) {
383
382
  this.markAsActive(this._model);
384
- if (this.limitSelectedTo && this._model.length === this.limitSelectedTo) {
383
+ if (this.limitSelectedTo) {
385
384
  this.updateDisabledState();
386
385
  }
387
386
  this._initialOpen = false;
@@ -470,7 +469,6 @@ var DatoSelectComponent = /** @class */ (function (_super) {
470
469
  };
471
470
  DatoSelectComponent.prototype.removeOption = function (option) {
472
471
  var _this = this;
473
- var updateDisabled = this.limitSelectedTo && this._model.length === this.limitSelectedTo;
474
472
  this._model = this._model.filter(function (current) { return current[_this.idKey] !== option[_this.idKey]; });
475
473
  var optionToRemove = this.options.find(function (datoOption) { return datoOption.option && datoOption.option[_this.idKey] === option[_this.idKey]; });
476
474
  /**
@@ -480,7 +478,7 @@ var DatoSelectComponent = /** @class */ (function (_super) {
480
478
  if (optionToRemove) {
481
479
  optionToRemove.active = false;
482
480
  }
483
- updateDisabled && this.updateDisabledState();
481
+ this.limitSelectedTo && this.updateDisabledState();
484
482
  this.onChange(this._model);
485
483
  this.cdr.markForCheck();
486
484
  this.asyncUpdateDropdownPosition();
@@ -828,9 +826,6 @@ var DatoSelectComponent = /** @class */ (function (_super) {
828
826
  if (!datoOption) {
829
827
  return;
830
828
  }
831
- var modelLength = this._model.length;
832
- var updateDisabled = this.limitSelectedTo &&
833
- (modelLength === this.limitSelectedTo || (modelLength === this.limitSelectedTo - 1 && !datoOption.active));
834
829
  datoOption.active = !datoOption.active;
835
830
  var rawOption = datoOption.option;
836
831
  if (datoOption.active) {
@@ -839,7 +834,7 @@ var DatoSelectComponent = /** @class */ (function (_super) {
839
834
  else {
840
835
  this._model = this._model.filter(function (current) { return current[_this.idKey] !== rawOption[_this.idKey]; });
841
836
  }
842
- updateDisabled && this.updateDisabledState();
837
+ this.limitSelectedTo && this.updateDisabledState();
843
838
  this.onChange(this._model);
844
839
  this.cdr.markForCheck();
845
840
  this.asyncUpdateDropdownPosition();
@@ -1096,4 +1091,4 @@ var DatoSelectComponent = /** @class */ (function (_super) {
1096
1091
  return DatoSelectComponent;
1097
1092
  }(BaseCustomControl));
1098
1093
  export { DatoSelectComponent };
1099
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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QUFNO0lBSWxDO1FBREMsS0FBSyxFQUFFOztxRUFDb0I7SUFNNUI7UUFEQyxLQUFLLEVBQUU7OzBEQUNVO0lBSWxCO1FBREMsTUFBTSxFQUFFOzt1REFDMkI7SUFJcEM7UUFEQyxNQUFNLEVBQUU7O3FEQUN1QjtJQUdoQztRQURDLE1BQU0sRUFBRTs7c0RBQzJCO0lBR3BDO1FBREMsTUFBTSxFQUFFOztxREFDdUI7SUE0S2hDO1FBREMsWUFBWSxDQUFDLFVBQVUsQ0FBQzs7OzswREFHeEI7SUE2YUQ7UUFEQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7eUNBQ3BCLGFBQWE7O2dFQUtyQztJQTF3QlUsbUJBQW1CO1FBVC9CLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLDJ4R0FBc0M7WUFDdEMsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixTQUFTLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDO1lBQ3ZDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFFBQVEsRUFBRSxZQUFZO1NBQ3ZCLENBQUM7UUErVEcsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEIsV0FBQSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckIsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7eUNBTk4saUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3pCLFVBQVU7WUFDSCxXQUFXO09BN1R2QixtQkFBbUIsQ0FvNEIvQjtJQUFELDBCQUFDO0NBQUEsQUFwNEJELENBQXlDLGlCQUFpQixHQW80QnpEO1NBcDRCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDdXN0b21Db250cm9sIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wvYmFzZS1jdXN0b20tY29udHJvbCc7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9uc0Rpc3BsYXlMaW1pdCwgU2VsZWN0VHlwZSB9IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcbmltcG9ydCB7IERhdG9PcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3QtYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3ksIGRlZmF1bHRDbGllbnRTZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VhcmNoLnN0cmF0ZWd5JztcbmltcG9ydCB7IGNsb3Nlc3QsIHF1ZXJ5LCBzZXRTdHlsZSB9IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGF0b092ZXJsYXksIERhdG9UZW1wbGF0ZVBvcnRhbCB9IGZyb20gJy4uL2FuZ3VsYXIvb3ZlcmxheSc7XG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IF9zY3JvbGxUb09wdGlvbiB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbC9kYXRhLW5vcm1hbGl6YXRpb24nO1xuaW1wb3J0IHsgRGF0b0FjY29yZGlvbkNvbXBvbmVudCwgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNjb3JkaW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0b0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy9ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC9saXN0LnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBpc0Fycm93VXBEb3duLCBpc0VudGVyLCBpc0VzY2FwZSB9IGZyb20gJy4uL3J4L2V2ZW50cyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBpc1N0cmluZywgc2l6ZSB9IGZyb20gJy4uL3V0aWxzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgekluZGV4UGxlYXNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvei1pbmRleCc7XG5pbXBvcnQgeyBpc1Rlc3RFbnYgfSBmcm9tICcuLi9pc3Rlc3QtZW52JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBQb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvcG9wcGVyJztcbmltcG9ydCB7IHNldERpbWVuc2lvbnMgfSBmcm9tICcuLi9pbnRlcm5hbC9jdXN0b20tZGltZW5zaW9ucyc7XG5cbmNvbnN0IHZhbHVlQWNjZXNzb3IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRvU2VsZWN0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFt2YWx1ZUFjY2Vzc29yLCBEYXRvT3ZlcmxheV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2RhdG9TZWxlY3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ3VzdG9tQ29udHJvbFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIC8qKiBUaGUgZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHBvcnRhbCAgKiovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgZHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRoZSBvdmVybGF5IG9yaWdpbiB3aGljaCBpcyBvbmUgb2YgZGF0by10cmlnZ2VycyAqKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpXG4gIG9yaWdpbjogRWxlbWVudFJlZjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9PcHRpb25zIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0b09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD47XG5cbiAgLyoqIFF1ZXJ5TGlzdCBvZiBkYXRvQWNjb3JkaW9uR3JvdXBzIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBEYXRvQWNjb3JkaW9uQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBhY2NvcmRpb246IFF1ZXJ5TGlzdDxEYXRvQWNjb3JkaW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvR3JvdXBDb21wb25lbnQpXG4gIGdyb3VwczogUXVlcnlMaXN0PERhdG9Hcm91cENvbXBvbmVudD47XG5cbiAgLyoqIEFsbG93aW5nIGN1c3RvbSB0ZW1wbGF0ZSBieSBwYXNzaW5nICpkYXRvQWN0aXZlIGRpcmVjdGl2ZSB3aGljaCBnZXRzIHRoZSBhY3RpdmUgYXMgY29udGV4dCAqL1xuICBAQ29udGVudENoaWxkKERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUpXG4gIGFjdGl2ZTogRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZTtcblxuICAvKiogVGhlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3B0aW9uIGlkICovXG4gIEBJbnB1dCgpXG4gIGlkS2V5ID0gJ2lkJztcblxuICAvKiogVGhlIGxvb2t1cCBrZXkgZm9yIHRoZSBsYWJlbCAqL1xuICBASW5wdXQoKVxuICBsYWJlbEtleSA9ICdsYWJlbCc7XG5cbiAgLyoqIEEgcGxhY2Vob2xkZXIgZm9yIHRoZSB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2NvcmUuc2VsZWN0JztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHNlYXJjaCAqL1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9ICdjb3JlLnNlYXJjaCc7XG5cbiAgLyoqIEN1c3RvbSB0ZXh0IHdoZW4gd2UgZG9uJ3QgaGF2ZSByZXN1bHRzICovXG4gIEBJbnB1dCgpXG4gIHNldCBub0l0ZW1zTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICAvKiogSWYgZGVmaW5lZCwgaW5kaWNhdGVzIGJ5IHdoaWNoIGtleSB0aGUgZGF0YSBzaG91bGQgYmUgbm9ybWFsaXplZCAqL1xuICBASW5wdXQoKVxuICBncm91cEJ5OiBzdHJpbmc7XG5cbiAgLyoqIEFkZC9yZW1vdmVzIHNlYXJjaCBpbnB1dCAqL1xuICBASW5wdXQoKVxuICBpc0NvbWJvID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBpdCdzIGEgZ3JvdXAgKi9cbiAgQElucHV0KClcbiAgaXNHcm91cCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWNpZGUgd2hldGhlciB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgaW50ZXJuYWxseSBiYXNlZCBvbiBzZWFyY2ggcXVlcnkuXG4gICAqIFVzZWZ1bCBmb3IgYXN5bmMgZmlsdGVyaW5nLCB3aGVyZSB3ZSBzZWFyY2ggdGhyb3VnaCBtb3JlIGNvbXBsZXggZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGludGVybmFsU2VhcmNoID0gdHJ1ZTtcblxuICAvKiogRGVib3VuY2UgdGltZSB0byBlbWl0IHNlYXJjaCBxdWVyaWVzICovXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlVGltZSA9IDMwMDtcblxuICAvKiogV2hldGhlciB0byBzaG93IGxvYWRpbmcgaW5kaWNhdG9yICovXG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hlY2tib3ggKi9cbiAgQElucHV0KClcbiAgYWxsb3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBzZWxlY3QgYWxsIGNoaXAuIGVtcHR5IG1lYW5zIGl0J3MgZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0QWxsQ2hpcFR4dCA9ICcnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0ICovXG4gIEBJbnB1dCgpXG4gIHR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLlNJTkdMRTtcblxuICAvKiogQ2xpZW50IHNlYXJjaCBzdHJhdGVneSAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hTdHJhdGVneTogRGF0b1NlbGVjdFNlYXJjaFN0cmF0ZWd5ID0gZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBQb3BwZXJPcHRpb25zWydwbGFjZW1lbnQnXSA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgc2hvd24gKi9cbiAgQElucHV0KClcbiAgbGltaXRUbyA9IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0O1xuXG4gIEBJbnB1dCgnbGltaXRTZWxlY3RlZFRvJylcbiAgc2V0IGxpbWl0U2VsZWN0ZWQobGltaXRTZWxlY3RlZFRvOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyA9IGxpbWl0U2VsZWN0ZWRUbztcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWxsb3cgc29ydGluZyBvZiBzZWxlY3RlZCBvcHRpb25zIGluIG11bHRpIG1vZGUgKi9cbiAgQElucHV0KClcbiAgaXNTb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBFbGVtZW50IHRvIGFwcGVuZCB0aGUgb3B0aW9ucyBvdmVybGF5IHRvICovXG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IHN0cmluZztcblxuICAvKiogVGhlIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTZXQoZGF0YTogYW55W10pIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFJ1bikge1xuICAgICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEoZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqIGRhdGEgbm9ybWFsaXphdGlvbiwgaWYgcmVxdWlyZWQsIHdpbGwgYmUgaGFuZGxlZCBieSBuZ09uSW5pdCBpbiB0aGUgaW5pdGlhbCBydW4gKi9cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKiBJZiBpdCdzIGFzeW5jIHVwZGF0ZXMsIGNyZWF0ZSBtaWNybyB0YXNrIGluIG9yZGVyIHRvIHJlLXN1YnNjcmliZSB0byBjbGlja3MgKi9cbiAgICBpZiAodGhpcy5fZGF0YUlzRGlydHkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YUlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBncm91cHMgYXMgd2VsbCBhcyBvcHRpb25zICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEdyb3VwTGFiZWxzID0gdHJ1ZTtcblxuICAvKiogQWRkIGN1c3RvbSBjbGFzcyB0byB0aGUgc2VsZWN0IGRyb3BEb3duICovXG4gIEBJbnB1dCgpXG4gIGRhdG9TZWxlY3RDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogc2hvdyBlbXB0eSByZXN1bHQgdGV4dCAqL1xuICBASW5wdXQoKVxuICBzaG93RW1wdHlSZXN1bHRzVGV4dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIGtlZXAgZm9jdXMgaW4gaW5wdXQgYWZ0ZXIgc2VsZWN0aW5nIG9wdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAga2VlcEZvY3VzID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgc2VhcmNoIHZhbHVlIHdoZW4gaW50ZXJuYWwgc2VhcmNoIGlzIGZhbHNlICovXG4gIEBPdXRwdXQoKVxuICBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIFt3aXRoQWN0aW9uc10gaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgY2xpY2tzIHNhdmUgKi9cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGZldGNoID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxpbWl0U2VsZWN0ZWRUbzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gICAqL1xuXG4gIGdldCBjb250YWluc0dyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNSZXN1bHRzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNSZXN1bHRzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc3VsdHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTZWxlY3RUeXBlLlNJTkdMRTtcbiAgfVxuXG4gIGdldCBpc011bHRpKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuTVVMVEk7XG4gIH1cblxuICBnZXQgX3Nob3dFbXB0eVJlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0VtcHR5UmVzdWx0c1RleHQgJiYgdGhpcy5fZGF0YSAmJiAoIXRoaXMuaGFzUmVzdWx0cyB8fCAhdGhpcy5fZGF0YS5sZW5ndGgpICYmICF0aGlzLmlzR3JvdXA7XG4gIH1cblxuICBnZXQgX2NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucyhmYWxzZSkubGVuZ3RoO1xuICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLl9tb2RlbC5sZW5ndGg7XG4gICAgcmV0dXJuIGAoJHthY3RpdmVzfS8ke3RvdGFsfSlgO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNBbGxDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVPcHRpb25zKCkuZXZlcnkob3B0aW9uID0+IHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA+IC0xKTtcbiAgfVxuXG4gIGdldCBzaG93U2VsZWN0QWxsQ2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICAvKiogV2hldGhlciBzb21lIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNJbmRldGVybWluYXRlbHlDaGVja2VkKCkge1xuICAgIGxldCBzb21lQ2hlY2tlZCxcbiAgICAgIHNvbWVOb3RDaGVja2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2aXNpYmxlT3B0aW9uIG9mIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2YodmlzaWJsZU9wdGlvbikgPiAtMSkge1xuICAgICAgICBzb21lQ2hlY2tlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb21lTm90Q2hlY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc29tZUNoZWNrZWQgJiYgc29tZU5vdENoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGb3JtQ29udHJvbCB3aGljaCBsaXN0ZW5zIGZvciBzZWFyY2ggdmFsdWUgY2hhbmdlcyAqL1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgLyoqIEV4cG9zZSB0aGUgc2VhcmNoIHRlcm0gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgaGlnaGxpZ2h0IGRpcmVjdGl2ZSAqL1xuICBzZWFyY2hUZXJtID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgUHJvcGVydGllc1xuICAgKi9cbiAgX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5uby1pdGVtcycpO1xuXG4gIC8qKiBTdG9yZSB0aGUgaW5pdGlhbCBkYXRhICovXG4gIF9kYXRhID0gW107XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHdlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIGRhdGEsXG4gICAqICBUaGlzIGlzIG9wdGltaXphdGlvbiBmb3Igbm9uIGFzeW5jIGNhbGxzLlxuICAgKiAqL1xuICBfZGF0YUlzRGlydHkgPSBmYWxzZTtcblxuICAvKiogVHJpZ2dlcnMgdGhlIGZvY3VzIG9uIHRoZSBpbnB1dCAqL1xuICBfZm9jdXMgPSBmYWxzZTtcblxuICAvKiogU3RvcmUgdGhlIGFjdGl2ZSBvcHRpb25zICovXG4gIF9tb2RlbCA9IFtdO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSB0aGUgc2VsZWN0LXRyaWdnZXIgKi9cbiAgX2Rpc2FibGVkO1xuXG4gIC8qKiBXaGV0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgX29wZW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB3ZSBoYXZlIHNlYXJjaCByZXN1bHRzICovXG4gIF9oYXNSZXN1bHRzID0gdHJ1ZTtcblxuICAvKiogSW5kaWNhdGlvbiBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZXMgKi9cbiAgX2luaXRpYWxPcGVuID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBnZW5lcmF0ZSBjYW5jZWwvc2F2ZSBmb290ZXIgKi9cbiAgX3dpdGhBY3Rpb25zID0gZmFsc2U7XG5cbiAgX3dpdGhJbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKiBOb3RpZnkgdGhlIG11bHRpIHRyaWdnZXIgd2hlbiBjbGljayBvdXRzaWRlIHRvIHJlbW92ZSB0aGUgZm9jdXMgICovXG4gIF9jbGlja091dHNpZGUgPSBmYWxzZTtcblxuICAvKiogRHJvcGRvd24gc2l6ZSBjbGFzcyAqL1xuICBfZHJvcGRvd25DbGFzczogc3RyaW5nW107XG5cbiAgLyoqIHRydWUgdW50aWwgbmdPbkluaXQgKi9cbiAgcHJpdmF0ZSBpbml0aWFsUnVuID0gdHJ1ZTtcblxuICAvKiogU2VhcmNoIGNvbnRyb2wgc3Vic2NyaXB0aW9uICovXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDbGlja3Mgb3B0aW9ucyBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBjbGlja3NTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGluZmluaXRlU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkYXRvT3ZlcmxheTogRGF0b092ZXJsYXksXG4gICAgQEF0dHJpYnV0ZSgnbmFrZWQnKSBwdWJsaWMgX25ha2VkLFxuICAgIEBBdHRyaWJ1dGUoJ2RhdG9TaXplJykgcHVibGljIHNpemUsXG4gICAgQEF0dHJpYnV0ZSgnd2lkdGgnKSBwdWJsaWMgd2lkdGg6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l6ZSA9IHNpemUgfHwgJ21kJztcbiAgICB0aGlzLl9kcm9wZG93bkNsYXNzID0gW2BkYXRvLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdG9TZWxlY3RDbGFzcykge1xuICAgICAgdGhpcy5fZHJvcGRvd25DbGFzcy5wdXNoKHRoaXMuZGF0b1NlbGVjdENsYXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLl93aXRoQWN0aW9ucyA9IHRoaXMuc2F2ZS5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCA9IHRoaXMuZmV0Y2gub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmxpc3RlblRvU2VhcmNoKCk7XG4gICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEodGhpcy5fZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB0aGlzLmluaXRpYWxSdW4gPSBmYWxzZTtcbiAgICAvLyBoZWlnaHQgaXMgYmVpbmcgY29udHJvbGxlZCBieSBzaXplIHByb3BlcnR5XG4gICAgc2V0RGltZW5zaW9ucyh0aGlzLndpZHRoLCBudWxsLCB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIG1hcmtUb3VjaGVkKCkge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vblRvdWNoZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuZGV0YWNoKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoYWN0aXZlT3B0aW9uczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IGFjdGl2ZU9wdGlvbnMgPyBjb2VyY2VBcnJheShhY3RpdmVPcHRpb25zKSA6IFtdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG92ZXJUaGVMaW1pdCA9IHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMuaXNNdWx0aSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPj0gdGhpcy5saW1pdFNlbGVjdGVkVG87XG4gICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCwgeyBkZXNlbGVjdEFsbDogdHJ1ZSB9KTtcbiAgICAgIG92ZXJUaGVMaW1pdCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gICAgLyoqIEZvciBsYXRlciB1cGRhdGVzICovXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgb3ZlcmxheVxuICAgKi9cbiAgb3BlbkRyb3Bkb3duKGV2ZW50Pykge1xuICAgIC8qKiBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiB3ZSBjbGljayBvbiB0aGUgdHJpZ2dlciBhbmQgd2UgZG9uJ3QgaGF2ZSBzZWFyY2ggb3IgbXVsdGlwbGUgKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmlzQ29tYm8gJiYgdGhpcy5pc1NpbmdsZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKiBEb24ndCBjbG9zZSB0aGUgZHJvcGRvd24gaWYgd2UgY2xpY2sgb24gdGhlIGlucHV0IGFuZCBpdCdzIG9wZW4gKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICh0aGlzLmlzTXVsdGkgfHwgdGhpcy5pc0NvbWJvKSkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldC5ub2RlTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0b092ZXJsYXkuY3JlYXRlZCkge1xuICAgICAgdGhpcy5jcmVhdGVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5iYWNrRHJvcENsaWNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuICYmIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoKHsgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCB9LCB0aGlzLl9kcm9wZG93bkNsYXNzKTtcblxuICAgIHRoaXMudG9nZ2xlKCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIGZpcnN0IG9wZW4gdGhlIGRyb3Bkb3duIHdlIG5lZWQgdG8gbWFyayB0aGVcbiAgICAgKiBGb3JtQ29udHJvbCB2YWx1ZXMgYXMgYWN0aXZlc1xuICAgICAqL1xuICAgIGlmICh0aGlzLmhhc1ZhbHVlICYmIHRoaXMuX2luaXRpYWxPcGVuKSB7XG4gICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICBpZiAodGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbykge1xuICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2luaXRpYWxPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgc2V0U3R5bGUocXVlcnkoJy5kYXRvLW92ZXJsYXknKSwgJ3pJbmRleCcsIHpJbmRleFBsZWFzZSgpKTtcbiAgICBjb25zdCBkcm9wZG93bkNvbnRhaW5lciA9IHF1ZXJ5KCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duLWNvbnRhaW5lcicpO1xuICAgIHNldFN0eWxlKGRyb3Bkb3duQ29udGFpbmVyLCAnd2lkdGgnLCBgJHt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuXG4gICAgLyoqIFByZXZlbnQgc2Nyb2xsIHdoaWxlIHRoZSBkcm9wZG93biBpcyBvcGVuICovXG4gICAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBpc01vYmlsZSgpID8gJ3RvdWNobW92ZScgOiAnc2Nyb2xsJztcbiAgICAgIGxldCBzY3JvbGxFdmVudCA9IGZyb21FdmVudCh3aW5kb3csIGV2ZW50TmFtZSk7XG4gICAgICBpZiAoaXNNb2JpbGUoKSkge1xuICAgICAgICBzY3JvbGxFdmVudCA9IHNjcm9sbEV2ZW50LnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFkcm9wZG93bkNvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBzY3JvbGxFdmVudC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCk7XG4gIH1cblxuICBjaGVja0FsbChjaGVjazogYm9vbGVhbikge1xuICAgIGxldCBjaGVja2VkID0gY2hlY2s7XG4gICAgaWYgKHRoaXMuX2lzSW5kZXRlcm1pbmF0ZWx5Q2hlY2tlZCkge1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBpc0FsbFZpc2libGUgPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoaXNBbGxWaXNpYmxlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IGNoZWNrZWQgPyB2aXNpYmxlT3B0aW9ucyA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjb25zdCB0ZW1wID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb2RlbCA9IFsuLi50aGlzLl9tb2RlbCwgLi4udGVtcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihvcHRpb24gPT4gdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlb3JkZXJPcHRpb25zKG5ld09yZGVyOiBhbnlbXSkge1xuICAgIHRoaXMuX21vZGVsID0gbmV3T3JkZXI7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gIH1cblxuICByZW1vdmVPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgdXBkYXRlRGlzYWJsZWQgPSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvO1xuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICBjb25zdCBvcHRpb25Ub1JlbW92ZSA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFRvIHByZXZlbnQgY2FzZXMgd2hlbiB0aGUgb3B0aW9ucyBhcmUgbGltaXRlZCBhbmQgZG9lc250IGluY2x1ZGUgdGhlIGFjdGl2ZSBvcHRpb24sXG4gICAgICogdGhhdCBjYW4gYmUgcmVhY2hlZCBvbmx5IGJ5IHNlcnZlciBzZWFyY2guXG4gICAgICovXG4gICAgaWYgKG9wdGlvblRvUmVtb3ZlKSB7XG4gICAgICBvcHRpb25Ub1JlbW92ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGVEaXNhYmxlZCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcmV2ZW50Qm9keVNjcm9sbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG92ZXJsYXkgdG8gZGlzcGxheSB0aGUgc2VsZWN0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBEYXRvVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93bik7XG4gICAgbGV0IGFwcGVuZFRvRWxlbWVudDtcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5hcHBlbmRUbykpIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuYXBwZW5kVG8gYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gdGhpcy5hcHBlbmRUbztcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGVtcGxhdGVQb3J0YWwsIGFwcGVuZFRvRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wcGVyIGRvZXNuJ3Qgc3VwcG9ydCBwZXJmZWN0LXNjcm9sbC1iYXIsIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHlcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpIHtcbiAgICBjb25zdCBwZXJmZWN0U2Nyb2xsQmFyUGFyZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJy5wcycpO1xuICAgIGlmIChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50KSB7XG4gICAgICBmcm9tRXZlbnQocGVyZmVjdFNjcm9sbEJhclBhcmVudCwgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZU9wdGlvbnMoZ2V0UmF3T3B0aW9ucyA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihkYXRvT3B0aW9uID0+ICFkYXRvT3B0aW9uLmRpc2FibGVkKTtcbiAgICBpZiAoZ2V0UmF3T3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIG1hcmtBc0FjdGl2ZShtb2RlbDogYW55W10sIG9wdGlvbnM6IHsgZGVzZWxlY3RBbGw6IGJvb2xlYW4gfSA9IHsgZGVzZWxlY3RBbGw6IGZhbHNlIH0pIHtcbiAgICBjb25zdCBhc0FycmF5ID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICBpZiAob3B0aW9ucy5kZXNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBtb2RlbCkge1xuICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IGFzQXJyYXkuZmluZChjdXJyZW50ID0+IGN1cnJlbnQub3B0aW9uICYmIGN1cnJlbnQub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgYWxsIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2hvd0FsbCgpIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50czogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwQ29tcG9uZW50IG9mIGdyb3VwQ29tcG9uZW50cykge1xuICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAvKiBJZiB0aGlzIGFjY29yZGlvbiBncm91cCBoYXMgYmVlbiBleHBlbmRlZCBieSB0aGUgc2VhcmNoIGZ1bmN0aW9uLFxuICAgICAgICAgdGhlbiBjb2xsYXBzZSBpdCB0byB0aGUgb3JpZ2luYWwgc3RhdGVcbiAgICAgICovXG4gICAgICBpZiAoaXNBY2NvcmRpb24pIHtcbiAgICAgICAgY29uc3QgYW55R3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGFueUdyb3VwLl9fZXhwZW5kZWQpIHtcbiAgICAgICAgICBhbnlHcm91cC5fX2V4cGVuZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBhbnlHcm91cCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3Igb3B0aW9ucyBhbmQgcmV0dXJucyBpZiB3ZSBoYXZlIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuICAgIGNvbnN0IGhhc0dyb3VwcyA9IGdyb3VwQ29tcG9uZW50c0FycmF5Lmxlbmd0aDtcblxuICAgIGlmIChoYXNHcm91cHMpIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBtYXRjaGluZyBncm91cHMgYW5kIGNoaWxkcmVuLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10sIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLl9kYXRhLmxlbmd0aDtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5nZXRHcm91cEtleShncm91cCk7XG4gICAgICBjb25zdCBncm91cE1hdGNoID0gdGhpcy5zZWFyY2hHcm91cExhYmVscyAmJiB0aGlzLnNlYXJjaFN0cmF0ZWd5KGdyb3VwLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG4gICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBncm91cC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGRbdGhpcy5pZEtleV0pO1xuICAgICAgLyogc2hvdy9oaWRlIHRoZSBvcHRpb25zICovXG4gICAgICBjb25zdCBzaG93R3JvdXAgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSwgZ3JvdXBPcHRpb25zLCBncm91cE1hdGNoKTtcblxuICAgICAgaWYgKHNob3dHcm91cCAmJiAhaGFzUmVzdWx0cykge1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmluZCB0aGUgcmlnaHQgY29tcG9uZW50LCBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIGtleSBhc3NpZ25lZCBpbiB0aGUgcHJldmlvdXMgc2VhcmNoLlxuICAgICAgICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBncm91cCBvcHRpb24uXG4gICAgICAqICBUaGUgaW5kZXggaXMgY29uc2lkZXJlZCBsZXNzIHNhZmUsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSBhZnRlciBzb3J0aW5nLiAqL1xuICAgICAgY29uc3QgZ3JvdXBDb21wb25lbnQgPSBncm91cENvbXBvbmVudHNBcnJheS5maW5kKChnOiBhbnkpID0+IGcuX19rZXkgPT09IGdyb3VwS2V5KSB8fCBncm91cENvbXBvbmVudHNBcnJheVtpXTtcbiAgICAgIC8qIFNob3cvaGlkZSB0aGUgZ3JvdXAgKi9cbiAgICAgIGlmIChncm91cENvbXBvbmVudCkge1xuICAgICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gIXNob3dHcm91cDtcbiAgICAgICAgLyogYXNzaWduIGFuIGludGVybmFsIGtleSB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciAoYWJvdmUpLiAqL1xuICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2tleSA9IGdyb3VwS2V5O1xuICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiBvbiBtYXRjaGluZyByZXN1bHRzICovXG4gICAgICAgIGlmIChpc0FjY29yZGlvbiAmJiBzaG93R3JvdXApIHtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcblxuICAgICAgICAgIGlmICghYWNjb3JkaW9uR3JvdXAuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiAqL1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgLyogTWFyayB0aGUgYWNjb3JkaW9uIGFzIGV4cGFuZGVkLCBzbyB3ZSBjYW4gcmV0dXJuIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGxhdGVyICovXG4gICAgICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2V4cGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIG9wdGlvbnMgdG8gc2hvdyBvciBoaWRlIGVhY2ggYW5kIHJldHVybiBpZiByZXN1bHQgaGFzIGJlZW4gZm91bmQuXG4gICAqIENvbnNpZGVyIHdlIGhhdmUgYSBncm91cCB0aGF0IG1hdGNoIHdlIHNob3cgYWxsIG9mIGl0cyBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbk9wdGlvbnModmFsdWU6IHN0cmluZywgZ3JvdXBPcHRpb25zID0gW10sIGdyb3VwTWF0Y2ggPSBmYWxzZSkge1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5Hcm91cCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldKSAhPT0gLTE7XG5cbiAgICAgIGlmIChncm91cE1hdGNoICYmIG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNpemUoZ3JvdXBPcHRpb25zKSB8fCBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zZWFyY2hTdHJhdGVneShkYXRvT3B0aW9uLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IG9mIHRoZSBvcHRpb24gZ3JvdXAuIEl0IGNhbiBiZSB0aGUgZ3JvdXAgSWQgaWYgZXhpc3RzLCBvciB0aGUgbGFiZWwuXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwS2V5KG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24gJiYgKG9wdGlvblt0aGlzLmlkS2V5XSB8fCBvcHRpb25bdGhpcy5sYWJlbEtleV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBzZWFyY2ggY2hhbmdlcyBhbmQgZmlsdGVyIHRoZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3RlblRvU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuaXNDb21ibyAmJlxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU2VhcmNoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdGhpcy5zZWFyY2hPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBvcHRpb24gY2xpY2sgYW5kIGNoYW5nZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9PcHRpb25DbGljayhvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD4pIHtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLyoqIEdhdGhlciBhbGwgdGhlIGNsaWNrcyAqL1xuICAgIGNvbnN0IGNsaWNrcyQgPSBvcHRpb25zLm1hcChvcHRpb24gPT5cbiAgICAgIG9wdGlvbi5jbGljayQucGlwZShcbiAgICAgICAgbWFwKChldmVudDogRXZlbnQpID0+ICh7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvKiogQ29uc2lkZXIgY2hhbmdlIGl0IHRvIHVzZSBldmVudCBkZWxlZ2F0aW9uICovXG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gPSBtZXJnZSguLi5jbGlja3MkKS5zdWJzY3JpYmUoKHsgb3B0aW9uLCBldmVudCB9KSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2sob3B0aW9uKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhvcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSAmJiB0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAga2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFbnRlcihldmVudCkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2soYWN0aXZlKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhhY3RpdmUpO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKTtcbiAgICAgIF9zY3JvbGxUb09wdGlvbih7XG4gICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleDogdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNpbmdsZUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICB0aGlzLl9tb2RlbCA9IFtyYXdPcHRpb25dO1xuICAgIHRoaXMub25DaGFuZ2UocmF3T3B0aW9uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU11bHRpQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbExlbmd0aCA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICBjb25zdCB1cGRhdGVEaXNhYmxlZCA9XG4gICAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJlxuICAgICAgKG1vZGVsTGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyB8fCAobW9kZWxMZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvIC0gMSAmJiAhZGF0b09wdGlvbi5hY3RpdmUpKTtcbiAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9ICFkYXRvT3B0aW9uLmFjdGl2ZTtcbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuY29uY2F0KHJhd09wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gcmF3T3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICB9XG4gICAgdXBkYXRlRGlzYWJsZWQgJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpIHtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSwgJ3Njcm9sbCcpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxZID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGhlaWdodCAtIHNjcm9sbFk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgfHwgb2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uICYmIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkICYmIHRoaXMuZGF0b092ZXJsYXkuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyb3VwIGNvbXBvbmVudCBpcyBBY2NvcmRpb25cbiAgICovXG4gIHByaXZhdGUgaXNBY2NvcmRpb25Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24gJiYgdGhpcy5hY2NvcmRpb24ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFuIGFycmF5IG9mIHRoZSBncm91cCBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk6IExpc3RHcm91cENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCkgPyB0aGlzLmFjY29yZGlvbi5maXJzdC5ncm91cHMudG9BcnJheSgpIDogdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZFN0YXRlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgICBkYXRvT3B0aW9uLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBvdmVybGF5IHdpbGwgYmUgdXBkYXRlIEFGVEVSIENoYW5nZSBEZXRlY3Rpb24gd2FzIGRvbmVcbiAgLy8gU28gdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCAoYW5kIGl0cyBoZWlnaHQpIGlzIHVwZGF0ZVxuICBwcml2YXRlIGFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRvT3ZlcmxheSAmJiB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKSwgMCk7XG4gICAgfVxuICB9XG59XG4iXX0=
1094
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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RUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFFBQVEsRUFBRSxZQUFZO1NBQ3ZCLENBQUM7UUErVEcsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEIsV0FBQSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckIsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7eUNBTk4saUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3pCLFVBQVU7WUFDSCxXQUFXO09BN1R2QixtQkFBbUIsQ0ErM0IvQjtJQUFELDBCQUFDO0NBQUEsQUEvM0JELENBQXlDLGlCQUFpQixHQSszQnpEO1NBLzNCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDdXN0b21Db250cm9sIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wvYmFzZS1jdXN0b20tY29udHJvbCc7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9uc0Rpc3BsYXlMaW1pdCwgU2VsZWN0VHlwZSB9IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcbmltcG9ydCB7IERhdG9PcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3QtYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3ksIGRlZmF1bHRDbGllbnRTZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VhcmNoLnN0cmF0ZWd5JztcbmltcG9ydCB7IGNsb3Nlc3QsIHF1ZXJ5LCBzZXRTdHlsZSB9IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGF0b092ZXJsYXksIERhdG9UZW1wbGF0ZVBvcnRhbCB9IGZyb20gJy4uL2FuZ3VsYXIvb3ZlcmxheSc7XG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IF9zY3JvbGxUb09wdGlvbiB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbC9kYXRhLW5vcm1hbGl6YXRpb24nO1xuaW1wb3J0IHsgRGF0b0FjY29yZGlvbkNvbXBvbmVudCwgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNjb3JkaW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0b0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy9ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC9saXN0LnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBpc0Fycm93VXBEb3duLCBpc0VudGVyLCBpc0VzY2FwZSB9IGZyb20gJy4uL3J4L2V2ZW50cyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBpc1N0cmluZywgc2l6ZSB9IGZyb20gJy4uL3V0aWxzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgekluZGV4UGxlYXNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvei1pbmRleCc7XG5pbXBvcnQgeyBpc1Rlc3RFbnYgfSBmcm9tICcuLi9pc3Rlc3QtZW52JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBQb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvcG9wcGVyJztcbmltcG9ydCB7IHNldERpbWVuc2lvbnMgfSBmcm9tICcuLi9pbnRlcm5hbC9jdXN0b20tZGltZW5zaW9ucyc7XG5cbmNvbnN0IHZhbHVlQWNjZXNzb3IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRvU2VsZWN0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFt2YWx1ZUFjY2Vzc29yLCBEYXRvT3ZlcmxheV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2RhdG9TZWxlY3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ3VzdG9tQ29udHJvbFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIC8qKiBUaGUgZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHBvcnRhbCAgKiovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgZHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRoZSBvdmVybGF5IG9yaWdpbiB3aGljaCBpcyBvbmUgb2YgZGF0by10cmlnZ2VycyAqKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpXG4gIG9yaWdpbjogRWxlbWVudFJlZjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9PcHRpb25zIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0b09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD47XG5cbiAgLyoqIFF1ZXJ5TGlzdCBvZiBkYXRvQWNjb3JkaW9uR3JvdXBzIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBEYXRvQWNjb3JkaW9uQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBhY2NvcmRpb246IFF1ZXJ5TGlzdDxEYXRvQWNjb3JkaW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvR3JvdXBDb21wb25lbnQpXG4gIGdyb3VwczogUXVlcnlMaXN0PERhdG9Hcm91cENvbXBvbmVudD47XG5cbiAgLyoqIEFsbG93aW5nIGN1c3RvbSB0ZW1wbGF0ZSBieSBwYXNzaW5nICpkYXRvQWN0aXZlIGRpcmVjdGl2ZSB3aGljaCBnZXRzIHRoZSBhY3RpdmUgYXMgY29udGV4dCAqL1xuICBAQ29udGVudENoaWxkKERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUpXG4gIGFjdGl2ZTogRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZTtcblxuICAvKiogVGhlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3B0aW9uIGlkICovXG4gIEBJbnB1dCgpXG4gIGlkS2V5ID0gJ2lkJztcblxuICAvKiogVGhlIGxvb2t1cCBrZXkgZm9yIHRoZSBsYWJlbCAqL1xuICBASW5wdXQoKVxuICBsYWJlbEtleSA9ICdsYWJlbCc7XG5cbiAgLyoqIEEgcGxhY2Vob2xkZXIgZm9yIHRoZSB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2NvcmUuc2VsZWN0JztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHNlYXJjaCAqL1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9ICdjb3JlLnNlYXJjaCc7XG5cbiAgLyoqIEN1c3RvbSB0ZXh0IHdoZW4gd2UgZG9uJ3QgaGF2ZSByZXN1bHRzICovXG4gIEBJbnB1dCgpXG4gIHNldCBub0l0ZW1zTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICAvKiogSWYgZGVmaW5lZCwgaW5kaWNhdGVzIGJ5IHdoaWNoIGtleSB0aGUgZGF0YSBzaG91bGQgYmUgbm9ybWFsaXplZCAqL1xuICBASW5wdXQoKVxuICBncm91cEJ5OiBzdHJpbmc7XG5cbiAgLyoqIEFkZC9yZW1vdmVzIHNlYXJjaCBpbnB1dCAqL1xuICBASW5wdXQoKVxuICBpc0NvbWJvID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBpdCdzIGEgZ3JvdXAgKi9cbiAgQElucHV0KClcbiAgaXNHcm91cCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWNpZGUgd2hldGhlciB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgaW50ZXJuYWxseSBiYXNlZCBvbiBzZWFyY2ggcXVlcnkuXG4gICAqIFVzZWZ1bCBmb3IgYXN5bmMgZmlsdGVyaW5nLCB3aGVyZSB3ZSBzZWFyY2ggdGhyb3VnaCBtb3JlIGNvbXBsZXggZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGludGVybmFsU2VhcmNoID0gdHJ1ZTtcblxuICAvKiogRGVib3VuY2UgdGltZSB0byBlbWl0IHNlYXJjaCBxdWVyaWVzICovXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlVGltZSA9IDMwMDtcblxuICAvKiogV2hldGhlciB0byBzaG93IGxvYWRpbmcgaW5kaWNhdG9yICovXG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hlY2tib3ggKi9cbiAgQElucHV0KClcbiAgYWxsb3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBzZWxlY3QgYWxsIGNoaXAuIGVtcHR5IG1lYW5zIGl0J3MgZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0QWxsQ2hpcFR4dCA9ICcnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0ICovXG4gIEBJbnB1dCgpXG4gIHR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLlNJTkdMRTtcblxuICAvKiogQ2xpZW50IHNlYXJjaCBzdHJhdGVneSAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hTdHJhdGVneTogRGF0b1NlbGVjdFNlYXJjaFN0cmF0ZWd5ID0gZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBQb3BwZXJPcHRpb25zWydwbGFjZW1lbnQnXSA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgc2hvd24gKi9cbiAgQElucHV0KClcbiAgbGltaXRUbyA9IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0O1xuXG4gIEBJbnB1dCgnbGltaXRTZWxlY3RlZFRvJylcbiAgc2V0IGxpbWl0U2VsZWN0ZWQobGltaXRTZWxlY3RlZFRvOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyA9IGxpbWl0U2VsZWN0ZWRUbztcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWxsb3cgc29ydGluZyBvZiBzZWxlY3RlZCBvcHRpb25zIGluIG11bHRpIG1vZGUgKi9cbiAgQElucHV0KClcbiAgaXNTb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBFbGVtZW50IHRvIGFwcGVuZCB0aGUgb3B0aW9ucyBvdmVybGF5IHRvICovXG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IHN0cmluZztcblxuICAvKiogVGhlIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTZXQoZGF0YTogYW55W10pIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFJ1bikge1xuICAgICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEoZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqIGRhdGEgbm9ybWFsaXphdGlvbiwgaWYgcmVxdWlyZWQsIHdpbGwgYmUgaGFuZGxlZCBieSBuZ09uSW5pdCBpbiB0aGUgaW5pdGlhbCBydW4gKi9cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKiBJZiBpdCdzIGFzeW5jIHVwZGF0ZXMsIGNyZWF0ZSBtaWNybyB0YXNrIGluIG9yZGVyIHRvIHJlLXN1YnNjcmliZSB0byBjbGlja3MgKi9cbiAgICBpZiAodGhpcy5fZGF0YUlzRGlydHkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YUlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBncm91cHMgYXMgd2VsbCBhcyBvcHRpb25zICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEdyb3VwTGFiZWxzID0gdHJ1ZTtcblxuICAvKiogQWRkIGN1c3RvbSBjbGFzcyB0byB0aGUgc2VsZWN0IGRyb3BEb3duICovXG4gIEBJbnB1dCgpXG4gIGRhdG9TZWxlY3RDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogc2hvdyBlbXB0eSByZXN1bHQgdGV4dCAqL1xuICBASW5wdXQoKVxuICBzaG93RW1wdHlSZXN1bHRzVGV4dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIGtlZXAgZm9jdXMgaW4gaW5wdXQgYWZ0ZXIgc2VsZWN0aW5nIG9wdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAga2VlcEZvY3VzID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgc2VhcmNoIHZhbHVlIHdoZW4gaW50ZXJuYWwgc2VhcmNoIGlzIGZhbHNlICovXG4gIEBPdXRwdXQoKVxuICBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIFt3aXRoQWN0aW9uc10gaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgY2xpY2tzIHNhdmUgKi9cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGZldGNoID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxpbWl0U2VsZWN0ZWRUbzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gICAqL1xuXG4gIGdldCBjb250YWluc0dyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNSZXN1bHRzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNSZXN1bHRzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc3VsdHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTZWxlY3RUeXBlLlNJTkdMRTtcbiAgfVxuXG4gIGdldCBpc011bHRpKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuTVVMVEk7XG4gIH1cblxuICBnZXQgX3Nob3dFbXB0eVJlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0VtcHR5UmVzdWx0c1RleHQgJiYgdGhpcy5fZGF0YSAmJiAoIXRoaXMuaGFzUmVzdWx0cyB8fCAhdGhpcy5fZGF0YS5sZW5ndGgpICYmICF0aGlzLmlzR3JvdXA7XG4gIH1cblxuICBnZXQgX2NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucyhmYWxzZSkubGVuZ3RoO1xuICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLl9tb2RlbC5sZW5ndGg7XG4gICAgcmV0dXJuIGAoJHthY3RpdmVzfS8ke3RvdGFsfSlgO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNBbGxDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVPcHRpb25zKCkuZXZlcnkob3B0aW9uID0+IHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA+IC0xKTtcbiAgfVxuXG4gIGdldCBzaG93U2VsZWN0QWxsQ2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICAvKiogV2hldGhlciBzb21lIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNJbmRldGVybWluYXRlbHlDaGVja2VkKCkge1xuICAgIGxldCBzb21lQ2hlY2tlZCxcbiAgICAgIHNvbWVOb3RDaGVja2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2aXNpYmxlT3B0aW9uIG9mIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2YodmlzaWJsZU9wdGlvbikgPiAtMSkge1xuICAgICAgICBzb21lQ2hlY2tlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb21lTm90Q2hlY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc29tZUNoZWNrZWQgJiYgc29tZU5vdENoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGb3JtQ29udHJvbCB3aGljaCBsaXN0ZW5zIGZvciBzZWFyY2ggdmFsdWUgY2hhbmdlcyAqL1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgLyoqIEV4cG9zZSB0aGUgc2VhcmNoIHRlcm0gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgaGlnaGxpZ2h0IGRpcmVjdGl2ZSAqL1xuICBzZWFyY2hUZXJtID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgUHJvcGVydGllc1xuICAgKi9cbiAgX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5uby1pdGVtcycpO1xuXG4gIC8qKiBTdG9yZSB0aGUgaW5pdGlhbCBkYXRhICovXG4gIF9kYXRhID0gW107XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHdlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIGRhdGEsXG4gICAqICBUaGlzIGlzIG9wdGltaXphdGlvbiBmb3Igbm9uIGFzeW5jIGNhbGxzLlxuICAgKiAqL1xuICBfZGF0YUlzRGlydHkgPSBmYWxzZTtcblxuICAvKiogVHJpZ2dlcnMgdGhlIGZvY3VzIG9uIHRoZSBpbnB1dCAqL1xuICBfZm9jdXMgPSBmYWxzZTtcblxuICAvKiogU3RvcmUgdGhlIGFjdGl2ZSBvcHRpb25zICovXG4gIF9tb2RlbCA9IFtdO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSB0aGUgc2VsZWN0LXRyaWdnZXIgKi9cbiAgX2Rpc2FibGVkO1xuXG4gIC8qKiBXaGV0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgX29wZW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB3ZSBoYXZlIHNlYXJjaCByZXN1bHRzICovXG4gIF9oYXNSZXN1bHRzID0gdHJ1ZTtcblxuICAvKiogSW5kaWNhdGlvbiBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZXMgKi9cbiAgX2luaXRpYWxPcGVuID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBnZW5lcmF0ZSBjYW5jZWwvc2F2ZSBmb290ZXIgKi9cbiAgX3dpdGhBY3Rpb25zID0gZmFsc2U7XG5cbiAgX3dpdGhJbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKiBOb3RpZnkgdGhlIG11bHRpIHRyaWdnZXIgd2hlbiBjbGljayBvdXRzaWRlIHRvIHJlbW92ZSB0aGUgZm9jdXMgICovXG4gIF9jbGlja091dHNpZGUgPSBmYWxzZTtcblxuICAvKiogRHJvcGRvd24gc2l6ZSBjbGFzcyAqL1xuICBfZHJvcGRvd25DbGFzczogc3RyaW5nW107XG5cbiAgLyoqIHRydWUgdW50aWwgbmdPbkluaXQgKi9cbiAgcHJpdmF0ZSBpbml0aWFsUnVuID0gdHJ1ZTtcblxuICAvKiogU2VhcmNoIGNvbnRyb2wgc3Vic2NyaXB0aW9uICovXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDbGlja3Mgb3B0aW9ucyBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBjbGlja3NTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGluZmluaXRlU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkYXRvT3ZlcmxheTogRGF0b092ZXJsYXksXG4gICAgQEF0dHJpYnV0ZSgnbmFrZWQnKSBwdWJsaWMgX25ha2VkLFxuICAgIEBBdHRyaWJ1dGUoJ2RhdG9TaXplJykgcHVibGljIHNpemUsXG4gICAgQEF0dHJpYnV0ZSgnd2lkdGgnKSBwdWJsaWMgd2lkdGg6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l6ZSA9IHNpemUgfHwgJ21kJztcbiAgICB0aGlzLl9kcm9wZG93bkNsYXNzID0gW2BkYXRvLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdG9TZWxlY3RDbGFzcykge1xuICAgICAgdGhpcy5fZHJvcGRvd25DbGFzcy5wdXNoKHRoaXMuZGF0b1NlbGVjdENsYXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLl93aXRoQWN0aW9ucyA9IHRoaXMuc2F2ZS5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCA9IHRoaXMuZmV0Y2gub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmxpc3RlblRvU2VhcmNoKCk7XG4gICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEodGhpcy5fZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB0aGlzLmluaXRpYWxSdW4gPSBmYWxzZTtcbiAgICAvLyBoZWlnaHQgaXMgYmVpbmcgY29udHJvbGxlZCBieSBzaXplIHByb3BlcnR5XG4gICAgc2V0RGltZW5zaW9ucyh0aGlzLndpZHRoLCBudWxsLCB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIG1hcmtUb3VjaGVkKCkge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vblRvdWNoZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuZGV0YWNoKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoYWN0aXZlT3B0aW9uczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IGFjdGl2ZU9wdGlvbnMgPyBjb2VyY2VBcnJheShhY3RpdmVPcHRpb25zKSA6IFtdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsLCB7IGRlc2VsZWN0QWxsOiB0cnVlIH0pO1xuICAgICAgdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgfVxuICAgIC8qKiBGb3IgbGF0ZXIgdXBkYXRlcyAqL1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG92ZXJsYXlcbiAgICovXG4gIG9wZW5Ecm9wZG93bihldmVudD8pIHtcbiAgICAvKiogQ2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gd2UgY2xpY2sgb24gdGhlIHRyaWdnZXIgYW5kIHdlIGRvbid0IGhhdmUgc2VhcmNoIG9yIG11bHRpcGxlICovXG4gICAgaWYgKHRoaXMub3BlbiAmJiAhdGhpcy5pc0NvbWJvICYmIHRoaXMuaXNTaW5nbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiogRG9uJ3QgY2xvc2UgdGhlIGRyb3Bkb3duIGlmIHdlIGNsaWNrIG9uIHRoZSBpbnB1dCBhbmQgaXQncyBvcGVuICovXG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC50YXJnZXQubm9kZU5hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0b092ZXJsYXkuYmFja0Ryb3BDbGljayQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICAgIHRoaXMub3BlbiAmJiB0aGlzLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaCh7IHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSwgdGhpcy5fZHJvcGRvd25DbGFzcyk7XG5cbiAgICB0aGlzLnRvZ2dsZSgpO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiB3ZSBmaXJzdCBvcGVuIHRoZSBkcm9wZG93biB3ZSBuZWVkIHRvIG1hcmsgdGhlXG4gICAgICogRm9ybUNvbnRyb2wgdmFsdWVzIGFzIGFjdGl2ZXNcbiAgICAgKi9cbiAgICBpZiAodGhpcy5oYXNWYWx1ZSAmJiB0aGlzLl9pbml0aWFsT3Blbikge1xuICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgaWYgKHRoaXMubGltaXRTZWxlY3RlZFRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5pdGlhbE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlSW5maW5pdGVTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBzZXRTdHlsZShxdWVyeSgnLmRhdG8tb3ZlcmxheScpLCAnekluZGV4JywgekluZGV4UGxlYXNlKCkpO1xuICAgIGNvbnN0IGRyb3Bkb3duQ29udGFpbmVyID0gcXVlcnkoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24tY29udGFpbmVyJyk7XG4gICAgc2V0U3R5bGUoZHJvcGRvd25Db250YWluZXIsICd3aWR0aCcsIGAke3RoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG5cbiAgICAvKiogUHJldmVudCBzY3JvbGwgd2hpbGUgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgICBpZiAoaXNUZXN0RW52KCkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGlzTW9iaWxlKCkgPyAndG91Y2htb3ZlJyA6ICdzY3JvbGwnO1xuICAgICAgbGV0IHNjcm9sbEV2ZW50ID0gZnJvbUV2ZW50KHdpbmRvdywgZXZlbnROYW1lKTtcbiAgICAgIGlmIChpc01vYmlsZSgpKSB7XG4gICAgICAgIHNjcm9sbEV2ZW50ID0gc2Nyb2xsRXZlbnQucGlwZShmaWx0ZXIoZXZlbnQgPT4gIWRyb3Bkb3duQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiA9IHNjcm9sbEV2ZW50LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShlID0+IHRoaXMuY2xvc2UoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVQZXJmZWN0U2Nyb2xsQmFyKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb09wdGlvbkNsaWNrKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKTtcbiAgfVxuXG4gIGNoZWNrQWxsKGNoZWNrOiBib29sZWFuKSB7XG4gICAgbGV0IGNoZWNrZWQgPSBjaGVjaztcbiAgICBpZiAodGhpcy5faXNJbmRldGVybWluYXRlbHlDaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBpZiAoIWRhdG9PcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBjaGVja2VkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpO1xuICAgIGNvbnN0IGlzQWxsVmlzaWJsZSA9IHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpc0FsbFZpc2libGUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gY2hlY2tlZCA/IHZpc2libGVPcHRpb25zIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID09PSAtMSkge1xuICAgICAgICAgICAgdGVtcC5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vZGVsID0gWy4uLnRoaXMuX21vZGVsLCAuLi50ZW1wXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKG9wdGlvbiA9PiB2aXNpYmxlT3B0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcmVvcmRlck9wdGlvbnMobmV3T3JkZXI6IGFueVtdKSB7XG4gICAgdGhpcy5fbW9kZWwgPSBuZXdPcmRlcjtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgfVxuXG4gIHJlbW92ZU9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnRbdGhpcy5pZEtleV0gIT09IG9wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgY29uc3Qgb3B0aW9uVG9SZW1vdmUgPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgIGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24gJiYgZGF0b09wdGlvbi5vcHRpb25bdGhpcy5pZEtleV0gPT09IG9wdGlvblt0aGlzLmlkS2V5XVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBUbyBwcmV2ZW50IGNhc2VzIHdoZW4gdGhlIG9wdGlvbnMgYXJlIGxpbWl0ZWQgYW5kIGRvZXNudCBpbmNsdWRlIHRoZSBhY3RpdmUgb3B0aW9uLFxuICAgICAqIHRoYXQgY2FuIGJlIHJlYWNoZWQgb25seSBieSBzZXJ2ZXIgc2VhcmNoLlxuICAgICAqL1xuICAgIGlmIChvcHRpb25Ub1JlbW92ZSkge1xuICAgICAgb3B0aW9uVG9SZW1vdmUuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcHJldmVudEJvZHlTY3JvbGwoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNBcnJvd1VwRG93bihldmVudCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBvdmVybGF5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVQb3J0YWwgPSBuZXcgRGF0b1RlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd24pO1xuICAgIGxldCBhcHBlbmRUb0VsZW1lbnQ7XG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuYXBwZW5kVG8pKSB7XG4gICAgICBhcHBlbmRUb0VsZW1lbnQgPSBjbG9zZXN0KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCB0aGlzLmFwcGVuZFRvIGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IHRoaXMuYXBwZW5kVG87XG4gICAgfVxuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5jcmVhdGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRlbXBsYXRlUG9ydGFsLCBhcHBlbmRUb0VsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHBlciBkb2Vzbid0IHN1cHBvcnQgcGVyZmVjdC1zY3JvbGwtYmFyLCBzbyB3ZSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVBlcmZlY3RTY3JvbGxCYXIoKSB7XG4gICAgY29uc3QgcGVyZmVjdFNjcm9sbEJhclBhcmVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsICcucHMnKTtcbiAgICBpZiAocGVyZmVjdFNjcm9sbEJhclBhcmVudCkge1xuICAgICAgZnJvbUV2ZW50KHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQsICdzY3JvbGwnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTApLFxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRvT3ZlcmxheS5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVPcHRpb25zKGdldFJhd09wdGlvbnMgPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoZGF0b09wdGlvbiA9PiAhZGF0b09wdGlvbi5kaXNhYmxlZCk7XG4gICAgaWYgKGdldFJhd09wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm1hcChkYXRvT3B0aW9uID0+IGRhdG9PcHRpb24ub3B0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZVxuICAgKi9cbiAgcHJpdmF0ZSBtYXJrQXNBY3RpdmUobW9kZWw6IGFueVtdLCBvcHRpb25zOiB7IGRlc2VsZWN0QWxsOiBib29sZWFuIH0gPSB7IGRlc2VsZWN0QWxsOiBmYWxzZSB9KSB7XG4gICAgY29uc3QgYXNBcnJheSA9IHRoaXMub3B0aW9ucy50b0FycmF5KCk7XG4gICAgaWYgKG9wdGlvbnMuZGVzZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgbW9kZWwpIHtcbiAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSBhc0FycmF5LmZpbmQoY3VycmVudCA9PiBjdXJyZW50Lm9wdGlvbiAmJiBjdXJyZW50Lm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5hY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGFsbCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHNob3dBbGwoKSB7XG4gICAgY29uc3QgaXNBY2NvcmRpb24gPSB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKTtcbiAgICBjb25zdCBncm91cENvbXBvbmVudHM6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuXG4gICAgZm9yIChjb25zdCBncm91cENvbXBvbmVudCBvZiBncm91cENvbXBvbmVudHMpIHtcbiAgICAgIGdyb3VwQ29tcG9uZW50Ll9oaWRkZW4gPSBmYWxzZTtcblxuICAgICAgLyogSWYgdGhpcyBhY2NvcmRpb24gZ3JvdXAgaGFzIGJlZW4gZXhwZW5kZWQgYnkgdGhlIHNlYXJjaCBmdW5jdGlvbixcbiAgICAgICAgIHRoZW4gY29sbGFwc2UgaXQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlXG4gICAgICAqL1xuICAgICAgaWYgKGlzQWNjb3JkaW9uKSB7XG4gICAgICAgIGNvbnN0IGFueUdyb3VwID0gZ3JvdXBDb21wb25lbnQgYXMgYW55O1xuXG4gICAgICAgIGlmIChhbnlHcm91cC5fX2V4cGVuZGVkKSB7XG4gICAgICAgICAgYW55R3JvdXAuX19leHBlbmRlZCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGFjY29yZGlvbkdyb3VwID0gYW55R3JvdXAgYXMgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50O1xuICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmV4cGFuZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIG9wdGlvbnMgYW5kIHJldHVybnMgaWYgd2UgaGF2ZSByZXN1bHRcbiAgICovXG4gIHByaXZhdGUgc2VhcmNoT3B0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGhhc1Jlc3VsdCA9IGZhbHNlO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50c0FycmF5OiBMaXN0R3JvdXBDb21wb25lbnRbXSA9IHRoaXMuZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTtcbiAgICBjb25zdCBoYXNHcm91cHMgPSBncm91cENvbXBvbmVudHNBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoaGFzR3JvdXBzKSB7XG4gICAgICBoYXNSZXN1bHQgPSB0aGlzLnNlYXJjaEluR3JvdXBzKGdyb3VwQ29tcG9uZW50c0FycmF5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5PcHRpb25zKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgbWF0Y2hpbmcgZ3JvdXBzIGFuZCBjaGlsZHJlbi5cbiAgICovXG4gIHByaXZhdGUgc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNBY2NvcmRpb24gPSB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5fZGF0YS5sZW5ndGg7XG4gICAgbGV0IGhhc1Jlc3VsdHMgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuX2RhdGFbaV07XG4gICAgICBjb25zdCBncm91cEtleSA9IHRoaXMuZ2V0R3JvdXBLZXkoZ3JvdXApO1xuICAgICAgY29uc3QgZ3JvdXBNYXRjaCA9IHRoaXMuc2VhcmNoR3JvdXBMYWJlbHMgJiYgdGhpcy5zZWFyY2hTdHJhdGVneShncm91cCwgdmFsdWUsIHRoaXMubGFiZWxLZXkpO1xuICAgICAgY29uc3QgZ3JvdXBPcHRpb25zID0gZ3JvdXAuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkW3RoaXMuaWRLZXldKTtcbiAgICAgIC8qIHNob3cvaGlkZSB0aGUgb3B0aW9ucyAqL1xuICAgICAgY29uc3Qgc2hvd0dyb3VwID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUsIGdyb3VwT3B0aW9ucywgZ3JvdXBNYXRjaCk7XG5cbiAgICAgIGlmIChzaG93R3JvdXAgJiYgIWhhc1Jlc3VsdHMpIHtcbiAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIEZpbmQgdGhlIHJpZ2h0IGNvbXBvbmVudCwgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcm5hbCBrZXkgYXNzaWduZWQgaW4gdGhlIHByZXZpb3VzIHNlYXJjaC5cbiAgICAgICAgIFdoZW4gbm8gbWF0Y2ggaXMgZm91bmQsIGZhbGxpbmcgYmFjayB0byB0aGUgc2FtZSBpbmRleCBhcyB0aGUgZ3JvdXAgb3B0aW9uLlxuICAgICAgKiAgVGhlIGluZGV4IGlzIGNvbnNpZGVyZWQgbGVzcyBzYWZlLCBiZWNhdXNlIGl0IGNhbiBjaGFuZ2UgYWZ0ZXIgc29ydGluZy4gKi9cbiAgICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50ID0gZ3JvdXBDb21wb25lbnRzQXJyYXkuZmluZCgoZzogYW55KSA9PiBnLl9fa2V5ID09PSBncm91cEtleSkgfHwgZ3JvdXBDb21wb25lbnRzQXJyYXlbaV07XG4gICAgICAvKiBTaG93L2hpZGUgdGhlIGdyb3VwICovXG4gICAgICBpZiAoZ3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9ICFzaG93R3JvdXA7XG4gICAgICAgIC8qIGFzc2lnbiBhbiBpbnRlcm5hbCBrZXkgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgc28gd2UgY2FuIGZpbmQgaXQgbGF0ZXIgKGFib3ZlKS4gKi9cbiAgICAgICAgKGdyb3VwQ29tcG9uZW50IGFzIGFueSkuX19rZXkgPSBncm91cEtleTtcbiAgICAgICAgLyogRXhwYW5kIHRoZSBhY2NvcmRpb24gb24gbWF0Y2hpbmcgcmVzdWx0cyAqL1xuICAgICAgICBpZiAoaXNBY2NvcmRpb24gJiYgc2hvd0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG5cbiAgICAgICAgICBpZiAoIWFjY29yZGlvbkdyb3VwLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICBhY2NvcmRpb25Hcm91cC5jb250ZW50LmRpc2FibGVBbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgLyogRXhwYW5kIHRoZSBhY2NvcmRpb24gKi9cbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmV4cGFuZCh0cnVlKTtcbiAgICAgICAgICAgIC8qIE1hcmsgdGhlIGFjY29yZGlvbiBhcyBleHBhbmRlZCwgc28gd2UgY2FuIHJldHVybiB0byB0aGUgZGVmYXVsdCBzdGF0ZSBsYXRlciAqL1xuICAgICAgICAgICAgKGdyb3VwQ29tcG9uZW50IGFzIGFueSkuX19leHBlbmRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIHRoZSBvcHRpb25zIHRvIHNob3cgb3IgaGlkZSBlYWNoIGFuZCByZXR1cm4gaWYgcmVzdWx0IGhhcyBiZWVuIGZvdW5kLlxuICAgKiBDb25zaWRlciB3ZSBoYXZlIGEgZ3JvdXAgdGhhdCBtYXRjaCB3ZSBzaG93IGFsbCBvZiBpdHMgb3B0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc2VhcmNoSW5PcHRpb25zKHZhbHVlOiBzdHJpbmcsIGdyb3VwT3B0aW9ucyA9IFtdLCBncm91cE1hdGNoID0gZmFsc2UpIHtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkluR3JvdXAgPSBncm91cE9wdGlvbnMuaW5kZXhPZihkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSkgIT09IC0xO1xuXG4gICAgICBpZiAoZ3JvdXBNYXRjaCAmJiBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaXplKGdyb3VwT3B0aW9ucykgfHwgb3B0aW9uSW5Hcm91cCkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuc2VhcmNoU3RyYXRlZ3koZGF0b09wdGlvbiwgdmFsdWUsIHRoaXMubGFiZWxLZXkpO1xuXG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGtleSBvZiB0aGUgb3B0aW9uIGdyb3VwLiBJdCBjYW4gYmUgdGhlIGdyb3VwIElkIGlmIGV4aXN0cywgb3IgdGhlIGxhYmVsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRHcm91cEtleShvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uICYmIChvcHRpb25bdGhpcy5pZEtleV0gfHwgb3B0aW9uW3RoaXMubGFiZWxLZXldKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gc2VhcmNoIGNoYW5nZXMgYW5kIGZpbHRlciB0aGUgbGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1NlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9XG4gICAgICB0aGlzLmlzQ29tYm8gJiZcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFNlYXJjaCkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzdWx0cyA9IHRoaXMuc2VhcmNoT3B0aW9ucyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gdmFsdWU7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gb3B0aW9uIGNsaWNrIGFuZCBjaGFuZ2UgdGhlIHN0YXRlIGFjY29yZGluZ2x5XG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvT3B0aW9uQ2xpY2sob3B0aW9uczogUXVlcnlMaXN0PERhdG9PcHRpb25Db21wb25lbnQ+KSB7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8qKiBHYXRoZXIgYWxsIHRoZSBjbGlja3MgKi9cbiAgICBjb25zdCBjbGlja3MkID0gb3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICBvcHRpb24uY2xpY2skLnBpcGUoXG4gICAgICAgIG1hcCgoZXZlbnQ6IEV2ZW50KSA9PiAoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIG9wdGlvblxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgLyoqIENvbnNpZGVyIGNoYW5nZSBpdCB0byB1c2UgZXZlbnQgZGVsZWdhdGlvbiAqL1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uID0gbWVyZ2UoLi4uY2xpY2tzJCkuc3Vic2NyaWJlKCh7IG9wdGlvbiwgZXZlbnQgfSkgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaXNTaW5nbGUgPyB0aGlzLmhhbmRsZVNpbmdsZUNsaWNrKG9wdGlvbikgOiB0aGlzLmhhbmRsZU11bHRpQ2xpY2sob3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0VzY2FwZShldmVudCkgJiYgdGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRW50ZXIoZXZlbnQpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg7XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgIHRoaXMuaXNTaW5nbGUgPyB0aGlzLmhhbmRsZVNpbmdsZUNsaWNrKGFjdGl2ZSkgOiB0aGlzLmhhbmRsZU11bHRpQ2xpY2soYWN0aXZlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJvd1VwRG93bihldmVudCkpIHtcbiAgICAgIHRoaXMua2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJyk7XG4gICAgICBfc2Nyb2xsVG9PcHRpb24oe1xuICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBhY3RpdmVJdGVtSW5kZXg6IHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgsXG4gICAgICAgIGdyb3VwczogdGhpcy5ncm91cHMsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBbGwoKSB7XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVDbGljayhkYXRvT3B0aW9uOiBEYXRvT3B0aW9uQ29tcG9uZW50KSB7XG4gICAgaWYgKCFkYXRvT3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3T3B0aW9uID0gZGF0b09wdGlvbi5vcHRpb247XG4gICAgdGhpcy5fbW9kZWwgPSBbcmF3T3B0aW9uXTtcbiAgICB0aGlzLm9uQ2hhbmdlKHJhd09wdGlvbik7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9ICFkYXRvT3B0aW9uLmFjdGl2ZTtcbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuY29uY2F0KHJhd09wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gcmF3T3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICB9XG4gICAgdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpIHtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSwgJ3Njcm9sbCcpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxZID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGhlaWdodCAtIHNjcm9sbFk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgfHwgb2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uICYmIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkICYmIHRoaXMuZGF0b092ZXJsYXkuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyb3VwIGNvbXBvbmVudCBpcyBBY2NvcmRpb25cbiAgICovXG4gIHByaXZhdGUgaXNBY2NvcmRpb25Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24gJiYgdGhpcy5hY2NvcmRpb24ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFuIGFycmF5IG9mIHRoZSBncm91cCBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk6IExpc3RHcm91cENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCkgPyB0aGlzLmFjY29yZGlvbi5maXJzdC5ncm91cHMudG9BcnJheSgpIDogdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZFN0YXRlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgICBkYXRvT3B0aW9uLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBvdmVybGF5IHdpbGwgYmUgdXBkYXRlIEFGVEVSIENoYW5nZSBEZXRlY3Rpb24gd2FzIGRvbmVcbiAgLy8gU28gdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCAoYW5kIGl0cyBoZWlnaHQpIGlzIHVwZGF0ZVxuICBwcml2YXRlIGFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRvT3ZlcmxheSAmJiB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKSwgMCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
- window.coreVersion = '22.7.1';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuNy4xJztcbiJdfQ==
1
+ window.coreVersion = '22.8.1-rc.';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuOC4xLXJjLic7Il19