@po-ui/ng-components 6.8.0 → 6.10.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 (32) hide show
  1. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  2. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +54 -6
  3. package/esm2020/lib/components/po-field/po-combo/po-combo-filter.service.mjs +16 -8
  4. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +221 -112
  5. package/esm2020/lib/components/po-field/po-decimal/po-decimal.component.mjs +15 -4
  6. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +8 -8
  7. package/esm2020/lib/components/po-table/po-table-base.component.mjs +18 -2
  8. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +10 -2
  9. package/esm2020/lib/components/po-table/po-table.component.mjs +987 -433
  10. package/esm2020/lib/directives/po-tooltip/po-tooltip-base.directive.mjs +2 -2
  11. package/esm2020/lib/directives/po-tooltip/po-tooltip.directive.mjs +32 -2
  12. package/fesm2015/po-ui-ng-components.mjs +1516 -601
  13. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  14. package/fesm2020/po-ui-ng-components.mjs +1347 -565
  15. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  16. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +31 -1
  17. package/lib/components/po-field/po-combo/po-combo-filter.service.d.ts +3 -0
  18. package/lib/components/po-field/po-combo/po-combo.component.d.ts +22 -3
  19. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  20. package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +3 -1
  21. package/lib/components/po-table/po-table.component.d.ts +3 -0
  22. package/lib/directives/po-tooltip/po-tooltip-base.directive.d.ts +1 -1
  23. package/lib/directives/po-tooltip/po-tooltip.directive.d.ts +3 -0
  24. package/package.json +4 -4
  25. package/po-ui-ng-components-6.10.1.tgz +0 -0
  26. package/schematics/ng-add/index.js +1 -1
  27. package/schematics/ng-update/v2/index.js +1 -1
  28. package/schematics/ng-update/v3/index.js +1 -1
  29. package/schematics/ng-update/v4/index.js +1 -1
  30. package/schematics/ng-update/v5/index.js +1 -1
  31. package/schematics/ng-update/v6/index.js +1 -1
  32. package/po-ui-ng-components-6.8.0.tgz +0 -0
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
- import { minFailed, maxFailed } from '../validators';
3
+ import { minFailed, maxFailed, maxlengpoailed } from '../validators';
4
4
  import { convertToInt } from '../../../utils/util';
5
5
  import { PoInputBaseComponent } from '../po-input/po-input-base.component';
6
6
  import * as i0 from "@angular/core";
@@ -228,16 +228,27 @@ export class PoDecimalComponent extends PoInputBaseComponent {
228
228
  this.controlChangeEmitter();
229
229
  }
230
230
  extraValidation(abstractControl) {
231
+ const value = abstractControl.value;
232
+ const thousandValue = Math.trunc(value);
231
233
  // Verifica se já possui algum error pattern padrão.
232
234
  this.errorPattern = this.errorPattern !== 'Valor Inválido' ? this.errorPattern : '';
233
- if (minFailed(this.min, abstractControl.value)) {
235
+ if (minFailed(this.min, value)) {
234
236
  return {
235
237
  min: {
236
238
  valid: false
237
239
  }
238
240
  };
239
241
  }
240
- if (maxFailed(this.max, abstractControl.value)) {
242
+ if (maxFailed(this.max, value)) {
243
+ return {
244
+ max: {
245
+ valid: false
246
+ }
247
+ };
248
+ }
249
+ if ((maxlengpoailed(this.thousandMaxlength, thousandValue) &&
250
+ this.thousandMaxlength < poDecimalDefaultThousandMaxlength) ||
251
+ maxlengpoailed(poDecimalTotalLengthLimit, value)) {
241
252
  return {
242
253
  max: {
243
254
  valid: false
@@ -662,4 +673,4 @@ PoDecimalComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoDecima
662
673
  type: Input,
663
674
  args: ['p-max']
664
675
  }] }); })();
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kZWNpbWFsL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0lDZnZFLDhCQUF1RDtJQUNyRCw2QkFBbUc7SUFDckcsaUJBQU07OztJQUQyQixlQUF5QztJQUF6Qyx5REFBeUM7SUFBQyxvQ0FBZTs7OztJQXlCeEYsb0NBQTZHO0lBQWpDLDhMQUFrQixvQkFBYSxJQUFDO0lBQzVHLGlCQUFXOzs7SUFEdUMsOENBQXlCOztBRFRqRixNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsQ0FBQztBQUM3QyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUN0QyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QVU7UUFBViwrQkFBVTtRQVdkLGVBQWlDO1FBQWpDLDhDQUFpQyxrQ0FBQTtRQURqQywrQ0FBNkIsMEJBQUEsZ0NBQUEsMEJBQUEsMEJBQUE7UUFIN0IsOEJBQWdCLGdCQUFBLGtCQUFBO1FBbUJMLGVBQXFDO1FBQXJDLGtFQUFxQztRQUt6QixlQUE0QztRQUE1Qyw4REFBNEM7O3VGRGdENUQsa0JBQWtCO2NBakI5QixTQUFTOzJCQUNFLFlBQVksbUJBRUwsdUJBQXVCLENBQUMsTUFBTSxhQUNwQztvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzt3QkFDakQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjs2SEFHcUQsT0FBTztrQkFBNUQsU0FBUzttQkFBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUF3Q3BCLGNBQWM7a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBZ0NTLGlCQUFpQjtrQkFBbkQsS0FBSzttQkFBQyxzQkFBc0I7WUFpQ04sTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVO1lBWUcsR0FBRztrQkFBdEIsS0FBSzttQkFBQyxPQUFPO1lBdUJNLEdBQUc7a0JBQXRCLEtBQUs7bUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgbWluRmFpbGVkLCBtYXhGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0lucHV0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3BvLWlucHV0L3BvLWlucHV0LWJhc2UuY29tcG9uZW50JztcblxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoID0gMjtcbmNvbnN0IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aCA9IDEzO1xuY29uc3QgcG9EZWNpbWFsTWF4RGVjaW1hbHNMZW5ndGggPSAxNTtcbmNvbnN0IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgPSAxNjtcblxuLyoqXG4gKlxuICogQGRvY3NFeHRlbmRzIFBvSW5wdXRCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogPGJyPlxuICogLSBPIGBwby1kZWNpbWFsYCDDqSB1bSAqaW5wdXQqIGVzcGVjw61maWNvIHBhcmEgcmVjZWJlciBhcGVuYXMgbsO6bWVyb3MgZGVjaW1haXMsIHBvciBpc3NvIHJlY2ViZSBhcyBzZWd1aW50ZXMgY2FyYWN0ZXLDrXN0aWNhczpcbiAqICArIEFjZWl0YSBhcGVuYXMgbsO6bWVyb3M7XG4gKiAgKyBVdGlsaXphICcsJyBjb21vIHNlcGFyYWRvciBkZSBkZWNpbWFsO1xuICogICsgVXRpbGl6YSAnLicgcGFyYSBzZXBhcmHDp8OjbyBkZSBtaWxoYXI7XG4gKiAgKyDDiSBwb3Nzw612ZWwgY29uZmlndXJhciBhIHF1YW50aWRhZGUgZGUgY2FzYXMgZGVjaW1haXMgZSBhIHF1YW50aWRhZGUgZGUgZGlnaXRvcyBkbyBjYW1wby5cbiAqXG4gKiA+ICoqSW1wb3J0YW50ZToqKlxuICogQXR1YWxtZW50ZSBvIEphdmFTY3JpcHQgbGltaXRhLXNlIGEgdW0gY29uanVudG8gZGUgZGFkb3MgZGUgYDMyIGJpdHNgLCBlIHBhcmEgcXVlIG9zIHZhbG9yZXMgY29tcG9ydGVtLXNlIGRldmlkYW1lbnRlLFxuICogbyBgcG8tZGVjaW1hbGAgY29udMOpbSB1bSB0cmF0YW1lbnRvIHF1ZSBsaW1pdGEgZW0gMTYgbyBuw7ptZXJvIHRvdGFsIGRlIGNhc2FzIGFudGVzIGUgYXDDs3MgYSB2w61yZ3VsYS5cbiAqIFZlamEgYWJhaXhvIGFzIGRlbWFpcyByZWdyYXMgbmFzIGRvY3VtZW50YcOnw7VlcyBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWJhc2ljXCIgdGl0bGU9XCJQTyBEZWNpbWFsIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWJhc2ljL3NhbXBsZS1wby1kZWNpbWFsLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMvc2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1sYWJzXCIgdGl0bGU9XCJQTyBEZWNpbWFsIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtbGFicy9zYW1wbGUtcG8tZGVjaW1hbC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtbGFicy9zYW1wbGUtcG8tZGVjaW1hbC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtaG91cmx5LXdhZ2VcIiB0aXRsZT1cIlBPIERlY2ltYWwgLSBIb3VybHkgV2FnZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlL3NhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGVjaW1hbCAtIEhvdXJseSBXYWdlIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRlY2ltYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGVjaW1hbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0RlY2ltYWxDb21wb25lbnQgZXh0ZW5kcyBQb0lucHV0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfZGVjaW1hbHNMZW5ndGg/OiBudW1iZXIgPSBwb0RlY2ltYWxEZWZhdWx0RGVjaW1hbHNMZW5ndGg7XG4gIHByaXZhdGUgX3Rob3VzYW5kTWF4bGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoO1xuICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX21pbj86IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4PzogbnVtYmVyO1xuXG4gIHByaXZhdGUgZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nO1xuICBwcml2YXRlIGZpcmVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0tleWJvYXJkQW5kcm9pZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1pbnVzU2lnbjogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIG9sZERvdHNMZW5ndGggPSBudWxsO1xuICBwcml2YXRlIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmc7XG4gIHByaXZhdGUgdmFsdWVCZWZvcmVDaGFuZ2U6IGFueTtcblxuICBwcml2YXRlIHJlZ2V4ID0ge1xuICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArICcsJywgJ2cnKSxcbiAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArICcuJywgJ2cnKVxuICB9O1xuXG4gIGdldCBhdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9BdXRvY29tcGxldGUgPyAnb2ZmJyA6ICdvbic7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBRdWFudGlkYWRlIG3DoXhpbWEgZGUgY2FzYXMgZGVjaW1haXMuXG4gICAqXG4gICAqID4gKipJbXBvcnRhbnRlOioqXG4gICAqIC0gTyB2YWxvciBtw6F4aW1vIHBlcm1pdGlkbyDDqSAxNTtcbiAgICogLSBBIHNvbWEgdG90YWwgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBjb20gYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYCBsaW1pdGEtc2Ugw6AgMTY7XG4gICAqIC0gRXN0YSBwcm9wcmllZGFkZSBzb2JyZXDDtWUgYXBlbmFzIG8gdmFsb3IgKipwYWRyw6NvKiogZGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYDtcbiAgICogLSBDYXNvIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgdGVuaGEgdW0gdmFsb3IgZGVmaW5pZG8sIGVzdGEgcHJvcHJpZWRhZGUgcG9kZXLDoSByZWNlYmVyIGFwZW5hcyBvIHZhbG9yIHJlc3RhbnRlIGRvIGxpbWl0ZSB0b3RhbCAoMTYpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMmBcbiAgICovXG4gIEBJbnB1dCgncC1kZWNpbWFscy1sZW5ndGgnKSBzZXQgZGVjaW1hbHNMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGxldCBkZWNpbWFsc0xlbmd0aCA9IGNvbnZlcnRUb0ludCh2YWx1ZSk7XG5cbiAgICBkZWNpbWFsc0xlbmd0aCA9IHRoaXMuaXNWYWx1ZUJldHdlZW5BbGxvd2VkKGRlY2ltYWxzTGVuZ3RoLCBwb0RlY2ltYWxNYXhEZWNpbWFsc0xlbmd0aClcbiAgICAgID8gZGVjaW1hbHNMZW5ndGhcbiAgICAgIDogcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaXNHcmVhdGVyVGhhblRvdGFsTGVuZ3RoTGltaXQoZGVjaW1hbHNMZW5ndGgsIHRoaXMudGhvdXNhbmRNYXhsZW5ndGgpKSB7XG4gICAgICB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIGRlY2ltYWxzTGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuX2RlY2ltYWxzTGVuZ3RoID0gZGVjaW1hbHNMZW5ndGg7XG4gIH1cblxuICBnZXQgZGVjaW1hbHNMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxzTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGTDrWdpdG9zIGFudGVzIGRvIHNlcGFyYWRvciBkZWNpbWFsLlxuICAgKlxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTM7XG4gICAqIC0gQSBzb21hIHRvdGFsIGRlIGBwLWRlY2ltYWxzLWxlbmd0aGAgY29tIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgbGltaXRhLXNlIMOgIDE2O1xuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIG8gdmFsb3IgZGVmaW5pZG8gZW0gYHAtZGVjaW1hbHMtbGVuZ3RoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEzYFxuICAgKi9cbiAgQElucHV0KCdwLXRob3VzYW5kLW1heGxlbmd0aCcpIHNldCB0aG91c2FuZE1heGxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgbGV0IHRob3VzYW5kTWF4bGVuZ3RoID0gY29udmVydFRvSW50KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID4gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoICYmICF0aG91c2FuZE1heGxlbmd0aCkge1xuICAgICAgdGhvdXNhbmRNYXhsZW5ndGggPSBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0IC0gdGhpcy5kZWNpbWFsc0xlbmd0aDtcbiAgICB9XG5cbiAgICB0aG91c2FuZE1heGxlbmd0aCA9IHRoaXMuaXNWYWx1ZUJldHdlZW5BbGxvd2VkKHRob3VzYW5kTWF4bGVuZ3RoLCBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGgpXG4gICAgICA/IHRob3VzYW5kTWF4bGVuZ3RoXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcblxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KHRoaXMuZGVjaW1hbHNMZW5ndGgsIHRob3VzYW5kTWF4bGVuZ3RoKSkge1xuICAgICAgdGhpcy5kZWNpbWFsc0xlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aG91c2FuZE1heGxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLl90aG91c2FuZE1heGxlbmd0aCA9IHRob3VzYW5kTWF4bGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRob3VzYW5kTWF4bGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl90aG91c2FuZE1heGxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZm9ybWEgbyBsb2NhbGUocGHDrXMpIHBhcmEgYSBmb3JtYXRhw6fDo28gZG8gdmFsb3IuXG4gICAqIFBvciBwYWRyw6NvIG8gdmFsb3Igc2Vyw6EgY29uZmlndXJhZG8gc2VndW5kbyBhIG8gbcOzZHVsbyBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXG4gICAqXG4gICAqID4gUGFyYSB2ZXIgcXVhaXMgbGluZ3VhZ2VucyBzdXBvcnRhZGFzIGFjZXNzZSBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBtw61uaW1vLlxuICAgKi9cbiAgQElucHV0KCdwLW1pbicpIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9taW4gPSB2YWx1ZTtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX21pbiA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBtw6F4aW1vLlxuICAgKi9cbiAgQElucHV0KCdwLW1heCcpIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9tYXggPSB2YWx1ZTtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX21heCA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSwgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2QpO1xuICAgIHRoaXMuaXNLZXlib2FyZEFuZHJvaWQgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XG4gIH1cblxuICBzZXROdW1iZXJzU2VwYXJhdG9ycygpIHtcbiAgICBjb25zdCB7IGRlY2ltYWxTZXBhcmF0b3IsIHRob3VzYW5kU2VwYXJhdG9yIH0gPSB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldE51bWJlclNlcGFyYXRvcnModGhpcy5fbG9jYWxlKTtcbiAgICB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPSBkZWNpbWFsU2VwYXJhdG9yO1xuICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvcjtcbiAgICB0aGlzLnJlZ2V4ID0ge1xuICAgICAgdGhvdXNhbmQ6IG5ldyBSZWdFeHAoJ1xcXFwnICsgdGhvdXNhbmRTZXBhcmF0b3IsICdnJyksXG4gICAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArIGRlY2ltYWxTZXBhcmF0b3IsICdnJylcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudmVyaWZ5QXV0b0ZvY3VzKCk7XG4gICAgdGhpcy5zZXRQYWRkaW5nSW5wdXQoKTtcbiAgfVxuXG4gIGNsZWFyKHZhbHVlKSB7XG4gICAgdGhpcy5jYWxsT25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMuY29udHJvbENoYW5nZUVtaXR0ZXIoKTtcbiAgfVxuXG4gIGV4dHJhVmFsaWRhdGlvbihhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIC8vIFZlcmlmaWNhIHNlIGrDoSBwb3NzdWkgYWxndW0gZXJyb3IgcGF0dGVybiBwYWRyw6NvLlxuICAgIHRoaXMuZXJyb3JQYXR0ZXJuID0gdGhpcy5lcnJvclBhdHRlcm4gIT09ICdWYWxvciBJbnbDoWxpZG8nID8gdGhpcy5lcnJvclBhdHRlcm4gOiAnJztcblxuICAgIGlmIChtaW5GYWlsZWQodGhpcy5taW4sIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1pbjoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtYXhGYWlsZWQodGhpcy5tYXgsIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNjcmVlblZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0RWwgPyB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA6ICcnO1xuICB9XG5cbiAgaGFzSW52YWxpZENsYXNzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJykgJiZcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JykgJiZcbiAgICAgIHRoaXMuZ2V0U2NyZWVuVmFsdWUoKSAhPT0gJydcbiAgICApO1xuICB9XG5cbiAgaGFzTGV0dGVycyh2YWx1ZTogc3RyaW5nID0gJycpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL1thLXpBLVo6Oys9X8K0YF5+XCInPyFAIyQlwqgmKigpPjx7fcOnw4dcXFtcXF0vXFxcXHxdKy8pO1xuICB9XG5cbiAgaXNWYWxpZE51bWJlcihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gLSBldmVudC5rZXkgbsOjbyBleGlzdGlhIGVtIGFsZ3VucyBicm93c2VycywgY29tbyBTYW1zdW5nIGJyb3dzZXIgZSBGaXJlZm94LlxuICAgIGNvbnN0IGtleVZhbHVlID0gPGFueT5TdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LndoaWNoKTtcbiAgICBjb25zdCB2YWxpZEtleSA9IGV2ZW50LndoaWNoICE9PSA4ICYmIGV2ZW50LndoaWNoICE9PSAwO1xuXG4gICAgcmV0dXJuICF0aGlzLmhhc0xldHRlcnMoa2V5VmFsdWUpICYmIHZhbGlkS2V5O1xuICB9XG5cbiAgLy8gZnVuw6fDo28gcmVzcG9uc8OhdmVsIHBvciBhZGljaW9uYXIgb3MgemVyb2VzIGNvbSBhcyBjYXNhIGRlY2ltYWlzIGFvIHNhaXIgZG8gY2FtcG8uXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQ/LigpO1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5oYXNMZXR0ZXJzKHZhbHVlKSB8fCB0aGlzLmNvbnRhaW5zTW9yZVRoYW5PbmVEZWNpbWFsU2VwYXJhdG9yKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKHRoaXMuZm9ybWF0VG9WaWV3VmFsdWUodmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IpKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xuICAgIHRoaXMuY29udHJvbENoYW5nZUVtaXR0ZXIoKTtcbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAvLyBBdHVhbGl6YSB2YWxvciBkYSB2YXJpw6F2ZWwgcXVlIHNlcsOhIHVzYWRhIHBhcmEgdmVyaWZpY2FyIHNlIG8gY2FtcG8gdGV2ZSBhbHRlcmHDp8Ojb1xuICAgIHRoaXMudmFsdWVCZWZvcmVDaGFuZ2UgPSB0aGlzLmdldFNjcmVlblZhbHVlKCk7XG5cbiAgICAvLyBEaXNwYXJhIGV2ZW50byBxdWFuZG8gbyB1c3XDoXJpbyBlbnRyYXIgbm8gY2FtcG9cbiAgICAvLyBFc3RlIGV2ZW50byB0YW1iw6ltIMOpIGRpc3BhcmFkbyBxdWFuZG8gbyBjYW1wbyBpbmljaWEgY29tIGZvY28uXG4gICAgdGhpcy5lbnRlci5lbWl0KCk7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kO1xuXG4gICAgbGV0IG1vZGVsVmFsdWU7XG5cbiAgICAvLyAtIEJyb3dzZXJzIG5hdGl2b3MgZG8gQW5kcm9pZCBleDogU2Ftc3VuZyBCcm93c2VyLlxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkKSB7XG4gICAgICB0aGlzLm9uSW5wdXRLZXlib2FyZEFuZHJvaWQoZXZlbnQpO1xuICAgIH1cblxuICAgIG1vZGVsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgbW9kZWxWYWx1ZSA9IHRoaXMuYWRkWmVyb0JlZm9yZShtb2RlbFZhbHVlKTtcbiAgICBjb25zdCB2aWV3VmFsdWUgPSB0aGlzLmZvcm1hdE1hc2sobW9kZWxWYWx1ZSk7XG5cbiAgICAvLyB2YWxpZGHDp8OjbyBwYXJhIG7Do28gcXVlYnJhciBJRSBjb20gcGxhY2Vob2xkZXIgZGVmaW5pZG8gZSBJbnB1dCB2YXppb1xuICAgIGlmICh2aWV3VmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKHZpZXdWYWx1ZSk7XG4gICAgICB0aGlzLnNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmZvcm1hdFRvTW9kZWxWYWx1ZShtb2RlbFZhbHVlKSk7XG4gIH1cblxuICBvbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IGhhc0xldHRlcnMgPSB0aGlzLmhhc0xldHRlcnMoaW5wdXRWYWx1ZSk7XG5cbiAgICBpZiAoaGFzTGV0dGVycykge1xuICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoaW5wdXRWYWx1ZS5yZXBsYWNlKGhhc0xldHRlcnNbMF0sICcnKSk7XG5cbiAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0IC0gMTtcbiAgICAgIGNvbnN0IGtleSA9IGlucHV0VmFsdWUuY2hhckF0KHBvc2l0aW9uKTtcblxuICAgICAgdGhpcy5zZXRQb3NpdGlvblZhbHVlKGV2ZW50KTtcblxuICAgICAgaWYgKHRoaXMuaXNWYWxpZEtleShldmVudCwga2V5KSkge1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZShpbnB1dFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5pc1ZhbGlkS2V5KGV2ZW50KTtcbiAgfVxuXG4gIHNldFBhZGRpbmdJbnB1dCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ySWNvbnMgPSAnLnBvLWZpZWxkLWljb24tY29udGFpbmVyOm5vdCgucG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdCkgPiAucG8taWNvbic7XG4gICAgICBsZXQgaWNvbnMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvckljb25zKS5sZW5ndGg7XG4gICAgICBpZiAodGhpcy5jbGVhbikge1xuICAgICAgICBpY29ucysrO1xuICAgICAgfVxuICAgICAgaWYgKGljb25zKSB7XG4gICAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2ljb25zICogMzZ9cHhgO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgd3JpdGVWYWx1ZU1vZGVsKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbCkge1xuICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdGVkVmlld1ZhbHVlID0gdGhpcy5mb3JtYXRUb1ZpZXdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGZvcm1hdGVkVmlld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKCcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVycm9yUGF0dGVybk1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JQYXR0ZXJuICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvclBhdHRlcm4gOiAnJztcbiAgfVxuXG4gIC8vIHJlc3BvbnPDoXZlbCBwb3IgYWRpY2lvbmFyIDAgYW50ZXMgZGEgdmlyZ3VsYSAoZGVjaW1hbFNlcGFyYXRvcikuXG4gIHByaXZhdGUgYWRkWmVyb0JlZm9yZSh2YWx1ZSkge1xuICAgIGNvbnN0IGlzRGVjaW1hbFNlcGFyYXRvciA9IHZhbHVlID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG5cbiAgICByZXR1cm4gaXNEZWNpbWFsU2VwYXJhdG9yID8gYDAke3ZhbHVlfWAgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udGFpbnNDb21tYSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmNsdWRlcyh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250YWluc01vcmVUaGFuT25lRGVjaW1hbFNlcGFyYXRvcih2YWx1ZTogc3RyaW5nID0gJycpIHtcbiAgICBjb25zdCBmb3VuZENvbW1hID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC5kZWNpbWFsKTtcblxuICAgIHJldHVybiAhIShmb3VuZENvbW1hICYmIGZvdW5kQ29tbWEubGVuZ3RoID4gMSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRyb2xDaGFuZ2VFbWl0dGVyKCkge1xuICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IHRoaXMuZ2V0U2NyZWVuVmFsdWUoKTtcblxuICAgIC8vIEVtaXRlIG8gZXZlbnRvIGNoYW5nZSBtYW51YWxtZW50ZSBxdWFuZG8gbyBjYW1wbyDDqSBhbHRlcmFkb1xuICAgIC8vIEVzdGUgZXZlbnRvIMOpIGNvbnRyb2xhZG8gbWFudWFsbWVudGUgZGV2aWRvIGFvIHByZXZlbnREZWZhdWx0IGV4aXN0ZW50ZSBuYSBtw6FzY2FyYVxuICAgIC8vIGUgZGV2aWRvIGFvIGNvbnRyb2xlIGRvIHAtY2xlYW4sIHF1ZSB0YW1iw6ltIHByZWNpc2EgZW1pdGlyIGNoYW5nZVxuICAgIGlmIChlbGVtZW50VmFsdWUgIT09IHRoaXMudmFsdWVCZWZvcmVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChlbGVtZW50VmFsdWUpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1hc2sodmFsdWU6IHN0cmluZykge1xuICAgIC8vIG5lY2Vzc8OhcmlvIHBhcmEgbsOjbyBhZGljaW9uYXIgLiBuYXMgY2FzYSBkZWNpbWFpcy5cbiAgICAvLyBwb3IgZXhlbXBsbzogMTIuMzQ1LDEyMy40NSAoZXJyYWRvKVxuICAgIC8vIDEyLjM0NSwxMjM0NSAoY29ycmV0bylcblxuICAgIGlmICh2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LmRlY2ltYWwpKSB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYChcXFxcZCkoPz0oXFxcXGR7M30pKyg/IVxcXFxkKSR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfSlgLCAnZycpO1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShyZWdleCwgYCQxJHt0aGlzLnRob3VzYW5kU2VwYXJhdG9yfWApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgYCQxJHt0aGlzLnRob3VzYW5kU2VwYXJhdG9yfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUb01vZGVsVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZSk7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZSA/IHBhcnNlRmxvYXQoTnVtYmVyKGZvcm1hdHRlZFZhbHVlKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHNMZW5ndGgpKSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBwYXJzZWRWYWx1ZSA9PT0gMCB8fCBwYXJzZWRWYWx1ZSA/IHBhcnNlZFZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUb1ZpZXdWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gLSBOZWNlc3PDoXJpbyBwYXJhIHRyYXRhciB2YWxvcmVzIHF1ZSBjb250ZW5oYW0gZGVjaW1hbFNlcGFyYXRvclxuICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZSk7XG5cbiAgICBjb25zdCBudW1iZXJWYWx1ZSA9IE51bWJlcih2YWx1ZSkudG9GaXhlZCh0aGlzLmRlY2ltYWxzTGVuZ3RoKTtcblxuICAgIGNvbnN0IHZhbHVlQmVmb3JlRG90ID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihudW1iZXJWYWx1ZSwgJy4nKTtcbiAgICBjb25zdCB2YWx1ZUFmdGVyRG90ID0gdGhpcy5nZXRWYWx1ZUFmdGVyU2VwYXJhdG9yKG51bWJlclZhbHVlLCAnLicpO1xuXG4gICAgY29uc3QgZm9ybWF0ZWROdW1iZXIgPSB0aGlzLmZvcm1hdE1hc2sodmFsdWVCZWZvcmVEb3QpO1xuXG4gICAgaWYgKHRoaXMuZGVjaW1hbHNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXRlZE51bWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdGVkTnVtYmVyfSR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfSR7dmFsdWVBZnRlckRvdH1gO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSh0aGlzLnJlZ2V4LnRob3VzYW5kLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IodmFsdWUgPSAnJywgc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KHNlcGFyYXRvcilbMV0gfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKHZhbHVlID0gJycsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzBdIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNMZXNzRG90KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkb3RzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC50aG91c2FuZCk7XG4gICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cyAmJiBkb3RzLmxlbmd0aDtcblxuICAgICAgaWYgKGRvdHNMZW5ndGggPCB0aGlzLm9sZERvdHNMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gZG90c0xlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhc01vcmVEb3QodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGRvdHMgPSB2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LnRob3VzYW5kKTtcbiAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzICYmIGRvdHMubGVuZ3RoO1xuXG4gICAgICBpZiAoZG90c0xlbmd0aCA+IHRoaXMub2xkRG90c0xlbmd0aCkge1xuICAgICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBkb3RzTGVuZ3RoO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTWludXNTaWduSW52YWxpZFBvc2l0aW9uKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXlJc01pbnVzU2lnbiA9IGV2ZW50LmtleSA9PT0gdGhpcy5taW51c1NpZ247XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICByZXR1cm4ga2V5SXNNaW51c1NpZ24gJiYgc2VsZWN0aW9uU3RhcnQgIT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzSW52YWxpZEtleShldmVudDogYW55LCBjaGFyQ29kZTogYW55KSB7XG4gICAgY29uc3QgaXNJbnZhbGlkTnVtYmVyID0gIXRoaXMuaXNWYWxpZE51bWJlcihldmVudCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy52ZXJpZnlJbnNlcnRDb21tYShldmVudCkgfHxcbiAgICAgIHRoaXMudmVyaWZ5VGhvdXNhbmRMZW5ndGgoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeVZhbHVlQWZ0ZXJDb21tYShldmVudCkgfHxcbiAgICAgIHRoaXMudmVyaWZ5SW5zZXJ0TWludXNTaWduKGV2ZW50KSB8fFxuICAgICAgdGhpcy5oYXNNaW51c1NpZ25JbnZhbGlkUG9zaXRpb24oZXZlbnQpIHx8XG4gICAgICBpc0ludmFsaWROdW1iZXIgfHxcbiAgICAgIHRoaXMudmFsaWRhdGVDdXJzb3JQb3NpdGlvbkJlZm9yZVNlcGFyYXRvcihldmVudCkgfHxcbiAgICAgIHRoaXMudmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KGRlY2ltYWxzTWF4TGVuZ3RoOiBudW1iZXIsIHRob3VzYW5kTWF4bGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gZGVjaW1hbHNNYXhMZW5ndGggKyB0aG91c2FuZE1heGxlbmd0aCA+IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQ7XG4gIH1cblxuICBwcml2YXRlIGlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudCkge1xuICAgIHJldHVybiBldmVudC5rZXkgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvciB8fCBldmVudC5jaGFyID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIGlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3IocG9zaXRpb25DdXJzb3IsIHZhbHVlKSB7XG4gICAgY29uc3QgaW5kZXhDb21tYSA9IHZhbHVlICYmIHZhbHVlLmluZGV4T2YodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgIGlmIChpbmRleENvbW1hICYmIHRoaXMuZGVjaW1hbHNMZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb25DdXJzb3IgPiBpbmRleENvbW1hO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNTZWxlY3Rpb25TdGFydERpZmZlcmVudFNlbGVjdGlvbkVuZCh0YXJnZXQ6IGFueSkge1xuICAgIHJldHVybiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgIT09IHRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRLZXkoZXZlbnQ6IGFueSwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IHZhbGlkS2V5ID0gZXZlbnQud2hpY2ggPT09IDggfHwgZXZlbnQud2hpY2ggPT09IDA7XG5cbiAgICBpZiAodmFsaWRLZXkgJiYgIXRoaXMuaXNLZXlib2FyZEFuZHJvaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBldmVudC5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJbnZhbGlkS2V5KGV2ZW50LCBjaGFyQ29kZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbHVlQmV0d2VlbkFsbG93ZWQodmFsdWU6IG51bWJlciwgbWF4QWxsb3dlZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gbWF4QWxsb3dlZDtcbiAgfVxuXG4gIC8vIFF1YW5kbyBkZWNpbWFsc0xlbmd0aCBmb3IgMCBuw6NvIGRldmUgcGVybWl0aXIgaW5mb3JtYXIgdsOtcmd1bGEgKGRlY2ltYWxTZXBhcmF0b3IpXG4gIHByaXZhdGUgdmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDQ0ICYmIHRoaXMuZGVjaW1hbHNMZW5ndGggPT09IDA7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUF1dG9Gb2N1cygpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTZWxlY3Rpb25SYW5nZSh0YXJnZXQ6IGFueSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkge1xuICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gMSAmJiBzZWxlY3Rpb25FbmQgPT09IDEpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgKyAxLCBzZWxlY3Rpb25FbmQgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCAtIDEsIHNlbGVjdGlvbkVuZCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXQodmFsdWUsIGluZGV4LCByZXBsYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb21tYVRvRG90KHZhbHVlOiBzdHJpbmcgPSAnJykge1xuICAgIGlmICh0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPT09ICcsJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UodGhpcy5yZWdleC5kZWNpbWFsLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3Vyc29ySW5wdXQoZXZlbnQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3Qgdmlld1ZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWFpcyAuIGRvIHF1ZSBhbnRlcmlvcm1lbnRlIHNvbWEgbyB2YWxvciBjb20gMS5cbiAgICBpZiAodGhpcy5oYXNNb3JlRG90KHZpZXdWYWx1ZSkgfHwgdmlld1ZhbHVlID09PSAnMCcgKyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgKyAxLCBzZWxlY3Rpb25FbmQgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBDYXNvIGhvdXZlciBtZW5vcyAuIGRvIHF1ZSBhbnRlcmlvcm1lbnRlIHN1YnRyYWkgbyB2YWxvciBwb3IgMS5cbiAgICBpZiAodGhpcy5oYXNMZXNzRG90KHZpZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFNlbGVjdGlvblJhbmdlKHRhcmdldCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uVmFsdWUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMTtcblxuICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgZXZlbnQua2V5ID09PSB0aGlzLm1pbnVzU2lnbikge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKSArIHZhbHVlLnN1YnN0cihwb3NpdGlvbiArIDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Vmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUN1cnNvclBvc2l0aW9uQmVmb3JlU2VwYXJhdG9yKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodGFyZ2V0LnZhbHVlKTtcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvciA9IHRoaXMuZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3IodGFyZ2V0LnZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgIGNvbnN0IHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwgPSB0aGlzLmdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKG9yaWdpbmFsVmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvblN0YXJ0RGlmZmVyZW50U2VsZWN0aW9uRW5kKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRhcmdldC5zZWxlY3Rpb25TdGFydCA8PSB2YWx1ZUJlZm9yZVNlcGFyYXRvci5sZW5ndGggJiZcbiAgICAgIHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwubGVuZ3RoID09PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXG4gICAgICAhdGhpcy5pc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5VGhvdXNhbmRMZW5ndGgoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcih0YXJnZXQudmFsdWUpO1xuICAgIGNvbnN0IHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwgPSB0aGlzLmdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKG9yaWdpbmFsVmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvblN0YXJ0RGlmZmVyZW50U2VsZWN0aW9uRW5kKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwubGVuZ3RoID49IHRoaXMudGhvdXNhbmRNYXhsZW5ndGggJiZcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudCkgJiZcbiAgICAgIHRoaXMuaXNQb3NpdGlvbkFmdGVyRGVjaW1hbFNlcGFyYXRvcih0YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSB0aGlzLmRlY2ltYWxzTGVuZ3RoLCB0YXJnZXQudmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SW5zZXJ0Q29tbWEoZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQ29tbWEgPSB0aGlzLmNvbnRhaW5zQ29tbWEoZS50YXJnZXQudmFsdWUpO1xuXG4gICAgcmV0dXJuIGhhc0NvbW1hICYmIGUua2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUluc2VydE1pbnVzU2lnbihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3QgaW5kZXhNaW51c1NpZ24gPSB2YWx1ZS5sYXN0SW5kZXhPZih0aGlzLm1pbnVzU2lnbikgIT09IC0xO1xuICAgIGNvbnN0IHBvc2l0aW9uTWludXNTaWduID0gdmFsdWUubGFzdEluZGV4T2YoJy0nKTtcbiAgICBjb25zdCBvY2N1cmFuY2VzTWludXNTaWduID0gdmFsdWUubWF0Y2gobmV3IFJlZ0V4cCgnLScsICdnJykpO1xuXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZEFuZHJvaWQgJiYgaW5kZXhNaW51c1NpZ24gJiYgb2NjdXJhbmNlc01pbnVzU2lnbi5sZW5ndGggPiAxKSB7XG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLnJlcGxhY2VBdCh2YWx1ZSwgcG9zaXRpb25NaW51c1NpZ24sICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4TWludXNTaWduICYmIGV2ZW50LmtleSA9PT0gdGhpcy5taW51c1NpZ247XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVZhbHVlQWZ0ZXJDb21tYShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3QgdmFsdWVBZnRlclNlcGFyYXRvciA9IHRoaXMuZ2V0VmFsdWVBZnRlclNlcGFyYXRvcih2YWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3Ioc2VsZWN0aW9uU3RhcnQsIHZhbHVlKSAmJiB2YWx1ZUFmdGVyU2VwYXJhdG9yLmxlbmd0aCA+PSB0aGlzLmRlY2ltYWxzTGVuZ3RoXG4gICAgKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lciBbcC1sYWJlbF09XCJsYWJlbFwiIFtwLWhlbHBdPVwiaGVscFwiIFtwLW9wdGlvbmFsXT1cIiFyZXF1aXJlZCAmJiBvcHRpb25hbFwiPlxuICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdFwiPlxuICAgICAgPHBvLWljb24gY2xhc3M9XCJwby1maWVsZC1pY29uXCIgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcC1pY29uXT1cImljb25cIj48L3BvLWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgICNpbnBcbiAgICAgIGNsYXNzPVwicG8taW5wdXRcIlxuICAgICAgW2F0dHIubWF4XT1cIm1heFwiXG4gICAgICBbYXR0ci5taW5dPVwibWluXCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICBbY2xhc3MucG8taW5wdXQtaWNvbi1sZWZ0XT1cImljb25cIlxuICAgICAgW2NsYXNzLnBvLWlucHV0LWljb24tcmlnaHRdPVwiY2xlYW5cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItcmlnaHRcIj5cbiAgICAgIDxwby1jbGVhbiAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiAhcmVhZG9ubHlcIiBbcC1lbGVtZW50LXJlZl09XCJpbnB1dEVsXCIgKHAtY2hhbmdlLWV2ZW50KT1cImNsZWFyKCRldmVudClcIj5cbiAgICAgIDwvcG8tY2xlYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tIFtwLWVycm9yLXBhdHRlcm5dPVwiZ2V0RXJyb3JQYXR0ZXJuTWVzc2FnZSgpXCI+IDwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19
676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kZWNpbWFsL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7OztJQ2Z2RSw4QkFBdUQ7SUFDckQsNkJBQW1HO0lBQ3JHLGlCQUFNOzs7SUFEMkIsZUFBeUM7SUFBekMseURBQXlDO0lBQUMsb0NBQWU7Ozs7SUF5QnhGLG9DQUE2RztJQUFqQyw4TEFBa0Isb0JBQWEsSUFBQztJQUM1RyxpQkFBVzs7O0lBRHVDLDhDQUF5Qjs7QURUakYsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQUM7QUFDekMsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7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TixNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVU7WUFZRyxHQUFHO2tCQUF0QixLQUFLO21CQUFDLE9BQU87WUF1Qk0sR0FBRztrQkFBdEIsS0FBSzttQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBtaW5GYWlsZWQsIG1heEZhaWxlZCwgbWF4bGVuZ3BvYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0lucHV0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3BvLWlucHV0L3BvLWlucHV0LWJhc2UuY29tcG9uZW50JztcblxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoID0gMjtcbmNvbnN0IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aCA9IDEzO1xuY29uc3QgcG9EZWNpbWFsTWF4RGVjaW1hbHNMZW5ndGggPSAxNTtcbmNvbnN0IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgPSAxNjtcblxuLyoqXG4gKlxuICogQGRvY3NFeHRlbmRzIFBvSW5wdXRCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogPGJyPlxuICogLSBPIGBwby1kZWNpbWFsYCDDqSB1bSAqaW5wdXQqIGVzcGVjw61maWNvIHBhcmEgcmVjZWJlciBhcGVuYXMgbsO6bWVyb3MgZGVjaW1haXMsIHBvciBpc3NvIHJlY2ViZSBhcyBzZWd1aW50ZXMgY2FyYWN0ZXLDrXN0aWNhczpcbiAqICArIEFjZWl0YSBhcGVuYXMgbsO6bWVyb3M7XG4gKiAgKyBVdGlsaXphICcsJyBjb21vIHNlcGFyYWRvciBkZSBkZWNpbWFsO1xuICogICsgVXRpbGl6YSAnLicgcGFyYSBzZXBhcmHDp8OjbyBkZSBtaWxoYXI7XG4gKiAgKyDDiSBwb3Nzw612ZWwgY29uZmlndXJhciBhIHF1YW50aWRhZGUgZGUgY2FzYXMgZGVjaW1haXMgZSBhIHF1YW50aWRhZGUgZGUgZGlnaXRvcyBkbyBjYW1wby5cbiAqXG4gKiA+ICoqSW1wb3J0YW50ZToqKlxuICogQXR1YWxtZW50ZSBvIEphdmFTY3JpcHQgbGltaXRhLXNlIGEgdW0gY29uanVudG8gZGUgZGFkb3MgZGUgYDMyIGJpdHNgLCBlIHBhcmEgcXVlIG9zIHZhbG9yZXMgY29tcG9ydGVtLXNlIGRldmlkYW1lbnRlLFxuICogbyBgcG8tZGVjaW1hbGAgY29udMOpbSB1bSB0cmF0YW1lbnRvIHF1ZSBsaW1pdGEgZW0gMTYgbyBuw7ptZXJvIHRvdGFsIGRlIGNhc2FzIGFudGVzIGUgYXDDs3MgYSB2w61yZ3VsYS5cbiAqIFZlamEgYWJhaXhvIGFzIGRlbWFpcyByZWdyYXMgbmFzIGRvY3VtZW50YcOnw7VlcyBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWJhc2ljXCIgdGl0bGU9XCJQTyBEZWNpbWFsIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWJhc2ljL3NhbXBsZS1wby1kZWNpbWFsLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMvc2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1sYWJzXCIgdGl0bGU9XCJQTyBEZWNpbWFsIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtbGFicy9zYW1wbGUtcG8tZGVjaW1hbC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtbGFicy9zYW1wbGUtcG8tZGVjaW1hbC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtaG91cmx5LXdhZ2VcIiB0aXRsZT1cIlBPIERlY2ltYWwgLSBIb3VybHkgV2FnZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlL3NhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGVjaW1hbCAtIEhvdXJseSBXYWdlIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRlY2ltYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGVjaW1hbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0RlY2ltYWxDb21wb25lbnQgZXh0ZW5kcyBQb0lucHV0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfZGVjaW1hbHNMZW5ndGg/OiBudW1iZXIgPSBwb0RlY2ltYWxEZWZhdWx0RGVjaW1hbHNMZW5ndGg7XG4gIHByaXZhdGUgX3Rob3VzYW5kTWF4bGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoO1xuICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX21pbj86IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4PzogbnVtYmVyO1xuXG4gIHByaXZhdGUgZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nO1xuICBwcml2YXRlIGZpcmVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0tleWJvYXJkQW5kcm9pZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1pbnVzU2lnbjogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIG9sZERvdHNMZW5ndGggPSBudWxsO1xuICBwcml2YXRlIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmc7XG4gIHByaXZhdGUgdmFsdWVCZWZvcmVDaGFuZ2U6IGFueTtcblxuICBwcml2YXRlIHJlZ2V4ID0ge1xuICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArICcsJywgJ2cnKSxcbiAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArICcuJywgJ2cnKVxuICB9O1xuXG4gIGdldCBhdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9BdXRvY29tcGxldGUgPyAnb2ZmJyA6ICdvbic7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBRdWFudGlkYWRlIG3DoXhpbWEgZGUgY2FzYXMgZGVjaW1haXMuXG4gICAqXG4gICAqID4gKipJbXBvcnRhbnRlOioqXG4gICAqIC0gTyB2YWxvciBtw6F4aW1vIHBlcm1pdGlkbyDDqSAxNTtcbiAgICogLSBBIHNvbWEgdG90YWwgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBjb20gYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYCBsaW1pdGEtc2Ugw6AgMTY7XG4gICAqIC0gRXN0YSBwcm9wcmllZGFkZSBzb2JyZXDDtWUgYXBlbmFzIG8gdmFsb3IgKipwYWRyw6NvKiogZGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYDtcbiAgICogLSBDYXNvIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgdGVuaGEgdW0gdmFsb3IgZGVmaW5pZG8sIGVzdGEgcHJvcHJpZWRhZGUgcG9kZXLDoSByZWNlYmVyIGFwZW5hcyBvIHZhbG9yIHJlc3RhbnRlIGRvIGxpbWl0ZSB0b3RhbCAoMTYpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMmBcbiAgICovXG4gIEBJbnB1dCgncC1kZWNpbWFscy1sZW5ndGgnKSBzZXQgZGVjaW1hbHNMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGxldCBkZWNpbWFsc0xlbmd0aCA9IGNvbnZlcnRUb0ludCh2YWx1ZSk7XG5cbiAgICBkZWNpbWFsc0xlbmd0aCA9IHRoaXMuaXNWYWx1ZUJldHdlZW5BbGxvd2VkKGRlY2ltYWxzTGVuZ3RoLCBwb0RlY2ltYWxNYXhEZWNpbWFsc0xlbmd0aClcbiAgICAgID8gZGVjaW1hbHNMZW5ndGhcbiAgICAgIDogcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaXNHcmVhdGVyVGhhblRvdGFsTGVuZ3RoTGltaXQoZGVjaW1hbHNMZW5ndGgsIHRoaXMudGhvdXNhbmRNYXhsZW5ndGgpKSB7XG4gICAgICB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIGRlY2ltYWxzTGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuX2RlY2ltYWxzTGVuZ3RoID0gZGVjaW1hbHNMZW5ndGg7XG4gIH1cblxuICBnZXQgZGVjaW1hbHNMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxzTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGTDrWdpdG9zIGFudGVzIGRvIHNlcGFyYWRvciBkZWNpbWFsLlxuICAgKlxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTM7XG4gICAqIC0gQSBzb21hIHRvdGFsIGRlIGBwLWRlY2ltYWxzLWxlbmd0aGAgY29tIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgbGltaXRhLXNlIMOgIDE2O1xuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIG8gdmFsb3IgZGVmaW5pZG8gZW0gYHAtZGVjaW1hbHMtbGVuZ3RoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEzYFxuICAgKi9cbiAgQElucHV0KCdwLXRob3VzYW5kLW1heGxlbmd0aCcpIHNldCB0aG91c2FuZE1heGxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgbGV0IHRob3VzYW5kTWF4bGVuZ3RoID0gY29udmVydFRvSW50KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID4gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoICYmICF0aG91c2FuZE1heGxlbmd0aCkge1xuICAgICAgdGhvdXNhbmRNYXhsZW5ndGggPSBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0IC0gdGhpcy5kZWNpbWFsc0xlbmd0aDtcbiAgICB9XG5cbiAgICB0aG91c2FuZE1heGxlbmd0aCA9IHRoaXMuaXNWYWx1ZUJldHdlZW5BbGxvd2VkKHRob3VzYW5kTWF4bGVuZ3RoLCBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGgpXG4gICAgICA/IHRob3VzYW5kTWF4bGVuZ3RoXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcblxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KHRoaXMuZGVjaW1hbHNMZW5ndGgsIHRob3VzYW5kTWF4bGVuZ3RoKSkge1xuICAgICAgdGhpcy5kZWNpbWFsc0xlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aG91c2FuZE1heGxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLl90aG91c2FuZE1heGxlbmd0aCA9IHRob3VzYW5kTWF4bGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRob3VzYW5kTWF4bGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl90aG91c2FuZE1heGxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZm9ybWEgbyBsb2NhbGUocGHDrXMpIHBhcmEgYSBmb3JtYXRhw6fDo28gZG8gdmFsb3IuXG4gICAqIFBvciBwYWRyw6NvIG8gdmFsb3Igc2Vyw6EgY29uZmlndXJhZG8gc2VndW5kbyBhIG8gbcOzZHVsbyBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXG4gICAqXG4gICAqID4gUGFyYSB2ZXIgcXVhaXMgbGluZ3VhZ2VucyBzdXBvcnRhZGFzIGFjZXNzZSBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBtw61uaW1vLlxuICAgKi9cbiAgQElucHV0KCdwLW1pbicpIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9taW4gPSB2YWx1ZTtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX21pbiA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBtw6F4aW1vLlxuICAgKi9cbiAgQElucHV0KCdwLW1heCcpIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9tYXggPSB2YWx1ZTtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX21heCA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSwgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2QpO1xuICAgIHRoaXMuaXNLZXlib2FyZEFuZHJvaWQgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XG4gIH1cblxuICBzZXROdW1iZXJzU2VwYXJhdG9ycygpIHtcbiAgICBjb25zdCB7IGRlY2ltYWxTZXBhcmF0b3IsIHRob3VzYW5kU2VwYXJhdG9yIH0gPSB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldE51bWJlclNlcGFyYXRvcnModGhpcy5fbG9jYWxlKTtcbiAgICB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPSBkZWNpbWFsU2VwYXJhdG9yO1xuICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvcjtcbiAgICB0aGlzLnJlZ2V4ID0ge1xuICAgICAgdGhvdXNhbmQ6IG5ldyBSZWdFeHAoJ1xcXFwnICsgdGhvdXNhbmRTZXBhcmF0b3IsICdnJyksXG4gICAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArIGRlY2ltYWxTZXBhcmF0b3IsICdnJylcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudmVyaWZ5QXV0b0ZvY3VzKCk7XG4gICAgdGhpcy5zZXRQYWRkaW5nSW5wdXQoKTtcbiAgfVxuXG4gIGNsZWFyKHZhbHVlKSB7XG4gICAgdGhpcy5jYWxsT25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMuY29udHJvbENoYW5nZUVtaXR0ZXIoKTtcbiAgfVxuXG4gIGV4dHJhVmFsaWRhdGlvbihhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IHZhbHVlID0gYWJzdHJhY3RDb250cm9sLnZhbHVlO1xuICAgIGNvbnN0IHRob3VzYW5kVmFsdWUgPSBNYXRoLnRydW5jKHZhbHVlKTtcblxuICAgIC8vIFZlcmlmaWNhIHNlIGrDoSBwb3NzdWkgYWxndW0gZXJyb3IgcGF0dGVybiBwYWRyw6NvLlxuICAgIHRoaXMuZXJyb3JQYXR0ZXJuID0gdGhpcy5lcnJvclBhdHRlcm4gIT09ICdWYWxvciBJbnbDoWxpZG8nID8gdGhpcy5lcnJvclBhdHRlcm4gOiAnJztcblxuICAgIGlmIChtaW5GYWlsZWQodGhpcy5taW4sIHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1heEZhaWxlZCh0aGlzLm1heCwgdmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXg6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAobWF4bGVuZ3BvYWlsZWQodGhpcy50aG91c2FuZE1heGxlbmd0aCwgdGhvdXNhbmRWYWx1ZSkgJiZcbiAgICAgICAgdGhpcy50aG91c2FuZE1heGxlbmd0aCA8IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aCkgfHxcbiAgICAgIG1heGxlbmdwb2FpbGVkKHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQsIHZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4OiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2NyZWVuVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRFbCA/IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlIDogJyc7XG4gIH1cblxuICBoYXNJbnZhbGlkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKSAmJlxuICAgICAgdGhpcy5nZXRTY3JlZW5WYWx1ZSgpICE9PSAnJ1xuICAgICk7XG4gIH1cblxuICBoYXNMZXR0ZXJzKHZhbHVlOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiB2YWx1ZS5tYXRjaCgvW2EtekEtWjo7Kz1fwrRgXn5cIic/IUAjJCXCqCYqKCk+PHt9w6fDh1xcW1xcXS9cXFxcfF0rLyk7XG4gIH1cblxuICBpc1ZhbGlkTnVtYmVyKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyAtIGV2ZW50LmtleSBuw6NvIGV4aXN0aWEgZW0gYWxndW5zIGJyb3dzZXJzLCBjb21vIFNhbXN1bmcgYnJvd3NlciBlIEZpcmVmb3guXG4gICAgY29uc3Qga2V5VmFsdWUgPSA8YW55PlN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQud2hpY2gpO1xuICAgIGNvbnN0IHZhbGlkS2V5ID0gZXZlbnQud2hpY2ggIT09IDggJiYgZXZlbnQud2hpY2ggIT09IDA7XG5cbiAgICByZXR1cm4gIXRoaXMuaGFzTGV0dGVycyhrZXlWYWx1ZSkgJiYgdmFsaWRLZXk7XG4gIH1cblxuICAvLyBmdW7Dp8OjbyByZXNwb25zw6F2ZWwgcG9yIGFkaWNpb25hciBvcyB6ZXJvZXMgY29tIGFzIGNhc2EgZGVjaW1haXMgYW8gc2FpciBkbyBjYW1wby5cbiAgb25CbHVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLmhhc0xldHRlcnModmFsdWUpIHx8IHRoaXMuY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5jYWxsT25DaGFuZ2UodW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvciA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWUpO1xuICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXRUb1ZpZXdWYWx1ZSh2YWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcikpO1xuICAgIH1cblxuICAgIHRoaXMuYmx1ci5lbWl0KCk7XG4gICAgdGhpcy5jb250cm9sQ2hhbmdlRW1pdHRlcigpO1xuICB9XG5cbiAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgIC8vIEF0dWFsaXphIHZhbG9yIGRhIHZhcmnDoXZlbCBxdWUgc2Vyw6EgdXNhZGEgcGFyYSB2ZXJpZmljYXIgc2UgbyBjYW1wbyB0ZXZlIGFsdGVyYcOnw6NvXG4gICAgdGhpcy52YWx1ZUJlZm9yZUNoYW5nZSA9IHRoaXMuZ2V0U2NyZWVuVmFsdWUoKTtcblxuICAgIC8vIERpc3BhcmEgZXZlbnRvIHF1YW5kbyBvIHVzdcOhcmlvIGVudHJhciBubyBjYW1wb1xuICAgIC8vIEVzdGUgZXZlbnRvIHRhbWLDqW0gw6kgZGlzcGFyYWRvIHF1YW5kbyBvIGNhbXBvIGluaWNpYSBjb20gZm9jby5cbiAgICB0aGlzLmVudGVyLmVtaXQoKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQ7XG5cbiAgICBsZXQgbW9kZWxWYWx1ZTtcblxuICAgIC8vIC0gQnJvd3NlcnMgbmF0aXZvcyBkbyBBbmRyb2lkIGV4OiBTYW1zdW5nIEJyb3dzZXIuXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZEFuZHJvaWQpIHtcbiAgICAgIHRoaXMub25JbnB1dEtleWJvYXJkQW5kcm9pZChldmVudCk7XG4gICAgfVxuXG4gICAgbW9kZWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBtb2RlbFZhbHVlID0gdGhpcy5hZGRaZXJvQmVmb3JlKG1vZGVsVmFsdWUpO1xuICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0TWFzayhtb2RlbFZhbHVlKTtcblxuICAgIC8vIHZhbGlkYcOnw6NvIHBhcmEgbsOjbyBxdWVicmFyIElFIGNvbSBwbGFjZWhvbGRlciBkZWZpbmlkbyBlIElucHV0IHZhemlvXG4gICAgaWYgKHZpZXdWYWx1ZSkge1xuICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodmlld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Q3Vyc29ySW5wdXQoZXZlbnQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuZm9ybWF0VG9Nb2RlbFZhbHVlKG1vZGVsVmFsdWUpKTtcbiAgfVxuXG4gIG9uSW5wdXRLZXlib2FyZEFuZHJvaWQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3QgaGFzTGV0dGVycyA9IHRoaXMuaGFzTGV0dGVycyhpbnB1dFZhbHVlKTtcblxuICAgIGlmIChoYXNMZXR0ZXJzKSB7XG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZShpbnB1dFZhbHVlLnJlcGxhY2UoaGFzTGV0dGVyc1swXSwgJycpKTtcblxuICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQgLSAxO1xuICAgICAgY29uc3Qga2V5ID0gaW5wdXRWYWx1ZS5jaGFyQXQocG9zaXRpb24pO1xuXG4gICAgICB0aGlzLnNldFBvc2l0aW9uVmFsdWUoZXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5pc1ZhbGlkS2V5KGV2ZW50LCBrZXkpKSB7XG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGlucHV0VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLmlzVmFsaWRLZXkoZXZlbnQpO1xuICB9XG5cbiAgc2V0UGFkZGluZ0lucHV0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JJY29ucyA9ICcucG8tZmllbGQtaWNvbi1jb250YWluZXI6bm90KC5wby1maWVsZC1pY29uLWNvbnRhaW5lci1sZWZ0KSA+IC5wby1pY29uJztcbiAgICAgIGxldCBpY29ucyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ySWNvbnMpLmxlbmd0aDtcbiAgICAgIGlmICh0aGlzLmNsZWFuKSB7XG4gICAgICAgIGljb25zKys7XG4gICAgICB9XG4gICAgICBpZiAoaWNvbnMpIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7aWNvbnMgKiAzNn1weGA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB3cml0ZVZhbHVlTW9kZWwodmFsdWUpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsKSB7XG4gICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ZWRWaWV3VmFsdWUgPSB0aGlzLmZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoZm9ybWF0ZWRWaWV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JQYXR0ZXJuTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclBhdHRlcm4gIT09ICcnICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmVycm9yUGF0dGVybiA6ICcnO1xuICB9XG5cbiAgLy8gcmVzcG9uc8OhdmVsIHBvciBhZGljaW9uYXIgMCBhbnRlcyBkYSB2aXJndWxhIChkZWNpbWFsU2VwYXJhdG9yKS5cbiAgcHJpdmF0ZSBhZGRaZXJvQmVmb3JlKHZhbHVlKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsU2VwYXJhdG9yID0gdmFsdWUgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcblxuICAgIHJldHVybiBpc0RlY2ltYWxTZXBhcmF0b3IgPyBgMCR7dmFsdWV9YCA6IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250YWluc0NvbW1hKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zTW9yZVRoYW5PbmVEZWNpbWFsU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcgPSAnJykge1xuICAgIGNvbnN0IGZvdW5kQ29tbWEgPSB2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LmRlY2ltYWwpO1xuXG4gICAgcmV0dXJuICEhKGZvdW5kQ29tbWEgJiYgZm91bmRDb21tYS5sZW5ndGggPiAxKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udHJvbENoYW5nZUVtaXR0ZXIoKSB7XG4gICAgY29uc3QgZWxlbWVudFZhbHVlID0gdGhpcy5nZXRTY3JlZW5WYWx1ZSgpO1xuXG4gICAgLy8gRW1pdGUgbyBldmVudG8gY2hhbmdlIG1hbnVhbG1lbnRlIHF1YW5kbyBvIGNhbXBvIMOpIGFsdGVyYWRvXG4gICAgLy8gRXN0ZSBldmVudG8gw6kgY29udHJvbGFkbyBtYW51YWxtZW50ZSBkZXZpZG8gYW8gcHJldmVudERlZmF1bHQgZXhpc3RlbnRlIG5hIG3DoXNjYXJhXG4gICAgLy8gZSBkZXZpZG8gYW8gY29udHJvbGUgZG8gcC1jbGVhbiwgcXVlIHRhbWLDqW0gcHJlY2lzYSBlbWl0aXIgY2hhbmdlXG4gICAgaWYgKGVsZW1lbnRWYWx1ZSAhPT0gdGhpcy52YWx1ZUJlZm9yZUNoYW5nZSkge1xuICAgICAgdGhpcy5maXJlQ2hhbmdlID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGVsZW1lbnRWYWx1ZSk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWFzayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gbmVjZXNzw6FyaW8gcGFyYSBuw6NvIGFkaWNpb25hciAuIG5hcyBjYXNhIGRlY2ltYWlzLlxuICAgIC8vIHBvciBleGVtcGxvOiAxMi4zNDUsMTIzLjQ1IChlcnJhZG8pXG4gICAgLy8gMTIuMzQ1LDEyMzQ1IChjb3JyZXRvKVxuXG4gICAgaWYgKHZhbHVlLm1hdGNoKHRoaXMucmVnZXguZGVjaW1hbCkpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgKFxcXFxkKSg/PShcXFxcZHszfSkrKD8hXFxcXGQpJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9KWAsICdnJyk7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlZ2V4LCBgJDEke3RoaXMudGhvdXNhbmRTZXBhcmF0b3J9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBgJDEke3RoaXMudGhvdXNhbmRTZXBhcmF0b3J9YCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRvTW9kZWxWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLnJlcGxhY2VDb21tYVRvRG90KHZhbHVlKTtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlID8gcGFyc2VGbG9hdChOdW1iZXIoZm9ybWF0dGVkVmFsdWUpLnRvRml4ZWQodGhpcy5kZWNpbWFsc0xlbmd0aCkpIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHBhcnNlZFZhbHVlID09PSAwIHx8IHBhcnNlZFZhbHVlID8gcGFyc2VkVmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyAtIE5lY2Vzc8OhcmlvIHBhcmEgdHJhdGFyIHZhbG9yZXMgcXVlIGNvbnRlbmhhbSBkZWNpbWFsU2VwYXJhdG9yXG4gICAgdmFsdWUgPSB0aGlzLnJlcGxhY2VDb21tYVRvRG90KHZhbHVlKTtcblxuICAgIGNvbnN0IG51bWJlclZhbHVlID0gTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHNMZW5ndGgpO1xuXG4gICAgY29uc3QgdmFsdWVCZWZvcmVEb3QgPSB0aGlzLmdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKG51bWJlclZhbHVlLCAnLicpO1xuICAgIGNvbnN0IHZhbHVlQWZ0ZXJEb3QgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IobnVtYmVyVmFsdWUsICcuJyk7XG5cbiAgICBjb25zdCBmb3JtYXRlZE51bWJlciA9IHRoaXMuZm9ybWF0TWFzayh2YWx1ZUJlZm9yZURvdCk7XG5cbiAgICBpZiAodGhpcy5kZWNpbWFsc0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcm1hdGVkTnVtYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7Zm9ybWF0ZWROdW1iZXJ9JHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9JHt2YWx1ZUFmdGVyRG90fWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcih2YWx1ZTogc3RyaW5nID0gJycpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXgudGhvdXNhbmQsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVBZnRlclNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKVsxXSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3IodmFsdWUgPSAnJywgc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KHNlcGFyYXRvcilbMF0gfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGhhc0xlc3NEb3QodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGRvdHMgPSB2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LnRob3VzYW5kKTtcbiAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzICYmIGRvdHMubGVuZ3RoO1xuXG4gICAgICBpZiAoZG90c0xlbmd0aCA8IHRoaXMub2xkRG90c0xlbmd0aCkge1xuICAgICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBkb3RzTGVuZ3RoO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTW9yZURvdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZG90cyA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXgudGhvdXNhbmQpO1xuICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMgJiYgZG90cy5sZW5ndGg7XG5cbiAgICAgIGlmIChkb3RzTGVuZ3RoID4gdGhpcy5vbGREb3RzTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IGRvdHNMZW5ndGg7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNNaW51c1NpZ25JbnZhbGlkUG9zaXRpb24oZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleUlzTWludXNTaWduID0gZXZlbnQua2V5ID09PSB0aGlzLm1pbnVzU2lnbjtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcblxuICAgIHJldHVybiBrZXlJc01pbnVzU2lnbiAmJiBzZWxlY3Rpb25TdGFydCAhPT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnZhbGlkS2V5KGV2ZW50OiBhbnksIGNoYXJDb2RlOiBhbnkpIHtcbiAgICBjb25zdCBpc0ludmFsaWROdW1iZXIgPSAhdGhpcy5pc1ZhbGlkTnVtYmVyKGV2ZW50KTtcblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnZlcmlmeUluc2VydENvbW1hKGV2ZW50KSB8fFxuICAgICAgdGhpcy52ZXJpZnlUaG91c2FuZExlbmd0aChldmVudCkgfHxcbiAgICAgIHRoaXMudmVyaWZ5VmFsdWVBZnRlckNvbW1hKGV2ZW50KSB8fFxuICAgICAgdGhpcy52ZXJpZnlJbnNlcnRNaW51c1NpZ24oZXZlbnQpIHx8XG4gICAgICB0aGlzLmhhc01pbnVzU2lnbkludmFsaWRQb3NpdGlvbihldmVudCkgfHxcbiAgICAgIGlzSW52YWxpZE51bWJlciB8fFxuICAgICAgdGhpcy52YWxpZGF0ZUN1cnNvclBvc2l0aW9uQmVmb3JlU2VwYXJhdG9yKGV2ZW50KSB8fFxuICAgICAgdGhpcy52ZXJpZnlEZWNpbWFsTGVuZ3RoSXNaZXJvQW5kS2V5UHJlc3NlZElzQ29tbWEoY2hhckNvZGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNHcmVhdGVyVGhhblRvdGFsTGVuZ3RoTGltaXQoZGVjaW1hbHNNYXhMZW5ndGg6IG51bWJlciwgdGhvdXNhbmRNYXhsZW5ndGg6IG51bWJlcikge1xuICAgIHJldHVybiBkZWNpbWFsc01heExlbmd0aCArIHRob3VzYW5kTWF4bGVuZ3RoID4gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgaXNLZXlEZWNpbWFsU2VwYXJhdG9yKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yIHx8IGV2ZW50LmNoYXIgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNQb3NpdGlvbkFmdGVyRGVjaW1hbFNlcGFyYXRvcihwb3NpdGlvbkN1cnNvciwgdmFsdWUpIHtcbiAgICBjb25zdCBpbmRleENvbW1hID0gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgaWYgKGluZGV4Q29tbWEgJiYgdGhpcy5kZWNpbWFsc0xlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwb3NpdGlvbkN1cnNvciA+IGluZGV4Q29tbWE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGVjdGlvblN0YXJ0RGlmZmVyZW50U2VsZWN0aW9uRW5kKHRhcmdldDogYW55KSB7XG4gICAgcmV0dXJuIHRhcmdldC5zZWxlY3Rpb25TdGFydCAhPT0gdGFyZ2V0LnNlbGVjdGlvbkVuZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEtleShldmVudDogYW55LCBrZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgdmFsaWRLZXkgPSBldmVudC53aGljaCA9PT0gOCB8fCBldmVudC53aGljaCA9PT0gMDtcblxuICAgIGlmICh2YWxpZEtleSAmJiAhdGhpcy5pc0tleWJvYXJkQW5kcm9pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGV2ZW50LmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0ludmFsaWRLZXkoZXZlbnQsIGNoYXJDb2RlKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsdWVCZXR3ZWVuQWxsb3dlZCh2YWx1ZTogbnVtYmVyLCBtYXhBbGxvd2VkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSBtYXhBbGxvd2VkO1xuICB9XG5cbiAgLy8gUXVhbmRvIGRlY2ltYWxzTGVuZ3RoIGZvciAwIG7Do28gZGV2ZSBwZXJtaXRpciBpbmZvcm1hciB2w61yZ3VsYSAoZGVjaW1hbFNlcGFyYXRvcilcbiAgcHJpdmF0ZSB2ZXJpZnlEZWNpbWFsTGVuZ3RoSXNaZXJvQW5kS2V5UHJlc3NlZElzQ29tbWEoY2hhckNvZGU6IG51bWJlcikge1xuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gNDQgJiYgdGhpcy5kZWNpbWFsc0xlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5QXV0b0ZvY3VzKCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFNlbGVjdGlvblJhbmdlKHRhcmdldDogYW55LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XG4gICAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSAxICYmIHNlbGVjdGlvbkVuZCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCArIDEsIHNlbGVjdGlvbkVuZCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0IC0gMSwgc2VsZWN0aW9uRW5kIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBdCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2UpIHtcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2UgKyB2YWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbW1hVG9Eb3QodmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJywnKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSh0aGlzLnJlZ2V4LmRlY2ltYWwsICcuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JJbnB1dChldmVudCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB2aWV3VmFsdWUgPSB0YXJnZXQudmFsdWU7XG5cbiAgICAvLyBDYXNvIGhvdXZlciBtYWlzIC4gZG8gcXVlIGFudGVyaW9ybWVudGUgc29tYSBvIHZhbG9yIGNvbSAxLlxuICAgIGlmICh0aGlzLmhhc01vcmVEb3Qodmlld1ZhbHVlKSB8fCB2aWV3VmFsdWUgPT09ICcwJyArIHRoaXMuZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCArIDEsIHNlbGVjdGlvbkVuZCArIDEpO1xuICAgIH1cblxuICAgIC8vIENhc28gaG91dmVyIG1lbm9zIC4gZG8gcXVlIGFudGVyaW9ybWVudGUgc3VidHJhaSBvIHZhbG9yIHBvciAxLlxuICAgIGlmICh0aGlzLmhhc0xlc3NEb3Qodmlld1ZhbHVlKSkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU2VsZWN0aW9uUmFuZ2UodGFyZ2V0LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb25WYWx1ZShldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3QgcG9zaXRpb24gPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxO1xuXG4gICAgaWYgKHBvc2l0aW9uID4gMCAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduKSB7XG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcG9zaXRpb24pICsgdmFsdWUuc3Vic3RyKHBvc2l0aW9uICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWaWV3VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcih0YXJnZXQudmFsdWUpO1xuICAgIGNvbnN0IHZhbHVlQmVmb3JlU2VwYXJhdG9yID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih0YXJnZXQudmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG4gICAgY29uc3QgdmFsdWVCZWZvcmVTZXBhcmF0b3JPcmlnaW5hbCA9IHRoaXMuZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3Iob3JpZ2luYWxWYWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGFyZ2V0LnNlbGVjdGlvblN0YXJ0IDw9IHZhbHVlQmVmb3JlU2VwYXJhdG9yLmxlbmd0aCAmJlxuICAgICAgdmFsdWVCZWZvcmVTZXBhcmF0b3JPcmlnaW5hbC5sZW5ndGggPT09IHRoaXMudGhvdXNhbmRNYXhsZW5ndGggJiZcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlUaG91c2FuZExlbmd0aChldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHRhcmdldC52YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVCZWZvcmVTZXBhcmF0b3JPcmlnaW5hbCA9IHRoaXMuZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3Iob3JpZ2luYWxWYWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWVCZWZvcmVTZXBhcmF0b3JPcmlnaW5hbC5sZW5ndGggPj0gdGhpcy50aG91c2FuZE1heGxlbmd0aCAmJlxuICAgICAgIXRoaXMuaXNLZXlEZWNpbWFsU2VwYXJhdG9yKGV2ZW50KSAmJlxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHRhcmdldC5zZWxlY3Rpb25TdGFydCAtIHRoaXMuZGVjaW1hbHNMZW5ndGgsIHRhcmdldC52YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJbnNlcnRDb21tYShlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNDb21tYSA9IHRoaXMuY29udGFpbnNDb21tYShlLnRhcmdldC52YWx1ZSk7XG5cbiAgICByZXR1cm4gaGFzQ29tbWEgJiYgZS5rZXkgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SW5zZXJ0TWludXNTaWduKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBpbmRleE1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKHRoaXMubWludXNTaWduKSAhPT0gLTE7XG4gICAgY29uc3QgcG9zaXRpb25NaW51c1NpZ24gPSB2YWx1ZS5sYXN0SW5kZXhPZignLScpO1xuICAgIGNvbnN0IG9jY3VyYW5jZXNNaW51c1NpZ24gPSB2YWx1ZS5tYXRjaChuZXcgUmVnRXhwKCctJywgJ2cnKSk7XG5cbiAgICBpZiAodGhpcy5pc0tleWJvYXJkQW5kcm9pZCAmJiBpbmRleE1pbnVzU2lnbiAmJiBvY2N1cmFuY2VzTWludXNTaWduLmxlbmd0aCA+IDEpIHtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMucmVwbGFjZUF0KHZhbHVlLCBwb3NpdGlvbk1pbnVzU2lnbiwgJycpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhNaW51c1NpZ24gJiYgZXZlbnQua2V5ID09PSB0aGlzLm1pbnVzU2lnbjtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5VmFsdWVBZnRlckNvbW1hKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjb25zdCB2YWx1ZUFmdGVyU2VwYXJhdG9yID0gdGhpcy5nZXRWYWx1ZUFmdGVyU2VwYXJhdG9yKHZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNQb3NpdGlvbkFmdGVyRGVjaW1hbFNlcGFyYXRvcihzZWxlY3Rpb25TdGFydCwgdmFsdWUpICYmIHZhbHVlQWZ0ZXJTZXBhcmF0b3IubGVuZ3RoID49IHRoaXMuZGVjaW1hbHNMZW5ndGhcbiAgICApO1xuICB9XG59XG4iLCI8cG8tZmllbGQtY29udGFpbmVyIFtwLWxhYmVsXT1cImxhYmVsXCIgW3AtaGVscF09XCJoZWxwXCIgW3Atb3B0aW9uYWxdPVwiIXJlcXVpcmVkICYmIG9wdGlvbmFsXCI+XG4gIDxkaXYgY2xhc3M9XCJwby1maWVsZC1jb250YWluZXItY29udGVudFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICA8cG8taWNvbiBjbGFzcz1cInBvLWZpZWxkLWljb25cIiBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtwLWljb25dPVwiaWNvblwiPjwvcG8taWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgI2lucFxuICAgICAgY2xhc3M9XCJwby1pbnB1dFwiXG4gICAgICBbYXR0ci5tYXhdPVwibWF4XCJcbiAgICAgIFthdHRyLm1pbl09XCJtaW5cIlxuICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgIFtjbGFzcy5wby1pbnB1dC1pY29uLWxlZnRdPVwiaWNvblwiXG4gICAgICBbY2xhc3MucG8taW5wdXQtaWNvbi1yaWdodF09XCJjbGVhblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAgICAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodFwiPlxuICAgICAgPHBvLWNsZWFuICpuZ0lmPVwiY2xlYW4gJiYgIWRpc2FibGVkICYmICFyZWFkb25seVwiIFtwLWVsZW1lbnQtcmVmXT1cImlucHV0RWxcIiAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYXIoJGV2ZW50KVwiPlxuICAgICAgPC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20gW3AtZXJyb3ItcGF0dGVybl09XCJnZXRFcnJvclBhdHRlcm5NZXNzYWdlKClcIj4gPC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG4iXX0=
@@ -180,7 +180,7 @@ PoRichTextToolbarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
180
180
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.toolbarElement = _t.first);
181
181
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.richTextImageModal = _t.first);
182
182
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.richTextLinkModal = _t.first);
183
- } }, inputs: { readonly: ["p-readonly", "readonly"] }, outputs: { command: "p-command", modal: "p-modal", linkEditing: "p-link-editing" }, decls: 17, vars: 6, consts: [[1, "po-rich-text-toolbar"], ["toolbarElement", ""], [1, "po-rich-text-toolbar-button-align"], ["p-toggle", "multiple", 3, "p-buttons"], ["class", "po-rich-text-toolbar-button-align", 4, "ngIf"], ["p-toggle", "single", 3, "p-buttons"], [3, "p-buttons"], [3, "p-command"], ["richTextImageModal", ""], [3, "p-command", "p-link-editing"], ["richTextLinkModal", ""], [1, "po-rich-text-toolbar-color-picker-container"], [1, "po-button", "po-text-ellipsis", "po-rich-text-toolbar-color-picker-button", 3, "disabled", "p-tooltip"], ["type", "color", 1, "po-rich-text-toolbar-color-picker-input", 3, "disabled", "change"], ["colorPickerInput", ""]], template: function PoRichTextToolbarComponent_Template(rf, ctx) { if (rf & 1) {
183
+ } }, inputs: { readonly: ["p-readonly", "readonly"] }, outputs: { command: "p-command", modal: "p-modal", linkEditing: "p-link-editing" }, decls: 17, vars: 11, consts: [[1, "po-rich-text-toolbar"], ["toolbarElement", ""], [1, "po-rich-text-toolbar-button-align"], ["p-toggle", "multiple", 3, "p-small", "p-buttons"], ["class", "po-rich-text-toolbar-button-align", 4, "ngIf"], ["p-toggle", "single", 3, "p-small", "p-buttons"], [3, "p-small", "p-buttons"], [3, "p-command"], ["richTextImageModal", ""], [3, "p-command", "p-link-editing"], ["richTextLinkModal", ""], [1, "po-rich-text-toolbar-color-picker-container"], [1, "po-button", "po-button-default", "po-button-sm", "po-text-ellipsis", "po-rich-text-toolbar-color-picker-button", 3, "disabled", "p-tooltip"], ["type", "color", 1, "po-rich-text-toolbar-color-picker-input", 3, "disabled", "change"], ["colorPickerInput", ""]], template: function PoRichTextToolbarComponent_Template(rf, ctx) { if (rf & 1) {
184
184
  i0.ɵɵelementStart(0, "div", 0, 1)(2, "div", 2);
185
185
  i0.ɵɵelement(3, "po-button-group", 3);
186
186
  i0.ɵɵelementEnd();
@@ -205,21 +205,21 @@ PoRichTextToolbarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
205
205
  i0.ɵɵelementEnd();
206
206
  } if (rf & 2) {
207
207
  i0.ɵɵadvance(3);
208
- i0.ɵɵproperty("p-buttons", ctx.formatButtons);
208
+ i0.ɵɵproperty("p-small", true)("p-buttons", ctx.formatButtons);
209
209
  i0.ɵɵadvance(1);
210
210
  i0.ɵɵproperty("ngIf", !ctx.isInternetExplorer);
211
211
  i0.ɵɵadvance(2);
212
- i0.ɵɵproperty("p-buttons", ctx.alignButtons);
212
+ i0.ɵɵproperty("p-small", true)("p-buttons", ctx.alignButtons);
213
213
  i0.ɵɵadvance(2);
214
- i0.ɵɵproperty("p-buttons", ctx.listButtons);
214
+ i0.ɵɵproperty("p-small", true)("p-buttons", ctx.listButtons);
215
215
  i0.ɵɵadvance(2);
216
- i0.ɵɵproperty("p-buttons", ctx.linkButtons);
216
+ i0.ɵɵproperty("p-small", true)("p-buttons", ctx.linkButtons);
217
217
  i0.ɵɵadvance(2);
218
- i0.ɵɵproperty("p-buttons", ctx.mediaButtons);
218
+ i0.ɵɵproperty("p-small", true)("p-buttons", ctx.mediaButtons);
219
219
  } }, directives: [i2.PoButtonGroupComponent, i3.NgIf, i4.PoTooltipDirective, i5.PoRichTextImageModalComponent, i6.PoRichTextLinkModalComponent], encapsulation: 2 });
220
220
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoRichTextToolbarComponent, [{
221
221
  type: Component,
222
- args: [{ selector: 'po-rich-text-toolbar', template: "<div class=\"po-rich-text-toolbar\" #toolbarElement>\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"multiple\" [p-buttons]=\"formatButtons\"> </po-button-group>\n </div>\n\n <div *ngIf=\"!isInternetExplorer\" class=\"po-rich-text-toolbar-button-align\">\n <div class=\"po-rich-text-toolbar-color-picker-container\">\n <button\n class=\"po-button po-text-ellipsis po-rich-text-toolbar-color-picker-button\"\n [disabled]=\"readonly\"\n [p-tooltip]=\"literals.textColor\"\n [attr.aria-label]=\"literals.textColor\"\n >\n <input\n #colorPickerInput\n class=\"po-rich-text-toolbar-color-picker-input\"\n type=\"color\"\n [disabled]=\"readonly\"\n (change)=\"changeTextColor($event.target.value)\"\n [attr.aria-label]=\"literals.textColor\"\n />\n </button>\n </div>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"single\" [p-buttons]=\"alignButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"single\" [p-buttons]=\"listButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group [p-buttons]=\"linkButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group [p-buttons]=\"mediaButtons\"> </po-button-group>\n </div>\n</div>\n\n<po-rich-text-image-modal #richTextImageModal (p-command)=\"emitCommand($event)\"> </po-rich-text-image-modal>\n\n<po-rich-text-link-modal\n #richTextLinkModal\n (p-command)=\"emitCommand($event)\"\n (p-link-editing)=\"emitLinkEditing($event)\"\n>\n</po-rich-text-link-modal>\n" }]
222
+ args: [{ selector: 'po-rich-text-toolbar', template: "<div class=\"po-rich-text-toolbar\" #toolbarElement>\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"multiple\" [p-small]=\"true\" [p-buttons]=\"formatButtons\"> </po-button-group>\n </div>\n\n <div *ngIf=\"!isInternetExplorer\" class=\"po-rich-text-toolbar-button-align\">\n <div class=\"po-rich-text-toolbar-color-picker-container\">\n <button\n class=\"po-button po-button-default po-button-sm po-text-ellipsis po-rich-text-toolbar-color-picker-button\"\n [disabled]=\"readonly\"\n [p-tooltip]=\"literals.textColor\"\n [attr.aria-label]=\"literals.textColor\"\n >\n <input\n #colorPickerInput\n class=\"po-rich-text-toolbar-color-picker-input\"\n type=\"color\"\n [disabled]=\"readonly\"\n (change)=\"changeTextColor($event.target.value)\"\n [attr.aria-label]=\"literals.textColor\"\n />\n </button>\n </div>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"single\" [p-small]=\"true\" [p-buttons]=\"alignButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group p-toggle=\"single\" [p-small]=\"true\" [p-buttons]=\"listButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group [p-small]=\"true\" [p-buttons]=\"linkButtons\"> </po-button-group>\n </div>\n\n <div class=\"po-rich-text-toolbar-button-align\">\n <po-button-group [p-small]=\"true\" [p-buttons]=\"mediaButtons\"> </po-button-group>\n </div>\n</div>\n\n<po-rich-text-image-modal #richTextImageModal (p-command)=\"emitCommand($event)\"> </po-rich-text-image-modal>\n\n<po-rich-text-link-modal\n #richTextLinkModal\n (p-command)=\"emitCommand($event)\"\n (p-link-editing)=\"emitLinkEditing($event)\"\n>\n</po-rich-text-link-modal>\n" }]
223
223
  }], function () { return [{ type: i1.PoLanguageService }]; }, { colorPickerInput: [{
224
224
  type: ViewChild,
225
225
  args: ['colorPickerInput', { read: ElementRef }]
@@ -245,4 +245,4 @@ PoRichTextToolbarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
245
245
  type: Input,
246
246
  args: ['p-readonly']
247
247
  }] }); })();
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcmljaC10ZXh0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLXJpY2gtdGV4dC9wby1yaWNoLXRleHQtdG9vbGJhci9wby1yaWNoLXRleHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tcmljaC10ZXh0L3BvLXJpY2gtdGV4dC10b29sYmFyL3BvLXJpY2gtdGV4dC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7SUNKMUcsOEJBQTJFLGNBQUEsaUJBQUEsb0JBQUE7SUFhbkUsOEtBQVUsMkNBQW9DLElBQUM7SUFMakQsaUJBT0UsRUFBQSxFQUFBLEVBQUE7OztJQVhGLGVBQXFCO0lBQXJCLDBDQUFxQix3Q0FBQTtJQUVyQix1REFBc0M7SUFNcEMsZUFBcUI7SUFBckIsMENBQXFCO0lBRXJCLHVEQUFzQzs7QURSaEQsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUM7QUFNekMsTUFBTSxPQUFPLDBCQUEwQjtJQThHckMsWUFBb0IsZUFBa0M7UUFB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LEVBQUU7WUFFcEMsT0FBTztrQkFBM0IsTUFBTTttQkFBQyxXQUFXO1lBRUEsS0FBSztrQkFBdkIsTUFBTTttQkFBQyxTQUFTO1lBRVMsV0FBVztrQkFBcEMsTUFBTTttQkFBQyxnQkFBZ0I7WUFvRkMsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBpc0lFIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0J1dHRvbkdyb3VwSXRlbSB9IGZyb20gJy4uLy4uLy4uL3BvLWJ1dHRvbi1ncm91cCc7XG5pbXBvcnQgeyBwb1JpY2hUZXh0TGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi4vcG8tcmljaC10ZXh0LWxpdGVyYWxzJztcbmltcG9ydCB7IFBvUmljaFRleHRUb29sYmFyQnV0dG9uR3JvdXBJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tZ3JvdXAtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wby1yaWNoLXRleHQtaW1hZ2UtbW9kYWwvcG8tcmljaC10ZXh0LWltYWdlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb1JpY2hUZXh0TGlua01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcmljaC10ZXh0LWxpbmstbW9kYWwvcG8tcmljaC10ZXh0LWxpbmstbW9kYWwuY29tcG9uZW50JztcblxuY29uc3QgcG9SaWNoVGV4dERlZmF1bHRDb2xvciA9ICcjMDAwMDAwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tcmljaC10ZXh0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tcmljaC10ZXh0LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBvUmljaFRleHRUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbG9yUGlja2VySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY29sb3JQaWNrZXJJbnB1dDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0b29sYmFyRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHJpY2hUZXh0SW1hZ2VNb2RhbDogUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChQb1JpY2hUZXh0TGlua01vZGFsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSByaWNoVGV4dExpbmtNb2RhbDogUG9SaWNoVGV4dExpbmtNb2RhbENvbXBvbmVudDtcblxuICBAT3V0cHV0KCdwLWNvbW1hbmQnKSBjb21tYW5kID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCB7IGNvbW1hbmQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xuXG4gIEBPdXRwdXQoJ3AtbW9kYWwnKSBtb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoJ3AtbGluay1lZGl0aW5nJykgbGlua0VkaXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICByZWFkb25seSBsaXRlcmFscyA9IHtcbiAgICAuLi5wb1JpY2hUZXh0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKV1cbiAgfTtcblxuICBhbGlnbkJ1dHRvbnM6IEFycmF5PFBvUmljaFRleHRUb29sYmFyQnV0dG9uR3JvdXBJdGVtPiA9IFtcbiAgICB7XG4gICAgICBjb21tYW5kOiAnanVzdGlmeWxlZnQnLFxuICAgICAgaWNvbjogJ3BvLWljb24tYWxpZ24tbGVmdCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmxlZnQsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdEFsaWduQ29tbWFuZC5iaW5kKHRoaXMsICdqdXN0aWZ5bGVmdCcpLFxuICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdqdXN0aWZ5Y2VudGVyJyxcbiAgICAgIGljb246ICdwby1pY29uLWFsaWduLWNlbnRlcicsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmNlbnRlcixcbiAgICAgIGFjdGlvbjogdGhpcy5lbWl0QWxpZ25Db21tYW5kLmJpbmQodGhpcywgJ2p1c3RpZnljZW50ZXInKVxuICAgIH0sXG4gICAge1xuICAgICAgY29tbWFuZDogJ2p1c3RpZnlyaWdodCcsXG4gICAgICBpY29uOiAncG8taWNvbi1hbGlnbi1yaWdodCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLnJpZ2h0LFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRBbGlnbkNvbW1hbmQuYmluZCh0aGlzLCAnanVzdGlmeXJpZ2h0JylcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdqdXN0aWZ5ZnVsbCcsXG4gICAgICBpY29uOiAncG8taWNvbi1hbGlnbi1qdXN0aWZ5JyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuanVzdGlmeSxcbiAgICAgIGFjdGlvbjogdGhpcy5lbWl0QWxpZ25Db21tYW5kLmJpbmQodGhpcywgJ2p1c3RpZnlmdWxsJylcbiAgICB9XG4gIF07XG5cbiAgZm9ybWF0QnV0dG9uczogQXJyYXk8UG9SaWNoVGV4dFRvb2xiYXJCdXR0b25Hcm91cEl0ZW0+ID0gW1xuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdib2xkJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtYm9sZCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmJvbGQsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdENvbW1hbmQuYmluZCh0aGlzLCAnYm9sZCcpXG4gICAgfSxcbiAgICB7XG4gICAgICBjb21tYW5kOiAnaXRhbGljJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtaXRhbGljJyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuaXRhbGljLFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRDb21tYW5kLmJpbmQodGhpcywgJ2l0YWxpYycpXG4gICAgfSxcbiAgICB7XG4gICAgICBjb21tYW5kOiAndW5kZXJsaW5lJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtdW5kZXJsaW5lJyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMudW5kZXJsaW5lLFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRDb21tYW5kLmJpbmQodGhpcywgJ3VuZGVybGluZScpXG4gICAgfVxuICBdO1xuXG4gIGxpc3RCdXR0b25zOiBBcnJheTxQb1JpY2hUZXh0VG9vbGJhckJ1dHRvbkdyb3VwSXRlbT4gPSBbXG4gICAge1xuICAgICAgY29tbWFuZDogJ2luc2VydFVub3JkZXJlZExpc3QnLFxuICAgICAgaWNvbjogJ3BvLWljb24tbGlzdCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLnVub3JkZXJlZExpc3QsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdENvbW1hbmQuYmluZCh0aGlzLCAnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXG4gICAgfVxuICBdO1xuXG4gIGxpbmtCdXR0b25zOiBBcnJheTxQb1JpY2hUZXh0VG9vbGJhckJ1dHRvbkdyb3VwSXRlbT4gPSBbXG4gICAge1xuICAgICAgY29tbWFuZDogJ0NyZWF0ZWxpbmsnLFxuICAgICAgaWNvbjogJ3BvLWljb24tbGluaycsXG4gICAgICB0b29sdGlwOiBgJHt0aGlzLmxpdGVyYWxzLmluc2VydExpbmt9IChDdHJsICsgSylgLFxuICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnJpY2hUZXh0TGlua01vZGFsLm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkTGlua0VsZW1lbnQpXG4gICAgfVxuICBdO1xuXG4gIG1lZGlhQnV0dG9uczogQXJyYXk8UG9CdXR0b25Hcm91cEl0ZW0+ID0gW1xuICAgIHtcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuaW5zZXJ0SW1hZ2UsXG4gICAgICBpY29uOiAncG8taWNvbi1waWN0dXJlJyxcbiAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5yaWNoVGV4dEltYWdlTW9kYWwub3Blbk1vZGFsKClcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW47XG4gIHByaXZhdGUgc2VsZWN0ZWRMaW5rRWxlbWVudDtcblxuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMudG9nZ2xlRGlzYWJsZUJ1dHRvbnModGhpcy5fcmVhZG9ubHkpO1xuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuXG4gIGdldCBpc0ludGVybmV0RXhwbG9yZXIoKSB7XG4gICAgcmV0dXJuIGlzSUUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZW1vdmVCdXR0b25Gb2N1cygpO1xuICAgIHRoaXMuc2V0Q29sb3JJbkNvbG9yUGlja2VyKHBvUmljaFRleHREZWZhdWx0Q29sb3IpO1xuICB9XG5cbiAgY2hhbmdlVGV4dENvbG9yKHZhbHVlKSB7XG4gICAgY29uc3QgY29tbWFuZCA9ICdmb3JlQ29sb3InO1xuXG4gICAgdGhpcy5jb21tYW5kLmVtaXQoeyBjb21tYW5kLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGVtaXRMaW5rRWRpdGluZyhpc0xpbmtFZGl0OiBib29sZWFuKSB7XG4gICAgdGhpcy5saW5rRWRpdGluZy5lbWl0KGlzTGlua0VkaXQpO1xuICB9XG5cbiAgc2VsZWN0ZWRMaW5rKHNlbGVjdGVkTGlua0VsZW1lbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTGlua0VsZW1lbnQgPSBzZWxlY3RlZExpbmtFbGVtZW50O1xuICB9XG5cbiAgc2V0QnV0dG9uc1N0YXRlcyhvYmo6IHsgY29tbWFuZHM6IEFycmF5PHN0cmluZz47IGhleENvbG9yOiBzdHJpbmcgfSkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5hbGlnbkJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gKGJ1dHRvbi5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyhidXR0b24uY29tbWFuZCkpKTtcbiAgICAgIHRoaXMuZm9ybWF0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiAoYnV0dG9uLnNlbGVjdGVkID0gb2JqLmNvbW1hbmRzLmluY2x1ZGVzKGJ1dHRvbi5jb21tYW5kKSkpO1xuICAgICAgdGhpcy5saXN0QnV0dG9uc1swXS5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyh0aGlzLmxpc3RCdXR0b25zWzBdLmNvbW1hbmQpO1xuICAgICAgdGhpcy5saW5rQnV0dG9uc1swXS5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyh0aGlzLmxpbmtCdXR0b25zWzBdLmNvbW1hbmQpO1xuICAgICAgdGhpcy5zZXRDb2xvckluQ29sb3JQaWNrZXIob2JqLmhleENvbG9yKTtcbiAgICB9XG4gIH1cblxuICBzaG9ydGN1dFRyaWdnZXIoKSB7XG4gICAgdGhpcy5yaWNoVGV4dExpbmtNb2RhbC5vcGVuTW9kYWwodGhpcy5zZWxlY3RlZExpbmtFbGVtZW50KTtcbiAgfVxuXG4gIGVtaXRDb21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tbWFuZC5lbWl0KGNvbW1hbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0QWxpZ25Db21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbGlnbkJ1dHRvbnMuZmluZEluZGV4KGJ0biA9PiBidG4uY29tbWFuZCA9PT0gY29tbWFuZCk7XG5cbiAgICBpZiAodGhpcy5hbGlnbkJ1dHRvbnNbaW5kZXhdLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmFsaWduQnV0dG9uc1tpbmRleF0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1hbmQuZW1pdChjb21tYW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQnV0dG9uRm9jdXMoKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IHRoaXMudG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcblxuICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gYnV0dG9uLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbG9ySW5Db2xvclBpY2tlcihjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvclBpY2tlcklucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjb2xvcjtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRGlzYWJsZUJ1dHRvbnMoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsaWduQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiAoYnV0dG9uLmRpc2FibGVkID0gc3RhdGUpKTtcbiAgICB0aGlzLmZvcm1hdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gKGJ1dHRvbi5kaXNhYmxlZCA9IHN0YXRlKSk7XG4gICAgdGhpcy5saXN0QnV0dG9uc1swXS5kaXNhYmxlZCA9IHN0YXRlO1xuICAgIHRoaXMubGlua0J1dHRvbnNbMF0uZGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB0aGlzLm1lZGlhQnV0dG9uc1swXS5kaXNhYmxlZCA9IHN0YXRlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXJcIiAjdG9vbGJhckVsZW1lbnQ+XG4gIDxkaXYgY2xhc3M9XCJwby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tYWxpZ25cIj5cbiAgICA8cG8tYnV0dG9uLWdyb3VwIHAtdG9nZ2xlPVwibXVsdGlwbGVcIiBbcC1idXR0b25zXT1cImZvcm1hdEJ1dHRvbnNcIj4gPC9wby1idXR0b24tZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCIhaXNJbnRlcm5ldEV4cGxvcmVyXCIgY2xhc3M9XCJwby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tYWxpZ25cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItY29sb3ItcGlja2VyLWNvbnRhaW5lclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInBvLWJ1dHRvbiBwby10ZXh0LWVsbGlwc2lzIHBvLXJpY2gtdGV4dC10b29sYmFyLWNvbG9yLXBpY2tlci1idXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgICBbcC10b29sdGlwXT1cImxpdGVyYWxzLnRleHRDb2xvclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGl0ZXJhbHMudGV4dENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2NvbG9yUGlja2VySW5wdXRcbiAgICAgICAgICBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWNvbG9yLXBpY2tlci1pbnB1dFwiXG4gICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGV4dENvbG9yKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpdGVyYWxzLnRleHRDb2xvclwiXG4gICAgICAgIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWJ1dHRvbi1hbGlnblwiPlxuICAgIDxwby1idXR0b24tZ3JvdXAgcC10b2dnbGU9XCJzaW5nbGVcIiBbcC1idXR0b25zXT1cImFsaWduQnV0dG9uc1wiPiA8L3BvLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWJ1dHRvbi1hbGlnblwiPlxuICAgIDxwby1idXR0b24tZ3JvdXAgcC10b2dnbGU9XCJzaW5nbGVcIiBbcC1idXR0b25zXT1cImxpc3RCdXR0b25zXCI+IDwvcG8tYnV0dG9uLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItYnV0dG9uLWFsaWduXCI+XG4gICAgPHBvLWJ1dHRvbi1ncm91cCBbcC1idXR0b25zXT1cImxpbmtCdXR0b25zXCI+IDwvcG8tYnV0dG9uLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItYnV0dG9uLWFsaWduXCI+XG4gICAgPHBvLWJ1dHRvbi1ncm91cCBbcC1idXR0b25zXT1cIm1lZGlhQnV0dG9uc1wiPiA8L3BvLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPHBvLXJpY2gtdGV4dC1pbWFnZS1tb2RhbCAjcmljaFRleHRJbWFnZU1vZGFsIChwLWNvbW1hbmQpPVwiZW1pdENvbW1hbmQoJGV2ZW50KVwiPiA8L3BvLXJpY2gtdGV4dC1pbWFnZS1tb2RhbD5cblxuPHBvLXJpY2gtdGV4dC1saW5rLW1vZGFsXG4gICNyaWNoVGV4dExpbmtNb2RhbFxuICAocC1jb21tYW5kKT1cImVtaXRDb21tYW5kKCRldmVudClcIlxuICAocC1saW5rLWVkaXRpbmcpPVwiZW1pdExpbmtFZGl0aW5nKCRldmVudClcIlxuPlxuPC9wby1yaWNoLXRleHQtbGluay1tb2RhbD5cbiJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcmljaC10ZXh0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLXJpY2gtdGV4dC9wby1yaWNoLXRleHQtdG9vbGJhci9wby1yaWNoLXRleHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tcmljaC10ZXh0L3BvLXJpY2gtdGV4dC10b29sYmFyL3BvLXJpY2gtdGV4dC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7SUNKMUcsOEJBQTJFLGNBQUEsaUJBQUEsb0JBQUE7SUFhbkUsOEtBQVUsMkNBQW9DLElBQUM7SUFMakQsaUJBT0UsRUFBQSxFQUFBLEVBQUE7OztJQVhGLGVBQXFCO0lBQXJCLDBDQUFxQix3Q0FBQTtJQUVyQix1REFBc0M7SUFNcEMsZUFBcUI7SUFBckIsMENBQXFCO0lBRXJCLHVEQUFzQzs7QURSaEQsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUM7QUFNekMsTUFBTSxPQUFPLDBCQUEwQjtJQThHckMsWUFBb0IsZUFBa0M7UUFB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QkFBNEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFFcEMsT0FBTztrQkFBM0IsTUFBTTttQkFBQyxXQUFXO1lBRUEsS0FBSztrQkFBdkIsTUFBTTttQkFBQyxTQUFTO1lBRVMsV0FBVztrQkFBcEMsTUFBTTttQkFBQyxnQkFBZ0I7WUFvRkMsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBpc0lFIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0J1dHRvbkdyb3VwSXRlbSB9IGZyb20gJy4uLy4uLy4uL3BvLWJ1dHRvbi1ncm91cCc7XG5pbXBvcnQgeyBwb1JpY2hUZXh0TGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi4vcG8tcmljaC10ZXh0LWxpdGVyYWxzJztcbmltcG9ydCB7IFBvUmljaFRleHRUb29sYmFyQnV0dG9uR3JvdXBJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tZ3JvdXAtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wby1yaWNoLXRleHQtaW1hZ2UtbW9kYWwvcG8tcmljaC10ZXh0LWltYWdlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb1JpY2hUZXh0TGlua01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcmljaC10ZXh0LWxpbmstbW9kYWwvcG8tcmljaC10ZXh0LWxpbmstbW9kYWwuY29tcG9uZW50JztcblxuY29uc3QgcG9SaWNoVGV4dERlZmF1bHRDb2xvciA9ICcjMDAwMDAwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tcmljaC10ZXh0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tcmljaC10ZXh0LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBvUmljaFRleHRUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbG9yUGlja2VySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY29sb3JQaWNrZXJJbnB1dDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0b29sYmFyRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHJpY2hUZXh0SW1hZ2VNb2RhbDogUG9SaWNoVGV4dEltYWdlTW9kYWxDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChQb1JpY2hUZXh0TGlua01vZGFsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSByaWNoVGV4dExpbmtNb2RhbDogUG9SaWNoVGV4dExpbmtNb2RhbENvbXBvbmVudDtcblxuICBAT3V0cHV0KCdwLWNvbW1hbmQnKSBjb21tYW5kID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCB7IGNvbW1hbmQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xuXG4gIEBPdXRwdXQoJ3AtbW9kYWwnKSBtb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoJ3AtbGluay1lZGl0aW5nJykgbGlua0VkaXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICByZWFkb25seSBsaXRlcmFscyA9IHtcbiAgICAuLi5wb1JpY2hUZXh0TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKV1cbiAgfTtcblxuICBhbGlnbkJ1dHRvbnM6IEFycmF5PFBvUmljaFRleHRUb29sYmFyQnV0dG9uR3JvdXBJdGVtPiA9IFtcbiAgICB7XG4gICAgICBjb21tYW5kOiAnanVzdGlmeWxlZnQnLFxuICAgICAgaWNvbjogJ3BvLWljb24tYWxpZ24tbGVmdCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmxlZnQsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdEFsaWduQ29tbWFuZC5iaW5kKHRoaXMsICdqdXN0aWZ5bGVmdCcpLFxuICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdqdXN0aWZ5Y2VudGVyJyxcbiAgICAgIGljb246ICdwby1pY29uLWFsaWduLWNlbnRlcicsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmNlbnRlcixcbiAgICAgIGFjdGlvbjogdGhpcy5lbWl0QWxpZ25Db21tYW5kLmJpbmQodGhpcywgJ2p1c3RpZnljZW50ZXInKVxuICAgIH0sXG4gICAge1xuICAgICAgY29tbWFuZDogJ2p1c3RpZnlyaWdodCcsXG4gICAgICBpY29uOiAncG8taWNvbi1hbGlnbi1yaWdodCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLnJpZ2h0LFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRBbGlnbkNvbW1hbmQuYmluZCh0aGlzLCAnanVzdGlmeXJpZ2h0JylcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdqdXN0aWZ5ZnVsbCcsXG4gICAgICBpY29uOiAncG8taWNvbi1hbGlnbi1qdXN0aWZ5JyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuanVzdGlmeSxcbiAgICAgIGFjdGlvbjogdGhpcy5lbWl0QWxpZ25Db21tYW5kLmJpbmQodGhpcywgJ2p1c3RpZnlmdWxsJylcbiAgICB9XG4gIF07XG5cbiAgZm9ybWF0QnV0dG9uczogQXJyYXk8UG9SaWNoVGV4dFRvb2xiYXJCdXR0b25Hcm91cEl0ZW0+ID0gW1xuICAgIHtcbiAgICAgIGNvbW1hbmQ6ICdib2xkJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtYm9sZCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLmJvbGQsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdENvbW1hbmQuYmluZCh0aGlzLCAnYm9sZCcpXG4gICAgfSxcbiAgICB7XG4gICAgICBjb21tYW5kOiAnaXRhbGljJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtaXRhbGljJyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuaXRhbGljLFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRDb21tYW5kLmJpbmQodGhpcywgJ2l0YWxpYycpXG4gICAgfSxcbiAgICB7XG4gICAgICBjb21tYW5kOiAndW5kZXJsaW5lJyxcbiAgICAgIGljb246ICdwby1pY29uLXRleHQtdW5kZXJsaW5lJyxcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMudW5kZXJsaW5lLFxuICAgICAgYWN0aW9uOiB0aGlzLmVtaXRDb21tYW5kLmJpbmQodGhpcywgJ3VuZGVybGluZScpXG4gICAgfVxuICBdO1xuXG4gIGxpc3RCdXR0b25zOiBBcnJheTxQb1JpY2hUZXh0VG9vbGJhckJ1dHRvbkdyb3VwSXRlbT4gPSBbXG4gICAge1xuICAgICAgY29tbWFuZDogJ2luc2VydFVub3JkZXJlZExpc3QnLFxuICAgICAgaWNvbjogJ3BvLWljb24tbGlzdCcsXG4gICAgICB0b29sdGlwOiB0aGlzLmxpdGVyYWxzLnVub3JkZXJlZExpc3QsXG4gICAgICBhY3Rpb246IHRoaXMuZW1pdENvbW1hbmQuYmluZCh0aGlzLCAnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXG4gICAgfVxuICBdO1xuXG4gIGxpbmtCdXR0b25zOiBBcnJheTxQb1JpY2hUZXh0VG9vbGJhckJ1dHRvbkdyb3VwSXRlbT4gPSBbXG4gICAge1xuICAgICAgY29tbWFuZDogJ0NyZWF0ZWxpbmsnLFxuICAgICAgaWNvbjogJ3BvLWljb24tbGluaycsXG4gICAgICB0b29sdGlwOiBgJHt0aGlzLmxpdGVyYWxzLmluc2VydExpbmt9IChDdHJsICsgSylgLFxuICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnJpY2hUZXh0TGlua01vZGFsLm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkTGlua0VsZW1lbnQpXG4gICAgfVxuICBdO1xuXG4gIG1lZGlhQnV0dG9uczogQXJyYXk8UG9CdXR0b25Hcm91cEl0ZW0+ID0gW1xuICAgIHtcbiAgICAgIHRvb2x0aXA6IHRoaXMubGl0ZXJhbHMuaW5zZXJ0SW1hZ2UsXG4gICAgICBpY29uOiAncG8taWNvbi1waWN0dXJlJyxcbiAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5yaWNoVGV4dEltYWdlTW9kYWwub3Blbk1vZGFsKClcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW47XG4gIHByaXZhdGUgc2VsZWN0ZWRMaW5rRWxlbWVudDtcblxuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMudG9nZ2xlRGlzYWJsZUJ1dHRvbnModGhpcy5fcmVhZG9ubHkpO1xuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuXG4gIGdldCBpc0ludGVybmV0RXhwbG9yZXIoKSB7XG4gICAgcmV0dXJuIGlzSUUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZW1vdmVCdXR0b25Gb2N1cygpO1xuICAgIHRoaXMuc2V0Q29sb3JJbkNvbG9yUGlja2VyKHBvUmljaFRleHREZWZhdWx0Q29sb3IpO1xuICB9XG5cbiAgY2hhbmdlVGV4dENvbG9yKHZhbHVlKSB7XG4gICAgY29uc3QgY29tbWFuZCA9ICdmb3JlQ29sb3InO1xuXG4gICAgdGhpcy5jb21tYW5kLmVtaXQoeyBjb21tYW5kLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGVtaXRMaW5rRWRpdGluZyhpc0xpbmtFZGl0OiBib29sZWFuKSB7XG4gICAgdGhpcy5saW5rRWRpdGluZy5lbWl0KGlzTGlua0VkaXQpO1xuICB9XG5cbiAgc2VsZWN0ZWRMaW5rKHNlbGVjdGVkTGlua0VsZW1lbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTGlua0VsZW1lbnQgPSBzZWxlY3RlZExpbmtFbGVtZW50O1xuICB9XG5cbiAgc2V0QnV0dG9uc1N0YXRlcyhvYmo6IHsgY29tbWFuZHM6IEFycmF5PHN0cmluZz47IGhleENvbG9yOiBzdHJpbmcgfSkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5hbGlnbkJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gKGJ1dHRvbi5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyhidXR0b24uY29tbWFuZCkpKTtcbiAgICAgIHRoaXMuZm9ybWF0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiAoYnV0dG9uLnNlbGVjdGVkID0gb2JqLmNvbW1hbmRzLmluY2x1ZGVzKGJ1dHRvbi5jb21tYW5kKSkpO1xuICAgICAgdGhpcy5saXN0QnV0dG9uc1swXS5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyh0aGlzLmxpc3RCdXR0b25zWzBdLmNvbW1hbmQpO1xuICAgICAgdGhpcy5saW5rQnV0dG9uc1swXS5zZWxlY3RlZCA9IG9iai5jb21tYW5kcy5pbmNsdWRlcyh0aGlzLmxpbmtCdXR0b25zWzBdLmNvbW1hbmQpO1xuICAgICAgdGhpcy5zZXRDb2xvckluQ29sb3JQaWNrZXIob2JqLmhleENvbG9yKTtcbiAgICB9XG4gIH1cblxuICBzaG9ydGN1dFRyaWdnZXIoKSB7XG4gICAgdGhpcy5yaWNoVGV4dExpbmtNb2RhbC5vcGVuTW9kYWwodGhpcy5zZWxlY3RlZExpbmtFbGVtZW50KTtcbiAgfVxuXG4gIGVtaXRDb21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tbWFuZC5lbWl0KGNvbW1hbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0QWxpZ25Db21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbGlnbkJ1dHRvbnMuZmluZEluZGV4KGJ0biA9PiBidG4uY29tbWFuZCA9PT0gY29tbWFuZCk7XG5cbiAgICBpZiAodGhpcy5hbGlnbkJ1dHRvbnNbaW5kZXhdLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmFsaWduQnV0dG9uc1tpbmRleF0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1hbmQuZW1pdChjb21tYW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQnV0dG9uRm9jdXMoKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IHRoaXMudG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcblxuICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gYnV0dG9uLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbG9ySW5Db2xvclBpY2tlcihjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvclBpY2tlcklucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjb2xvcjtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRGlzYWJsZUJ1dHRvbnMoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsaWduQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiAoYnV0dG9uLmRpc2FibGVkID0gc3RhdGUpKTtcbiAgICB0aGlzLmZvcm1hdEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gKGJ1dHRvbi5kaXNhYmxlZCA9IHN0YXRlKSk7XG4gICAgdGhpcy5saXN0QnV0dG9uc1swXS5kaXNhYmxlZCA9IHN0YXRlO1xuICAgIHRoaXMubGlua0J1dHRvbnNbMF0uZGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB0aGlzLm1lZGlhQnV0dG9uc1swXS5kaXNhYmxlZCA9IHN0YXRlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXJcIiAjdG9vbGJhckVsZW1lbnQ+XG4gIDxkaXYgY2xhc3M9XCJwby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tYWxpZ25cIj5cbiAgICA8cG8tYnV0dG9uLWdyb3VwIHAtdG9nZ2xlPVwibXVsdGlwbGVcIiBbcC1zbWFsbF09XCJ0cnVlXCIgW3AtYnV0dG9uc109XCJmb3JtYXRCdXR0b25zXCI+IDwvcG8tYnV0dG9uLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIWlzSW50ZXJuZXRFeHBsb3JlclwiIGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItYnV0dG9uLWFsaWduXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWNvbG9yLXBpY2tlci1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJwby1idXR0b24gcG8tYnV0dG9uLWRlZmF1bHQgcG8tYnV0dG9uLXNtIHBvLXRleHQtZWxsaXBzaXMgcG8tcmljaC10ZXh0LXRvb2xiYXItY29sb3ItcGlja2VyLWJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgIFtwLXRvb2x0aXBdPVwibGl0ZXJhbHMudGV4dENvbG9yXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXRlcmFscy50ZXh0Q29sb3JcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjY29sb3JQaWNrZXJJbnB1dFxuICAgICAgICAgIGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItY29sb3ItcGlja2VyLWlucHV0XCJcbiAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUZXh0Q29sb3IoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGl0ZXJhbHMudGV4dENvbG9yXCJcbiAgICAgICAgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tcmljaC10ZXh0LXRvb2xiYXItYnV0dG9uLWFsaWduXCI+XG4gICAgPHBvLWJ1dHRvbi1ncm91cCBwLXRvZ2dsZT1cInNpbmdsZVwiIFtwLXNtYWxsXT1cInRydWVcIiBbcC1idXR0b25zXT1cImFsaWduQnV0dG9uc1wiPiA8L3BvLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWJ1dHRvbi1hbGlnblwiPlxuICAgIDxwby1idXR0b24tZ3JvdXAgcC10b2dnbGU9XCJzaW5nbGVcIiBbcC1zbWFsbF09XCJ0cnVlXCIgW3AtYnV0dG9uc109XCJsaXN0QnV0dG9uc1wiPiA8L3BvLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXJpY2gtdGV4dC10b29sYmFyLWJ1dHRvbi1hbGlnblwiPlxuICAgIDxwby1idXR0b24tZ3JvdXAgW3Atc21hbGxdPVwidHJ1ZVwiIFtwLWJ1dHRvbnNdPVwibGlua0J1dHRvbnNcIj4gPC9wby1idXR0b24tZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby1yaWNoLXRleHQtdG9vbGJhci1idXR0b24tYWxpZ25cIj5cbiAgICA8cG8tYnV0dG9uLWdyb3VwIFtwLXNtYWxsXT1cInRydWVcIiBbcC1idXR0b25zXT1cIm1lZGlhQnV0dG9uc1wiPiA8L3BvLWJ1dHRvbi1ncm91cD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPHBvLXJpY2gtdGV4dC1pbWFnZS1tb2RhbCAjcmljaFRleHRJbWFnZU1vZGFsIChwLWNvbW1hbmQpPVwiZW1pdENvbW1hbmQoJGV2ZW50KVwiPiA8L3BvLXJpY2gtdGV4dC1pbWFnZS1tb2RhbD5cblxuPHBvLXJpY2gtdGV4dC1saW5rLW1vZGFsXG4gICNyaWNoVGV4dExpbmtNb2RhbFxuICAocC1jb21tYW5kKT1cImVtaXRDb21tYW5kKCRldmVudClcIlxuICAocC1saW5rLWVkaXRpbmcpPVwiZW1pdExpbmtFZGl0aW5nKCRldmVudClcIlxuPlxuPC9wby1yaWNoLXRleHQtbGluay1tb2RhbD5cbiJdfQ==