valtech-components 4.0.942 → 4.0.944

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 (20) hide show
  1. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +3 -3
  2. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +3 -3
  3. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +3 -3
  4. package/esm2022/lib/components/organisms/comment-thread/comment-thread.component.mjs +280 -0
  5. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +3 -3
  6. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +3 -3
  7. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +3 -3
  8. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +3 -3
  9. package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +5 -11
  10. package/esm2022/lib/components/organisms/profile-view/profile-content.component.mjs +3 -3
  11. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +3 -3
  12. package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +3 -3
  13. package/esm2022/lib/version.mjs +2 -2
  14. package/esm2022/public-api.mjs +2 -1
  15. package/fesm2022/valtech-components.mjs +299 -31
  16. package/fesm2022/valtech-components.mjs.map +1 -1
  17. package/lib/components/organisms/comment-thread/comment-thread.component.d.ts +52 -0
  18. package/lib/version.d.ts +1 -1
  19. package/package.json +1 -1
  20. package/public-api.d.ts +1 -0
@@ -560,7 +560,7 @@ export class NotificationPreferencesViewComponent {
560
560
  </section>
561
561
  }
562
562
  </div>
563
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
563
+ `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}:host-context([data-menu=\"collapsed\"]) .page{@media (min-width: 1200px){max-width:900px}}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
564
564
  }
565
565
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationPreferencesViewComponent, decorators: [{
566
566
  type: Component,
@@ -684,8 +684,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
684
684
  </section>
685
685
  }
686
686
  </div>
687
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"] }]
687
+ `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}:host-context([data-menu=\"collapsed\"]) .page{@media (min-width: 1200px){max-width:900px}}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"] }]
688
688
  }], ctorParameters: () => [], propDecorators: { config: [{
689
689
  type: Input
690
690
  }] } });
691
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUs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QUFhOzs0RkErUjlGLG9DQUFvQztrQkFsU2hELFNBQVM7K0JBQ0UsbUNBQW1DLGNBQ2pDLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxZQUNoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0hUO3dEQXdMUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90b2dnbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdG9nZ2xlLWlucHV0L3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBFbmFibGVQdXNoUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VSZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5PVElGSUNBVElPTl9QUkVGRVJFTkNFU19WSUVXX0kxOE4gfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPZmZPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT3V0bGluZSxcbiAgcmVmcmVzaE91dGxpbmUsXG59KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuTm90aWZpY2F0aW9ucyc7XG5cbi8qKlxuICogRXN0YWRvcyBkZSBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMgcHVzaDpcbiAqICAtIGBpZGxlYDogICAgICAgICAgdG9nZ2xlIG9mZiwgc2luIG9wZXJhY2nDs24gZW4gY3Vyc28sIHNpbiBlcnJvcmVzXG4gKiAgLSBgZW5hYmxpbmdgOiAgICAgIHNlY3VlbmNpYSBkZSBhY3RpdmFjacOzbiBlbiBjdXJzbyAodG9nZ2xlIHNwaW5uZXIpXG4gKiAgLSBgZW5hYmxlZGA6ICAgICAgIHRvZG8gT0sgKG1hc3Rlcj10cnVlICsgcGVybWlzc2lvbj1ncmFudGVkICsgdG9rZW4gcmVnaXN0cmFkbylcbiAqICAtIGBkaXNhYmxpbmdgOiAgICAgZGVzYWN0aXZhY2nDs24gZW4gY3Vyc29cbiAqICAtIGBlcnJvcmA6ICAgICAgICAgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDihpIgbWVuc2FqZSArIGJvdMOzbiBcIlJlaW50ZW50YXJcIlxuICogIC0gYGJsb2NrZWRgOiAgICAgICBuYXZlZ2Fkb3IgZGVuZWfDsyBwZXJtaXNvcyDihpIgbWVuc2FqZSArIGPDs21vIGFycmVnbGFyXG4gKiAgLSBgdW5zdXBwb3J0ZWRgOiAgIG5hdmVnYWRvciBubyBzb3BvcnRhIEZDTSDihpIgbWVuc2FqZVxuICogIC0gYG5lZWRzLWluc3RhbGxgOiBpT1Mgc2luIHN0YW5kYWxvbmUg4oaSIGluc3RydWNjaW9uZXMgZGUgaW5zdGFsYWNpw7NuIFBXQVxuICovXG50eXBlIFVpU3RhdGUgPSAnaWRsZScgfCAnZW5hYmxpbmcnIHwgJ2VuYWJsZWQnIHwgJ2Rpc2FibGluZycgfCAnZXJyb3InIHwgJ2Jsb2NrZWQnIHwgJ3Vuc3VwcG9ydGVkJyB8ICduZWVkcy1pbnN0YWxsJztcblxuLyoqXG4gKiBgdmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3YCDigJQgKipwcmVmZXJlbmNpYXMgZGUgbm90aWZpY2FjaW9uZXMgcHVzaCoqXG4gKiAoRkNNKSBmdWxsLWZlYXR1cmUgYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsXG4gKiBwcm9jZXNvIGRlIEFEUi0wMjEuXG4gKlxuICogU2VwYXJhZGEgZGUgYHZhbC1ub3RpZmljYXRpb25zLXZpZXdgIChlbCBpbmJveCAvIGZlZWQpLiBBcXXDrSBlbCB1c2VyICoqYWN0aXZhIG9cbiAqIGRlc2FjdGl2YSoqIGxhcyBub3RpZmljYWNpb25lcyBwdXNoIGVuIGVzdGUgZGlzcG9zaXRpdm8uXG4gKlxuICogVVggc2ltcGxpZmljYWRvOiBVTiBzb2xvIHRvZ2dsZSBxdWUgZWplY3V0YSB0b2RhIGxhIHNlY3VlbmNpYSAocGVkaXIgcGVybWlzbyDihpJcbiAqIFNXIHJlYWR5IOKGkiBnZXRUb2tlbiDihpIgcmVnaXN0cmFyIGVuIGJhY2tlbmQg4oaSIHNldCBtYXN0ZXIgcHJlZikgdsOtYVxuICogYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLiBFbCByZWdpc3RybyBkZWwgZGV2aWNlIGVuIGVsIGJhY2tlbmQgdmEgY29tb1xuICogY2FsbGJhY2sgKGxhIGxpYiBubyBkZXBlbmRlIGRlIGBBdXRoU2VydmljZWAgcGFyYSBldml0YXIgY2ljbG9zKS4gTWVuc2FqZXNcbiAqIGNvbnRleHR1YWxlcyB5IGJvdMOzbiBcIlJlaW50ZW50YXJcIiBhcGFyZWNlbiBzb2xvIGN1YW5kbyBhcGxpY2FuLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCDihpIgZnVuY2lvbmEgc2luIHJvdXRlciAoZW1iZWJpZGEgLyBTdG9yeWJvb2spLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uSWNvbiwgVG9nZ2xlSW5wdXRDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgRGlzcGxheUNvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIFRleHRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHBhZ2VUaXRsZSgpIH1cIiAvPlxuICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiBwYWdlRGVzY3JpcHRpb24oKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ2lvc0luc3RhbGxUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbEhpbnQnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG9sIGNsYXNzPVwiaW5zdGFsbC1zdGVwc1wiPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwMScpIH19PC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDInKSB9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAzJykgfX08L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwNCcpIH19PC9saT5cbiAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93X19pY29uXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm5vdGlmaWNhdGlvbnMtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc2ltcGxlVGl0bGUnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoYnVzeUxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWYtcm93X19idXN5XCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fY29udHJvbFwiPlxuICAgICAgICAgICAgPHZhbC10b2dnbGUtaW5wdXQgW3Byb3BzXT1cInRvZ2dsZVByb3BzKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKGNvbnRleHRNZXNzYWdlKCk7IGFzIG1zZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydFwiIFtjbGFzc109XCInYWxlcnQtLScgKyBhbGVydFZhcmlhbnQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImFsZXJ0SWNvbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IG1zZyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc3RhdGUoKSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblJldHJ5KClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93RGV0YWlscyAmJiBzdGF0ZSgpICE9PSAnbmVlZHMtaW5zdGFsbCcgJiYgc3RhdGUoKSAhPT0gJ3Vuc3VwcG9ydGVkJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZURldGFpbHMoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgc2hvd0RldGFpbHMoKSA/IHR0KCdkZXRhaWxzSGlkZScpIDogdHQoJ2RldGFpbHNTaG93JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic2hvd0RldGFpbHMoKSA/ICdjaGV2cm9uLXVwLW91dGxpbmUnIDogJ2NoZXZyb24tZG93bi1vdXRsaW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChzaG93RGV0YWlscygpKSB7XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RldGFpbHNUb2tlbicpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQgY2xhc3M9XCJkZXRhaWxzX190b2tlblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdG9rZW5QcmV2aWV3KCkgPz8gdHQoJ2RldGFpbHNOb25lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICBAaWYgKGN1cnJlbnRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXRhaWxzX19jb3B5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9rZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHR0KCdkZXRhaWxzQ29weScpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkaWFnbm9zdGljc1Blcm1pc3Npb24nKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgPGRkPnt7IHBlcm1pc3Npb24oKSB9fTwvZGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkaWFnbm9zdGljc1N1cHBvcnRlZCcpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQ+e3sgaXNTdXBwb3J0ZWQoKSA/ICfinJMnIDogJ+KclycgfX08L2RkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWJvZHkge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuXG4gICAgICAubm90aWYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0NHB4IDFmciBhdXRvO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19pY29uIHtcbiAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgIGhlaWdodDogNDRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2ljb24gaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2J1c3kge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19jb250cm9sIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5hbGVydCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS40NTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydCBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0td2FybmluZyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZy1zaGFkZSwgI2M3OWUwOCk7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLWRhbmdlciBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlLCAjY2YzYzRmKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0taW5mbyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjNmI2YjZiKTtcbiAgICAgIH1cblxuICAgICAgLmluc3RhbGwtc3RlcHMge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgfVxuICAgICAgLmluc3RhbGwtc3RlcHMgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIH1cblxuICAgICAgLmRldGFpbHMtdG9nZ2xlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzLXRvZ2dsZSBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzIHtcbiAgICAgICAgbWFyZ2luOiAxMnB4IDAgMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNDBweCAxZnI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IGR0IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cgZGQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3Rva2VuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX2NvcHkge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMDA1NGU5KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19jb3B5OmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gIHByaXZhdGUgcGFnZVJlZnJlc2ggPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgcHJlZnMgPSBpbmplY3QoUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgLy8gYEFjdGl2YXRlZFJvdXRlYCBvcGNpb25hbCDihpIgbGEgdmlzdGEgZnVuY2lvbmEgZW1iZWJpZGEgLyBlbiBTdG9yeWJvb2sgc2luXG4gIC8vIHJvdXRlciAoc29sbyBsbyB1c2EgcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnIGNvbW8gZmFsbGJhY2spLlxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZ2AgKHBvYmxhZG8gcG9yXG4gICAqIGBwcm92aWRlVmFsdGVjaE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUm91dGVzYCkuIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvblxuICAgKiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnLCAnb25QdXNoRW5hYmxlZCcgfCAnb25QdXNoRGlzYWJsZWQnPj4gJlxuICAgICAgUGljazxOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcsICdvblB1c2hFbmFibGVkJyB8ICdvblB1c2hEaXNhYmxlZCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZyddID8/XG4gICAgICB7fSkgYXMgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0RldGFpbHM6IG1lcmdlZC5zaG93RGV0YWlscyA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBvblB1c2hFbmFibGVkOiBtZXJnZWQub25QdXNoRW5hYmxlZCxcbiAgICAgIG9uUHVzaERpc2FibGVkOiBtZXJnZWQub25QdXNoRGlzYWJsZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIC8qKiBPcGVyYWNpw7NuIGVuIGN1cnNvIChnb2JpZXJuYSBzcGlubmVyIGRlbCB0b2dnbGUgKyBsYWJlbCBcIkFjdGl2YW5kb+KAplwiKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYnVzeSA9IHNpZ25hbDxudWxsIHwgJ2VuYWJsaW5nJyB8ICdkaXNhYmxpbmcnPihudWxsKTtcbiAgLyoqIFRydWUgc2kgZWwgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDigJQgZ29iaWVybmEgZXN0YWRvIGBlcnJvcmAgKyByZXRyeSBidXR0b24uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSByZS1vYnRpZW5lIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kIChubyBhZmVjdGEgbGEgVUkpLiAqL1xuICBwcml2YXRlIF9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAvKiogVG9nZ2xlIGRlbCBleHBhbmQgZGUgZGV0YWxsZXMgdMOpY25pY29zLiAqL1xuICByZWFkb25seSBzaG93RGV0YWlscyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbiA9IHNpZ25hbDxOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGU+KCdkZWZhdWx0Jyk7XG4gIHJlYWRvbmx5IGlzU3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFRva2VuID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBuZWVkc0lPU0luc3RhbGwgPSBzaWduYWwodGhpcy5kZXRlY3ROZWVkc0lPU0luc3RhbGwoKSk7XG5cbiAgLyoqIEZvcm1Db250cm9sIGRlbCB0b2dnbGUgKHN5bmMtZWFkbyBjb24gYGlzRW5hYmxlZGAgdmlhIGVmZmVjdCkuICovXG4gIHJlYWRvbmx5IHRvZ2dsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqIEhhbmRsZXIgZGVsIGxpc3RlbmVyIGBmb2N1c2Ag4oCUIHJlZmVyZW5jaWEgZ3VhcmRhZGEgcGFyYSBwb2RlciByZW1vdmVybG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb25XaW5kb3dGb2N1cyA9ICgpID0+IHRoaXMuc2NoZWR1bGVCcm93c2VyUmVmcmVzaCgpO1xuICAvKiogVGltZXIgZGVsIGRlYm91bmNlIGRlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSBmb2N1c0RlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBWZW50YW5hIGRlIGRlYm91bmNlIChtcykgcGFyYSBlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBGT0NVU19ERUJPVU5DRV9NUyA9IDUwMDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRXN0YWRvIGRlcml2YWRvXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZWZlY3Rpdm8gZGVsIHRvZ2dsZTogXCJlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvXCIuXG4gICAqXG4gICAqIFNlIGRlcml2YSBTT0xPIGRlIGxhIGRlY2lzacOzbiBkZWwgdXN1YXJpbyAoYG1hc3RlcmApIHkgZGVsIHBlcm1pc28gZGVsIFNPXG4gICAqIChgcGVybWlzc2lvbmApLiBFbCB0b2tlbiBGQ00gTk8gZm9ybWEgcGFydGUgZGVsIGVzdGFkbyBkZSBVSTogdml2ZSBlblxuICAgKiBtZW1vcmlhLCBzZSBwaWVyZGUgZW4gY2FkYSByZWNhcmdhL3N1c3BlbnNpw7NuIGRlIGxhIFBXQSB5IHByb2R1Y2lyw61hIGZsaWNrZXIuXG4gICAqIFNpIGZhbHRhIHRva2VuIGNvbiBgbWFzdGVyICYmIGdyYW50ZWRgLCBlcyB1biBkZXRhbGxlIHJlcGFyYWJsZSBlblxuICAgKiBiYWNrZ3JvdW5kICh2ZXIgYHJlcGFpclRva2VuSWZOZWVkZWRgKSwgbm8gdW4gY2FtYmlvIGRlbCB0b2dnbGUuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSAmJiB0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ2dyYW50ZWQnKTtcblxuICByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkPFVpU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5uZWVkc0lPU0luc3RhbGwoKSkgcmV0dXJuICduZWVkcy1pbnN0YWxsJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcgfHwgIXRoaXMuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgLy8gaU9TIHN0YW5kYWxvbmUgYcO6biBwdWVkZSBkYXIgaXNTdXBwb3J0ZWQgZmFsc2UgdGVtcHJhbm8gYW50ZXMgZGUgaW5pdCDigJRcbiAgICAgIC8vIHNvbG8gYmxvcXVlYW1vcyBzaSBlbCBicm93c2VyIGV4cGzDrWNpdGFtZW50ZSBubyBzb3BvcnRhIEFQSXMuXG4gICAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICBjb25zdCBidXN5ID0gdGhpcy5fYnVzeSgpO1xuICAgIGlmIChidXN5ID09PSAnZW5hYmxpbmcnKSByZXR1cm4gJ2VuYWJsaW5nJztcbiAgICBpZiAoYnVzeSA9PT0gJ2Rpc2FibGluZycpIHJldHVybiAnZGlzYWJsaW5nJztcbiAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuICdlbmFibGVkJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICdkZW5pZWQnKSByZXR1cm4gJ2Jsb2NrZWQnO1xuICAgIGlmICh0aGlzLl9sYXN0RmFpbGVkKCkpIHJldHVybiAnZXJyb3InO1xuICAgIHJldHVybiAnaWRsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJ1c3lMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZW5hYmxpbmcnKSByZXR1cm4gdGhpcy50dCgnZW5hYmxpbmcnKTtcbiAgICBpZiAocyA9PT0gJ2Rpc2FibGluZycpIHJldHVybiB0aGlzLnR0KCdkaXNhYmxpbmcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKCkpIHtcbiAgICAgIGNhc2UgJ3Vuc3VwcG9ydGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ3Blcm1pc3Npb25VbnN1cHBvcnRlZCcpO1xuICAgICAgY2FzZSAnYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdwZXJtaXNzaW9uRGVuaWVkSW5mbycpO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgnZXJyb3JHZW5lcmljJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0VmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZXJyb3InIHx8IHMgPT09ICdibG9ja2VkJykgcmV0dXJuICd3YXJuaW5nJztcbiAgICBpZiAocyA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICdkYW5nZXInO1xuICAgIHJldHVybiAnaW5mbyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0SWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ2Nsb3NlLWNpcmNsZS1vdXRsaW5lJztcbiAgICByZXR1cm4gJ2FsZXJ0LWNpcmNsZS1vdXRsaW5lJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG9nZ2xlUHJvcHMgPSBjb21wdXRlZDxUb2dnbGVJbnB1dE1ldGFkYXRhPigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMudG9nZ2xlQ29udHJvbCxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOlxuICAgICAgdGhpcy5fYnVzeSgpICE9PSBudWxsIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICd1bnN1cHBvcnRlZCcgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ25lZWRzLWluc3RhbGwnIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICdibG9ja2VkJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyZXRyeUN0YScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBpY29uOiB7IG5hbWU6ICdyZWZyZXNoLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgc3RhdGU6IHRoaXMuX2J1c3koKSAhPT0gbnVsbCA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0b2tlblByZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKCF0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7dC5zbGljZSgwLCAyMil94oCmJHt0LnNsaWNlKC02KX1gO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgTk9USUZJQ0FUSU9OX1BSRUZFUkVOQ0VTX1ZJRVdfSTE4Tik7XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG5cbiAgICB2b2lkIHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuXG4gICAgLy8gUmUtYXBsaWNhciBoZWFkZXIgZW4gY2FtYmlvIGRlIGlkaW9tYS5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIFN5bmMgRm9ybUNvbnRyb2wg4oaQ4oaSIGVzdGFkbyBlZmVjdGl2by4gQ3VhbmRvIGVsIGVzdGFkbyBjYW1iaWEgKGNhbWJpbyBkZVxuICAgIC8vIHBlcm1pc3Npb24gcG9yIGVsIGJyb3dzZXIsIG8gc25hcHNob3QgRmlyZXN0b3JlIGRlIGBtYXN0ZXJgKSwgZWwgdG9nZ2xlIHNlXG4gICAgLy8gcmUtYWxpbmVhIGNvbiBsYSByZWFsaWRhZC5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVEU6IHNlIGlnbm9yYW4gbG9zIGNhbWJpb3MgbWllbnRyYXMgaGF5IHVuYSBvcGVyYWNpw7NuIGVuIGN1cnNvXG4gICAgLy8gKGBfYnVzeSgpICE9PSBudWxsYCkuIER1cmFudGUgYG9uRW5hYmxlYC9gb25EaXNhYmxlYCBsYXMgc2XDsWFsZXMgZnVlbnRlIHNlXG4gICAgLy8gYWN0dWFsaXphbiBlbiBtb21lbnRvcyBkaXN0aW50b3MgeSBwcm9kdWNpcsOtYW4gZXN0YWRvcyBpbnRlcm1lZGlvcyDihpJcbiAgICAvLyBmbGlja2VyIHZpc2libGUuIEVsIHRvZ2dsZSBzZSByZS1hbGluZWEgVU5BIHNvbGEgdmV6IGVuIGVsIGBmaW5hbGx5YC5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVmZiA9IHRoaXMuaXNFbmFibGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlQ29udHJvbC52YWx1ZSAhPT0gZWZmKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVDb250cm9sLnNldFZhbHVlKGVmZiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEludGVyY2VwdGFyIGNsaWNrIGRlbCB1c2VyOiBlbCB0b2dnbGUgeWEgY2FtYmnDsyB2aXN1YWxtZW50ZSwgZWplY3V0YXJcbiAgICAvLyBsYSBhY2Npw7NuIGNvcnJlc3BvbmRpZW50ZS5cbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgIGlmICh2ICYmICF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkVuYWJsZSgpO1xuICAgICAgfSBlbHNlIGlmICghdiAmJiB0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERldGVjdGFyIHJlZ3Jlc28gYSBsYSBwZXN0YcOxYSDigJQgZWwgdXNlciBwdWRvIGhhYmVyIGNhbWJpYWRvIHBlcm1pc29zXG4gICAgLy8gZGVzZGUgbGEgY29uZmlnIGRlbCBicm93c2VyLiBFbCByZWZyZXNoIHZhIGNvbiBkZWJvdW5jZSBwYXJhIG5vXG4gICAgLy8gZGlzcGFyYXJzZSBlbiByw6FmYWdhcyAoZW4gUFdBIG1vYmlsZSBgZm9jdXNgIHNhbHRhIGNvbiBjYWRhIGNhbWJpbyBkZVxuICAgIC8vIGFwcCAvIGFwYXJpY2nDs24gZGVsIHRlY2xhZG8pLiBFbCBsaXN0ZW5lciBzZSByZW11ZXZlIGVuIG5nT25EZXN0cm95LlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhci4gQXVucXVlIGVzdGEgdmlzdGEgbm8gbXVlc3RyYSB1bmFcbiAgICogbGlzdGEgcmVtb3RhLCBzw60gcmVmbGVqYSBlc3RhZG8gbXV0YWJsZSBkZWwgYnJvd3NlciAocGVybWlzbywgdG9rZW4sXG4gICAqIHNvcG9ydGUgRkNNKSBxdWUgcHVlZGUgY2FtYmlhciBmdWVyYSBkZSBsYSBhcHAg4oCUIGVsIHJlZnJlc2ggcmUtZXZhbMO6YSB0b2RvLlxuICAgKlxuICAgKiBTZSB1c2EgYG5nT25Jbml0YC9gbmdPbkRlc3Ryb3lgIChOTyBgaW9uVmlld1dpbGxFbnRlcmApIHBvcnF1ZVxuICAgKiBgdmFsLXBhZ2Utd3JhcHBlcmAgdXNhIGA8cm91dGVyLW91dGxldD5gIHBsYW5vIOKAlCBsb3MgaG9va3MgYGlvblZpZXcqYCBzb2xvXG4gICAqIGRpc3BhcmFuIGRlbnRybyBkZSBgPGlvbi1yb3V0ZXItb3V0bGV0PmAuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVJlZnJlc2gudW5yZWdpc3RlcigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWZyZXNjYSBlbCBlc3RhZG8gZGVsIGJyb3dzZXIgY29uIGRlYm91bmNlIOKAlCBldml0YSByw6FmYWdhcyBkZSBgZm9jdXNgLiAqL1xuICBwcml2YXRlIHNjaGVkdWxlQnJvd3NlclJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgdm9pZCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICB9LCB0aGlzLkZPQ1VTX0RFQk9VTkNFX01TKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24uXG4gICAqXG4gICAqIFRvZGEgbGEgbWVjw6FuaWNhIChwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gY29uIHJldHJ5IOKGkiB3YXRjaGRvZyBkZVxuICAgKiBhdXRvLXJlbG9hZCkgdml2ZSBlbiBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAgZGUgbGEgbGliLiBFbCBwYXNvIGRlXG4gICAqIHJlZ2lzdHJvIGRlbCBkZXZpY2UgZW4gZWwgYmFja2VuZCBzZSBwYXNhIGNvbW8gY2FsbGJhY2sgKGByZWdpc3RlckRldmljZWApXG4gICAqIHBvcnF1ZSBsYSBsaWIgbm8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW4gY3JlYXIgdW4gY2ljbG8uXG4gICAqXG4gICAqIGBlbmFibGUoKWAgbm8gaGFjZSB0aHJvdzogcmVzdWVsdmUgY29uIHVuIGBFbmFibGVQdXNoUmVzdWx0YCBkZXNjcmlwdGl2by5cbiAgICovXG4gIGFzeW5jIG9uRW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdlbmFibGluZycpO1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IEVuYWJsZVB1c2hSZXN1bHQgPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5lbmFibGUoe1xuICAgICAgICByZWdpc3RlckRldmljZTogdG9rZW4gPT4gdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgIC8vIFBlcnNpc3RpciBmbGFnIG1hc3RlciBzaSBhw7puIG5vIGVzdGFiYSBhY3Rpdm8uXG4gICAgICAgIGlmICghdGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByZWZzLnNldE5vdGlmaWNhdGlvbnNNYXN0ZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlbmFibGVTdWNjZXNzJyksXG4gICAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25QdXNoRW5hYmxlZD8uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICd0aW1lb3V0JyAmJiByZXN1bHQucmVsb2FkZWQpIHtcbiAgICAgICAgLy8gTGEgbGliIGRpc3BhcsOzIGVsIGF1dG8tcmVsb2FkIOKAlCBsYSBww6FnaW5hIGVzdMOhIHBvciByZWNhcmdhcnNlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZW5pZWQgLyB1bnN1cHBvcnRlZCAvIGVycm9yIC8gdGltZW91dCBzaW4gcmVsb2FkIOKGkiBmYWxsbyByZWN1cGVyYWJsZS5cbiAgICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gYGVuYWJsZSgpYCBubyBoYWNlIHRocm93LCBwZXJvIGVsIGNhbGxiYWNrIGRlIHJlZ2lzdHJvIHPDrSBwdWVkZS5cbiAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gw5puaWNvIHJlZnJlc2ggZmluYWw6IHJlLWFsaW5lYSBlbCB0b2dnbGUgVU5BIHNvbGEgdmV6IGNvbiBlbCBlc3RhZG8gcmVhbC5cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgICAgdGhpcy5fYnVzeS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdkaXNhYmxpbmcnKTtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRoLmRpc2FibGVOb3RpZmljYXRpb25zKCk7XG4gICAgICBpZiAodGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVmcy5zZXROb3RpZmljYXRpb25zTWFzdGVyKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Rpc2FibGVTdWNjZXNzJyksXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vblB1c2hEaXNhYmxlZD8uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgICB0aGlzLl9idXN5LnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVpbnRlbnRhciBsYSBzZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24sIHNpbiBpbXBvcnRhciBlbCBlc3RhZG8gYWN0dWFsLiAqL1xuICBhc3luYyBvblJldHJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLm9uRW5hYmxlKCk7XG4gIH1cblxuICB0b2dnbGVEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RldGFpbHMudXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgYXN5bmMgY29weVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRva2VuKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudHQoJ2RldGFpbHNDb3BpZWQnKSwgY29sb3I6ICdkYXJrJyB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENsaXBib2FyZCBBUEkgbm8gZGlzcG9uaWJsZS9kZW5lZ2FkYSDigJQgZmFsbGJhY2sgc2lsZW5jaW9zbywgc2luIHRvYXN0IGRlIGVycm9yLlxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YWRvc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hCcm93c2VyU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1N1cHBvcnRlZC5zZXQoYXdhaXQgdGhpcy5tZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSk7XG4gICAgdGhpcy5wZXJtaXNzaW9uLnNldCh0aGlzLmF1dGguZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCkpO1xuICAgIHRoaXMuY3VycmVudFRva2VuLnNldCh0aGlzLm1lc3NhZ2luZy5jdXJyZW50VG9rZW4gPz8gbnVsbCk7XG4gICAgdm9pZCB0aGlzLnJlcGFpclRva2VuSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBhcmEgZWwgdG9rZW4gRkNNIGVuIGJhY2tncm91bmQuXG4gICAqXG4gICAqIFNpIGVsIHVzdWFyaW8gdGllbmUgcHVzaCBhY3Rpdm8gKGBtYXN0ZXIgJiYgZ3JhbnRlZGApIHBlcm8gbm8gaGF5IHRva2VuIGVuXG4gICAqIG1lbW9yaWEg4oCUIGNhc28gdMOtcGljbyB0cmFzIHVuIGNvbGQgc3RhcnQgZGUgbGEgUFdBIOKAlCByZS1vYnRlbmVtb3MgZWwgdG9rZW5cbiAgICogeSByZS1yZWdpc3RyYW1vcyBlbCBkZXZpY2Ugc2luIHRvY2FyIGVsIHRvZ2dsZSBuaSBtb3N0cmFyIHVuIGVycm9yXG4gICAqIGFsYXJtaXN0YS4gRWwgdG9rZW4gZXMgdW4gZGV0YWxsZSBkZSBpbXBsZW1lbnRhY2nDs24gcmVwYXJhYmxlLCBubyBwYXJ0ZSBkZWxcbiAgICogZXN0YWRvIGRlIFVJICh2ZXIgYGlzRW5hYmxlZGApLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXBhaXJUb2tlbklmTmVlZGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICBpZiAodGhpcy5fcmVwYWlyaW5nVG9rZW4pIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4oKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fcmVwYWlyaW5nVG9rZW4gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2V0KHRva2VuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJlcGFyYWNpw7NuIGJlc3QtZWZmb3J0OiBubyBkZWdyYWRhbW9zIGVsIHRvZ2dsZSBuaSBtb3N0cmFtb3MgZXJyb3IuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlcGFpcmluZ1Rva2VuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGlPUyBicm93c2VyIHNpbiBlc3RhciBpbnN0YWxhZG8gY29tbyBQV0Eg4oCUIHB1c2ggd2ViIG5vIGRpc3BvbmlibGUuXG4gICAqIEFwbGljYSBhIFNhZmFyaSB5IGEgRWRnZS9DaHJvbWUvRmlyZWZveCBlbiBpT1MgKHRvZG9zIFdlYktpdCBwb3IgbWFuZGF0byBBcHBsZSkuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdE5lZWRzSU9TSW5zdGFsbCgpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuICAgIGNvbnN0IGlzSU9TID0gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodWEpO1xuICAgIGlmICghaXNJT1MpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc1N0YW5kYWxvbmUgPVxuICAgICAgd2luZG93Lm1hdGNoTWVkaWE/LignKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzIHx8XG4gICAgICAobmF2aWdhdG9yIGFzIHVua25vd24gYXMgeyBzdGFuZGFsb25lPzogYm9vbGVhbiB9KS5zdGFuZGFsb25lID09PSB0cnVlO1xuICAgIHJldHVybiAhaXNTdGFuZGFsb25lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
691
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUs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QUFhOzs0RkF1UzlGLG9DQUFvQztrQkExU2hELFNBQVM7K0JBQ0UsbUNBQW1DLGNBQ2pDLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxZQUNoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0hUO3dEQWdNUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90b2dnbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdG9nZ2xlLWlucHV0L3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBFbmFibGVQdXNoUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VSZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5PVElGSUNBVElPTl9QUkVGRVJFTkNFU19WSUVXX0kxOE4gfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPZmZPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT3V0bGluZSxcbiAgcmVmcmVzaE91dGxpbmUsXG59KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuTm90aWZpY2F0aW9ucyc7XG5cbi8qKlxuICogRXN0YWRvcyBkZSBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMgcHVzaDpcbiAqICAtIGBpZGxlYDogICAgICAgICAgdG9nZ2xlIG9mZiwgc2luIG9wZXJhY2nDs24gZW4gY3Vyc28sIHNpbiBlcnJvcmVzXG4gKiAgLSBgZW5hYmxpbmdgOiAgICAgIHNlY3VlbmNpYSBkZSBhY3RpdmFjacOzbiBlbiBjdXJzbyAodG9nZ2xlIHNwaW5uZXIpXG4gKiAgLSBgZW5hYmxlZGA6ICAgICAgIHRvZG8gT0sgKG1hc3Rlcj10cnVlICsgcGVybWlzc2lvbj1ncmFudGVkICsgdG9rZW4gcmVnaXN0cmFkbylcbiAqICAtIGBkaXNhYmxpbmdgOiAgICAgZGVzYWN0aXZhY2nDs24gZW4gY3Vyc29cbiAqICAtIGBlcnJvcmA6ICAgICAgICAgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDihpIgbWVuc2FqZSArIGJvdMOzbiBcIlJlaW50ZW50YXJcIlxuICogIC0gYGJsb2NrZWRgOiAgICAgICBuYXZlZ2Fkb3IgZGVuZWfDsyBwZXJtaXNvcyDihpIgbWVuc2FqZSArIGPDs21vIGFycmVnbGFyXG4gKiAgLSBgdW5zdXBwb3J0ZWRgOiAgIG5hdmVnYWRvciBubyBzb3BvcnRhIEZDTSDihpIgbWVuc2FqZVxuICogIC0gYG5lZWRzLWluc3RhbGxgOiBpT1Mgc2luIHN0YW5kYWxvbmUg4oaSIGluc3RydWNjaW9uZXMgZGUgaW5zdGFsYWNpw7NuIFBXQVxuICovXG50eXBlIFVpU3RhdGUgPSAnaWRsZScgfCAnZW5hYmxpbmcnIHwgJ2VuYWJsZWQnIHwgJ2Rpc2FibGluZycgfCAnZXJyb3InIHwgJ2Jsb2NrZWQnIHwgJ3Vuc3VwcG9ydGVkJyB8ICduZWVkcy1pbnN0YWxsJztcblxuLyoqXG4gKiBgdmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3YCDigJQgKipwcmVmZXJlbmNpYXMgZGUgbm90aWZpY2FjaW9uZXMgcHVzaCoqXG4gKiAoRkNNKSBmdWxsLWZlYXR1cmUgYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsXG4gKiBwcm9jZXNvIGRlIEFEUi0wMjEuXG4gKlxuICogU2VwYXJhZGEgZGUgYHZhbC1ub3RpZmljYXRpb25zLXZpZXdgIChlbCBpbmJveCAvIGZlZWQpLiBBcXXDrSBlbCB1c2VyICoqYWN0aXZhIG9cbiAqIGRlc2FjdGl2YSoqIGxhcyBub3RpZmljYWNpb25lcyBwdXNoIGVuIGVzdGUgZGlzcG9zaXRpdm8uXG4gKlxuICogVVggc2ltcGxpZmljYWRvOiBVTiBzb2xvIHRvZ2dsZSBxdWUgZWplY3V0YSB0b2RhIGxhIHNlY3VlbmNpYSAocGVkaXIgcGVybWlzbyDihpJcbiAqIFNXIHJlYWR5IOKGkiBnZXRUb2tlbiDihpIgcmVnaXN0cmFyIGVuIGJhY2tlbmQg4oaSIHNldCBtYXN0ZXIgcHJlZikgdsOtYVxuICogYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLiBFbCByZWdpc3RybyBkZWwgZGV2aWNlIGVuIGVsIGJhY2tlbmQgdmEgY29tb1xuICogY2FsbGJhY2sgKGxhIGxpYiBubyBkZXBlbmRlIGRlIGBBdXRoU2VydmljZWAgcGFyYSBldml0YXIgY2ljbG9zKS4gTWVuc2FqZXNcbiAqIGNvbnRleHR1YWxlcyB5IGJvdMOzbiBcIlJlaW50ZW50YXJcIiBhcGFyZWNlbiBzb2xvIGN1YW5kbyBhcGxpY2FuLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCDihpIgZnVuY2lvbmEgc2luIHJvdXRlciAoZW1iZWJpZGEgLyBTdG9yeWJvb2spLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uSWNvbiwgVG9nZ2xlSW5wdXRDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgRGlzcGxheUNvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIFRleHRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHBhZ2VUaXRsZSgpIH1cIiAvPlxuICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiBwYWdlRGVzY3JpcHRpb24oKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ2lvc0luc3RhbGxUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbEhpbnQnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG9sIGNsYXNzPVwiaW5zdGFsbC1zdGVwc1wiPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwMScpIH19PC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDInKSB9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAzJykgfX08L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwNCcpIH19PC9saT5cbiAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93X19pY29uXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm5vdGlmaWNhdGlvbnMtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc2ltcGxlVGl0bGUnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoYnVzeUxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWYtcm93X19idXN5XCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fY29udHJvbFwiPlxuICAgICAgICAgICAgPHZhbC10b2dnbGUtaW5wdXQgW3Byb3BzXT1cInRvZ2dsZVByb3BzKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKGNvbnRleHRNZXNzYWdlKCk7IGFzIG1zZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydFwiIFtjbGFzc109XCInYWxlcnQtLScgKyBhbGVydFZhcmlhbnQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImFsZXJ0SWNvbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IG1zZyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc3RhdGUoKSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblJldHJ5KClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93RGV0YWlscyAmJiBzdGF0ZSgpICE9PSAnbmVlZHMtaW5zdGFsbCcgJiYgc3RhdGUoKSAhPT0gJ3Vuc3VwcG9ydGVkJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZURldGFpbHMoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgc2hvd0RldGFpbHMoKSA/IHR0KCdkZXRhaWxzSGlkZScpIDogdHQoJ2RldGFpbHNTaG93JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic2hvd0RldGFpbHMoKSA/ICdjaGV2cm9uLXVwLW91dGxpbmUnIDogJ2NoZXZyb24tZG93bi1vdXRsaW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChzaG93RGV0YWlscygpKSB7XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RldGFpbHNUb2tlbicpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQgY2xhc3M9XCJkZXRhaWxzX190b2tlblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdG9rZW5QcmV2aWV3KCkgPz8gdHQoJ2RldGFpbHNOb25lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICBAaWYgKGN1cnJlbnRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXRhaWxzX19jb3B5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9rZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHR0KCdkZXRhaWxzQ29weScpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkaWFnbm9zdGljc1Blcm1pc3Npb24nKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgPGRkPnt7IHBlcm1pc3Npb24oKSB9fTwvZGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkaWFnbm9zdGljc1N1cHBvcnRlZCcpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQ+e3sgaXNTdXBwb3J0ZWQoKSA/ICfinJMnIDogJ+KclycgfX08L2RkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cblxuICAgICAgLyogU2VndW5kbyBhbmNobywgZGVza3RvcCBjb24gZWwgcmFpbCByZXRyYcOtZG8uIFZlciBzZXR0aW5ncy1odWIgcGFyYSBsYVxuICAgICAgICAgZXhwbGljYWNpw7NuIGNvbXBsZXRhIGRlbCBtZWNhbmlzbW8uICovXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLW1lbnU9J2NvbGxhcHNlZCddKSAucGFnZSB7XG4gICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uICsgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cblxuICAgICAgLm5vdGlmLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDRweCAxZnIgYXV0bztcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19faWNvbiB7XG4gICAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19pY29uIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19idXN5IHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fY29udHJvbCB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuXG4gICAgICAuYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA0KSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICB9XG4gICAgICAuYWxlcnQgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLXdhcm5pbmcgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmctc2hhZGUsICNjNzllMDgpO1xuICAgICAgfVxuICAgICAgLmFsZXJ0LS1kYW5nZXIgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlci1zaGFkZSwgI2NmM2M0Zik7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLWluZm8gaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICB9XG5cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIGxpICsgbGkge1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG5cbiAgICAgIC5kZXRhaWxzLXRvZ2dsZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM2YjZiNmIpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuZGV0YWlscy10b2dnbGUgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICB9XG4gICAgICAuZGV0YWlscyB7XG4gICAgICAgIG1hcmdpbjogMTJweCAwIDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTQwcHggMWZyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3JvdyBkdCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM2YjZiNmIpO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IGRkIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX190b2tlbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19jb3B5IHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzAwNTRlOSk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fY29weTpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICBwcml2YXRlIHBhZ2VSZWZyZXNoID0gaW5qZWN0KFBhZ2VSZWZyZXNoU2VydmljZSk7XG4gIHJlYWRvbmx5IHByZWZzID0gaW5qZWN0KFByZWZlcmVuY2VzU2VydmljZSk7XG4gIC8vIGBBY3RpdmF0ZWRSb3V0ZWAgb3BjaW9uYWwg4oaSIGxhIHZpc3RhIGZ1bmNpb25hIGVtYmViaWRhIC8gZW4gU3Rvcnlib29rIHNpblxuICAvLyByb3V0ZXIgKHNvbG8gbG8gdXNhIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyBjb21vIGZhbGxiYWNrKS5cbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgbm90aWZpY2F0aW9uUHJlZmVyZW5jZXNDb25maWdgIChwb2JsYWRvIHBvclxuICAgKiBgcHJvdmlkZVZhbHRlY2hOb3RpZmljYXRpb25QcmVmZXJlbmNlc1JvdXRlc2ApLiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb25cbiAgICogbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxcbiAgICBSZXF1aXJlZDxPbWl0PE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZywgJ29uUHVzaEVuYWJsZWQnIHwgJ29uUHVzaERpc2FibGVkJz4+ICZcbiAgICAgIFBpY2s8Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnLCAnb25QdXNoRW5hYmxlZCcgfCAnb25QdXNoRGlzYWJsZWQnPlxuICA+KCgpID0+IHtcbiAgICBjb25zdCBmcm9tUm91dGUgPSAodGhpcy5yb3V0ZT8uc25hcHNob3QuZGF0YVsnbm90aWZpY2F0aW9uUHJlZmVyZW5jZXNDb25maWcnXSA/P1xuICAgICAge30pIGFzIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dEZXRhaWxzOiBtZXJnZWQuc2hvd0RldGFpbHMgPz8gdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IG1lcmdlZC5pMThuTmFtZXNwYWNlID8/IERFRkFVTFRfTkFNRVNQQUNFLFxuICAgICAgb25QdXNoRW5hYmxlZDogbWVyZ2VkLm9uUHVzaEVuYWJsZWQsXG4gICAgICBvblB1c2hEaXNhYmxlZDogbWVyZ2VkLm9uUHVzaERpc2FibGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICAvKiogT3BlcmFjacOzbiBlbiBjdXJzbyAoZ29iaWVybmEgc3Bpbm5lciBkZWwgdG9nZ2xlICsgbGFiZWwgXCJBY3RpdmFuZG/igKZcIikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1c3kgPSBzaWduYWw8bnVsbCB8ICdlbmFibGluZycgfCAnZGlzYWJsaW5nJz4obnVsbCk7XG4gIC8qKiBUcnVlIHNpIGVsIMO6bHRpbW8gaW50ZW50byBmYWxsw7Mg4oCUIGdvYmllcm5hIGVzdGFkbyBgZXJyb3JgICsgcmV0cnkgYnV0dG9uLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYXN0RmFpbGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgLyoqIFRydWUgbWllbnRyYXMgc2UgcmUtb2J0aWVuZSBlbCB0b2tlbiBGQ00gZW4gYmFja2dyb3VuZCAobm8gYWZlY3RhIGxhIFVJKS4gKi9cbiAgcHJpdmF0ZSBfcmVwYWlyaW5nVG9rZW4gPSBmYWxzZTtcbiAgLyoqIFRvZ2dsZSBkZWwgZXhwYW5kIGRlIGRldGFsbGVzIHTDqWNuaWNvcy4gKi9cbiAgcmVhZG9ubHkgc2hvd0RldGFpbHMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHBlcm1pc3Npb24gPSBzaWduYWw8Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlPignZGVmYXVsdCcpO1xuICByZWFkb25seSBpc1N1cHBvcnRlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGN1cnJlbnRUb2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbmVlZHNJT1NJbnN0YWxsID0gc2lnbmFsKHRoaXMuZGV0ZWN0TmVlZHNJT1NJbnN0YWxsKCkpO1xuXG4gIC8qKiBGb3JtQ29udHJvbCBkZWwgdG9nZ2xlIChzeW5jLWVhZG8gY29uIGBpc0VuYWJsZWRgIHZpYSBlZmZlY3QpLiAqL1xuICByZWFkb25seSB0b2dnbGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KGZhbHNlLCB7XG4gICAgbm9uTnVsbGFibGU6IHRydWUsXG4gIH0pO1xuXG4gIC8qKiBIYW5kbGVyIGRlbCBsaXN0ZW5lciBgZm9jdXNgIOKAlCByZWZlcmVuY2lhIGd1YXJkYWRhIHBhcmEgcG9kZXIgcmVtb3ZlcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG9uV2luZG93Rm9jdXMgPSAoKSA9PiB0aGlzLnNjaGVkdWxlQnJvd3NlclJlZnJlc2goKTtcbiAgLyoqIFRpbWVyIGRlbCBkZWJvdW5jZSBkZWwgcmVmcmVzaCBkaXNwYXJhZG8gcG9yIGBmb2N1c2AuICovXG4gIHByaXZhdGUgZm9jdXNEZWJvdW5jZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICAvKiogVmVudGFuYSBkZSBkZWJvdW5jZSAobXMpIHBhcmEgZWwgcmVmcmVzaCBkaXNwYXJhZG8gcG9yIGBmb2N1c2AuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgRk9DVVNfREVCT1VOQ0VfTVMgPSA1MDA7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVzdGFkbyBkZXJpdmFkb1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcblxuICAvKipcbiAgICogRXN0YWRvIGVmZWN0aXZvIGRlbCB0b2dnbGU6IFwiZWwgdXN1YXJpbyB0aWVuZSBwdXNoIGFjdGl2b1wiLlxuICAgKlxuICAgKiBTZSBkZXJpdmEgU09MTyBkZSBsYSBkZWNpc2nDs24gZGVsIHVzdWFyaW8gKGBtYXN0ZXJgKSB5IGRlbCBwZXJtaXNvIGRlbCBTT1xuICAgKiAoYHBlcm1pc3Npb25gKS4gRWwgdG9rZW4gRkNNIE5PIGZvcm1hIHBhcnRlIGRlbCBlc3RhZG8gZGUgVUk6IHZpdmUgZW5cbiAgICogbWVtb3JpYSwgc2UgcGllcmRlIGVuIGNhZGEgcmVjYXJnYS9zdXNwZW5zacOzbiBkZSBsYSBQV0EgeSBwcm9kdWNpcsOtYSBmbGlja2VyLlxuICAgKiBTaSBmYWx0YSB0b2tlbiBjb24gYG1hc3RlciAmJiBncmFudGVkYCwgZXMgdW4gZGV0YWxsZSByZXBhcmFibGUgZW5cbiAgICogYmFja2dyb3VuZCAodmVyIGByZXBhaXJUb2tlbklmTmVlZGVkYCksIG5vIHVuIGNhbWJpbyBkZWwgdG9nZ2xlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkgJiYgdGhpcy5wZXJtaXNzaW9uKCkgPT09ICdncmFudGVkJyk7XG5cbiAgcmVhZG9ubHkgc3RhdGUgPSBjb21wdXRlZDxVaVN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHRoaXMubmVlZHNJT1NJbnN0YWxsKCkpIHJldHVybiAnbmVlZHMtaW5zdGFsbCc7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbigpID09PSAndW5zdXBwb3J0ZWQnIHx8ICF0aGlzLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIC8vIGlPUyBzdGFuZGFsb25lIGHDum4gcHVlZGUgZGFyIGlzU3VwcG9ydGVkIGZhbHNlIHRlbXByYW5vIGFudGVzIGRlIGluaXQg4oCUXG4gICAgICAvLyBzb2xvIGJsb3F1ZWFtb3Mgc2kgZWwgYnJvd3NlciBleHBsw61jaXRhbWVudGUgbm8gc29wb3J0YSBBUElzLlxuICAgICAgaWYgKHRoaXMucGVybWlzc2lvbigpID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgICB9XG4gICAgY29uc3QgYnVzeSA9IHRoaXMuX2J1c3koKTtcbiAgICBpZiAoYnVzeSA9PT0gJ2VuYWJsaW5nJykgcmV0dXJuICdlbmFibGluZyc7XG4gICAgaWYgKGJ1c3kgPT09ICdkaXNhYmxpbmcnKSByZXR1cm4gJ2Rpc2FibGluZyc7XG4gICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybiAnZW5hYmxlZCc7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbigpID09PSAnZGVuaWVkJykgcmV0dXJuICdibG9ja2VkJztcbiAgICBpZiAodGhpcy5fbGFzdEZhaWxlZCgpKSByZXR1cm4gJ2Vycm9yJztcbiAgICByZXR1cm4gJ2lkbGUnO1xuICB9KTtcblxuICByZWFkb25seSBidXN5TGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RhdGUoKTtcbiAgICBpZiAocyA9PT0gJ2VuYWJsaW5nJykgcmV0dXJuIHRoaXMudHQoJ2VuYWJsaW5nJyk7XG4gICAgaWYgKHMgPT09ICdkaXNhYmxpbmcnKSByZXR1cm4gdGhpcy50dCgnZGlzYWJsaW5nJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbnRleHRNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSgpKSB7XG4gICAgICBjYXNlICd1bnN1cHBvcnRlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdwZXJtaXNzaW9uVW5zdXBwb3J0ZWQnKTtcbiAgICAgIGNhc2UgJ2Jsb2NrZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgncGVybWlzc2lvbkRlbmllZEluZm8nKTtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ2Vycm9yR2VuZXJpYycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KTtcblxuICByZWFkb25seSBhbGVydFZhcmlhbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RhdGUoKTtcbiAgICBpZiAocyA9PT0gJ2Vycm9yJyB8fCBzID09PSAnYmxvY2tlZCcpIHJldHVybiAnd2FybmluZyc7XG4gICAgaWYgKHMgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAnZGFuZ2VyJztcbiAgICByZXR1cm4gJ2luZm8nO1xuICB9KTtcblxuICByZWFkb25seSBhbGVydEljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RhdGUoKTtcbiAgICBpZiAocyA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICdjbG9zZS1jaXJjbGUtb3V0bGluZSc7XG4gICAgcmV0dXJuICdhbGVydC1jaXJjbGUtb3V0bGluZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvZ2dsZVByb3BzID0gY29tcHV0ZWQ8VG9nZ2xlSW5wdXRNZXRhZGF0YT4oKCkgPT4gKHtcbiAgICBjb250cm9sOiB0aGlzLnRvZ2dsZUNvbnRyb2wsXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDpcbiAgICAgIHRoaXMuX2J1c3koKSAhPT0gbnVsbCB8fFxuICAgICAgdGhpcy5zdGF0ZSgpID09PSAndW5zdXBwb3J0ZWQnIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJyB8fFxuICAgICAgdGhpcy5zdGF0ZSgpID09PSAnYmxvY2tlZCcsXG4gIH0pKTtcblxuICByZWFkb25seSByZXRyeUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgncmV0cnlDdGEnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgaWNvbjogeyBuYW1lOiAncmVmcmVzaC1vdXRsaW5lJywgc2xvdDogJ3N0YXJ0JyB9LFxuICAgIHN0YXRlOiB0aGlzLl9idXN5KCkgIT09IG51bGwgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdG9rZW5QcmV2aWV3ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnRUb2tlbigpO1xuICAgIGlmICghdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke3Quc2xpY2UoMCwgMjIpfeKApiR7dC5zbGljZSgtNil9YDtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIE5PVElGSUNBVElPTl9QUkVGRVJFTkNFU19WSUVXX0kxOE4pO1xuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuXG4gICAgdm9pZCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcblxuICAgIC8vIFJlLWFwbGljYXIgaGVhZGVyIGVuIGNhbWJpbyBkZSBpZGlvbWEuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgICAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCB0aGlzLm5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICAvLyBTeW5jIEZvcm1Db250cm9sIOKGkOKGkiBlc3RhZG8gZWZlY3Rpdm8uIEN1YW5kbyBlbCBlc3RhZG8gY2FtYmlhIChjYW1iaW8gZGVcbiAgICAvLyBwZXJtaXNzaW9uIHBvciBlbCBicm93c2VyLCBvIHNuYXBzaG90IEZpcmVzdG9yZSBkZSBgbWFzdGVyYCksIGVsIHRvZ2dsZSBzZVxuICAgIC8vIHJlLWFsaW5lYSBjb24gbGEgcmVhbGlkYWQuXG4gICAgLy9cbiAgICAvLyBJTVBPUlRBTlRFOiBzZSBpZ25vcmFuIGxvcyBjYW1iaW9zIG1pZW50cmFzIGhheSB1bmEgb3BlcmFjacOzbiBlbiBjdXJzb1xuICAgIC8vIChgX2J1c3koKSAhPT0gbnVsbGApLiBEdXJhbnRlIGBvbkVuYWJsZWAvYG9uRGlzYWJsZWAgbGFzIHNlw7FhbGVzIGZ1ZW50ZSBzZVxuICAgIC8vIGFjdHVhbGl6YW4gZW4gbW9tZW50b3MgZGlzdGludG9zIHkgcHJvZHVjaXLDrWFuIGVzdGFkb3MgaW50ZXJtZWRpb3Mg4oaSXG4gICAgLy8gZmxpY2tlciB2aXNpYmxlLiBFbCB0b2dnbGUgc2UgcmUtYWxpbmVhIFVOQSBzb2xhIHZleiBlbiBlbCBgZmluYWxseWAuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBlZmYgPSB0aGlzLmlzRW5hYmxlZCgpO1xuICAgICAgICBpZiAodGhpcy5fYnVzeSgpICE9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnRvZ2dsZUNvbnRyb2wudmFsdWUgIT09IGVmZikge1xuICAgICAgICAgIHRoaXMudG9nZ2xlQ29udHJvbC5zZXRWYWx1ZShlZmYsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICAvLyBJbnRlcmNlcHRhciBjbGljayBkZWwgdXNlcjogZWwgdG9nZ2xlIHlhIGNhbWJpw7MgdmlzdWFsbWVudGUsIGVqZWN1dGFyXG4gICAgLy8gbGEgYWNjacOzbiBjb3JyZXNwb25kaWVudGUuXG4gICAgdGhpcy50b2dnbGVDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiB7XG4gICAgICBpZiAodGhpcy5fYnVzeSgpICE9PSBudWxsKSByZXR1cm47XG4gICAgICBpZiAodiAmJiAhdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgICB2b2lkIHRoaXMub25FbmFibGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXYgJiYgdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgICB2b2lkIHRoaXMub25EaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEZXRlY3RhciByZWdyZXNvIGEgbGEgcGVzdGHDsWEg4oCUIGVsIHVzZXIgcHVkbyBoYWJlciBjYW1iaWFkbyBwZXJtaXNvc1xuICAgIC8vIGRlc2RlIGxhIGNvbmZpZyBkZWwgYnJvd3Nlci4gRWwgcmVmcmVzaCB2YSBjb24gZGVib3VuY2UgcGFyYSBub1xuICAgIC8vIGRpc3BhcmFyc2UgZW4gcsOhZmFnYXMgKGVuIFBXQSBtb2JpbGUgYGZvY3VzYCBzYWx0YSBjb24gY2FkYSBjYW1iaW8gZGVcbiAgICAvLyBhcHAgLyBhcGFyaWNpw7NuIGRlbCB0ZWNsYWRvKS4gRWwgbGlzdGVuZXIgc2UgcmVtdWV2ZSBlbiBuZ09uRGVzdHJveS5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25XaW5kb3dGb2N1cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGVsIHB1bGwtdG8tcmVmcmVzaCBlc3TDoW5kYXIuIEF1bnF1ZSBlc3RhIHZpc3RhIG5vIG11ZXN0cmEgdW5hXG4gICAqIGxpc3RhIHJlbW90YSwgc8OtIHJlZmxlamEgZXN0YWRvIG11dGFibGUgZGVsIGJyb3dzZXIgKHBlcm1pc28sIHRva2VuLFxuICAgKiBzb3BvcnRlIEZDTSkgcXVlIHB1ZWRlIGNhbWJpYXIgZnVlcmEgZGUgbGEgYXBwIOKAlCBlbCByZWZyZXNoIHJlLWV2YWzDumEgdG9kby5cbiAgICpcbiAgICogU2UgdXNhIGBuZ09uSW5pdGAvYG5nT25EZXN0cm95YCAoTk8gYGlvblZpZXdXaWxsRW50ZXJgKSBwb3JxdWVcbiAgICogYHZhbC1wYWdlLXdyYXBwZXJgIHVzYSBgPHJvdXRlci1vdXRsZXQ+YCBwbGFubyDigJQgbG9zIGhvb2tzIGBpb25WaWV3KmAgc29sb1xuICAgKiBkaXNwYXJhbiBkZW50cm8gZGUgYDxpb24tcm91dGVyLW91dGxldD5gLlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlUmVmcmVzaC5yZWdpc3RlcigoKSA9PiB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnVucmVnaXN0ZXIoKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25XaW5kb3dGb2N1cyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvY3VzRGVib3VuY2VUaW1lciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyKTtcbiAgICAgIHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVmcmVzY2EgZWwgZXN0YWRvIGRlbCBicm93c2VyIGNvbiBkZWJvdW5jZSDigJQgZXZpdGEgcsOhZmFnYXMgZGUgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUJyb3dzZXJSZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzRGVib3VuY2VUaW1lciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyKTtcbiAgICB9XG4gICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgIHZvaWQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgfSwgdGhpcy5GT0NVU19ERUJPVU5DRV9NUyk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2VjdWVuY2lhIGNvbXBsZXRhIGRlIGFjdGl2YWNpw7NuLlxuICAgKlxuICAgKiBUb2RhIGxhIG1lY8OhbmljYSAocGVybWlzc2lvbiDihpIgU1cgcmVhZHkg4oaSIGdldFRva2VuIGNvbiByZXRyeSDihpIgd2F0Y2hkb2cgZGVcbiAgICogYXV0by1yZWxvYWQpIHZpdmUgZW4gYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgIGRlIGxhIGxpYi4gRWwgcGFzbyBkZVxuICAgKiByZWdpc3RybyBkZWwgZGV2aWNlIGVuIGVsIGJhY2tlbmQgc2UgcGFzYSBjb21vIGNhbGxiYWNrIChgcmVnaXN0ZXJEZXZpY2VgKVxuICAgKiBwb3JxdWUgbGEgbGliIG5vIHB1ZWRlIGRlcGVuZGVyIGRlIGBBdXRoU2VydmljZWAgc2luIGNyZWFyIHVuIGNpY2xvLlxuICAgKlxuICAgKiBgZW5hYmxlKClgIG5vIGhhY2UgdGhyb3c6IHJlc3VlbHZlIGNvbiB1biBgRW5hYmxlUHVzaFJlc3VsdGAgZGVzY3JpcHRpdm8uXG4gICAqL1xuICBhc3luYyBvbkVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9idXN5LnNldCgnZW5hYmxpbmcnKTtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0OiBFbmFibGVQdXNoUmVzdWx0ID0gYXdhaXQgdGhpcy5tZXNzYWdpbmcuZW5hYmxlKHtcbiAgICAgICAgcmVnaXN0ZXJEZXZpY2U6IHRva2VuID0+IHRoaXMuYXV0aC5yZWdpc3RlckRldmljZSh0b2tlbikudGhlbihyID0+IHIucmVnaXN0ZXJlZCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlbmFibGVkJykge1xuICAgICAgICAvLyBQZXJzaXN0aXIgZmxhZyBtYXN0ZXIgc2kgYcO6biBubyBlc3RhYmEgYWN0aXZvLlxuICAgICAgICBpZiAoIXRoaXMucHJlZnMubm90aWZpY2F0aW9uc01hc3RlcigpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcmVmcy5zZXROb3RpZmljYXRpb25zTWFzdGVyKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZW5hYmxlU3VjY2VzcycpLFxuICAgICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uUHVzaEVuYWJsZWQ/LigpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAndGltZW91dCcgJiYgcmVzdWx0LnJlbG9hZGVkKSB7XG4gICAgICAgIC8vIExhIGxpYiBkaXNwYXLDsyBlbCBhdXRvLXJlbG9hZCDigJQgbGEgcMOhZ2luYSBlc3TDoSBwb3IgcmVjYXJnYXJzZS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVuaWVkIC8gdW5zdXBwb3J0ZWQgLyBlcnJvciAvIHRpbWVvdXQgc2luIHJlbG9hZCDihpIgZmFsbG8gcmVjdXBlcmFibGUuXG4gICAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Vycm9yR2VuZXJpYycpLFxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGBlbmFibGUoKWAgbm8gaGFjZSB0aHJvdywgcGVybyBlbCBjYWxsYmFjayBkZSByZWdpc3RybyBzw60gcHVlZGUuXG4gICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Vycm9yR2VuZXJpYycpLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIMOabmljbyByZWZyZXNoIGZpbmFsOiByZS1hbGluZWEgZWwgdG9nZ2xlIFVOQSBzb2xhIHZleiBjb24gZWwgZXN0YWRvIHJlYWwuXG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICAgIHRoaXMuX2J1c3kuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9idXN5LnNldCgnZGlzYWJsaW5nJyk7XG4gICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQoZmFsc2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXV0aC5kaXNhYmxlTm90aWZpY2F0aW9ucygpO1xuICAgICAgaWYgKHRoaXMucHJlZnMubm90aWZpY2F0aW9uc01hc3RlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlZnMuc2V0Tm90aWZpY2F0aW9uc01hc3RlcihmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdkaXNhYmxlU3VjY2VzcycpLFxuICAgICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25QdXNoRGlzYWJsZWQ/LigpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgICAgdGhpcy5fYnVzeS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlaW50ZW50YXIgbGEgc2VjdWVuY2lhIGNvbXBsZXRhIGRlIGFjdGl2YWNpw7NuLCBzaW4gaW1wb3J0YXIgZWwgZXN0YWRvIGFjdHVhbC4gKi9cbiAgYXN5bmMgb25SZXRyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5vbkVuYWJsZSgpO1xuICB9XG5cbiAgdG9nZ2xlRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZXRhaWxzLnVwZGF0ZSh2ID0+ICF2KTtcbiAgfVxuXG4gIGFzeW5jIGNvcHlUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0b2tlbik7XG4gICAgICB0aGlzLnRvYXN0LnNob3coeyBtZXNzYWdlOiB0aGlzLnR0KCdkZXRhaWxzQ29waWVkJyksIGNvbG9yOiAnZGFyaycgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDbGlwYm9hcmQgQVBJIG5vIGRpc3BvbmlibGUvZGVuZWdhZGEg4oCUIGZhbGxiYWNrIHNpbGVuY2lvc28sIHNpbiB0b2FzdCBkZSBlcnJvci5cbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmFkb3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQnJvd3NlclN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNTdXBwb3J0ZWQuc2V0KGF3YWl0IHRoaXMubWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpO1xuICAgIHRoaXMucGVybWlzc2lvbi5zZXQodGhpcy5hdXRoLmdldE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSgpKTtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbi5zZXQodGhpcy5tZXNzYWdpbmcuY3VycmVudFRva2VuID8/IG51bGwpO1xuICAgIHZvaWQgdGhpcy5yZXBhaXJUb2tlbklmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwYXJhIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBTaSBlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvIChgbWFzdGVyICYmIGdyYW50ZWRgKSBwZXJvIG5vIGhheSB0b2tlbiBlblxuICAgKiBtZW1vcmlhIOKAlCBjYXNvIHTDrXBpY28gdHJhcyB1biBjb2xkIHN0YXJ0IGRlIGxhIFBXQSDigJQgcmUtb2J0ZW5lbW9zIGVsIHRva2VuXG4gICAqIHkgcmUtcmVnaXN0cmFtb3MgZWwgZGV2aWNlIHNpbiB0b2NhciBlbCB0b2dnbGUgbmkgbW9zdHJhciB1biBlcnJvclxuICAgKiBhbGFybWlzdGEuIEVsIHRva2VuIGVzIHVuIGRldGFsbGUgZGUgaW1wbGVtZW50YWNpw7NuIHJlcGFyYWJsZSwgbm8gcGFydGUgZGVsXG4gICAqIGVzdGFkbyBkZSBVSSAodmVyIGBpc0VuYWJsZWRgKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVwYWlyVG9rZW5JZk5lZWRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVzeSgpICE9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3JlcGFpcmluZ1Rva2VuKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuKCkpIHJldHVybjtcblxuICAgIHRoaXMuX3JlcGFpcmluZ1Rva2VuID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5nZXRUb2tlbigpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnNldCh0b2tlbik7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aC5yZWdpc3RlckRldmljZSh0b2tlbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBSZXBhcmFjacOzbiBiZXN0LWVmZm9ydDogbm8gZGVncmFkYW1vcyBlbCB0b2dnbGUgbmkgbW9zdHJhbW9zIGVycm9yLlxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpT1MgYnJvd3NlciBzaW4gZXN0YXIgaW5zdGFsYWRvIGNvbW8gUFdBIOKAlCBwdXNoIHdlYiBubyBkaXNwb25pYmxlLlxuICAgKiBBcGxpY2EgYSBTYWZhcmkgeSBhIEVkZ2UvQ2hyb21lL0ZpcmVmb3ggZW4gaU9TICh0b2RvcyBXZWJLaXQgcG9yIG1hbmRhdG8gQXBwbGUpLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3ROZWVkc0lPU0luc3RhbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiAgICBjb25zdCBpc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KHVhKTtcbiAgICBpZiAoIWlzSU9TKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNTdGFuZGFsb25lID1cbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhPy4oJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fFxuICAgICAgKG5hdmlnYXRvciBhcyB1bmtub3duIGFzIHsgc3RhbmRhbG9uZT86IGJvb2xlYW4gfSkuc3RhbmRhbG9uZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4gIWlzU3RhbmRhbG9uZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0dChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5ucyk7XG4gIH1cbn1cbiJdfQ==