@flowmap.gl/data 8.0.0-alpha.14 → 8.0.0-alpha.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"FlowmapSelectors.d.ts","sourceRoot":"","sources":["../src/FlowmapSelectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowmapSelectors.d.ts","sourceRoot":"","sources":["../src/FlowmapSelectors.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,7 @@
16
16
  *
17
17
  */
18
18
  import { WebMercatorViewport } from '@math.gl/web-mercator';
19
- import { ascending, descending, extent, min } from 'd3-array';
20
- import { nest } from 'd3-collection';
19
+ import { ascending, rollup, descending, extent, min } from 'd3-array';
21
20
  import { scaleLinear, scaleSqrt } from 'd3-scale';
22
21
  import KDBush from 'kdbush';
23
22
  import { createSelector, createSelectorCreator, defaultMemoize, } from 'reselect';
@@ -814,10 +813,7 @@ function latY(lat) {
814
813
  }
815
814
  function aggregateFlows(flows, flowAccessors) {
816
815
  // Sum up flows with same origin, dest
817
- const byOriginDest = nest()
818
- .key(flowAccessors.getFlowOriginId)
819
- .key(flowAccessors.getFlowDestId)
820
- .rollup((ff) => {
816
+ const byOriginDest = rollup(flows, (ff) => {
821
817
  const origin = flowAccessors.getFlowOriginId(ff[0]);
822
818
  const dest = flowAccessors.getFlowDestId(ff[0]);
823
819
  // const color = ff[0].color;
@@ -837,11 +833,10 @@ function aggregateFlows(flows, flowAccessors) {
837
833
  };
838
834
  // if (color) rv.color = color;
839
835
  return rv;
840
- })
841
- .entries(flows);
836
+ }, flowAccessors.getFlowOriginId, flowAccessors.getFlowDestId);
842
837
  const rv = [];
843
- for (const { values } of byOriginDest) {
844
- for (const { value } of values) {
838
+ for (const values of byOriginDest.values()) {
839
+ for (const value of values.values()) {
845
840
  rv.push(value);
846
841
  }
847
842
  }
@@ -889,4 +884,4 @@ export function getFlowLineAttributesByIndex(lineAttributes, index) {
889
884
  : undefined)),
890
885
  };
891
886
  }
892
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9GbG93bWFwU2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQ0wsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixjQUFjLEdBRWYsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsVUFBVSxFQUVWLHdCQUF3QixFQUN4Qix3QkFBd0IsR0FDekIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLFNBQVMsRUFBRSxFQUdoQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8seUJBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIseUJBQXlCLEdBRTFCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFVTCxTQUFTLEVBQ1QscUJBQXFCLEVBRXJCLGtCQUFrQixHQUVuQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLHNCQUFzQixHQUFH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Q0QsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxFQUFFLENBQUM7YUFDUixJQUNFLENBQUMsYUFBYTtZQUNmLENBQUMsQ0FBQztnQkFDRSxhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEVBQUUsQ0FBQztpQkFDUjthQUNGO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNmO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtXZWJNZXJjYXRvclZpZXdwb3J0fSBmcm9tICdAbWF0aC5nbC93ZWItbWVyY2F0b3InO1xuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmcsIGV4dGVudCwgbWlufSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQge25lc3R9IGZyb20gJ2QzLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHtTY2FsZUxpbmVhciwgc2NhbGVMaW5lYXIsIHNjYWxlU3FydH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IEtEQnVzaCBmcm9tICdrZGJ1c2gnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcixcbiAgZGVmYXVsdE1lbW9pemUsXG4gIFBhcmFtZXRyaWNTZWxlY3Rvcixcbn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHthbGVhfSBmcm9tICdzZWVkcmFuZG9tJztcbmltcG9ydCB7Y2x1c3RlckxvY2F0aW9uc30gZnJvbSAnLi9jbHVzdGVyL2NsdXN0ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRJbmRleCxcbiAgQ2x1c3RlckluZGV4LFxuICBmaW5kQXBwcm9wcmlhdGVab29tTGV2ZWwsXG4gIG1ha2VMb2NhdGlvbldlaWdodEdldHRlcixcbn0gZnJvbSAnLi9jbHVzdGVyL0NsdXN0ZXJJbmRleCc7XG5pbXBvcnQgZ2V0Q29sb3JzLCB7XG4gIENvbG9yc1JHQkEsXG4gIERpZmZDb2xvcnNSR0JBLFxuICBnZXRDb2xvcnNSR0JBLFxuICBnZXREaWZmQ29sb3JzUkdCQSxcbiAgZ2V0Rmxvd0NvbG9yU2NhbGUsXG4gIGlzRGlmZkNvbG9ycyxcbiAgaXNEaWZmQ29sb3JzUkdCQSxcbn0gZnJvbSAnLi9jb2xvcnMnO1xuaW1wb3J0IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMgZnJvbSAnLi9GbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzJztcbmltcG9ydCB7Rmxvd21hcFN0YXRlfSBmcm9tICcuL0Zsb3dtYXBTdGF0ZSc7XG5pbXBvcnQge1xuICBnZXRUaW1lR3JhbnVsYXJpdHlCeUtleSxcbiAgZ2V0VGltZUdyYW51bGFyaXR5QnlPcmRlcixcbiAgZ2V0VGltZUdyYW51bGFyaXR5Rm9yRGF0ZSxcbiAgVGltZUdyYW51bGFyaXR5S2V5LFxufSBmcm9tICcuL3RpbWUnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlRmxvdyxcbiAgQ2x1c3RlcixcbiAgQ2x1c3Rlck5vZGUsXG4gIENvdW50QnlUaW1lLFxuICBGbG93QWNjZXNzb3JzLFxuICBGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcyxcbiAgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIGlzQ2x1c3RlcixcbiAgaXNMb2NhdGlvbkNsdXN0ZXJOb2RlLFxuICBMYXllcnNEYXRhLFxuICBMb2NhdGlvbkZpbHRlck1vZGUsXG4gIExvY2F0aW9uVG90YWxzLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgTUFYX0NMVVNURVJfWk9PTV9MRVZFTCA9IDIwO1xudHlwZSBLREJ1c2hUcmVlID0gYW55O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RvcjxMLCBGLCBUPiA9IFBhcmFtZXRyaWNTZWxlY3RvcjxcbiAgRmxvd21hcFN0YXRlLFxuICBGbG93bWFwRGF0YTxMLCBGPixcbiAgVFxuPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd21hcFNlbGVjdG9yczxMLCBGPiB7XG4gIGFjY2Vzc29yczogRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29yczxMLCBGPjtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KSB7XG4gICAgdGhpcy5hY2Nlc3NvcnMgPSBuZXcgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyhhY2Nlc3NvcnMpO1xuICAgIHRoaXMuc2V0QWNjZXNzb3JzKGFjY2Vzc29ycyk7XG4gIH1cblxuICBzZXRBY2Nlc3NvcnMoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPikge1xuICAgIHRoaXMuYWNjZXNzb3JzID0gbmV3IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMoYWNjZXNzb3JzKTtcbiAgfVxuXG4gIGdldEZldGNoZWRGbG93cyA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgcHJvcHMuZmxvd3M7XG4gIGdldEZldGNoZWRMb2NhdGlvbnMgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHByb3BzLmxvY2F0aW9ucztcbiAgZ2V0TWF4VG9wRmxvd3NEaXNwbGF5TnVtID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5nc1N0YXRlLm1heFRvcEZsb3dzRGlzcGxheU51bTtcbiAgZ2V0U2VsZWN0ZWRMb2NhdGlvbnMgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLmZpbHRlclN0YXRlLnNlbGVjdGVkTG9jYXRpb25zO1xuICBnZXRMb2NhdGlvbkZpbHRlck1vZGUgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLmZpbHRlclN0YXRlLmxvY2F0aW9uRmlsdGVyTW9kZTtcbiAgZ2V0Q2x1c3RlcmluZ0VuYWJsZWQgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLnNldHRpbmdzU3RhdGUuY2x1c3RlcmluZ0VuYWJsZWQ7XG4gIGdldExvY2F0aW9uVG90YWxzRW5hYmxlZCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuc2V0dGluZ3NTdGF0ZS5sb2NhdGlvblRvdGFsc0VuYWJsZWQ7XG4gIGdldFpvb20gPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLnZpZXdwb3J0Lnpvb207XG4gIGdldFZpZXdwb3J0ID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS52aWV3cG9ydDtcbiAgZ2V0U2VsZWN0ZWRUaW1lUmFuZ2UgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLmZpbHRlclN0YXRlLnNlbGVjdGVkVGltZVJhbmdlO1xuXG4gIGdldENvbG9yU2NoZW1lOiBTZWxlY3RvcjxMLCBGLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3NTdGF0ZS5jb2xvclNjaGVtZTtcblxuICBnZXREYXJrTW9kZTogU2VsZWN0b3I8TCwgRiwgYm9vbGVhbj4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3NTdGF0ZS5kYXJrTW9kZTtcblxuICBnZXRGYWRlRW5hYmxlZDogU2VsZWN0b3I8TCwgRiwgYm9vbGVhbj4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3NTdGF0ZS5mYWRlRW5hYmxlZDtcblxuICBnZXRGYWRlT3BhY2l0eUVuYWJsZWQ6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuZmFkZU9wYWNpdHlFbmFibGVkO1xuXG4gIGdldEZhZGVBbW91bnQ6IFNlbGVjdG9yPEwsIEYsIG51bWJlcj4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3NTdGF0ZS5mYWRlQW1vdW50O1xuXG4gIGdldEFuaW1hdGU6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuYW5pbWF0aW9uRW5hYmxlZDtcblxuICBnZXRJbnZhbGlkTG9jYXRpb25JZHM6IFNlbGVjdG9yPEwsIEYsIHN0cmluZ1tdIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0RmV0Y2hlZExvY2F0aW9ucyxcbiAgICAobG9jYXRpb25zKSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGludmFsaWQgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGxvbiA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTG9uKGxvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgbGF0ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25MYXQobG9jYXRpb24pO1xuICAgICAgICBpZiAoISgtOTAgPD0gbGF0ICYmIGxhdCA8PSA5MCkgfHwgISgtMTgwIDw9IGxvbiAmJiBsb24gPD0gMTgwKSkge1xuICAgICAgICAgIGludmFsaWQucHVzaChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnZhbGlkLmxlbmd0aCA+IDAgPyBpbnZhbGlkIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25zOiBTZWxlY3RvcjxMLCBGLCBJdGVyYWJsZTxMPiB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldEZldGNoZWRMb2NhdGlvbnMsXG4gICAgdGhpcy5nZXRJbnZhbGlkTG9jYXRpb25JZHMsXG4gICAgKGxvY2F0aW9ucywgaW52YWxpZElkcykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWludmFsaWRJZHMgfHwgaW52YWxpZElkcy5sZW5ndGggPT09IDApIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICBjb25zdCBpbnZhbGlkID0gbmV3IFNldChpbnZhbGlkSWRzKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkOiBMW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG4gICAgICAgIGlmICghaW52YWxpZC5oYXMoaWQpKSB7XG4gICAgICAgICAgZmlsdGVyZWQucHVzaChsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICB9LFxuICApO1xuXG4gIGdldExvY2F0aW9uSWRzOiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9ucyxcbiAgICAobG9jYXRpb25zKSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgaWRzLmFkZCh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGlkKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQ6IFNlbGVjdG9yPEwsIEYsIFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRTZWxlY3RlZExvY2F0aW9ucywgKGlkcykgPT5cbiAgICAgIGlkcyAmJiBpZHMubGVuZ3RoID4gMCA/IG5ldyBTZXQoaWRzKSA6IHVuZGVmaW5lZCxcbiAgICApO1xuXG4gIGdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnM6IFNlbGVjdG9yPEwsIEYsIEZbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0RmV0Y2hlZEZsb3dzLCB0aGlzLmdldExvY2F0aW9uSWRzLCAoZmxvd3MsIGlkcykgPT4ge1xuICAgICAgaWYgKCFpZHMgfHwgIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICBjb25zdCBzcmNJZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICAgICAgY29uc3QgZHN0SWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICBpZiAoaWRzLmhhcyhzcmNJZCkgJiYgaWRzLmhhcyhkc3RJZCkpIHtcbiAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGZsb3cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyZWQuc29ydCgoYTogRiwgYjogRikgPT5cbiAgICAgICAgZGVzY2VuZGluZyhcbiAgICAgICAgICBNYXRoLmFicyh0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGEpKSxcbiAgICAgICAgICBNYXRoLmFicyh0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGIpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgZ2V0QWN0dWFsVGltZUV4dGVudDogU2VsZWN0b3I8TCwgRiwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLCAoZmxvd3MpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBsZXQgc3RhcnQgPSBudWxsO1xuICAgICAgbGV0IGVuZCA9IG51bGw7XG4gICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dUaW1lKGZsb3cpO1xuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID4gdGltZSkgc3RhcnQgPSB0aW1lO1xuICAgICAgICAgIGlmIChlbmQgPT0gbnVsbCB8fCBlbmQgPCB0aW1lKSBlbmQgPSB0aW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICAgIH0pO1xuXG4gIGdldFRpbWVHcmFudWxhcml0eUtleTogU2VsZWN0b3I8TCwgRiwgVGltZUdyYW51bGFyaXR5S2V5IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgICB0aGlzLmdldEFjdHVhbFRpbWVFeHRlbnQsXG4gICAgICAoZmxvd3MsIHRpbWVFeHRlbnQpID0+IHtcbiAgICAgICAgaWYgKCFmbG93cyB8fCAhdGltZUV4dGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBtaW5PcmRlciA9IG1pbihmbG93cywgKGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZCk7XG4gICAgICAgICAgcmV0dXJuIHQgPyBnZXRUaW1lR3JhbnVsYXJpdHlGb3JEYXRlKHQpLm9yZGVyIDogbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtaW5PcmRlciA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0aW1lR3JhbnVsYXJpdHkgPSBnZXRUaW1lR3JhbnVsYXJpdHlCeU9yZGVyKG1pbk9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVHcmFudWxhcml0eSA/IHRpbWVHcmFudWxhcml0eS5rZXkgOiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0VGltZUV4dGVudDogU2VsZWN0b3I8TCwgRiwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0QWN0dWFsVGltZUV4dGVudCxcbiAgICB0aGlzLmdldFRpbWVHcmFudWxhcml0eUtleSxcbiAgICAodGltZUV4dGVudCwgdGltZUdyYW51bGFyaXR5S2V5KSA9PiB7XG4gICAgICBjb25zdCB0aW1lR3JhbnVsYXJpdHkgPSB0aW1lR3JhbnVsYXJpdHlLZXlcbiAgICAgICAgPyBnZXRUaW1lR3JhbnVsYXJpdHlCeUtleSh0aW1lR3JhbnVsYXJpdHlLZXkpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCF0aW1lRXh0ZW50IHx8ICF0aW1lR3JhbnVsYXJpdHk/LmludGVydmFsKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3Qge2ludGVydmFsfSA9IHRpbWVHcmFudWxhcml0eTtcbiAgICAgIHJldHVybiBbdGltZUV4dGVudFswXSwgaW50ZXJ2YWwub2Zmc2V0KGludGVydmFsLmZsb29yKHRpbWVFeHRlbnRbMV0pLCAxKV07XG4gICAgfSxcbiAgKTtcblxuICBnZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zRmlsdGVyZWRCeVRpbWU6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBGW10gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICB0aGlzLmdldFRpbWVFeHRlbnQsXG4gICAgdGhpcy5nZXRTZWxlY3RlZFRpbWVSYW5nZSxcbiAgICAoZmxvd3MsIHRpbWVFeHRlbnQsIHRpbWVSYW5nZSkgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChcbiAgICAgICAgIXRpbWVFeHRlbnQgfHxcbiAgICAgICAgIXRpbWVSYW5nZSB8fFxuICAgICAgICAodGltZUV4dGVudFswXSA9PT0gdGltZVJhbmdlWzBdICYmIHRpbWVFeHRlbnRbMV0gPT09IHRpbWVSYW5nZVsxXSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmxvd3M7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmxvd3MuZmlsdGVyKChmbG93KSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93VGltZShmbG93KTtcbiAgICAgICAgcmV0dXJuIHRpbWUgJiYgdGltZVJhbmdlWzBdIDw9IHRpbWUgJiYgdGltZSA8IHRpbWVSYW5nZVsxXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3M6IFNlbGVjdG9yPEwsIEYsIEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgICB0aGlzLmdldExvY2F0aW9ucyxcbiAgICAgIChmbG93cywgbG9jYXRpb25zKSA9PiB7XG4gICAgICAgIGlmICghbG9jYXRpb25zIHx8ICFmbG93cykgcmV0dXJuIGxvY2F0aW9ucztcbiAgICAgICAgY29uc3Qgd2l0aEZsb3dzID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICB3aXRoRmxvd3MuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KSk7XG4gICAgICAgICAgd2l0aEZsb3dzLmFkZCh0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgIGlmICh3aXRoRmxvd3MuaGFzKHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pKSkge1xuICAgICAgICAgICAgZmlsdGVyZWQucHVzaChsb2NhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvbnNCeUlkOiBTZWxlY3RvcjxMLCBGLCBNYXA8c3RyaW5nLCBMPiB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uc0hhdmluZ0Zsb3dzLFxuICAgIChsb2NhdGlvbnMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbG9jYXRpb25zQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBMPigpO1xuICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgbG9jYXRpb25zQnlJZC5zZXQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbiksIGxvY2F0aW9uKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsb2NhdGlvbnNCeUlkO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2x1c3RlckluZGV4OiBTZWxlY3RvcjxMLCBGLCBDbHVzdGVySW5kZXg8Rj4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cyxcbiAgICB0aGlzLmdldExvY2F0aW9uc0J5SWQsXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgIChsb2NhdGlvbnMsIGxvY2F0aW9uc0J5SWQsIGZsb3dzKSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9ucyB8fCAhbG9jYXRpb25zQnlJZCB8fCAhZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGdldExvY2F0aW9uV2VpZ2h0ID0gbWFrZUxvY2F0aW9uV2VpZ2h0R2V0dGVyKFxuICAgICAgICBmbG93cyxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbHVzdGVyTGV2ZWxzID0gY2x1c3RlckxvY2F0aW9ucyhcbiAgICAgICAgbG9jYXRpb25zLFxuICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93bWFwRGF0YUFjY2Vzc29ycygpLFxuICAgICAgICBnZXRMb2NhdGlvbldlaWdodCxcbiAgICAgICAge1xuICAgICAgICAgIG1heFpvb206IE1BWF9DTFVTVEVSX1pPT01fTEVWRUwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgY2x1c3RlckluZGV4ID0gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzKTtcbiAgICAgIGNvbnN0IHtnZXRMb2NhdGlvbk5hbWUsIGdldExvY2F0aW9uQ2x1c3Rlck5hbWV9ID1cbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKTtcblxuICAgICAgLy8gQWRkaW5nIG1lYW5pbmdmdWwgbmFtZXNcbiAgICAgIGNvbnN0IGdldE5hbWUgPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbnNCeUlkLmdldChpZCk7XG4gICAgICAgIGlmIChsb2MpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TG9jYXRpb25OYW1lXG4gICAgICAgICAgICA/IGdldExvY2F0aW9uTmFtZShsb2MpXG4gICAgICAgICAgICA6IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jKSB8fCBpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFwiJHtpZH1cImA7XG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBsZXZlbCBvZiBjbHVzdGVyTGV2ZWxzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsZXZlbC5ub2Rlcykge1xuICAgICAgICAgIC8vIEhlcmUgbXV0YXRpbmcgdGhlIG5vZGVzIChhZGRpbmcgbmFtZXMpXG4gICAgICAgICAgaWYgKGlzQ2x1c3Rlcihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgbGVhdmVzID0gY2x1c3RlckluZGV4LmV4cGFuZENsdXN0ZXIobm9kZSk7XG5cbiAgICAgICAgICAgIGxlYXZlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICBkZXNjZW5kaW5nKGdldExvY2F0aW9uV2VpZ2h0KGEpLCBnZXRMb2NhdGlvbldlaWdodChiKSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoZ2V0TG9jYXRpb25DbHVzdGVyTmFtZSkge1xuICAgICAgICAgICAgICBub2RlLm5hbWUgPSBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lKGxlYXZlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0b3BJZCA9IGxlYXZlc1swXTtcbiAgICAgICAgICAgICAgY29uc3Qgb3RoZXJJZCA9IGxlYXZlcy5sZW5ndGggPT09IDIgPyBsZWF2ZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIG5vZGUubmFtZSA9IGBcIiR7Z2V0TmFtZSh0b3BJZCl9XCIgYW5kICR7XG4gICAgICAgICAgICAgICAgb3RoZXJJZFxuICAgICAgICAgICAgICAgICAgPyBgXCIke2dldE5hbWUob3RoZXJJZCl9XCJgXG4gICAgICAgICAgICAgICAgICA6IGAke2xlYXZlcy5sZW5ndGggLSAxfSBvdGhlcnNgXG4gICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAobm9kZSBhcyBhbnkpLm5hbWUgPSBnZXROYW1lKG5vZGUuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2x1c3RlckluZGV4O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0QXZhaWxhYmxlQ2x1c3Rlclpvb21MZXZlbHMgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLFxuICAgIChjbHVzdGVySW5kZXgsIHNlbGVjdGVkTG9jYXRpb25zKTogbnVtYmVyW10gfCB1bmRlZmluZWQgPT4ge1xuICAgICAgaWYgKCFjbHVzdGVySW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IG1heFpvb20gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICBsZXQgbWluWm9vbSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICAgICAgY29uc3QgYWRqdXN0ID0gKHpvbmVJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3RlckJ5SWQoem9uZUlkKTtcbiAgICAgICAgaWYgKGNsdXN0ZXIpIHtcbiAgICAgICAgICBtaW5ab29tID0gTWF0aC5tYXgobWluWm9vbSwgY2x1c3Rlci56b29tKTtcbiAgICAgICAgICBtYXhab29tID0gTWF0aC5taW4obWF4Wm9vbSwgY2x1c3Rlci56b29tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB6b29tID0gY2x1c3RlckluZGV4LmdldE1pblpvb21Gb3JMb2NhdGlvbih6b25lSWQpO1xuICAgICAgICAgIG1pblpvb20gPSBNYXRoLm1heChtaW5ab29tLCB6b29tKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHNlbGVjdGVkTG9jYXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICBhZGp1c3QoaWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbHVzdGVySW5kZXguYXZhaWxhYmxlWm9vbUxldmVscy5maWx0ZXIoXG4gICAgICAgIChsZXZlbCkgPT4gbWluWm9vbSA8PSBsZXZlbCAmJiBsZXZlbCA8PSBtYXhab29tLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRDbHVzdGVyWm9vbTogU2VsZWN0b3I8TCwgRiwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgIHRoaXMuZ2V0Wm9vbSxcbiAgICB0aGlzLmdldEF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzLFxuICAgIChjbHVzdGVySW5kZXgsIG1hcFpvb20sIGF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzKSA9PiB7XG4gICAgICBpZiAoIWNsdXN0ZXJJbmRleCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmICghYXZhaWxhYmxlQ2x1c3Rlclpvb21MZXZlbHMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2x1c3Rlclpvb20gPSBmaW5kQXBwcm9wcmlhdGVab29tTGV2ZWwoXG4gICAgICAgIGF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzLFxuICAgICAgICBtYXBab29tLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjbHVzdGVyWm9vbTtcbiAgICB9LFxuICApO1xuXG4gIGdldENsdXN0ZXJab29tID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT4ge1xuICAgIGNvbnN0IHtzZXR0aW5nc1N0YXRlfSA9IHN0YXRlO1xuICAgIGlmICghc2V0dGluZ3NTdGF0ZS5jbHVzdGVyaW5nRW5hYmxlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoc2V0dGluZ3NTdGF0ZS5jbHVzdGVyaW5nQXV0byB8fCBzZXR0aW5nc1N0YXRlLmNsdXN0ZXJpbmdMZXZlbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q2x1c3Rlclpvb20oc3RhdGUsIHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldHRpbmdzU3RhdGUuY2x1c3RlcmluZ0xldmVsO1xuICB9O1xuXG4gIGdldExvY2F0aW9uc0ZvclNlYXJjaEJveDogU2VsZWN0b3I8TCwgRiwgKEwgfCBDbHVzdGVyKVtdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cyxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnMsXG4gICAgICB0aGlzLmdldENsdXN0ZXJab29tLFxuICAgICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgICAoXG4gICAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgICBsb2NhdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkTG9jYXRpb25zLFxuICAgICAgICBjbHVzdGVyWm9vbSxcbiAgICAgICAgY2x1c3RlckluZGV4LFxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzdWx0OiAoTCB8IENsdXN0ZXIpW10gPSBBcnJheS5mcm9tKGxvY2F0aW9ucyk7XG4gICAgICAgIC8vIGlmIChjbHVzdGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAvLyAgIGlmIChjbHVzdGVySW5kZXgpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHpvb21JdGVtcyA9IGNsdXN0ZXJJbmRleC5nZXRDbHVzdGVyTm9kZXNGb3IoY2x1c3Rlclpvb20pO1xuICAgICAgICAvLyAgICAgaWYgKHpvb21JdGVtcykge1xuICAgICAgICAvLyAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHpvb21JdGVtcy5maWx0ZXIoaXNDbHVzdGVyKSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgaWYgKGNsdXN0ZXJJbmRleCAmJiBzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHRvQXBwZW5kID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgY2x1c3RlciA9IGNsdXN0ZXJJbmRleC5nZXRDbHVzdGVyQnlJZChpZCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNsdXN0ZXIgJiZcbiAgICAgICAgICAgICAgIXJlc3VsdC5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgICAgKGlzTG9jYXRpb25DbHVzdGVyTm9kZShkKVxuICAgICAgICAgICAgICAgICAgICA/IGQuaWRcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGQpKSA9PT0gaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0b0FwcGVuZC5wdXNoKGNsdXN0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG9BcHBlbmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0b0FwcGVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0RGlmZk1vZGU6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRGZXRjaGVkRmxvd3MsXG4gICAgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoZmxvd3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRGbG93bWFwQ29sb3JzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXREaWZmTW9kZSxcbiAgICB0aGlzLmdldENvbG9yU2NoZW1lLFxuICAgIHRoaXMuZ2V0RGFya01vZGUsXG4gICAgdGhpcy5nZXRGYWRlRW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVBbW91bnQsXG4gICAgdGhpcy5nZXRBbmltYXRlLFxuICAgIGdldENvbG9ycyxcbiAgKTtcblxuICBnZXRGbG93bWFwQ29sb3JzUkdCQSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuX2dldEZsb3dtYXBDb2xvcnMsXG4gICAgKGZsb3dtYXBDb2xvcnMpID0+IHtcbiAgICAgIHJldHVybiBpc0RpZmZDb2xvcnMoZmxvd21hcENvbG9ycylcbiAgICAgICAgPyBnZXREaWZmQ29sb3JzUkdCQShmbG93bWFwQ29sb3JzKVxuICAgICAgICA6IGdldENvbG9yc1JHQkEoZmxvd21hcENvbG9ycyk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRVbmtub3duTG9jYXRpb25zOiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uSWRzLFxuICAgIHRoaXMuZ2V0RmV0Y2hlZEZsb3dzLFxuICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAoaWRzLCBmbG93cywgZmxvd3NGb3JLbm93bkxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFpZHMgfHwgIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBmbG93c0Zvcktub3duTG9jYXRpb25zXG4gICAgICAgIC8vICYmIGZsb3dzLmxlbmd0aCA9PT0gZmxvd3NGb3JLbm93bkxvY2F0aW9ucy5sZW5ndGhcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG1pc3NpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICBpZiAoIWlkcy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKSlcbiAgICAgICAgICBtaXNzaW5nLmFkZCh0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdykpO1xuICAgICAgICBpZiAoIWlkcy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSkpXG4gICAgICAgICAgbWlzc2luZy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWlzc2luZztcbiAgICB9LFxuICApO1xuXG4gIGdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzOiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgKEYgfCBBZ2dyZWdhdGVGbG93KVtdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9uc0ZpbHRlcmVkQnlUaW1lLFxuICAgIHRoaXMuZ2V0Q2x1c3Rlclpvb20sXG4gICAgdGhpcy5nZXRUaW1lRXh0ZW50LFxuICAgIChjbHVzdGVyVHJlZSwgaXNDbHVzdGVyaW5nRW5hYmxlZCwgZmxvd3MsIGNsdXN0ZXJab29tLCB0aW1lRXh0ZW50KSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgbGV0IGFnZ3JlZ2F0ZWQ6IChGIHwgQWdncmVnYXRlRmxvdylbXTtcbiAgICAgIGlmIChpc0NsdXN0ZXJpbmdFbmFibGVkICYmIGNsdXN0ZXJUcmVlICYmIGNsdXN0ZXJab29tICE9IG51bGwpIHtcbiAgICAgICAgYWdncmVnYXRlZCA9IGNsdXN0ZXJUcmVlLmFnZ3JlZ2F0ZUZsb3dzKFxuICAgICAgICAgIC8vIFRPRE86IGFnZ3JlZ2F0ZSBhY3Jvc3MgdGltZVxuICAgICAgICAgIC8vIHRpbWVFeHRlbnQgIT0gbnVsbFxuICAgICAgICAgIC8vICAgPyBhZ2dyZWdhdGVGbG93cyhmbG93cykgLy8gY2x1c3RlclRyZWUuYWdncmVnYXRlRmxvd3Mgd29uJ3QgYWdncmVnYXRlIHVuY2x1c3RlcmVkIGFjcm9zcyB0aW1lXG4gICAgICAgICAgLy8gICA6IGZsb3dzLFxuICAgICAgICAgIGZsb3dzLFxuICAgICAgICAgIGNsdXN0ZXJab29tLFxuICAgICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZ2dyZWdhdGVkID0gYWdncmVnYXRlRmxvd3MoXG4gICAgICAgICAgZmxvd3MsXG4gICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFnZ3JlZ2F0ZWQuc29ydCgoYSwgYikgPT5cbiAgICAgICAgZGVzY2VuZGluZyhcbiAgICAgICAgICBNYXRoLmFicyh0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGEpKSxcbiAgICAgICAgICBNYXRoLmFicyh0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGIpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWdncmVnYXRlZDtcbiAgICB9LFxuICApO1xuXG4gIGdldEV4cGFuZGVkU2VsZWN0ZWRMb2NhdGlvbnNTZXQ6IFNlbGVjdG9yPEwsIEYsIFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgKGNsdXN0ZXJpbmdFbmFibGVkLCBzZWxlY3RlZExvY2F0aW9ucywgY2x1c3RlckluZGV4KSA9PiB7XG4gICAgICAgIGlmICghc2VsZWN0ZWRMb2NhdGlvbnMgfHwgIWNsdXN0ZXJJbmRleCkge1xuICAgICAgICAgIHJldHVybiBzZWxlY3RlZExvY2F0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uSWQgb2Ygc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKGxvY2F0aW9uSWQpO1xuICAgICAgICAgIGlmIChjbHVzdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IGNsdXN0ZXJJbmRleC5leHBhbmRDbHVzdGVyKGNsdXN0ZXIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBleHBhbmRlZCkge1xuICAgICAgICAgICAgICByZXN1bHQuYWRkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmFkZChsb2NhdGlvbklkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRUb3RhbENvdW50c0J5VGltZTogU2VsZWN0b3I8TCwgRiwgQ291bnRCeVRpbWVbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRUaW1lR3JhbnVsYXJpdHlLZXksXG4gICAgICB0aGlzLmdldFRpbWVFeHRlbnQsXG4gICAgICB0aGlzLmdldEV4cGFuZGVkU2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIChcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIHRpbWVHcmFudWxhcml0eUtleSxcbiAgICAgICAgdGltZUV4dGVudCxcbiAgICAgICAgc2VsZWN0ZWRMb2NhdGlvblNldCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IHRpbWVHcmFudWxhcml0eUtleVxuICAgICAgICAgID8gZ2V0VGltZUdyYW51bGFyaXR5QnlLZXkodGltZUdyYW51bGFyaXR5S2V5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWZsb3dzIHx8ICF0aW1lR3JhbnVsYXJpdHkgfHwgIXRpbWVFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGJ5VGltZSA9IGZsb3dzLnJlZHVjZSgobSwgZmxvdykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oXG4gICAgICAgICAgICAgIGZsb3csXG4gICAgICAgICAgICAgIHNlbGVjdGVkTG9jYXRpb25TZXQsXG4gICAgICAgICAgICAgIGxvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRpbWVHcmFudWxhcml0eVxuICAgICAgICAgICAgICAuaW50ZXJ2YWwodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZmxvdykpXG4gICAgICAgICAgICAgIC5nZXRUaW1lKCk7XG4gICAgICAgICAgICBtLnNldChcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAobS5nZXQoa2V5KSA/PyAwKSArIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZmxvdyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKSk7XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oYnlUaW1lLmVudHJpZXMoKSkubWFwKChbbWlsbGlzLCBjb3VudF0pID0+ICh7XG4gICAgICAgICAgdGltZTogbmV3IERhdGUobWlsbGlzKSxcbiAgICAgICAgICBjb3VudCxcbiAgICAgICAgfSkpO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldE1heExvY2F0aW9uQ2lyY2xlU2l6ZTogU2VsZWN0b3I8TCwgRiwgbnVtYmVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgIChsb2NhdGlvblRvdGFsc0VuYWJsZWQpID0+IChsb2NhdGlvblRvdGFsc0VuYWJsZWQgPyAxNyA6IDEpLFxuICApO1xuXG4gIGdldFZpZXdwb3J0Qm91bmRpbmdCb3g6IFNlbGVjdG9yPEwsIEYsIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFZpZXdwb3J0LFxuICAgICAgdGhpcy5nZXRNYXhMb2NhdGlvbkNpcmNsZVNpemUsXG4gICAgICAodmlld3BvcnQsIG1heExvY2F0aW9uQ2lyY2xlU2l6ZSkgPT4ge1xuICAgICAgICBjb25zdCBwYWQgPSBtYXhMb2NhdGlvbkNpcmNsZVNpemU7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICAgICAgICAuLi52aWV3cG9ydCxcbiAgICAgICAgICB3aWR0aDogdmlld3BvcnQud2lkdGggKyBwYWQgKiAyLFxuICAgICAgICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0ICsgcGFkICogMixcbiAgICAgICAgfSkuZ2V0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiBbYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIGJvdW5kc1sxXVswXSwgYm91bmRzWzFdWzFdXTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3Jab29tOiBTZWxlY3RvcjxMLCBGLCBJdGVyYWJsZTxMPiB8IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uc0hhdmluZ0Zsb3dzLFxuICAgICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgICB0aGlzLmdldENsdXN0ZXJab29tLFxuICAgICAgKGNsdXN0ZXJpbmdFbmFibGVkLCBsb2NhdGlvbnNIYXZpbmdGbG93cywgY2x1c3RlckluZGV4LCBjbHVzdGVyWm9vbSkgPT4ge1xuICAgICAgICBpZiAoY2x1c3RlcmluZ0VuYWJsZWQgJiYgY2x1c3RlckluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGNsdXN0ZXJJbmRleC5nZXRDbHVzdGVyTm9kZXNGb3IoY2x1c3Rlclpvb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBsb2NhdGlvbnNIYXZpbmdGbG93cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uVG90YWxzOiBTZWxlY3RvcjxMLCBGLCBNYXA8c3RyaW5nLCBMb2NhdGlvblRvdGFscz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yWm9vbSxcbiAgICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAobG9jYXRpb25zLCBmbG93cywgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0b3RhbHMgPSBuZXcgTWFwPHN0cmluZywgTG9jYXRpb25Ub3RhbHM+KCk7XG4gICAgICAgIGNvbnN0IGFkZCA9IChcbiAgICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICAgIGQ6IFBhcnRpYWw8TG9jYXRpb25Ub3RhbHM+LFxuICAgICAgICApOiBMb2NhdGlvblRvdGFscyA9PiB7XG4gICAgICAgICAgY29uc3QgcnYgPSB0b3RhbHMuZ2V0KGlkKSA/PyB7XG4gICAgICAgICAgICBpbmNvbWluZ0NvdW50OiAwLFxuICAgICAgICAgICAgb3V0Z29pbmdDb3VudDogMCxcbiAgICAgICAgICAgIGludGVybmFsQ291bnQ6IDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoZC5pbmNvbWluZ0NvdW50ICE9IG51bGwpIHJ2LmluY29taW5nQ291bnQgKz0gZC5pbmNvbWluZ0NvdW50O1xuICAgICAgICAgIGlmIChkLm91dGdvaW5nQ291bnQgIT0gbnVsbCkgcnYub3V0Z29pbmdDb3VudCArPSBkLm91dGdvaW5nQ291bnQ7XG4gICAgICAgICAgaWYgKGQuaW50ZXJuYWxDb3VudCAhPSBudWxsKSBydi5pbnRlcm5hbENvdW50ICs9IGQuaW50ZXJuYWxDb3VudDtcbiAgICAgICAgICByZXR1cm4gcnY7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmbG93cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oZiwgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGYpO1xuICAgICAgICAgICAgY29uc3QgZGVzdElkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5JZCA9PT0gZGVzdElkKSB7XG4gICAgICAgICAgICAgIHRvdGFscy5zZXQob3JpZ2luSWQsIGFkZChvcmlnaW5JZCwge2ludGVybmFsQ291bnQ6IGNvdW50fSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG90YWxzLnNldChvcmlnaW5JZCwgYWRkKG9yaWdpbklkLCB7b3V0Z29pbmdDb3VudDogY291bnR9KSk7XG4gICAgICAgICAgICAgIHRvdGFscy5zZXQoZGVzdElkLCBhZGQoZGVzdElkLCB7aW5jb21pbmdDb3VudDogY291bnR9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbHM7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25zVHJlZTogU2VsZWN0b3I8TCwgRiwgS0RCdXNoVHJlZT4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uc0Zvclpvb20sXG4gICAgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgS0RCdXNoKFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgKGxvY2F0aW9uOiBMIHwgQ2x1c3Rlck5vZGUpID0+XG4gICAgICAgICAgbG5nWCh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2NhdGlvbikpLFxuICAgICAgICAobG9jYXRpb246IEwgfCBDbHVzdGVyTm9kZSkgPT5cbiAgICAgICAgICBsYXRZKHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTGF0KGxvY2F0aW9uKSksXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgX2dldExvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zVHJlZSxcbiAgICAgIHRoaXMuZ2V0Vmlld3BvcnRCb3VuZGluZ0JveCxcbiAgICAgICh0cmVlOiBLREJ1c2hUcmVlLCBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgPT4ge1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLl9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKHRyZWUsIGJib3gpO1xuICAgICAgICBpZiAoaWRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTZXQoXG4gICAgICAgICAgICBpZHMubWFwKChpZHg6IG51bWJlcikgPT4gdHJlZS5wb2ludHNbaWR4XS5pZCkgYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0OiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcihcbiAgICAgIGRlZmF1bHRNZW1vaXplLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgKFxuICAgICAgICBzMTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIHMyOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoczEgPT09IHMyKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHMxID09IG51bGwgfHwgczIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoczEuc2l6ZSAhPT0gczIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgczEpIGlmICghczIuaGFzKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICApKFxuICAgICAgdGhpcy5fZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgKGxvY2F0aW9uSWRzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9uSWRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbG9jYXRpb25JZHM7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0VG90YWxVbmZpbHRlcmVkQ291bnQ6IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGZsb3dzLnJlZHVjZShcbiAgICAgICAgKG0sIGZsb3cpID0+IG0gKyB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIGdldFRvdGFsRmlsdGVyZWRDb3VudDogU2VsZWN0b3I8TCwgRiwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAoZmxvd3MsIHNlbGVjdGVkTG9jYXRpb25TZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNvdW50ID0gZmxvd3MucmVkdWNlKChtLCBmbG93KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKGZsb3csIHNlbGVjdGVkTG9jYXRpb25TZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG0gKyB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQ6IFNlbGVjdG9yPEwsIEYsIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9uVG90YWxzLCAobG9jYXRpb25Ub3RhbHMpID0+XG4gICAgICBjYWxjTG9jYXRpb25Ub3RhbHNFeHRlbnQobG9jYXRpb25Ub3RhbHMsIHVuZGVmaW5lZCksXG4gICAgKTtcblxuICBfZ2V0TG9jYXRpb25Ub3RhbHNGb3JWaWV3cG9ydEV4dGVudDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgKGxvY2F0aW9uVG90YWxzLCBsb2NhdGlvbnNJblZpZXdwb3J0KSA9PlxuICAgICAgY2FsY0xvY2F0aW9uVG90YWxzRXh0ZW50KGxvY2F0aW9uVG90YWxzLCBsb2NhdGlvbnNJblZpZXdwb3J0KSxcbiAgKTtcblxuICBnZXRMb2NhdGlvblRvdGFsc0V4dGVudCA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHN0YXRlLnNldHRpbmdzU3RhdGUuYWRhcHRpdmVTY2FsZXNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0TG9jYXRpb25Ub3RhbHNGb3JWaWV3cG9ydEV4dGVudChzdGF0ZSwgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQoc3RhdGUsIHByb3BzKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXI6IFNlbGVjdG9yPEwsIEYsIChGIHwgQWdncmVnYXRlRmxvdylbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRBZ2dyZWdhdGVkRmlsdGVyZWRGbG93cyxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgdGhpcy5nZXRNYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgICAoXG4gICAgICAgIGZsb3dzLFxuICAgICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAgIG1heFRvcEZsb3dzRGlzcGxheU51bSxcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzIHx8ICFsb2NhdGlvbklkc0luVmlld3BvcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBpY2tlZDogKEYgfCBBZ2dyZWdhdGVGbG93KVtdID0gW107XG4gICAgICAgIGxldCBwaWNrZWRDb3VudCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICAgICAgICBjb25zdCBkZXN0ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKG9yaWdpbikgfHxcbiAgICAgICAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5oYXMoZGVzdClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihcbiAgICAgICAgICAgICAgICBmbG93LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChvcmlnaW4gIT09IGRlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBleGNsdWRlIHNlbGYtbG9vcHNcbiAgICAgICAgICAgICAgICBwaWNrZWQucHVzaChmbG93KTtcbiAgICAgICAgICAgICAgICBwaWNrZWRDb3VudCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIE9ubHkga2VlcCB0b3BcbiAgICAgICAgICBpZiAocGlja2VkQ291bnQgPiBtYXhUb3BGbG93c0Rpc3BsYXlOdW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyLFxuICAgICAgICAvLyB3ZSBuZWVkIGFzY2VuZGluZyBmb3IgcmVuZGVyaW5nXG4gICAgICAgIHJldHVybiBwaWNrZWQucmV2ZXJzZSgpO1xuICAgICAgfSxcbiAgICApO1xuXG4gIF9nZXRGbG93TWFnbml0dWRlRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzLFxuICAgICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgKGZsb3dzLCBzZWxlY3RlZExvY2F0aW9uc1NldCwgbG9jYXRpb25GaWx0ZXJNb2RlKSA9PiB7XG4gICAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBydjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGYpICE9PVxuICAgICAgICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGYpICYmXG4gICAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKGYsIHNlbGVjdGVkTG9jYXRpb25zU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZik7XG4gICAgICAgICAgICBpZiAocnYgPT0gbnVsbCkge1xuICAgICAgICAgICAgICBydiA9IFtjb3VudCwgY291bnRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNvdW50IDwgcnZbMF0pIHJ2WzBdID0gY291bnQ7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA+IHJ2WzFdKSBydlsxXSA9IGNvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9LFxuICAgICk7XG5cbiAgX2dldEFkYXB0aXZlRmxvd01hZ25pdHVkZUV4dGVudDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXIsIChmbG93cykgPT4ge1xuICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcnYgPSBleHRlbnQoZmxvd3MsIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUpO1xuICAgIHJldHVybiBydlswXSAhPT0gdW5kZWZpbmVkICYmIHJ2WzFdICE9PSB1bmRlZmluZWQgPyBydiA6IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgZ2V0Rmxvd01hZ25pdHVkZUV4dGVudCA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHN0YXRlLnNldHRpbmdzU3RhdGUuYWRhcHRpdmVTY2FsZXNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0QWRhcHRpdmVGbG93TWFnbml0dWRlRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRGbG93TWFnbml0dWRlRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfVxuICB9O1xuXG4gIGdldExvY2F0aW9uTWF4QWJzVG90YWxHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChsb2NhdGlvblRvdGFscykgPT4ge1xuICAgICAgcmV0dXJuIChsb2NhdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBsb2NhdGlvblRvdGFscz8uZ2V0KGxvY2F0aW9uSWQpO1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgTWF0aC5hYnModG90YWwuaW5jb21pbmdDb3VudCArIHRvdGFsLmludGVybmFsQ291bnQpLFxuICAgICAgICAgIE1hdGguYWJzKHRvdGFsLm91dGdvaW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfSxcbiAgKTtcblxuICBnZXRGbG93VGhpY2tuZXNzU2NhbGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldEZsb3dNYWduaXR1ZGVFeHRlbnQsXG4gICAgKG1hZ25pdHVkZUV4dGVudCkgPT4ge1xuICAgICAgaWYgKCFtYWduaXR1ZGVFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gc2NhbGVMaW5lYXIoKVxuICAgICAgICAucmFuZ2UoWzAuMDI1LCAwLjVdKVxuICAgICAgICAuZG9tYWluKFtcbiAgICAgICAgICAwLFxuICAgICAgICAgIC8vIHNob3VsZCBzdXBwb3J0IGRpZmYgbW9kZSB0b29cbiAgICAgICAgICBNYXRoLm1heC5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBtYWduaXR1ZGVFeHRlbnQubWFwKCh4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IE1hdGguYWJzKHggfHwgMCkpLFxuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2lyY2xlU2l6ZVNjYWxlID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRNYXhMb2NhdGlvbkNpcmNsZVNpemUsXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFsc0VuYWJsZWQsXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFsc0V4dGVudCxcbiAgICAobWF4TG9jYXRpb25DaXJjbGVTaXplLCBsb2NhdGlvblRvdGFsc0VuYWJsZWQsIGxvY2F0aW9uVG90YWxzRXh0ZW50KSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9uVG90YWxzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gKCkgPT4gbWF4TG9jYXRpb25DaXJjbGVTaXplO1xuICAgICAgfVxuICAgICAgaWYgKCFsb2NhdGlvblRvdGFsc0V4dGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBzY2FsZVNxcnQoKVxuICAgICAgICAucmFuZ2UoWzAsIG1heExvY2F0aW9uQ2lyY2xlU2l6ZV0pXG4gICAgICAgIC5kb21haW4oW1xuICAgICAgICAgIDAsXG4gICAgICAgICAgLy8gc2hvdWxkIHN1cHBvcnQgZGlmZiBtb2RlIHRvb1xuICAgICAgICAgIE1hdGgubWF4LmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGxvY2F0aW9uVG90YWxzRXh0ZW50Lm1hcCgoeDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgICAgICAgICBNYXRoLmFicyh4IHx8IDApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICB9LFxuICApO1xuXG4gIGdldEluQ2lyY2xlU2l6ZUdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2lyY2xlU2l6ZVNjYWxlLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgKGNpcmNsZVNpemVTY2FsZSwgbG9jYXRpb25Ub3RhbHMpID0+IHtcbiAgICAgIHJldHVybiAobG9jYXRpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbG9jYXRpb25Ub3RhbHM/LmdldChsb2NhdGlvbklkKTtcbiAgICAgICAgaWYgKHRvdGFsICYmIGNpcmNsZVNpemVTY2FsZSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaXJjbGVTaXplU2NhbGUoXG4gICAgICAgICAgICAgIE1hdGguYWJzKHRvdGFsLmluY29taW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgICAgICkgfHwgMFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0T3V0Q2lyY2xlU2l6ZUdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2lyY2xlU2l6ZVNjYWxlLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgKGNpcmNsZVNpemVTY2FsZSwgbG9jYXRpb25Ub3RhbHMpID0+IHtcbiAgICAgIHJldHVybiAobG9jYXRpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbG9jYXRpb25Ub3RhbHM/LmdldChsb2NhdGlvbklkKTtcbiAgICAgICAgaWYgKHRvdGFsICYmIGNpcmNsZVNpemVTY2FsZSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaXJjbGVTaXplU2NhbGUoXG4gICAgICAgICAgICAgIE1hdGguYWJzKHRvdGFsLm91dGdvaW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgICAgICkgfHwgMFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0U29ydGVkTG9jYXRpb25zRm9yWm9vbTogU2VsZWN0b3I8TCwgRiwgTFtdIHwgQ2x1c3Rlck5vZGVbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnNGb3Jab29tLFxuICAgICAgdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIsXG4gICAgICB0aGlzLmdldE91dENpcmNsZVNpemVHZXR0ZXIsXG4gICAgICAobG9jYXRpb25zLCBnZXRJbkNpcmNsZVNpemUsIGdldE91dENpcmNsZVNpemUpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5leHRMb2NhdGlvbnMgPSBbLi4ubG9jYXRpb25zXSBhcyBMW10gfCBDbHVzdGVyTm9kZVtdO1xuICAgICAgICByZXR1cm4gbmV4dExvY2F0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRBID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChhKTtcbiAgICAgICAgICBjb25zdCBpZEIgPSB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGIpO1xuICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcoXG4gICAgICAgICAgICBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUoaWRBKSwgZ2V0T3V0Q2lyY2xlU2l6ZShpZEEpKSxcbiAgICAgICAgICAgIE1hdGgubWF4KGdldEluQ2lyY2xlU2l6ZShpZEIpLCBnZXRPdXRDaXJjbGVTaXplKGlkQikpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcjogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIEFycmF5PEwgfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0U29ydGVkTG9jYXRpb25zRm9yWm9vbSxcbiAgICAvLyB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICAvLyBsb2NhdGlvbklkc0luVmlld3BvcnRcbiAgICApID0+IHtcbiAgICAgIC8vIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgLy8gaWYgKCFsb2NhdGlvbklkc0luVmlld3BvcnQpIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICAvLyBpZiAobG9jYXRpb25JZHNJblZpZXdwb3J0LnNpemUgPT09IGxvY2F0aW9ucy5sZW5ndGgpIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICAvLyBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgLy8gZm9yIChjb25zdCBsb2Mgb2YgbG9jYXRpb25zKSB7XG4gICAgICAvLyAgIGlmIChsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKGxvYy5pZCkpIHtcbiAgICAgIC8vICAgICBmaWx0ZXJlZC5wdXNoKGxvYyk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIC8vIHJldHVybiBsb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgLy8gICAobG9jOiBMIHwgQ2x1c3Rlck5vZGUpID0+IGxvY2F0aW9uSWRzSW5WaWV3cG9ydCEuaGFzKGxvYy5pZClcbiAgICAgIC8vICk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gbG9jYXRpb24gaW4gdmlld3BvcnQgKyBcImNvbm5lY3RlZFwiIG9uZXNcbiAgICAgIHJldHVybiBsb2NhdGlvbnM7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXJCeUlkOiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgTWFwPHN0cmluZywgTCB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXIsIChsb2NhdGlvbnMpID0+IHtcbiAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbG9jYXRpb25zLnJlZHVjZShcbiAgICAgIChtLCBkKSA9PiAobS5zZXQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChkKSwgZCksIG0pLFxuICAgICAgbmV3IE1hcCgpLFxuICAgICk7XG4gIH0pO1xuXG4gIGdldExheWVyc0RhdGE6IFNlbGVjdG9yPEwsIEYsIExheWVyc0RhdGE+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXIsXG4gICAgdGhpcy5nZXRGbG93c0ZvckZsb3dtYXBMYXllcixcbiAgICB0aGlzLmdldEZsb3dtYXBDb2xvcnNSR0JBLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyQnlJZCxcbiAgICB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICB0aGlzLmdldEluQ2lyY2xlU2l6ZUdldHRlcixcbiAgICB0aGlzLmdldE91dENpcmNsZVNpemVHZXR0ZXIsXG4gICAgdGhpcy5nZXRGbG93VGhpY2tuZXNzU2NhbGUsXG4gICAgdGhpcy5nZXRBbmltYXRlLFxuICAgIChcbiAgICAgIGxvY2F0aW9ucyxcbiAgICAgIGZsb3dzLFxuICAgICAgZmxvd21hcENvbG9ycyxcbiAgICAgIGxvY2F0aW9uc0J5SWQsXG4gICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgICBnZXRJbkNpcmNsZVNpemUsXG4gICAgICBnZXRPdXRDaXJjbGVTaXplLFxuICAgICAgZmxvd1RoaWNrbmVzc1NjYWxlLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9wcmVwYXJlTGF5ZXJzRGF0YShcbiAgICAgICAgbG9jYXRpb25zLFxuICAgICAgICBmbG93cyxcbiAgICAgICAgZmxvd21hcENvbG9ycyxcbiAgICAgICAgbG9jYXRpb25zQnlJZCxcbiAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgICBnZXRJbkNpcmNsZVNpemUsXG4gICAgICAgIGdldE91dENpcmNsZVNpemUsXG4gICAgICAgIGZsb3dUaGlja25lc3NTY2FsZSxcbiAgICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBwcmVwYXJlTGF5ZXJzRGF0YShzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pOiBMYXllcnNEYXRhIHtcbiAgICBjb25zdCBsb2NhdGlvbnMgPSB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcihzdGF0ZSwgcHJvcHMpIHx8IFtdO1xuICAgIGNvbnN0IGZsb3dzID0gdGhpcy5nZXRGbG93c0ZvckZsb3dtYXBMYXllcihzdGF0ZSwgcHJvcHMpIHx8IFtdO1xuICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSB0aGlzLmdldEZsb3dtYXBDb2xvcnNSR0JBKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgbG9jYXRpb25zQnlJZCA9IHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyQnlJZChzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGxvY2F0aW9uSWRzSW5WaWV3cG9ydCA9IHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0KHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZ2V0SW5DaXJjbGVTaXplID0gdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIoc3RhdGUsIHByb3BzKTtcbiAgICBjb25zdCBnZXRPdXRDaXJjbGVTaXplID0gdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZmxvd1RoaWNrbmVzc1NjYWxlID0gdGhpcy5nZXRGbG93VGhpY2tuZXNzU2NhbGUoc3RhdGUsIHByb3BzKTtcbiAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUxheWVyc0RhdGEoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICBmbG93cyxcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBsb2NhdGlvbnNCeUlkLFxuICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgZ2V0T3V0Q2lyY2xlU2l6ZSxcbiAgICAgIGZsb3dUaGlja25lc3NTY2FsZSxcbiAgICAgIHN0YXRlLnNldHRpbmdzU3RhdGUuYW5pbWF0aW9uRW5hYmxlZCxcbiAgICApO1xuICB9XG5cbiAgX3ByZXBhcmVMYXllcnNEYXRhKFxuICAgIGxvY2F0aW9uczogKEwgfCBDbHVzdGVyTm9kZSlbXSB8IHVuZGVmaW5lZCxcbiAgICBmbG93czogKEYgfCBBZ2dyZWdhdGVGbG93KVtdIHwgdW5kZWZpbmVkLFxuICAgIGZsb3dtYXBDb2xvcnM6IERpZmZDb2xvcnNSR0JBIHwgQ29sb3JzUkdCQSxcbiAgICBsb2NhdGlvbnNCeUlkOiBNYXA8c3RyaW5nLCBMIHwgQ2x1c3Rlck5vZGU+IHwgdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgZ2V0SW5DaXJjbGVTaXplOiAobG9jYXRpb25JZDogc3RyaW5nKSA9PiBudW1iZXIsXG4gICAgZ2V0T3V0Q2lyY2xlU2l6ZTogKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4gbnVtYmVyLFxuICAgIGZsb3dUaGlja25lc3NTY2FsZTogU2NhbGVMaW5lYXI8bnVtYmVyLCBudW1iZXIsIG5ldmVyPiB8IHVuZGVmaW5lZCxcbiAgICBhbmltYXRpb25FbmFibGVkOiBib29sZWFuLFxuICApOiBMYXllcnNEYXRhIHtcbiAgICBpZiAoIWxvY2F0aW9ucykgbG9jYXRpb25zID0gW107XG4gICAgaWYgKCFmbG93cykgZmxvd3MgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBnZXRGbG93T3JpZ2luSWQsXG4gICAgICBnZXRGbG93RGVzdElkLFxuICAgICAgZ2V0Rmxvd01hZ25pdHVkZSxcbiAgICAgIGdldExvY2F0aW9uSWQsXG4gICAgICBnZXRMb2NhdGlvbkxvbixcbiAgICAgIGdldExvY2F0aW9uTGF0LFxuICAgIH0gPSB0aGlzLmFjY2Vzc29ycztcblxuICAgIGNvbnN0IGZsb3dNYWduaXR1ZGVFeHRlbnQgPSBleHRlbnQoZmxvd3MsIChmKSA9PiBnZXRGbG93TWFnbml0dWRlKGYpKSBhcyBbXG4gICAgICBudW1iZXIsXG4gICAgICBudW1iZXIsXG4gICAgXTtcbiAgICBjb25zdCBmbG93Q29sb3JTY2FsZSA9IGdldEZsb3dDb2xvclNjYWxlKFxuICAgICAgZmxvd21hcENvbG9ycyxcbiAgICAgIGZsb3dNYWduaXR1ZGVFeHRlbnQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuXG4gICAgLy8gVXNpbmcgYSBnZW5lcmF0b3IgaGVyZSBoZWxwcyB0byBhdm9pZCBjcmVhdGluZyBpbnRlcm1lZGlhcnkgYXJyYXlzXG4gICAgY29uc3QgY2lyY2xlUG9zaXRpb25zID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICB5aWVsZCBnZXRMb2NhdGlvbkxvbihsb2NhdGlvbik7XG4gICAgICAgICAgeWllbGQgZ2V0TG9jYXRpb25MYXQobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG5cbiAgICAvLyBUT0RPOiBkaWZmIG1vZGVcbiAgICBjb25zdCBjaXJjbGVDb2xvciA9IGlzRGlmZkNvbG9yc1JHQkEoZmxvd21hcENvbG9ycylcbiAgICAgID8gZmxvd21hcENvbG9ycy5wb3NpdGl2ZS5sb2NhdGlvbkNpcmNsZXMuaW5uZXJcbiAgICAgIDogZmxvd21hcENvbG9ycy5sb2NhdGlvbkNpcmNsZXMuaW5uZXI7XG5cbiAgICBjb25zdCBjaXJjbGVDb2xvcnMgPSBVaW50OEFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICB5aWVsZCogY2lyY2xlQ29sb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcblxuICAgIGNvbnN0IGluQ2lyY2xlUmFkaWkgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGlkID0gZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG4gICAgICAgICAgeWllbGQgbG9jYXRpb25JZHNJblZpZXdwb3J0Py5oYXMoaWQpID8gZ2V0SW5DaXJjbGVTaXplKGlkKSA6IDEuMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuICAgIGNvbnN0IG91dENpcmNsZVJhZGlpID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICAgIHlpZWxkIGxvY2F0aW9uSWRzSW5WaWV3cG9ydD8uaGFzKGlkKSA/IGdldE91dENpcmNsZVNpemUoaWQpIDogMS4wO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG5cbiAgICBjb25zdCBzb3VyY2VQb3NpdGlvbnMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbnNCeUlkPy5nZXQoZ2V0Rmxvd09yaWdpbklkKGZsb3cpKTtcbiAgICAgICAgICB5aWVsZCBsb2MgPyBnZXRMb2NhdGlvbkxvbihsb2MpIDogMDtcbiAgICAgICAgICB5aWVsZCBsb2MgPyBnZXRMb2NhdGlvbkxhdChsb2MpIDogMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldFBvc2l0aW9ucyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uc0J5SWQ/LmdldChnZXRGbG93RGVzdElkKGZsb3cpKTtcbiAgICAgICAgICB5aWVsZCBsb2MgPyBnZXRMb2NhdGlvbkxvbihsb2MpIDogMDtcbiAgICAgICAgICB5aWVsZCBsb2MgPyBnZXRMb2NhdGlvbkxhdChsb2MpIDogMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuICAgIGNvbnN0IHRoaWNrbmVzc2VzID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgeWllbGQgZmxvd1RoaWNrbmVzc1NjYWxlXG4gICAgICAgICAgICA/IGZsb3dUaGlja25lc3NTY2FsZShnZXRGbG93TWFnbml0dWRlKGZsb3cpKSB8fCAwXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCBlbmRwb2ludE9mZnNldHMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5JZCA9IGdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICAgICAgICBjb25zdCBkZXN0SWQgPSBnZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICAgIHlpZWxkIE1hdGgubWF4KGdldEluQ2lyY2xlU2l6ZShvcmlnaW5JZCksIGdldE91dENpcmNsZVNpemUob3JpZ2luSWQpKTtcbiAgICAgICAgICB5aWVsZCBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUoZGVzdElkKSwgZ2V0T3V0Q2lyY2xlU2l6ZShkZXN0SWQpKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuICAgIGNvbnN0IGZsb3dMaW5lQ29sb3JzID0gVWludDhBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIHlpZWxkKiBmbG93Q29sb3JTY2FsZShnZXRGbG93TWFnbml0dWRlKGZsb3cpKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhZ2dlcmluZ1ZhbHVlcyA9IGFuaW1hdGlvbkVuYWJsZWRcbiAgICAgID8gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmxvd3MpIHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICB5aWVsZCBuZXcgYWxlYShgJHtnZXRGbG93T3JpZ2luSWQoZil9LSR7Z2V0Rmxvd0Rlc3RJZChmKX1gKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKCksXG4gICAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNpcmNsZUF0dHJpYnV0ZXM6IHtcbiAgICAgICAgbGVuZ3RoOiBsb2NhdGlvbnMubGVuZ3RoLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgZ2V0UG9zaXRpb246IHt2YWx1ZTogY2lyY2xlUG9zaXRpb25zLCBzaXplOiAyfSxcbiAgICAgICAgICBnZXRDb2xvcjoge3ZhbHVlOiBjaXJjbGVDb2xvcnMsIHNpemU6IDR9LFxuICAgICAgICAgIGdldEluUmFkaXVzOiB7dmFsdWU6IGluQ2lyY2xlUmFkaWksIHNpemU6IDF9LFxuICAgICAgICAgIGdldE91dFJhZGl1czoge3ZhbHVlOiBvdXRDaXJjbGVSYWRpaSwgc2l6ZTogMX0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbGluZUF0dHJpYnV0ZXM6IHtcbiAgICAgICAgbGVuZ3RoOiBmbG93cy5sZW5ndGgsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBnZXRTb3VyY2VQb3NpdGlvbjoge3ZhbHVlOiBzb3VyY2VQb3NpdGlvbnMsIHNpemU6IDJ9LFxuICAgICAgICAgIGdldFRhcmdldFBvc2l0aW9uOiB7dmFsdWU6IHRhcmdldFBvc2l0aW9ucywgc2l6ZTogMn0sXG4gICAgICAgICAgZ2V0VGhpY2tuZXNzOiB7dmFsdWU6IHRoaWNrbmVzc2VzLCBzaXplOiAxfSxcbiAgICAgICAgICBnZXRDb2xvcjoge3ZhbHVlOiBmbG93TGluZUNvbG9ycywgc2l6ZTogNH0sXG4gICAgICAgICAgZ2V0RW5kcG9pbnRPZmZzZXRzOiB7dmFsdWU6IGVuZHBvaW50T2Zmc2V0cywgc2l6ZTogMn0sXG4gICAgICAgICAgLi4uKHN0YWdnZXJpbmdWYWx1ZXNcbiAgICAgICAgICAgID8ge2dldFN0YWdnZXJpbmc6IHt2YWx1ZTogc3RhZ2dlcmluZ1ZhbHVlcywgc2l6ZTogMX19XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGdldExvY2F0aW9uc0luQmJveChcbiAgICB0cmVlOiBLREJ1c2hUcmVlLFxuICAgIGJib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICApOiBBcnJheTxMPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0cmVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLl9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKHRyZWUsIGJib3gpLm1hcChcbiAgICAgIChpZHg6IG51bWJlcikgPT4gdHJlZS5wb2ludHNbaWR4XSxcbiAgICApIGFzIEFycmF5PEw+O1xuICB9XG5cbiAgX2dldExvY2F0aW9uc0luQmJveEluZGljZXMoXG4gICAgdHJlZTogS0RCdXNoVHJlZSxcbiAgICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgKSB7XG4gICAgaWYgKCF0cmVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtsb24xLCBsYXQxLCBsb24yLCBsYXQyXSA9IGJib3g7XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IFtsbmdYKGxvbjEpLCBsYXRZKGxhdDEpLCBsbmdYKGxvbjIpLCBsYXRZKGxhdDIpXTtcbiAgICByZXR1cm4gdHJlZS5yYW5nZShcbiAgICAgIE1hdGgubWluKHgxLCB4MiksXG4gICAgICBNYXRoLm1pbih5MSwgeTIpLFxuICAgICAgTWF0aC5tYXgoeDEsIHgyKSxcbiAgICAgIE1hdGgubWF4KHkxLCB5MiksXG4gICAgKTtcbiAgfVxuXG4gIGlzRmxvd0luU2VsZWN0aW9uKFxuICAgIGZsb3c6IEYgfCBBZ2dyZWdhdGVGbG93LFxuICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0OiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbkZpbHRlck1vZGU6IExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpO1xuICAgIGNvbnN0IGRlc3QgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpO1xuICAgIGlmIChzZWxlY3RlZExvY2F0aW9uc1NldCkge1xuICAgICAgc3dpdGNoIChsb2NhdGlvbkZpbHRlck1vZGUpIHtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuQUxMOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMob3JpZ2luKSB8fCBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMoZGVzdClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIExvY2F0aW9uRmlsdGVyTW9kZS5CRVRXRUVOOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMob3JpZ2luKSAmJiBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMoZGVzdClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIExvY2F0aW9uRmlsdGVyTW9kZS5JTkNPTUlORzpcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKGRlc3QpO1xuICAgICAgICBjYXNlIExvY2F0aW9uRmlsdGVyTW9kZS5PVVRHT0lORzpcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKG9yaWdpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gY2FsY0xvY2F0aW9uVG90YWxzKFxuICAvLyAgIGxvY2F0aW9uczogKEwgfCBDbHVzdGVyTm9kZSlbXSxcbiAgLy8gICBmbG93czogRltdLFxuICAvLyApOiBMb2NhdGlvbnNUb3RhbHMge1xuICAvLyAgIHJldHVybiBmbG93cy5yZWR1Y2UoXG4gIC8vICAgICAoYWNjOiBMb2NhdGlvbnNUb3RhbHMsIGN1cnIpID0+IHtcbiAgLy8gICAgICAgY29uc3Qgb3JpZ2luSWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoY3Vycik7XG4gIC8vICAgICAgIGNvbnN0IGRlc3RJZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoY3Vycik7XG4gIC8vICAgICAgIGNvbnN0IG1hZ25pdHVkZSA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoY3Vycik7XG4gIC8vICAgICAgIGlmIChvcmlnaW5JZCA9PT0gZGVzdElkKSB7XG4gIC8vICAgICAgICAgYWNjLmludGVybmFsW29yaWdpbklkXSA9IChhY2MuaW50ZXJuYWxbb3JpZ2luSWRdIHx8IDApICsgbWFnbml0dWRlO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIGFjYy5vdXRnb2luZ1tvcmlnaW5JZF0gPSAoYWNjLm91dGdvaW5nW29yaWdpbklkXSB8fCAwKSArIG1hZ25pdHVkZTtcbiAgLy8gICAgICAgICBhY2MuaW5jb21pbmdbZGVzdElkXSA9IChhY2MuaW5jb21pbmdbZGVzdElkXSB8fCAwKSArIG1hZ25pdHVkZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICByZXR1cm4gYWNjO1xuICAvLyAgICAgfSxcbiAgLy8gICAgIHtpbmNvbWluZzoge30sIG91dGdvaW5nOiB7fSwgaW50ZXJuYWw6IHt9fSxcbiAgLy8gICApO1xuICAvLyB9XG59XG5cbmZ1bmN0aW9uIGNhbGNMb2NhdGlvblRvdGFsc0V4dGVudChcbiAgbG9jYXRpb25Ub3RhbHM6IE1hcDxzdHJpbmcsIExvY2F0aW9uVG90YWxzPiB8IHVuZGVmaW5lZCxcbiAgbG9jYXRpb25JZHNJblZpZXdwb3J0OiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIWxvY2F0aW9uVG90YWxzKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgcnY6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgW1xuICAgIGlkLFxuICAgIHtpbmNvbWluZ0NvdW50LCBvdXRnb2luZ0NvdW50LCBpbnRlcm5hbENvdW50fSxcbiAgXSBvZiBsb2NhdGlvblRvdGFscy5lbnRyaWVzKCkpIHtcbiAgICBpZiAobG9jYXRpb25JZHNJblZpZXdwb3J0ID09IG51bGwgfHwgbG9jYXRpb25JZHNJblZpZXdwb3J0LmhhcyhpZCkpIHtcbiAgICAgIGNvbnN0IGxvID0gTWF0aC5taW4oXG4gICAgICAgIGluY29taW5nQ291bnQgKyBpbnRlcm5hbENvdW50LFxuICAgICAgICBvdXRnb2luZ0NvdW50ICsgaW50ZXJuYWxDb3VudCxcbiAgICAgICAgaW50ZXJuYWxDb3VudCxcbiAgICAgICk7XG4gICAgICBjb25zdCBoaSA9IE1hdGgubWF4KFxuICAgICAgICBpbmNvbWluZ0NvdW50ICsgaW50ZXJuYWxDb3VudCxcbiAgICAgICAgb3V0Z29pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIGludGVybmFsQ291bnQsXG4gICAgICApO1xuICAgICAgaWYgKCFydikge1xuICAgICAgICBydiA9IFtsbywgaGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxvIDwgcnZbMF0pIHJ2WzBdID0gbG87XG4gICAgICAgIGlmIChoaSA+IHJ2WzFdKSBydlsxXSA9IGhpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcnY7XG59XG5cbi8vIGxvbmdpdHVkZS9sYXRpdHVkZSB0byBzcGhlcmljYWwgbWVyY2F0b3IgaW4gWzAuLjFdIHJhbmdlXG5mdW5jdGlvbiBsbmdYKGxuZzogbnVtYmVyKSB7XG4gIHJldHVybiBsbmcgLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIGxhdFkobGF0OiBudW1iZXIpIHtcbiAgY29uc3Qgc2luID0gTWF0aC5zaW4oKGxhdCAqIE1hdGguUEkpIC8gMTgwKTtcbiAgY29uc3QgeSA9IDAuNSAtICgwLjI1ICogTWF0aC5sb2coKDEgKyBzaW4pIC8gKDEgLSBzaW4pKSkgLyBNYXRoLlBJO1xuICByZXR1cm4geSA8IDAgPyAwIDogeSA+IDEgPyAxIDogeTtcbn1cblxuZnVuY3Rpb24gYWdncmVnYXRlRmxvd3M8Rj4oXG4gIGZsb3dzOiBGW10sXG4gIGZsb3dBY2Nlc3NvcnM6IEZsb3dBY2Nlc3NvcnM8Rj4sXG4pOiBBZ2dyZWdhdGVGbG93W10ge1xuICAvLyBTdW0gdXAgZmxvd3Mgd2l0aCBzYW1lIG9yaWdpbiwgZGVzdFxuICBjb25zdCBieU9yaWdpbkRlc3QgPSBuZXN0PEYsIEFnZ3JlZ2F0ZUZsb3c+KClcbiAgICAua2V5KGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKVxuICAgIC5rZXkoZmxvd0FjY2Vzc29ycy5nZXRGbG93RGVzdElkKVxuICAgIC5yb2xsdXAoKGZmOiBGW10pID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZmWzBdKTtcbiAgICAgIGNvbnN0IGRlc3QgPSBmbG93QWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmZbMF0pO1xuICAgICAgLy8gY29uc3QgY29sb3IgPSBmZlswXS5jb2xvcjtcbiAgICAgIGNvbnN0IHJ2OiBBZ2dyZWdhdGVGbG93ID0ge1xuICAgICAgICBhZ2dyZWdhdGU6IHRydWUsXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgZGVzdCxcbiAgICAgICAgY291bnQ6IGZmLnJlZHVjZSgobSwgZikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gZmxvd0FjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpO1xuICAgICAgICAgIGlmIChjb3VudCkge1xuICAgICAgICAgICAgaWYgKCFpc05hTihjb3VudCkgJiYgaXNGaW5pdGUoY291bnQpKSByZXR1cm4gbSArIGNvdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgMCksXG4gICAgICAgIC8vIHRpbWU6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICAvLyBpZiAoY29sb3IpIHJ2LmNvbG9yID0gY29sb3I7XG4gICAgICByZXR1cm4gcnY7XG4gICAgfSlcbiAgICAuZW50cmllcyhmbG93cyk7XG4gIGNvbnN0IHJ2OiBBZ2dyZWdhdGVGbG93W10gPSBbXTtcbiAgZm9yIChjb25zdCB7dmFsdWVzfSBvZiBieU9yaWdpbkRlc3QpIHtcbiAgICBmb3IgKGNvbnN0IHt2YWx1ZX0gb2YgdmFsdWVzKSB7XG4gICAgICBydi5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCB0byBhdWdtZW50IGhvdmVyIHBpY2tpbmcgaW5mbyBzbyB0aGF0IHdlIGNhbiBkaXNwbGFjZSBsb2NhdGlvbiB0b29sdGlwXG4gKiBAcGFyYW0gY2lyY2xlQXR0cmlidXRlc1xuICogQHBhcmFtIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgoXG4gIGNpcmNsZUF0dHJpYnV0ZXM6IEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBpbmRleDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qge2dldEluUmFkaXVzLCBnZXRPdXRSYWRpdXN9ID0gY2lyY2xlQXR0cmlidXRlcy5hdHRyaWJ1dGVzO1xuICByZXR1cm4gTWF0aC5tYXgoZ2V0SW5SYWRpdXMudmFsdWVbaW5kZXhdLCBnZXRPdXRSYWRpdXMudmFsdWVbaW5kZXhdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2F0aW9uQ29vcmRzQnlJbmRleChcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3Qge2dldFBvc2l0aW9ufSA9IGNpcmNsZUF0dHJpYnV0ZXMuYXR0cmlidXRlcztcbiAgcmV0dXJuIFtnZXRQb3NpdGlvbi52YWx1ZVtpbmRleCAqIDJdLCBnZXRQb3NpdGlvbi52YWx1ZVtpbmRleCAqIDIgKyAxXV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4KFxuICBsaW5lQXR0cmlidXRlczogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBpbmRleDogbnVtYmVyLFxuKTogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgY29uc3Qge1xuICAgIGdldENvbG9yLFxuICAgIGdldEVuZHBvaW50T2Zmc2V0cyxcbiAgICBnZXRTb3VyY2VQb3NpdGlvbixcbiAgICBnZXRUYXJnZXRQb3NpdGlvbixcbiAgICBnZXRUaGlja25lc3MsXG4gICAgZ2V0U3RhZ2dlcmluZyxcbiAgfSA9IGxpbmVBdHRyaWJ1dGVzLmF0dHJpYnV0ZXM7XG4gIHJldHVybiB7XG4gICAgbGVuZ3RoOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIGdldENvbG9yOiB7XG4gICAgICAgIHZhbHVlOiBnZXRDb2xvci52YWx1ZS5zdWJhcnJheShpbmRleCAqIDQsIChpbmRleCArIDEpICogNCksXG4gICAgICAgIHNpemU6IDQsXG4gICAgICB9LFxuICAgICAgZ2V0RW5kcG9pbnRPZmZzZXRzOiB7XG4gICAgICAgIHZhbHVlOiBnZXRFbmRwb2ludE9mZnNldHMudmFsdWUuc3ViYXJyYXkoaW5kZXggKiAyLCAoaW5kZXggKyAxKSAqIDIpLFxuICAgICAgICBzaXplOiAyLFxuICAgICAgfSxcbiAgICAgIGdldFNvdXJjZVBvc2l0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBnZXRTb3VyY2VQb3NpdGlvbi52YWx1ZS5zdWJhcnJheShpbmRleCAqIDIsIChpbmRleCArIDEpICogMiksXG4gICAgICAgIHNpemU6IDIsXG4gICAgICB9LFxuICAgICAgZ2V0VGFyZ2V0UG9zaXRpb246IHtcbiAgICAgICAgdmFsdWU6IGdldFRhcmdldFBvc2l0aW9uLnZhbHVlLnN1YmFycmF5KGluZGV4ICogMiwgKGluZGV4ICsgMSkgKiAyKSxcbiAgICAgICAgc2l6ZTogMixcbiAgICAgIH0sXG4gICAgICBnZXRUaGlja25lc3M6IHtcbiAgICAgICAgdmFsdWU6IGdldFRoaWNrbmVzcy52YWx1ZS5zdWJhcnJheShpbmRleCwgaW5kZXggKyAxKSxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgIH0sXG4gICAgICAuLi4oZ2V0U3RhZ2dlcmluZ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGdldFN0YWdnZXJpbmc6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFN0YWdnZXJpbmcudmFsdWUuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgMSksXG4gICAgICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
887
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9GbG93bWFwU2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFjLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGNBQWMsR0FFZixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxVQUFVLEVBRVYsd0JBQXdCLEVBQ3hCLHdCQUF3QixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sU0FBUyxFQUFFLEVBR2hCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyx5QkFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUVwRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FFMUIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQVVMLFNBQVMsRUFDVCxxQkFBcUIsRUFFckIsa0JBQWtCLEdBRW5CLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBU2xDLE1BQU0sQ0FBQyxPQUFP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Q0FBQztnQkFDcEQsSUFBSSxFQUFFLENBQUM7YUFDUixJQUNFLENBQUMsYUFBYTtZQUNmLENBQUMsQ0FBQztnQkFDRSxhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEVBQUUsQ0FBQztpQkFDUjthQUNGO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNmO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtXZWJNZXJjYXRvclZpZXdwb3J0fSBmcm9tICdAbWF0aC5nbC93ZWItbWVyY2F0b3InO1xuaW1wb3J0IHthc2NlbmRpbmcsIHJvbGx1cCwgZGVzY2VuZGluZywgZXh0ZW50LCBtaW59IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7U2NhbGVMaW5lYXIsIHNjYWxlTGluZWFyLCBzY2FsZVNxcnR9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCBLREJ1c2ggZnJvbSAna2RidXNoJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNlbGVjdG9yLFxuICBjcmVhdGVTZWxlY3RvckNyZWF0b3IsXG4gIGRlZmF1bHRNZW1vaXplLFxuICBQYXJhbWV0cmljU2VsZWN0b3IsXG59IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7YWxlYX0gZnJvbSAnc2VlZHJhbmRvbSc7XG5pbXBvcnQge2NsdXN0ZXJMb2NhdGlvbnN9IGZyb20gJy4vY2x1c3Rlci9jbHVzdGVyJztcbmltcG9ydCB7XG4gIGJ1aWxkSW5kZXgsXG4gIENsdXN0ZXJJbmRleCxcbiAgZmluZEFwcHJvcHJpYXRlWm9vbUxldmVsLFxuICBtYWtlTG9jYXRpb25XZWlnaHRHZXR0ZXIsXG59IGZyb20gJy4vY2x1c3Rlci9DbHVzdGVySW5kZXgnO1xuaW1wb3J0IGdldENvbG9ycywge1xuICBDb2xvcnNSR0JBLFxuICBEaWZmQ29sb3JzUkdCQSxcbiAgZ2V0Q29sb3JzUkdCQSxcbiAgZ2V0RGlmZkNvbG9yc1JHQkEsXG4gIGdldEZsb3dDb2xvclNjYWxlLFxuICBpc0RpZmZDb2xvcnMsXG4gIGlzRGlmZkNvbG9yc1JHQkEsXG59IGZyb20gJy4vY29sb3JzJztcbmltcG9ydCBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzIGZyb20gJy4vRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyc7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuaW1wb3J0IHtcbiAgZ2V0VGltZUdyYW51bGFyaXR5QnlLZXksXG4gIGdldFRpbWVHcmFudWxhcml0eUJ5T3JkZXIsXG4gIGdldFRpbWVHcmFudWxhcml0eUZvckRhdGUsXG4gIFRpbWVHcmFudWxhcml0eUtleSxcbn0gZnJvbSAnLi90aW1lJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZUZsb3csXG4gIENsdXN0ZXIsXG4gIENsdXN0ZXJOb2RlLFxuICBDb3VudEJ5VGltZSxcbiAgRmxvd0FjY2Vzc29ycyxcbiAgRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMsXG4gIEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcyxcbiAgRmxvd21hcERhdGEsXG4gIEZsb3dtYXBEYXRhQWNjZXNzb3JzLFxuICBpc0NsdXN0ZXIsXG4gIGlzTG9jYXRpb25DbHVzdGVyTm9kZSxcbiAgTGF5ZXJzRGF0YSxcbiAgTG9jYXRpb25GaWx0ZXJNb2RlLFxuICBMb2NhdGlvblRvdGFscyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IE1BWF9DTFVTVEVSX1pPT01fTEVWRUwgPSAyMDtcbnR5cGUgS0RCdXNoVHJlZSA9IGFueTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0b3I8TCwgRiwgVD4gPSBQYXJhbWV0cmljU2VsZWN0b3I8XG4gIEZsb3dtYXBTdGF0ZSxcbiAgRmxvd21hcERhdGE8TCwgRj4sXG4gIFRcbj47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3dtYXBTZWxlY3RvcnM8TCwgRj4ge1xuICBhY2Nlc3NvcnM6IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj47XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPikge1xuICAgIHRoaXMuYWNjZXNzb3JzID0gbmV3IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMoYWNjZXNzb3JzKTtcbiAgICB0aGlzLnNldEFjY2Vzc29ycyhhY2Nlc3NvcnMpO1xuICB9XG5cbiAgc2V0QWNjZXNzb3JzKGFjY2Vzc29yczogRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4pIHtcbiAgICB0aGlzLmFjY2Vzc29ycyA9IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzKGFjY2Vzc29ycyk7XG4gIH1cblxuICBnZXRGZXRjaGVkRmxvd3MgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHByb3BzLmZsb3dzO1xuICBnZXRGZXRjaGVkTG9jYXRpb25zID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBwcm9wcy5sb2NhdGlvbnM7XG4gIGdldE1heFRvcEZsb3dzRGlzcGxheU51bSA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuc2V0dGluZ3NTdGF0ZS5tYXhUb3BGbG93c0Rpc3BsYXlOdW07XG4gIGdldFNlbGVjdGVkTG9jYXRpb25zID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5maWx0ZXJTdGF0ZS5zZWxlY3RlZExvY2F0aW9ucztcbiAgZ2V0TG9jYXRpb25GaWx0ZXJNb2RlID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5maWx0ZXJTdGF0ZS5sb2NhdGlvbkZpbHRlck1vZGU7XG4gIGdldENsdXN0ZXJpbmdFbmFibGVkID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5nc1N0YXRlLmNsdXN0ZXJpbmdFbmFibGVkO1xuICBnZXRMb2NhdGlvblRvdGFsc0VuYWJsZWQgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLnNldHRpbmdzU3RhdGUubG9jYXRpb25Ub3RhbHNFbmFibGVkO1xuICBnZXRab29tID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS52aWV3cG9ydC56b29tO1xuICBnZXRWaWV3cG9ydCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUudmlld3BvcnQ7XG4gIGdldFNlbGVjdGVkVGltZVJhbmdlID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5maWx0ZXJTdGF0ZS5zZWxlY3RlZFRpbWVSYW5nZTtcblxuICBnZXRDb2xvclNjaGVtZTogU2VsZWN0b3I8TCwgRiwgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuY29sb3JTY2hlbWU7XG5cbiAgZ2V0RGFya01vZGU6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuZGFya01vZGU7XG5cbiAgZ2V0RmFkZUVuYWJsZWQ6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuZmFkZUVuYWJsZWQ7XG5cbiAgZ2V0RmFkZU9wYWNpdHlFbmFibGVkOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKSA9PiBzdGF0ZS5zZXR0aW5nc1N0YXRlLmZhZGVPcGFjaXR5RW5hYmxlZDtcblxuICBnZXRGYWRlQW1vdW50OiBTZWxlY3RvcjxMLCBGLCBudW1iZXI+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzU3RhdGUuZmFkZUFtb3VudDtcblxuICBnZXRBbmltYXRlOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKSA9PiBzdGF0ZS5zZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQ7XG5cbiAgZ2V0SW52YWxpZExvY2F0aW9uSWRzOiBTZWxlY3RvcjxMLCBGLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldEZldGNoZWRMb2NhdGlvbnMsXG4gICAgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbnZhbGlkID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBsb24gPSB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGxhdCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTGF0KGxvY2F0aW9uKTtcbiAgICAgICAgaWYgKCEoLTkwIDw9IGxhdCAmJiBsYXQgPD0gOTApIHx8ICEoLTE4MCA8PSBsb24gJiYgbG9uIDw9IDE4MCkpIHtcbiAgICAgICAgICBpbnZhbGlkLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW52YWxpZC5sZW5ndGggPiAwID8gaW52YWxpZCA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICApO1xuXG4gIGdldExvY2F0aW9uczogU2VsZWN0b3I8TCwgRiwgSXRlcmFibGU8TD4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRGZXRjaGVkTG9jYXRpb25zLFxuICAgIHRoaXMuZ2V0SW52YWxpZExvY2F0aW9uSWRzLFxuICAgIChsb2NhdGlvbnMsIGludmFsaWRJZHMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFpbnZhbGlkSWRzIHx8IGludmFsaWRJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgY29uc3QgaW52YWxpZCA9IG5ldyBTZXQoaW52YWxpZElkcyk7XG4gICAgICBjb25zdCBmaWx0ZXJlZDogTFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBpZiAoIWludmFsaWQuaGFzKGlkKSkge1xuICAgICAgICAgIGZpbHRlcmVkLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbklkczogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnMsXG4gICAgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGlkcy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChpZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9LFxuICApO1xuXG4gIGdldFNlbGVjdGVkTG9jYXRpb25zU2V0OiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnMsIChpZHMpID0+XG4gICAgICBpZHMgJiYgaWRzLmxlbmd0aCA+IDAgPyBuZXcgU2V0KGlkcykgOiB1bmRlZmluZWQsXG4gICAgKTtcblxuICBnZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zOiBTZWxlY3RvcjxMLCBGLCBGW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldEZldGNoZWRGbG93cywgdGhpcy5nZXRMb2NhdGlvbklkcywgKGZsb3dzLCBpZHMpID0+IHtcbiAgICAgIGlmICghaWRzIHx8ICFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgY29uc3Qgc3JjSWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgIGNvbnN0IGRzdElkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICAgICAgaWYgKGlkcy5oYXMoc3JjSWQpICYmIGlkcy5oYXMoZHN0SWQpKSB7XG4gICAgICAgICAgZmlsdGVyZWQucHVzaChmbG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbHRlcmVkLnNvcnQoKGE6IEYsIGI6IEYpID0+XG4gICAgICAgIGRlc2NlbmRpbmcoXG4gICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShhKSksXG4gICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShiKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pO1xuXG4gIGdldEFjdHVhbFRpbWVFeHRlbnQ6IFNlbGVjdG9yPEwsIEYsIFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucywgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgbGV0IHN0YXJ0ID0gbnVsbDtcbiAgICAgIGxldCBlbmQgPSBudWxsO1xuICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93VGltZShmbG93KTtcbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+IHRpbWUpIHN0YXJ0ID0gdGltZTtcbiAgICAgICAgICBpZiAoZW5kID09IG51bGwgfHwgZW5kIDwgdGltZSkgZW5kID0gdGltZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdGFydCB8fCAhZW5kKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcbiAgICB9KTtcblxuICBnZXRUaW1lR3JhbnVsYXJpdHlLZXk6IFNlbGVjdG9yPEwsIEYsIFRpbWVHcmFudWxhcml0eUtleSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRBY3R1YWxUaW1lRXh0ZW50LFxuICAgICAgKGZsb3dzLCB0aW1lRXh0ZW50KSA9PiB7XG4gICAgICAgIGlmICghZmxvd3MgfHwgIXRpbWVFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgbWluT3JkZXIgPSBtaW4oZmxvd3MsIChkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dUaW1lKGQpO1xuICAgICAgICAgIHJldHVybiB0ID8gZ2V0VGltZUdyYW51bGFyaXR5Rm9yRGF0ZSh0KS5vcmRlciA6IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWluT3JkZXIgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGltZUdyYW51bGFyaXR5ID0gZ2V0VGltZUdyYW51bGFyaXR5QnlPcmRlcihtaW5PcmRlcik7XG4gICAgICAgIHJldHVybiB0aW1lR3JhbnVsYXJpdHkgPyB0aW1lR3JhbnVsYXJpdHkua2V5IDogdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldFRpbWVFeHRlbnQ6IFNlbGVjdG9yPEwsIEYsIFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldEFjdHVhbFRpbWVFeHRlbnQsXG4gICAgdGhpcy5nZXRUaW1lR3JhbnVsYXJpdHlLZXksXG4gICAgKHRpbWVFeHRlbnQsIHRpbWVHcmFudWxhcml0eUtleSkgPT4ge1xuICAgICAgY29uc3QgdGltZUdyYW51bGFyaXR5ID0gdGltZUdyYW51bGFyaXR5S2V5XG4gICAgICAgID8gZ2V0VGltZUdyYW51bGFyaXR5QnlLZXkodGltZUdyYW51bGFyaXR5S2V5KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghdGltZUV4dGVudCB8fCAhdGltZUdyYW51bGFyaXR5Py5pbnRlcnZhbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHtpbnRlcnZhbH0gPSB0aW1lR3JhbnVsYXJpdHk7XG4gICAgICByZXR1cm4gW3RpbWVFeHRlbnRbMF0sIGludGVydmFsLm9mZnNldChpbnRlcnZhbC5mbG9vcih0aW1lRXh0ZW50WzFdKSwgMSldO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9uc0ZpbHRlcmVkQnlUaW1lOiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgRltdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgdGhpcy5nZXRUaW1lRXh0ZW50LFxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRUaW1lUmFuZ2UsXG4gICAgKGZsb3dzLCB0aW1lRXh0ZW50LCB0aW1lUmFuZ2UpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoXG4gICAgICAgICF0aW1lRXh0ZW50IHx8XG4gICAgICAgICF0aW1lUmFuZ2UgfHxcbiAgICAgICAgKHRpbWVFeHRlbnRbMF0gPT09IHRpbWVSYW5nZVswXSAmJiB0aW1lRXh0ZW50WzFdID09PSB0aW1lUmFuZ2VbMV0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZsb3dzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZsb3dzLmZpbHRlcigoZmxvdykgPT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZmxvdyk7XG4gICAgICAgIHJldHVybiB0aW1lICYmIHRpbWVSYW5nZVswXSA8PSB0aW1lICYmIHRpbWUgPCB0aW1lUmFuZ2VbMV07XG4gICAgICB9KTtcbiAgICB9LFxuICApO1xuXG4gIGdldExvY2F0aW9uc0hhdmluZ0Zsb3dzOiBTZWxlY3RvcjxMLCBGLCBJdGVyYWJsZTxMPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnMsXG4gICAgICAoZmxvd3MsIGxvY2F0aW9ucykgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9ucyB8fCAhZmxvd3MpIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICAgIGNvbnN0IHdpdGhGbG93cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgd2l0aEZsb3dzLmFkZCh0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdykpO1xuICAgICAgICAgIHdpdGhGbG93cy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICBpZiAod2l0aEZsb3dzLmhhcyh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGxvY2F0aW9uKSkpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkLnB1c2gobG9jYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25zQnlJZDogU2VsZWN0b3I8TCwgRiwgTWFwPHN0cmluZywgTD4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cyxcbiAgICAobG9jYXRpb25zKSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGxvY2F0aW9uc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgTD4oKTtcbiAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGxvY2F0aW9uc0J5SWQuc2V0KHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pLCBsb2NhdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9jYXRpb25zQnlJZDtcbiAgICB9LFxuICApO1xuXG4gIGdldENsdXN0ZXJJbmRleDogU2VsZWN0b3I8TCwgRiwgQ2x1c3RlckluZGV4PEY+IHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNCeUlkLFxuICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAobG9jYXRpb25zLCBsb2NhdGlvbnNCeUlkLCBmbG93cykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMgfHwgIWxvY2F0aW9uc0J5SWQgfHwgIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBnZXRMb2NhdGlvbldlaWdodCA9IG1ha2VMb2NhdGlvbldlaWdodEdldHRlcihcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCksXG4gICAgICApO1xuICAgICAgY29uc3QgY2x1c3RlckxldmVscyA9IGNsdXN0ZXJMb2NhdGlvbnMoXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgZ2V0TG9jYXRpb25XZWlnaHQsXG4gICAgICAgIHtcbiAgICAgICAgICBtYXhab29tOiBNQVhfQ0xVU1RFUl9aT09NX0xFVkVMLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsdXN0ZXJJbmRleCA9IGJ1aWxkSW5kZXg8Rj4oY2x1c3RlckxldmVscyk7XG4gICAgICBjb25zdCB7Z2V0TG9jYXRpb25OYW1lLCBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lfSA9XG4gICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCk7XG5cbiAgICAgIC8vIEFkZGluZyBtZWFuaW5nZnVsIG5hbWVzXG4gICAgICBjb25zdCBnZXROYW1lID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbG9jID0gbG9jYXRpb25zQnlJZC5nZXQoaWQpO1xuICAgICAgICBpZiAobG9jKSB7XG4gICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uTmFtZVxuICAgICAgICAgICAgPyBnZXRMb2NhdGlvbk5hbWUobG9jKVxuICAgICAgICAgICAgOiB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGxvYykgfHwgaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcIiR7aWR9XCJgO1xuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgbGV2ZWwgb2YgY2x1c3RlckxldmVscykge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbGV2ZWwubm9kZXMpIHtcbiAgICAgICAgICAvLyBIZXJlIG11dGF0aW5nIHRoZSBub2RlcyAoYWRkaW5nIG5hbWVzKVxuICAgICAgICAgIGlmIChpc0NsdXN0ZXIobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlcyA9IGNsdXN0ZXJJbmRleC5leHBhbmRDbHVzdGVyKG5vZGUpO1xuXG4gICAgICAgICAgICBsZWF2ZXMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgZGVzY2VuZGluZyhnZXRMb2NhdGlvbldlaWdodChhKSwgZ2V0TG9jYXRpb25XZWlnaHQoYikpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGdldExvY2F0aW9uQ2x1c3Rlck5hbWUpIHtcbiAgICAgICAgICAgICAgbm9kZS5uYW1lID0gZ2V0TG9jYXRpb25DbHVzdGVyTmFtZShsZWF2ZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9wSWQgPSBsZWF2ZXNbMF07XG4gICAgICAgICAgICAgIGNvbnN0IG90aGVySWQgPSBsZWF2ZXMubGVuZ3RoID09PSAyID8gbGVhdmVzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBub2RlLm5hbWUgPSBgXCIke2dldE5hbWUodG9wSWQpfVwiIGFuZCAke1xuICAgICAgICAgICAgICAgIG90aGVySWRcbiAgICAgICAgICAgICAgICAgID8gYFwiJHtnZXROYW1lKG90aGVySWQpfVwiYFxuICAgICAgICAgICAgICAgICAgOiBgJHtsZWF2ZXMubGVuZ3RoIC0gMX0gb3RoZXJzYFxuICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKG5vZGUgYXMgYW55KS5uYW1lID0gZ2V0TmFtZShub2RlLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsdXN0ZXJJbmRleDtcbiAgICB9LFxuICApO1xuXG4gIGdldEF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9ucyxcbiAgICAoY2x1c3RlckluZGV4LCBzZWxlY3RlZExvY2F0aW9ucyk6IG51bWJlcltdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGlmICghY2x1c3RlckluZGV4KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBtYXhab29tID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgbGV0IG1pblpvb20gPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICAgIGNvbnN0IGFkanVzdCA9ICh6b25lSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKHpvbmVJZCk7XG4gICAgICAgIGlmIChjbHVzdGVyKSB7XG4gICAgICAgICAgbWluWm9vbSA9IE1hdGgubWF4KG1pblpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgICAgbWF4Wm9vbSA9IE1hdGgubWluKG1heFpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgem9vbSA9IGNsdXN0ZXJJbmRleC5nZXRNaW5ab29tRm9yTG9jYXRpb24oem9uZUlkKTtcbiAgICAgICAgICBtaW5ab29tID0gTWF0aC5tYXgobWluWm9vbSwgem9vbSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkTG9jYXRpb25zKSB7XG4gICAgICAgICAgYWRqdXN0KGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2x1c3RlckluZGV4LmF2YWlsYWJsZVpvb21MZXZlbHMuZmlsdGVyKFxuICAgICAgICAobGV2ZWwpID0+IG1pblpvb20gPD0gbGV2ZWwgJiYgbGV2ZWwgPD0gbWF4Wm9vbSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0Q2x1c3Rlclpvb206IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldFpvb20sXG4gICAgdGhpcy5nZXRBdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscyxcbiAgICAoY2x1c3RlckluZGV4LCBtYXBab29tLCBhdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscykgPT4ge1xuICAgICAgaWYgKCFjbHVzdGVySW5kZXgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsdXN0ZXJab29tID0gZmluZEFwcHJvcHJpYXRlWm9vbUxldmVsKFxuICAgICAgICBhdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscyxcbiAgICAgICAgbWFwWm9vbSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY2x1c3Rlclpvb207XG4gICAgfSxcbiAgKTtcblxuICBnZXRDbHVzdGVyWm9vbSA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+IHtcbiAgICBjb25zdCB7c2V0dGluZ3NTdGF0ZX0gPSBzdGF0ZTtcbiAgICBpZiAoIXNldHRpbmdzU3RhdGUuY2x1c3RlcmluZ0VuYWJsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHNldHRpbmdzU3RhdGUuY2x1c3RlcmluZ0F1dG8gfHwgc2V0dGluZ3NTdGF0ZS5jbHVzdGVyaW5nTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENsdXN0ZXJab29tKHN0YXRlLCBwcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBzZXR0aW5nc1N0YXRlLmNsdXN0ZXJpbmdMZXZlbDtcbiAgfTtcblxuICBnZXRMb2NhdGlvbnNGb3JTZWFyY2hCb3g6IFNlbGVjdG9yPEwsIEYsIChMIHwgQ2x1c3RlcilbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRDbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgKFxuICAgICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgICAgbG9jYXRpb25zLFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9ucyxcbiAgICAgICAgY2x1c3Rlclpvb20sXG4gICAgICAgIGNsdXN0ZXJJbmRleCxcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3VsdDogKEwgfCBDbHVzdGVyKVtdID0gQXJyYXkuZnJvbShsb2NhdGlvbnMpO1xuICAgICAgICAvLyBpZiAoY2x1c3RlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgLy8gICBpZiAoY2x1c3RlckluZGV4KSB7XG4gICAgICAgIC8vICAgICBjb25zdCB6b29tSXRlbXMgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3Rlck5vZGVzRm9yKGNsdXN0ZXJab29tKTtcbiAgICAgICAgLy8gICAgIGlmICh6b29tSXRlbXMpIHtcbiAgICAgICAgLy8gICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh6b29tSXRlbXMuZmlsdGVyKGlzQ2x1c3RlcikpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChjbHVzdGVySW5kZXggJiYgc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCB0b0FwcGVuZCA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3RlckJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjbHVzdGVyICYmXG4gICAgICAgICAgICAgICFyZXN1bHQuZmluZChcbiAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgIChpc0xvY2F0aW9uQ2x1c3Rlck5vZGUoZClcbiAgICAgICAgICAgICAgICAgICAgPyBkLmlkXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChkKSkgPT09IGlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdG9BcHBlbmQucHVzaChjbHVzdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvQXBwZW5kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodG9BcHBlbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldERpZmZNb2RlOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0RmV0Y2hlZEZsb3dzLFxuICAgIChmbG93cykgPT4ge1xuICAgICAgaWYgKGZsb3dzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmbG93cykge1xuICAgICAgICAgIGlmICh0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0Rmxvd21hcENvbG9ycyA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0RGlmZk1vZGUsXG4gICAgdGhpcy5nZXRDb2xvclNjaGVtZSxcbiAgICB0aGlzLmdldERhcmtNb2RlLFxuICAgIHRoaXMuZ2V0RmFkZUVuYWJsZWQsXG4gICAgdGhpcy5nZXRGYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgdGhpcy5nZXRGYWRlQW1vdW50LFxuICAgIHRoaXMuZ2V0QW5pbWF0ZSxcbiAgICBnZXRDb2xvcnMsXG4gICk7XG5cbiAgZ2V0Rmxvd21hcENvbG9yc1JHQkEgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLl9nZXRGbG93bWFwQ29sb3JzLFxuICAgIChmbG93bWFwQ29sb3JzKSA9PiB7XG4gICAgICByZXR1cm4gaXNEaWZmQ29sb3JzKGZsb3dtYXBDb2xvcnMpXG4gICAgICAgID8gZ2V0RGlmZkNvbG9yc1JHQkEoZmxvd21hcENvbG9ycylcbiAgICAgICAgOiBnZXRDb2xvcnNSR0JBKGZsb3dtYXBDb2xvcnMpO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0VW5rbm93bkxvY2F0aW9uczogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbklkcyxcbiAgICB0aGlzLmdldEZldGNoZWRGbG93cyxcbiAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgKGlkcywgZmxvd3MsIGZsb3dzRm9yS25vd25Mb2NhdGlvbnMpID0+IHtcbiAgICAgIGlmICghaWRzIHx8ICFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChcbiAgICAgICAgZmxvd3NGb3JLbm93bkxvY2F0aW9uc1xuICAgICAgICAvLyAmJiBmbG93cy5sZW5ndGggPT09IGZsb3dzRm9yS25vd25Mb2NhdGlvbnMubGVuZ3RoXG4gICAgICApXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBtaXNzaW5nID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgaWYgKCFpZHMuaGFzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KSkpXG4gICAgICAgICAgbWlzc2luZy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKTtcbiAgICAgICAgaWYgKCFpZHMuaGFzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpKVxuICAgICAgICAgIG1pc3NpbmcuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1pc3Npbmc7XG4gICAgfSxcbiAgKTtcblxuICBnZXRTb3J0ZWRBZ2dyZWdhdGVkRmlsdGVyZWRGbG93czogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIChGIHwgQWdncmVnYXRlRmxvdylbXSB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgdGhpcy5nZXRDbHVzdGVyaW5nRW5hYmxlZCxcbiAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnNGaWx0ZXJlZEJ5VGltZSxcbiAgICB0aGlzLmdldENsdXN0ZXJab29tLFxuICAgIHRoaXMuZ2V0VGltZUV4dGVudCxcbiAgICAoY2x1c3RlclRyZWUsIGlzQ2x1c3RlcmluZ0VuYWJsZWQsIGZsb3dzLCBjbHVzdGVyWm9vbSwgdGltZUV4dGVudCkgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGxldCBhZ2dyZWdhdGVkOiAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW107XG4gICAgICBpZiAoaXNDbHVzdGVyaW5nRW5hYmxlZCAmJiBjbHVzdGVyVHJlZSAmJiBjbHVzdGVyWm9vbSAhPSBudWxsKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZWQgPSBjbHVzdGVyVHJlZS5hZ2dyZWdhdGVGbG93cyhcbiAgICAgICAgICAvLyBUT0RPOiBhZ2dyZWdhdGUgYWNyb3NzIHRpbWVcbiAgICAgICAgICAvLyB0aW1lRXh0ZW50ICE9IG51bGxcbiAgICAgICAgICAvLyAgID8gYWdncmVnYXRlRmxvd3MoZmxvd3MpIC8vIGNsdXN0ZXJUcmVlLmFnZ3JlZ2F0ZUZsb3dzIHdvbid0IGFnZ3JlZ2F0ZSB1bmNsdXN0ZXJlZCBhY3Jvc3MgdGltZVxuICAgICAgICAgIC8vICAgOiBmbG93cyxcbiAgICAgICAgICBmbG93cyxcbiAgICAgICAgICBjbHVzdGVyWm9vbSxcbiAgICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93bWFwRGF0YUFjY2Vzc29ycygpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWdncmVnYXRlZCA9IGFnZ3JlZ2F0ZUZsb3dzKFxuICAgICAgICAgIGZsb3dzLFxuICAgICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhZ2dyZWdhdGVkLnNvcnQoKGEsIGIpID0+XG4gICAgICAgIGRlc2NlbmRpbmcoXG4gICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShhKSksXG4gICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShiKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZWQ7XG4gICAgfSxcbiAgKTtcblxuICBnZXRFeHBhbmRlZFNlbGVjdGVkTG9jYXRpb25zU2V0OiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRDbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICAgIChjbHVzdGVyaW5nRW5hYmxlZCwgc2VsZWN0ZWRMb2NhdGlvbnMsIGNsdXN0ZXJJbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXNlbGVjdGVkTG9jYXRpb25zIHx8ICFjbHVzdGVySW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRMb2NhdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbklkIG9mIHNlbGVjdGVkTG9jYXRpb25zKSB7XG4gICAgICAgICAgY29uc3QgY2x1c3RlciA9IGNsdXN0ZXJJbmRleC5nZXRDbHVzdGVyQnlJZChsb2NhdGlvbklkKTtcbiAgICAgICAgICBpZiAoY2x1c3Rlcikge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBjbHVzdGVySW5kZXguZXhwYW5kQ2x1c3RlcihjbHVzdGVyKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmFkZChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5hZGQobG9jYXRpb25JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0VG90YWxDb3VudHNCeVRpbWU6IFNlbGVjdG9yPEwsIEYsIENvdW50QnlUaW1lW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAgIHRoaXMuZ2V0VGltZUdyYW51bGFyaXR5S2V5LFxuICAgICAgdGhpcy5nZXRUaW1lRXh0ZW50LFxuICAgICAgdGhpcy5nZXRFeHBhbmRlZFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAoXG4gICAgICAgIGZsb3dzLFxuICAgICAgICB0aW1lR3JhbnVsYXJpdHlLZXksXG4gICAgICAgIHRpbWVFeHRlbnQsXG4gICAgICAgIHNlbGVjdGVkTG9jYXRpb25TZXQsXG4gICAgICAgIGxvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lR3JhbnVsYXJpdHkgPSB0aW1lR3JhbnVsYXJpdHlLZXlcbiAgICAgICAgICA/IGdldFRpbWVHcmFudWxhcml0eUJ5S2V5KHRpbWVHcmFudWxhcml0eUtleSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFmbG93cyB8fCAhdGltZUdyYW51bGFyaXR5IHx8ICF0aW1lRXh0ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBieVRpbWUgPSBmbG93cy5yZWR1Y2UoKG0sIGZsb3cpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKFxuICAgICAgICAgICAgICBmbG93LFxuICAgICAgICAgICAgICBzZWxlY3RlZExvY2F0aW9uU2V0LFxuICAgICAgICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aW1lR3JhbnVsYXJpdHlcbiAgICAgICAgICAgICAgLmludGVydmFsKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dUaW1lKGZsb3cpKVxuICAgICAgICAgICAgICAuZ2V0VGltZSgpO1xuICAgICAgICAgICAgbS5zZXQoXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgKG0uZ2V0KGtleSkgPz8gMCkgKyB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sIG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCkpO1xuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGJ5VGltZS5lbnRyaWVzKCkpLm1hcCgoW21pbGxpcywgY291bnRdKSA9PiAoe1xuICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKG1pbGxpcyksXG4gICAgICAgICAgY291bnQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRNYXhMb2NhdGlvbkNpcmNsZVNpemU6IFNlbGVjdG9yPEwsIEYsIG51bWJlcj4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzRW5hYmxlZCxcbiAgICAobG9jYXRpb25Ub3RhbHNFbmFibGVkKSA9PiAobG9jYXRpb25Ub3RhbHNFbmFibGVkID8gMTcgOiAxKSxcbiAgKTtcblxuICBnZXRWaWV3cG9ydEJvdW5kaW5nQm94OiBTZWxlY3RvcjxMLCBGLCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRWaWV3cG9ydCxcbiAgICAgIHRoaXMuZ2V0TWF4TG9jYXRpb25DaXJjbGVTaXplLFxuICAgICAgKHZpZXdwb3J0LCBtYXhMb2NhdGlvbkNpcmNsZVNpemUpID0+IHtcbiAgICAgICAgY29uc3QgcGFkID0gbWF4TG9jYXRpb25DaXJjbGVTaXplO1xuICAgICAgICBjb25zdCBib3VuZHMgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoICsgcGFkICogMixcbiAgICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCArIHBhZCAqIDIsXG4gICAgICAgIH0pLmdldEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gW2JvdW5kc1swXVswXSwgYm91bmRzWzBdWzFdLCBib3VuZHNbMV1bMF0sIGJvdW5kc1sxXVsxXV07XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25zRm9yWm9vbTogU2VsZWN0b3I8TCwgRiwgSXRlcmFibGU8TD4gfCBDbHVzdGVyTm9kZVtdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cyxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICAgIChjbHVzdGVyaW5nRW5hYmxlZCwgbG9jYXRpb25zSGF2aW5nRmxvd3MsIGNsdXN0ZXJJbmRleCwgY2x1c3Rlclpvb20pID0+IHtcbiAgICAgICAgaWYgKGNsdXN0ZXJpbmdFbmFibGVkICYmIGNsdXN0ZXJJbmRleCkge1xuICAgICAgICAgIHJldHVybiBjbHVzdGVySW5kZXguZ2V0Q2x1c3Rlck5vZGVzRm9yKGNsdXN0ZXJab29tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb25zSGF2aW5nRmxvd3M7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvblRvdGFsczogU2VsZWN0b3I8TCwgRiwgTWFwPHN0cmluZywgTG9jYXRpb25Ub3RhbHM+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldExvY2F0aW9uc0Zvclpvb20sXG4gICAgICB0aGlzLmdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzLFxuICAgICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgKGxvY2F0aW9ucywgZmxvd3MsIHNlbGVjdGVkTG9jYXRpb25zU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpID0+IHtcbiAgICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdG90YWxzID0gbmV3IE1hcDxzdHJpbmcsIExvY2F0aW9uVG90YWxzPigpO1xuICAgICAgICBjb25zdCBhZGQgPSAoXG4gICAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgICBkOiBQYXJ0aWFsPExvY2F0aW9uVG90YWxzPixcbiAgICAgICAgKTogTG9jYXRpb25Ub3RhbHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ2ID0gdG90YWxzLmdldChpZCkgPz8ge1xuICAgICAgICAgICAgaW5jb21pbmdDb3VudDogMCxcbiAgICAgICAgICAgIG91dGdvaW5nQ291bnQ6IDAsXG4gICAgICAgICAgICBpbnRlcm5hbENvdW50OiAwLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGQuaW5jb21pbmdDb3VudCAhPSBudWxsKSBydi5pbmNvbWluZ0NvdW50ICs9IGQuaW5jb21pbmdDb3VudDtcbiAgICAgICAgICBpZiAoZC5vdXRnb2luZ0NvdW50ICE9IG51bGwpIHJ2Lm91dGdvaW5nQ291bnQgKz0gZC5vdXRnb2luZ0NvdW50O1xuICAgICAgICAgIGlmIChkLmludGVybmFsQ291bnQgIT0gbnVsbCkgcnYuaW50ZXJuYWxDb3VudCArPSBkLmludGVybmFsQ291bnQ7XG4gICAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmxvd3MpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKGYsIHNlbGVjdGVkTG9jYXRpb25zU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5JZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RJZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZik7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZik7XG4gICAgICAgICAgICBpZiAob3JpZ2luSWQgPT09IGRlc3RJZCkge1xuICAgICAgICAgICAgICB0b3RhbHMuc2V0KG9yaWdpbklkLCBhZGQob3JpZ2luSWQsIHtpbnRlcm5hbENvdW50OiBjb3VudH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvdGFscy5zZXQob3JpZ2luSWQsIGFkZChvcmlnaW5JZCwge291dGdvaW5nQ291bnQ6IGNvdW50fSkpO1xuICAgICAgICAgICAgICB0b3RhbHMuc2V0KGRlc3RJZCwgYWRkKGRlc3RJZCwge2luY29taW5nQ291bnQ6IGNvdW50fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWxzO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uc1RyZWU6IFNlbGVjdG9yPEwsIEYsIEtEQnVzaFRyZWU+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNGb3Jab29tLFxuICAgIChsb2NhdGlvbnMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEtEQnVzaChcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBsb2NhdGlvbnMsXG4gICAgICAgIChsb2NhdGlvbjogTCB8IENsdXN0ZXJOb2RlKSA9PlxuICAgICAgICAgIGxuZ1godGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25Mb24obG9jYXRpb24pKSxcbiAgICAgICAgKGxvY2F0aW9uOiBMIHwgQ2x1c3Rlck5vZGUpID0+XG4gICAgICAgICAgbGF0WSh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxhdChsb2NhdGlvbikpLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRMb2NhdGlvbklkc0luVmlld3BvcnQ6IFNlbGVjdG9yPEwsIEYsIFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldExvY2F0aW9uc1RyZWUsXG4gICAgICB0aGlzLmdldFZpZXdwb3J0Qm91bmRpbmdCb3gsXG4gICAgICAodHJlZTogS0RCdXNoVHJlZSwgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5fZ2V0TG9jYXRpb25zSW5CYm94SW5kaWNlcyh0cmVlLCBiYm94KTtcbiAgICAgICAgaWYgKGlkcykge1xuICAgICAgICAgIHJldHVybiBuZXcgU2V0KFxuICAgICAgICAgICAgaWRzLm1hcCgoaWR4OiBudW1iZXIpID0+IHRyZWUucG9pbnRzW2lkeF0uaWQpIGFzIEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvckNyZWF0b3IoXG4gICAgICBkZWZhdWx0TWVtb2l6ZSxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIChcbiAgICAgICAgczE6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICAgICAgICBzMjogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKHMxID09PSBzMikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChzMSA9PSBudWxsIHx8IHMyID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHMxLnNpemUgIT09IHMyLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHMxKSBpZiAoIXMyLmhhcyhpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgKShcbiAgICAgIHRoaXMuX2dldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIChsb2NhdGlvbklkczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbklkcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uSWRzO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldFRvdGFsVW5maWx0ZXJlZENvdW50OiBTZWxlY3RvcjxMLCBGLCBudW1iZXIgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgIChmbG93cykgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBmbG93cy5yZWR1Y2UoXG4gICAgICAgIChtLCBmbG93KSA9PiBtICsgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRUb3RhbEZpbHRlcmVkQ291bnQ6IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzLFxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgKGZsb3dzLCBzZWxlY3RlZExvY2F0aW9uU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjb3VudCA9IGZsb3dzLnJlZHVjZSgobSwgZmxvdykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihmbG93LCBzZWxlY3RlZExvY2F0aW9uU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBtICsgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH0sXG4gICk7XG5cbiAgX2dldExvY2F0aW9uVG90YWxzRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvblRvdGFscywgKGxvY2F0aW9uVG90YWxzKSA9PlxuICAgICAgY2FsY0xvY2F0aW9uVG90YWxzRXh0ZW50KGxvY2F0aW9uVG90YWxzLCB1bmRlZmluZWQpLFxuICAgICk7XG5cbiAgX2dldExvY2F0aW9uVG90YWxzRm9yVmlld3BvcnRFeHRlbnQ6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgIChsb2NhdGlvblRvdGFscywgbG9jYXRpb25zSW5WaWV3cG9ydCkgPT5cbiAgICAgIGNhbGNMb2NhdGlvblRvdGFsc0V4dGVudChsb2NhdGlvblRvdGFscywgbG9jYXRpb25zSW5WaWV3cG9ydCksXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzdGF0ZS5zZXR0aW5nc1N0YXRlLmFkYXB0aXZlU2NhbGVzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExvY2F0aW9uVG90YWxzRm9yVmlld3BvcnRFeHRlbnQoc3RhdGUsIHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExvY2F0aW9uVG90YWxzRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfVxuICB9O1xuXG4gIGdldEZsb3dzRm9yRmxvd21hcExheWVyOiBTZWxlY3RvcjxMLCBGLCAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgICB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIHRoaXMuZ2V0TWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgICAgKFxuICAgICAgICBmbG93cyxcbiAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKCFmbG93cyB8fCAhbG9jYXRpb25JZHNJblZpZXdwb3J0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwaWNrZWQ6IChGIHwgQWdncmVnYXRlRmxvdylbXSA9IFtdO1xuICAgICAgICBsZXQgcGlja2VkQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZGVzdCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LmhhcyhvcmlnaW4pIHx8XG4gICAgICAgICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKGRlc3QpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgZmxvdyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3JpZ2luICE9PSBkZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBzZWxmLWxvb3BzXG4gICAgICAgICAgICAgICAgcGlja2VkLnB1c2goZmxvdyk7XG4gICAgICAgICAgICAgICAgcGlja2VkQ291bnQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPbmx5IGtlZXAgdG9wXG4gICAgICAgICAgaWYgKHBpY2tlZENvdW50ID4gbWF4VG9wRmxvd3NEaXNwbGF5TnVtKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlcixcbiAgICAgICAgLy8gd2UgbmVlZCBhc2NlbmRpbmcgZm9yIHJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gcGlja2VkLnJldmVyc2UoKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBfZ2V0Rmxvd01hZ25pdHVkZUV4dGVudDogU2VsZWN0b3I8TCwgRiwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRBZ2dyZWdhdGVkRmlsdGVyZWRGbG93cyxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIChmbG93cywgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnY6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmbG93cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmKSAhPT1cbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmKSAmJlxuICAgICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihmLCBzZWxlY3RlZExvY2F0aW9uc1NldCwgbG9jYXRpb25GaWx0ZXJNb2RlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpO1xuICAgICAgICAgICAgaWYgKHJ2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcnYgPSBbY291bnQsIGNvdW50XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA8IHJ2WzBdKSBydlswXSA9IGNvdW50O1xuICAgICAgICAgICAgICBpZiAoY291bnQgPiBydlsxXSkgcnZbMV0gPSBjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSxcbiAgICApO1xuXG4gIF9nZXRBZGFwdGl2ZUZsb3dNYWduaXR1ZGVFeHRlbnQ6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldEZsb3dzRm9yRmxvd21hcExheWVyLCAoZmxvd3MpID0+IHtcbiAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJ2ID0gZXh0ZW50KGZsb3dzLCB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKTtcbiAgICByZXR1cm4gcnZbMF0gIT09IHVuZGVmaW5lZCAmJiBydlsxXSAhPT0gdW5kZWZpbmVkID8gcnYgOiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGdldEZsb3dNYWduaXR1ZGVFeHRlbnQgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzdGF0ZS5zZXR0aW5nc1N0YXRlLmFkYXB0aXZlU2NhbGVzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEFkYXB0aXZlRmxvd01hZ25pdHVkZUV4dGVudChzdGF0ZSwgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Rmxvd01hZ25pdHVkZUV4dGVudChzdGF0ZSwgcHJvcHMpO1xuICAgIH1cbiAgfTtcblxuICBnZXRMb2NhdGlvbk1heEFic1RvdGFsR2V0dGVyID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFscyxcbiAgICAobG9jYXRpb25Ub3RhbHMpID0+IHtcbiAgICAgIHJldHVybiAobG9jYXRpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbG9jYXRpb25Ub3RhbHM/LmdldChsb2NhdGlvbklkKTtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgIE1hdGguYWJzKHRvdGFsLmluY29taW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgICBNYXRoLmFicyh0b3RhbC5vdXRnb2luZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRGbG93TWFnbml0dWRlRXh0ZW50LFxuICAgIChtYWduaXR1ZGVFeHRlbnQpID0+IHtcbiAgICAgIGlmICghbWFnbml0dWRlRXh0ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHNjYWxlTGluZWFyKClcbiAgICAgICAgLnJhbmdlKFswLjAyNSwgMC41XSlcbiAgICAgICAgLmRvbWFpbihbXG4gICAgICAgICAgMCxcbiAgICAgICAgICAvLyBzaG91bGQgc3VwcG9ydCBkaWZmIG1vZGUgdG9vXG4gICAgICAgICAgTWF0aC5tYXguYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbWFnbml0dWRlRXh0ZW50Lm1hcCgoeDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBNYXRoLmFicyh4IHx8IDApKSxcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICB9LFxuICApO1xuXG4gIGdldENpcmNsZVNpemVTY2FsZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TWF4TG9jYXRpb25DaXJjbGVTaXplLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQsXG4gICAgKG1heExvY2F0aW9uQ2lyY2xlU2l6ZSwgbG9jYXRpb25Ub3RhbHNFbmFibGVkLCBsb2NhdGlvblRvdGFsc0V4dGVudCkgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvblRvdGFsc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IG1heExvY2F0aW9uQ2lyY2xlU2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmICghbG9jYXRpb25Ub3RhbHNFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gc2NhbGVTcXJ0KClcbiAgICAgICAgLnJhbmdlKFswLCBtYXhMb2NhdGlvbkNpcmNsZVNpemVdKVxuICAgICAgICAuZG9tYWluKFtcbiAgICAgICAgICAwLFxuICAgICAgICAgIC8vIHNob3VsZCBzdXBwb3J0IGRpZmYgbW9kZSB0b29cbiAgICAgICAgICBNYXRoLm1heC5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBsb2NhdGlvblRvdGFsc0V4dGVudC5tYXAoKHg6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cbiAgICAgICAgICAgICAgTWF0aC5hYnMoeCB8fCAwKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRJbkNpcmNsZVNpemVHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENpcmNsZVNpemVTY2FsZSxcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChjaXJjbGVTaXplU2NhbGUsIGxvY2F0aW9uVG90YWxzKSA9PiB7XG4gICAgICByZXR1cm4gKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGxvY2F0aW9uVG90YWxzPy5nZXQobG9jYXRpb25JZCk7XG4gICAgICAgIGlmICh0b3RhbCAmJiBjaXJjbGVTaXplU2NhbGUpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2lyY2xlU2l6ZVNjYWxlKFxuICAgICAgICAgICAgICBNYXRoLmFicyh0b3RhbC5pbmNvbWluZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICAgICApIHx8IDBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICB9LFxuICApO1xuXG4gIGdldE91dENpcmNsZVNpemVHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENpcmNsZVNpemVTY2FsZSxcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChjaXJjbGVTaXplU2NhbGUsIGxvY2F0aW9uVG90YWxzKSA9PiB7XG4gICAgICByZXR1cm4gKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGxvY2F0aW9uVG90YWxzPy5nZXQobG9jYXRpb25JZCk7XG4gICAgICAgIGlmICh0b3RhbCAmJiBjaXJjbGVTaXplU2NhbGUpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2lyY2xlU2l6ZVNjYWxlKFxuICAgICAgICAgICAgICBNYXRoLmFicyh0b3RhbC5vdXRnb2luZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICAgICApIHx8IDBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICB9LFxuICApO1xuXG4gIGdldFNvcnRlZExvY2F0aW9uc0Zvclpvb206IFNlbGVjdG9yPEwsIEYsIExbXSB8IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yWm9vbSxcbiAgICAgIHRoaXMuZ2V0SW5DaXJjbGVTaXplR2V0dGVyLFxuICAgICAgdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyLFxuICAgICAgKGxvY2F0aW9ucywgZ2V0SW5DaXJjbGVTaXplLCBnZXRPdXRDaXJjbGVTaXplKSA9PiB7XG4gICAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBuZXh0TG9jYXRpb25zID0gWy4uLmxvY2F0aW9uc10gYXMgTFtdIHwgQ2x1c3Rlck5vZGVbXTtcbiAgICAgICAgcmV0dXJuIG5leHRMb2NhdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkQSA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQoYSk7XG4gICAgICAgICAgY29uc3QgaWRCID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChiKTtcbiAgICAgICAgICByZXR1cm4gYXNjZW5kaW5nKFxuICAgICAgICAgICAgTWF0aC5tYXgoZ2V0SW5DaXJjbGVTaXplKGlkQSksIGdldE91dENpcmNsZVNpemUoaWRBKSksXG4gICAgICAgICAgICBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUoaWRCKSwgZ2V0T3V0Q2lyY2xlU2l6ZShpZEIpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXI6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBBcnJheTxMIHwgQ2x1c3Rlck5vZGU+IHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZExvY2F0aW9uc0Zvclpvb20sXG4gICAgLy8gdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgKFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgLy8gbG9jYXRpb25JZHNJblZpZXdwb3J0XG4gICAgKSA9PiB7XG4gICAgICAvLyBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIC8vIGlmICghbG9jYXRpb25JZHNJblZpZXdwb3J0KSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgLy8gaWYgKGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5zaXplID09PSBsb2NhdGlvbnMubGVuZ3RoKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgLy8gY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgIC8vIGZvciAoY29uc3QgbG9jIG9mIGxvY2F0aW9ucykge1xuICAgICAgLy8gICBpZiAobG9jYXRpb25JZHNJblZpZXdwb3J0Lmhhcyhsb2MuaWQpKSB7XG4gICAgICAvLyAgICAgZmlsdGVyZWQucHVzaChsb2MpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAvLyByZXR1cm4gbG9jYXRpb25zLmZpbHRlcihcbiAgICAgIC8vICAgKGxvYzogTCB8IENsdXN0ZXJOb2RlKSA9PiBsb2NhdGlvbklkc0luVmlld3BvcnQhLmhhcyhsb2MuaWQpXG4gICAgICAvLyApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIGxvY2F0aW9uIGluIHZpZXdwb3J0ICsgXCJjb25uZWN0ZWRcIiBvbmVzXG4gICAgICByZXR1cm4gbG9jYXRpb25zO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyQnlJZDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIE1hcDxzdHJpbmcsIEwgfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyLCAobG9jYXRpb25zKSA9PiB7XG4gICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGxvY2F0aW9ucy5yZWR1Y2UoXG4gICAgICAobSwgZCkgPT4gKG0uc2V0KHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQoZCksIGQpLCBtKSxcbiAgICAgIG5ldyBNYXAoKSxcbiAgICApO1xuICB9KTtcblxuICBnZXRMYXllcnNEYXRhOiBTZWxlY3RvcjxMLCBGLCBMYXllcnNEYXRhPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyLFxuICAgIHRoaXMuZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXIsXG4gICAgdGhpcy5nZXRGbG93bWFwQ29sb3JzUkdCQSxcbiAgICB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllckJ5SWQsXG4gICAgdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIsXG4gICAgdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyLFxuICAgIHRoaXMuZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlLFxuICAgIHRoaXMuZ2V0QW5pbWF0ZSxcbiAgICAoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICBmbG93cyxcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBsb2NhdGlvbnNCeUlkLFxuICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgZ2V0T3V0Q2lyY2xlU2l6ZSxcbiAgICAgIGZsb3dUaGlja25lc3NTY2FsZSxcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUxheWVyc0RhdGEoXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICAgIGxvY2F0aW9uc0J5SWQsXG4gICAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgICBnZXRPdXRDaXJjbGVTaXplLFxuICAgICAgICBmbG93VGhpY2tuZXNzU2NhbGUsXG4gICAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgcHJlcGFyZUxheWVyc0RhdGEoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KTogTGF5ZXJzRGF0YSB7XG4gICAgY29uc3QgbG9jYXRpb25zID0gdGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXIoc3RhdGUsIHByb3BzKSB8fCBbXTtcbiAgICBjb25zdCBmbG93cyA9IHRoaXMuZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXIoc3RhdGUsIHByb3BzKSB8fCBbXTtcbiAgICBjb25zdCBmbG93bWFwQ29sb3JzID0gdGhpcy5nZXRGbG93bWFwQ29sb3JzUkdCQShzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGxvY2F0aW9uc0J5SWQgPSB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllckJ5SWQoc3RhdGUsIHByb3BzKTtcbiAgICBjb25zdCBsb2NhdGlvbklkc0luVmlld3BvcnQgPSB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydChzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGdldEluQ2lyY2xlU2l6ZSA9IHRoaXMuZ2V0SW5DaXJjbGVTaXplR2V0dGVyKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZ2V0T3V0Q2lyY2xlU2l6ZSA9IHRoaXMuZ2V0T3V0Q2lyY2xlU2l6ZUdldHRlcihzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGZsb3dUaGlja25lc3NTY2FsZSA9IHRoaXMuZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlKHN0YXRlLCBwcm9wcyk7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVMYXllcnNEYXRhKFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgZmxvd3MsXG4gICAgICBmbG93bWFwQ29sb3JzLFxuICAgICAgbG9jYXRpb25zQnlJZCxcbiAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIGdldEluQ2lyY2xlU2l6ZSxcbiAgICAgIGdldE91dENpcmNsZVNpemUsXG4gICAgICBmbG93VGhpY2tuZXNzU2NhbGUsXG4gICAgICBzdGF0ZS5zZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQsXG4gICAgKTtcbiAgfVxuXG4gIF9wcmVwYXJlTGF5ZXJzRGF0YShcbiAgICBsb2NhdGlvbnM6IChMIHwgQ2x1c3Rlck5vZGUpW10gfCB1bmRlZmluZWQsXG4gICAgZmxvd3M6IChGIHwgQWdncmVnYXRlRmxvdylbXSB8IHVuZGVmaW5lZCxcbiAgICBmbG93bWFwQ29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4gICAgbG9jYXRpb25zQnlJZDogTWFwPHN0cmluZywgTCB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbklkc0luVmlld3BvcnQ6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICAgIGdldEluQ2lyY2xlU2l6ZTogKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4gbnVtYmVyLFxuICAgIGdldE91dENpcmNsZVNpemU6IChsb2NhdGlvbklkOiBzdHJpbmcpID0+IG51bWJlcixcbiAgICBmbG93VGhpY2tuZXNzU2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4gfCB1bmRlZmluZWQsXG4gICAgYW5pbWF0aW9uRW5hYmxlZDogYm9vbGVhbixcbiAgKTogTGF5ZXJzRGF0YSB7XG4gICAgaWYgKCFsb2NhdGlvbnMpIGxvY2F0aW9ucyA9IFtdO1xuICAgIGlmICghZmxvd3MpIGZsb3dzID0gW107XG4gICAgY29uc3Qge1xuICAgICAgZ2V0Rmxvd09yaWdpbklkLFxuICAgICAgZ2V0Rmxvd0Rlc3RJZCxcbiAgICAgIGdldEZsb3dNYWduaXR1ZGUsXG4gICAgICBnZXRMb2NhdGlvbklkLFxuICAgICAgZ2V0TG9jYXRpb25Mb24sXG4gICAgICBnZXRMb2NhdGlvbkxhdCxcbiAgICB9ID0gdGhpcy5hY2Nlc3NvcnM7XG5cbiAgICBjb25zdCBmbG93TWFnbml0dWRlRXh0ZW50ID0gZXh0ZW50KGZsb3dzLCAoZikgPT4gZ2V0Rmxvd01hZ25pdHVkZShmKSkgYXMgW1xuICAgICAgbnVtYmVyLFxuICAgICAgbnVtYmVyLFxuICAgIF07XG4gICAgY29uc3QgZmxvd0NvbG9yU2NhbGUgPSBnZXRGbG93Q29sb3JTY2FsZShcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBmbG93TWFnbml0dWRlRXh0ZW50LFxuICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIC8vIFVzaW5nIGEgZ2VuZXJhdG9yIGhlcmUgaGVscHMgdG8gYXZvaWQgY3JlYXRpbmcgaW50ZXJtZWRpYXJ5IGFycmF5c1xuICAgIGNvbnN0IGNpcmNsZVBvc2l0aW9ucyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgeWllbGQgZ2V0TG9jYXRpb25Mb24obG9jYXRpb24pO1xuICAgICAgICAgIHlpZWxkIGdldExvY2F0aW9uTGF0KGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgLy8gVE9ETzogZGlmZiBtb2RlXG4gICAgY29uc3QgY2lyY2xlQ29sb3IgPSBpc0RpZmZDb2xvcnNSR0JBKGZsb3dtYXBDb2xvcnMpXG4gICAgICA/IGZsb3dtYXBDb2xvcnMucG9zaXRpdmUubG9jYXRpb25DaXJjbGVzLmlubmVyXG4gICAgICA6IGZsb3dtYXBDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyO1xuXG4gICAgY29uc3QgY2lyY2xlQ29sb3JzID0gVWludDhBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgeWllbGQqIGNpcmNsZUNvbG9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG5cbiAgICBjb25zdCBpbkNpcmNsZVJhZGlpID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICAgIHlpZWxkIGxvY2F0aW9uSWRzSW5WaWV3cG9ydD8uaGFzKGlkKSA/IGdldEluQ2lyY2xlU2l6ZShpZCkgOiAxLjA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCBvdXRDaXJjbGVSYWRpaSA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBnZXRMb2NhdGlvbklkKGxvY2F0aW9uKTtcbiAgICAgICAgICB5aWVsZCBsb2NhdGlvbklkc0luVmlld3BvcnQ/LmhhcyhpZCkgPyBnZXRPdXRDaXJjbGVTaXplKGlkKSA6IDEuMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc291cmNlUG9zaXRpb25zID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3QgbG9jID0gbG9jYXRpb25zQnlJZD8uZ2V0KGdldEZsb3dPcmlnaW5JZChmbG93KSk7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25Mb24obG9jKSA6IDA7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25MYXQobG9jKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbnMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbnNCeUlkPy5nZXQoZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25Mb24obG9jKSA6IDA7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25MYXQobG9jKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCB0aGlja25lc3NlcyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIHlpZWxkIGZsb3dUaGlja25lc3NTY2FsZVxuICAgICAgICAgICAgPyBmbG93VGhpY2tuZXNzU2NhbGUoZ2V0Rmxvd01hZ25pdHVkZShmbG93KSkgfHwgMFxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3QgZW5kcG9pbnRPZmZzZXRzID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSBnZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZGVzdElkID0gZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICAgICAgICB5aWVsZCBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUob3JpZ2luSWQpLCBnZXRPdXRDaXJjbGVTaXplKG9yaWdpbklkKSk7XG4gICAgICAgICAgeWllbGQgTWF0aC5tYXgoZ2V0SW5DaXJjbGVTaXplKGRlc3RJZCksIGdldE91dENpcmNsZVNpemUoZGVzdElkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCBmbG93TGluZUNvbG9ycyA9IFVpbnQ4QXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICB5aWVsZCogZmxvd0NvbG9yU2NhbGUoZ2V0Rmxvd01hZ25pdHVkZShmbG93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YWdnZXJpbmdWYWx1ZXMgPSBhbmltYXRpb25FbmFibGVkXG4gICAgICA/IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgeWllbGQgbmV3IGFsZWEoYCR7Z2V0Rmxvd09yaWdpbklkKGYpfS0ke2dldEZsb3dEZXN0SWQoZil9YCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpLFxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBjaXJjbGVBdHRyaWJ1dGVzOiB7XG4gICAgICAgIGxlbmd0aDogbG9jYXRpb25zLmxlbmd0aCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGdldFBvc2l0aW9uOiB7dmFsdWU6IGNpcmNsZVBvc2l0aW9ucywgc2l6ZTogMn0sXG4gICAgICAgICAgZ2V0Q29sb3I6IHt2YWx1ZTogY2lyY2xlQ29sb3JzLCBzaXplOiA0fSxcbiAgICAgICAgICBnZXRJblJhZGl1czoge3ZhbHVlOiBpbkNpcmNsZVJhZGlpLCBzaXplOiAxfSxcbiAgICAgICAgICBnZXRPdXRSYWRpdXM6IHt2YWx1ZTogb3V0Q2lyY2xlUmFkaWksIHNpemU6IDF9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxpbmVBdHRyaWJ1dGVzOiB7XG4gICAgICAgIGxlbmd0aDogZmxvd3MubGVuZ3RoLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgZ2V0U291cmNlUG9zaXRpb246IHt2YWx1ZTogc291cmNlUG9zaXRpb25zLCBzaXplOiAyfSxcbiAgICAgICAgICBnZXRUYXJnZXRQb3NpdGlvbjoge3ZhbHVlOiB0YXJnZXRQb3NpdGlvbnMsIHNpemU6IDJ9LFxuICAgICAgICAgIGdldFRoaWNrbmVzczoge3ZhbHVlOiB0aGlja25lc3Nlcywgc2l6ZTogMX0sXG4gICAgICAgICAgZ2V0Q29sb3I6IHt2YWx1ZTogZmxvd0xpbmVDb2xvcnMsIHNpemU6IDR9LFxuICAgICAgICAgIGdldEVuZHBvaW50T2Zmc2V0czoge3ZhbHVlOiBlbmRwb2ludE9mZnNldHMsIHNpemU6IDJ9LFxuICAgICAgICAgIC4uLihzdGFnZ2VyaW5nVmFsdWVzXG4gICAgICAgICAgICA/IHtnZXRTdGFnZ2VyaW5nOiB7dmFsdWU6IHN0YWdnZXJpbmdWYWx1ZXMsIHNpemU6IDF9fVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBnZXRMb2NhdGlvbnNJbkJib3goXG4gICAgdHJlZTogS0RCdXNoVHJlZSxcbiAgICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgKTogQXJyYXk8TD4gfCB1bmRlZmluZWQge1xuICAgIGlmICghdHJlZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5fZ2V0TG9jYXRpb25zSW5CYm94SW5kaWNlcyh0cmVlLCBiYm94KS5tYXAoXG4gICAgICAoaWR4OiBudW1iZXIpID0+IHRyZWUucG9pbnRzW2lkeF0sXG4gICAgKSBhcyBBcnJheTxMPjtcbiAgfVxuXG4gIF9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKFxuICAgIHRyZWU6IEtEQnVzaFRyZWUsXG4gICAgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICkge1xuICAgIGlmICghdHJlZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBbbG9uMSwgbGF0MSwgbG9uMiwgbGF0Ml0gPSBiYm94O1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBbbG5nWChsb24xKSwgbGF0WShsYXQxKSwgbG5nWChsb24yKSwgbGF0WShsYXQyKV07XG4gICAgcmV0dXJuIHRyZWUucmFuZ2UoXG4gICAgICBNYXRoLm1pbih4MSwgeDIpLFxuICAgICAgTWF0aC5taW4oeTEsIHkyKSxcbiAgICAgIE1hdGgubWF4KHgxLCB4MiksXG4gICAgICBNYXRoLm1heCh5MSwgeTIpLFxuICAgICk7XG4gIH1cblxuICBpc0Zsb3dJblNlbGVjdGlvbihcbiAgICBmbG93OiBGIHwgQWdncmVnYXRlRmxvdyxcbiAgICBzZWxlY3RlZExvY2F0aW9uc1NldDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgbG9jYXRpb25GaWx0ZXJNb2RlOiBMb2NhdGlvbkZpbHRlck1vZGUsXG4gICkge1xuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICBjb25zdCBkZXN0ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICBpZiAoc2VsZWN0ZWRMb2NhdGlvbnNTZXQpIHtcbiAgICAgIHN3aXRjaCAobG9jYXRpb25GaWx0ZXJNb2RlKSB7XG4gICAgICAgIGNhc2UgTG9jYXRpb25GaWx0ZXJNb2RlLkFMTDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKG9yaWdpbikgfHwgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKGRlc3QpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuQkVUV0VFTjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKG9yaWdpbikgJiYgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKGRlc3QpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuSU5DT01JTkc6XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhkZXN0KTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuT1VUR09JTkc6XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhvcmlnaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGNhbGNMb2NhdGlvblRvdGFscyhcbiAgLy8gICBsb2NhdGlvbnM6IChMIHwgQ2x1c3Rlck5vZGUpW10sXG4gIC8vICAgZmxvd3M6IEZbXSxcbiAgLy8gKTogTG9jYXRpb25zVG90YWxzIHtcbiAgLy8gICByZXR1cm4gZmxvd3MucmVkdWNlKFxuICAvLyAgICAgKGFjYzogTG9jYXRpb25zVG90YWxzLCBjdXJyKSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGN1cnIpO1xuICAvLyAgICAgICBjb25zdCBkZXN0SWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGN1cnIpO1xuICAvLyAgICAgICBjb25zdCBtYWduaXR1ZGUgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGN1cnIpO1xuICAvLyAgICAgICBpZiAob3JpZ2luSWQgPT09IGRlc3RJZCkge1xuICAvLyAgICAgICAgIGFjYy5pbnRlcm5hbFtvcmlnaW5JZF0gPSAoYWNjLmludGVybmFsW29yaWdpbklkXSB8fCAwKSArIG1hZ25pdHVkZTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBhY2Mub3V0Z29pbmdbb3JpZ2luSWRdID0gKGFjYy5vdXRnb2luZ1tvcmlnaW5JZF0gfHwgMCkgKyBtYWduaXR1ZGU7XG4gIC8vICAgICAgICAgYWNjLmluY29taW5nW2Rlc3RJZF0gPSAoYWNjLmluY29taW5nW2Rlc3RJZF0gfHwgMCkgKyBtYWduaXR1ZGU7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgcmV0dXJuIGFjYztcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7aW5jb21pbmc6IHt9LCBvdXRnb2luZzoge30sIGludGVybmFsOiB7fX0sXG4gIC8vICAgKTtcbiAgLy8gfVxufVxuXG5mdW5jdGlvbiBjYWxjTG9jYXRpb25Ub3RhbHNFeHRlbnQoXG4gIGxvY2F0aW9uVG90YWxzOiBNYXA8c3RyaW5nLCBMb2NhdGlvblRvdGFscz4gfCB1bmRlZmluZWQsXG4gIGxvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFsb2NhdGlvblRvdGFscykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IHJ2OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IFtcbiAgICBpZCxcbiAgICB7aW5jb21pbmdDb3VudCwgb3V0Z29pbmdDb3VudCwgaW50ZXJuYWxDb3VudH0sXG4gIF0gb2YgbG9jYXRpb25Ub3RhbHMuZW50cmllcygpKSB7XG4gICAgaWYgKGxvY2F0aW9uSWRzSW5WaWV3cG9ydCA9PSBudWxsIHx8IGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5oYXMoaWQpKSB7XG4gICAgICBjb25zdCBsbyA9IE1hdGgubWluKFxuICAgICAgICBpbmNvbWluZ0NvdW50ICsgaW50ZXJuYWxDb3VudCxcbiAgICAgICAgb3V0Z29pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIGludGVybmFsQ291bnQsXG4gICAgICApO1xuICAgICAgY29uc3QgaGkgPSBNYXRoLm1heChcbiAgICAgICAgaW5jb21pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIG91dGdvaW5nQ291bnQgKyBpbnRlcm5hbENvdW50LFxuICAgICAgICBpbnRlcm5hbENvdW50LFxuICAgICAgKTtcbiAgICAgIGlmICghcnYpIHtcbiAgICAgICAgcnYgPSBbbG8sIGhpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsbyA8IHJ2WzBdKSBydlswXSA9IGxvO1xuICAgICAgICBpZiAoaGkgPiBydlsxXSkgcnZbMV0gPSBoaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJ2O1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmc6IG51bWJlcikge1xuICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuXG5mdW5jdGlvbiBsYXRZKGxhdDogbnVtYmVyKSB7XG4gIGNvbnN0IHNpbiA9IE1hdGguc2luKChsYXQgKiBNYXRoLlBJKSAvIDE4MCk7XG4gIGNvbnN0IHkgPSAwLjUgLSAoMC4yNSAqIE1hdGgubG9nKCgxICsgc2luKSAvICgxIC0gc2luKSkpIC8gTWF0aC5QSTtcbiAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUZsb3dzPEY+KFxuICBmbG93czogRltdLFxuICBmbG93QWNjZXNzb3JzOiBGbG93QWNjZXNzb3JzPEY+LFxuKTogQWdncmVnYXRlRmxvd1tdIHtcbiAgLy8gU3VtIHVwIGZsb3dzIHdpdGggc2FtZSBvcmlnaW4sIGRlc3RcbiAgY29uc3QgYnlPcmlnaW5EZXN0ID0gcm9sbHVwKFxuICAgIGZsb3dzLFxuICAgIChmZjogRltdKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW4gPSBmbG93QWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmZlswXSk7XG4gICAgICBjb25zdCBkZXN0ID0gZmxvd0FjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZmWzBdKTtcbiAgICAgIC8vIGNvbnN0IGNvbG9yID0gZmZbMF0uY29sb3I7XG4gICAgICBjb25zdCBydjogQWdncmVnYXRlRmxvdyA9IHtcbiAgICAgICAgYWdncmVnYXRlOiB0cnVlLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGNvdW50OiBmZi5yZWR1Y2UoKG0sIGYpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmKTtcbiAgICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oY291bnQpICYmIGlzRmluaXRlKGNvdW50KSkgcmV0dXJuIG0gKyBjb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sIDApLFxuICAgICAgICAvLyB0aW1lOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgLy8gaWYgKGNvbG9yKSBydi5jb2xvciA9IGNvbG9yO1xuICAgICAgcmV0dXJuIHJ2O1xuICAgIH0sXG4gICAgZmxvd0FjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQsXG4gICAgZmxvd0FjY2Vzc29ycy5nZXRGbG93RGVzdElkLFxuICApO1xuXG4gIGNvbnN0IHJ2OiBBZ2dyZWdhdGVGbG93W10gPSBbXTtcbiAgZm9yIChjb25zdCB2YWx1ZXMgb2YgYnlPcmlnaW5EZXN0LnZhbHVlcygpKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMudmFsdWVzKCkpIHtcbiAgICAgIHJ2LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIHRvIGF1Z21lbnQgaG92ZXIgcGlja2luZyBpbmZvIHNvIHRoYXQgd2UgY2FuIGRpc3BsYWNlIGxvY2F0aW9uIHRvb2x0aXBcbiAqIEBwYXJhbSBjaXJjbGVBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCB7Z2V0SW5SYWRpdXMsIGdldE91dFJhZGl1c30gPSBjaXJjbGVBdHRyaWJ1dGVzLmF0dHJpYnV0ZXM7XG4gIHJldHVybiBNYXRoLm1heChnZXRJblJhZGl1cy52YWx1ZVtpbmRleF0sIGdldE91dFJhZGl1cy52YWx1ZVtpbmRleF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYXRpb25Db29yZHNCeUluZGV4KFxuICBjaXJjbGVBdHRyaWJ1dGVzOiBGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcyxcbiAgaW5kZXg6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB7Z2V0UG9zaXRpb259ID0gY2lyY2xlQXR0cmlidXRlcy5hdHRyaWJ1dGVzO1xuICByZXR1cm4gW2dldFBvc2l0aW9uLnZhbHVlW2luZGV4ICogMl0sIGdldFBvc2l0aW9uLnZhbHVlW2luZGV4ICogMiArIDFdXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgoXG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMge1xuICBjb25zdCB7XG4gICAgZ2V0Q29sb3IsXG4gICAgZ2V0RW5kcG9pbnRPZmZzZXRzLFxuICAgIGdldFNvdXJjZVBvc2l0aW9uLFxuICAgIGdldFRhcmdldFBvc2l0aW9uLFxuICAgIGdldFRoaWNrbmVzcyxcbiAgICBnZXRTdGFnZ2VyaW5nLFxuICB9ID0gbGluZUF0dHJpYnV0ZXMuYXR0cmlidXRlcztcbiAgcmV0dXJuIHtcbiAgICBsZW5ndGg6IDEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgZ2V0Q29sb3I6IHtcbiAgICAgICAgdmFsdWU6IGdldENvbG9yLnZhbHVlLnN1YmFycmF5KGluZGV4ICogNCwgKGluZGV4ICsgMSkgKiA0KSxcbiAgICAgICAgc2l6ZTogNCxcbiAgICAgIH0sXG4gICAgICBnZXRFbmRwb2ludE9mZnNldHM6IHtcbiAgICAgICAgdmFsdWU6IGdldEVuZHBvaW50T2Zmc2V0cy52YWx1ZS5zdWJhcnJheShpbmRleCAqIDIsIChpbmRleCArIDEpICogMiksXG4gICAgICAgIHNpemU6IDIsXG4gICAgICB9LFxuICAgICAgZ2V0U291cmNlUG9zaXRpb246IHtcbiAgICAgICAgdmFsdWU6IGdldFNvdXJjZVBvc2l0aW9uLnZhbHVlLnN1YmFycmF5KGluZGV4ICogMiwgKGluZGV4ICsgMSkgKiAyKSxcbiAgICAgICAgc2l6ZTogMixcbiAgICAgIH0sXG4gICAgICBnZXRUYXJnZXRQb3NpdGlvbjoge1xuICAgICAgICB2YWx1ZTogZ2V0VGFyZ2V0UG9zaXRpb24udmFsdWUuc3ViYXJyYXkoaW5kZXggKiAyLCAoaW5kZXggKyAxKSAqIDIpLFxuICAgICAgICBzaXplOiAyLFxuICAgICAgfSxcbiAgICAgIGdldFRoaWNrbmVzczoge1xuICAgICAgICB2YWx1ZTogZ2V0VGhpY2tuZXNzLnZhbHVlLnN1YmFycmF5KGluZGV4LCBpbmRleCArIDEpLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgfSxcbiAgICAgIC4uLihnZXRTdGFnZ2VyaW5nXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZ2V0U3RhZ2dlcmluZzoge1xuICAgICAgICAgICAgICB2YWx1ZTogZ2V0U3RhZ2dlcmluZy52YWx1ZS5zdWJhcnJheShpbmRleCwgaW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAqB,cAAc,EAAC,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC;IAC/C,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1D,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI3D,uBAAuB,CACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;IAEtE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAE9D,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAQtE,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAClD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAQ3B;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,YAAY,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAU3C"}
1
+ {"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAqB,cAAc,EAAC,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC;IAC/C,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1D,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI3D,uBAAuB,CACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;IAEtE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAE9D,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAQtE,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAClD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAO3B;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,YAAY,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAU3C"}
@@ -1,9 +1,9 @@
1
1
  export function isFlowmapData(data) {
2
- return (data &&
3
- data.locations &&
4
- data.flows &&
5
- Array.isArray(data.locations) &&
6
- Array.isArray(data.flows));
2
+ return (data && data.locations && data.flows
3
+ // TODO: test that they are iterable
4
+ // Array.isArray(data.locations) &&
5
+ // Array.isArray(data.flows)
6
+ );
7
7
  }
8
8
  export function isFlowmapDataProvider(dataProvider) {
9
9
  return (dataProvider &&
@@ -14,4 +14,4 @@ export function isFlowmapDataProvider(dataProvider) {
14
14
  typeof dataProvider.getLocationByIndex === 'function' &&
15
15
  typeof dataProvider.getLayersData === 'function');
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdDQSxNQUFNLFVBQVUsYUFBYSxDQUMzQixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSTtRQUNKLElBQUksQ0FBQyxTQUFTO1FBQ2QsSUFBSSxDQUFDLEtBQUs7UUFDVixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxZQUFpQztJQUVqQyxPQUFPLENBQ0wsWUFBWTtRQUNaLE9BQU8sWUFBWSxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQ2xELE9BQU8sWUFBWSxDQUFDLHVCQUF1QixLQUFLLFVBQVU7UUFDMUQsT0FBTyxZQUFZLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFDakQsT0FBTyxZQUFZLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFDbEQsT0FBTyxZQUFZLENBQUMsa0JBQWtCLEtBQUssVUFBVTtRQUNyRCxPQUFPLFlBQVksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWdncmVnYXRlRmxvdywgQ2x1c3RlciwgTG9jYXRpb25BY2Nlc3NvcnMsIExvY2F0aW9uVG90YWxzfSBmcm9tICcuLic7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi4vRmxvd21hcFN0YXRlJztcbmltcG9ydCB7XG4gIENsdXN0ZXJOb2RlLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIExheWVyc0RhdGEsXG4gIFZpZXdwb3J0UHJvcHMsXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJmYWNlIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICBzZXRBY2Nlc3NvcnMoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPik6IHZvaWQ7XG5cbiAgc2V0Rmxvd21hcFN0YXRlKGZsb3dtYXBTdGF0ZTogRmxvd21hcFN0YXRlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBjbGVhckRhdGEoKTogdm9pZDtcblxuICBnZXRWaWV3cG9ydEZvckxvY2F0aW9ucyhcbiAgICBkaW1zOiBbbnVtYmVyLCBudW1iZXJdLFxuICApOiBQcm9taXNlPFZpZXdwb3J0UHJvcHMgfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldEZsb3dUb3RhbHMoKTogUHJvbWlzZTxGbG93VG90YWxzPjtcblxuICBnZXRGbG93QnlJbmRleChpbmRleDogbnVtYmVyKTogUHJvbWlzZTxGIHwgQWdncmVnYXRlRmxvdyB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0TG9jYXRpb25CeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEwgfCBDbHVzdGVyIHwgdW5kZWZpbmVkPjtcblxuICBnZXRMb2NhdGlvbkJ5SW5kZXgoaWR4OiBudW1iZXIpOiBQcm9taXNlPEwgfCBDbHVzdGVyTm9kZSB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0VG90YWxzRm9yTG9jYXRpb24oaWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25Ub3RhbHMgfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldExvY2F0aW9uc0luQmJveChcbiAgLy8gICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgLy8gKTogUHJvbWlzZTxBcnJheTxGbG93TG9jYXRpb24gfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldExvY2F0aW9uc0ZvclNlYXJjaEJveCgpOiBQcm9taXNlPChGbG93TG9jYXRpb24gfCBDbHVzdGVyTm9kZSlbXSB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0TGF5ZXJzRGF0YSgpOiBQcm9taXNlPExheWVyc0RhdGEgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG93bWFwRGF0YTxMLCBGPihcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGRhdGEgaXMgRmxvd21hcERhdGE8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGEgJiZcbiAgICBkYXRhLmxvY2F0aW9ucyAmJlxuICAgIGRhdGEuZmxvd3MgJiZcbiAgICBBcnJheS5pc0FycmF5KGRhdGEubG9jYXRpb25zKSAmJlxuICAgIEFycmF5LmlzQXJyYXkoZGF0YS5mbG93cylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPihcbiAgZGF0YVByb3ZpZGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZGF0YVByb3ZpZGVyIGlzIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFQcm92aWRlciAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcFN0YXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRWaWV3cG9ydEZvckxvY2F0aW9ucyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXggPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRMYXllcnNEYXRhID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdDQSxNQUFNLFVBQVUsYUFBYSxDQUMzQixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUs7SUFDcEMsb0NBQW9DO0lBQ3BDLG1DQUFtQztJQUNuQyw0QkFBNEI7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFlBQWlDO0lBRWpDLE9BQU8sQ0FDTCxZQUFZO1FBQ1osT0FBTyxZQUFZLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFDbEQsT0FBTyxZQUFZLENBQUMsdUJBQXVCLEtBQUssVUFBVTtRQUMxRCxPQUFPLFlBQVksQ0FBQyxjQUFjLEtBQUssVUFBVTtRQUNqRCxPQUFPLFlBQVksQ0FBQyxlQUFlLEtBQUssVUFBVTtRQUNsRCxPQUFPLFlBQVksQ0FBQyxrQkFBa0IsS0FBSyxVQUFVO1FBQ3JELE9BQU8sWUFBWSxDQUFDLGFBQWEsS0FBSyxVQUFVLENBQ2pELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZ2dyZWdhdGVGbG93LCBDbHVzdGVyLCBMb2NhdGlvbkFjY2Vzc29ycywgTG9jYXRpb25Ub3RhbHN9IGZyb20gJy4uJztcbmltcG9ydCB7Rmxvd21hcFN0YXRlfSBmcm9tICcuLi9GbG93bWFwU3RhdGUnO1xuaW1wb3J0IHtcbiAgQ2x1c3Rlck5vZGUsXG4gIEZsb3dtYXBEYXRhLFxuICBGbG93bWFwRGF0YUFjY2Vzc29ycyxcbiAgTGF5ZXJzRGF0YSxcbiAgVmlld3BvcnRQcm9wcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRlcmZhY2UgRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPiB7XG4gIHNldEFjY2Vzc29ycyhhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KTogdm9pZDtcblxuICBzZXRGbG93bWFwU3RhdGUoZmxvd21hcFN0YXRlOiBGbG93bWFwU3RhdGUpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIGNsZWFyRGF0YSgpOiB2b2lkO1xuXG4gIGdldFZpZXdwb3J0Rm9yTG9jYXRpb25zKFxuICAgIGRpbXM6IFtudW1iZXIsIG51bWJlcl0sXG4gICk6IFByb21pc2U8Vmlld3BvcnRQcm9wcyB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0Rmxvd1RvdGFscygpOiBQcm9taXNlPEZsb3dUb3RhbHM+O1xuXG4gIGdldEZsb3dCeUluZGV4KGluZGV4OiBudW1iZXIpOiBQcm9taXNlPEYgfCBBZ2dyZWdhdGVGbG93IHwgdW5kZWZpbmVkPjtcblxuICBnZXRMb2NhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8TCB8IENsdXN0ZXIgfCB1bmRlZmluZWQ+O1xuXG4gIGdldExvY2F0aW9uQnlJbmRleChpZHg6IG51bWJlcik6IFByb21pc2U8TCB8IENsdXN0ZXJOb2RlIHwgdW5kZWZpbmVkPjtcblxuICBnZXRUb3RhbHNGb3JMb2NhdGlvbihpZDogc3RyaW5nKTogUHJvbWlzZTxMb2NhdGlvblRvdGFscyB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0TG9jYXRpb25zSW5CYm94KFxuICAvLyAgIGJib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAvLyApOiBQcm9taXNlPEFycmF5PEZsb3dMb2NhdGlvbiB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0TG9jYXRpb25zRm9yU2VhcmNoQm94KCk6IFByb21pc2U8KEZsb3dMb2NhdGlvbiB8IENsdXN0ZXJOb2RlKVtdIHwgdW5kZWZpbmVkPjtcblxuICBnZXRMYXllcnNEYXRhKCk6IFByb21pc2U8TGF5ZXJzRGF0YSB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb3dtYXBEYXRhPEwsIEY+KFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZGF0YSBpcyBGbG93bWFwRGF0YTxMLCBGPiB7XG4gIHJldHVybiAoXG4gICAgZGF0YSAmJiBkYXRhLmxvY2F0aW9ucyAmJiBkYXRhLmZsb3dzXG4gICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZXkgYXJlIGl0ZXJhYmxlXG4gICAgLy8gQXJyYXkuaXNBcnJheShkYXRhLmxvY2F0aW9ucykgJiZcbiAgICAvLyBBcnJheS5pc0FycmF5KGRhdGEuZmxvd3MpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4oXG4gIGRhdGFQcm92aWRlcjogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGRhdGFQcm92aWRlciBpcyBGbG93bWFwRGF0YVByb3ZpZGVyPEwsIEY+IHtcbiAgcmV0dXJuIChcbiAgICBkYXRhUHJvdmlkZXIgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLnNldEZsb3dtYXBTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0Vmlld3BvcnRGb3JMb2NhdGlvbnMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldEZsb3dCeUluZGV4ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRMb2NhdGlvbkJ5SWQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJbmRleCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0TGF5ZXJzRGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl19
package/dist/types.js CHANGED
@@ -8,9 +8,9 @@ export function isLocationClusterNode(l) {
8
8
  }
9
9
  export function isAggregateFlow(flow) {
10
10
  return (flow &&
11
- flow.origin !== undefined &&
12
- flow.dest !== undefined &&
13
- flow.count !== undefined &&
11
+ // flow.origin !== undefined &&
12
+ // flow.dest !== undefined &&
13
+ // flow.count !== undefined &&
14
14
  (flow.aggregate ? true : false));
15
15
  }
16
16
  export var LocationFilterMode;
@@ -20,4 +20,4 @@ export var LocationFilterMode;
20
20
  LocationFilterMode["OUTGOING"] = "OUTGOING";
21
21
  LocationFilterMode["BETWEEN"] = "BETWEEN";
22
22
  })(LocationFilterMode || (LocationFilterMode = {}));
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0ZBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBYztJQUN0QyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsQ0FBWSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksQ0FBa0I7SUFDekQsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLENBQWdCLENBQUM7SUFDaEMsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFTRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSTtRQUNKLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUztRQUN6QixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDdkIsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQ3hCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFPRCxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLGlDQUFXLENBQUE7SUFDWCwyQ0FBcUIsQ0FBQTtJQUNyQiwyQ0FBcUIsQ0FBQTtJQUNyQix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUs3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEZsb3dtYXBEYXRhPEwsIEY+ID0ge1xuICBsb2NhdGlvbnM6IEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkO1xuICBmbG93czogSXRlcmFibGU8Rj4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdTdGF0ZSB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIGJlYXJpbmc/OiBudW1iZXI7XG4gIHBpdGNoPzogbnVtYmVyO1xuICBhbHRpdHVkZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRmxvd0FjY2Vzc29yPEYsIFQ+ID0gKGZsb3c6IEYpID0+IFQ7IC8vIG9iamVjdEluZm8/OiBBY2Nlc3Nvck9iamVjdEluZm8sXG5leHBvcnQgdHlwZSBMb2NhdGlvbkFjY2Vzc29yPEwsIFQ+ID0gKGxvY2F0aW9uOiBMKSA9PiBUO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dBY2Nlc3NvcnM8Rj4ge1xuICBnZXRGbG93T3JpZ2luSWQ6IEZsb3dBY2Nlc3NvcjxGLCBzdHJpbmc+O1xuICBnZXRGbG93RGVzdElkOiBGbG93QWNjZXNzb3I8Riwgc3RyaW5nPjtcbiAgZ2V0Rmxvd01hZ25pdHVkZTogRmxvd0FjY2Vzc29yPEYsIG51bWJlcj47XG4gIGdldEZsb3dUaW1lPzogRmxvd0FjY2Vzc29yPEYsIERhdGU+OyAvLyBUT0RPOiB1c2UgbnVtYmVyIGluc3RlYWQgb2YgRGF0ZVxuICAvLyBnZXRGbG93Q29sb3I/OiBGbG93QWNjZXNzb3I8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkFjY2Vzc29yczxMPiB7XG4gIGdldExvY2F0aW9uSWQ6IExvY2F0aW9uQWNjZXNzb3I8TCwgc3RyaW5nPjtcbiAgZ2V0TG9jYXRpb25OYW1lPzogTG9jYXRpb25BY2Nlc3NvcjxMLCBzdHJpbmc+O1xuICBnZXRMb2NhdGlvbkxhdDogTG9jYXRpb25BY2Nlc3NvcjxMLCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbkxvbjogTG9jYXRpb25BY2Nlc3NvcjxMLCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lPzogKGxvY2F0aW9uSWRzOiBzdHJpbmdbXSkgPT4gc3RyaW5nO1xuICAvLyBnZXRMb2NhdGlvblRvdGFsSW4/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxPdXQ/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxJbnRlcm5hbD86IExvY2F0aW9uQWNjZXNzb3I8bnVtYmVyPjtcbn1cblxuZXhwb3J0IHR5cGUgRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4gPSBMb2NhdGlvbkFjY2Vzc29yczxMPiAmXG4gIEZsb3dBY2Nlc3NvcnM8Rj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25Ub3RhbHMge1xuICBpbmNvbWluZ0NvdW50OiBudW1iZXI7XG4gIG91dGdvaW5nQ291bnQ6IG51bWJlcjtcbiAgaW50ZXJuYWxDb3VudDogbnVtYmVyO1xufVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uc1RvdGFscyB7XG4vLyAgIGluY29taW5nOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9O1xuLy8gICBvdXRnb2luZzoge1tpZDogc3RyaW5nXTogbnVtYmVyfTtcbi8vICAgaW50ZXJuYWw6IHtbaWQ6IHN0cmluZ106IG51bWJlcn07XG4vLyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRCeVRpbWUge1xuICB0aW1lOiBEYXRlO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UHJvcHMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIHpvb206IG51bWJlcjtcbiAgYmVhcmluZzogbnVtYmVyO1xuICBwaXRjaDogbnVtYmVyO1xuICBhbHRpdHVkZT86IG51bWJlcjtcbiAgbWF4Wm9vbT86IG51bWJlcjtcbiAgbWluWm9vbT86IG51bWJlcjtcbiAgbWF4UGl0Y2g/OiBudW1iZXI7XG4gIG1pblBpdGNoPzogbnVtYmVyO1xuICB0cmFuc2l0aW9uRHVyYXRpb24/OiBudW1iZXIgfCAnYXV0byc7XG4gIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I/OiBhbnk7XG4gIHRyYW5zaXRpb25JbnRlcnJ1cHRpb24/OiBhbnk7XG4gIHRyYW5zaXRpb25FYXNpbmc/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3Rlck5vZGUge1xuICBpZDogc3RyaW5nO1xuICB6b29tOiBudW1iZXI7XG4gIGxhdDogbnVtYmVyO1xuICBsb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTGV2ZWwge1xuICB6b29tOiBudW1iZXI7XG4gIG5vZGVzOiBDbHVzdGVyTm9kZVtdO1xufVxuXG5leHBvcnQgdHlwZSBDbHVzdGVyTGV2ZWxzID0gQ2x1c3RlckxldmVsW107XG5cbi8vIG5vbi1sZWFmIGNsdXN0ZXIgbm9kZVxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyIGV4dGVuZHMgQ2x1c3Rlck5vZGUge1xuICBuYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsdXN0ZXIoYzogQ2x1c3Rlck5vZGUpOiBjIGlzIENsdXN0ZXIge1xuICBjb25zdCB7Y2hpbGRyZW59ID0gYyBhcyBDbHVzdGVyO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYXRpb25DbHVzdGVyTm9kZTxMPihsOiBMIHwgQ2x1c3Rlck5vZGUpOiBsIGlzIENsdXN0ZXJOb2RlIHtcbiAgY29uc3Qge3pvb219ID0gbCBhcyBDbHVzdGVyTm9kZTtcbiAgcmV0dXJuIHpvb20gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVGbG93IHtcbiAgb3JpZ2luOiBzdHJpbmc7XG4gIGRlc3Q6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgYWdncmVnYXRlOiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBZ2dyZWdhdGVGbG93KFxuICBmbG93OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZmxvdyBpcyBBZ2dyZWdhdGVGbG93IHtcbiAgcmV0dXJuIChcbiAgICBmbG93ICYmXG4gICAgZmxvdy5vcmlnaW4gIT09IHVuZGVmaW5lZCAmJlxuICAgIGZsb3cuZGVzdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgZmxvdy5jb3VudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKGZsb3cuYWdncmVnYXRlID8gdHJ1ZSA6IGZhbHNlKVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDb3VudHNNYXBSZWR1Y2U8RiwgVCA9IGFueT4ge1xuICBtYXA6IChmbG93OiBGKSA9PiBUO1xuICByZWR1Y2U6IChhY2N1bXVsYXRlZDogVCwgdmFsOiBUKSA9PiBUO1xufVxuXG5leHBvcnQgZW51bSBMb2NhdGlvbkZpbHRlck1vZGUge1xuICBBTEwgPSAnQUxMJyxcbiAgSU5DT01JTkcgPSAnSU5DT01JTkcnLFxuICBPVVRHT0lORyA9ICdPVVRHT0lORycsXG4gIEJFVFdFRU4gPSAnQkVUV0VFTicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgYXR0cmlidXRlczoge1xuICAgIGdldFBvc2l0aW9uOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICAgIGdldENvbG9yOiBMYXllcnNEYXRhQXR0clZhbHVlczxVaW50OEFycmF5PjtcbiAgICBnZXRJblJhZGl1czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRPdXRSYWRpdXM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBnZXRTb3VyY2VQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUYXJnZXRQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUaGlja25lc3M6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0Q29sb3I6IExheWVyc0RhdGFBdHRyVmFsdWVzPFVpbnQ4QXJyYXk+O1xuICAgIGdldEVuZHBvaW50T2Zmc2V0czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRTdGFnZ2VyaW5nPzogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXllcnNEYXRhIHtcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXM7XG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG59XG5cbmV4cG9ydCB0eXBlIExheWVyc0RhdGFBdHRyVmFsdWVzPFQ+ID0ge3ZhbHVlOiBUOyBzaXplOiBudW1iZXJ9O1xuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0ZBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBYztJQUN0QyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsQ0FBWSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksQ0FBa0I7SUFDekQsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLENBQWdCLENBQUM7SUFDaEMsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFTRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSTtRQUNKLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFDN0IsOEJBQThCO1FBQzlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFPRCxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLGlDQUFXLENBQUE7SUFDWCwyQ0FBcUIsQ0FBQTtJQUNyQiwyQ0FBcUIsQ0FBQTtJQUNyQix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUs3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEZsb3dtYXBEYXRhPEwsIEY+ID0ge1xuICBsb2NhdGlvbnM6IEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkO1xuICBmbG93czogSXRlcmFibGU8Rj4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdTdGF0ZSB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIGJlYXJpbmc/OiBudW1iZXI7XG4gIHBpdGNoPzogbnVtYmVyO1xuICBhbHRpdHVkZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRmxvd0FjY2Vzc29yPEYsIFQ+ID0gKGZsb3c6IEYpID0+IFQ7IC8vIG9iamVjdEluZm8/OiBBY2Nlc3Nvck9iamVjdEluZm8sXG5leHBvcnQgdHlwZSBMb2NhdGlvbkFjY2Vzc29yPEwsIFQ+ID0gKGxvY2F0aW9uOiBMKSA9PiBUO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dBY2Nlc3NvcnM8Rj4ge1xuICBnZXRGbG93T3JpZ2luSWQ6IEZsb3dBY2Nlc3NvcjxGLCBzdHJpbmc+O1xuICBnZXRGbG93RGVzdElkOiBGbG93QWNjZXNzb3I8Riwgc3RyaW5nPjtcbiAgZ2V0Rmxvd01hZ25pdHVkZTogRmxvd0FjY2Vzc29yPEYsIG51bWJlcj47XG4gIGdldEZsb3dUaW1lPzogRmxvd0FjY2Vzc29yPEYsIERhdGU+OyAvLyBUT0RPOiB1c2UgbnVtYmVyIGluc3RlYWQgb2YgRGF0ZVxuICAvLyBnZXRGbG93Q29sb3I/OiBGbG93QWNjZXNzb3I8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkFjY2Vzc29yczxMPiB7XG4gIGdldExvY2F0aW9uSWQ6IExvY2F0aW9uQWNjZXNzb3I8TCwgc3RyaW5nPjtcbiAgZ2V0TG9jYXRpb25OYW1lPzogTG9jYXRpb25BY2Nlc3NvcjxMLCBzdHJpbmc+O1xuICBnZXRMb2NhdGlvbkxhdDogTG9jYXRpb25BY2Nlc3NvcjxMLCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbkxvbjogTG9jYXRpb25BY2Nlc3NvcjxMLCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lPzogKGxvY2F0aW9uSWRzOiBzdHJpbmdbXSkgPT4gc3RyaW5nO1xuICAvLyBnZXRMb2NhdGlvblRvdGFsSW4/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxPdXQ/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxJbnRlcm5hbD86IExvY2F0aW9uQWNjZXNzb3I8bnVtYmVyPjtcbn1cblxuZXhwb3J0IHR5cGUgRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4gPSBMb2NhdGlvbkFjY2Vzc29yczxMPiAmXG4gIEZsb3dBY2Nlc3NvcnM8Rj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25Ub3RhbHMge1xuICBpbmNvbWluZ0NvdW50OiBudW1iZXI7XG4gIG91dGdvaW5nQ291bnQ6IG51bWJlcjtcbiAgaW50ZXJuYWxDb3VudDogbnVtYmVyO1xufVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uc1RvdGFscyB7XG4vLyAgIGluY29taW5nOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9O1xuLy8gICBvdXRnb2luZzoge1tpZDogc3RyaW5nXTogbnVtYmVyfTtcbi8vICAgaW50ZXJuYWw6IHtbaWQ6IHN0cmluZ106IG51bWJlcn07XG4vLyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRCeVRpbWUge1xuICB0aW1lOiBEYXRlO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UHJvcHMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIHpvb206IG51bWJlcjtcbiAgYmVhcmluZzogbnVtYmVyO1xuICBwaXRjaDogbnVtYmVyO1xuICBhbHRpdHVkZT86IG51bWJlcjtcbiAgbWF4Wm9vbT86IG51bWJlcjtcbiAgbWluWm9vbT86IG51bWJlcjtcbiAgbWF4UGl0Y2g/OiBudW1iZXI7XG4gIG1pblBpdGNoPzogbnVtYmVyO1xuICB0cmFuc2l0aW9uRHVyYXRpb24/OiBudW1iZXIgfCAnYXV0byc7XG4gIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I/OiBhbnk7XG4gIHRyYW5zaXRpb25JbnRlcnJ1cHRpb24/OiBhbnk7XG4gIHRyYW5zaXRpb25FYXNpbmc/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3Rlck5vZGUge1xuICBpZDogc3RyaW5nO1xuICB6b29tOiBudW1iZXI7XG4gIGxhdDogbnVtYmVyO1xuICBsb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTGV2ZWwge1xuICB6b29tOiBudW1iZXI7XG4gIG5vZGVzOiBDbHVzdGVyTm9kZVtdO1xufVxuXG5leHBvcnQgdHlwZSBDbHVzdGVyTGV2ZWxzID0gQ2x1c3RlckxldmVsW107XG5cbi8vIG5vbi1sZWFmIGNsdXN0ZXIgbm9kZVxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyIGV4dGVuZHMgQ2x1c3Rlck5vZGUge1xuICBuYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsdXN0ZXIoYzogQ2x1c3Rlck5vZGUpOiBjIGlzIENsdXN0ZXIge1xuICBjb25zdCB7Y2hpbGRyZW59ID0gYyBhcyBDbHVzdGVyO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYXRpb25DbHVzdGVyTm9kZTxMPihsOiBMIHwgQ2x1c3Rlck5vZGUpOiBsIGlzIENsdXN0ZXJOb2RlIHtcbiAgY29uc3Qge3pvb219ID0gbCBhcyBDbHVzdGVyTm9kZTtcbiAgcmV0dXJuIHpvb20gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVGbG93IHtcbiAgb3JpZ2luOiBzdHJpbmc7XG4gIGRlc3Q6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgYWdncmVnYXRlOiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBZ2dyZWdhdGVGbG93KFxuICBmbG93OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZmxvdyBpcyBBZ2dyZWdhdGVGbG93IHtcbiAgcmV0dXJuIChcbiAgICBmbG93ICYmXG4gICAgLy8gZmxvdy5vcmlnaW4gIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vIGZsb3cuZGVzdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgLy8gZmxvdy5jb3VudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKGZsb3cuYWdncmVnYXRlID8gdHJ1ZSA6IGZhbHNlKVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDb3VudHNNYXBSZWR1Y2U8RiwgVCA9IGFueT4ge1xuICBtYXA6IChmbG93OiBGKSA9PiBUO1xuICByZWR1Y2U6IChhY2N1bXVsYXRlZDogVCwgdmFsOiBUKSA9PiBUO1xufVxuXG5leHBvcnQgZW51bSBMb2NhdGlvbkZpbHRlck1vZGUge1xuICBBTEwgPSAnQUxMJyxcbiAgSU5DT01JTkcgPSAnSU5DT01JTkcnLFxuICBPVVRHT0lORyA9ICdPVVRHT0lORycsXG4gIEJFVFdFRU4gPSAnQkVUV0VFTicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgYXR0cmlidXRlczoge1xuICAgIGdldFBvc2l0aW9uOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICAgIGdldENvbG9yOiBMYXllcnNEYXRhQXR0clZhbHVlczxVaW50OEFycmF5PjtcbiAgICBnZXRJblJhZGl1czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRPdXRSYWRpdXM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBnZXRTb3VyY2VQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUYXJnZXRQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUaGlja25lc3M6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0Q29sb3I6IExheWVyc0RhdGFBdHRyVmFsdWVzPFVpbnQ4QXJyYXk+O1xuICAgIGdldEVuZHBvaW50T2Zmc2V0czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRTdGFnZ2VyaW5nPzogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXllcnNEYXRhIHtcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXM7XG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG59XG5cbmV4cG9ydCB0eXBlIExheWVyc0RhdGFBdHRyVmFsdWVzPFQ+ID0ge3ZhbHVlOiBUOyBzaXplOiBudW1iZXJ9O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowmap.gl/data",
3
- "version": "8.0.0-alpha.14",
3
+ "version": "8.0.0-alpha.18",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,16 +13,15 @@
13
13
  "prepare": "yarn build"
14
14
  },
15
15
  "dependencies": {
16
- "@flowmap.gl/data": "^8.0.0-alpha.14",
17
- "d3-array": "^3.0.2",
18
- "d3-collection": "^1.0.7",
19
- "d3-color": "^3.0.1",
20
- "d3-geo": "^3.0.1",
21
- "d3-interpolate": "^3.0.1",
22
- "d3-scale": "^4.0.0",
23
- "d3-scale-chromatic": "^3.0.0",
24
- "d3-time": "^3.0.0",
25
- "d3-time-format": "^4.0.0",
16
+ "@flowmap.gl/data": "^8.0.0-alpha.18",
17
+ "d3-array": "2 - 3",
18
+ "d3-color": "2 - 3",
19
+ "d3-geo": "2 - 3",
20
+ "d3-interpolate": "2 - 3",
21
+ "d3-scale": "3 - 4",
22
+ "d3-scale-chromatic": "2 - 3",
23
+ "d3-time": "2 - 3",
24
+ "d3-time-format": "3 - 4",
26
25
  "kdbush": "^3.0.0",
27
26
  "reselect": "^4.0.0",
28
27
  "seedrandom": "^3.0.5"
@@ -42,7 +41,7 @@
42
41
  "@types/mapbox__geo-viewport": "^0.4.1",
43
42
  "@types/seedrandom": "^3.0.1"
44
43
  },
45
- "gitHead": "0a77d66dc556ac5c4d678df4910b65149a928450",
44
+ "gitHead": "8a61de22cc5efc59074415c7ab17d1961590fe5b",
46
45
  "publishConfig": {
47
46
  "access": "public"
48
47
  }
@@ -17,8 +17,7 @@
17
17
  */
18
18
 
19
19
  import {WebMercatorViewport} from '@math.gl/web-mercator';
20
- import {ascending, descending, extent, min} from 'd3-array';
21
- import {nest} from 'd3-collection';
20
+ import {ascending, rollup, descending, extent, min} from 'd3-array';
22
21
  import {ScaleLinear, scaleLinear, scaleSqrt} from 'd3-scale';
23
22
  import KDBush from 'kdbush';
24
23
  import {
@@ -1421,10 +1420,9 @@ function aggregateFlows<F>(
1421
1420
  flowAccessors: FlowAccessors<F>,
1422
1421
  ): AggregateFlow[] {
1423
1422
  // Sum up flows with same origin, dest
1424
- const byOriginDest = nest<F, AggregateFlow>()
1425
- .key(flowAccessors.getFlowOriginId)
1426
- .key(flowAccessors.getFlowDestId)
1427
- .rollup((ff: F[]) => {
1423
+ const byOriginDest = rollup(
1424
+ flows,
1425
+ (ff: F[]) => {
1428
1426
  const origin = flowAccessors.getFlowOriginId(ff[0]);
1429
1427
  const dest = flowAccessors.getFlowDestId(ff[0]);
1430
1428
  // const color = ff[0].color;
@@ -1443,11 +1441,14 @@ function aggregateFlows<F>(
1443
1441
  };
1444
1442
  // if (color) rv.color = color;
1445
1443
  return rv;
1446
- })
1447
- .entries(flows);
1444
+ },
1445
+ flowAccessors.getFlowOriginId,
1446
+ flowAccessors.getFlowDestId,
1447
+ );
1448
+
1448
1449
  const rv: AggregateFlow[] = [];
1449
- for (const {values} of byOriginDest) {
1450
- for (const {value} of values) {
1450
+ for (const values of byOriginDest.values()) {
1451
+ for (const value of values.values()) {
1451
1452
  rv.push(value);
1452
1453
  }
1453
1454
  }
@@ -42,11 +42,10 @@ export function isFlowmapData<L, F>(
42
42
  data: Record<string, any>,
43
43
  ): data is FlowmapData<L, F> {
44
44
  return (
45
- data &&
46
- data.locations &&
47
- data.flows &&
48
- Array.isArray(data.locations) &&
49
- Array.isArray(data.flows)
45
+ data && data.locations && data.flows
46
+ // TODO: test that they are iterable
47
+ // Array.isArray(data.locations) &&
48
+ // Array.isArray(data.flows)
50
49
  );
51
50
  }
52
51
 
package/src/types.ts CHANGED
@@ -115,9 +115,9 @@ export function isAggregateFlow(
115
115
  ): flow is AggregateFlow {
116
116
  return (
117
117
  flow &&
118
- flow.origin !== undefined &&
119
- flow.dest !== undefined &&
120
- flow.count !== undefined &&
118
+ // flow.origin !== undefined &&
119
+ // flow.dest !== undefined &&
120
+ // flow.count !== undefined &&
121
121
  (flow.aggregate ? true : false)
122
122
  );
123
123
  }