@dcl/asset-packs 1.12.2 → 1.12.3-20240301140405.commit-8aef784

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.
package/dist/actions.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  import { IEngine, Entity } from '@dcl/sdk/ecs';
2
- import { EngineComponents } from './definitions';
3
2
  export declare function initActions(entity: Entity): void;
4
- export declare function createActionsSystem(engine: IEngine, components: EngineComponents): (_dt: number) => void;
3
+ export declare function createActionsSystem(engine: IEngine): (_dt: number) => void;
package/dist/actions.js CHANGED
@@ -11,6 +11,7 @@ import { startInterval, startTimeout, stopAllIntervals, stopAllTimeouts, stopInt
11
11
  import { getPayload } from './action-types';
12
12
  import { getUIBackground, getUIText, getUITransform, mapAlignToScreenAlign, } from './ui';
13
13
  import { initTriggers } from './triggers';
14
+ import { getExplorerComponents } from './components';
14
15
  const initedEntities = new Set();
15
16
  const uiStacks = new Map();
16
17
  const lastUiEntityClicked = new Map();
@@ -21,8 +22,8 @@ export function initActions(entity) {
21
22
  }
22
23
  throw new Error(`Cannot call initActions while actionsSystem has not been created`);
23
24
  }
24
- export function createActionsSystem(engine, components) {
25
- const { Animator, Transform, AudioSource, AvatarAttach, VisibilityComponent, GltfContainer, UiTransform, UiText, UiBackground } = components;
25
+ export function createActionsSystem(engine) {
26
+ const { Animator, Transform, AudioSource, AvatarAttach, VisibilityComponent, GltfContainer, UiTransform, UiText, UiBackground, } = getExplorerComponents(engine);
26
27
  const { Actions, States, Counter, Triggers } = getComponents(engine);
27
28
  internalInitActions = initActions;
28
29
  return function actionsSystem(_dt) {
@@ -379,7 +380,7 @@ export function createActionsSystem(engine, components) {
379
380
  loop: payload.loop ?? false,
380
381
  playing: true,
381
382
  });
382
- initVideoPlayerComponentMaterial(entity, components, Material.getOrNull(entity));
383
+ initVideoPlayerComponentMaterial(entity, { Material }, Material.getOrNull(entity));
383
384
  });
384
385
  }
385
386
  }
@@ -526,4 +527,4 @@ export function createActionsSystem(engine, components) {
526
527
  }
527
528
  }
528
529
  }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFNWCxtQkFBbUIsRUFFbkIsWUFBWSxHQUNiLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUQsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsVUFBVSxFQUdWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsR0FDdEIsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXpD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QyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDcEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElFbmdpbmUsXG4gIEVudGl0eSxcbiAgVmlkZW9QbGF5ZXIsXG4gIE1hdGVyaWFsLFxuICBBdWRpb1N0cmVhbSxcbiAgWUdVbml0LFxuICBUZXh0QWxpZ25Nb2RlLFxuICBGb250LFxuICBZR1Bvc2l0aW9uVHlwZSxcbiAgUG9pbnRlckZpbHRlck1vZGUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG59IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgdHdlZW5zIH0gZnJvbSAnQGRjbC1zZGsvdXRpbHMvZGlzdC90d2VlbidcbmltcG9ydCB7IHJlcXVlc3RUZWxlcG9ydCB9IGZyb20gJ35zeXN0ZW0vVXNlckFjdGlvbk1vZHVsZSdcbmltcG9ydCB7XG4gIG1vdmVQbGF5ZXJUbyxcbiAgdHJpZ2dlckVtb3RlLFxuICB0cmlnZ2VyU2NlbmVFbW90ZSxcbiAgb3BlbkV4dGVybmFsVXJsLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJ1xuaW1wb3J0IHsgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zIH0gZnJvbSAnfnN5c3RlbS9Db21tc0FwaSdcbmltcG9ydCB7XG4gIEFjdGlvblBheWxvYWQsXG4gIEFjdGlvblR5cGUsXG4gIEVuZ2luZUNvbXBvbmVudHMsXG4gIFNjcmVlbkFsaWduTW9kZSxcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgY2xvbmUsXG4gIGdldENvbXBvbmVudHMsXG4gIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsLFxufSBmcm9tICcuL2RlZmluaXRpb25zJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcydcbmltcG9ydCB7IGdldEFjdGlvbkV2ZW50cywgZ2V0VHJpZ2dlckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzJ1xuaW1wb3J0IHtcbiAgc3RhcnRJbnRlcnZhbCxcbiAgc3RhcnRUaW1lb3V0LFxuICBzdG9wQWxsSW50ZXJ2YWxzLFxuICBzdG9wQWxsVGltZW91dHMsXG4gIHN0b3BJbnRlcnZhbCxcbiAgc3RvcFRpbWVvdXQsXG59IGZyb20gJy4vdGltZXInXG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnXG5pbXBvcnQge1xuICBnZXRVSUJhY2tncm91bmQsXG4gIGdldFVJVGV4dCxcbiAgZ2V0VUlUcmFuc2Zvcm0sXG4gIG1hcEFsaWduVG9TY3JlZW5BbGlnbixcbn0gZnJvbSAnLi91aSdcbmltcG9ydCB7IGluaXRUcmlnZ2VycyB9IGZyb20gJy4vdHJpZ2dlcnMnXG5cbmNvbnN0IGluaXRlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KClcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKVxuY29uc3QgbGFzdFVpRW50aXR5Q2xpY2tlZCA9IG5ldyBNYXA8RW50aXR5LCBFbnRpdHk+KClcblxubGV0IGludGVybmFsSW5pdEFjdGlvbnM6ICgoZW50aXR5OiBFbnRpdHkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGNhbGwgaW5pdEFjdGlvbnMgd2hpbGUgYWN0aW9uc1N5c3RlbSBoYXMgbm90IGJlZW4gY3JlYXRlZGAsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgY29tcG9uZW50czogRW5naW5lQ29tcG9uZW50cyxcbikge1xuICBjb25zdCB7XG4gICAgQW5pbWF0b3IsXG4gICAgVHJhbnNmb3JtLFxuICAgIEF1ZGlvU291cmNlLFxuICAgIEF2YXRhckF0dGFjaCxcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LFxuICAgIEdsdGZDb250YWluZXIsXG4gICAgVWlUcmFuc2Zvcm0sXG4gICAgVWlUZXh0LFxuICAgIFVpQmFja2dyb3VuZFxuICB9ID0gY29tcG9uZW50c1xuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciwgVHJpZ2dlcnMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnNcblxuICByZXR1cm4gZnVuY3Rpb24gYWN0aW9uc1N5c3RlbShfZHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVudGl0aWVzV2l0aEFjdGlvbnMgPSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFjdGlvbnMpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVudGl0aWVzV2l0aEFjdGlvbnMpIHtcbiAgICAgIGluaXRBY3Rpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQWN0aW9ucy5oYXMoZW50aXR5KSB8fCBpbml0ZWRFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZ2V0IGFjdGlvbnMgZGF0YVxuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldChlbnRpdHkpXG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8U3RyaW5nPigpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kIGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KVxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMudmFsdWUpIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5vbihhY3Rpb24ubmFtZSwgKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRTdGF0ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldENvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wU291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWToge1xuICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk9QRU5fTElOSzoge1xuICAgICAgICAgICAgaGFuZGxlT3BlbkxpbmsoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlU2hvd0ltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpbml0ZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIHN0YXRlczogW10sXG4gICAgICB9KVxuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlBbmltYXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmltYXRpb24sIGxvb3AgfSA9IHBheWxvYWRcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpXG4gICAgaWYgKCFhbmltYXRvci5zdGF0ZXMuc29tZSgoJCkgPT4gJC5jbGlwID09PSBhbmltYXRpb24pKSB7XG4gICAgICBhbmltYXRvci5zdGF0ZXMgPSBbXG4gICAgICAgIC4uLmFuaW1hdG9yLnN0YXRlcyxcbiAgICAgICAge1xuICAgICAgICAgIGNsaXA6IGFuaW1hdGlvbixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgY29uc3QgY2xpcCA9IEFuaW1hdG9yLmdldENsaXAoZW50aXR5LCBhbmltYXRpb24pXG4gICAgY2xpcC5wbGF5aW5nID0gdHJ1ZVxuICAgIGNsaXAubG9vcCA9IGxvb3AgPz8gZmFsc2VcbiAgfVxuXG4gIC8vIFNUT1BfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBbmltYXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4sXG4gICkge1xuICAgIGlmIChBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9TVEFURVxuICBmdW5jdGlvbiBoYW5kbGVTZXRTdGF0ZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPixcbiAgKSB7XG4gICAgY29uc3Qgc3RhdGVzID0gU3RhdGVzLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKHN0YXRlcykge1xuICAgICAgbGV0IG5leHRTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGF5bG9hZC5zdGF0ZVxuICAgICAgbmV4dFN0YXRlID0gaXNWYWxpZFN0YXRlKHN0YXRlcywgbmV4dFN0YXRlKVxuICAgICAgICA/IG5leHRTdGF0ZVxuICAgICAgICA6IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpXG4gICAgICBzdGF0ZXMuY3VycmVudFZhbHVlID0gbmV4dFN0YXRlXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TVEFURV9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gU1RBUlRfVFdFRU5cbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUd2VlbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICApIHtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgY29uc3Qgb25Ud2VlbkVuZCA9ICgpID0+IHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9UV0VFTl9FTkQpXG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIGhhbmRsZU1vdmVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlJPVEFURV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlUm90YXRlSXRlbShlbnRpdHksIHBheWxvYWQsIG9uVHdlZW5FbmQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5TQ0FMRV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgICBvblR3ZWVuRW5kOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueilcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRUcmFuc2xhdGlvbihcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgIGVuZFBvc2l0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gUk9UQVRFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgICBvblR3ZWVuRW5kOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKFxuICAgICAgdHdlZW4uZW5kLngsXG4gICAgICB0d2Vlbi5lbmQueSxcbiAgICAgIHR3ZWVuLmVuZC56LFxuICAgIClcbiAgICBjb25zdCBlbmRSb3RhdGlvbiA9IHJlbGF0aXZlXG4gICAgICA/IFF1YXRlcm5pb24ubXVsdGlwbHkodHJhbnNmb3JtLnJvdGF0aW9uLCBlbmQpXG4gICAgICA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0Um90YXRpb24oXG4gICAgICBlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICBlbmRSb3RhdGlvbixcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICBvblR3ZWVuRW5kLFxuICAgIClcbiAgfVxuXG4gIC8vIFNDQUxFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlU2NhbGVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFNjYWxpbmcoXG4gICAgICBlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICBlbmRTY2FsZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICBvblR3ZWVuRW5kLFxuICAgIClcbiAgfVxuXG4gIC8vIFNFVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZVNldENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSA9IHBheWxvYWQuY291bnRlclxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gSU5DUkVNRU5UX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSAxXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBERUNSRUFTRV9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSAtPSAxXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlTb3VuZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBhdWRpb0NsaXBVcmw6IHNyYyxcbiAgICAgIGxvb3AsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wU291bmQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPixcbiAgKSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9WSVNJQklMSVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFZpc2liaWxpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPixcbiAgKSB7XG4gICAgY29uc3QgeyB2aXNpYmxlLCBjb2xsaWRlciB9ID0gcGF5bG9hZFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pXG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKGNvbGxpZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChnbHRmKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGNvbGxpZGVyXG4gICAgICB9IGVsc2UgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IGNvbGxpZGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQVRUQUNIX1RPX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5jaG9yUG9pbnRJZCB9ID0gcGF5bG9hZFxuICAgIEF2YXRhckF0dGFjaC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IGFuY2hvclBvaW50SWQgfSlcbiAgfVxuXG4gIC8vIERFVEFDSF9GUk9NX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPixcbiAgKSB7XG4gICAgaWYgKEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KSkge1xuICAgICAgQXZhdGFyQXR0YWNoLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRFTEVQT1JUIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gcGF5bG9hZFxuICAgIHJlcXVlc3RUZWxlcG9ydCh7XG4gICAgICBkZXN0aW5hdGlvbjogYCR7eH0sJHt5fWAsXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1PVkUgUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBwYXlsb2FkLnBvc2l0aW9uLFxuICAgICAgY2FtZXJhVGFyZ2V0OiBwYXlsb2FkLmNhbWVyYVRhcmdldCxcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21vdmVQbGF5ZXJUbycsIG9wdGlvbnMpXG4gICAgdm9pZCBtb3ZlUGxheWVyVG8ob3B0aW9ucylcbiAgfVxuXG4gIC8vIFBMQVkgREVGQVVMVCBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBlbW90ZSB9ID0gcGF5bG9hZFxuICAgIHZvaWQgdHJpZ2dlckVtb3RlKHsgcHJlZGVmaW5lZEVtb3RlOiBlbW90ZSB9KVxuICB9XG5cbiAgLy8gUExBWSBDVVNUT00gRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheUN1c3RvbUVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCB9ID0gcGF5bG9hZFxuICAgIHZvaWQgdHJpZ2dlclNjZW5lRW1vdGUoeyBzcmMsIGxvb3AgfSlcbiAgfVxuXG4gIC8vIE9QRU4gTElOS1xuICBmdW5jdGlvbiBoYW5kbGVPcGVuTGluayhcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXlsb2FkXG4gICAgdm9pZCBvcGVuRXh0ZXJuYWxVcmwoeyB1cmwgfSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFZpZGVvU3JjKHtcbiAgICBzcmMsXG4gICAgZGNsQ2FzdCxcbiAgfTogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPikge1xuICAgIGlmIChkY2xDYXN0KSB7XG4gICAgICBjb25zdCB7IHN0cmVhbXMgfSA9IGF3YWl0IGdldEFjdGl2ZVZpZGVvU3RyZWFtcyh7fSlcbiAgICAgIHJldHVybiBzdHJlYW1zLmxlbmd0aCA+IDAgPyBzdHJlYW1zWzBdLnRyYWNrU2lkIDogJydcbiAgICB9XG4gICAgcmV0dXJuIHNyYyA/PyAnJ1xuICB9XG5cbiAgLy8gUExBWV9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVQbGF5VmlkZW8oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmICh2aWRlb1NvdXJjZSAmJiB2aWRlb1NvdXJjZS5zcmMpIHtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCB0aGUgdmlkZW8gc3JjIGZyb20gYSBwcm9taXNlIChWaWRlbyBGaWxlL1ZpZGVvIFN0cmVhbS9EQ0wgQ2FzdClcbiAgICAgIGdldFZpZGVvU3JjKHBheWxvYWQpLnRoZW4oKHNyYykgPT4ge1xuICAgICAgICBpZiAoIXNyYykgcmV0dXJuXG5cbiAgICAgICAgVmlkZW9QbGF5ZXIuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICAgIHNyYyxcbiAgICAgICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IDEsXG4gICAgICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGZhbHNlLFxuICAgICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSW5pdCB2aWRlbyBwbGF5ZXIgbWF0ZXJpYWwgd2hlbiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSBhIFZpZGVvUGxheWVyIGNvbXBvbmVudCBkZWZpbmVkXG4gICAgICAgIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsKFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgIE1hdGVyaWFsLmdldE9yTnVsbChlbnRpdHkpLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgICBBdWRpb1N0cmVhbS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICB1cmwsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU3RyZWFtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+LFxuICApIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWRcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbnRpdHkpXG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICBVaVRleHQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KVxuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVIaWRlVGV4dChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4sXG4gICkge1xuICAgIGNvbnN0IHVpVGV4dENvbXBvbmVudCA9IFVpVGV4dC5nZXRPck51bGwoZW50aXR5KVxuICAgIGlmICh1aVRleHRDb21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KVxuICAgIHJldHVybiBhY3Rpb25zPy52YWx1ZS5maW5kKCgkKSA9PiAkLm5hbWUgPT09IG5hbWUpXG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgYWN0aW9uTmFtZSwgdGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BEZWxheShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcFRpbWVvdXQoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgaW50ZXJ2YWwgfSA9IHBheWxvYWRcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKVxuICB9XG5cbiAgLy8gQ0xPTkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZUNsb25lRW50aXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkXG5cbiAgICAvLyBjbG9uZSBlbnRpdHlcbiAgICBjb25zdCBjbG9uZWQgPSBjbG9uZShlbnRpdHksIGVuZ2luZSwgVHJpZ2dlcnMpXG5cbiAgICAvLyBpbml0aWFsaXplXG4gICAgaW5pdEFjdGlvbnMoY2xvbmVkKVxuICAgIGluaXRUcmlnZ2VycyhjbG9uZWQpXG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JDcmVhdGVNdXRhYmxlKGNsb25lZClcbiAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3NpdGlvblxuXG4gICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoY2xvbmVkKVxuICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTE9ORSlcbiAgfVxuXG4gIC8vIFJFTU9WRV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlUmVtb3ZlRW50aXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWT4sXG4gICkge1xuICAgIC8vIFJlbW92ZSBhbGwgdGltZXJzIGJlZm9yZSByZW1vdmUgdGhlIGVudGl0eVxuICAgIHN0b3BBbGxUaW1lb3V0cyhlbnRpdHkpXG4gICAgc3RvcEFsbEludGVydmFscyhlbnRpdHkpXG4gICAgZW5naW5lLnJlbW92ZUVudGl0eShlbnRpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBnZXRVaVN0YWNrKGFsaWduOiBTY3JlZW5BbGlnbk1vZGUpIHtcbiAgICBjb25zdCBrZXkgPSBgJHthbGlnbi5hbGlnbkl0ZW1zfSwke2FsaWduLmp1c3RpZnlDb250ZW50fWBcblxuICAgIGlmICghdWlTdGFja3MuaGFzKGtleSkpIHtcbiAgICAgIHVpU3RhY2tzLnNldChrZXksIGVuZ2luZS5hZGRFbnRpdHkoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdWlTdGFja3MuZ2V0KGtleSkhXG4gIH1cblxuICAvLyBTSE9XX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dJbWFnZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCB0ZXh0LCBoaWRlQWZ0ZXJTZWNvbmRzLCBmb250U2l6ZSwgYWxpZ24sIGhlaWdodCwgd2lkdGggfSA9XG4gICAgICBwYXlsb2FkXG5cbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgdHJhbnNmb3JtIGZvciB0aGUgcm9vdCBlbnRpdHlcbiAgICBnZXRVSVRyYW5zZm9ybShVaVRyYW5zZm9ybSwgZW5naW5lLlJvb3RFbnRpdHkpXG5cbiAgICAvLyBHZXQgYSBVSSBTdGFjayBlbnRpdHlcbiAgICBjb25zdCBzY3JlZW5BbGlnbiA9IG1hcEFsaWduVG9TY3JlZW5BbGlnbihhbGlnbilcbiAgICBjb25zdCB1aVN0YWNrID0gZ2V0VWlTdGFjayhzY3JlZW5BbGlnbilcblxuICAgIC8vIFRPRE86IEZpeCBpdGVtcyB3cmFwcGluZ1xuICAgIC8vIEdldC9DcmVhdGUgYSBVSSBUcmFuc2Zvcm0gZm9yIHRoZSBVSSBzdGFja1xuICAgIGNvbnN0IHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShVaVRyYW5zZm9ybSwgdWlTdGFjaylcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LmFsaWduSXRlbXMgPSBzY3JlZW5BbGlnbi5hbGlnbkl0ZW1zXG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5qdXN0aWZ5Q29udGVudCA9IHNjcmVlbkFsaWduLmp1c3RpZnlDb250ZW50XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5wb3NpdGlvblR5cGUgPSBZR1Bvc2l0aW9uVHlwZS5ZR1BUX0FCU09MVVRFXG5cbiAgICAvLyBDcmVhdGUgYSBVSSBlbnRpdHkgYW5kIGEgVHJhbnNmb3JtIGNvbXBvbmVudCBmb3IgdGhlIGltYWdlXG4gICAgY29uc3QgaW1hZ2VFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBjb25zdCBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFxuICAgICAgVWlUcmFuc2Zvcm0sXG4gICAgICBpbWFnZUVudGl0eSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgWUdVbml0LllHVV9QT0lOVCxcbiAgICApXG4gICAgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQucGFyZW50ID0gdWlTdGFja1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fQkxPQ0tcblxuICAgIC8vIENyZWF0ZSBCYWNrZ3JvdW5kIENvbXBvbmVudFxuICAgIGdldFVJQmFja2dyb3VuZChVaUJhY2tncm91bmQsIGltYWdlRW50aXR5LCBzcmMpXG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgLy8gQ3JlYXRlIFRleHQgQ29tcG9uZW50XG4gICAgICAvLyBUT0RPOiBGaXggdGV4dCB3cmFwcGluZyBhbmQgc2Nyb2xsaW5nXG4gICAgICBnZXRVSVRleHQoVWlUZXh0LCBpbWFnZUVudGl0eSwgdGV4dCwgZm9udFNpemUsIHdpZHRoKVxuICAgIH1cblxuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiBpbWFnZUVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLnNldChlbnRpdHksIGltYWdlRW50aXR5KVxuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTElDS19JTUFHRSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgaWYgKGhpZGVBZnRlclNlY29uZHMpIHtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9JTUFHRSwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgeyBpbWFnZUVudGl0eTogaW1hZ2VFbnRpdHkgfSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9JTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVIaWRlSW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+LFxuICApIHtcbiAgICBjb25zdCB7IGltYWdlRW50aXR5IH0gPSBwYXlsb2FkXG5cbiAgICBpZiAoaW1hZ2VFbnRpdHkpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoaW1hZ2VFbnRpdHkgYXMgRW50aXR5KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGlja2VkSW1hZ2UgPSBsYXN0VWlFbnRpdHlDbGlja2VkLmdldChlbnRpdHkpXG4gICAgICBpZiAoY2xpY2tlZEltYWdlKSB7XG4gICAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoY2xpY2tlZEltYWdlKVxuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLmRlbGV0ZShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFNWCxtQkFBbUIsRUFFbkIsWUFBWSxHQUNiLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUQsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsVUFBVSxFQUdWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsR0FFdEIsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3pD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WSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQ2pDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBWaWRlb1BsYXllcixcbiAgTWF0ZXJpYWwsXG4gIEF1ZGlvU3RyZWFtLFxuICBZR1VuaXQsXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG4gIFlHUG9zaXRpb25UeXBlLFxuICBQb2ludGVyRmlsdGVyTW9kZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgSW5wdXRBY3Rpb24sXG4gIE1lc2hDb2xsaWRlcixcbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyB0d2VlbnMgfSBmcm9tICdAZGNsLXNkay91dGlscy9kaXN0L3R3ZWVuJ1xuaW1wb3J0IHsgcmVxdWVzdFRlbGVwb3J0IH0gZnJvbSAnfnN5c3RlbS9Vc2VyQWN0aW9uTW9kdWxlJ1xuaW1wb3J0IHtcbiAgbW92ZVBsYXllclRvLFxuICB0cmlnZ2VyRW1vdGUsXG4gIHRyaWdnZXJTY2VuZUVtb3RlLFxuICBvcGVuRXh0ZXJuYWxVcmwsXG59IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnXG5pbXBvcnQgeyBnZXRBY3RpdmVWaWRlb1N0cmVhbXMgfSBmcm9tICd+c3lzdGVtL0NvbW1zQXBpJ1xuaW1wb3J0IHtcbiAgQWN0aW9uUGF5bG9hZCxcbiAgQWN0aW9uVHlwZSxcbiAgRW5naW5lQ29tcG9uZW50cyxcbiAgU2NyZWVuQWxpZ25Nb2RlLFxuICBUcmlnZ2VyVHlwZSxcbiAgVHdlZW5UeXBlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUsIGlzVmFsaWRTdGF0ZSB9IGZyb20gJy4vc3RhdGVzJ1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnXG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcidcbmltcG9ydCB7IGdldFBheWxvYWQgfSBmcm9tICcuL2FjdGlvbi10eXBlcydcbmltcG9ydCB7XG4gIGdldFVJQmFja2dyb3VuZCxcbiAgZ2V0VUlUZXh0LFxuICBnZXRVSVRyYW5zZm9ybSxcbiAgbWFwQWxpZ25Ub1NjcmVlbkFsaWduLFxuXG59IGZyb20gJy4vdWknXG5pbXBvcnQgeyBpbml0VHJpZ2dlcnMgfSBmcm9tICcuL3RyaWdnZXJzJ1xuaW1wb3J0IHsgZ2V0RXhwbG9yZXJDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJ1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpXG5jb25zdCB1aVN0YWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHk+KClcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpXG5cbmxldCBpbnRlcm5hbEluaXRBY3Rpb25zOiAoKGVudGl0eTogRW50aXR5KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICBpZiAoaW50ZXJuYWxJbml0QWN0aW9ucykge1xuICAgIHJldHVybiBpbnRlcm5hbEluaXRBY3Rpb25zKGVudGl0eSlcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWRgLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25zU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gIH0gPSBnZXRFeHBsb3JlckNvbXBvbmVudHMoZW5naW5lKVxuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciwgVHJpZ2dlcnMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnNcblxuICByZXR1cm4gZnVuY3Rpb24gYWN0aW9uc1N5c3RlbShfZHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVudGl0aWVzV2l0aEFjdGlvbnMgPSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFjdGlvbnMpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVudGl0aWVzV2l0aEFjdGlvbnMpIHtcbiAgICAgIGluaXRBY3Rpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQWN0aW9ucy5oYXMoZW50aXR5KSB8fCBpbml0ZWRFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZ2V0IGFjdGlvbnMgZGF0YVxuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldChlbnRpdHkpXG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8U3RyaW5nPigpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kIGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KVxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMudmFsdWUpIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5vbihhY3Rpb24ubmFtZSwgKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRTdGF0ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldENvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wU291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWToge1xuICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk9QRU5fTElOSzoge1xuICAgICAgICAgICAgaGFuZGxlT3BlbkxpbmsoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlU2hvd0ltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpbml0ZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIHN0YXRlczogW10sXG4gICAgICB9KVxuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlBbmltYXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmltYXRpb24sIGxvb3AgfSA9IHBheWxvYWRcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpXG4gICAgaWYgKCFhbmltYXRvci5zdGF0ZXMuc29tZSgoJCkgPT4gJC5jbGlwID09PSBhbmltYXRpb24pKSB7XG4gICAgICBhbmltYXRvci5zdGF0ZXMgPSBbXG4gICAgICAgIC4uLmFuaW1hdG9yLnN0YXRlcyxcbiAgICAgICAge1xuICAgICAgICAgIGNsaXA6IGFuaW1hdGlvbixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgY29uc3QgY2xpcCA9IEFuaW1hdG9yLmdldENsaXAoZW50aXR5LCBhbmltYXRpb24pXG4gICAgY2xpcC5wbGF5aW5nID0gdHJ1ZVxuICAgIGNsaXAubG9vcCA9IGxvb3AgPz8gZmFsc2VcbiAgfVxuXG4gIC8vIFNUT1BfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBbmltYXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4sXG4gICkge1xuICAgIGlmIChBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9TVEFURVxuICBmdW5jdGlvbiBoYW5kbGVTZXRTdGF0ZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPixcbiAgKSB7XG4gICAgY29uc3Qgc3RhdGVzID0gU3RhdGVzLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKHN0YXRlcykge1xuICAgICAgbGV0IG5leHRTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGF5bG9hZC5zdGF0ZVxuICAgICAgbmV4dFN0YXRlID0gaXNWYWxpZFN0YXRlKHN0YXRlcywgbmV4dFN0YXRlKVxuICAgICAgICA/IG5leHRTdGF0ZVxuICAgICAgICA6IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpXG4gICAgICBzdGF0ZXMuY3VycmVudFZhbHVlID0gbmV4dFN0YXRlXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TVEFURV9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gU1RBUlRfVFdFRU5cbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUd2VlbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICApIHtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgY29uc3Qgb25Ud2VlbkVuZCA9ICgpID0+IHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9UV0VFTl9FTkQpXG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIGhhbmRsZU1vdmVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlJPVEFURV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlUm90YXRlSXRlbShlbnRpdHksIHBheWxvYWQsIG9uVHdlZW5FbmQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5TQ0FMRV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgICBvblR3ZWVuRW5kOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueilcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRUcmFuc2xhdGlvbihcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgIGVuZFBvc2l0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gUk9UQVRFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPixcbiAgICBvblR3ZWVuRW5kOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKFxuICAgICAgdHdlZW4uZW5kLngsXG4gICAgICB0d2Vlbi5lbmQueSxcbiAgICAgIHR3ZWVuLmVuZC56LFxuICAgIClcbiAgICBjb25zdCBlbmRSb3RhdGlvbiA9IHJlbGF0aXZlXG4gICAgICA/IFF1YXRlcm5pb24ubXVsdGlwbHkodHJhbnNmb3JtLnJvdGF0aW9uLCBlbmQpXG4gICAgICA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0Um90YXRpb24oXG4gICAgICBlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICBlbmRSb3RhdGlvbixcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICBvblR3ZWVuRW5kLFxuICAgIClcbiAgfVxuXG4gIC8vIFNDQUxFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlU2NhbGVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFNjYWxpbmcoXG4gICAgICBlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICBlbmRTY2FsZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICBvblR3ZWVuRW5kLFxuICAgIClcbiAgfVxuXG4gIC8vIFNFVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZVNldENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSA9IHBheWxvYWQuY291bnRlclxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gSU5DUkVNRU5UX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSAxXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBERUNSRUFTRV9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSAtPSAxXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlTb3VuZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBhdWRpb0NsaXBVcmw6IHNyYyxcbiAgICAgIGxvb3AsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wU291bmQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPixcbiAgKSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9WSVNJQklMSVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFZpc2liaWxpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPixcbiAgKSB7XG4gICAgY29uc3QgeyB2aXNpYmxlLCBjb2xsaWRlciB9ID0gcGF5bG9hZFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pXG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKGNvbGxpZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChnbHRmKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGNvbGxpZGVyXG4gICAgICB9IGVsc2UgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IGNvbGxpZGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQVRUQUNIX1RPX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5jaG9yUG9pbnRJZCB9ID0gcGF5bG9hZFxuICAgIEF2YXRhckF0dGFjaC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IGFuY2hvclBvaW50SWQgfSlcbiAgfVxuXG4gIC8vIERFVEFDSF9GUk9NX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPixcbiAgKSB7XG4gICAgaWYgKEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KSkge1xuICAgICAgQXZhdGFyQXR0YWNoLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRFTEVQT1JUIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gcGF5bG9hZFxuICAgIHJlcXVlc3RUZWxlcG9ydCh7XG4gICAgICBkZXN0aW5hdGlvbjogYCR7eH0sJHt5fWAsXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1PVkUgUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBwYXlsb2FkLnBvc2l0aW9uLFxuICAgICAgY2FtZXJhVGFyZ2V0OiBwYXlsb2FkLmNhbWVyYVRhcmdldCxcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21vdmVQbGF5ZXJUbycsIG9wdGlvbnMpXG4gICAgdm9pZCBtb3ZlUGxheWVyVG8ob3B0aW9ucylcbiAgfVxuXG4gIC8vIFBMQVkgREVGQVVMVCBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBlbW90ZSB9ID0gcGF5bG9hZFxuICAgIHZvaWQgdHJpZ2dlckVtb3RlKHsgcHJlZGVmaW5lZEVtb3RlOiBlbW90ZSB9KVxuICB9XG5cbiAgLy8gUExBWSBDVVNUT00gRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheUN1c3RvbUVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCB9ID0gcGF5bG9hZFxuICAgIHZvaWQgdHJpZ2dlclNjZW5lRW1vdGUoeyBzcmMsIGxvb3AgfSlcbiAgfVxuXG4gIC8vIE9QRU4gTElOS1xuICBmdW5jdGlvbiBoYW5kbGVPcGVuTGluayhcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXlsb2FkXG4gICAgdm9pZCBvcGVuRXh0ZXJuYWxVcmwoeyB1cmwgfSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFZpZGVvU3JjKHtcbiAgICBzcmMsXG4gICAgZGNsQ2FzdCxcbiAgfTogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPikge1xuICAgIGlmIChkY2xDYXN0KSB7XG4gICAgICBjb25zdCB7IHN0cmVhbXMgfSA9IGF3YWl0IGdldEFjdGl2ZVZpZGVvU3RyZWFtcyh7fSlcbiAgICAgIHJldHVybiBzdHJlYW1zLmxlbmd0aCA+IDAgPyBzdHJlYW1zWzBdLnRyYWNrU2lkIDogJydcbiAgICB9XG4gICAgcmV0dXJuIHNyYyA/PyAnJ1xuICB9XG5cbiAgLy8gUExBWV9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVQbGF5VmlkZW8oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmICh2aWRlb1NvdXJjZSAmJiB2aWRlb1NvdXJjZS5zcmMpIHtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCB0aGUgdmlkZW8gc3JjIGZyb20gYSBwcm9taXNlIChWaWRlbyBGaWxlL1ZpZGVvIFN0cmVhbS9EQ0wgQ2FzdClcbiAgICAgIGdldFZpZGVvU3JjKHBheWxvYWQpLnRoZW4oKHNyYykgPT4ge1xuICAgICAgICBpZiAoIXNyYykgcmV0dXJuXG5cbiAgICAgICAgVmlkZW9QbGF5ZXIuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICAgIHNyYyxcbiAgICAgICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IDEsXG4gICAgICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGZhbHNlLFxuICAgICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSW5pdCB2aWRlbyBwbGF5ZXIgbWF0ZXJpYWwgd2hlbiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSBhIFZpZGVvUGxheWVyIGNvbXBvbmVudCBkZWZpbmVkXG4gICAgICAgIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsKFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICB7IE1hdGVyaWFsIH0sXG4gICAgICAgICAgTWF0ZXJpYWwuZ2V0T3JOdWxsKGVudGl0eSksXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVTdG9wVmlkZW8oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgeyB1cmwsIHZvbHVtZSB9ID0gcGF5bG9hZFxuICAgIEF1ZGlvU3RyZWFtLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIHVybCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9TdHJlYW0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTSE9XX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd1RleHQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4sXG4gICkge1xuICAgIGNvbnN0IHsgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udCwgZm9udFNpemUsIHRleHRBbGlnbiB9ID0gcGF5bG9hZFxuICAgIGNvbnN0IHVpVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIGVudGl0eSlcbiAgICBpZiAodWlUcmFuc2Zvcm1Db21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICBmb250OiBmb250IGFzIHVua25vd24gYXMgRm9udCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduIGFzIHVua25vd24gYXMgVGV4dEFsaWduTW9kZSxcbiAgICAgIH0pXG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfVEVYVCwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCB7fSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPixcbiAgKSB7XG4gICAgY29uc3QgdWlUZXh0Q29tcG9uZW50ID0gVWlUZXh0LmdldE9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHVpVGV4dENvbXBvbmVudCkge1xuICAgICAgVWlUZXh0LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5OiBFbnRpdHksIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldE9yTnVsbChlbnRpdHkpXG4gICAgcmV0dXJuIGFjdGlvbnM/LnZhbHVlLmZpbmQoKCQpID0+ICQubmFtZSA9PT0gbmFtZSlcbiAgfVxuXG4gIC8vIFNUQVJUX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0RGVsYXkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCB0aW1lb3V0IH0gPSBwYXlsb2FkXG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKVxuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBhY3Rpb25OYW1lLCB0aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWRcbiAgICBzdG9wVGltZW91dChlbnRpdHksIGFjdGlvbilcbiAgfVxuXG4gIC8vIFNUQVJUX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRMb29wKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBpbnRlcnZhbCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRJbnRlcnZhbChlbnRpdHksIGFjdGlvbk5hbWUsIGludGVydmFsLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfTE9PUFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wTG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWRcbiAgICBzdG9wSW50ZXJ2YWwoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBDTE9ORV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvbmVFbnRpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4sXG4gICkge1xuICAgIGNvbnN0IHsgcG9zaXRpb24gfSA9IHBheWxvYWRcblxuICAgIC8vIGNsb25lIGVudGl0eVxuICAgIGNvbnN0IGNsb25lZCA9IGNsb25lKGVudGl0eSwgZW5naW5lLCBUcmlnZ2VycylcblxuICAgIC8vIGluaXRpYWxpemVcbiAgICBpbml0QWN0aW9ucyhjbG9uZWQpXG4gICAgaW5pdFRyaWdnZXJzKGNsb25lZClcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKVxuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uXG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhjbG9uZWQpXG4gICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMT05FKVxuICB9XG5cbiAgLy8gUkVNT1ZFX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZPixcbiAgKSB7XG4gICAgLy8gUmVtb3ZlIGFsbCB0aW1lcnMgYmVmb3JlIHJlbW92ZSB0aGUgZW50aXR5XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSlcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSlcbiAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVpU3RhY2soYWxpZ246IFNjcmVlbkFsaWduTW9kZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2FsaWduLmFsaWduSXRlbXN9LCR7YWxpZ24uanVzdGlmeUNvbnRlbnR9YFxuXG4gICAgaWYgKCF1aVN0YWNrcy5oYXMoa2V5KSkge1xuICAgICAgdWlTdGFja3Muc2V0KGtleSwgZW5naW5lLmFkZEVudGl0eSgpKVxuICAgIH1cblxuICAgIHJldHVybiB1aVN0YWNrcy5nZXQoa2V5KSFcbiAgfVxuXG4gIC8vIFNIT1dfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd0ltYWdlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX0lNQUdFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID1cbiAgICAgIHBheWxvYWRcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbmdpbmUuUm9vdEVudGl0eSlcblxuICAgIC8vIEdldCBhIFVJIFN0YWNrIGVudGl0eVxuICAgIGNvbnN0IHNjcmVlbkFsaWduID0gbWFwQWxpZ25Ub1NjcmVlbkFsaWduKGFsaWduKVxuICAgIGNvbnN0IHVpU3RhY2sgPSBnZXRVaVN0YWNrKHNjcmVlbkFsaWduKVxuXG4gICAgLy8gVE9ETzogRml4IGl0ZW1zIHdyYXBwaW5nXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIFRyYW5zZm9ybSBmb3IgdGhlIFVJIHN0YWNrXG4gICAgY29uc3QgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB1aVN0YWNrKVxuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuYWxpZ25JdGVtcyA9IHNjcmVlbkFsaWduLmFsaWduSXRlbXNcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50Lmp1c3RpZnlDb250ZW50ID0gc2NyZWVuQWxpZ24uanVzdGlmeUNvbnRlbnRcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LnBvc2l0aW9uVHlwZSA9IFlHUG9zaXRpb25UeXBlLllHUFRfQUJTT0xVVEVcblxuICAgIC8vIENyZWF0ZSBhIFVJIGVudGl0eSBhbmQgYSBUcmFuc2Zvcm0gY29tcG9uZW50IGZvciB0aGUgaW1hZ2VcbiAgICBjb25zdCBpbWFnZUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgIGNvbnN0IGltYWdlVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oXG4gICAgICBVaVRyYW5zZm9ybSxcbiAgICAgIGltYWdlRW50aXR5LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBZR1VuaXQuWUdVX1BPSU5ULFxuICAgIClcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSB1aVN0YWNrXG4gICAgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQucG9pbnRlckZpbHRlciA9IFBvaW50ZXJGaWx0ZXJNb2RlLlBGTV9CTE9DS1xuXG4gICAgLy8gQ3JlYXRlIEJhY2tncm91bmQgQ29tcG9uZW50XG4gICAgZ2V0VUlCYWNrZ3JvdW5kKFVpQmFja2dyb3VuZCwgaW1hZ2VFbnRpdHksIHNyYylcblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBDcmVhdGUgVGV4dCBDb21wb25lbnRcbiAgICAgIC8vIFRPRE86IEZpeCB0ZXh0IHdyYXBwaW5nIGFuZCBzY3JvbGxpbmdcbiAgICAgIGdldFVJVGV4dChVaVRleHQsIGltYWdlRW50aXR5LCB0ZXh0LCBmb250U2l6ZSwgd2lkdGgpXG4gICAgfVxuXG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgICAge1xuICAgICAgICBlbnRpdHk6IGltYWdlRW50aXR5LFxuICAgICAgICBvcHRzOiB7XG4gICAgICAgICAgYnV0dG9uOiBJbnB1dEFjdGlvbi5JQV9QT0lOVEVSLFxuICAgICAgICAgIGhvdmVyVGV4dDogJ0NsaWNrJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuc2V0KGVudGl0eSwgaW1hZ2VFbnRpdHkpXG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMSUNLX0lNQUdFKVxuICAgICAgfSxcbiAgICApXG5cbiAgICBpZiAoaGlkZUFmdGVyU2Vjb25kcykge1xuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX0lNQUdFLCBoaWRlQWZ0ZXJTZWNvbmRzLCAoKSA9PlxuICAgICAgICBoYW5kbGVIaWRlSW1hZ2UoZW50aXR5LCB7IGltYWdlRW50aXR5OiBpbWFnZUVudGl0eSB9KSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBISURFX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVJbWFnZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9JTUFHRT4sXG4gICkge1xuICAgIGNvbnN0IHsgaW1hZ2VFbnRpdHkgfSA9IHBheWxvYWRcblxuICAgIGlmIChpbWFnZUVudGl0eSkge1xuICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShpbWFnZUVudGl0eSBhcyBFbnRpdHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbWFnZSA9IGxhc3RVaUVudGl0eUNsaWNrZWQuZ2V0KGVudGl0eSlcbiAgICAgIGlmIChjbGlja2VkSW1hZ2UpIHtcbiAgICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShjbGlja2VkSW1hZ2UpXG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuZGVsZXRlKGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==