@agilemotion/oui-react-js 2.0.27 → 2.0.28

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.
@@ -7,6 +7,7 @@ exports.default = exports.VIDEO_ENCODINGS = exports.VIDEO_CONSTRAINTS = exports.
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  require("./VCRoomParticipant.css");
9
9
  var _Utils = _interopRequireDefault(require("../../Utils"));
10
+ var _AuthImage = require("../../AuthImage");
10
11
  var _VCEventType = require("./VCEventType");
11
12
  var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
12
13
  var _VCRoomRecorder = _interopRequireDefault(require("./VCRoomRecorder"));
@@ -18,7 +19,6 @@ var _iconsMaterial = require("@mui/icons-material");
18
19
  var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
19
20
  var _material = require("@mui/material");
20
21
  var _SocketManager = _interopRequireDefault(require("../SocketManager"));
21
- var _Button = _interopRequireDefault(require("@mui/material/Button"));
22
22
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
23
23
  var _audioLevelMeter = require("./audioLevelMeter");
24
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -56,7 +56,6 @@ const VIDEO_ENCODINGS = exports.VIDEO_ENCODINGS = [{
56
56
  maxBitrate: 450000,
57
57
  scalabilityMode: 'S1T3'
58
58
  }];
59
- const location = window.location.protocol + '//' + window.location.hostname;
60
59
  const VCRoomParticipant = props => {
61
60
  const [handRaised, setHandRaised] = _react.default.useState(false);
62
61
  const [videoMuted, setVideoMuted] = _react.default.useState(props.videoMuted);
@@ -92,7 +91,9 @@ const VCRoomParticipant = props => {
92
91
  } = props;
93
92
  const [anchorEl, setAnchorEl] = (0, _react.useState)(null);
94
93
  const openMoreActions = Boolean(anchorEl);
95
- const [downloadUrl, setDownloadUrl] = (0, _react.useState)(null);
94
+ const avatarId = props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null' ? props.data.avatarId : null;
95
+ // Avatar image fetched with header auth (object URL) — no tokens in the URL.
96
+ const downloadUrl = (0, _AuthImage.useDocumentObjectUrl)(avatarId);
96
97
  const handler = () => {
97
98
  return {
98
99
  get id() {
@@ -197,11 +198,6 @@ const VCRoomParticipant = props => {
197
198
  }
198
199
  }
199
200
  };
200
- (0, _react.useEffect)(() => {
201
- if (props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null') {
202
- setDownloadUrl(location + _ApplicationManager.default.getContextRoot() + '/docs/api/v1/manager/download/' + props.data.avatarId + '?access_token=' + sessionStorage.getItem('accessToken') + '&idToken=' + sessionStorage.getItem('idToken'));
203
- }
204
- }, [props.data]);
205
201
  (0, _react.useEffect)(() => {
206
202
  // Remote tiles reflect the peer's reported state. The CURRENT user's icon is NOT
207
203
  // synced from props — it is driven only by the actual producer (mute shows once the
@@ -859,4 +855,4 @@ const VCRoomParticipant = props => {
859
855
  })));
860
856
  };
861
857
  var _default = exports.default = VCRoomParticipant;
862
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImlzUnRwQ29sbGlzaW9uRXJyb3IiLCJTWVNURU1fQUxFUlQiLCJtZXNzYWdlIiwiUkVKT0lOX0FMRVJUX01FU1NBR0UiLCJnZXRTdGF0cyIsImdldFRyYWNrcyIsInNldFRpbWVvdXQiLCJjYWxsYmFjayIsInByb2R1Y2VySWQiLCJjbG9zZSIsInN0b3BWaWRlb1RyYWNrIiwic3RvcEF1ZGlvVHJhY2siLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50IiwiUFJPRFVDRVJfQ0xPU0VEIiwicm9vbUlkIiwiY2F0Y2giLCJsb2FkaW5nIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjcmVlblNoYXJpbmciLCJjb25zdW1lIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJ0cmFuc3BvcnQiLCJnZXRSZWN2VHJhbnNwb3J0IiwiRXJyb3IiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsImZpbmQiLCJwIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciwge2lzUnRwQ29sbGlzaW9uRXJyb3IsIFJFSk9JTl9BTEVSVF9NRVNTQUdFfSBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtJyArIHByb3BzLmRhdGEudXNlcklkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2UoYmUucGF5bG9hZCA/IGJlLnBheWxvYWQgOiBiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXJzLmhhcyhiZS5wYXlsb2FkLmNvbnN1bWVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoYmUucGF5bG9hZC5jb25zdW1lcklkLCBiZS5wYXlsb2FkLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fTEVWRUw6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmUucGF5bG9hZCAmJiBiZS5wYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb3VuZExldmVsKGJlLnBheWxvYWQubGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja0RldmljZXNJY29uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGFuZ2VBdWRpb0RldmljZSA9IChkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShkZXZpY2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZXZlbnRIYW5kbGVyLmFwaSA9IGhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gdmlkZW9TdHJlYW0uY3VycmVudDtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb1JlZi5jdXJyZW50XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgIGlmIChzb3VuZExldmVsID4gMykge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPSAxMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50LS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9PT0gMCB8fCBhdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VuZExldmVsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgc2V0U291bmRMZXZlbCgwKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VEZXZpY2VNZW51ID0gKCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChudWxsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgaWNvbiBtdXN0IHJlZmxlY3QgdGhlIEFDVFVBTCBwcm9kdWNlciwgbm90IHRoZSByZXF1ZXN0ZWQgc3RhdGU6XG4gICAgICAgICAgICAgICAgLy8gLSBtdXRlOiBmbGlwIHRoZSBpY29uIG9ubHkgb25jZSBzdG9wUHJvZHVjaW5nIGNvbmZpcm1zIHRoZSBwcm9kdWNlciBpc1xuICAgICAgICAgICAgICAgIC8vICAgY2xvc2VkIGFuZCB0aGUgdHJhY2sgc3RvcHBlZCAoaXRzIHN1Y2Nlc3MgY2FsbGJhY2spIOKAlCBzbyB3ZSBuZXZlciBzaG93XG4gICAgICAgICAgICAgICAgLy8gICBcIm11dGVkXCIgd2hpbGUgYXVkaW8gaXMgc3RpbGwgZ29pbmcgb3V0LlxuICAgICAgICAgICAgICAgIC8vIC0gdW5tdXRlOiBwcm9kdWNlKCkgZmxpcHMgdGhlIGljb24gb2ZmIG9ubHkgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIGNyZWF0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHNldEF1ZGlvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycsICgpID0+IHNldFZpZGVvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKHBheWxvYWQuYXVkaW9NdXRlZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gUmVtb3RlIHRpbGVzIHJlZmxlY3QgdGhlIHBlZXIncyByZXBvcnRlZCBzdGF0ZS4gVGhlIENVUlJFTlQgdXNlcidzIGljb24gaXMgTk9UXG4gICAgICAgIC8vIHN5bmNlZCBmcm9tIHByb3BzIOKAlCBpdCBpcyBkcml2ZW4gb25seSBieSB0aGUgYWN0dWFsIHByb2R1Y2VyIChtdXRlIHNob3dzIG9uY2UgdGhlXG4gICAgICAgIC8vIHByb2R1Y2VyIGlzIGNvbmZpcm1lZCBzdG9wcGVkOyB1bm11dGUgb25jZSBwcm9kdWNlKCkgc3VjY2VlZHMpLCBzbyB0aGUgaWNvbiBjYW5cbiAgICAgICAgLy8gbmV2ZXIgY2xhaW0gXCJtdXRlZFwiIHdoaWxlIGF1ZGlvIGlzIHN0aWxsIGJlaW5nIHByb2R1Y2VkLlxuICAgICAgICBpZiAoIXByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZpZGVvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgLy8gQSAocmUpYXNzaWduZWQgdHJhbnNwb3J0IG1lYW5zIGV4aXN0aW5nIHByb2R1Y2VycyBsaXZlZCBvbiB0aGUgb2xkXG4gICAgICAgICAgICAvLyAobm93LWNsb3NlZCkgdHJhbnNwb3J0LiBUZWFyIHRoZW0gZG93biBwcm9wZXJseSDigJQgY2xvc2UgKyBzdG9wIHRoZVxuICAgICAgICAgICAgLy8gbG9jYWwgdHJhY2tzICsgbm90aWZ5IHRoZSBzZXJ2ZXIg4oCUIHNvIHByb2R1Y2UoKSByZWNyZWF0ZXMgdGhlbSBvbiB0aGVcbiAgICAgICAgICAgIC8vIG5ldyB0cmFuc3BvcnQgaW5zdGVhZCBvZiBlYXJseS1yZXR1cm5pbmcuIE5vLW9wIG9uIGZpcnN0IG1vdW50LlxuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByb3BzLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfSwgW3Byb3BzLnByb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgcHJvcHMub25BdWRpb0RldmljZUNoYW5nZShzZWxlY3RlZEF1ZGlvRGV2aWNlKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZEF1ZGlvRGV2aWNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBPbmNlIHRoZSBEZXZpY2UgaXMgcmVhZHksIGNvbnN1bWUgdGhlIHByb2R1Y2VycyB3ZSBhbHJlYWR5IGtub3cgYWJvdXRcbiAgICAgICAgLy8gYW5kIHJlcGxheSBhbnkgdGhhdCBhcnJpdmVkIGJlZm9yZSB3ZSB3ZXJlIHJlYWR5LiBSZWN2IHRyYW5zcG9ydHNcbiAgICAgICAgLy8gdGhlbXNlbHZlcyBhcmUgY3JlYXRlZCBqdXN0LWluLXRpbWUgaW5zaWRlIGNvbnN1bWUoKSAocGVyIGtpbmQpLCBzbyB0aGVcbiAgICAgICAgLy8gdHJpZ2dlciBoZXJlIGlzIHRoZSBEZXZpY2UsIG5vdCBhIHRyYW5zcG9ydC5cbiAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0RFVklDRSBSRUFEWSBXSVRIIFBST0RVQ0VSUyA6ICcsIHByb3BzLmRhdGEucHJvZHVjZXJzKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kYXRhLnByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKHByb3BzLmRhdGEucHJvZHVjZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9LCBbZGV2aWNlXSk7XG5cbiAgICBjb25zdCBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQoYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5kZXZpY2UsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZURldmljZXNDaGFuZ2VkID0gKGRldmljZXMpID0+IHtcbiAgICAgICAgbGV0IGF1ZGlvRGV2aWNlTGlzdCA9IFtdO1xuICAgICAgICBkZXZpY2VzLmZvckVhY2goKGRldmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCdhdWRpb2lucHV0JyA9PT0gZGV2aWNlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0RldmljZUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBkZXZpY2UuZGV2aWNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0QXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlTGlzdCk7XG5cbiAgICAgICAgaWYgKGF1ZGlvRGV2aWNlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGF1ZGlvRGV2aWNlTGlzdFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIuYWRkU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIsIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUkFJU0VfSEFORCwgVkNFdmVudFR5cGUuTE9XRVJfSEFORCwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuQVVESU9fTEVWRUwpO1xuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09REVTVFJPWUlORyBQQVJUSUNJUEFOVD09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGdsb2JhbCBkZXZpY2VjaGFuZ2UgaGFuZGxlciB0aGlzIGNvbXBvbmVudCBpbnN0YWxsZWQg4oCUXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHN1cnZpdmVzIHVubW91bnQgYW5kIGZpcmVzIGludG8gc3RhbGUgY29tcG9uZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGNvbnN1bWVycykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGtleSwgJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0b3AgZXZlcnkgYXVkaW8tbGV2ZWwgbWV0ZXIgKHNlbGYgbWljICsgYWxsIGNvbnN1bWVkIHN0cmVhbXMpLlxuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZm9yRWFjaCgoc3RvcCkgPT4gc3RvcCgpKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICAvLyBNZXRlciBhIHN0cmVhbSBhbmQgYnJvYWRjYXN0IGl0cyBsZXZlbCB1bmRlciBgdXNlcklkYC4gS2V5ZWQgc28gd2UgY2FuXG4gICAgLy8gc3RvcC9yZXBsYWNlIGl0IHdoZW4gdGhlIGNvbnN1bWVyIGNsb3NlcyBvciB0aGUgcHJvZHVjZXIgcmVzdGFydHMuXG4gICAgY29uc3Qgc3RhcnRNZXRlciA9IChrZXksIHN0cmVhbSwgdXNlcklkKSA9PiB7XG4gICAgICAgIHN0b3BNZXRlcihrZXkpO1xuICAgICAgICBjb25zdCBzdG9wID0gc3RhcnRBdWRpb0xldmVsTWV0ZXIoc3RyZWFtLCAobGV2ZWwpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCwge3BheWxvYWQ6IHt1c2VySWQsIGxldmVsfX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWV0ZXJzLmN1cnJlbnQuc2V0KGtleSwgc3RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3BNZXRlciA9IChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG1ldGVycy5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcHJvZHVjZSA9IGFzeW5jICh0eXBlKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRldmljZS5jYW5Qcm9kdWNlKCd2aWRlbycpICYmIHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHZpZGVvJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGVjdGVkQXVkaW9EZXZpY2UgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXVkaW8gZGV2aWNlIHNlbGVjdGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhQ29uc3RyYWludHM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRldmljZUlkOiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSBWSURFT19DT05TVFJBSU5UUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1lZGlhQ29uc3RyYWludHMpO1xuICAgICAgICBjb25zdCB0cmFjayA9IHR5cGUgPT09ICdhdWRpbycgPyBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSA6IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB0cmFja1xuICAgICAgICB9O1xuXG4gICAgICAgIGF1ZGlvUmVmLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAvLyBNZXRlciB0aGUgbG9jYWwgbWljIHNvIHRoZSBzZWxmIHRpbGUgaGlnaGxpZ2h0cyB3aGVuIHlvdSBzcGVhay5cbiAgICAgICAgICAgIHN0YXJ0TWV0ZXIoJ3NlbGYtYXVkaW8nLCBzdHJlYW0sIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuaXNIb3N0ICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuYWRkVHJhY2socHJvcHMuZGF0YS51c2VySWQsIHRyYWNrKTtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldEF1ZGlvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lbmNvZGluZ3MgPSBWSURFT19FTkNPRElOR1M7XG4gICAgICAgICAgICBwYXJhbXMuY29kZWNPcHRpb25zID0gVklERU9fQ09ERUNfT1BUSU9OUztcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvZHVjZXIgPSBhd2FpdCBwcm9kdWNlclRyYW5zcG9ydC5wcm9kdWNlKHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUganVzdC1jYXB0dXJlZCB0cmFjayBzbyB0aGUgbWljL2NhbSBpc24ndCBsZWZ0IGxpdmUgYWZ0ZXIgYSBmYWlsZWQgcHJvZHVjZS5cbiAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIEEgZmF0YWwgUlRQLWV4dGVuc2lvbiBjb2xsaXNpb24gb24gY3JlYXRlT2ZmZXIgY2FuJ3QgYmUgcmVjb3ZlcmVkIGluLXBsYWNlO1xuICAgICAgICAgICAgLy8gYXNrIHRoZSB1c2VyIHRvIHJlam9pbi4gVGhlIGljb24gaXMgTk9UIGZsaXBwZWQgdG8gdW5tdXRlZCAocHJvZHVjZSBmYWlsZWQpLlxuICAgICAgICAgICAgaWYgKGlzUnRwQ29sbGlzaW9uRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuU1lTVEVNX0FMRVJULCB7cGF5bG9hZDoge21lc3NhZ2U6IFJFSk9JTl9BTEVSVF9NRVNTQUdFfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICAvLyBQcm9kdWNpbmcgaXMgY29uZmlybWVkIOKAlCBub3cgKGFuZCBvbmx5IG5vdykgY2xlYXIgdGhlIG11dGVkIGljb24gZm9yIHRoaXMga2luZC5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghcHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHByb2R1Y2VyIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgLy8gTm90aGluZyBpcyBiZWluZyBwcm9kdWNlZCwgc28gdGhlIHN0b3AgaXMgdHJpdmlhbGx5IHNhdGlzZmllZCDigJQgbGV0IHRoZVxuICAgICAgICAgICAgLy8gY2FsbGVyIChlLmcuIHRoZSBtdXRlIHRvZ2dsZSkgdHJlYXQgdGhpcyBhcyBhIGNvbmZpcm1lZCBcInN0b3BwZWRcIi5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmKHByb2R1Y2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgUkVDRUlWRUQgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkocHJvZHVjZXJzKSArIFwiIF0gPT09PT09PVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZUNvbnN1bWVyID0gKGNvbnN1bWVySWQsIGtpbmQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAvLyBTdG9wIGFueSBhY3RpdmUtc3BlYWtlciBtZXRlciBhdHRhY2hlZCB0byB0aGlzIGNvbnN1bWVyJ3Mgc3RyZWFtLlxuICAgICAgICBzdG9wTWV0ZXIoY29uc3VtZXJJZCk7XG4gICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU3RyZWFtLmN1cnJlbnQuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29uc3VtZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50ICYmIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh1c2VySWQgJiYgbWVkaWFSZWNvcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLnJlbW92ZVRyYWNrKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50QnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmRhdGEudXNlcklkICsgJy1hdWRpby1lbC1jb250YWluZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEJ5SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEJ5SWQucmVtb3ZlQ2hpbGQoYXVkaW9FbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdW1lcnMuZGVsZXRlKGNvbnN1bWVySWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdGQUlMRUQgVE8gQ09OU1VNRSAnICsga2luZCArICcgRlJPTSAnICsgdXNlcklkKTtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG5cbiAgICAgICAgaWYgKHJldHJpZXMgPCAxMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVRSWUlORyBbJyArIHJldHJpZXMgKyAnXScpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVubW91bnRlZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMpO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ09NUExFVEVMWSBGQUlMRUQgVE8gQ09OU1VNRSAnICsga2luZCArICcgRlJPTSAnICsgdXNlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnN1bWUgPSBhc3luYyAocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzID0gMCkgPT4ge1xuICAgICAgICAvLyBHZXQgKGFuZCBsYXppbHkgY3JlYXRlKSB0aGUgcmVjdiB0cmFuc3BvcnQgZm9yIHRoaXMga2luZC4gYXVkaW8gYW5kXG4gICAgICAgIC8vIHZpZGVvIHJpZGUgc2VwYXJhdGUgdHJhbnNwb3J0cywgc28gYSBjbG9zZWQgY29uc3VtZXIncyBtLXNlY3Rpb24gaXNcbiAgICAgICAgLy8gbmV2ZXIgcmVjeWNsZWQgYWNyb3NzIGtpbmRzIOKAlCB3aGljaCBpcyB3aGF0IHRyaWdnZXJlZCB0aGUgUlRQXG4gICAgICAgIC8vIGV4dGVuc2lvbi1pZCBjb2xsaXNpb24uXG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IHByb3BzLmdldFJlY3ZUcmFuc3BvcnQoa2luZCk7XG4gICAgICAgIGlmICghdHJhbnNwb3J0KSB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3JlY3YgdHJhbnNwb3J0IHVuYXZhaWxhYmxlIGZvciAnICsga2luZCksIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1lZGlhU291cEhlbHBlci5nZXRDb25zdW1lU3RyZWFtKHByb2R1Y2VySWQsIGRldmljZS5ydHBDYXBhYmlsaXRpZXMsIHRyYW5zcG9ydCwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsIGtpbmQpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcnMuc2V0KGNvbnN1bWVyLmlkLCBjb25zdW1lcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q09OU1VNRT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsga2luZCArICcgRk9SIDogJyArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWaWRlb011dGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWaWRlb1JlZnJlc2hlcighdmlkZW9SZWZyZXNoZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2soc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuaWQgPSBjb25zdW1lci5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnBsYXlzaW5saW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5hdXRvcGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kQ2hpbGQoYXVkaW9FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZXRlciB0aGlzIHBhcnRpY2lwYW50J3MgYXVkaW8gZm9yIGFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNZXRlcihjb25zdW1lci5pZCwgc3RyZWFtLCB1c2VySWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0hvc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuYWRkVHJhY2sodXNlcklkLCBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja2VuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGtpbmQgKyBcIiBDT05TVU1FUiBUUkFDSyBFTkRFRCBGT1IgXCIgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihjb25zdW1lci5pZCwga2luZCwgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3VhcmQ6IHRoZSBwYXJ0aWNpcGFudCBtYXkgaGF2ZSBsZWZ0LCBzbyBmaW5kKCkgY2FuIGJlIHVuZGVmaW5lZCDigJRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyAudmlkZW9NdXRlZC8uYXVkaW9NdXRlZCBvbiBpdCB0aHJldy4gTm8gcGFydGljaXBhbnQg4oaSIG5vIHJldHJ5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFja0VuZGVkUGFydGljaXBhbnQgPSBwYXJ0aWNpcGFudHMuZmluZCgocCkgPT4gcC51c2VySWQgPT09IHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFja0VuZGVkUGFydGljaXBhbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoa2luZCA9PT0gJ3ZpZGVvJyAmJiAhdHJhY2tFbmRlZFBhcnRpY2lwYW50LnZpZGVvTXV0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGtpbmQgPT09ICdhdWRpbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC5hdWRpb011dGVkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigndHJhY2tlbmRlZCB3aGlsZSAnICsga2luZCArICcgaXMgTk9UIG11dGVkJyksIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydGNsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGtpbmQgKyBcIiBDT05TVU1FUiBDTE9TRUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UGFydGljaXBhbnROYW1lID0gKCkgPT4ge1xuICAgICAgICBsZXQgbmFtZSA9IHByb3BzLmRhdGEubmFtZTtcblxuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHByb3BzLmRhdGEudXNlcklkKSkge1xuICAgICAgICAgICAgbmFtZSA9IGAke25hbWV9IChHdWVzdClgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Akeydjb2wtKi0qICcgKyAocHJvcHMuaXNDdXJyZW50VXNlciA/ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lci1jdXJyZW50LXVzZXInIDogJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnBhZGRpbmcgPyBwcm9wcy5wYWRkaW5nIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0ID8gcHJvcHMuaGVpZ2h0IDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJvcHMuaXNDdXJyZW50VXNlciA/ICcjMWYyOTM3JyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IHByb3BzLmlzQ3VycmVudFVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcycHggc29saWQgJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzFhM2M1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZlLXNwZWFrZXIgaGlnaGxpZ2h0OiBhbiBpbnNldCByaW5nICh0aGUgdGlsZSBjbGlwc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3csIHNvIGFuIG91dHNldCBzaGFkb3cgd291bGQgYmUgY3V0IG9mZikuXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICghYXVkaW9NdXRlZCAmJiBzb3VuZExldmVsID4gU1BFQUtJTkdfTEVWRUwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnaW5zZXQgMCAwIDAgM3B4ICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMyMmM1NWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JveC1zaGFkb3cgMTIwbXMgZWFzZS1vdXQnXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NlbnRlcmVkLWZsZXgtYm94J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnOHB4JyA6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhci13cmFwcGVyLXNtJyA6ICdhdmF0YXItd3JhcHBlcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMCAwIDAgJyArICgzICsgc291bmRMZXZlbCAvIDEyKSArICdweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMDA0NzZhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JveC1zaGFkb3cgOTBtcyBsaW5lYXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMzYTQ2NTQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ21kJyA/ICdhdmF0YXIgYXZhdGFyLW1kJyA6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXIgYXZhdGFyLXNtJyA6ICdhdmF0YXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcyMHB4JyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRVcmwgPyA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2Rvd25sb2FkVXJsfSlgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gOiBVdGlscy5nZXRJbml0aWFscyhwcm9wcy5kYXRhLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17cHJvcHMuZGF0YS51c2VySWQgKyAnLXZpZGVvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXs2NDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezMyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17dmlkZW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcHJvcHMuaXNDdXJyZW50VXNlciA/ICdzY2FsZVgoLTEpJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpID8gJ25vbmUnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKldlIG5lZWQgdGhpcyBlbGVtZW50IHRvIGNhcHR1cmUgcmVjb3JkaW5nIHNvdW5kKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNIb3N0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdWRpb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy1hdWRpbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e2F1ZGlvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnbmFtZS1sYWJlbC1zbScgOiAnbmFtZS1sYWJlbCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzZweCcgOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzRweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzcwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMXB4IDhweCcgOiAnMnB4IDEwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMTFweCcgOiAnMTNweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFwcm9wcy5pc0N1cnJlbnRVc2VyICYmIGdldFBhcnRpY2lwYW50TmFtZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmlzQ3VycmVudFVzZXIgJiYgJ1lvdSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJywgZ2FwOiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNIb3N0ICYmICFhdWRpb011dGVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0QXVkaW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpZD17J01JQyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYXVkaW9NdXRlZCA/ICdpbmxpbmUtZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcycHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpZD17J01JQ19PRkYnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNIb3N0ICYmICF2aWRlb011dGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdFZpZGVvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpZD17J0NBTUVSQSd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPVwiTXkgZGV2aWNlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tEZXZpY2VzSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e29wZW5Nb3JlQWN0aW9ucyA/ICdkZXZpY2UtbWVudScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVuTW9yZUFjdGlvbnMgPyAndHJ1ZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpZD17J1NFVFRJTkdTJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2hhbmRSYWlzZWQgJiYgPFBhblRvb2wgZm9udFNpemU9eydzbWFsbCd9IHN0eWxlPXt7Y29sb3I6ICcjZTJiMDMwJ319Lz59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD17J21lZXRpbmctYXVkaW8tZWwtY29udGFpbmVyJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgICAgIGFuY2hvckVsPXthbmNob3JFbH1cbiAgICAgICAgICAgICAgICBpZD1cImRldmljZXMtbWVudVwiXG4gICAgICAgICAgICAgICAgb3Blbj17b3Blbk1vcmVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgUGFwZXJQcm9wcz17e1xuICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiAnZHJvcC1zaGFkb3coMHB4IDJweCA4cHggcmdiYSgwLDAsMCwwLjMyKSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXQ6IDEuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlMaXN0LXJvb3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMWUxZTEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpQXZhdGFyLXJvb3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWw6IC0wLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyY6YmVmb3JlJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMTQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDQ1ZGVnKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6IDEzNlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb0RldmljZXMubWFwKChkZXZpY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNoYW5nZUF1ZGlvRGV2aWNlKGRldmljZSl9IGtleT17aW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7Y29sb3I6IHNlbGVjdGVkQXVkaW9EZXZpY2UgJiYgc2VsZWN0ZWRBdWRpb0RldmljZS5pZCA9PT0gZGV2aWNlLmlkID8gJyMxOTg3NTQnIDogbnVsbH19PlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L01lbnU+XG4gICAgICAgIDwvPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWQ1Jvb21QYXJ0aWNpcGFudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxlQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxlQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBUCx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsY0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsUUFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksU0FBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsY0FBQSxHQUFBWCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWMsT0FBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsbUJBQUEsR0FBQWIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFnQixnQkFBQSxHQUFBaEIsT0FBQTtBQUF1RCxTQUFBRSx1QkFBQWUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFsQix3QkFBQWtCLENBQUEsRUFBQUcsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFB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LEVBQUUsRUFBRSxHQUFHO1FBQ1AsaUJBQWlCLEVBQUU7VUFDZjVDLE1BQU0sRUFBRSxtQkFBbUI7VUFDM0JKLFlBQVksRUFBRTtRQUNsQixDQUFDO1FBQ0QsbUJBQW1CLEVBQUU7VUFDakJoTixLQUFLLEVBQUUsRUFBRTtVQUNURyxNQUFNLEVBQUUsRUFBRTtVQUNWOFAsRUFBRSxFQUFFLENBQUMsR0FBRztVQUNSQyxFQUFFLEVBQUU7UUFDUixDQUFDO1FBQ0QsVUFBVSxFQUFFO1VBQ1JDLE9BQU8sRUFBRSxJQUFJO1VBQ2I1QixPQUFPLEVBQUUsT0FBTztVQUNoQnhCLFFBQVEsRUFBRSxVQUFVO1VBQ3BCcUQsR0FBRyxFQUFFLENBQUM7VUFDTkMsS0FBSyxFQUFFLEVBQUU7VUFDVHJRLEtBQUssRUFBRSxFQUFFO1VBQ1RHLE1BQU0sRUFBRSxFQUFFO1VBQ1ZtUSxPQUFPLEVBQUUsU0FBUztVQUNsQmpDLFNBQVMsRUFBRSxnQ0FBZ0M7VUFDM0NDLE1BQU0sRUFBRTtRQUNaO01BQ0o7SUFDSixDQUFFO0lBQ0ZpQyxlQUFlLEVBQUU7TUFDYkMsVUFBVSxFQUFFLEVBQUU7TUFDZEMsUUFBUSxFQUFFO0lBQ2QsQ0FBRTtJQUNGQyxZQUFZLEVBQUU7TUFDVkYsVUFBVSxFQUFFLE9BQU87TUFDbkJDLFFBQVEsRUFBRTtJQUNkO0VBQUUsR0FHRTVPLFlBQVksQ0FBQzhPLEdBQUcsQ0FBQyxDQUFDNU4sTUFBTSxFQUFFNk4sS0FBSyxLQUFLO0lBQ2hDLG9CQUFPelQsTUFBQSxDQUFBcUIsT0FBQSxDQUFBeU4sYUFBQSxDQUFDaE8sU0FBQSxDQUFBNFMsUUFBUTtNQUFDekIsT0FBTyxFQUFFQSxDQUFBLEtBQU1sSyxpQkFBaUIsQ0FBQ25DLE1BQU0sQ0FBRTtNQUFDZ0YsR0FBRyxFQUFFNkk7SUFBTSxnQkFFOUR6VCxNQUFBLENBQUFxQixPQUFBLENBQUF5TixhQUFBO01BQ0lZLEtBQUssRUFBRTtRQUFDYSxLQUFLLEVBQUUzTCxtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUMwQixFQUFFLEtBQUtWLE1BQU0sQ0FBQ1UsRUFBRSxHQUFHLFNBQVMsR0FBRztNQUFJO0lBQUUsR0FFN0dWLE1BQU0sQ0FBQ3NFLEtBRVAsQ0FFWSxDQUFDO0VBQ2YsQ0FBQyxDQUVILENBQ1IsQ0FBQztBQUVYLENBQUM7QUFBQyxJQUFBeUosUUFBQSxHQUFBblIsT0FBQSxDQUFBbkIsT0FBQSxHQUVhb0MsaUJBQWlCIiwiaWdub3JlTGlzdCI6W119
858
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0F1dGhJbWFnZSIsIl9WQ0V2ZW50VHlwZSIsIl9WQ0V2ZW50TWFuYWdlciIsIl9WQ1Jvb21SZWNvcmRlciIsIl9NZWRpYVNvdXBIZWxwZXIiLCJfVHJhY2tzIiwiX0ljb25CdXR0b24iLCJfSWNvbiIsIl9pY29uc01hdGVyaWFsIiwiX1Rvb2x0aXAiLCJfbWF0ZXJpYWwiLCJfU29ja2V0TWFuYWdlciIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImF2YXRhcklkIiwiZGF0YSIsIlV0aWxzIiwiaXNOdWxsIiwiZG93bmxvYWRVcmwiLCJ1c2VEb2N1bWVudE9iamVjdFVybCIsImhhbmRsZXIiLCJpZCIsInVzZXJJZCIsIm9uIiwiZXZlbnRUeXBlIiwiYmUiLCJWQ0V2ZW50VHlwZSIsIkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEIiwib25BVlNldHRpbmdzQ2hhbmdlIiwicGF5bG9hZCIsIlJBSVNFX0hBTkQiLCJvblJhaXNlSGFuZCIsIkxPV0VSX0hBTkQiLCJvbkxvd2VySGFuZCIsIk5FV19QUk9EVUNFUlMiLCJvbk5ld1Byb2R1Y2VycyIsIkNPTlNVTUVSX0NMT1NFRCIsImNvbnN1bWVySWQiLCJyZW1vdmVDb25zdW1lciIsImtpbmQiLCJBVURJT19MRVZFTCIsImxldmVsIiwiaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiIsImV2ZW50IiwiY3VycmVudFRhcmdldCIsImNoYW5nZUF1ZGlvRGV2aWNlIiwidXNlRWZmZWN0IiwiYXBpIiwiY3VycmVudCIsInNyY09iamVjdCIsInNvdW5kTW9uaXRvciIsImluVmlldyIsImhhbmRsZUNsb3NlRGV2aWNlTWVudSIsImlzQ3VycmVudFVzZXIiLCJzdG9wUHJvZHVjaW5nIiwicHJvZHVjZSIsIm9uQXVkaW9EZXZpY2VDaGFuZ2UiLCJjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCIsImNvbnNvbGUiLCJsb2ciLCJzcGxpY2UiLCJsZW5ndGgiLCJtZWRpYVNvdXBIZWxwZXIiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJtZWV0aW5nSWQiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJnZXRVc2VyRGV0YWlscyIsInVzZXJuYW1lIiwiaGFuZGxlRGV2aWNlc0NoYW5nZWQiLCJkZXZpY2VzIiwiYXVkaW9EZXZpY2VMaXN0IiwiZm9yRWFjaCIsInB1c2giLCJkZXZpY2VJZCIsImxhYmVsIiwidmNFdmVudE1hbmFnZXIiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiYWRkU3Vic2NyaXB0aW9ucyIsIm5hdmlnYXRvciIsIm1lZGlhRGV2aWNlcyIsIm9uZGV2aWNlY2hhbmdlIiwiZW51bWVyYXRlRGV2aWNlcyIsInRoZW4iLCJjb25zdW1lRmFpbGVkUHJvZHVjZXJzIiwia2V5IiwidmFsdWUiLCJzdG9wIiwiY2xlYXIiLCJzdGFydE1ldGVyIiwic3RyZWFtIiwic3RvcE1ldGVyIiwic3RhcnRBdWRpb0xldmVsTWV0ZXIiLCJmaXJlRXZlbnQiLCJkZWxldGUiLCJ0eXBlIiwiZXJyb3IiLCJjYW5Qcm9kdWNlIiwibWVkaWFDb25zdHJhaW50cyIsImdldFVzZXJNZWRpYSIsInRyYWNrIiwiZ2V0QXVkaW9UcmFja3MiLCJnZXRWaWRlb1RyYWNrcyIsInBhcmFtcyIsImlzSG9zdCIsIm1lZGlhUmVjb3JkZXIiLCJhZGRUcmFjayIsInNldEF1ZGlvVHJhY2siLCJlbmNvZGluZ3MiLCJjb2RlY09wdGlvbnMiLCJzZXRWaWRlb1RyYWNrIiwicHJvZHVjZXIiLCJpc1J0cENvbGxpc2lvbkVycm9yIiwiU1lTVEVNX0FMRVJUIiwibWVzc2FnZSIsIlJFSk9JTl9BTEVSVF9NRVNTQUdFIiwiZ2V0U3RhdHMiLCJnZXRUcmFja3MiLCJzZXRUaW1lb3V0IiwiY2FsbGJhY2siLCJwcm9kdWNlcklkIiwiY2xvc2UiLCJzdG9wVmlkZW9UcmFjayIsInN0b3BBdWRpb1RyYWNrIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlBST0RVQ0VSX0NMT1NFRCIsInJvb21JZCIsImNhdGNoIiwibG9hZGluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY3JlZW5TaGFyaW5nIiwiY29uc3VtZSIsImF1ZGlvRWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVUcmFjayIsImVsZW1lbnRCeUlkIiwicmVtb3ZlQ2hpbGQiLCJyZXRyeUNvbnN1bWUiLCJyZXRyaWVzIiwidHJhbnNwb3J0IiwiZ2V0UmVjdlRyYW5zcG9ydCIsIkVycm9yIiwiZ2V0Q29uc3VtZVN0cmVhbSIsInJ0cENhcGFiaWxpdGllcyIsIl9yZWYiLCJjb25zdW1lciIsImNyZWF0ZUVsZW1lbnQiLCJwbGF5c2lubGluZSIsImF1dG9wbGF5IiwiYXBwZW5kQ2hpbGQiLCJ0cmFja0VuZGVkUGFydGljaXBhbnQiLCJmaW5kIiwicCIsImdldFBhcnRpY2lwYW50TmFtZSIsIm5hbWUiLCJjb25jYXQiLCJGcmFnbWVudCIsImNsYXNzTmFtZSIsInN0eWxlIiwicGFkZGluZyIsInBvc2l0aW9uIiwiYm9yZGVyUmFkaXVzIiwib3ZlcmZsb3ciLCJib3hTaXppbmciLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXIiLCJnZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvciIsImJveFNoYWRvdyIsInRyYW5zaXRpb24iLCJtYXJnaW5Cb3R0b20iLCJzaXppbmciLCJjb2xvciIsImZvbnRTaXplIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0SW5pdGlhbHMiLCJhdXRvUGxheSIsInJlZiIsIm11dGVkIiwib2JqZWN0Rml0IiwidHJhbnNmb3JtIiwiekluZGV4IiwiZGlzcGxheSIsImxlZnQiLCJib3R0b20iLCJhbGlnbkl0ZW1zIiwiZ2FwIiwibWF4V2lkdGgiLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIndoaXRlU3BhY2UiLCJ0ZXh0T3ZlcmZsb3ciLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJqdXN0aWZ5Q29udGVudCIsIm9uQ2xpY2siLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJ0aXRsZSIsIlBhblRvb2wiLCJNZW51Iiwib3BlbiIsIm9uQ2xvc2UiLCJQYXBlclByb3BzIiwiZWxldmF0aW9uIiwic3giLCJmaWx0ZXIiLCJtdCIsIm1sIiwibXIiLCJjb250ZW50IiwidG9wIiwicmlnaHQiLCJiZ2NvbG9yIiwidHJhbnNmb3JtT3JpZ2luIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiYW5jaG9yT3JpZ2luIiwibWFwIiwiaW5kZXgiLCJNZW51SXRlbSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21lZGlhL1ZDUm9vbVBhcnRpY2lwYW50LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL1ZDUm9vbVBhcnRpY2lwYW50LmNzcyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0IHt1c2VEb2N1bWVudE9iamVjdFVybH0gZnJvbSAnLi4vLi4vQXV0aEltYWdlJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhUmVjb3JkZXIgZnJvbSAnLi9WQ1Jvb21SZWNvcmRlcic7XG5pbXBvcnQgbWVkaWFTb3VwSGVscGVyLCB7aXNSdHBDb2xsaXNpb25FcnJvciwgUkVKT0lOX0FMRVJUX01FU1NBR0V9IGZyb20gJy4vTWVkaWFTb3VwSGVscGVyJztcbmltcG9ydCBUcmFja3MgZnJvbSAnLi9UcmFja3MnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJy4uL0ljb24nO1xuaW1wb3J0IHtQYW5Ub29sfSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVG9vbHRpcCc7XG5pbXBvcnQge01lbnUsIE1lbnVJdGVtfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBhdmF0YXJJZCA9IChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ251bGwnKVxuICAgICAgICA/IHByb3BzLmRhdGEuYXZhdGFySWQgOiBudWxsO1xuICAgIC8vIEF2YXRhciBpbWFnZSBmZXRjaGVkIHdpdGggaGVhZGVyIGF1dGggKG9iamVjdCBVUkwpIOKAlCBubyB0b2tlbnMgaW4gdGhlIFVSTC5cbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHVzZURvY3VtZW50T2JqZWN0VXJsKGF2YXRhcklkKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtZWV0aW5nLXBhcnRpY2lwYW50LScgKyBwcm9wcy5kYXRhLnVzZXJJZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogKGV2ZW50VHlwZSwgYmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKGJlLnBheWxvYWQgPyBiZS5wYXlsb2FkIDogYmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuUkFJU0VfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmFpc2VIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTE9XRVJfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTG93ZXJIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVycy5oYXMoYmUucGF5bG9hZC5jb25zdW1lcklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGJlLnBheWxvYWQuY29uc3VtZXJJZCwgYmUucGF5bG9hZC5raW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlLnBheWxvYWQgJiYgYmUucGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U291bmRMZXZlbChiZS5wYXlsb2FkLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hhbmdlQXVkaW9EZXZpY2UgPSAoZGV2aWNlKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoZGV2aWNlKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25SYWlzZUhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQodHJ1ZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTG93ZXJIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKGZhbHNlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCAmJiB2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHZpZGVvU3RyZWFtLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9LCBbdmlkZW9SZWYuY3VycmVudF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICBpZiAoc291bmRMZXZlbCA+IDMpIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID0gMTA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPT09IDAgfHwgYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbc291bmRMZXZlbF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoMCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2F1ZGlvTXV0ZWRdKTtcblxuICAgIGNvbnN0IGhhbmRsZUNsb3NlRGV2aWNlTWVudSA9ICgpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwobnVsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQVZTZXR0aW5nc0NoYW5nZSA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGljb24gbXVzdCByZWZsZWN0IHRoZSBBQ1RVQUwgcHJvZHVjZXIsIG5vdCB0aGUgcmVxdWVzdGVkIHN0YXRlOlxuICAgICAgICAgICAgICAgIC8vIC0gbXV0ZTogZmxpcCB0aGUgaWNvbiBvbmx5IG9uY2Ugc3RvcFByb2R1Y2luZyBjb25maXJtcyB0aGUgcHJvZHVjZXIgaXNcbiAgICAgICAgICAgICAgICAvLyAgIGNsb3NlZCBhbmQgdGhlIHRyYWNrIHN0b3BwZWQgKGl0cyBzdWNjZXNzIGNhbGxiYWNrKSDigJQgc28gd2UgbmV2ZXIgc2hvd1xuICAgICAgICAgICAgICAgIC8vICAgXCJtdXRlZFwiIHdoaWxlIGF1ZGlvIGlzIHN0aWxsIGdvaW5nIG91dC5cbiAgICAgICAgICAgICAgICAvLyAtIHVubXV0ZTogcHJvZHVjZSgpIGZsaXBzIHRoZSBpY29uIG9mZiBvbmx5IGFmdGVyIHRoZSBwcm9kdWNlciBpcyBjcmVhdGVkLlxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiBzZXRBdWRpb011dGVkKHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nLCAoKSA9PiBzZXRWaWRlb011dGVkKHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChwYXlsb2FkLmF1ZGlvTXV0ZWQpO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQocGF5bG9hZC52aWRlb011dGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBSZW1vdGUgdGlsZXMgcmVmbGVjdCB0aGUgcGVlcidzIHJlcG9ydGVkIHN0YXRlLiBUaGUgQ1VSUkVOVCB1c2VyJ3MgaWNvbiBpcyBOT1RcbiAgICAgICAgLy8gc3luY2VkIGZyb20gcHJvcHMg4oCUIGl0IGlzIGRyaXZlbiBvbmx5IGJ5IHRoZSBhY3R1YWwgcHJvZHVjZXIgKG11dGUgc2hvd3Mgb25jZSB0aGVcbiAgICAgICAgLy8gcHJvZHVjZXIgaXMgY29uZmlybWVkIHN0b3BwZWQ7IHVubXV0ZSBvbmNlIHByb2R1Y2UoKSBzdWNjZWVkcyksIHNvIHRoZSBpY29uIGNhblxuICAgICAgICAvLyBuZXZlciBjbGFpbSBcIm11dGVkXCIgd2hpbGUgYXVkaW8gaXMgc3RpbGwgYmVpbmcgcHJvZHVjZWQuXG4gICAgICAgIGlmICghcHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChwcm9wcy5hdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5hdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMudmlkZW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAvLyBBIChyZSlhc3NpZ25lZCB0cmFuc3BvcnQgbWVhbnMgZXhpc3RpbmcgcHJvZHVjZXJzIGxpdmVkIG9uIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIChub3ctY2xvc2VkKSB0cmFuc3BvcnQuIFRlYXIgdGhlbSBkb3duIHByb3Blcmx5IOKAlCBjbG9zZSArIHN0b3AgdGhlXG4gICAgICAgICAgICAvLyBsb2NhbCB0cmFja3MgKyBub3RpZnkgdGhlIHNlcnZlciDigJQgc28gcHJvZHVjZSgpIHJlY3JlYXRlcyB0aGVtIG9uIHRoZVxuICAgICAgICAgICAgLy8gbmV3IHRyYW5zcG9ydCBpbnN0ZWFkIG9mIGVhcmx5LXJldHVybmluZy4gTm8tb3Agb24gZmlyc3QgbW91bnQuXG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcblxuICAgICAgICAgICAgaWYgKCFwcm9wcy52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJvcHMuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICB9LCBbcHJvcHMucHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlKHNlbGVjdGVkQXVkaW9EZXZpY2UpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NlbGVjdGVkQXVkaW9EZXZpY2VdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9uY2UgdGhlIERldmljZSBpcyByZWFkeSwgY29uc3VtZSB0aGUgcHJvZHVjZXJzIHdlIGFscmVhZHkga25vdyBhYm91dFxuICAgICAgICAvLyBhbmQgcmVwbGF5IGFueSB0aGF0IGFycml2ZWQgYmVmb3JlIHdlIHdlcmUgcmVhZHkuIFJlY3YgdHJhbnNwb3J0c1xuICAgICAgICAvLyB0aGVtc2VsdmVzIGFyZSBjcmVhdGVkIGp1c3QtaW4tdGltZSBpbnNpZGUgY29uc3VtZSgpIChwZXIga2luZCksIHNvIHRoZVxuICAgICAgICAvLyB0cmlnZ2VyIGhlcmUgaXMgdGhlIERldmljZSwgbm90IGEgdHJhbnNwb3J0LlxuICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnREVWSUNFIFJFQURZIFdJVEggUFJPRFVDRVJTIDogJywgcHJvcHMuZGF0YS5wcm9kdWNlcnMpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmRhdGEucHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMocHJvcHMuZGF0YS5wcm9kdWNlcnMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH0sIFtkZXZpY2VdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLmRldmljZSwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGV2aWNlc0NoYW5nZWQgPSAoZGV2aWNlcykgPT4ge1xuICAgICAgICBsZXQgYXVkaW9EZXZpY2VMaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2F1ZGlvaW5wdXQnID09PSBkZXZpY2Uua2luZCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBdWRpb0RldmljZXMoYXVkaW9EZXZpY2VMaXN0KTtcblxuICAgICAgICBpZiAoYXVkaW9EZXZpY2VMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoYXVkaW9EZXZpY2VMaXN0WzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5ELCBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5ELCBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTLCBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCk7XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT1ERVNUUk9ZSU5HIFBBUlRJQ0lQQU5UPT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgZ2xvYmFsIGRldmljZWNoYW5nZSBoYW5kbGVyIHRoaXMgY29tcG9uZW50IGluc3RhbGxlZCDigJRcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgaXQgc3Vydml2ZXMgdW5tb3VudCBhbmQgZmlyZXMgaW50byBzdGFsZSBjb21wb25lbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgY29uc3VtZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoa2V5LCAndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RvcCBldmVyeSBhdWRpby1sZXZlbCBtZXRlciAoc2VsZiBtaWMgKyBhbGwgY29uc3VtZWQgc3RyZWFtcykuXG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5mb3JFYWNoKChzdG9wKSA9PiBzdG9wKCkpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuY2xlYXIoKTtcblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIC8vIE1ldGVyIGEgc3RyZWFtIGFuZCBicm9hZGNhc3QgaXRzIGxldmVsIHVuZGVyIGB1c2VySWRgLiBLZXllZCBzbyB3ZSBjYW5cbiAgICAvLyBzdG9wL3JlcGxhY2UgaXQgd2hlbiB0aGUgY29uc3VtZXIgY2xvc2VzIG9yIHRoZSBwcm9kdWNlciByZXN0YXJ0cy5cbiAgICBjb25zdCBzdGFydE1ldGVyID0gKGtleSwgc3RyZWFtLCB1c2VySWQpID0+IHtcbiAgICAgICAgc3RvcE1ldGVyKGtleSk7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBzdGFydEF1ZGlvTGV2ZWxNZXRlcihzdHJlYW0sIChsZXZlbCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMLCB7cGF5bG9hZDoge3VzZXJJZCwgbGV2ZWx9fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlcnMuY3VycmVudC5zZXQoa2V5LCBzdG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcE1ldGVyID0gKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzdG9wID0gbWV0ZXJzLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlID0gYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF2YWlsYWJsZSBkZXZpY2UnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykgJiYgdHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHByb2R1Y2UgdmlkZW8nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VsZWN0ZWRBdWRpb0RldmljZSAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdWRpbyBkZXZpY2Ugc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFDb25zdHJhaW50cztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IFZJREVPX0NPTlNUUkFJTlRTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cyk7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdHlwZSA9PT0gJ2F1ZGlvJyA/IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdIDogc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHRyYWNrXG4gICAgICAgIH07XG5cbiAgICAgICAgYXVkaW9SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIC8vIE1ldGVyIHRoZSBsb2NhbCBtaWMgc28gdGhlIHNlbGYgdGlsZSBoaWdobGlnaHRzIHdoZW4geW91IHNwZWFrLlxuICAgICAgICAgICAgc3RhcnRNZXRlcignc2VsZi1hdWRpbycsIHN0cmVhbSwgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pc0hvc3QgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayhwcm9wcy5kYXRhLnVzZXJJZCwgdHJhY2spO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0QXVkaW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcGFyYW1zLmVuY29kaW5ncyA9IFZJREVPX0VOQ09ESU5HUztcbiAgICAgICAgICAgIHBhcmFtcy5jb2RlY09wdGlvbnMgPSBWSURFT19DT0RFQ19PUFRJT05TO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBqdXN0LWNhcHR1cmVkIHRyYWNrIHNvIHRoZSBtaWMvY2FtIGlzbid0IGxlZnQgbGl2ZSBhZnRlciBhIGZhaWxlZCBwcm9kdWNlLlxuICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgLy8gQSBmYXRhbCBSVFAtZXh0ZW5zaW9uIGNvbGxpc2lvbiBvbiBjcmVhdGVPZmZlciBjYW4ndCBiZSByZWNvdmVyZWQgaW4tcGxhY2U7XG4gICAgICAgICAgICAvLyBhc2sgdGhlIHVzZXIgdG8gcmVqb2luLiBUaGUgaWNvbiBpcyBOT1QgZmxpcHBlZCB0byB1bm11dGVkIChwcm9kdWNlIGZhaWxlZCkuXG4gICAgICAgICAgICBpZiAoaXNSdHBDb2xsaXNpb25FcnJvcihlKSkge1xuICAgICAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5TWVNURU1fQUxFUlQsIHtwYXlsb2FkOiB7bWVzc2FnZTogUkVKT0lOX0FMRVJUX01FU1NBR0V9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgICAgICAgIC8vIFByb2R1Y2luZyBpcyBjb25maXJtZWQg4oCUIG5vdyAoYW5kIG9ubHkgbm93KSBjbGVhciB0aGUgbXV0ZWQgaWNvbiBmb3IgdGhpcyBraW5kLlxuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9kdWNlclRyYW5zcG9ydC5nZXRTdGF0cygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IGNvbnNvbGUubG9nKGRhdGEpKTtcbiAgICAgICAgICAgIHByb2R1Y2Vycy5zZXQodHlwZSwgcHJvZHVjZXIpO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHZpZGVvU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhzdHJlYW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9kdWNlci5vbigndHJhbnNwb3J0Y2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHByb2R1Y2VyLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjb25zdW1lRmFpbGVkUHJvZHVjZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BQcm9kdWNpbmcgPSAodHlwZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlcmUgaXMgbm8gcHJvZHVjZXIgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICAvLyBOb3RoaW5nIGlzIGJlaW5nIHByb2R1Y2VkLCBzbyB0aGUgc3RvcCBpcyB0cml2aWFsbHkgc2F0aXNmaWVkIOKAlCBsZXQgdGhlXG4gICAgICAgICAgICAvLyBjYWxsZXIgKGUuZy4gdGhlIG11dGUgdG9nZ2xlKSB0cmVhdCB0aGlzIGFzIGEgY29uZmlybWVkIFwic3RvcHBlZFwiLlxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcklkID0gcHJvZHVjZXJzLmdldCh0eXBlKS5pZDtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nsb3NlIHByb2R1Y2VyJywgcHJvZHVjZXJJZCk7XG5cbiAgICAgICAgcHJvZHVjZXJzLmdldCh0eXBlKVxuICAgICAgICAgICAgLmNsb3NlKCk7XG4gICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wVmlkZW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnN0b3BBdWRpb1RyYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnQ0xPU0lORyBQUk9EVUNFUiBPRiBJRCA6ICcgKyBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IHByb3BzLmRhdGEudXNlcklkLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogcHJvcHMubWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ1BST0RVQ0VSX0NMT1NFRCBFUlJPUiA6ICcsIGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25OZXdQcm9kdWNlcnMgPSAocHJvZHVjZXJzLCBsb2FkaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYocHJvZHVjZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiBwcm9kdWNlcnMpIHtcbiAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjZXIudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjZXIua2luZCA9PT0gJ3ZpZGVvJyAmJiAhcHJvZHVjZXIuc2NyZWVuU2hhcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NBTExJTkcgQ09OU1VNRSBGUk9NIE9OIE5FVyBQUk9EVUNFUlMgRk9SIDogJyArIHByb3BzLmRhdGEudXNlcklkICsgJyAtICcgKyBwcm9kdWNlci5wcm9kdWNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyIHx8IGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNtYWxsIHBhcnRpY2lwYW50IGJveCBhdCB0aGUgYm90dG9tIGJlbG9uZ2luZyB0byB0aGUgY3VycmVudCB1c2VyIG11c3QgY29uc3VtZSBhbGwgYXVkaW9cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvIGRpc3R1cmIgdGhlIGF1ZGlvIGR1ZSB0byBhbnkgcmVuZGVyaW5nIHN1Y2ggYXMgQnJpbmcgdG8gdmlld1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjZXIua2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlci5wcm9kdWNlcklkLCBwcm9kdWNlci5raW5kLCBsb2FkaW5nLCBwcm9kdWNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQucHVzaChwcm9kdWNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCI9PT09PT0gUFJPRFVDRVJTIFRIQVQgQ09VTEQgTk9UIEJFIENPTlNVTUVTIDogWyBcIiArIEpTT04uc3RyaW5naWZ5KGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCkgKyBcIiBdID09PT09PT1cIik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQ29uc3VtZXIgPSAoY29uc3VtZXJJZCwga2luZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIC8vIFN0b3AgYW55IGFjdGl2ZS1zcGVha2VyIG1ldGVyIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIncyBzdHJlYW0uXG4gICAgICAgIHN0b3BNZXRlcihjb25zdW1lcklkKTtcbiAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdW1lcklkKTtcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQgJiYgYXVkaW9FbGVtZW50LnNyY09iamVjdCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAmJiBtZWRpYVJlY29yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVtb3ZlVHJhY2sodXNlcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvLWVsLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QnlJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50QnlJZC5yZW1vdmVDaGlsZChhdWRpb0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVycy5kZWxldGUoY29uc3VtZXJJZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAgICAgICBpZiAocmV0cmllcyA8IDEwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUkUtVFJZSU5HIFsnICsgcmV0cmllcyArICddJyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyk7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDT01QTEVURUxZIEZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMgPSAwKSA9PiB7XG4gICAgICAgIC8vIEdldCAoYW5kIGxhemlseSBjcmVhdGUpIHRoZSByZWN2IHRyYW5zcG9ydCBmb3IgdGhpcyBraW5kLiBhdWRpbyBhbmRcbiAgICAgICAgLy8gdmlkZW8gcmlkZSBzZXBhcmF0ZSB0cmFuc3BvcnRzLCBzbyBhIGNsb3NlZCBjb25zdW1lcidzIG0tc2VjdGlvbiBpc1xuICAgICAgICAvLyBuZXZlciByZWN5Y2xlZCBhY3Jvc3Mga2luZHMg4oCUIHdoaWNoIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBSVFBcbiAgICAgICAgLy8gZXh0ZW5zaW9uLWlkIGNvbGxpc2lvbi5cbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgcHJvcHMuZ2V0UmVjdlRyYW5zcG9ydChraW5kKTtcbiAgICAgICAgaWYgKCF0cmFuc3BvcnQpIHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigncmVjdiB0cmFuc3BvcnQgdW5hdmFpbGFibGUgZm9yICcgKyBraW5kKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgdHJhbnNwb3J0LCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSwga2luZClcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICBjb25zdW1lcixcbiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVycy5zZXQoY29uc3VtZXIuaWQsIGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1DT05TVU1FPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBraW5kICsgJyBGT1IgOiAnICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayhzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyIHx8IGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5pZCA9IGNvbnN1bWVyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQucGxheXNpbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZXRpbmctYXVkaW8tZWwtY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRDaGlsZChhdWRpb0VsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ldGVyIHRoaXMgcGFydGljaXBhbnQncyBhdWRpbyBmb3IgYWN0aXZlLXNwZWFrZXIgaGlnaGxpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1ldGVyKGNvbnN1bWVyLmlkLCBzdHJlYW0sIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzSG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayh1c2VySWQsIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrZW5kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIFRSQUNLIEVOREVEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHdWFyZDogdGhlIHBhcnRpY2lwYW50IG1heSBoYXZlIGxlZnQsIHNvIGZpbmQoKSBjYW4gYmUgdW5kZWZpbmVkIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIC52aWRlb011dGVkLy5hdWRpb011dGVkIG9uIGl0IHRocmV3LiBObyBwYXJ0aWNpcGFudCDihpIgbm8gcmV0cnkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrRW5kZWRQYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRW5kZWRQYXJ0aWNpcGFudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChraW5kID09PSAndmlkZW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQudmlkZW9NdXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoa2luZCA9PT0gJ2F1ZGlvJyAmJiAhdHJhY2tFbmRlZFBhcnRpY2lwYW50LmF1ZGlvTXV0ZWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCd0cmFja2VuZGVkIHdoaWxlICcgKyBraW5kICsgJyBpcyBOT1QgbXV0ZWQnKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Y2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIENMT1NFRCBGT1IgXCIgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihjb25zdW1lci5pZCwga2luZCwgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRQYXJ0aWNpcGFudE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0gcHJvcHMuZGF0YS5uYW1lO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuZGF0YS51c2VySWQpKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0gKEd1ZXN0KWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7J2NvbC0qLSogJyArIChwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyLWN1cnJlbnQtdXNlcicgOiAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXInKX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMucGFkZGluZyA/IHByb3BzLnBhZGRpbmcgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQgPyBwcm9wcy5oZWlnaHQgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJyMxZjI5MzcnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogcHJvcHMuaXNDdXJyZW50VXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzJweCBzb2xpZCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMWEzYzVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmUtc3BlYWtlciBoaWdobGlnaHQ6IGFuIGluc2V0IHJpbmcgKHRoZSB0aWxlIGNsaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdywgc28gYW4gb3V0c2V0IHNoYWRvdyB3b3VsZCBiZSBjdXQgb2ZmKS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogKCFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiBTUEVBS0lOR19MRVZFTClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdpbnNldCAwIDAgMCAzcHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzIyYzU1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAxMjBtcyBlYXNlLW91dCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc4cHgnIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyLXdyYXBwZXItc20nIDogJ2F2YXRhci13cmFwcGVyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAhYXVkaW9NdXRlZCAmJiBzb3VuZExldmVsID4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwIDAgMCAnICsgKDMgKyBzb3VuZExldmVsIC8gMTIpICsgJ3B4ICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMwMDQ3NmEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyA5MG1zIGxpbmVhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzNhNDY1NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnbWQnID8gJ2F2YXRhciBhdmF0YXItbWQnIDogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhciBhdmF0YXItc20nIDogJ2F2YXRhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzIwcHgnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCA/IDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7ZG93bmxvYWRVcmx9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA6IFV0aWxzLmdldEluaXRpYWxzKHByb3BzLmRhdGEubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezY0MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MzIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXt2aWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ3NjYWxlWCgtMSknIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qV2UgbmVlZCB0aGlzIGVsZW1lbnQgdG8gY2FwdHVyZSByZWNvcmRpbmcgc291bmQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17cHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17YXVkaW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICduYW1lLWxhYmVsLXNtJyA6ICduYW1lLWxhYmVsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnNnB4JyA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnNzAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxcHggOHB4JyA6ICcycHggMTBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxMXB4JyA6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLmlzQ3VycmVudFVzZXIgJiYgZ2V0UGFydGljaXBhbnROYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaXNDdXJyZW50VXNlciAmJiAnWW91J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luTGVmdDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLCBnYXA6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIWF1ZGlvTXV0ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RBdWRpb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhdWRpb011dGVkID8gJ2lubGluZS1mbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDX09GRid9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIXZpZGVvTXV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0VmlkZW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnQ0FNRVJBJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJNeSBkZXZpY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0RldmljZXNJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz17b3Blbk1vcmVBY3Rpb25zID8gJ2RldmljZS1tZW51JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW5Nb3JlQWN0aW9ucyA/ICd0cnVlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnU0VUVElOR1MnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFuZFJhaXNlZCAmJiA8UGFuVG9vbCBmb250U2l6ZT17J3NtYWxsJ30gc3R5bGU9e3tjb2xvcjogJyNlMmIwMzAnfX0vPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPXsnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgICAgICAgIGlkPVwiZGV2aWNlcy1tZW51XCJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9yZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwcHggMnB4IDhweCByZ2JhKDAsMCwwLDAuMzIpKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlBdmF0YXItcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbDogLTAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpiZWZvcmUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IDIwLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogMTM2XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlcy5tYXAoKGRldmljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2hhbmdlQXVkaW9EZXZpY2UoZGV2aWNlKX0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tjb2xvcjogc2VsZWN0ZWRBdWRpb0RldmljZSAmJiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkID09PSBkZXZpY2UuaWQgPyAnIzE5ODc1NCcgOiBudWxsfX0+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvTWVudT5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVBhcnRpY2lwYW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFN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