@agilemotion/oui-react-js 2.0.21 → 2.0.23

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.
@@ -9,11 +9,14 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _Utils = _interopRequireDefault(require("../../../../../Utils"));
10
10
  var _ApplicationManager = _interopRequireDefault(require("../../../../../ApplicationManager"));
11
11
  var _MenuLink = _interopRequireDefault(require("../../../../menu/MenuLink"));
12
+ var _Icon = _interopRequireDefault(require("../../../../Icon"));
12
13
  var _material = require("@mui/material");
14
+ var _styles = require("@mui/material/styles");
13
15
  var _RestUtils = require("../../../../../RestUtils");
14
16
  require("./FoldingTabSidebar.css");
15
17
  var _CardAvatar = _interopRequireDefault(require("../../../../card/CardAvatar"));
16
18
  var _MoreHoriz = _interopRequireDefault(require("@mui/icons-material/MoreHoriz"));
19
+ var _Home = _interopRequireDefault(require("@mui/icons-material/Home"));
17
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -21,6 +24,9 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
21
24
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
22
25
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable */
23
26
  const TAB = 16;
27
+ // Shared icon-column width (px) so icons left-align and text starts at the same
28
+ // x for every item (home button + routes), regardless of icon size or absence.
29
+ const ICON_COL = 24;
24
30
  function FoldingTabSidebar(props) {
25
31
  const {
26
32
  activeColor,
@@ -28,6 +34,7 @@ function FoldingTabSidebar(props) {
28
34
  appLogoPath,
29
35
  onOpenDrawer
30
36
  } = props;
37
+ const theme = (0, _styles.useTheme)();
31
38
  const [collapseStates, setCollapseStates] = _react.default.useState(getCollapseStates(props.routes));
32
39
  const [isLoading, setIsLoading] = _react.default.useState(false);
33
40
  const [error, setError] = _react.default.useState(false);
@@ -36,6 +43,9 @@ function FoldingTabSidebar(props) {
36
43
  id: 'dashboard',
37
44
  name: 'Dashboard'
38
45
  });
46
+ // Home button is highlighted by default; selecting any route clears it,
47
+ // clicking the home button restores it.
48
+ const [homeSelected, setHomeSelected] = _react.default.useState(true);
39
49
 
40
50
  /* ----------------- helpers (ported from class) ----------------- */
41
51
  function getViews(menus, level) {
@@ -44,6 +54,7 @@ function FoldingTabSidebar(props) {
44
54
  const createView = {
45
55
  name: menus[i].attributes.label,
46
56
  id: menus[i].id,
57
+ icon: menus[i].icon,
47
58
  mini: 'SS',
48
59
  layout: '/admin',
49
60
  level
@@ -65,6 +76,7 @@ function FoldingTabSidebar(props) {
65
76
  const createItem = {
66
77
  name: items[i].attributes.label,
67
78
  id: items[i].id,
79
+ icon: items[i].icon,
68
80
  mini: 'SS',
69
81
  layout: '/admin',
70
82
  item: items[i],
@@ -154,15 +166,23 @@ function FoldingTabSidebar(props) {
154
166
  open
155
167
  } = props;
156
168
  return routes.map((prop, key) => {
169
+ var _prop$item;
157
170
  if (prop.redirect) return null;
158
171
 
159
- // icon: use prop.icon; fallback MailIcon
172
+ // Resolve the icon from the route, falling back to its raw menu item
173
+ // (the server-filtered route may not surface `icon`, but the raw
174
+ // item carries it). FontAwesome class strings ("fas fa-...") render
175
+ // as <i className>; named ids ("PERSON", "HOME") go through the
176
+ // framework Icon component (which maps ids -> MUI icons).
177
+ const rawIcon = !_Utils.default.isNull(prop.icon) ? prop.icon : (_prop$item = prop.item) === null || _prop$item === void 0 ? void 0 : _prop$item.icon;
160
178
  let iconNode = null;
161
- if (/*#__PURE__*/_react.default.isValidElement(prop.icon)) {
162
- iconNode = prop.icon;
163
- } else if (typeof prop.icon === 'string') {
164
- iconNode = /*#__PURE__*/_react.default.createElement("i", {
165
- className: prop.icon
179
+ if (/*#__PURE__*/_react.default.isValidElement(rawIcon)) {
180
+ iconNode = rawIcon;
181
+ } else if (typeof rawIcon === 'string' && rawIcon.trim().length) {
182
+ iconNode = rawIcon.indexOf('fa-') !== -1 || rawIcon.indexOf(' ') !== -1 ? /*#__PURE__*/_react.default.createElement("i", {
183
+ className: rawIcon
184
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
185
+ id: rawIcon
166
186
  });
167
187
  } else {
168
188
  iconNode = prop.level === 0 ? /*#__PURE__*/_react.default.createElement("i", {
@@ -219,9 +239,9 @@ function FoldingTabSidebar(props) {
219
239
  } : {})
220
240
  }, iconNode && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
221
241
  sx: {
222
- minWidth: 0,
223
- mr: open ? 2 : 'auto',
224
- justifyContent: 'center'
242
+ minWidth: open ? ICON_COL : 0,
243
+ mr: open ? 0 : 'auto',
244
+ justifyContent: open ? 'flex-start' : 'center'
225
245
  }
226
246
  }, iconNode), open ? /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
227
247
  primary: /*#__PURE__*/_react.default.createElement("span", null, prop.name, ' ', prop.collapse && /*#__PURE__*/_react.default.createElement("span", {
@@ -250,11 +270,18 @@ function FoldingTabSidebar(props) {
250
270
  className: "nav"
251
271
  }, createLinks(prop.views))));
252
272
  }
253
- let menuLink = /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
254
- config: prop.item,
273
+ let menuLink = /*#__PURE__*/_react.default.createElement(_MenuLink.default
274
+ // The sidebar's ListItemIcon already renders the icon (and owns
275
+ // the column alignment / collapsed centring), so strip it here
276
+ // to avoid MenuLink rendering a second, doubled icon.
277
+ , {
278
+ config: _Utils.default.isNull(prop.item) ? prop.item : _objectSpread(_objectSpread({}, prop.item), {}, {
279
+ icon: undefined
280
+ }),
255
281
  clickCallback: prop.name === 'Dashboard' ? item => {
256
282
  props.dashboardLauncher && props.dashboardLauncher();
257
283
  setActiveRouteMenu(item);
284
+ setHomeSelected(false);
258
285
  // Multi-viewport: dock (pin) any open window overlay so it stays visible
259
286
  // alongside the newly-navigated main view instead of overlaying it.
260
287
  if (_ApplicationManager.default.isWindowOpen()) {
@@ -264,6 +291,7 @@ function FoldingTabSidebar(props) {
264
291
  }
265
292
  } : item => {
266
293
  setActiveRouteMenu(item);
294
+ setHomeSelected(false);
267
295
  // Multi-viewport: dock (pin) any open window overlay (see above).
268
296
  if (_ApplicationManager.default.isWindowOpen()) {
269
297
  _ApplicationManager.default.updateContext({
@@ -287,7 +315,16 @@ function FoldingTabSidebar(props) {
287
315
  sx: _objectSpread({
288
316
  justifyContent: open ? 'initial' : 'center',
289
317
  px: 2.5,
290
- pl: indent
318
+ pl: indent,
319
+ // Leaf icons sit dimmed, then brighten + glow on hover.
320
+ '& .MuiListItemIcon-root': {
321
+ opacity: isActive ? 1 : 0.55,
322
+ transition: 'opacity 0.2s ease, filter 0.2s ease'
323
+ },
324
+ '&:hover .MuiListItemIcon-root': {
325
+ opacity: 1,
326
+ filter: 'drop-shadow(0 0 4px currentColor)'
327
+ }
291
328
  }, isActive ? {
292
329
  backgroundColor: (0, _material.lighten)(secondaryThemeColor, 0.9),
293
330
  borderRadius: '16px',
@@ -296,9 +333,9 @@ function FoldingTabSidebar(props) {
296
333
  } : {})
297
334
  }, iconNode && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
298
335
  sx: {
299
- minWidth: 0,
300
- mr: open ? 2 : 'auto',
301
- justifyContent: 'center',
336
+ minWidth: open ? prop.name === 'Dashboard' ? ICON_COL : TAB : 0,
337
+ mr: open ? 0 : 'auto',
338
+ justifyContent: open ? 'flex-start' : 'center',
302
339
  color: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? secondaryThemeColor : 'inherit'
303
340
  }
304
341
  }, iconNode), open ? /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
@@ -362,7 +399,18 @@ function FoldingTabSidebar(props) {
362
399
  className: "sidebar__brand",
363
400
  onClick: props.closeSidebar,
364
401
  "aria-label": "Home",
365
- style: props.logoStyle
402
+ style: _objectSpread(_objectSpread({}, props.logoStyle || {}), {}, {
403
+ // Responsive width so the logo fits the rail (it gets cut at
404
+ // a fixed width in the mini drawer). Height + fitting are left
405
+ // to the CSS (.sidebar__brand max-height + .sidebar__brand-img
406
+ // block-size:100% / object-fit:contain), so a taller logo
407
+ // scales down instead of overflowing and being clipped.
408
+ width: '100%',
409
+ maxWidth: props.logoStyle && props.logoStyle.width || '120px',
410
+ display: 'flex',
411
+ justifyContent: 'center',
412
+ alignItems: 'center'
413
+ })
366
414
  }, /*#__PURE__*/_react.default.createElement("img", {
367
415
  src: logo.imgSrc,
368
416
  alt: "logo",
@@ -382,6 +430,89 @@ function FoldingTabSidebar(props) {
382
430
  if (!routesData) {
383
431
  return null;
384
432
  }
433
+
434
+ // color: 'primary' | 'secondary' | any CSS color (e.g. '#000000')
435
+ const resolveHighlightColor = c => {
436
+ if (_Utils.default.isNull(c) || c === 'primary') return theme.palette.primary.main;
437
+ if (c === 'secondary') return theme.palette.secondary.main;
438
+ return c;
439
+ };
440
+
441
+ // Optional home button, rendered at the very top of the sidebar. Fires
442
+ // homeButtonSettings.callback() on click (e.g. load the portal dashboard).
443
+ const renderHomeButton = () => {
444
+ const hb = props.homeButtonSettings;
445
+ if (_Utils.default.isNull(hb)) return null;
446
+ const highlight = resolveHighlightColor(hb.color);
447
+
448
+ // icon size from settings (number px or any CSS size, e.g. 24, '24px', '1.5rem')
449
+ const iconSize = hb.iconSize;
450
+ let iconNode;
451
+ if (/*#__PURE__*/_react.default.isValidElement(hb.icon)) {
452
+ iconNode = hb.icon;
453
+ } else if (hb.icon === 'HOME' || _Utils.default.isNull(hb.icon)) {
454
+ iconNode = /*#__PURE__*/_react.default.createElement(_Home.default, {
455
+ fontSize: iconSize ? iconSize : 'small'
456
+ });
457
+ } else {
458
+ iconNode = /*#__PURE__*/_react.default.createElement("i", {
459
+ className: hb.icon,
460
+ style: iconSize ? {
461
+ fontSize: iconSize
462
+ } : undefined
463
+ });
464
+ }
465
+ const button = /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
466
+ className: 'sidebar__home-button' + (homeSelected ? ' sidebar__home-button--selected' : ''),
467
+ onClick: () => {
468
+ setHomeSelected(true);
469
+ // Clear any active route so no route link stays highlighted
470
+ // (activeRoute() matches on id; '__home__' matches none).
471
+ setActiveRouteMenu({
472
+ id: '__home__',
473
+ name: 'Home'
474
+ });
475
+ hb.callback && hb.callback();
476
+ },
477
+ sx: _objectSpread({
478
+ justifyContent: open ? 'flex-start' : 'center',
479
+ // panel offset = margin 8 + border 1 + padding 6 = 15px; +1px lands
480
+ // the icon at 16px, exactly where the level-0 route icons sit.
481
+ // When collapsed, keep padding symmetric so the icon centres
482
+ // in the mini rail (matching the routes).
483
+ pl: open ? '1px' : 0,
484
+ pr: open ? 2.5 : 0,
485
+ borderRadius: '4px'
486
+ }, hb.style || {})
487
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
488
+ sx: {
489
+ margin: open ? null : 'auto',
490
+ minWidth: open ? ICON_COL : 0,
491
+ mr: open ? 0 : 'auto',
492
+ justifyContent: open ? 'flex-start' : 'center',
493
+ color: highlight
494
+ }
495
+ }, iconNode), open && hb.text ? /*#__PURE__*/_react.default.createElement("div", {
496
+ style: {
497
+ fontWeight: 300,
498
+ fontSize: '.85rem'
499
+ }
500
+ }, hb.text) : null);
501
+ return /*#__PURE__*/_react.default.createElement("div", {
502
+ className: 'sidebar__home-button' + (homeSelected ? ' sidebar__home-button--selected' : ''),
503
+ style: {
504
+ padding: '6px',
505
+ margin: open ? '0' : 0,
506
+ backgroundColor: 'rgba(20, 60, 94, 0.05)',
507
+ border: '1px solid rgba(20, 60, 94, 0.08)',
508
+ borderRadius: '4px'
509
+ }
510
+ }, !open ? /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
511
+ title: hb.text || 'Home',
512
+ placement: "right",
513
+ arrow: true
514
+ }, button) : button);
515
+ };
385
516
  return /*#__PURE__*/_react.default.createElement("aside", {
386
517
  className: "sidebar ".concat(!open ? 'sidebar--mini' : ''),
387
518
  data: activeColor
@@ -389,11 +520,14 @@ function FoldingTabSidebar(props) {
389
520
  className: "sidebar__top"
390
521
  }, logoImg, props.heading && /*#__PURE__*/_react.default.createElement("div", {
391
522
  className: "sidebar__heading"
392
- }, props.heading)), /*#__PURE__*/_react.default.createElement("div", {
393
- className: "sidebar__scroll"
523
+ }, props.heading)), renderHomeButton(), /*#__PURE__*/_react.default.createElement("div", {
524
+ className: "sidebar__scroll",
525
+ style: _Utils.default.isNull(props.homeButtonSettings) ? undefined : {
526
+ paddingTop: 0
527
+ }
394
528
  }, /*#__PURE__*/_react.default.createElement(_material.List, {
395
529
  sx: {
396
- mt: 1
530
+ mt: _Utils.default.isNull(props.homeButtonSettings) ? 1 : 0
397
531
  },
398
532
  className: "nav"
399
533
  }, createLinks(routesData))), /*#__PURE__*/_react.default.createElement("div", {
@@ -424,12 +558,20 @@ FoldingTabSidebar.propTypes = {
424
558
  text: _propTypes.default.string.isRequired
425
559
  })]),
426
560
  heading: _propTypes.default.string,
427
- appLogoPath: _propTypes.default.object,
561
+ appLogoPath: _propTypes.default.string,
428
562
  closeSidebar: _propTypes.default.func,
429
563
  dashboardLauncher: _propTypes.default.func,
430
564
  logoStyle: _propTypes.default.object,
431
565
  open: _propTypes.default.bool,
432
- onOpenDrawer: _propTypes.default.func // <--- NEW
566
+ onOpenDrawer: _propTypes.default.func,
567
+ homeButtonSettings: _propTypes.default.shape({
568
+ icon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element]),
569
+ iconSize: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
570
+ text: _propTypes.default.string,
571
+ style: _propTypes.default.object,
572
+ color: _propTypes.default.string,
573
+ callback: _propTypes.default.func
574
+ })
433
575
  };
434
576
  var _default = exports.default = FoldingTabSidebar;
435
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfVXRpbHMiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX01lbnVMaW5rIiwiX21hdGVyaWFsIiwiX1Jlc3RVdGlscyIsIl9DYXJkQXZhdGFyIiwiX01vcmVIb3JpeiIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm93bktleXMiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJUQUIiLCJGb2xkaW5nVGFiU2lkZWJhciIsInByb3BzIiwiYWN0aXZlQ29sb3IiLCJvcGVuIiwiYXBwTG9nb1BhdGgiLCJvbk9wZW5EcmF3ZXIiLCJjb2xsYXBzZVN0YXRlcyIsInNldENvbGxhcHNlU3RhdGVzIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsImdldENvbGxhcHNlU3RhdGVzIiwicm91dGVzIiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInJvdXRlc0RhdGEiLCJzZXRSb3V0ZXNEYXRhIiwidW5kZWZpbmVkIiwiYWN0aXZlUm91dGVNZW51Iiwic2V0QWN0aXZlUm91dGVNZW51IiwiaWQiLCJuYW1lIiwiZ2V0Vmlld3MiLCJtZW51cyIsImxldmVsIiwibmV3Vmlld3MiLCJjcmVhdGVWaWV3IiwiYXR0cmlidXRlcyIsImxhYmVsIiwibWluaSIsImxheW91dCIsInN1Yk1lbnUiLCJjb2xsYXBzZSIsInN0YXRlIiwidmlld3MiLCJnZXRJdGVtcyIsIml0ZW1zIiwiaXRlbSIsIm5ld0l0ZW1zIiwiY3JlYXRlSXRlbSIsIlV0aWxzIiwiaXNOdWxsIiwiaW5pdGlhbFN0YXRlIiwicHJvcCIsImdldENvbGxhcHNlSW5pdGlhbFN0YXRlIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInBhdGgiLCJnZXRNZW51Iiwicm91dGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNlcnZpY2UiLCJ1cmwiLCJwYXJhbWV0ZXJzIiwibWVudSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiY29udGVudFR5cGUiLCJpbnZva2VSZXN0IiwiYXBpIiwicmVzdWx0IiwiY29uc29sZSIsImFjdGl2ZVJvdXRlIiwicm91dGVOYW1lIiwiZ2V0TGlDbGFzc05hbWUiLCJmYWxsYmFja0ljb24iLCJpY29uTm9kZSIsIl9wcm9wJG5hbWUiLCJfcHJvcCRuYW1lJGNoYXJBdCIsIl9wcm9wJG5hbWUyIiwiX3Byb3AkbmFtZSRjaGFyQXQyIiwiX3Byb3AkbmFtZTMiLCJpY29uIiwiY3JlYXRlRWxlbWVudCIsImZvbnRTaXplIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJjaGFyQXQiLCJjcmVhdGVMaW5rcyIsInNlY29uZGFyeVRoZW1lQ29sb3IiLCJtYXAiLCJrZXkiLCJyZWRpcmVjdCIsImlzVmFsaWRFbGVtZW50IiwiaXNBY3RpdmUiLCJpc0NvbGxhcHNpYmxlIiwiaXNQYXJlbnQiLCJpc09wZW4iLCJjb2xsYXBzaWJsZUNsYXNzTmFtZSIsImxlYWZDbGFzc05hbWUiLCJpbmRlbnQiLCJpc1RvcExldmVsIiwic2hvdWxkU2hvd1Rvb2x0aXAiLCJoYW5kbGVDbGljayIsInByZXZlbnREZWZhdWx0IiwidG9nZ2xlIiwicHJldiIsInRoZW4iLCJidXR0b24iLCJMaXN0SXRlbUJ1dHRvbiIsIm9uQ2xpY2siLCJzeCIsInBsIiwiYmFja2dyb3VuZENvbG9yIiwibGlnaHRlbiIsImJvcmRlclJhZGl1cyIsImNvbG9yIiwiZm9udFdlaWdodCIsIkxpc3RJdGVtSWNvbiIsIm1pbldpZHRoIiwibXIiLCJqdXN0aWZ5Q29udGVudCIsIkxpc3RJdGVtVGV4dCIsInByaW1hcnkiLCJjb25jYXQiLCJtYXJnaW5Ub3AiLCJGcmFnbWVudCIsIlRvb2x0aXAiLCJ0aXRsZSIsInBsYWNlbWVudCIsImFycm93IiwiQ29sbGFwc2UiLCJpbiIsInRpbWVvdXQiLCJ1bm1vdW50T25FeGl0IiwibXQiLCJMaXN0IiwiZGlzYWJsZVBhZGRpbmciLCJtZW51TGluayIsImNvbmZpZyIsImNsaWNrQ2FsbGJhY2siLCJkYXNoYm9hcmRMYXVuY2hlciIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzV2luZG93T3BlbiIsInVwZGF0ZUNvbnRleHQiLCJ3aW5kb3dEaXNwbGF5U3RhdGUiLCJhdXRvQ2xpY2siLCJkZWZhdWx0SXRlbSIsInZpZXdJZCIsImNvbnRlbnQiLCJpY29uQ29sb3IiLCJ0YWIiLCJweCIsInVzZUVmZmVjdCIsImNhbmNlbGxlZCIsIm1ldGhvZCIsImxvZ28iLCJsb2dvSW1nIiwib3V0dGVyTGluayIsImNsb3NlU2lkZWJhciIsImxvZ29TdHlsZSIsInNyYyIsImltZ1NyYyIsImFsdCIsImRhdGEiLCJoZWFkaW5nIiwicGxhaW4iLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZiIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJydGxBY3RpdmUiLCJib29sIiwiYXJyYXkiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImlubmVyTGluayIsInRleHQiLCJvYmplY3QiLCJmdW5jIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC9jb21wb25lbnRzL2JsYWNrRGFzaGJvYXJkL3NpZGViYXIvRm9sZGluZ1RhYlNpZGViYXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi8uLi8uLi9VdGlscyc7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgTWVudUxpbmsgZnJvbSAnLi4vLi4vLi4vLi4vbWVudS9NZW51TGluayc7XG5pbXBvcnQge0NvbGxhcHNlLCBsaWdodGVuLCBMaXN0LCBMaXN0SXRlbUJ1dHRvbiwgTGlzdEl0ZW1JY29uLCBMaXN0SXRlbVRleHQsIFRvb2x0aXB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtpbnZva2VSZXN0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9SZXN0VXRpbHMnO1xuaW1wb3J0ICcuL0ZvbGRpbmdUYWJTaWRlYmFyLmNzcyc7XG5pbXBvcnQgQ2FyZEF2YXRhciBmcm9tIFwiLi4vLi4vLi4vLi4vY2FyZC9DYXJkQXZhdGFyXCI7XG5pbXBvcnQgTW9yZUhvcml6SWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL01vcmVIb3Jpeic7XG5cbmNvbnN0IFRBQiA9IDE2O1xuXG5mdW5jdGlvbiBGb2xkaW5nVGFiU2lkZWJhcihwcm9wcykge1xuICAgIGNvbnN0IHthY3RpdmVDb2xvciwgb3BlbiwgYXBwTG9nb1BhdGgsIG9uT3BlbkRyYXdlcn0gPSBwcm9wcztcbiAgICBjb25zdCBbY29sbGFwc2VTdGF0ZXMsIHNldENvbGxhcHNlU3RhdGVzXSA9IFJlYWN0LnVzZVN0YXRlKFxuICAgICAgICBnZXRDb2xsYXBzZVN0YXRlcyhwcm9wcy5yb3V0ZXMpXG4gICAgKTtcbiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyb3V0ZXNEYXRhLCBzZXRSb3V0ZXNEYXRhXSA9IFJlYWN0LnVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgW2FjdGl2ZVJvdXRlTWVudSwgc2V0QWN0aXZlUm91dGVNZW51XSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgaWQ6ICdkYXNoYm9hcmQnLFxuICAgICAgICBuYW1lOiAnRGFzaGJvYXJkJ1xuICAgIH0pO1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAocG9ydGVkIGZyb20gY2xhc3MpIC0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgZnVuY3Rpb24gZ2V0Vmlld3MobWVudXMsIGxldmVsKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZpZXdzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVZpZXcgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbWVudXNbaV0uYXR0cmlidXRlcy5sYWJlbCxcbiAgICAgICAgICAgICAgICBpZDogbWVudXNbaV0uaWQsXG4gICAgICAgICAgICAgICAgbWluaTogJ1NTJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6ICcvYWRtaW4nLFxuICAgICAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1lbnVzW2ldLnN1Yk1lbnUpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3LmNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3LnN0YXRlID0gbWVudXNbaV0uaWQgKyAnQ29sbGFwc2UnO1xuICAgICAgICAgICAgICAgIGNyZWF0ZVZpZXcudmlld3MgPSBnZXRJdGVtcyhtZW51c1tpXS5zdWJNZW51Lml0ZW1zLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3Lml0ZW0gPSBtZW51c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld1ZpZXdzLnB1c2goY3JlYXRlVmlldyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZXdzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEl0ZW1zKGl0ZW1zLCBsZXZlbCkge1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVJdGVtID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW1zW2ldLmF0dHJpYnV0ZXMubGFiZWwsXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW1zW2ldLmlkLFxuICAgICAgICAgICAgICAgIG1pbmk6ICdTUycsXG4gICAgICAgICAgICAgICAgbGF5b3V0OiAnL2FkbWluJyxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtc1tpXSxcbiAgICAgICAgICAgICAgICBsZXZlbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGl0ZW1zW2ldLnN1Yk1lbnUpKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlSXRlbS5jb2xsYXBzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY3JlYXRlSXRlbS5zdGF0ZSA9IGl0ZW1zW2ldLmlkICsgJ1N1Yk1lbnVDb2xsYXBzZSc7XG4gICAgICAgICAgICAgICAgY3JlYXRlSXRlbS52aWV3cyA9IGdldEl0ZW1zKGl0ZW1zW2ldLnN1Yk1lbnUuaXRlbXMsIGxldmVsICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdJdGVtcy5wdXNoKGNyZWF0ZUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdJdGVtcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDb2xsYXBzZVN0YXRlcyhyb3V0ZXMpIHtcbiAgICAgICAgbGV0IGluaXRpYWxTdGF0ZSA9IHt9O1xuICAgICAgICBpZiAocm91dGVzKSB7XG4gICAgICAgICAgICByb3V0ZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLmNvbGxhcHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wLnN0YXRlXTogZ2V0Q29sbGFwc2VJbml0aWFsU3RhdGUocHJvcC52aWV3cyksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5nZXRDb2xsYXBzZVN0YXRlcyhwcm9wLnZpZXdzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmluaXRpYWxTdGF0ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29sbGFwc2VJbml0aWFsU3RhdGUocm91dGVzKSB7XG4gICAgICAgIGlmICghcm91dGVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXJvdXRlc1tpXS52aWV3cykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAocm91dGVzW2ldLmNvbGxhcHNlICYmIGdldENvbGxhcHNlSW5pdGlhbFN0YXRlKHJvdXRlc1tpXS52aWV3cykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihyb3V0ZXNbaV0ucGF0aCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGdldE1lbnUgPSAocm91dGUpID0+XG4gICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0ge1xuICAgICAgICAgICAgICAgIHVybDogJy91aS9hcGkvdjEvbWVudS9nZXQnLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge25hbWU6ICdpZCcsIHZhbHVlOiByb3V0ZS5tZW51LCBodHRwUGFyYW1ldGVyVHlwZTogJ1FVRVJZX1BBUkFNRVRFUid9LFxuICAgICAgICAgICAgICAgICAgICB7bmFtZTogJ3ZlcnNpb24nLCB2YWx1ZTogMS4wLCBodHRwUGFyYW1ldGVyVHlwZTogJ1FVRVJZX1BBUkFNRVRFUid9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpbnZva2VSZXN0KFxuICAgICAgICAgICAgICAgIHNlcnZpY2UsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhcGk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rhc2hib2FyZC1zaWRlYmFyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Rhc2hib2FyZC1zaWRlYmFyJyxcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiByZXNvbHZlKGdldFZpZXdzKHJlc3VsdC5tZW51cywgcm91dGUubGV2ZWwgKyAxKSksXG4gICAgICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWN0aXZlUm91dGUgPSAocm91dGVOYW1lKSA9PiBhY3RpdmVSb3V0ZU1lbnUuaWQgPT09IHJvdXRlTmFtZTtcbiAgICBjb25zdCBnZXRMaUNsYXNzTmFtZSA9IChwcm9wKSA9PiAnbGktJyArIHByb3AubGV2ZWw7XG5cbiAgICBjb25zdCBmYWxsYmFja0ljb24gPSAocHJvcCwgaWNvbk5vZGUpID0+IHtcbiAgICAgICAgaWYgKHByb3AuaWNvbikgcmV0dXJuIGljb25Ob2RlO1xuXG4gICAgICAgIGlmIChwcm9wLmxldmVsID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gPE1vcmVIb3Jpekljb24gZm9udFNpemU9XCJzbWFsbFwiLz47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW5pLWF2YXRhclwiIHN0eWxlPXt7Zm9udFNpemU6ICcxMHB4J319PlxuICAgICAgICAgICAgICAgIHtwcm9wLm5hbWU/LmNoYXJBdCgwKSArIChwcm9wLm5hbWU/LmNoYXJBdCgxKSA/PyAnJykgKyAocHJvcC5uYW1lPy5jaGFyQXQoMikgPz8gJycpICsgJy4uLid9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0gY3JlYXRlTGlua3Mgd2l0aCBkeW5hbWljIGNsYXNzZXMgKyB0aGVtZSBjb2xvcnMgLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICBjb25zdCBjcmVhdGVMaW5rcyA9IChyb3V0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qge3NlY29uZGFyeVRoZW1lQ29sb3IsIG9wZW59ID0gcHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIHJvdXRlcy5tYXAoKHByb3AsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3AucmVkaXJlY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAvLyBpY29uOiB1c2UgcHJvcC5pY29uOyBmYWxsYmFjayBNYWlsSWNvblxuICAgICAgICAgICAgbGV0IGljb25Ob2RlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChwcm9wLmljb24pKSB7XG4gICAgICAgICAgICAgICAgaWNvbk5vZGUgPSBwcm9wLmljb247XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wLmljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWNvbk5vZGUgPSA8aSBjbGFzc05hbWU9e3Byb3AuaWNvbn0vPjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWNvbk5vZGUgPSBwcm9wLmxldmVsID09PSAwID8gPGkgY2xhc3NOYW1lPXsnZmFzIGZhLXNxdWFyZSd9Lz4gOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVJvdXRlKHByb3AuaWQpO1xuICAgICAgICAgICAgY29uc3QgaXNDb2xsYXBzaWJsZSA9XG4gICAgICAgICAgICAgICAgKHByb3AuY29sbGFwc2UgfHwgcHJvcC5pc1BhcmVudCkgJiZcbiAgICAgICAgICAgICAgICBwcm9wLm5hbWUgIT09ICdEYXNoYm9hcmQnICYmXG4gICAgICAgICAgICAgICAgcHJvcC5uYW1lICE9PSAnTXkgV29yayBJdGVtcyc7XG4gICAgICAgICAgICBjb25zdCBpc09wZW4gPSBwcm9wLnN0YXRlID8gISFjb2xsYXBzZVN0YXRlc1twcm9wLnN0YXRlXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyByZXBsaWNhdGUgZHluYW1pYyBjbGFzc05hbWUgbG9naWMgZm9yIGNvbGxhcHNpYmxlIGVudHJpZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNpYmxlQ2xhc3NOYW1lID0gcHJvcC5jb2xsYXBzZVxuICAgICAgICAgICAgICAgID8gKGdldENvbGxhcHNlSW5pdGlhbFN0YXRlKHByb3Audmlld3MpXG4gICAgICAgICAgICAgICAgICAgID8gJ2FjdGl2ZSAnICsgZ2V0TGlDbGFzc05hbWUocHJvcClcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMaUNsYXNzTmFtZShwcm9wKSlcbiAgICAgICAgICAgICAgICA6IGdldExpQ2xhc3NOYW1lKHByb3ApO1xuXG4gICAgICAgICAgICAvLyBsZWFmIGNsYXNzZXMgKGluY2x1ZGUgbGktbGV2ZWwpXG4gICAgICAgICAgICBjb25zdCBsZWFmQ2xhc3NOYW1lID1cbiAgICAgICAgICAgICAgICBnZXRMaUNsYXNzTmFtZShwcm9wKSArXG4gICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAoJ21lbnUtbGluay1saScgK1xuICAgICAgICAgICAgICAgICAgICAoaXNBY3RpdmUgPyAnLWFjdGl2ZScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocHJvcC5uYW1lID09PSAnRGFzaGJvYXJkJyA/ICcgZGFzaGJvYXJkLWxpbmsnIDogJycpKTtcblxuICAgICAgICAgICAgLy8gaW5kZW50IGJhc2VkIG9uIGxldmVsIChUQUIgcHggLT4gc3BhY2luZyB1bml0cylcbiAgICAgICAgICAgIGNvbnN0IGluZGVudCA9IChwcm9wLmxldmVsICsgMSkgKiAoVEFCIC8gOCk7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb3BMZXZlbCA9IHByb3AubGV2ZWwgPT09IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1Rvb2x0aXAgPSAhb3BlbiAmJiBpc1RvcExldmVsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZHJhd2VyIGlzIGNsb3NlZCBhbmQgdGhpcyBpcyBhIHRvcC1sZXZlbCBpdGVtLCBhc2sgcGFyZW50IHRvIG9wZW4gaXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVuICYmIGlzVG9wTGV2ZWwgJiYgdHlwZW9mIG9uT3BlbkRyYXdlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25PcGVuRHJhd2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2dnbGUgPSAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29sbGFwc2VTdGF0ZXMoKHByZXYpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcC5zdGF0ZV06ICFwcmV2W3Byb3Auc3RhdGVdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsYXp5LWxvYWQgbWVudSBvbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRNZW51KHByb3ApLnRoZW4oKHZpZXdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Audmlld3MgPSB2aWV3cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSAoXG4gICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjb2xsYXBzaWJsZUNsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbDogaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRlbihzZWNvbmRhcnlUaGVtZUNvbG9yLCAwLjkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogc2Vjb25kYXJ5VGhlbWVDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aWNvbk5vZGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXI6IG9wZW4gPyAyIDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aWNvbk5vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0SXRlbUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnk9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcC5uYW1lfXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wLmNvbGxhcHNlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgY2FyZXQgJHtpc09wZW4gPyAnY2FyZXQtb3BlbicgOiAnY2FyZXQtY2xvc2VkJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiAwfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpY29uTm9kZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrSWNvbihwcm9wLCBpY29uTm9kZSkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L0xpc3RJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3VsZFNob3dUb29sdGlwID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17cHJvcC5uYW1lfSBwbGFjZW1lbnQ9XCJyaWdodFwiIGFycm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wLmNvbGxhcHNlICYmIHByb3Audmlld3MgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2xsYXBzZSBpbj17aXNPcGVufSB0aW1lb3V0PVwiYXV0b1wiIHVubW91bnRPbkV4aXQgc3g9e3sgcGw6IDAsIG10OiAwIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdCBkaXNhYmxlUGFkZGluZyBjbGFzc05hbWU9XCJuYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVMaW5rcyhwcm9wLnZpZXdzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29sbGFwc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtZW51TGluayA9IDxNZW51TGlua1xuICAgICAgICAgICAgICAgIGNvbmZpZz17cHJvcC5pdGVtfVxuICAgICAgICAgICAgICAgIGNsaWNrQ2FsbGJhY2s9e1xuICAgICAgICAgICAgICAgICAgICBwcm9wLm5hbWUgPT09ICdEYXNoYm9hcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGFzaGJvYXJkTGF1bmNoZXIgJiYgcHJvcHMuZGFzaGJvYXJkTGF1bmNoZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVSb3V0ZU1lbnUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktdmlld3BvcnQ6IGRvY2sgKHBpbikgYW55IG9wZW4gd2luZG93IG92ZXJsYXkgc28gaXQgc3RheXMgdmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsb25nc2lkZSB0aGUgbmV3bHktbmF2aWdhdGVkIG1haW4gdmlldyBpbnN0ZWFkIG9mIG92ZXJsYXlpbmcgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc1dpbmRvd09wZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQ29udGV4dCh7d2luZG93RGlzcGxheVN0YXRlOiAnUElOTkVEJ30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVSb3V0ZU1lbnUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktdmlld3BvcnQ6IGRvY2sgKHBpbikgYW55IG9wZW4gd2luZG93IG92ZXJsYXkgKHNlZSBhYm92ZSkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc1dpbmRvd09wZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQ29udGV4dCh7d2luZG93RGlzcGxheVN0YXRlOiAnUElOTkVEJ30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXV0b0NsaWNrPXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcC5uYW1lID09PSAnTXkgV29yayBJdGVtcycgfHxcbiAgICAgICAgICAgICAgICAgICAgKHByb3AuaXRlbSAmJiBwcm9wLml0ZW0uZGVmYXVsdEl0ZW0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZpZXdJZD1cIm1lbnVCYXJcIlxuICAgICAgICAgICAgICAgIGljb249e3Byb3AuaWNvbn1cbiAgICAgICAgICAgICAgICBjb250ZW50PXtvcGVuID8gbnVsbCA6IGZhbGxiYWNrSWNvbihwcm9wLCBpY29uTm9kZSl9XG4gICAgICAgICAgICAgICAgaWNvbkNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgKHByb3AubmFtZSA9PT0gJ0Rhc2hib2FyZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3AubmFtZSA9PT0gJ015IFdvcmsgSXRlbXMnKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcy5zZWNvbmRhcnlUaGVtZUNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmFtZT17cHJvcC5uYW1lfVxuICAgICAgICAgICAgICAgIGlkPXtwcm9wLmlkfVxuICAgICAgICAgICAgICAgIGxldmVsPXtwcm9wLmxldmVsfVxuICAgICAgICAgICAgICAgIHRhYj17VEFCfVxuICAgICAgICAgICAgLz47XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgICAgPExpc3RJdGVtQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eyhwcm9wLm5hbWUgPT09ICdEYXNoYm9hcmQnIHx8IHByb3AubmFtZSA9PT0gJ015IFdvcmsgSXRlbXMnKSA/IChpc0FjdGl2ZSA/ICdkYXNoYm9hcmQtbGluay1hY3RpdmUnIDogJ2Rhc2hib2FyZC1saW5rJykgOiBsZWFmQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IG9wZW4gPyAnaW5pdGlhbCcgOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB4OiAyLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbDogaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRlbihzZWNvbmRhcnlUaGVtZUNvbG9yLCAwLjkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHNlY29uZGFyeVRoZW1lQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2ljb25Ob2RlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXI6IG9wZW4gPyAyIDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3AubmFtZSA9PT0gJ0Rhc2hib2FyZCcgfHwgcHJvcC5uYW1lID09PSAnTXkgV29yayBJdGVtcycpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2Vjb25kYXJ5VGhlbWVDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2luaGVyaXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aWNvbk5vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpc3RJdGVtSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnk9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttZW51TGlua31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogIWljb25Ob2RlID8gPD57bWVudUxpbmt9PC8+IDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9MaXN0SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIGxlYWZcbiAgICAgICAgICAgIHJldHVybiAhb3BlbiA/IChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17cHJvcC5uYW1lfSBwbGFjZW1lbnQ9XCJyaWdodFwiIGFycm93PlxuICAgICAgICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApIDogY29udGVudDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tIGxvYWQgZmlsdGVyZWQgbWVudSAtLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBzZXJ2aWNlID0ge1xuICAgICAgICAgICAgdXJsOiAnL3VpL2FwaS92MS9tZW51L2ZpbHRlcicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBbe3ZhbHVlOiBwcm9wcy5yb3V0ZXMsIGh0dHBQYXJhbWV0ZXJUeXBlOiAnUkVRVUVTVF9CT0RZJ31dLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihmYWxzZSk7XG5cbiAgICAgICAgaW52b2tlUmVzdChcbiAgICAgICAgICAgIHNlcnZpY2UsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYXBpOiB7XG4gICAgICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFzaGJvYXJkLXNpZGViYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkYXNoYm9hcmQtc2lkZWJhcicsXG4gICAgICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Um91dGVzRGF0YShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3Byb3BzLnJvdXRlc10pO1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0gcmVuZGVyIC0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgY29uc3Qge2xvZ299ID0gcHJvcHM7XG5cbiAgICBsZXQgbG9nb0ltZyA9IG51bGw7XG4gICAgaWYgKCFVdGlscy5pc051bGwobG9nbykpIHtcbiAgICAgICAgbG9nb0ltZyA9IChcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgaHJlZj17bG9nby5vdXR0ZXJMaW5rfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZGViYXJfX2JyYW5kXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtwcm9wcy5jbG9zZVNpZGViYXJ9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkhvbWVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtwcm9wcy5sb2dvU3R5bGV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9e2xvZ28uaW1nU3JjfSBhbHQ9XCJsb2dvXCIgY2xhc3NOYW1lPVwic2lkZWJhcl9fYnJhbmQtaW1nXCIvPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zXCI+XG4gICAgICAgICAgICAgICAgPGVtPkxvYWRpbmcgbWVudeKApjwvZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zIHRleHQtZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgPGVtPkZhaWxlZCB0byBsb2FkIG1lbnUuPC9lbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICghcm91dGVzRGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8YXNpZGVcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YHNpZGViYXIgJHshb3BlbiA/ICdzaWRlYmFyLS1taW5pJyA6ICcnfWB9XG4gICAgICAgICAgICBkYXRhPXthY3RpdmVDb2xvcn1cbiAgICAgICAgPlxuICAgICAgICAgICAgey8qIFRPUDogYnJhbmQgLyBsb2dvICovfVxuICAgICAgICAgICAge2xvZ29JbWcgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9fdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIHtsb2dvSW1nfVxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaGVhZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGViYXJfX2hlYWRpbmdcIj57cHJvcHMuaGVhZGluZ308L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBNSURETEU6IHNjcm9sbGFibGUgbmF2ICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWRlYmFyX19zY3JvbGxcIj5cbiAgICAgICAgICAgICAgICA8TGlzdCBzeD17eyBtdDogMSB9fSBjbGFzc05hbWU9XCJuYXZcIj5cbiAgICAgICAgICAgICAgICAgICAge2NyZWF0ZUxpbmtzKHJvdXRlc0RhdGEpfVxuICAgICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQk9UVE9NOiBhcHAgbG9nbyArIGNvcHlyaWdodCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9fYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgeyFVdGlscy5pc051bGwoYXBwTG9nb1BhdGgpID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGViYXJfX2FwcC1sb2dvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZEF2YXRhciBwbGFpbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXBwTG9nb1BhdGh9IGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmRBdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9fY29weXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIMKpIHtuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICApO1xufVxuXG5Gb2xkaW5nVGFiU2lkZWJhci5wcm9wVHlwZXMgPSB7XG4gICAgYWN0aXZlQ29sb3I6IFByb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnYmx1ZScsICdncmVlbicsICdvcmFuZ2UnLCAncmVkJywgJ2FnaWxpdHknXSksXG4gICAgc2Vjb25kYXJ5VGhlbWVDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHJ0bEFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcm91dGVzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBsb2dvOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgIGlubmVyTGluazogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgaW1nU3JjOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICAgICAgfSksXG4gICAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBvdXR0ZXJMaW5rOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBpbWdTcmM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgICAgICB9KVxuICAgIF0pLFxuICAgIGhlYWRpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXBwTG9nb1BhdGg6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xvc2VTaWRlYmFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXNoYm9hcmRMYXVuY2hlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9nb1N0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAgIG9uT3BlbkRyYXdlcjogUHJvcFR5cGVzLmZ1bmMgICAgICAvLyA8LS0tIE5FV1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9sZGluZ1RhYlNpZGViYXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUEwRCxTQUFBRCx1QkFBQVUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFSLENBQUEsR0FBQUksQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVgsQ0FBQSxFQUFBSSxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBZixDQUFBLGFBQUFJLENB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
577
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfVXRpbHMiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX01lbnVMaW5rIiwiX0ljb24iLCJfbWF0ZXJpYWwiLCJfc3R5bGVzIiwiX1Jlc3RVdGlscyIsIl9DYXJkQXZhdGFyIiwiX01vcmVIb3JpeiIsIl9Ib21lIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIlRBQiIsIklDT05fQ09MIiwiRm9sZGluZ1RhYlNpZGViYXIiLCJwcm9wcyIsImFjdGl2ZUNvbG9yIiwib3BlbiIsImFwcExvZ29QYXRoIiwib25PcGVuRHJhd2VyIiwidGhlbWUiLCJ1c2VUaGVtZSIsImNvbGxhcHNlU3RhdGVzIiwic2V0Q29sbGFwc2VTdGF0ZXMiLCJSZWFjdCIsInVzZVN0YXRlIiwiZ2V0Q29sbGFwc2VTdGF0ZXMiLCJyb3V0ZXMiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwicm91dGVzRGF0YSIsInNldFJvdXRlc0RhdGEiLCJ1bmRlZmluZWQiLCJhY3RpdmVSb3V0ZU1lbnUiLCJzZXRBY3RpdmVSb3V0ZU1lbnUiLCJpZCIsIm5hbWUiLCJob21lU2VsZWN0ZWQiLCJzZXRIb21lU2VsZWN0ZWQiLCJnZXRWaWV3cyIsIm1lbnVzIiwibGV2ZWwiLCJuZXdWaWV3cyIsImNyZWF0ZVZpZXciLCJhdHRyaWJ1dGVzIiwibGFiZWwiLCJpY29uIiwibWluaSIsImxheW91dCIsInN1Yk1lbnUiLCJjb2xsYXBzZSIsInN0YXRlIiwidmlld3MiLCJnZXRJdGVtcyIsIml0ZW1zIiwiaXRlbSIsIm5ld0l0ZW1zIiwiY3JlYXRlSXRlbSIsIlV0aWxzIiwiaXNOdWxsIiwiaW5pdGlhbFN0YXRlIiwicHJvcCIsImdldENvbGxhcHNlSW5pdGlhbFN0YXRlIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInBhdGgiLCJnZXRNZW51Iiwicm91dGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNlcnZpY2UiLCJ1cmwiLCJwYXJhbWV0ZXJzIiwibWVudSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiY29udGVudFR5cGUiLCJpbnZva2VSZXN0IiwiYXBpIiwicmVzdWx0IiwiY29uc29sZSIsImFjdGl2ZVJvdXRlIiwicm91dGVOYW1lIiwiZ2V0TGlDbGFzc05hbWUiLCJmYWxsYmFja0ljb24iLCJpY29uTm9kZSIsIl9wcm9wJG5hbWUiLCJfcHJvcCRuYW1lJGNoYXJBdCIsIl9wcm9wJG5hbWUyIiwiX3Byb3AkbmFtZSRjaGFyQXQyIiwiX3Byb3AkbmFtZTMiLCJjcmVhdGVFbGVtZW50IiwiZm9udFNpemUiLCJjbGFzc05hbWUiLCJzdHlsZSIsImNoYXJBdCIsImNyZWF0ZUxpbmtzIiwic2Vjb25kYXJ5VGhlbWVDb2xvciIsIm1hcCIsImtleSIsIl9wcm9wJGl0ZW0iLCJyZWRpcmVjdCIsInJhd0ljb24iLCJpc1ZhbGlkRWxlbWVudCIsInRyaW0iLCJpc0FjdGl2ZSIsImlzQ29sbGFwc2libGUiLCJpc1BhcmVudCIsImlzT3BlbiIsImNvbGxhcHNpYmxlQ2xhc3NOYW1lIiwibGVhZkNsYXNzTmFtZSIsImluZGVudCIsImlzVG9wTGV2ZWwiLCJzaG91bGRTaG93VG9vbHRpcCIsImhhbmRsZUNsaWNrIiwicHJldmVudERlZmF1bHQiLCJ0b2dnbGUiLCJwcmV2IiwidGhlbiIsImJ1dHRvbiIsIkxpc3RJdGVtQnV0dG9uIiwib25DbGljayIsInN4IiwicGwiLCJiYWNrZ3JvdW5kQ29sb3IiLCJsaWdodGVuIiwiYm9yZGVyUmFkaXVzIiwiY29sb3IiLCJmb250V2VpZ2h0IiwiTGlzdEl0ZW1JY29uIiwibWluV2lkdGgiLCJtciIsImp1c3RpZnlDb250ZW50IiwiTGlzdEl0ZW1UZXh0IiwicHJpbWFyeSIsImNvbmNhdCIsIm1hcmdpblRvcCIsIkZyYWdtZW50IiwiVG9vbHRpcCIsInRpdGxlIiwicGxhY2VtZW50IiwiYXJyb3ciLCJDb2xsYXBzZSIsImluIiwidGltZW91dCIsInVubW91bnRPbkV4aXQiLCJtdCIsIkxpc3QiLCJkaXNhYmxlUGFkZGluZyIsIm1lbnVMaW5rIiwiY29uZmlnIiwiY2xpY2tDYWxsYmFjayIsImRhc2hib2FyZExhdW5jaGVyIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNXaW5kb3dPcGVuIiwidXBkYXRlQ29udGV4dCIsIndpbmRvd0Rpc3BsYXlTdGF0ZSIsImF1dG9DbGljayIsImRlZmF1bHRJdGVtIiwidmlld0lkIiwiY29udGVudCIsImljb25Db2xvciIsInRhYiIsInB4Iiwib3BhY2l0eSIsInRyYW5zaXRpb24iLCJ1c2VFZmZlY3QiLCJjYW5jZWxsZWQiLCJtZXRob2QiLCJsb2dvIiwibG9nb0ltZyIsIm91dHRlckxpbmsiLCJjbG9zZVNpZGViYXIiLCJsb2dvU3R5bGUiLCJ3aWR0aCIsIm1heFdpZHRoIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJzcmMiLCJpbWdTcmMiLCJhbHQiLCJyZXNvbHZlSGlnaGxpZ2h0Q29sb3IiLCJjIiwicGFsZXR0ZSIsIm1haW4iLCJzZWNvbmRhcnkiLCJyZW5kZXJIb21lQnV0dG9uIiwiaGIiLCJob21lQnV0dG9uU2V0dGluZ3MiLCJoaWdobGlnaHQiLCJpY29uU2l6ZSIsImNhbGxiYWNrIiwicHIiLCJtYXJnaW4iLCJ0ZXh0IiwicGFkZGluZyIsImJvcmRlciIsImRhdGEiLCJoZWFkaW5nIiwicGFkZGluZ1RvcCIsInBsYWluIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib25lT2YiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwicnRsQWN0aXZlIiwiYm9vbCIsImFycmF5Iiwib25lT2ZUeXBlIiwic2hhcGUiLCJpbm5lckxpbmsiLCJmdW5jIiwib2JqZWN0IiwiZWxlbWVudCIsIm51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXNoYm9hcmQvY29tcG9uZW50cy9ibGFja0Rhc2hib2FyZC9zaWRlYmFyL0ZvbGRpbmdUYWJTaWRlYmFyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vVXRpbHMnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi8uLi8uLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IE1lbnVMaW5rIGZyb20gJy4uLy4uLy4uLy4uL21lbnUvTWVudUxpbmsnO1xuaW1wb3J0IEljb24gZnJvbSAnLi4vLi4vLi4vLi4vSWNvbic7XG5pbXBvcnQge0NvbGxhcHNlLCBsaWdodGVuLCBMaXN0LCBMaXN0SXRlbUJ1dHRvbiwgTGlzdEl0ZW1JY29uLCBMaXN0SXRlbVRleHQsIFRvb2x0aXB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHt1c2VUaGVtZX0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHtpbnZva2VSZXN0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9SZXN0VXRpbHMnO1xuaW1wb3J0ICcuL0ZvbGRpbmdUYWJTaWRlYmFyLmNzcyc7XG5pbXBvcnQgQ2FyZEF2YXRhciBmcm9tIFwiLi4vLi4vLi4vLi4vY2FyZC9DYXJkQXZhdGFyXCI7XG5pbXBvcnQgTW9yZUhvcml6SWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL01vcmVIb3Jpeic7XG5pbXBvcnQgSG9tZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Ib21lJztcblxuY29uc3QgVEFCID0gMTY7XG4vLyBTaGFyZWQgaWNvbi1jb2x1bW4gd2lkdGggKHB4KSBzbyBpY29ucyBsZWZ0LWFsaWduIGFuZCB0ZXh0IHN0YXJ0cyBhdCB0aGUgc2FtZVxuLy8geCBmb3IgZXZlcnkgaXRlbSAoaG9tZSBidXR0b24gKyByb3V0ZXMpLCByZWdhcmRsZXNzIG9mIGljb24gc2l6ZSBvciBhYnNlbmNlLlxuY29uc3QgSUNPTl9DT0wgPSAyNDtcblxuZnVuY3Rpb24gRm9sZGluZ1RhYlNpZGViYXIocHJvcHMpIHtcbiAgICBjb25zdCB7YWN0aXZlQ29sb3IsIG9wZW4sIGFwcExvZ29QYXRoLCBvbk9wZW5EcmF3ZXJ9ID0gcHJvcHM7XG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICAgIGNvbnN0IFtjb2xsYXBzZVN0YXRlcywgc2V0Q29sbGFwc2VTdGF0ZXNdID0gUmVhY3QudXNlU3RhdGUoXG4gICAgICAgIGdldENvbGxhcHNlU3RhdGVzKHByb3BzLnJvdXRlcylcbiAgICApO1xuICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JvdXRlc0RhdGEsIHNldFJvdXRlc0RhdGFdID0gUmVhY3QudXNlU3RhdGUodW5kZWZpbmVkKTtcbiAgICBjb25zdCBbYWN0aXZlUm91dGVNZW51LCBzZXRBY3RpdmVSb3V0ZU1lbnVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgICAgICBpZDogJ2Rhc2hib2FyZCcsXG4gICAgICAgIG5hbWU6ICdEYXNoYm9hcmQnXG4gICAgfSk7XG4gICAgLy8gSG9tZSBidXR0b24gaXMgaGlnaGxpZ2h0ZWQgYnkgZGVmYXVsdDsgc2VsZWN0aW5nIGFueSByb3V0ZSBjbGVhcnMgaXQsXG4gICAgLy8gY2xpY2tpbmcgdGhlIGhvbWUgYnV0dG9uIHJlc3RvcmVzIGl0LlxuICAgIGNvbnN0IFtob21lU2VsZWN0ZWQsIHNldEhvbWVTZWxlY3RlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tIGhlbHBlcnMgKHBvcnRlZCBmcm9tIGNsYXNzKSAtLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXdzKG1lbnVzLCBsZXZlbCkge1xuICAgICAgICBjb25zdCBuZXdWaWV3cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVWaWV3ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG1lbnVzW2ldLmF0dHJpYnV0ZXMubGFiZWwsXG4gICAgICAgICAgICAgICAgaWQ6IG1lbnVzW2ldLmlkLFxuICAgICAgICAgICAgICAgIGljb246IG1lbnVzW2ldLmljb24sXG4gICAgICAgICAgICAgICAgbWluaTogJ1NTJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6ICcvYWRtaW4nLFxuICAgICAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1lbnVzW2ldLnN1Yk1lbnUpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3LmNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3LnN0YXRlID0gbWVudXNbaV0uaWQgKyAnQ29sbGFwc2UnO1xuICAgICAgICAgICAgICAgIGNyZWF0ZVZpZXcudmlld3MgPSBnZXRJdGVtcyhtZW51c1tpXS5zdWJNZW51Lml0ZW1zLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVWaWV3Lml0ZW0gPSBtZW51c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld1ZpZXdzLnB1c2goY3JlYXRlVmlldyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZXdzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEl0ZW1zKGl0ZW1zLCBsZXZlbCkge1xuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVJdGVtID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW1zW2ldLmF0dHJpYnV0ZXMubGFiZWwsXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW1zW2ldLmlkLFxuICAgICAgICAgICAgICAgIGljb246IGl0ZW1zW2ldLmljb24sXG4gICAgICAgICAgICAgICAgbWluaTogJ1NTJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6ICcvYWRtaW4nLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1zW2ldLFxuICAgICAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaXRlbXNbaV0uc3ViTWVudSkpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVJdGVtLmNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjcmVhdGVJdGVtLnN0YXRlID0gaXRlbXNbaV0uaWQgKyAnU3ViTWVudUNvbGxhcHNlJztcbiAgICAgICAgICAgICAgICBjcmVhdGVJdGVtLnZpZXdzID0gZ2V0SXRlbXMoaXRlbXNbaV0uc3ViTWVudS5pdGVtcywgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2goY3JlYXRlSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0l0ZW1zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbGxhcHNlU3RhdGVzKHJvdXRlcykge1xuICAgICAgICBsZXQgaW5pdGlhbFN0YXRlID0ge307XG4gICAgICAgIGlmIChyb3V0ZXMpIHtcbiAgICAgICAgICAgIHJvdXRlcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AuY29sbGFwc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3Auc3RhdGVdOiBnZXRDb2xsYXBzZUluaXRpYWxTdGF0ZShwcm9wLnZpZXdzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdldENvbGxhcHNlU3RhdGVzKHByb3Audmlld3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5pdGlhbFN0YXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDb2xsYXBzZUluaXRpYWxTdGF0ZShyb3V0ZXMpIHtcbiAgICAgICAgaWYgKCFyb3V0ZXMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcm91dGVzW2ldLnZpZXdzKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChyb3V0ZXNbaV0uY29sbGFwc2UgJiYgZ2V0Q29sbGFwc2VJbml0aWFsU3RhdGUocm91dGVzW2ldLnZpZXdzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlc1tpXS5wYXRoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0TWVudSA9IChyb3V0ZSkgPT5cbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB7XG4gICAgICAgICAgICAgICAgdXJsOiAnL3VpL2FwaS92MS9tZW51L2dldCcsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7bmFtZTogJ2lkJywgdmFsdWU6IHJvdXRlLm1lbnUsIGh0dHBQYXJhbWV0ZXJUeXBlOiAnUVVFUllfUEFSQU1FVEVSJ30sXG4gICAgICAgICAgICAgICAgICAgIHtuYW1lOiAndmVyc2lvbicsIHZhbHVlOiAxLjAsIGh0dHBQYXJhbWV0ZXJUeXBlOiAnUVVFUllfUEFSQU1FVEVSJ31cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGludm9rZVJlc3QoXG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFwaToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFzaGJvYXJkLXNpZGViYXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnZGFzaGJvYXJkLXNpZGViYXInLFxuICAgICAgICAgICAgICAgIChyZXN1bHQpID0+IHJlc29sdmUoZ2V0Vmlld3MocmVzdWx0Lm1lbnVzLCByb3V0ZS5sZXZlbCArIDEpKSxcbiAgICAgICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IChyb3V0ZU5hbWUpID0+IGFjdGl2ZVJvdXRlTWVudS5pZCA9PT0gcm91dGVOYW1lO1xuICAgIGNvbnN0IGdldExpQ2xhc3NOYW1lID0gKHByb3ApID0+ICdsaS0nICsgcHJvcC5sZXZlbDtcblxuICAgIGNvbnN0IGZhbGxiYWNrSWNvbiA9IChwcm9wLCBpY29uTm9kZSkgPT4ge1xuICAgICAgICBpZiAocHJvcC5pY29uKSByZXR1cm4gaWNvbk5vZGU7XG5cbiAgICAgICAgaWYgKHByb3AubGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiA8TW9yZUhvcml6SWNvbiBmb250U2l6ZT1cInNtYWxsXCIvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbmktYXZhdGFyXCIgc3R5bGU9e3tmb250U2l6ZTogJzEwcHgnfX0+XG4gICAgICAgICAgICAgICAge3Byb3AubmFtZT8uY2hhckF0KDApICsgKHByb3AubmFtZT8uY2hhckF0KDEpID8/ICcnKSArIChwcm9wLm5hbWU/LmNoYXJBdCgyKSA/PyAnJykgKyAnLi4uJ31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLSBjcmVhdGVMaW5rcyB3aXRoIGR5bmFtaWMgY2xhc3NlcyArIHRoZW1lIGNvbG9ycyAtLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgIGNvbnN0IGNyZWF0ZUxpbmtzID0gKHJvdXRlcykgPT4ge1xuICAgICAgICBjb25zdCB7c2Vjb25kYXJ5VGhlbWVDb2xvciwgb3Blbn0gPSBwcm9wcztcblxuICAgICAgICByZXR1cm4gcm91dGVzLm1hcCgocHJvcCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcC5yZWRpcmVjdCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIGljb24gZnJvbSB0aGUgcm91dGUsIGZhbGxpbmcgYmFjayB0byBpdHMgcmF3IG1lbnUgaXRlbVxuICAgICAgICAgICAgLy8gKHRoZSBzZXJ2ZXItZmlsdGVyZWQgcm91dGUgbWF5IG5vdCBzdXJmYWNlIGBpY29uYCwgYnV0IHRoZSByYXdcbiAgICAgICAgICAgIC8vIGl0ZW0gY2FycmllcyBpdCkuIEZvbnRBd2Vzb21lIGNsYXNzIHN0cmluZ3MgKFwiZmFzIGZhLS4uLlwiKSByZW5kZXJcbiAgICAgICAgICAgIC8vIGFzIDxpIGNsYXNzTmFtZT47IG5hbWVkIGlkcyAoXCJQRVJTT05cIiwgXCJIT01FXCIpIGdvIHRocm91Z2ggdGhlXG4gICAgICAgICAgICAvLyBmcmFtZXdvcmsgSWNvbiBjb21wb25lbnQgKHdoaWNoIG1hcHMgaWRzIC0+IE1VSSBpY29ucykuXG4gICAgICAgICAgICBjb25zdCByYXdJY29uID0gIVV0aWxzLmlzTnVsbChwcm9wLmljb24pID8gcHJvcC5pY29uIDogcHJvcC5pdGVtPy5pY29uO1xuICAgICAgICAgICAgbGV0IGljb25Ob2RlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChyYXdJY29uKSkge1xuICAgICAgICAgICAgICAgIGljb25Ob2RlID0gcmF3SWNvbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhd0ljb24gPT09ICdzdHJpbmcnICYmIHJhd0ljb24udHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGljb25Ob2RlID0gKHJhd0ljb24uaW5kZXhPZignZmEtJykgIT09IC0xIHx8IHJhd0ljb24uaW5kZXhPZignICcpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgPyA8aSBjbGFzc05hbWU9e3Jhd0ljb259Lz5cbiAgICAgICAgICAgICAgICAgICAgOiA8SWNvbiBpZD17cmF3SWNvbn0vPjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWNvbk5vZGUgPSBwcm9wLmxldmVsID09PSAwID8gPGkgY2xhc3NOYW1lPXsnZmFzIGZhLXNxdWFyZSd9Lz4gOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVJvdXRlKHByb3AuaWQpO1xuICAgICAgICAgICAgY29uc3QgaXNDb2xsYXBzaWJsZSA9XG4gICAgICAgICAgICAgICAgKHByb3AuY29sbGFwc2UgfHwgcHJvcC5pc1BhcmVudCkgJiZcbiAgICAgICAgICAgICAgICBwcm9wLm5hbWUgIT09ICdEYXNoYm9hcmQnICYmXG4gICAgICAgICAgICAgICAgcHJvcC5uYW1lICE9PSAnTXkgV29yayBJdGVtcyc7XG4gICAgICAgICAgICBjb25zdCBpc09wZW4gPSBwcm9wLnN0YXRlID8gISFjb2xsYXBzZVN0YXRlc1twcm9wLnN0YXRlXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyByZXBsaWNhdGUgZHluYW1pYyBjbGFzc05hbWUgbG9naWMgZm9yIGNvbGxhcHNpYmxlIGVudHJpZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNpYmxlQ2xhc3NOYW1lID0gcHJvcC5jb2xsYXBzZVxuICAgICAgICAgICAgICAgID8gKGdldENvbGxhcHNlSW5pdGlhbFN0YXRlKHByb3Audmlld3MpXG4gICAgICAgICAgICAgICAgICAgID8gJ2FjdGl2ZSAnICsgZ2V0TGlDbGFzc05hbWUocHJvcClcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMaUNsYXNzTmFtZShwcm9wKSlcbiAgICAgICAgICAgICAgICA6IGdldExpQ2xhc3NOYW1lKHByb3ApO1xuXG4gICAgICAgICAgICAvLyBsZWFmIGNsYXNzZXMgKGluY2x1ZGUgbGktbGV2ZWwpXG4gICAgICAgICAgICBjb25zdCBsZWFmQ2xhc3NOYW1lID1cbiAgICAgICAgICAgICAgICBnZXRMaUNsYXNzTmFtZShwcm9wKSArXG4gICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAoJ21lbnUtbGluay1saScgK1xuICAgICAgICAgICAgICAgICAgICAoaXNBY3RpdmUgPyAnLWFjdGl2ZScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocHJvcC5uYW1lID09PSAnRGFzaGJvYXJkJyA/ICcgZGFzaGJvYXJkLWxpbmsnIDogJycpKTtcblxuICAgICAgICAgICAgLy8gaW5kZW50IGJhc2VkIG9uIGxldmVsIChUQUIgcHggLT4gc3BhY2luZyB1bml0cylcbiAgICAgICAgICAgIGNvbnN0IGluZGVudCA9IChwcm9wLmxldmVsICsgMSkgKiAoVEFCIC8gOCk7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb3BMZXZlbCA9IHByb3AubGV2ZWwgPT09IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1Rvb2x0aXAgPSAhb3BlbiAmJiBpc1RvcExldmVsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZHJhd2VyIGlzIGNsb3NlZCBhbmQgdGhpcyBpcyBhIHRvcC1sZXZlbCBpdGVtLCBhc2sgcGFyZW50IHRvIG9wZW4gaXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVuICYmIGlzVG9wTGV2ZWwgJiYgdHlwZW9mIG9uT3BlbkRyYXdlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25PcGVuRHJhd2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2dnbGUgPSAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29sbGFwc2VTdGF0ZXMoKHByZXYpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcC5zdGF0ZV06ICFwcmV2W3Byb3Auc3RhdGVdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsYXp5LWxvYWQgbWVudSBvbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRNZW51KHByb3ApLnRoZW4oKHZpZXdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Audmlld3MgPSB2aWV3cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSAoXG4gICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjb2xsYXBzaWJsZUNsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbDogaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRlbihzZWNvbmRhcnlUaGVtZUNvbG9yLCAwLjkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogc2Vjb25kYXJ5VGhlbWVDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aWNvbk5vZGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBvcGVuID8gSUNPTl9DT0wgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXI6IG9wZW4gPyAwIDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IG9wZW4gPyAnZmxleC1zdGFydCcgOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ljb25Ob2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdEl0ZW1JY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcGVuID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3AubmFtZX17JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcC5jb2xsYXBzZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGNhcmV0ICR7aXNPcGVuID8gJ2NhcmV0LW9wZW4nIDogJ2NhcmV0LWNsb3NlZCd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e21hcmdpblRvcDogMH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaWNvbk5vZGUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0ljb24ocHJvcCwgaWNvbk5vZGUpIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9MaXN0SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGRTaG93VG9vbHRpcCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Byb3AubmFtZX0gcGxhY2VtZW50PVwicmlnaHRcIiBhcnJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcC5jb2xsYXBzZSAmJiBwcm9wLnZpZXdzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sbGFwc2UgaW49e2lzT3Blbn0gdGltZW91dD1cImF1dG9cIiB1bm1vdW50T25FeGl0IHN4PXt7IHBsOiAwLCBtdDogMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QgZGlzYWJsZVBhZGRpbmcgY2xhc3NOYW1lPVwibmF2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlTGlua3MocHJvcC52aWV3cyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbGxhcHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWVudUxpbmsgPSA8TWVudUxpbmtcbiAgICAgICAgICAgICAgICAvLyBUaGUgc2lkZWJhcidzIExpc3RJdGVtSWNvbiBhbHJlYWR5IHJlbmRlcnMgdGhlIGljb24gKGFuZCBvd25zXG4gICAgICAgICAgICAgICAgLy8gdGhlIGNvbHVtbiBhbGlnbm1lbnQgLyBjb2xsYXBzZWQgY2VudHJpbmcpLCBzbyBzdHJpcCBpdCBoZXJlXG4gICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgTWVudUxpbmsgcmVuZGVyaW5nIGEgc2Vjb25kLCBkb3VibGVkIGljb24uXG4gICAgICAgICAgICAgICAgY29uZmlnPXtVdGlscy5pc051bGwocHJvcC5pdGVtKSA/IHByb3AuaXRlbSA6IHsuLi5wcm9wLml0ZW0sIGljb246IHVuZGVmaW5lZH19XG4gICAgICAgICAgICAgICAgY2xpY2tDYWxsYmFjaz17XG4gICAgICAgICAgICAgICAgICAgIHByb3AubmFtZSA9PT0gJ0Rhc2hib2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kYXNoYm9hcmRMYXVuY2hlciAmJiBwcm9wcy5kYXNoYm9hcmRMYXVuY2hlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVJvdXRlTWVudShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIb21lU2VsZWN0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLXZpZXdwb3J0OiBkb2NrIChwaW4pIGFueSBvcGVuIHdpbmRvdyBvdmVybGF5IHNvIGl0IHN0YXlzIHZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbG9uZ3NpZGUgdGhlIG5ld2x5LW5hdmlnYXRlZCBtYWluIHZpZXcgaW5zdGVhZCBvZiBvdmVybGF5aW5nIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNXaW5kb3dPcGVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnVwZGF0ZUNvbnRleHQoe3dpbmRvd0Rpc3BsYXlTdGF0ZTogJ1BJTk5FRCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUm91dGVNZW51KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVTZWxlY3RlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktdmlld3BvcnQ6IGRvY2sgKHBpbikgYW55IG9wZW4gd2luZG93IG92ZXJsYXkgKHNlZSBhYm92ZSkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uTWFuYWdlci5pc1dpbmRvd09wZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQ29udGV4dCh7d2luZG93RGlzcGxheVN0YXRlOiAnUElOTkVEJ30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXV0b0NsaWNrPXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcC5uYW1lID09PSAnTXkgV29yayBJdGVtcycgfHxcbiAgICAgICAgICAgICAgICAgICAgKHByb3AuaXRlbSAmJiBwcm9wLml0ZW0uZGVmYXVsdEl0ZW0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZpZXdJZD1cIm1lbnVCYXJcIlxuICAgICAgICAgICAgICAgIGljb249e3Byb3AuaWNvbn1cbiAgICAgICAgICAgICAgICBjb250ZW50PXtvcGVuID8gbnVsbCA6IGZhbGxiYWNrSWNvbihwcm9wLCBpY29uTm9kZSl9XG4gICAgICAgICAgICAgICAgaWNvbkNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgKHByb3AubmFtZSA9PT0gJ0Rhc2hib2FyZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3AubmFtZSA9PT0gJ015IFdvcmsgSXRlbXMnKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wcy5zZWNvbmRhcnlUaGVtZUNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmFtZT17cHJvcC5uYW1lfVxuICAgICAgICAgICAgICAgIGlkPXtwcm9wLmlkfVxuICAgICAgICAgICAgICAgIGxldmVsPXtwcm9wLmxldmVsfVxuICAgICAgICAgICAgICAgIHRhYj17VEFCfVxuICAgICAgICAgICAgLz47XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgICAgPExpc3RJdGVtQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eyhwcm9wLm5hbWUgPT09ICdEYXNoYm9hcmQnIHx8IHByb3AubmFtZSA9PT0gJ015IFdvcmsgSXRlbXMnKSA/IChpc0FjdGl2ZSA/ICdkYXNoYm9hcmQtbGluay1hY3RpdmUnIDogJ2Rhc2hib2FyZC1saW5rJykgOiBsZWFmQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IG9wZW4gPyAnaW5pdGlhbCcgOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB4OiAyLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbDogaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGVhZiBpY29ucyBzaXQgZGltbWVkLCB0aGVuIGJyaWdodGVuICsgZ2xvdyBvbiBob3Zlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlMaXN0SXRlbUljb24tcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBpc0FjdGl2ZSA/IDEgOiAwLjU1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDAuMnMgZWFzZSwgZmlsdGVyIDAuMnMgZWFzZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpob3ZlciAuTXVpTGlzdEl0ZW1JY29uLXJvb3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwIDAgNHB4IGN1cnJlbnRDb2xvciknXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRlbihzZWNvbmRhcnlUaGVtZUNvbG9yLCAwLjkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHNlY29uZGFyeVRoZW1lQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2ljb25Ob2RlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogb3BlbiA/IChwcm9wLm5hbWUgPT09ICdEYXNoYm9hcmQnID8gSUNPTl9DT0wgOiBUQUIpIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXI6IG9wZW4gPyAwIDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogb3BlbiA/ICdmbGV4LXN0YXJ0JyA6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9wLm5hbWUgPT09ICdEYXNoYm9hcmQnIHx8IHByb3AubmFtZSA9PT0gJ015IFdvcmsgSXRlbXMnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlY29uZGFyeVRoZW1lQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdpbmhlcml0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ljb25Ob2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0SXRlbUljb24+XG4gICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlbiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVudUxpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6ICFpY29uTm9kZSA/IDw+e21lbnVMaW5rfTwvPiA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvTGlzdEl0ZW1CdXR0b24+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBsZWFmXG4gICAgICAgICAgICByZXR1cm4gIW9wZW4gPyAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Byb3AubmFtZX0gcGxhY2VtZW50PVwicmlnaHRcIiBhcnJvdz5cbiAgICAgICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgKSA6IGNvbnRlbnQ7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLSBsb2FkIGZpbHRlcmVkIG1lbnUgLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2VydmljZSA9IHtcbiAgICAgICAgICAgIHVybDogJy91aS9hcGkvdjEvbWVudS9maWx0ZXInLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogW3t2YWx1ZTogcHJvcHMucm91dGVzLCBodHRwUGFyYW1ldGVyVHlwZTogJ1JFUVVFU1RfQk9EWSd9XSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuXG4gICAgICAgIGludm9rZVJlc3QoXG4gICAgICAgICAgICBzZXJ2aWNlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFwaToge1xuICAgICAgICAgICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rhc2hib2FyZC1zaWRlYmFyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZGFzaGJvYXJkLXNpZGViYXInLFxuICAgICAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJvdXRlc0RhdGEocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtwcm9wcy5yb3V0ZXNdKTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tIHJlbmRlciAtLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgIGNvbnN0IHtsb2dvfSA9IHByb3BzO1xuXG4gICAgbGV0IGxvZ29JbWcgPSBudWxsO1xuICAgIGlmICghVXRpbHMuaXNOdWxsKGxvZ28pKSB7XG4gICAgICAgIGxvZ29JbWcgPSAoXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGhyZWY9e2xvZ28ub3V0dGVyTGlua31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzaWRlYmFyX19icmFuZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17cHJvcHMuY2xvc2VTaWRlYmFyfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb21lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi4ocHJvcHMubG9nb1N0eWxlIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBzbyB0aGUgbG9nbyBmaXRzIHRoZSByYWlsIChpdCBnZXRzIGN1dCBhdFxuICAgICAgICAgICAgICAgICAgICAvLyBhIGZpeGVkIHdpZHRoIGluIHRoZSBtaW5pIGRyYXdlcikuIEhlaWdodCArIGZpdHRpbmcgYXJlIGxlZnRcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIENTUyAoLnNpZGViYXJfX2JyYW5kIG1heC1oZWlnaHQgKyAuc2lkZWJhcl9fYnJhbmQtaW1nXG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLXNpemU6MTAwJSAvIG9iamVjdC1maXQ6Y29udGFpbiksIHNvIGEgdGFsbGVyIGxvZ29cbiAgICAgICAgICAgICAgICAgICAgLy8gc2NhbGVzIGRvd24gaW5zdGVhZCBvZiBvdmVyZmxvd2luZyBhbmQgYmVpbmcgY2xpcHBlZC5cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IChwcm9wcy5sb2dvU3R5bGUgJiYgcHJvcHMubG9nb1N0eWxlLndpZHRoKSB8fCAnMTIwcHgnLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgc3JjPXtsb2dvLmltZ1NyY31cbiAgICAgICAgICAgICAgICAgICAgYWx0PVwibG9nb1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZGViYXJfX2JyYW5kLWltZ1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAgICAgIDxlbT5Mb2FkaW5nIG1lbnXigKY8L2VtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMyB0ZXh0LWRhbmdlclwiPlxuICAgICAgICAgICAgICAgIDxlbT5GYWlsZWQgdG8gbG9hZCBtZW51LjwvZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJvdXRlc0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gY29sb3I6ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgYW55IENTUyBjb2xvciAoZS5nLiAnIzAwMDAwMCcpXG4gICAgY29uc3QgcmVzb2x2ZUhpZ2hsaWdodENvbG9yID0gKGMpID0+IHtcbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChjKSB8fCBjID09PSAncHJpbWFyeScpIHJldHVybiB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbjtcbiAgICAgICAgaWYgKGMgPT09ICdzZWNvbmRhcnknKSByZXR1cm4gdGhlbWUucGFsZXR0ZS5zZWNvbmRhcnkubWFpbjtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfTtcblxuICAgIC8vIE9wdGlvbmFsIGhvbWUgYnV0dG9uLCByZW5kZXJlZCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHNpZGViYXIuIEZpcmVzXG4gICAgLy8gaG9tZUJ1dHRvblNldHRpbmdzLmNhbGxiYWNrKCkgb24gY2xpY2sgKGUuZy4gbG9hZCB0aGUgcG9ydGFsIGRhc2hib2FyZCkuXG4gICAgY29uc3QgcmVuZGVySG9tZUJ1dHRvbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGIgPSBwcm9wcy5ob21lQnV0dG9uU2V0dGluZ3M7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoaGIpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBoaWdobGlnaHQgPSByZXNvbHZlSGlnaGxpZ2h0Q29sb3IoaGIuY29sb3IpO1xuXG4gICAgICAgIC8vIGljb24gc2l6ZSBmcm9tIHNldHRpbmdzIChudW1iZXIgcHggb3IgYW55IENTUyBzaXplLCBlLmcuIDI0LCAnMjRweCcsICcxLjVyZW0nKVxuICAgICAgICBjb25zdCBpY29uU2l6ZSA9IGhiLmljb25TaXplO1xuXG4gICAgICAgIGxldCBpY29uTm9kZTtcbiAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGhiLmljb24pKSB7XG4gICAgICAgICAgICBpY29uTm9kZSA9IGhiLmljb247XG4gICAgICAgIH0gZWxzZSBpZiAoaGIuaWNvbiA9PT0gJ0hPTUUnIHx8IFV0aWxzLmlzTnVsbChoYi5pY29uKSkge1xuICAgICAgICAgICAgaWNvbk5vZGUgPSA8SG9tZUljb24gZm9udFNpemU9e2ljb25TaXplID8gaWNvblNpemUgOiAnc21hbGwnfS8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWNvbk5vZGUgPSA8aSBjbGFzc05hbWU9e2hiLmljb259IHN0eWxlPXtpY29uU2l6ZSA/IHtmb250U2l6ZTogaWNvblNpemV9IDogdW5kZWZpbmVkfS8+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnV0dG9uID0gKFxuICAgICAgICAgICAgPExpc3RJdGVtQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnc2lkZWJhcl9faG9tZS1idXR0b24nICsgKGhvbWVTZWxlY3RlZCA/ICcgc2lkZWJhcl9faG9tZS1idXR0b24tLXNlbGVjdGVkJyA6ICcnKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhvbWVTZWxlY3RlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYW55IGFjdGl2ZSByb3V0ZSBzbyBubyByb3V0ZSBsaW5rIHN0YXlzIGhpZ2hsaWdodGVkXG4gICAgICAgICAgICAgICAgICAgIC8vIChhY3RpdmVSb3V0ZSgpIG1hdGNoZXMgb24gaWQ7ICdfX2hvbWVfXycgbWF0Y2hlcyBub25lKS5cbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUm91dGVNZW51KHtpZDogJ19faG9tZV9fJywgbmFtZTogJ0hvbWUnfSk7XG4gICAgICAgICAgICAgICAgICAgIGhiLmNhbGxiYWNrICYmIGhiLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogb3BlbiA/ICdmbGV4LXN0YXJ0JyA6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAvLyBwYW5lbCBvZmZzZXQgPSBtYXJnaW4gOCArIGJvcmRlciAxICsgcGFkZGluZyA2ID0gMTVweDsgKzFweCBsYW5kc1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaWNvbiBhdCAxNnB4LCBleGFjdGx5IHdoZXJlIHRoZSBsZXZlbC0wIHJvdXRlIGljb25zIHNpdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBjb2xsYXBzZWQsIGtlZXAgcGFkZGluZyBzeW1tZXRyaWMgc28gdGhlIGljb24gY2VudHJlc1xuICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWluaSByYWlsIChtYXRjaGluZyB0aGUgcm91dGVzKS5cbiAgICAgICAgICAgICAgICAgICAgcGw6IG9wZW4gPyAnMXB4JyA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHByOiBvcGVuID8gMi41IDogMCxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgLi4uKGhiLnN0eWxlIHx8IHt9KVxuICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3RlZC9ob3ZlciBoaWdobGlnaHQgbGl2ZXMgaW4gdGhlIHNraW5cbiAgICAgICAgICAgICAgICAgICAgLy8gKC5zaWRlYmFyX19ob21lLWJ1dHRvbi0tc2VsZWN0ZWQgaW4gc2tpbnMuY3NzKS5cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb25cbiAgICAgICAgICAgICAgICAgICAgc3g9e3ttYXJnaW46IG9wZW4gPyBudWxsIDogJ2F1dG8nLCBtaW5XaWR0aDogb3BlbiA/IElDT05fQ09MIDogMCwgbXI6IG9wZW4gPyAwIDogJ2F1dG8nLCBqdXN0aWZ5Q29udGVudDogb3BlbiA/ICdmbGV4LXN0YXJ0JyA6ICdjZW50ZXInLCBjb2xvcjogaGlnaGxpZ2h0fX0+XG4gICAgICAgICAgICAgICAgICAgIHtpY29uTm9kZX1cbiAgICAgICAgICAgICAgICA8L0xpc3RJdGVtSWNvbj5cbiAgICAgICAgICAgICAgICB7b3BlbiAmJiBoYi50ZXh0ID8gPGRpdiBzdHlsZT17e2ZvbnRXZWlnaHQ6IDMwMCwgZm9udFNpemU6ICcuODVyZW0nfX0+e2hiLnRleHR9PC9kaXY+IDogbnVsbH1cbiAgICAgICAgICAgIDwvTGlzdEl0ZW1CdXR0b24+XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9eydzaWRlYmFyX19ob21lLWJ1dHRvbicgKyAoaG9tZVNlbGVjdGVkID8gJyBzaWRlYmFyX19ob21lLWJ1dHRvbi0tc2VsZWN0ZWQnIDogJycpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG9wZW4gPyAnMCcgOiAwLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDIwLCA2MCwgOTQsIDAuMDUpJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjAsIDYwLCA5NCwgMC4wOCknLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7IW9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtoYi50ZXh0IHx8ICdIb21lJ30gcGxhY2VtZW50PVwicmlnaHRcIiBhcnJvdz57YnV0dG9ufTwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICApIDogYnV0dG9ufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgc2lkZWJhciAkeyFvcGVuID8gJ3NpZGViYXItLW1pbmknIDogJyd9YH1cbiAgICAgICAgICAgIGRhdGE9e2FjdGl2ZUNvbG9yfVxuICAgICAgICA+XG4gICAgICAgICAgICB7LyogVE9QOiBicmFuZCAvIGxvZ28gKi99XG4gICAgICAgICAgICB7bG9nb0ltZyAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWRlYmFyX190b3BcIj5cbiAgICAgICAgICAgICAgICAgICAge2xvZ29JbWd9XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5oZWFkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9faGVhZGluZ1wiPntwcm9wcy5oZWFkaW5nfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEhvbWUgYnV0dG9uIOKAlCB1bmRlciB0aGUgbG9nbywgYWJvdmUgdGhlIHJvdXRlcyAqL31cbiAgICAgICAgICAgIHtyZW5kZXJIb21lQnV0dG9uKCl9XG5cbiAgICAgICAgICAgIHsvKiBNSURETEU6IHNjcm9sbGFibGUgbmF2ICovfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZGViYXJfX3Njcm9sbFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e1V0aWxzLmlzTnVsbChwcm9wcy5ob21lQnV0dG9uU2V0dGluZ3MpID8gdW5kZWZpbmVkIDoge3BhZGRpbmdUb3A6IDB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMaXN0IHN4PXt7bXQ6IFV0aWxzLmlzTnVsbChwcm9wcy5ob21lQnV0dG9uU2V0dGluZ3MpID8gMSA6IDB9fSBjbGFzc05hbWU9XCJuYXZcIj5cbiAgICAgICAgICAgICAgICAgICAge2NyZWF0ZUxpbmtzKHJvdXRlc0RhdGEpfVxuICAgICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQk9UVE9NOiBhcHAgbG9nbyArIGNvcHlyaWdodCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9fYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgeyFVdGlscy5pc051bGwoYXBwTG9nb1BhdGgpID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGViYXJfX2FwcC1sb2dvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZEF2YXRhciBwbGFpbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXBwTG9nb1BhdGh9IGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmRBdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lkZWJhcl9fY29weXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIMKpIHtuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICApO1xufVxuXG5Gb2xkaW5nVGFiU2lkZWJhci5wcm9wVHlwZXMgPSB7XG4gICAgYWN0aXZlQ29sb3I6IFByb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnYmx1ZScsICdncmVlbicsICdvcmFuZ2UnLCAncmVkJywgJ2FnaWxpdHknXSksXG4gICAgc2Vjb25kYXJ5VGhlbWVDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHJ0bEFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcm91dGVzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBsb2dvOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgIGlubmVyTGluazogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgaW1nU3JjOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICAgICAgfSksXG4gICAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBvdXR0ZXJMaW5rOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBpbWdTcmM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgICAgICB9KVxuICAgIF0pLFxuICAgIGhlYWRpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXBwTG9nb1BhdGg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2xvc2VTaWRlYmFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXNoYm9hcmRMYXVuY2hlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9nb1N0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAgIG9uT3BlbkRyYXdlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaG9tZUJ1dHRvblNldHRpbmdzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudF0pLFxuICAgICAgICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb2xkaW5nVGFiU2lkZWJhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBWCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVcsS0FBQSxHQUFBWixzQkFBQSxD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