@sapui5/sap.fe.core 1.133.0 → 1.133.2

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.
@@ -889,13 +889,13 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
889
889
  const allRowContexts = mdcTable.getRowBinding().getContexts();
890
890
  allRowContexts.forEach(rowContext => {
891
891
  if (message.target?.includes(rowContext.getPath())) {
892
- const rowIdentifier = identifierColumn ? rowContext.getObject()[identifierColumn] : undefined;
892
+ const rowIdentifier = identifierColumn ? rowContext.getObject()[identifierColumn] : "";
893
893
  const columnNameSuffix = targetTableInfo.sTableTargetColName ? `, ${targetTableInfo.sTableTargetColName}` : "";
894
- message["additionalText"] = `${rowIdentifier}${columnNameSuffix}`;
894
+ message.setAdditionalText(`${rowIdentifier}${columnNameSuffix}`);
895
895
  }
896
896
  });
897
- } else {
898
- message["additionalText"] = `${targetTableInfo.sTableTargetColName}`;
897
+ } else if (targetTableInfo.sTableTargetColName) {
898
+ message.setAdditionalText(`${targetTableInfo.sTableTargetColName}`);
899
899
  }
900
900
  }
901
901
  function updateHeaderNameForMessageInOPTable(subsection, mdcTable, message, targetTableInfo) {
@@ -1600,4 +1600,4 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
1600
1600
  };
1601
1601
  return messageHandling;
1602
1602
  }, false);
1603
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwiYWRkQ3VzdG9tTWVzc2FnZXMiLCJjYWxsIiwidWlEZWNpc2lvbkludGVybWl0dGVudCIsImZpbHRlcnMiLCJnZXRGaWx0ZXJzRm9yTWVzc2FnZXMiLCJnZXRNZXNzYWdlc1RvU2hvdyIsInJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwIiwicHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUiLCJoYXNFdGFnTWVzc2FnZSIsIm1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyIsImdlbmVyaWNTdWNjZXNzTWVzc2FnZSIsImFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZSIsImdldFJlc291cmNlTW9kZWwiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInJlc291cmNlTW9kZWwiLCJzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciIsInNlbGVjdGlvbkNvbnRleHRzIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJib3VuZEFjdGlvbk5hbWUiLCJlbnRpdHlTZXROYW1lIiwiZW50aXR5U2V0IiwiaW5jbHVkZXMiLCJzcGxpdCIsInN1ZmZpeFJlc291cmNlS2V5IiwiTWVzc2FnZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJjb2RlIiwicmVmZXJlbmNlTXNnIiwiY2hlY2tGYWlsZWQiLCJtc2ciLCJpZHgiLCJnZXRNZXNzYWdlIiwiZ2V0QWRkaXRpb25hbFRleHQiLCJzaG93TWVzc2FnZXNJblVJIiwidWlEZWNpc2lvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3dNZXNzYWdlVG9hc3QiLCJzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wiLCJzaG93TWVzc2FnZUJveENvbnRyb2wiLCJGaWx0ZXIiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiTkUiLCJ2YWx1ZTEiLCJpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIiLCJ0ZXN0IiwiZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nIiwiYUNvbnRyb2xJZHMiLCJpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyIsInB1c2giLCJjYXNlU2Vuc2l0aXZlIiwiRVEiLCJnZXRUYXJnZXRzIiwiYW5kIiwiX3JlZiIsInJldE1lc3NhZ2VzIiwiZ2VuZXJpY01zZ3MiLCJub25HZW5lcmljTXNncyIsImZlIiwiZmVUZWNobmljYWxEZXRhaWxzIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwicHJlVGV4dCIsInRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2UiLCJzaW5nbGVFcnJvclByZVRleHQiLCJzaW5nbGVHZW5lcmljTWVzc2FnZUlkIiwiZ2V0SWQiLCJleGlzdGluZ1RlY2hEZXRhaWxzIiwic2V0VGVjaG5pY2FsRGV0YWlscyIsIm1lc3NhZ2VDb2RlIiwidGV4dCIsImdldFNvcnRlckZvck1lc3NhZ2VzIiwiU29ydGVyIiwib2JqMSIsIm9iajIiLCJyYW5rQSIsImdldE1lc3NhZ2VSYW5rIiwicmFua0IiLCJ0cmFuc2lzdGlvbk1lc3NhZ2VzIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsIm1lc3NhZ2VzIiwibWFwIiwiY3VycmVudENvbnRleHQiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsInVpRGVjaXNpb24iLCJydW5Ub1Rlc3QiLCJoaWdoZXN0UHJpb3JpdHkiLCJoaWdoZXN0UHJpb3JpdHlUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJzdHJpY3RIYW5kbGluZ0Zsb3ciLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJtZXNzYWdlT2JqZWN0Iiwic29ydGVyIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJEaWFsb2ciLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJlc2NhcGVIYW5kbGVyIiwiY29tcGxldGlvblByb21pc2UiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsIm1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJzdGFydFRhZyIsImNsb3NlVGFnIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsIm1lc3NhZ2VIZWFkZXIiLCJmb3JtYXR0ZWRUZXh0IiwiRm9ybWF0dGVkVGV4dCIsImh0bWxUZXh0IiwiTWFuYWdlZE9iamVjdCIsImVzY2FwZVNldHRpbmdzVmFsdWUiLCJzaG93TWVzc2FnZUJveFBlclR5cGUiLCJvbkNsb3NlIiwiY2xvc2VNZXNzYWdlQm94IiwiYmluZCIsIm1lc3NhZ2VTaG93biIsImNhbGxCYWNrIiwibWVzc2FnZXNUb1JlbW92ZSIsImFsbE1zZ3MiLCJnZXREYXRhIiwiZ2VuZXJpY01lc3NhZ2UiLCJmaW5kIiwiTWVzc2FnZUJveCIsImVycm9yIiwid2FybmluZyIsInN1Y2Nlc3MiLCJpbmZvcm1hdGlvbiIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwiZ2V0UGF0aCIsImdldFBlcnNpc3RlbnQiLCJhTW9kZWxEYXRhQXJyYXkiLCJzQWN0aW9uTmFtZSIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiaW5kZXhPZiIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJ1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZSIsIm1kY1RhYmxlIiwidGFyZ2V0VGFibGVJbmZvIiwiZ2V0Q29udGV4dHMiLCJjb2x1bW5OYW1lU3VmZml4IiwidXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUiLCJzdWJzZWN0aW9uIiwiaGVhZGVyTmFtZSIsImdldEhlYWRlclZpc2libGUiLCJ0YWJsZUhlYWRlciIsImdldFRpdGxlIiwic2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlIiwidmlld0NvbnRleHQiLCJncm91cE5hbWVJc0dlbmVyYWwiLCJzZXRTZWN0aW9uTmFtZUluR3JvdXAiLCJjaGlsZFRhYmxlRWxlbWVudCIsImZpbmRFbGVtZW50cyIsIm9FbGVtZW50IiwiZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSIsImZuQ2FsbGJhY2tTZXRHcm91cE5hbWUiLCJvVGFyZ2V0VGFibGVJbmZvIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwic0xhc3RBY3Rpb25UZXh0IiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJzSWQiLCJpc0NvbnRyb2xJblRhYmxlIiwib0NvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyIsInN1YlRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwidGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJ0YWJsZVJvd0NvbnRleHQiLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJ0YWJsZSIsImlzQ3JlYXRpb25Sb3ciLCJ0YXJnZXRlZENvbnRyb2wiLCJtZXNzYWdlU3VidGl0bGUiLCJyb3dTdWJ0aXRsZVZhbHVlIiwidGFibGVDb2xQcm9wZXJ0eSIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImlzSW5hY3RpdmUiLCJsYWJlbCIsInRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbiIsInRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoIiwidGFibGVDb2xUZXh0QXJyYW5nZW1lbnQiLCJnZXRWYWx1ZSIsImdldFRhYmxlQ29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwiYmluZGluZ0NvbnRleHQiLCJrZXkiLCJvTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJwb3AiLCJnZXRLZXlDb2x1bW5JbmZvIiwib0NvbEZyb21UYWJsZVNldHRpbmdzIiwiYXZhaWxhYmlsaXR5Iiwib1BhcmVudENvbnRyb2wiLCJzSGlnaGVzdFByaW9yaXR5IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsInN0YXJ0c1dpdGgiLCJvQ29udGV4dCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib01lc3NhZ2VPYmplY3QiLCJmbkZpbHRlclVwb25JZHMiLCJhIiwiYiIsIm9Db250ZXh0UGF0aCIsImZuUmVnRXhwZXNjYXBlIiwicyIsInJlcGxhY2UiLCJjb250ZXh0UGF0aFRvRXNjYXBlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJvQ3VzdG9tQ29sdW1uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0Q29sdW1uc0ZvciIsIm9Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJpbmNsdWRlVGFibGVHcm91cE5hbWUiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiLCJnZXRNZXNzYWdlc0ZvckNvbnRleHQiLCJjb250cm9sSWRzIiwiZXJyb3JGaWVsZENvbnRyb2wiLCJpbmRleCIsIkluZmluaXR5IiwiZXJyb3JDb250cm9sSWQiLCJjb250cm9sSWQiLCJmaWVsZFJhbmtpbkRpYWxvZyIsImZvY3VzIiwicmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImlzTWVzc2FnZVN0cmlwTWVzc2FnZSIsImlzU2luZ2xlVGFyZ2V0IiwiaXNUYXJnZXRNYXRjaGluZyIsImlzVHJhbnNpdGlvbk1lc3NhZ2UiLCJyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwiLCJjb250ZXh0cyIsInJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nIiwibWVzc2FnZXNUb0JlUmVtb3ZlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UsIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGRBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29sdW1uUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IE1MaWIgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL21lc3NhZ2UvTWVzc2FnZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiwgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcblxuY29uc3QgQnV0dG9uVHlwZSA9IE1MaWIuQnV0dG9uVHlwZTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogKChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpW10gPSBbXTtcbmxldCBkaWFsb2dDb250cm9sOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VXaXRoSGVhZGVyID0gTWVzc2FnZSAmIHtcblx0aGVhZGVyTmFtZT86IHN0cmluZztcblx0dGFyZ2V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dGFibGVIZWFkZXI/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbEluZm9BbmRTdWJ0aXRsZVR5cGUgPSB7XG5cdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdHN1YlRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQ29sdW1uSW5mb1R5cGUgPSB7XG5cdHNDb2x1bW5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzQ29sdW1uSW5kaWNhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBcIkRpYWxvZ1wiIHwgXCJCb3hcIiB8IFwiVG9hc3RcIiB8IFwiTm9uZVwiO1xuXG4vLyBGRSByZWxhdGVkIHRlY2huaWNhbCBpbmZvcm1hdGlvbiB0byBiZSBzdG9yZWQgd2l0aCB0aGUgbWVzc2FnZS5cbi8vIExpa2UsIHRoaXMgd291bGQgYmUgdXNlZCB0byBzdG9yZSBwcmUtdGV4dCB3aXRoIHRoZSBtZXNzYWdlIHdoZW4gaXQgaXMgdGhlIG9ubHkgbWVzc2FnZSB0byBiZSBzaG93biBpbiBVSS5cbnR5cGUgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG9iamVjdCAmIHtcblx0ZmU/OiB7XG5cdFx0Y2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yPzogc3RyaW5nO1xuXHRcdHNpbmdsZUVycm9yUHJlVGV4dD86IHN0cmluZztcblx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVVJRGVjaXNpb25zID0ge1xuXHR1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50O1xuXHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbjtcblx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g/OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBib29sZWFuLCBiVHJhbnNpdGlvbk9ubHk/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiBNZXNzYWdlW107XG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW47XG5cdGdldFVJRGVjaXNpb25zOiAoXG5cdFx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRzaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRcdGNvbnRyb2w/OiBDb250cm9sLFxuXHRcdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRcdHZpZXdUeXBlPzogc3RyaW5nLFxuXHRcdHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbixcblx0XHRtZXNzYWdlRGlhbG9nUGFyYW1ldGVyPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXJcblx0KSA9PiBNZXNzYWdlVUlEZWNpc2lvbnM7XG5cdHNob3dNZXNzYWdlc0luVUk6ICh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMpID0+IFByb21pc2U8dm9pZD47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiB0cnVlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKFxuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRcdGlzTXVsdGk0MTI/OiBib29sZWFuXG5cdCkgPT4ge1xuXHRcdG1lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblx0XHRvQmFja0J1dHRvbjogQnV0dG9uO1xuXHR9O1xuXHRzZXRNZXNzYWdlU3VidGl0bGU6IChvVGFibGU6IE1EQ1RhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHZvaWQ7XG5cdGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0OiAob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wpID0+IE9iamVjdFBhZ2VTZWN0aW9uW107XG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiAoc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gVUk1RWxlbWVudFtdO1xuXHRmbkZpbHRlclVwb25JZHM6IChhQ29udHJvbElkczogc3RyaW5nW10sIG9JdGVtOiBVSTVFbGVtZW50KSA9PiBib29sZWFuO1xuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZ1xuXHQpID0+IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWU6IChcblx0XHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0XHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0XHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0aW5jbHVkZVRhYmxlR3JvdXBOYW1lPzogYm9vbGVhblxuXHQpID0+IHN0cmluZztcblx0YklzT3JwaGFuRWxlbWVudDogKG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSkgPT4gYm9vbGVhbjtcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiAoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nO1xuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiAoXG5cdFx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXA6IGJvb2xlYW4sXG5cdFx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogRnVuY3Rpb25cblx0KSA9PiBDb2xJbmZvQW5kU3VidGl0bGVUeXBlO1xuXHRnZXRUYWJsZUNvbEluZm86IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmdcblx0KSA9PiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiAob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCkgPT4gc3RyaW5nO1xuXHRnZXRNZXNzYWdlU3VidGl0bGU6IChcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0b1RhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0YklzQ3JlYXRpb25Sb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b1RhcmdldGVkQ29udHJvbD86IENvbnRyb2xcblx0KSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiAob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCkgPT4gQ29sdW1uSW5mb1R5cGU7XG5cdGZldGNoQ29sdW1uSW5mbzogKG9NZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgb1RhYmxlOiBNRENUYWJsZSkgPT4gVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogKFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlQ29sUHJvcGVydHk6IFRhYmxlQ29sdW1uUHJvcGVydGllc1xuXHQpID0+IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXHRnZXRNZXNzYWdlUmFuazogKG9iajogTWVzc2FnZVdpdGhIZWFkZXIpID0+IG51bWJlcjtcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGU6IChhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldykgPT4gdm9pZDtcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogKFxuXHRcdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRcdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCkgPT4gdm9pZDtcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogKGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsIGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRpc0NvbnRyb2xJblRhYmxlOiAob1RhYmxlOiBNRENUYWJsZSwgc0NvbnRyb2xJZDogc3RyaW5nKSA9PiBVSTVFbGVtZW50W10gfCBib29sZWFuO1xuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogKG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcDogKHRyYW5zaWVudE1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpID0+IE1lc3NhZ2VbXTtcblx0Z2V0RmlsdGVyc0Zvck1lc3NhZ2VzOiAoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXM/OiBib29sZWFuKSA9PiBGaWx0ZXJbXTtcblx0c2hvd01lc3NhZ2VUb2FzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IFByb21pc2U8dm9pZD47XG5cdHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbDogKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMsIHJ1blRvVGVzdD86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZCB8IERpYWxvZz47XG5cdHNob3dNZXNzYWdlQm94Q29udHJvbDogKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMpID0+IFByb21pc2U8dm9pZD47XG5cdGdldE1lc3NhZ2VzRm9yQ29udGV4dDogKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiBNZXNzYWdlW107XG5cdGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKSA9PiBib29sZWFuO1xuXHRyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWw6IChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dD86IENvbnRleHRbXSkgPT4gdm9pZDtcblx0cmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IChNZXNzYWdlczogTWVzc2FnZVtdKSA9PiBNZXNzYWdlW107XG5cdHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dmlld0NvbnRleHQ6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGdyb3VwTmFtZUlzR2VuZXJhbDogYm9vbGVhbixcblx0XHRhY3Rpb25OYW1lPzogc3RyaW5nXG5cdCk6IGJvb2xlYW47XG5cdHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlOiBNRENUYWJsZSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHRhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSk6IHZvaWQ7XG5cdHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRcdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcblx0KTogdm9pZDtcblx0Y2xvc2VNZXNzYWdlQm94KG1lc3NhZ2VTaG93bjogTWVzc2FnZVdpdGhIZWFkZXIsIGNhbGxCYWNrOiAodmFsdWU6IHZvaWQpID0+IHZvaWQsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ6IHN0cmluZyk6IHZvaWQ7XG5cdHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQ6IChvQ29udGV4dDogQ29udGV4dCkgPT4gdm9pZDtcblx0Y2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXM6IChtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSkgPT4gYm9vbGVhbjtcblx0YWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlOiAoXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG5cdCkgPT4gTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKTogc3RyaW5nIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyaW5nKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10ge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNUZXh0YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvbmAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9tZXNzYWdlYCB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IGAke3NIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSl9JHtpbnNlcnREZXRhaWwob1Byb3BlcnR5KX0gKyBgO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuXHRyZXR1cm4gXCIoJHtcIiArIFwiZGVzY3JpcHRpb259ID8gKCR7XCIgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpIGFzIGtleW9mIHR5cGVvZiBvTWVzc2FnZUNvdW50XTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UsIGk6IG51bWJlcikge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscyAmJiAob01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRUYXJnZXRzKFtcIlwiXSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCk6IHZvaWQge1xuXHRkaWFsb2dDb250cm9sLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRjb25zdCBtc2dWaWV3ID0gZGlhbG9nQ29udHJvbC5nZXRDb250ZW50KClbMF0gYXMgTWVzc2FnZVZpZXc7XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBtc2dWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuLlxuICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGV4aXN0ZW5jZSBvZiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuIHtcblx0cmV0dXJuIFsuLi5nZXRNZXNzYWdlcyh1bmRlZmluZWQsIHRydWUpLCAuLi5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKV0uc29tZShmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhcblx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRtdWx0aTQxMj86IGJvb2xlYW5cbik6IHtcblx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRvQmFja0J1dHRvbjogQnV0dG9uO1xufSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0bWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlLFxuXHRcdFx0bGVuZ3RoOiA5OTk5XG5cdFx0fVxuXHR9KTtcblx0bWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0bWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlY2huaWNhbERldGFpbHMgPSBtZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdCh0ZWNobmljYWxEZXRhaWxzICYmXG5cdFx0XHQoKHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSB1bmRlZmluZWQgJiYgdGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IG51bGwpIHx8XG5cdFx0XHRcdCh0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRtZXNzYWdlLmdldENvZGUoKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHRyYW5zaXRpb24gbWVzc2FnZXMgZm9yIGNyZWF0aW5nIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gX2NvbnRleHQgQmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlLlxuICogQHJldHVybnMgVHJhbnNpdGlvbiBtZXNzYWdlcyByZWxldmFudCB0byBzaG93IGluIFVJLlxuICovXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uKHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsIHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIF9jb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IE1lc3NhZ2VbXSB7XG5cdGxldCB0cmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly9ib3VuZCBUcmFuc2lzdGlvbiBNZXNzYWdlc1xuXHRcdHRyYW5zaXRpb25NZXNzYWdlcyA9IHRyYW5zaXRpb25NZXNzYWdlcy5jb25jYXQodGhpcy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdH1cblx0cmV0dXJuIHRyYW5zaXRpb25NZXNzYWdlcztcbn1cblxuLyoqXG4gKiBFeGVjdXRlICdvbkJlZm9yZVNob3dNZXNzYWdlcycgY2FsbGJhY2sgdG8gbGV0IHRoZSBjYWxsZXIgaW5mbHVlbmNlIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUcmFuc2l0aW9uIG1lc3NhZ2VzLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2suXG4gKiBAcmV0dXJucyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgSW5mcm9tYXRpb24gdG8gY2hhbmdlIFVJIGRlY2lzaW9uIGJhc2VkIG9uIG9uQmVmb3JlU2hvd01lc3NhZ2VzIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uLlxuICovXG5mdW5jdGlvbiBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMoXG5cdHRyYW5zaXRpb25NZXNzYWdlczogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzXG4pOiB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW47XG59IHtcblx0bGV0IG1lc3NhZ2VzVG9TaG93ID0gWy4uLnRyYW5zaXRpb25NZXNzYWdlc107XG5cdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID1cblx0XHR0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIHRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgPyBcIkJveFwiIDogXCJEaWFsb2dcIjtcblx0bGV0IGZuR2V0TXNnU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRsZXQgc2hvd0JvdW5kTWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHQvLyBUaGUgY2FsbGJhY2sgb25CZWZvcmVTaG93TWVzc2FnZSBhbHRlcnMgdGhlIFVJRWxlbWVudCB0byB1c2UgaW4gYSBkaWZmZXJlbnQgZm9ybWF0KHNob3dNZXNzYWdlRGlhbG9nIGFuZCBzaG93TWVzc2FnZUJveCkuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZzogdWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIsXG5cdFx0XHRzaG93TWVzc2FnZUJveDogdWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCJcblx0XHR9O1xuXHRcdGNvbnN0IHtcblx0XHRcdHNob3dNZXNzYWdlQm94LFxuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2csXG5cdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzLFxuXHRcdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGUsXG5cdFx0XHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb25cblx0XHR9ID0gb25CZWZvcmVTaG93TWVzc2FnZSh0cmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0aWYgKHNob3dNZXNzYWdlQm94ID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRzaG93Qm91bmRNZXNzYWdlcyA9IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjtcblx0XHRmbkdldE1zZ1N1YnRpdGxlID0gZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyB8fCBjb250YWluc0JvdW5kVHJhbnNpc3Rpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGZpbHRlcmVkTWVzc2FnZXMgPz8gW107XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRtZXNzYWdlc1RvU2hvdyxcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZTogZm5HZXRNc2dTdWJ0aXRsZSxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kTWVzc2FnZXNcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgVUkgZGVjaXNpb25zIGZvciBzaG93aW5nIG1lc3NhZ2VzLlxuICpcbiAqIFRoZXNlIHNoYWxsIGNvbnRhaW4gdGhlIG1lc3NhZ2VzIHRvIHNob3cgYW5kIHRoZSBVSSBlbGVtZW50IHRvIHVzZS5cbiAqIEl0IHdvdWxkIGFsc28gaG9sZCBpbmZvcm1hdGlvbiBmb3IgYWZ0ZXIgcHJvY2VzcyBsaWtlLi5cbiAqIDEuIHJlZnJlc2ggY29udGV4dCBkdWUgdG8gZXRhZyBtaXNtYXRjaC5cbiAqIDIuIGRvIHdlIHNob3cgYm91bmQgbWVzc2FnZXMgYW5kIGhlbmNlIGNsZWFyIHRoZW0gYWZ0ZXIgd2Ugc2hvdyB0aGUgVUkgZWxlbWVudC5cbiAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkIHRvIG1lc3NhZ2UgbW9kZWwgYW5kIHNob3cuXG4gKiBAcGFyYW0gY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBjb25jdXJyZW50RWRpdEZsYWcgSXMgdGhpcyBhIGNvbmN1cnJlbnQgZWRpdCBzY2VuYXJpby5cbiAqIEBwYXJhbSBjb250cm9sIFNvdXJjZSBjb250cm9sLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgTmFtZSBvZiB0aGUgYWN0aW9uIHdob3NlIHByb2Nlc3MgcmVxdWVzdGVkIGZvciBtZXNzYWdlcyB0byBiZSBzaG93bi5cbiAqIEBwYXJhbSBvbkJlZm9yZVNob3dNZXNzYWdlIENhbGxiYWNrIHRvIGluZmx1ZW5jZSBVSSBkZWNpc2lvbiBiZWZvcmUgY3JlYXRpbmcgZmluYWwgVUkgZGVjaXNpb24uXG4gKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBzaG93U3RhdGVNZXNzYWdlcyBTaG91bGQgc3RhdGUgbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UsXG5cdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuKTogTWVzc2FnZVVJRGVjaXNpb25zIHtcblx0Ly8gQWRkIEN1c3RvbSBtZXNzYWdlc1xuXHQvLyBUT0RPOiBXaWxsIHRoZXNlIG1lc3NhZ2VzIGJlIHBhcnQgb2YgdHJhbnNpdGlvbk1lc3NhZ2VzP1xuXHRpZiAoY3VzdG9tTWVzc2FnZXMgJiYgY3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YWRkQ3VzdG9tTWVzc2FnZXMoY3VzdG9tTWVzc2FnZXMpO1xuXHR9XG5cblx0Ly8gR2V0IHRyYW5zaXN0aW9uIE1lc3NhZ2VzXG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24uY2FsbCh0aGlzLCBzaG93Qm91bmRUcmFuc2l0aW9uLCBjb250ZXh0KTtcblxuXHQvLyBVSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGlhbG9nXG5cdGNvbnN0IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQgPSBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMuY2FsbCh0aGlzLCB0cmFuc2l0aW9uTWVzc2FnZXMsIG9uQmVmb3JlU2hvd01lc3NhZ2UpO1xuXHRsZXQgeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiIH0gPSB1aURlY2lzaW9uSW50ZXJtaXR0ZW50O1xuXHQvLyBHZXQgRmlsdGVycyBmb3IgVW5ib3VuZCBNZXNzYWdlc1xuXHRzaG93Qm91bmRUcmFuc2l0aW9uID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5jb250YWluc0JvdW5kVHJhbnNpdGlvbiA/PyBzaG93Qm91bmRUcmFuc2l0aW9uO1xuXHRjb25zdCBmaWx0ZXJzID0gZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzKHNob3dCb3VuZFRyYW5zaXRpb24sIHNob3dTdGF0ZU1lc3NhZ2VzKTtcblx0bWVzc2FnZXNUb1Nob3cgPSBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzLCBtZXNzYWdlc1RvU2hvdyA/PyBbXSk7XG5cdC8vIGhhbmRsZSBjb250ZXh0IGJvdW5kIG1lc3NhZ2VzLCBJZiB0aGVyZSBpcyBhIHNpbmdsZSBtZXNzYWdlIG9mIHdoaWNoIGlzIGJvdW5kZWQgdG8gdGhlIGNvbnRleHQgdGhlbiByZW1vdmUgdGhhdCBmcm9tIHRoZSBkaWFsb2dcblx0bWVzc2FnZXNUb1Nob3cgPSByZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcChtZXNzYWdlc1RvU2hvdywgY29udGV4dCk7XG5cdCh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSkpO1xuXHQvLyBNb2RpZnkgRVRhZyBNZXNzYWdlc1xuXHRjb25zdCBoYXNFdGFnTWVzc2FnZSA9IHRoaXMubW9kaWZ5RVRhZ01lc3NhZ2VzT25seShMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIikge1xuXHRcdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAxICYmIGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KSkge1xuXHRcdFx0Y29uc3QgZ2VuZXJpY1N1Y2Nlc3NNZXNzYWdlID0gYWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlKGdldFJlc291cmNlTW9kZWwoY29udHJvbCBhcyBDb250cm9sKSwgbWVzc2FnZURpYWxvZ1BhcmFtZXRlcik7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGdlbmVyaWNTdWNjZXNzTWVzc2FnZSA/IFtnZW5lcmljU3VjY2Vzc01lc3NhZ2VdIDogW21lc3NhZ2VzVG9TaG93WzBdXTtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChoYXNFdGFnTWVzc2FnZSB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlVG9TaG93LmdldERlc2NyaXB0aW9uVXJsKCk/Lmxlbmd0aCkge1xuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBzaG93IHNpbmdsZSBtZXNzYWdlIGluIG1lc3NhZ2UgYm94IG9ubHkgd2hlbjpcblx0XHRcdFx0Ly8gMS4gSXQgaXMgbm90IGFuIEV0YWcgbWVzc2FnZS5cblx0XHRcdFx0Ly8gMi4gVGhlcmUgaXMgbm8gbWVzc2FnZSBkZXNjcmlwdGlvbiBvciBkZXNjcmlwdGlvbiB1cmwgYXZhaWxhYmxlIGZvciBsb25nIHRleHQuXG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUobWVzc2FnZXNUb1Nob3csIGNvbnRyb2wsIGFjdGlvbk5hbWUsIHZpZXdUeXBlKTtcblx0XHRjb25zdCBmbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKGZuR2V0TWVzc2FnZVN1YnRpdGxlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZShvTWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBoYXNFdGFnTWVzc2FnZSA/IGNvbnRleHQgOiB1bmRlZmluZWQsXG5cdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IHNob3dCb3VuZFRyYW5zaXRpb25cblx0fTtcbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqIEBwYXJhbSBzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciBTZWxlY3RlZCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIG1lc3NhZ2UgaXMgc2hvd24uXG4gKiBAcmV0dXJucyBNZXNzYWdlIHdpdGggZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZShcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0c2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuKTogTWVzc2FnZVdpdGhIZWFkZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZWxlY3Rpb25Db250ZXh0cyA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5hU2VsZWN0ZWRDb250ZXh0cztcblx0aWYgKHNlbGVjdGlvbkNvbnRleHRzICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uQ29udGV4dHMpICYmIHNlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGggPiAxICYmIHJlc291cmNlTW9kZWwpIHtcblx0XHRsZXQgYWN0aW9uTmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5ib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPy5lbnRpdHlTZXQ7XG5cdFx0YWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGFjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKVthY3Rpb25OYW1lPy5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBhY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHthY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIiwgW3NlbGVjdGlvbkNvbnRleHRzPy5sZW5ndGhdLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCJcblx0XHR9KTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpcyBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlc1RvU2hvdyBJbml0aWFsIG1lc3NhZ2VzIHRvIHNob3cuXG4gKiBAcmV0dXJucyBJZiBhbGwgYXJlIHNhbWUgc3VjY2VzcyBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10pOiBib29sZWFuIHtcblx0bGV0IHJlZmVyZW5jZU1zZzogTWVzc2FnZVdpdGhIZWFkZXI7XG5cdGNvbnN0IGNoZWNrRmFpbGVkID0gbWVzc2FnZXNUb1Nob3cuc29tZSgobXNnLCBpZHgpID0+IHtcblx0XHRpZiAobXNnLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2Vzcykge1xuXHRcdFx0Ly8gTm9uIHN1Y2Nlc3MgbWVzc2FnZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChpZHggPT09IDApIHtcblx0XHRcdC8vIDFzdCBNZXNzYWdlXG5cdFx0XHRyZWZlcmVuY2VNc2cgPSBtc2c7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRDb2RlKCkgPT09IG1zZy5nZXRDb2RlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRNZXNzYWdlKCkgPT09IG1zZy5nZXRNZXNzYWdlKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXREZXNjcmlwdGlvbigpID09PSBtc2cuZ2V0RGVzY3JpcHRpb24oKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uVXJsKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvblVybCgpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0QWRkaXRpb25hbFRleHQoKSA9PT0gbXNnLmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xuXG5cdHJldHVybiAhY2hlY2tGYWlsZWQ7XG59XG5cbi8qKlxuICogU2hvdyBtZXNzYWdlcyBpbiB0aGUgZGVjaWRlZCBVSSBFbGVtZW50LlxuICogQHBhcmFtIHVpRGVjaXNpb25zIFVJIERlY2lzaW9uIHRvIGJlIHVzZWQgdG8gc2hvdyB0aGUgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb3IgcmVqZWN0cyBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIFVJIGVsZW1lbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlc0luVUkodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9ID0gdWlEZWNpc2lvbnM7XG5cblx0Ly8gU2hvdyBEaWFsb2cgLyBNZXNzYWdlQm94IC8gTWVzc2FnZVRvYXN0XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiVG9hc3RcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlc1RvU2hvd1swXSk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIpIHtcblx0XHRhd2FpdCBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb25zKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0gZWxzZSBpZiAodWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IG1vZGVsIGZpbHRlcnMgZm9yIGdldHRpbmcgdGhlIHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gc2hvd1N0YXRlTWVzc2FnZXMgU2hvdWxkIHN0YXRlIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHJldHVybnMgTW9kZWwgZmlsdGVyc1xuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMoc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgc2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSk6IEZpbHRlcltdIHtcblx0Y29uc3QgZmlsdGVycyA9IHNob3dTdGF0ZU1lc3NhZ2VzID8gW10gOiBbbmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSldO1xuXHRjb25zdCBpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJcIiwgdGVzdDogaXNOb25UZWNobmljYWxNZXNzYWdlIH0pO1xuXG5cdGlmIChzaG93U3RhdGVNZXNzYWdlcyB8fCBzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly8gQWRkIHRoZSBmaWx0ZXIgZm9yIGJvdGggc3RhdGUgbWVzc2FnZXMgb3IgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coYUNvbnRyb2xJZHMpO1xuXHRcdH07XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uICYmICFzaG93U3RhdGVNZXNzYWdlcykge1xuXHRcdFx0Ly8gQWRkIGV4dHJhIGZpbHRlciBpZiBvbmx5IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXJlIHNob3duXG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT25seSB1bmJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93blxuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIlxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlclxuXHRcdFx0XHRdLFxuXHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7XG5cdG1lc3NhZ2VzVG9TaG93LFxuXHR1aUVsZW1lbnRUb1VzZVxufTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4pOiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPiB7XG5cdGxldCByZXRNZXNzYWdlcyA9IFsuLi5tZXNzYWdlc1RvU2hvd107XG5cdGlmIChtZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDIpIHtcblx0XHQvLyBUaGVyZSBhcmUgMiBtZXNzYWdlOlxuXHRcdC8vIDEuIEdlbmVyaWMgZXJyb3IgY2hhbmdlc2V0IG1lc3NhZ2UgYWRkZWQgYnkgRkUuXG5cdFx0Ly8gMi4gTWFpbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGludGVyYWN0aW9uLlxuXHRcdC8vIFdlIHJlbW92ZSB0aGUgZ2VuZXJpYyBtZXNzYWdlLCBzaG93IG9ubHkgYW4gZW5oYW5jZWQgJ01haW4gZXJyb3IgbWVzc2FnZScgd2l0aCBhIGdlbmVyaWMgbWVzc3NhZ2UgcHJlLXRleHQgaW4gdGhlIG1lc3NhZ2UgYm94LlxuXHRcdGNvbnN0IGdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRjb25zdCBub25HZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0bWVzc2FnZXNUb1Nob3cuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdFx0Z2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vbkdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGdlbmVyaWNNc2dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgeyBmZTogZmVUZWNobmljYWxEZXRhaWxzIH0gPSAoZ2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzO1xuXHRcdFx0aWYgKGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHByZVRleHQgPSBmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjtcblx0XHRcdFx0aWYgKHByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCB0ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlOiBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRcdFx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRcdFx0c2luZ2xlRXJyb3JQcmVUZXh0OiBwcmVUZXh0LFxuXHRcdFx0XHRcdFx0XHRzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBnZW5lcmljTXNnc1swXS5nZXRJZCgpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBleGlzdGluZ1RlY2hEZXRhaWxzID0gbm9uR2VuZXJpY01zZ3NbMF0uZ2V0VGVjaG5pY2FsRGV0YWlscygpID8/IHt9O1xuXHRcdFx0XHRcdC8vIGNvbWJpbmUgZXhpc3RpbmcgdGVjaG5pY2FsIGRldGFpbHMgaWYgYW55LCB3aXRoIHRoZSBjaGFuZ2Ugc2V0IGluZm9ybWF0aW9uIHdlIHdhbnQgdG8gYWRkLlxuXHRcdFx0XHRcdG5vbkdlbmVyaWNNc2dzWzBdLnNldFRlY2huaWNhbERldGFpbHMoeyAuLi5leGlzdGluZ1RlY2hEZXRhaWxzLCAuLi50ZWNoRGV0YWlsc0Zvck5vbkdlbmVyaWNNZXNzYWdlIH0pO1xuXHRcdFx0XHRcdHJldE1lc3NhZ2VzID0gbm9uR2VuZXJpY01zZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlc1RvU2hvdzogcmV0TWVzc2FnZXMsXG5cdFx0dWlFbGVtZW50VG9Vc2U6IHJldE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIgPyBcIkJveFwiIDogdWlFbGVtZW50VG9Vc2Vcblx0fTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGN1c3RvbSBtZXNzYWdlcyB0byBtZXNzYWdlIG1vZGVsLlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQuXG4gKi9cbmZ1bmN0aW9uIGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10pOiB2b2lkIHtcblx0Y3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IEN1c3RvbU1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdH0pXG5cdFx0KTtcblx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpOiBTb3J0ZXIge1xuXHRyZXR1cm4gbmV3IFNvcnRlcihcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgKG9iajE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvYmoyOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4ge1xuXHRcdGNvbnN0IHJhbmtBID0gZ2V0TWVzc2FnZVJhbmsob2JqMSk7XG5cdFx0Y29uc3QgcmFua0IgPSBnZXRNZXNzYWdlUmFuayhvYmoyKTtcblxuXHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1RvU2hvdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgdHJhbnNpc3Rpb25NZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVdpdGhIZWFkZXJbXSB7XG5cdGxldCBtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSA9IFsuLi50cmFuc2lzdGlvbk1lc3NhZ2VzXTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzKSxcblx0XHRjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0aWYgKGN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcblx0XHRjb25zdCBvVW5pcXVlT2JqOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdFx0bWVzc2FnZXNUb1Nob3cgPSBtZXNzYWdlcy5jb25jYXQobWVzc2FnZXNUb1Nob3cpLmZpbHRlcihmdW5jdGlvbiAob2JqOiBNZXNzYWdlKSB7XG5cdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmdldElkKCldICYmIChvVW5pcXVlT2JqW29iai5nZXRJZCgpXSA9IHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtZXNzYWdlc1RvU2hvdztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VUb2FzdChtZXNzYWdlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZSk7XG5cdFx0cmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucywgcnVuVG9UZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+IHtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eTtcblx0bGV0IGhpZ2hlc3RQcmlvcml0eVRleHQ7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHBhcmFtMTogdm9pZCB8IERpYWxvZykgPT4gdm9pZCkge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3csIGNvbnRleHROZWVkc0V0YWdSZWZyZXNoIH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwobWVzc2FnZXNUb1Nob3cpO1xuXHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCBzdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IHNvcnRlciA9IGdldFNvcnRlckZvck1lc3NhZ2VzKCk7XG5cdFx0KG1lc3NhZ2VPYmplY3QubWVzc2FnZVZpZXcuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIE9EYXRhTGlzdEJpbmRpbmcpLnNvcnQoc29ydGVyKTtcblxuXHRcdGlmICghZGlhbG9nQ29udHJvbCB8fCAhZGlhbG9nQ29udHJvbC5pc09wZW4oKSkge1xuXHRcdFx0ZGlhbG9nQ29udHJvbCA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKGNvbXBsZXRpb25Qcm9taXNlOiB7IHJlc29sdmU6IEZ1bmN0aW9uOyByZWplY3Q6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRcdFx0XHRjb21wbGV0aW9uUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUmVzb2x2ZUZ1bmN0aW9ucykge1xuXHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkaWFsb2dDb250cm9sLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRkaWFsb2dDb250cm9sLmFkZENvbnRlbnQobWVzc2FnZVZpZXcpO1xuXG5cdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2guaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0fVxuXHRcdGhpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShtZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRoaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0ZGlhbG9nQ29udHJvbC5zZXRTdGF0ZShoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdCgoZGlhbG9nQ29udHJvbC5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KGhpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdGRpYWxvZ0NvbnRyb2wub3BlbigpO1xuXHRcdGlmIChydW5Ub1Rlc3QpIHtcblx0XHRcdHJlc29sdmUoZGlhbG9nQ29udHJvbCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93IH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VUb1Nob3cgPSBtZXNzYWdlc1RvU2hvd1swXTtcblx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2VUb1Nob3cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHsgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCwgc2luZ2xlRXJyb3JQcmVUZXh0IH0gPSAobWVzc2FnZVRlY2huaWNhbERldGFpbHMgYXMgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk/LmZlID8/IHt9O1xuXHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2VUb1Nob3csIHRydWUpO1xuXHRcdC8vIElmIGl0IGlzIGEgcmV0cnkgbWVzc2FnZSwgdGhlbiBpdCBuZWVkcyB0byBoYXZlIHRlY2huaWNhbCBkZXRhaWxzIHRvIHNob3cgaXQuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VCb3ggPSByZXRyeUFmdGVyTWVzc2FnZSA/IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIDogdHJ1ZTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRcdGNvbnN0IHN0YXJ0VGFnID0gXCI8aHRtbD48Ym9keT48c3BhbiBzdHlsZT0nd2hpdGUtc3BhY2U6cHJlLXdyYXAnPlwiLFxuXHRcdFx0XHRjbG9zZVRhZyA9IFwiPC9zcGFuPjwvYm9keT48L2h0bWw+XCI7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IHN0YXJ0VGFnO1xuXG5cdFx0XHQvLyBBZGRpbmcgcHJlLXRleHQgZm9yIHRoZSBtZXNzYWdlc1xuXHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfTxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPjwvYnI+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChzaW5nbGVFcnJvclByZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGVhZGVyID0gKG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdXG5cdFx0XHRcdFx0XHQ/IGAkeyhtZXNzYWdlVG9TaG93IGFzIE1lc3NhZ2VXaXRoSGVhZGVyKT8uW1wiaGVhZGVyTmFtZVwiXX06YFxuXHRcdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nfSR7c2luZ2xlRXJyb3JQcmVUZXh0fTxici8+PGJyLz4ke21lc3NhZ2VIZWFkZXJ9IGA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkaW5nIHRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KClcblx0XHRcdFx0fTogJHttZXNzYWdlVG9TaG93LmdldE1lc3NhZ2UoKX0ke2Nsb3NlVGFnfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG1lc3NhZ2VUb1Nob3cuZ2V0TWVzc2FnZSgpfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdGh0bWxUZXh0OiBNYW5hZ2VkT2JqZWN0LmVzY2FwZVNldHRpbmdzVmFsdWUoZm9ybWF0dGVkVGV4dFN0cmluZylcblx0XHRcdH0pO1xuXG5cdFx0XHRzaG93TWVzc2FnZUJveFBlclR5cGUoXG5cdFx0XHRcdGZvcm1hdHRlZFRleHQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRvbkNsb3NlOiBjbG9zZU1lc3NhZ2VCb3guYmluZChudWxsLCBtZXNzYWdlVG9TaG93LCByZXNvbHZlLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlVG9TaG93XG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9SZW1vdmUgPSBbbWVzc2FnZVNob3duXTtcblx0aWYgKHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpIHtcblx0XHRjb25zdCBhbGxNc2dzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBnZW5lcmljTWVzc2FnZSA9IGFsbE1zZ3MuZmluZCgobXNnOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbXNnLmdldElkKCkgPT09IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpO1xuXHRcdGlmIChnZW5lcmljTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZXNUb1JlbW92ZS5wdXNoKGdlbmVyaWNNZXNzYWdlKTtcblx0XHR9XG5cdH1cblx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2VzVG9SZW1vdmUpO1xuXHRjYWxsQmFjayh1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBzaG93TWVzc2FnZUJveFBlclR5cGUoZm9ybWF0dGVkVGV4dDogc3RyaW5nLCBjbG9zZTogeyBvbkNsb3NlOiBGdW5jdGlvbiB9LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdHN3aXRjaCAobWVzc2FnZS5nZXRUeXBlKCkpIHtcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLldhcm5pbmc6XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5TdWNjZXNzOlxuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuSW5mb3JtYXRpb246XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRNZXNzYWdlQm94LnNob3coZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwKHRyYW5zaXRpb25NZXNzYWdlczogTWVzc2FnZVtdLCBjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHR0cmFuc2l0aW9uTWVzc2FnZXM/LmZvckVhY2goKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRpZiAobWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBjb250ZXh0Py5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWUpIHtcblx0XHRcdGJvdW5kQ29udGV4dE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0fVxuXHR9KTtcblx0aWYgKGJvdW5kQ29udGV4dE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHRyYW5zaXRpb25NZXNzYWdlcyA9IHRyYW5zaXRpb25NZXNzYWdlcz8uZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZSAhPT0gYm91bmRDb250ZXh0TWVzc2FnZXNbMF07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRyYW5zaXRpb25NZXNzYWdlcztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBuYW1lIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBkaWFsb2cuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YUFycmF5IE1lc3NhZ2VzIGFycmF5XG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gdmlld1R5cGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShcblx0YU1vZGVsRGF0YUFycmF5OiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0YU1vZGVsRGF0YUFycmF5LmZvckVhY2goKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBcIlwiO1xuXHRcdGlmICghYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCAmJiBhTW9kZWxEYXRhLmdldENvZGU/LigpICE9PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRcdC8vIHVuYm91bmQgdHJhbnNpaXRvbiBtZXNzYWdlc1xuXHRcdFx0Y29uc3QgZ2VuZXJhbEdyb3VwVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBnZW5lcmFsR3JvdXBUZXh0O1xuXHRcdH0gZWxzZSBpZiAoYU1vZGVsRGF0YS50YXJnZXQ/Lmxlbmd0aCkge1xuXHRcdFx0Ly8gTFIgZmxvd1xuXHRcdFx0aWYgKHZpZXdUeXBlID09PSBcIkxpc3RSZXBvcnRcIiAmJiBjb250cm9sPy5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lTFJUYWJsZShjb250cm9sLCBhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpZXdUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHQvLyBPUCBEaXNwbGF5IG1vZGVcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUoYU1vZGVsRGF0YSwgc0FjdGlvbk5hbWUsIGNvbnRyb2wgYXMgVmlldyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBmb3IgTFIgdGFibGUuXG4gKiBAcGFyYW0gb0VsZW1cbiAqIEBwYXJhbSBhTW9kZWxEYXRhXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lTFJUYWJsZShvRWxlbTogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbSAmJiAob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKTtcblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHsob0VsZW0gYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG9Sb3dCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluY2x1ZGVzKHJvd0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYCR7cm93Q29udGV4dC5nZXRQYXRoKCl9L2A7XG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChvRWxlbS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0XHRcdFx0XHRjb25zdCByb3dJZGVudGlmaWVyID0gaWRlbnRpZmllckNvbHVtbiAmJiByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dO1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtblByb3BlcnR5TmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbFByb3BlcnR5KG9FbGVtLCBhTW9kZWxEYXRhLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzVGFibGVUYXJnZXRDb2xOYW1lIH0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xJbmZvKG9FbGVtIGFzIE1EQ1RhYmxlLCBjb2x1bW5Qcm9wZXJ0eU5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IGhhcyBzb21lIGNvbHVtbiBuYW1lIGFuZCBjb2x1bW4gaXMgdmlzaWJsZSBpbiBVSVxuXHRcdFx0XHRcdGlmIChjb2x1bW5Qcm9wZXJ0eU5hbWUgJiYgc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gaGVhZGVyIHdpbGwgYmUgcm93IElkZW50aWZpZXIsIGlmIGZvdW5kIGZyb20gYWJvdmUgY29kZSBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRhYmxlIG5hbWVcblx0XHRcdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gcm93SWRlbnRpZmllciA/IGAgJHtyb3dJZGVudGlmaWVyfWAgOiAob0VsZW0gYXMgTURDVGFibGUpLmdldEhlYWRlcigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBjb2x1bW4gZGF0YSBub3QgZm91bmQgKG1heSBiZSB0aGUgY29sdW1uIGlzIGhpZGRlbiksIGFkZCBncm91cGluZyBhcyBMYXN0IEFjdGlvblxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0Y29uc3QgaWRlbnRpZmllckNvbHVtbiA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZztcblx0aWYgKGlkZW50aWZpZXJDb2x1bW4pIHtcblx0XHRjb25zdCBhbGxSb3dDb250ZXh0cyA9IG1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0cygpO1xuXHRcdGFsbFJvd0NvbnRleHRzLmZvckVhY2goKHJvd0NvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uID8gcm93Q29udGV4dC5nZXRPYmplY3QoKVtpZGVudGlmaWVyQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgY29sdW1uTmFtZVN1ZmZpeCA9IHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID8gYCwgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gIDogXCJcIjtcblx0XHRcdFx0bWVzc2FnZVtcImFkZGl0aW9uYWxUZXh0XCJdID0gYCR7cm93SWRlbnRpZmllcn0ke2NvbHVtbk5hbWVTdWZmaXh9YDtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRtZXNzYWdlW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG4pOiB2b2lkIHtcblx0bGV0IGhlYWRlck5hbWUgPSBtZGNUYWJsZS5nZXRIZWFkZXJWaXNpYmxlKCkgJiYgdGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyO1xuXHRpZiAoIWhlYWRlck5hbWUpIHtcblx0XHRoZWFkZXJOYW1lID0gc3Vic2VjdGlvbi5nZXRUaXRsZSgpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0aGVhZGVyTmFtZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtoZWFkZXJOYW1lfWA7XG5cdH1cblx0bWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBoZWFkZXJOYW1lO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgb2YgTWVzc2FnZSBPYmplY3QgaW4gT1AgRGlzcGxheSBtb2RlLlxuICogQHBhcmFtIHN1YnNlY3Rpb24gU3Vic2VjdGlvblxuICogQHBhcmFtIG1kY1RhYmxlICBNREMgdGFibGVcbiAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB2aWV3Q29udGV4dCBWaWV3J3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gZ3JvdXBOYW1lSXNHZW5lcmFsIElzIHByZXNlbnQgZ3JvdXAgbmFtZSAnR2VuZXJhbCdcbiAqIEBwYXJhbSBhY3Rpb25OYW1lIEFjdGlvbiBuYW1lXG4gKiBAcmV0dXJucyBJZiBncm91cCBuYW1lIGlzICdHZW5lcmFsJ1xuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR2aWV3Q29udGV4dDogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG5cdGdyb3VwTmFtZUlzR2VuZXJhbDogYm9vbGVhbixcblx0YWN0aW9uTmFtZT86IHN0cmluZ1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Sb3dCaW5kaW5nID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IHRydWU7XG5cdGxldCBjaGlsZFRhYmxlRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblxuXHRtZGNUYWJsZS5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaCgob0VsZW1lbnQpID0+IHtcblx0XHRpZiAob0VsZW1lbnQuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpIHx8IG9FbGVtZW50LmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSkge1xuXHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHR9XG5cdH0pO1xuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke3ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9LyR7bWRjVGFibGUuZ2V0Um93QmluZGluZygpPy5nZXRQYXRoKCl9YDtcblx0XHRpZiAobWVzc2FnZS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRjb25zdCBvYmogPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0bWRjVGFibGUsXG5cdFx0XHRcdGNoaWxkVGFibGVFbGVtZW50LFxuXHRcdFx0XHRvUm93QmluZGluZyxcblx0XHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwLFxuXHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgeyBvVGFyZ2V0VGFibGVJbmZvIH0gPSBvYmo7XG5cblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoc3Vic2VjdGlvbiwgbWRjVGFibGUsIG1lc3NhZ2UsIG9UYXJnZXRUYWJsZUluZm8pO1xuXHRcdFx0Z3JvdXBOYW1lSXNHZW5lcmFsID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBncm91cE5hbWVJc0dlbmVyYWw7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gYU1vZGVsRGF0YSBNZXNzYWdlIE9iamVjdFxuICogQHBhcmFtIHNBY3Rpb25OYW1lICBBY3Rpb24gbmFtZVxuICogQHBhcmFtIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udHJvbDogVmlldyk6IHZvaWQge1xuXHRjb25zdCBvVmlld0NvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvcExheW91dDogQ29udHJvbCA9IGNvbnRyb2w/LmdldENvbnRlbnQgJiYgY29udHJvbD8uZ2V0Q29udGVudCgpWzBdO1xuXHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdGlmIChvcExheW91dCkge1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvcExheW91dCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRzdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0XHRcdFx0aWYgKG9FbGVtLmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gc2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlKFxuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0b0VsZW0sXG5cdFx0XHRcdFx0XHRcdGFNb2RlbERhdGEsXG5cdFx0XHRcdFx0XHRcdG9WaWV3Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0YklzR2VuZXJhbEdyb3VwTmFtZSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dD8uZ2V0UGF0aCgpfWA7XG5cdFx0aWYgKGFNb2RlbERhdGEudGFyZ2V0Py5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgT1AgY29udGV4dCBwYXRoIGlzIHBhcnQgb2YgdGFyZ2V0LCBzZXQgTGFzdCBBY3Rpb24gYXMgZ3JvdXAgbmFtZVxuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBzTGFzdEFjdGlvblRleHQgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfTEFTVF9BQ1RJT05cIik7XG5cdHJldHVybiBzQWN0aW9uTmFtZSA/IGAke3NMYXN0QWN0aW9uVGV4dH06ICR7c0FjdGlvbk5hbWV9YCA6IFwiXCI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgcmFuayBiYXNlZCBvbiBNZXNzYWdlIEdyb3VwL0hlYWRlciBuYW1lLCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIFNvcnRpbmcgbWVzc2FnZXMgaW4gTWVzc2FnZSBkaWFsb2dcbiAqIExhc3QgQWN0aW9uIHNob3VsZCBiZSBzaG93biBhdCB0b3AsIG5leHQgUm93IElkIGFuZCBsYXN0IEdlbmVyYWwuXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyBSYW5rIG9mIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVJhbmsob2JqOiBNZXNzYWdlV2l0aEhlYWRlcik6IG51bWJlciB7XG5cdGlmIChvYmouZ2V0Q29kZSgpID09PSBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCIpIHtcblx0XHRyZXR1cm4gMTtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkxhc3QgQWN0aW9uXCIpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH0gZWxzZSBpZiAob2JqLmhlYWRlck5hbWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJHZW5lcmFsXCIpKSB7XG5cdFx0cmV0dXJuIDQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIHdoaWNoIGNhbiBlaXRoZXIgR2VuZXJhbCBvciBMYXN0IEFjdGlvbi5cbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gYklzR2VuZXJhbEdyb3VwTmFtZVxuICovXG5jb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgYklzR2VuZXJhbEdyb3VwTmFtZT86IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZVtcImhlYWRlck5hbWVcIl0gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lKHNBY3Rpb25OYW1lKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB0YWJsZSByb3cvY29sdW1uIGluZm8gYW5kIHNldCBzdWJ0aXRsZS5cbiAqIEBwYXJhbSBhTWVzc2FnZVxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9FbGVtZW50XG4gKiBAcGFyYW0gb1Jvd0JpbmRpbmdcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICogQHBhcmFtIHNldFNlY3Rpb25OYW1lSW5Hcm91cFxuICogQHBhcmFtIGZuU2V0R3JvdXBOYW1lXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIGFuZCBTdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZShcblx0YU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmcsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0Zm5TZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG4pOiB7IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGU7IHN1YlRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIH0ge1xuXHRjb25zdCBvVGFyZ2V0VGFibGVJbmZvID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQW5kVGFyZ2V0SW5mbyhvVGFibGUsIGFNZXNzYWdlLCBvRWxlbWVudCwgb1Jvd0JpbmRpbmcpO1xuXHRvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyID0gb1RhYmxlLmdldEhlYWRlcigpO1xuXG5cdGxldCBzQ29udHJvbElkLCBiSXNDcmVhdGlvblJvdztcblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQpIHtcblx0XHRzQ29udHJvbElkID0gYU1lc3NhZ2UuZ2V0Q29udHJvbElkcygpLmZpbmQoZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzQ29udHJvbEluVGFibGUob1RhYmxlLCBzSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRjb25zdCBvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0YklzQ3JlYXRpb25Sb3cgPSBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3cob0NvbnRyb2wpO1xuXHR9XG5cblx0aWYgKCFvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHQvLyBpZiB0aGUgY29sdW1uIGlzIG5vdCBwcmVzZW50IG9uIFVJIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgaGF2ZSBhIHRhYmxlIGZpZWxkIGluIGl0LCB1c2UgTGFzdCBBY3Rpb24gZm9yIGdyb3VwaW5nXG5cdFx0aWYgKGFNZXNzYWdlLmdldFBlcnNpc3RlbnQoKSAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0Zm5TZXRHcm91cE5hbWUoYU1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN1YlRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VTdWJ0aXRsZShcblx0XHRhTWVzc2FnZSxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0b1RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdG9UYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvd1xuXHQpO1xuXG5cdHJldHVybiB7IG9UYXJnZXRUYWJsZUluZm8sIHN1YlRpdGxlIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgc3VidGl0bGUgYmFzZWQgb24gVGFibGUgUm93L0NvbHVtbiBkYXRhLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSB0YWJsZVJvd0JpbmRpbmdDb250ZXh0c1xuICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuICogQHBhcmFtIHRhYmxlVGFyZ2V0Q29sTmFtZVxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gaXNDcmVhdGlvblJvd1xuICogQHBhcmFtIHRhcmdldGVkQ29udHJvbFxuICogQHJldHVybnMgTWVzc2FnZSBzdWJ0aXRsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0dGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IENvbnRleHRbXSxcblx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHRhYmxlOiBNRENUYWJsZSxcblx0aXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBtZXNzYWdlU3VidGl0bGU7XG5cdGxldCByb3dTdWJ0aXRsZVZhbHVlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHRhYmxlQ29sUHJvcGVydHkgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbHVtblZpc2liaWxpdHlJbmZvKHRhYmxlUm93Q29udGV4dCk7XG5cdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZSk7XG5cdGlmIChpc0NyZWF0aW9uUm93IHx8IHRhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpKSB7XG5cdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW1xuXHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfQ1JFQVRJT05fUk9XX0lORElDQVRPUlwiKSxcblx0XHRcdHRhYmxlVGFyZ2V0Q29sTmFtZSA/IHRhYmxlVGFyZ2V0Q29sTmFtZSA6IChjb2xGcm9tVGFibGVTZXR0aW5ncyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLmxhYmVsXG5cdFx0XSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAodGFibGVSb3dCaW5kaW5nQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gc2V0IFJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0XHRpZiAodGFyZ2V0ZWRDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBVSSBlcnJvciBpcyBvbiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB0aGVuIGdldCB0aGUgY29udHJvbCBpbnB1dCBhcyB0aGUgcm93IGluZGljYXRvcjpcblx0XHRcdFx0cm93U3VidGl0bGVWYWx1ZSA9ICh0YXJnZXRlZENvbnRyb2wgYXMgRmllbGRBUEkpLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIEdldHRpbmcgdGhlIGNvbHVtbiBsYWJlbCBhbmQgaXRzIHZhbHVlIG9mIGEgc2luZ2xlIHJvd1xuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2xWYWx1ZShcblx0XHRcdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0dGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0dGFibGVDb2xUZXh0QXJyYW5nZW1lbnQsXG5cdFx0XHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YWJsZVJvd0NvbnRleHQgJiYgdGFibGVDb2xQcm9wZXJ0eSAmJiB0YWJsZUNvbFByb3BlcnR5Lmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHJvd3MsIHRoZSBzdWJ0aXRsZSBpcyBkaXNwbGF5ZWQgYXMg4oCYU2VlIG1lc3NhZ2UgZGV0YWlsc+KAmVxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVfREVUQUlMRURfUk9XX0lORk9cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0Ly8gc2V0IHRoZSBtZXNzYWdlIHN1YnRpdGxlXG5cdFx0XHRjb25zdCBvQ29sdW1uSW5mbzogQ29sdW1uSW5mb1R5cGUgPSBtZXNzYWdlSGFuZGxpbmcuZGV0ZXJtaW5lQ29sdW1uSW5mbyhjb2xGcm9tVGFibGVTZXR0aW5ncywgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRpZiAocm93U3VidGl0bGVWYWx1ZSAmJiB0YWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0lURU1fU1VCVElUTEVcIiwgW3Jvd1N1YnRpdGxlVmFsdWUsIHRhYmxlVGFyZ2V0Q29sTmFtZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKX0sICR7XG5cdFx0XHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlXG5cdFx0XHRcdH1gO1xuXHRcdFx0fSBlbHNlIGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPT09IFwiVW5rbm93blwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiB0YWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKSArIFwiOiBcIiArIHRhYmxlVGFyZ2V0Q29sTmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoIXJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWVzc2FnZVN1YnRpdGxlO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZmlyc3QgY29sdW1uIGZvciB0ZXh0IEFubm90YXRpb24sIHRoaXMgaXMgbmVlZGVkIHRvIHNldCBzdWJ0aXRsZSBvZiBNZXNzYWdlLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQmluZGluZyBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24oXG5cdHRhYmxlOiBNRENUYWJsZSxcblx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG4pOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdGxldCBiaW5kaW5nQ29udGV4dDtcblx0aWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3QgeyBrZXkgfSA9IHRhYmxlQ29sUHJvcGVydHlbMF07XG5cdFx0Y29uc3Qgb01vZGVsID0gdGFibGU/LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbD8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7IC8vIG11c3QgYmUgYW4gT0RhdGFNZXRhTW9kZWwgdG8gbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbD8uZ2V0TWV0YVBhdGgodGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0aWYgKG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aGApKSB7XG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke2tleX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJpbmRpbmdDb250ZXh0O1xufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbHVtbiBpbmZvIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBvZiB0aGUgbWVzc2FnZSBwb3BvdmVyLlxuICogQHBhcmFtIG9NZXNzYWdlIE1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0gb1RhYmxlIE1kY1RhYmxlXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb2x1bW4gaW5mby5cbiAqL1xuXG5mdW5jdGlvbiBmZXRjaENvbHVtbkluZm8ob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBzQ29sTmFtZUZyb21NZXNzYWdlT2JqID0gb01lc3NhZ2U/LmdldFRhcmdldHMoKVswXS5zcGxpdChcIi9cIikucG9wKCk7XG5cdHJldHVybiAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0S2V5Q29sdW1uSW5mbyhzQ29sTmFtZUZyb21NZXNzYWdlT2JqKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIENvbHVtbiBkYXRhIGRlcGVuZGluZyBvbiBpdHMgYXZhaWxhYmlsaXR5IGluIFRhYmxlLCB0aGlzIGlzIG5lZWRlZCBmb3Igc2V0dGluZyBzdWJ0aXRsZSBvZiBNZXNzYWdlLlxuICogQHBhcmFtIG9Db2xGcm9tVGFibGVTZXR0aW5nc1xuICogQHBhcmFtIHJlc291cmNlTW9kZWxcbiAqIEByZXR1cm5zIENvbHVtbiBkYXRhLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5JbmZvKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBDb2x1bW5JbmZvVHlwZSB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IHsgc0NvbHVtbkluZGljYXRvcjogXCJcIiwgc0NvbHVtblZhbHVlOiBcIlwiIH07XG5cdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MpIHtcblx0XHQvLyBpZiBjb2x1bW4gaXMgbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb24sIHNob3cgb25seSByb3cgc3VidGl0bGUgdGV4dFxuXHRcdGlmIChvQ29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJ1bmRlZmluZWRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9pZiBjb2x1bW4gaXMgaW4gdGFibGUgcGVyc29uYWxpemF0aW9uIGJ1dCBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiwgc2hvdyBDb2x1bW4gKEhpZGRlbikgOiA8Y29sTmFtZT5cblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJUX0NPTFVNTl9JTkRJQ0FUT1JfSU5fVEFCTEVfREVGSU5JVElPTlwiXG5cdFx0XHQpfSk6ICR7b0NvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsfWA7XG5cdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJIaWRkZW5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9IFwiVW5rbm93blwiO1xuXHR9XG5cdHJldHVybiBvQ29sdW1uSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIGEgZ2l2ZW4gY29udHJvbCBpZCBpcyBhIHBhcnQgb2YgVGFibGUuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc0NvbnRyb2xJZFxuICogQHJldHVybnMgVHJ1ZSBpZiBjb250cm9sIGlzIHBhcnQgb2YgdGFibGUuXG4gKi9cbmZ1bmN0aW9uIGlzQ29udHJvbEluVGFibGUob1RhYmxlOiBNRENUYWJsZSwgc0NvbnRyb2xJZDogc3RyaW5nKTogVUk1RWxlbWVudFtdIHwgYm9vbGVhbiB7XG5cdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0aWYgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIW9Db250cm9sLmlzQTxUYWJsZT4oXCJzYXAubS5UYWJsZVwiKSkge1xuXHRcdHJldHVybiBvVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG9FbGVtLmdldElkKCkgPT09IG9Db250cm9sLmdldElkKCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRsZXQgb1BhcmVudENvbnRyb2wgPSBvQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdHdoaWxlIChcblx0XHRvUGFyZW50Q29udHJvbCAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdCFvUGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAubS5Db2x1bW5MaXN0SXRlbVwiKVxuXHQpIHtcblx0XHRvUGFyZW50Q29udHJvbCA9IG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuICEhb1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLnRhYmxlLkNyZWF0aW9uUm93XCIpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyhzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWw6IE1lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5zdGFydHNXaXRoKHNQYXRoVG9CZVJlbW92ZWQpKVxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCByZWxldmFudCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBiQm91bmRNZXNzYWdlcyBUbyBnZXQgb25seSBib3VuZCBtZXNzYWdlc1xuICogQHBhcmFtIGJUcmFuc2l0aW9uT25seSBUbyBnZXQgb25seSB0cmFuc2l0aW9uIG1lc3NhZ2VzXG4gKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZCBGaWx0ZXIgb3V0IGJvdW5kIG1lc3NhZ2VzIHdpdGggcGF0aFxuICogQHJldHVybnMgTWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMgPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5ID0gZmFsc2UsIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiBNZXNzYWdlW10ge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblx0bGV0IGFNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdGlmIChiQm91bmRNZXNzYWdlcyAmJiBiVHJhbnNpdGlvbk9ubHkgJiYgc1BhdGhUb0JlUmVtb3ZlZCkge1xuXHRcdGFNZXNzYWdlcyA9IGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5nZXRQZXJzaXN0ZW50KCkpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gIT09IFwiXCIpIHx8XG5cdFx0XHRcdCghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0uZ2V0VGFyZ2V0cygpWzBdIHx8IGFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCIpKSlcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpICE9PSBcIlwiICYmXG5cdFx0XHQhYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkuaW5jbHVkZXMob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5zZXRNZXNzYWdlKFxuXHRcdFx0XHRgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHthVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKX1gXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IGFUcmFuc2l0aW9uTWVzc2FnZXMuZmlsdGVyKGlzTm9uVGVjaG5pY2FsTWVzc2FnZSk7XG5cblx0cmV0dXJuIGJhY2tlbmRNZXNzYWdlcztcbn1cbmV4cG9ydCB0eXBlIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0ge1xuXHRvcmlnaW5hbE1lc3NhZ2U/OiB7XG5cdFx0bWVzc2FnZT86IHN0cmluZztcblx0fSB8IG51bGw7XG5cdGh0dHBTdGF0dXM/OiBudW1iZXIgfCBudWxsO1xuXHRyZXRyeUFmdGVyPzogRGF0ZTtcblx0aXNDb25jdXJyZW50TW9kaWZpY2F0aW9uPzogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgYU1lc3NhZ2VzVG9CZURlbGV0ZWQgPSBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcywgdHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cblx0aWYgKGFNZXNzYWdlc1RvQmVEZWxldGVkLmxlbmd0aCA+IDApIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzVG9CZURlbGV0ZWQpO1xuXHR9XG59XG4vL1RPRE86IFRoaXMgbXVzdCBiZSBtb3ZlZCBvdXQgb2YgbWVzc2FnZSBoYW5kbGluZ1xuZnVuY3Rpb24gc2V0TWVzc2FnZVN1YnRpdGxlKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcik6IHZvaWQge1xuXHRpZiAobWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3Qgc3VidGl0bGVDb2x1bW4gPSAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdGNvbnN0IGVycm9yQ29udGV4dCA9IGFDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLmluY2x1ZGVzKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fSk7XG5cdFx0bWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9IGVycm9yQ29udGV4dCA/IGVycm9yQ29udGV4dC5nZXRPYmplY3QoKVtzdWJ0aXRsZUNvbHVtbl0gOiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHJldHJpZXZlcyB0aGUgdmlzaWJsZSBzZWN0aW9ucyBmcm9tIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIG9PYmplY3RQYWdlTGF5b3V0IFRoZSBvYmplY3RQYWdlTGF5b3V0IG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgdmlzaWJsZSBzZWN0aW9ucy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZpc2libGUgc2VjdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sIHwgT2JqZWN0UGFnZUxheW91dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRyZXR1cm4gKG9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCkuZmlsdGVyKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRyZXR1cm4gb1NlY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBjb250cm9sIGlkcyBmcm9tIG1lc3NhZ2UgYXJlIGEgcGFydCBvZiBhIGdpdmVuIHN1YnNlY3Rpb24uXG4gKiBAcGFyYW0gc3ViU2VjdGlvblxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcmV0dXJucyBTdWJTZWN0aW9uIG1hdGNoaW5nIGNvbnRyb2wgaWRzLlxuICovXG5mdW5jdGlvbiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbihzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKTogVUk1RWxlbWVudFtdIHtcblx0cmV0dXJuIHN1YlNlY3Rpb25cblx0XHQuZmluZEVsZW1lbnRzKHRydWUsIChvRWxlbSkgPT4ge1xuXHRcdFx0cmV0dXJuIGZuRmlsdGVyVXBvbklkcyhvTWVzc2FnZU9iamVjdC5nZXRDb250cm9sSWRzKCksIG9FbGVtKTtcblx0XHR9KVxuXHRcdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHQvLyBjb250cm9scyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGhhdmUgdGhlIHRhYmxlIG9uIHRvcCBvZiB0aGUgYXJyYXlcblx0XHRcdC8vIGl0IHdpbGwgaGVscCB0byBjb21wdXRlIHRoZSBzdWJ0aXRsZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiByZWxhdGVkIGNvbnRyb2xzXG5cdFx0XHRpZiAoYS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICFiLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlOiBDb250cm9sLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsIG9Db250ZXh0UGF0aD86IHN0cmluZyB8IFJlZ0V4cCk6IHN0cmluZyB7XG5cdC8vdGhpcyBmdW5jdGlvbiBlc2NhcGVzIGEgc3RyaW5nIHRvIHVzZSBpdCBhcyBhIHJlZ2V4XG5cdGNvbnN0IGZuUmVnRXhwZXNjYXBlID0gZnVuY3Rpb24gKHM6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG5cdH07XG5cdC8vIGJhc2VkIG9uIHRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgbWVzc2FnZSB3ZSByZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZS5cblx0Ly8gdG8gYWNoaWV2ZSBpdCB3ZSByZW1vdmUgdGhlIGJpbmRpbmdDb250ZXh0IHBhdGggYW5kIHRoZSByb3cgYmluZGluZyBwYXRoIGZyb20gdGhlIHRhcmdldFxuXHRpZiAoIW9Db250ZXh0UGF0aCkge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoVG9Fc2NhcGUgPSBgJHtvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8keyhvVGFibGUgYXMgTURDVGFibGUpLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRvQ29udGV4dFBhdGggPSBuZXcgUmVnRXhwKGAke2ZuUmVnRXhwZXNjYXBlKGNvbnRleHRQYXRoVG9Fc2NhcGUpfVxcXFwoLipcXFxcKS9gKTtcblx0fVxuXHRyZXR1cm4gb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLnJlcGxhY2Uob0NvbnRleHRQYXRoLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24gaWYgaXQgbWF0Y2hlcyB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGFyZ2V0IG9mIG1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHlcbiAqIEByZXR1cm5zIENvbHVtbiBuYW1lIGFuZCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVDb2xJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcblx0bGV0IHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1RhYmxlVGFyZ2V0Q29sOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBvVGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdHJldHVybiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTtcblx0fSk7XG5cdGlmICghb1RhYmxlVGFyZ2V0Q29sKSB7XG5cdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBjdXN0b20gY29sdW1uICovXG5cdFx0Y29uc3Qgb0N1c3RvbUNvbHVtbiA9IChvVGFibGUuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIFRhYmxlRGVsZWdhdGUpLmdldENvbHVtbnNGb3Iob1RhYmxlKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdG9Db2x1bW46IFRhYmxlQ29sdW1uXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoISEob0NvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uKS50ZW1wbGF0ZSAmJiBvQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0gPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IHx8XG5cdFx0XHRcdFx0b0NvbHVtbi5wcm9wZXJ0eUluZm9zWzBdLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9DdXN0b21Db2x1bW4pIHtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gb0N1c3RvbUNvbHVtbj8ubmFtZTtcblxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IG9UYWJsZVxuXHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID09PSBvQ29sdW1uLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdD8uZ2V0SGVhZGVyKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIElmIHRoZSB0YXJnZXQgY29sdW1uIGlzIG5vdCBmb3VuZCwgd2UgY2hlY2sgZm9yIGEgZmllbGQgZ3JvdXAgKi9cblx0XHRcdGNvbnN0IGFDb2x1bW5zID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpO1xuXHRcdFx0Y29uc3QgY29sdW1uRGVmaW5pdGlvbiA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IFRhYmxlQ29sdW1uKSB7XG5cdFx0XHRcdGlmIChvQ29sdW1uLmtleS5pbmNsdWRlcyhcIjo6RmllbGRHcm91cDo6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW4ucHJvcGVydHlJbmZvcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHwgcHJvcGVydHlJbmZvLnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSkgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0LyogY2hlY2sgaWYgdGhlIGNvbHVtbiB3aXRoIHRoZSBmaWVsZCBncm91cCBpcyB2aXNpYmxlIGluIHRoZSB0YWJsZTogKi9cblx0XHRcdGxldCBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBmYWxzZTtcblx0XHRcdGlmIChjb2x1bW5EZWZpbml0aW9uICYmIGNvbHVtbkRlZmluaXRpb24ubGFiZWwpIHtcblx0XHRcdFx0YklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID0gb1RhYmxlLmdldENvbHVtbnMoKS5zb21lKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1uLmdldEhlYWRlcigpID09PSBjb2x1bW5EZWZpbml0aW9uLmxhYmVsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5sYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlID8gY29sdW1uRGVmaW5pdGlvbj8ua2V5IDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlVGFyZ2V0Q29sLmdldEhlYWRlcigpO1xuXHR9XG5cdHJldHVybiB7IHNUYWJsZVRhcmdldENvbE5hbWU6IHNUYWJsZVRhcmdldENvbE5hbWUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgVGFibGUgYW5kIGNvbHVtbiBpbmZvIGlmIGFueSBvZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQgZnJvbSBNZXNzYWdlLlxuICogQHBhcmFtIG9UYWJsZVxuICogQHBhcmFtIG9NZXNzYWdlT2JqZWN0XG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHJldHVybnMgVGFibGUgaW5mbyBtYXRjaGluZyB0aGUgbWVzc2FnZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5kVGFyZ2V0SW5mbyhcblx0b1RhYmxlOiBNRENUYWJsZSxcblx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcbik6IFRhcmdldFRhYmxlSW5mb1R5cGUge1xuXHRjb25zdCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA9IGdldFRhYmxlQ29sUHJvcGVydHkob1RhYmxlLCBvTWVzc2FnZU9iamVjdCk7XG5cdGNvbnN0IG9UYWJsZUNvbEluZm8gPSBnZXRUYWJsZUNvbEluZm8ob1RhYmxlLCBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSk7XG5cdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyA9IG9FbGVtZW50Py5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHQ/IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpXG5cdFx0OiAob1Jvd0JpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUgPSB7XG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IG9UYWJsZUNvbEluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMuZmluZChmdW5jdGlvbiAocm93Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHJvd0NvbnRleHQgJiYgb01lc3NhZ2VPYmplY3QuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yocm93Q29udGV4dC5nZXRQYXRoKCkpID09PSAwO1xuXHRcdH0pXG5cdH07XG5cdHJldHVybiBvVGFyZ2V0VGFibGVJbmZvO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gYUNvbnRyb2xJZHNcbiAqIEBwYXJhbSBvSXRlbVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBtYXRjaGVzIG9uZSBvZiB0aGUgY29udHJvbHNcbiAqL1xuZnVuY3Rpb24gZm5GaWx0ZXJVcG9uSWRzKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGFDb250cm9sSWRzLnNvbWUoZnVuY3Rpb24gKHNDb250cm9sSWQpIHtcblx0XHRpZiAoc0NvbnRyb2xJZCA9PT0gb0l0ZW0uZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgZ3JvdXAgbmFtZSBoYXZpbmcgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBkYXRhLlxuICogQHBhcmFtIHNlY3Rpb25cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gYk11bHRpcGxlU3ViU2VjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0VGFibGVJbmZvXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHBhcmFtIGluY2x1ZGVUYWJsZUdyb3VwTmFtZVxuICogQHJldHVybnMgR3JvdXAgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkdyb3VwTmFtZShcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0aW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gdHJ1ZVxuKTogc3RyaW5nIHtcblx0cmV0dXJuIChcblx0XHRzZWN0aW9uLmdldFRpdGxlKCkgK1xuXHRcdChzdWJTZWN0aW9uLmdldFRpdGxlKCkgJiYgYk11bHRpcGxlU3ViU2VjdGlvbnMgPyBgLCAke3N1YlNlY3Rpb24uZ2V0VGl0bGUoKX1gIDogXCJcIikgK1xuXHRcdChvVGFyZ2V0VGFibGVJbmZvICYmIG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgJiYgaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG5cdFx0XHQ/IGAsICR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCIpfTogJHtvVGFyZ2V0VGFibGVJbmZvLnRhYmxlSGVhZGVyfWBcblx0XHRcdDogXCJcIilcblx0KTtcbn1cblxuZnVuY3Rpb24gYklzT3JwaGFuRWxlbWVudChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pOiBib29sZWFuIHtcblx0cmV0dXJuICFhRWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAob1BhcmVudEVsZW1lbnQgJiYgb1BhcmVudEVsZW1lbnQgIT09IG9FbGVtKSB7XG5cdFx0XHRvUGFyZW50RWxlbWVudCA9IG9QYXJlbnRFbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmVudEVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmlsdGVycyBhbmQgZ2l2ZXMgYmFjayB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlIGNvbnRleHQgcGFzc2VkLlxuICogQHBhcmFtIGNvbnRleHRcbiAqIEByZXR1cm5zIE1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IE1lc3NhZ2VbXSB7XG5cdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHR0ZXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID4gMCAmJiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5zdGFydHNXaXRoKGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdH0pXG5cdCk7XG5cdGNvbnN0IGN1cnJlbnRDb250ZXh0cyA9IGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRyZXR1cm4gY3VycmVudENvbnRleHRzLm1hcCgoY3VycmVudENvbnRleHQpID0+IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGJvb2xlYW4gdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBwcmVzZW50IGluIHRoZSBkaWFsb2cgYmFzZWQgb24gdGhlIGNvbnRyb2wgSWRzLlxuICogQHBhcmFtIGNvbnRyb2xJZHMgQXJyYXkgb2YgY29udHJvbCBJZHNcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIHRhcmdldCBwcmVzZW50IGluIHRoZSBkaWFsb2cuXG4gKi9cbmZ1bmN0aW9uIGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nKGNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdGxldCBvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQsIGVycm9yRmllbGRDb250cm9sO1xuXHRjb25zdCBpbmRleCA9IEluZmluaXR5O1xuXHRpZiAoY29udHJvbElkcy5sZW5ndGggPT09IDEpIHtcblx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSk7XG5cdFx0ZXJyb3JGaWVsZENvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZHNbMF0pIGFzIFVJNUVsZW1lbnQ7XG5cdH0gZWxzZSB7XG5cdFx0bGV0IGVycm9yQ29udHJvbElkO1xuXHRcdGNvbnRyb2xJZHMuZm9yRWFjaCgoY29udHJvbElkKSA9PiB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXHRcdFx0aWYgKGNvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0ZXJyb3JDb250cm9sSWQgPSBjb250cm9sSWQ7XG5cdFx0XHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChlcnJvckNvbnRyb2xJZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPSBJbmZpbml0eTtcblx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2cpIHtcblx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGRpYWxvZydzIGNvbnRyb2xcblx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2w/LmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0IHBhdGggd2hlbiB0aGUgb2JqZWN0IHBhZ2UgaXMgY2xvc2VkLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtZXNzYWdlcyBhcmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dChvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCBpc01lc3NhZ2VTdHJpcE1lc3NhZ2U6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdG1lc3NhZ2VzSW5Nb2RlbD8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdGNvbnN0IGlzU2luZ2xlVGFyZ2V0ID0gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxO1xuXHRcdGNvbnN0IGlzVGFyZ2V0TWF0Y2hpbmcgPSBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gb0NvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRjb25zdCBpc1RyYW5zaXRpb25NZXNzYWdlID0gbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWU7XG5cblx0XHRpZiAoaXNTaW5nbGVUYXJnZXQgJiYgaXNUYXJnZXRNYXRjaGluZyAmJiBpc1RyYW5zaXRpb25NZXNzYWdlKSB7XG5cdFx0XHRpc01lc3NhZ2VTdHJpcE1lc3NhZ2UucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChpc01lc3NhZ2VTdHJpcE1lc3NhZ2UubGVuZ3RoID09PSAxKSB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGlzTWVzc2FnZVN0cmlwTWVzc2FnZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgY29udGV4dCBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIHdoZW4gdGhlcmUgaXMgZXJyb3Igb24gdGhlIGRpYWxvZyBhbmQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW4uXG4gKiBAcGFyYW0gbWVzc2FnZXMgQXJyYXkgb2YgbWVzc2FnZXNcbiAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0cyBhcnJheVxuICovXG5mdW5jdGlvbiByZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHRzPzogQ29udGV4dFtdKTogdm9pZCB7XG5cdGNvbnN0IGJvdW5kQ29udGV4dE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGNvbnRleHRzPy5sZW5ndGggPT09IDEpIHtcblx0XHRtZXNzYWdlcz8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IGNvbnRleHRzPy5bMF0/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKGJvdW5kQ29udGV4dE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYm91bmRDb250ZXh0TWVzc2FnZXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nIGZyb20gc2hvd2luZyB0aGUgbWVzc2FnZXMuXG4gKiBAcGFyYW0gbWVzc2FnZXMgQXJyYXkgb2YgbWVzc2FnZXNcbiAqIEByZXR1cm5zIEFycmF5IG9mIG1lc3NhZ2VzIGFmdGVyIHJlbW92aW5nIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2cobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdGNvbnN0IG1lc3NhZ2VzVG9CZVJlbW92ZWQgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIik7XG5cdG1lc3NhZ2VzID0gbWVzc2FnZXM/LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gIW1lc3NhZ2VzVG9CZVJlbW92ZWQ/LmluY2x1ZGVzKG1lc3NhZ2UpKTtcblx0cmV0dXJuIG1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRnZXRVSURlY2lzaW9uczogZ2V0VUlEZWNpc2lvbnMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nLFxuXHRzZXRNZXNzYWdlU3VidGl0bGU6IHNldE1lc3NhZ2VTdWJ0aXRsZSxcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0LFxuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24sXG5cdGZuRmlsdGVyVXBvbklkczogZm5GaWx0ZXJVcG9uSWRzLFxuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IGdldFRhYmxlQW5kVGFyZ2V0SW5mbyxcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSxcblx0YklzT3JwaGFuRWxlbWVudDogYklzT3JwaGFuRWxlbWVudCxcblx0Z2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lOiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUsXG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUsXG5cdGdldFRhYmxlQ29sSW5mbzogZ2V0VGFibGVDb2xJbmZvLFxuXHRnZXRUYWJsZUNvbFByb3BlcnR5OiBnZXRUYWJsZUNvbFByb3BlcnR5LFxuXHRnZXRNZXNzYWdlU3VidGl0bGU6IGdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogZGV0ZXJtaW5lQ29sdW1uSW5mbyxcblx0ZmV0Y2hDb2x1bW5JbmZvOiBmZXRjaENvbHVtbkluZm8sXG5cdGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbjogZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uLFxuXHRnZXRNZXNzYWdlUmFuazogZ2V0TWVzc2FnZVJhbmssXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5DYWxsYmFja1NldEdyb3VwTmFtZTogZm5DYWxsYmFja1NldEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZSxcblx0dXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZTogdXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZSxcblx0c2V0R3JvdXBOYW1lTFJUYWJsZTogc2V0R3JvdXBOYW1lTFJUYWJsZSxcblx0aXNDb250cm9sSW5UYWJsZTogaXNDb250cm9sSW5UYWJsZSxcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93LFxuXHRyZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcDogcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAsXG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzLFxuXHRzaG93TWVzc2FnZXNJblVJOiBzaG93TWVzc2FnZXNJblVJLFxuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6IHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCxcblx0c2hvd01lc3NhZ2VUb2FzdDogc2hvd01lc3NhZ2VUb2FzdCxcblx0c2hvd01lc3NhZ2VCb3hDb250cm9sOiBzaG93TWVzc2FnZUJveENvbnRyb2wsXG5cdGdldE1lc3NhZ2VzRm9yQ29udGV4dDogZ2V0TWVzc2FnZXNGb3JDb250ZXh0LFxuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2csXG5cdHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbDogcmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsLFxuXHRyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZzogcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2csXG5cdHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZTogc2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlLFxuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlOiB1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSxcblx0Y2xvc2VNZXNzYWdlQm94OiBjbG9zZU1lc3NhZ2VCb3gsXG5cdHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQ6IHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQsXG5cdGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzOiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyxcblx0YWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlOiBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUErQ0EsTUFBTUEsVUFBVSxHQUFHQyxJQUFJLENBQUNELFVBQVU7RUFDbEMsSUFBSUUsaUJBQXNELEdBQUcsRUFBRTtFQUMvRCxJQUFJQyxhQUFxQjtFQUN6QixJQUFJQyxXQUFtQjtFQUN2QixJQUFJQyxXQUF3Qjs7RUE0QjVCO0VBQ0E7O0VBMklBLFNBQVNDLHdCQUF3QkEsQ0FBQSxFQUFXO0lBQzNDLElBQUlDLGtCQUEwQjs7SUFFOUI7SUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxTQUFrRCxFQUFVO01BQ2pGLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBUSxHQUN0QixNQUFNLEdBQ05ELFNBQVMsQ0FBQ0MsUUFBUSxHQUNsQixXQUFXLEdBQ1hELFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQ0MsR0FBRyxDQUFDSixTQUFTLENBQUNDLFFBQVEsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFTCxTQUFT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
1603
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJtZXNzYWdlRGlhbG9nUGFyYW1ldGVyIiwiYWRkQ3VzdG9tTWVzc2FnZXMiLCJjYWxsIiwidWlEZWNpc2lvbkludGVybWl0dGVudCIsImZpbHRlcnMiLCJnZXRGaWx0ZXJzRm9yTWVzc2FnZXMiLCJnZXRNZXNzYWdlc1RvU2hvdyIsInJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwIiwicHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUiLCJoYXNFdGFnTWVzc2FnZSIsIm1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyIsImdlbmVyaWNTdWNjZXNzTWVzc2FnZSIsImFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZSIsImdldFJlc291cmNlTW9kZWwiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInJlc291cmNlTW9kZWwiLCJzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciIsInNlbGVjdGlvbkNvbnRleHRzIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJib3VuZEFjdGlvbk5hbWUiLCJlbnRpdHlTZXROYW1lIiwiZW50aXR5U2V0IiwiaW5jbHVkZXMiLCJzcGxpdCIsInN1ZmZpeFJlc291cmNlS2V5IiwiTWVzc2FnZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJjb2RlIiwicmVmZXJlbmNlTXNnIiwiY2hlY2tGYWlsZWQiLCJtc2ciLCJpZHgiLCJnZXRNZXNzYWdlIiwiZ2V0QWRkaXRpb25hbFRleHQiLCJzaG93TWVzc2FnZXNJblVJIiwidWlEZWNpc2lvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3dNZXNzYWdlVG9hc3QiLCJzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wiLCJzaG93TWVzc2FnZUJveENvbnRyb2wiLCJGaWx0ZXIiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiTkUiLCJ2YWx1ZTEiLCJpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIiLCJ0ZXN0IiwiZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nIiwiYUNvbnRyb2xJZHMiLCJpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyIsInB1c2giLCJjYXNlU2Vuc2l0aXZlIiwiRVEiLCJnZXRUYXJnZXRzIiwiYW5kIiwiX3JlZiIsInJldE1lc3NhZ2VzIiwiZ2VuZXJpY01zZ3MiLCJub25HZW5lcmljTXNncyIsImZlIiwiZmVUZWNobmljYWxEZXRhaWxzIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwicHJlVGV4dCIsInRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2UiLCJzaW5nbGVFcnJvclByZVRleHQiLCJzaW5nbGVHZW5lcmljTWVzc2FnZUlkIiwiZ2V0SWQiLCJleGlzdGluZ1RlY2hEZXRhaWxzIiwic2V0VGVjaG5pY2FsRGV0YWlscyIsIm1lc3NhZ2VDb2RlIiwidGV4dCIsImdldFNvcnRlckZvck1lc3NhZ2VzIiwiU29ydGVyIiwib2JqMSIsIm9iajIiLCJyYW5rQSIsImdldE1lc3NhZ2VSYW5rIiwicmFua0IiLCJ0cmFuc2lzdGlvbk1lc3NhZ2VzIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsIm1lc3NhZ2VzIiwibWFwIiwiY3VycmVudENvbnRleHQiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsInVpRGVjaXNpb24iLCJydW5Ub1Rlc3QiLCJoaWdoZXN0UHJpb3JpdHkiLCJoaWdoZXN0UHJpb3JpdHlUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJzdHJpY3RIYW5kbGluZ0Zsb3ciLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJtZXNzYWdlT2JqZWN0Iiwic29ydGVyIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJEaWFsb2ciLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJlc2NhcGVIYW5kbGVyIiwiY29tcGxldGlvblByb21pc2UiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsIm1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJzdGFydFRhZyIsImNsb3NlVGFnIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsIm1lc3NhZ2VIZWFkZXIiLCJmb3JtYXR0ZWRUZXh0IiwiRm9ybWF0dGVkVGV4dCIsImh0bWxUZXh0IiwiTWFuYWdlZE9iamVjdCIsImVzY2FwZVNldHRpbmdzVmFsdWUiLCJzaG93TWVzc2FnZUJveFBlclR5cGUiLCJvbkNsb3NlIiwiY2xvc2VNZXNzYWdlQm94IiwiYmluZCIsIm1lc3NhZ2VTaG93biIsImNhbGxCYWNrIiwibWVzc2FnZXNUb1JlbW92ZSIsImFsbE1zZ3MiLCJnZXREYXRhIiwiZ2VuZXJpY01lc3NhZ2UiLCJmaW5kIiwiTWVzc2FnZUJveCIsImVycm9yIiwid2FybmluZyIsInN1Y2Nlc3MiLCJpbmZvcm1hdGlvbiIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwiZ2V0UGF0aCIsImdldFBlcnNpc3RlbnQiLCJhTW9kZWxEYXRhQXJyYXkiLCJzQWN0aW9uTmFtZSIsImFNb2RlbERhdGEiLCJnZW5lcmFsR3JvdXBUZXh0IiwiaXNBIiwic2V0R3JvdXBOYW1lTFJUYWJsZSIsInNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUiLCJnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUiLCJvRWxlbSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInNFbGVtZUJpbmRpbmdQYXRoIiwiaW5kZXhPZiIsImFsbFJvd0NvbnRleHRzIiwicm93Q29udGV4dCIsImNvbnRleHRQYXRoIiwiaWRlbnRpZmllckNvbHVtbiIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJyb3dJZGVudGlmaWVyIiwiY29sdW1uUHJvcGVydHlOYW1lIiwiZ2V0VGFibGVDb2xQcm9wZXJ0eSIsInNUYWJsZVRhcmdldENvbE5hbWUiLCJnZXRUYWJsZUNvbEluZm8iLCJnZXRIZWFkZXIiLCJ1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZSIsIm1kY1RhYmxlIiwidGFyZ2V0VGFibGVJbmZvIiwiZ2V0Q29udGV4dHMiLCJjb2x1bW5OYW1lU3VmZml4Iiwic2V0QWRkaXRpb25hbFRleHQiLCJ1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSIsInN1YnNlY3Rpb24iLCJoZWFkZXJOYW1lIiwiZ2V0SGVhZGVyVmlzaWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0VGl0bGUiLCJzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUiLCJ2aWV3Q29udGV4dCIsImdyb3VwTmFtZUlzR2VuZXJhbCIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50IiwiZmluZEVsZW1lbnRzIiwib0VsZW1lbnQiLCJnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9UYXJnZXRUYWJsZUluZm8iLCJvVmlld0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9wTGF5b3V0IiwiYklzR2VuZXJhbEdyb3VwTmFtZSIsImdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0Iiwib1NlY3Rpb24iLCJzdWJTZWN0aW9ucyIsImdldFN1YlNlY3Rpb25zIiwib1N1YlNlY3Rpb24iLCJzTGFzdEFjdGlvblRleHQiLCJ0b1N0cmluZyIsImFNZXNzYWdlIiwib1RhYmxlIiwiZm5TZXRHcm91cE5hbWUiLCJnZXRUYWJsZUFuZFRhcmdldEluZm8iLCJzQ29udHJvbElkIiwiYklzQ3JlYXRpb25Sb3ciLCJvVGFibGVSb3dDb250ZXh0IiwiZ2V0Q29udHJvbElkcyIsInNJZCIsImlzQ29udHJvbEluVGFibGUiLCJvQ29udHJvbCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJ0YWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93Q29udGV4dCIsInRhYmxlVGFyZ2V0Q29sTmFtZSIsInRhYmxlIiwiaXNDcmVhdGlvblJvdyIsInRhcmdldGVkQ29udHJvbCIsIm1lc3NhZ2VTdWJ0aXRsZSIsInJvd1N1YnRpdGxlVmFsdWUiLCJ0YWJsZUNvbFByb3BlcnR5IiwiZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyIsImNvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwidGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwidGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJ0YWJsZUNvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiZ2V0VGFibGVDb2xWYWx1ZSIsIm9Db2x1bW5JbmZvIiwiZGV0ZXJtaW5lQ29sdW1uSW5mbyIsInNDb2x1bW5JbmRpY2F0b3IiLCJzQ29sdW1uVmFsdWUiLCJiaW5kaW5nQ29udGV4dCIsImtleSIsIm9Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsInBvcCIsImdldEtleUNvbHVtbkluZm8iLCJvQ29sRnJvbVRhYmxlU2V0dGluZ3MiLCJhdmFpbGFiaWxpdHkiLCJvUGFyZW50Q29udHJvbCIsInNIaWdoZXN0UHJpb3JpdHkiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwic3RhcnRzV2l0aCIsIm9Db250ZXh0IiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYmFja2VuZE1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJhQ29udGV4dHMiLCJhZGRpdGlvbmFsVGV4dCIsInN1YnRpdGxlQ29sdW1uIiwiZXJyb3JDb250ZXh0Iiwib09iamVjdFBhZ2VMYXlvdXQiLCJnZXRTZWN0aW9ucyIsImdldFZpc2libGUiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvTWVzc2FnZU9iamVjdCIsImZuRmlsdGVyVXBvbklkcyIsImEiLCJiIiwib0NvbnRleHRQYXRoIiwiZm5SZWdFeHBlc2NhcGUiLCJzIiwicmVwbGFjZSIsImNvbnRleHRQYXRoVG9Fc2NhcGUiLCJSZWdFeHAiLCJzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSIsIm9UYWJsZVRhcmdldENvbCIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJnZXRQcm9wZXJ0eUtleSIsIm9DdXN0b21Db2x1bW4iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRDb2x1bW5zRm9yIiwib0NvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJuYW1lIiwiYUNvbHVtbnMiLCJjb2x1bW5EZWZpbml0aW9uIiwicHJvcGVydHlJbmZvIiwiYklzVGFibGVUYXJnZXRDb2xWaXNpYmxlIiwib1RhYmxlQ29sSW5mbyIsIm9JdGVtIiwiY3JlYXRlU2VjdGlvbkdyb3VwTmFtZSIsInNlY3Rpb24iLCJiTXVsdGlwbGVTdWJTZWN0aW9ucyIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsImJJc09ycGhhbkVsZW1lbnQiLCJhRWxlbWVudHMiLCJvUGFyZW50RWxlbWVudCIsImdldE1lc3NhZ2VzRm9yQ29udGV4dCIsImNvbnRyb2xJZHMiLCJlcnJvckZpZWxkQ29udHJvbCIsImluZGV4IiwiSW5maW5pdHkiLCJlcnJvckNvbnRyb2xJZCIsImNvbnRyb2xJZCIsImZpZWxkUmFua2luRGlhbG9nIiwiZm9jdXMiLCJyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0IiwibWVzc2FnZXNJbk1vZGVsIiwiaXNNZXNzYWdlU3RyaXBNZXNzYWdlIiwiaXNTaW5nbGVUYXJnZXQiLCJpc1RhcmdldE1hdGNoaW5nIiwiaXNUcmFuc2l0aW9uTWVzc2FnZSIsInJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCIsImNvbnRleHRzIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJtZXNzYWdlc1RvQmVSZW1vdmVkIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJtZXNzYWdlSGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tTWVzc2FnZSwgU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTUxpYiBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvbWVzc2FnZS9NZXNzYWdlTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gTUxpYi5CdXR0b25UeXBlO1xubGV0IGFSZXNvbHZlRnVuY3Rpb25zOiAoKHBhcmFtMTogdm9pZCB8IERpYWxvZykgPT4gdm9pZClbXSA9IFtdO1xubGV0IGRpYWxvZ0NvbnRyb2w6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG1lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVdpdGhIZWFkZXIgPSBNZXNzYWdlICYge1xuXHRoZWFkZXJOYW1lPzogc3RyaW5nO1xuXHR0YXJnZXQ/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxUZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR0YWJsZUhlYWRlcj86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sSW5mb0FuZFN1YnRpdGxlVHlwZSA9IHtcblx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0c3ViVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBDb2x1bW5JbmZvVHlwZSA9IHtcblx0c0NvbHVtblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNDb2x1bW5JbmRpY2F0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFVJRWxlbWVudCA9IFwiRGlhbG9nXCIgfCBcIkJveFwiIHwgXCJUb2FzdFwiIHwgXCJOb25lXCI7XG5cbi8vIEZFIHJlbGF0ZWQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIHRvIGJlIHN0b3JlZCB3aXRoIHRoZSBtZXNzYWdlLlxuLy8gTGlrZSwgdGhpcyB3b3VsZCBiZSB1c2VkIHRvIHN0b3JlIHByZS10ZXh0IHdpdGggdGhlIG1lc3NhZ2Ugd2hlbiBpdCBpcyB0aGUgb25seSBtZXNzYWdlIHRvIGJlIHNob3duIGluIFVJLlxudHlwZSBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0gb2JqZWN0ICYge1xuXHRmZT86IHtcblx0XHRjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I/OiBzdHJpbmc7XG5cdFx0c2luZ2xlRXJyb3JQcmVUZXh0Pzogc3RyaW5nO1xuXHRcdHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ/OiBzdHJpbmc7XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlVUlEZWNpc2lvbnMgPSB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlW107XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBib29sZWFuO1xuXHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaD86IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGJvb2xlYW4sIGJUcmFuc2l0aW9uT25seT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IE1lc3NhZ2VbXTtcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKTogYm9vbGVhbjtcblx0Z2V0VUlEZWNpc2lvbnM6IChcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRcdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdFx0Y29udHJvbD86IENvbnRyb2wsXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdFx0c2hvd1N0YXRlTWVzc2FnZXM/OiBib29sZWFuLFxuXHRcdG1lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/OiBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlclxuXHQpID0+IE1lc3NhZ2VVSURlY2lzaW9ucztcblx0c2hvd01lc3NhZ2VzSW5VSTogKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IChzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiB2b2lkO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBNZXNzYWdlLCBiTWVzc2FnZURpYWxvZz86IHRydWUpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAoXG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdFx0aXNNdWx0aTQxMj86IGJvb2xlYW5cblx0KSA9PiB7XG5cdFx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRcdG9CYWNrQnV0dG9uOiBCdXR0b247XG5cdH07XG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogKG9UYWJsZTogTURDVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gdm9pZDtcblx0Z2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQ6IChvT2JqZWN0UGFnZUxheW91dDogQ29udHJvbCkgPT4gT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IChzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBVSTVFbGVtZW50W107XG5cdGZuRmlsdGVyVXBvbklkczogKGFDb250cm9sSWRzOiBzdHJpbmdbXSwgb0l0ZW06IFVJNUVsZW1lbnQpID0+IGJvb2xlYW47XG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0b01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nXG5cdCkgPT4gVGFyZ2V0VGFibGVJbmZvVHlwZTtcblx0Y3JlYXRlU2VjdGlvbkdyb3VwTmFtZTogKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRcdG9UYXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRpbmNsdWRlVGFibGVHcm91cE5hbWU/OiBib29sZWFuXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbikgPT4gdm9pZDtcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KSA9PiB2b2lkO1xuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiAoXG5cdFx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwOiAodHJhbnNpZW50TWVzc2FnZXM6IE1lc3NhZ2VbXSwgY29udGV4dDogQ29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRnZXRGaWx0ZXJzRm9yTWVzc2FnZXM6IChzaG93Qm91bmRUcmFuc2l0aW9uOiBib29sZWFuLCBzaG93U3RhdGVNZXNzYWdlcz86IGJvb2xlYW4pID0+IEZpbHRlcltdO1xuXHRzaG93TWVzc2FnZVRvYXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPjtcblx0c2hvd01lc3NhZ2VEaWFsb2dDb250cm9sOiAodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucywgcnVuVG9UZXN0PzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkIHwgRGlhbG9nPjtcblx0c2hvd01lc3NhZ2VCb3hDb250cm9sOiAodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcblx0Z2V0TWVzc2FnZXNGb3JDb250ZXh0OiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IE1lc3NhZ2VbXTtcblx0aXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2c6IChhQ29udHJvbElkczogc3RyaW5nW10pID0+IGJvb2xlYW47XG5cdHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbDogKG1lc3NhZ2VzPzogTWVzc2FnZVtdLCBjb250ZXh0PzogQ29udGV4dFtdKSA9PiB2b2lkO1xuXHRyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZzogKE1lc3NhZ2VzOiBNZXNzYWdlW10pID0+IE1lc3NhZ2VbXTtcblx0c2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlKFxuXHRcdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHR2aWV3Q29udGV4dDogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG5cdFx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRcdGFjdGlvbk5hbWU/OiBzdHJpbmdcblx0KTogYm9vbGVhbjtcblx0dXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUobWRjVGFibGU6IE1EQ1RhYmxlLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgdGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlKTogdm9pZDtcblx0dXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHRhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZVxuXHQpOiB2b2lkO1xuXHRjbG9zZU1lc3NhZ2VCb3gobWVzc2FnZVNob3duOiBNZXNzYWdlV2l0aEhlYWRlciwgY2FsbEJhY2s6ICh2YWx1ZTogdm9pZCkgPT4gdm9pZCwgc2luZ2xlR2VuZXJpY01lc3NhZ2VJZDogc3RyaW5nKTogdm9pZDtcblx0cmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dDogKG9Db250ZXh0OiBDb250ZXh0KSA9PiB2b2lkO1xuXHRjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlczogKG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdKSA9PiBib29sZWFuO1xuXHRhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2U6IChcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXJcblx0KSA9PiBNZXNzYWdlV2l0aEhlYWRlciB8IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpOiBzdHJpbmcge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHJpbmcoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpOiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH1bXSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdHJldHVybiBcIigke1wiICsgXCJkZXNjcmlwdGlvbn0gPyAoJHtcIiArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgdHlwZW9mIG9NZXNzYWdlQ291bnRdO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSwgaTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzICYmIChvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIgJiYgb1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uKSB7XG5cdFx0XHRpZiAoY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnNldFRhcmdldHMoW1wiXCJdKTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKTogdm9pZCB7XG5cdGRpYWxvZ0NvbnRyb2wuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGNvbnN0IG1zZ1ZpZXcgPSBkaWFsb2dDb250cm9sLmdldENvbnRlbnQoKVswXSBhcyBNZXNzYWdlVmlldztcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG1zZ1ZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSB3YXJuaW5nIG9yIGVycm9yIG1lc3NhZ2VzKGJvdW5kIGFuZCB1bmJvdW5kKS4uXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RlbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gWy4uLmdldE1lc3NhZ2VzKHVuZGVmaW5lZCwgdHJ1ZSksIC4uLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpXS5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKFxuXHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4sXG5cdG11bHRpNDEyPzogYm9vbGVhblxuKToge1xuXHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdG9CYWNrQnV0dG9uOiBCdXR0b247XG59IHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkJpbmRpbmcgPSAnez0gJHtkZXNjcmlwdGlvbn0gPyBcIjxodG1sPjxib2R5PlwiICsgJyArIGZuRm9ybWF0RGVzY3JpcHRpb24oKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdGNvbnN0IHRlY2huaWNhbERldGFpbHNCaW5kaW5nID1cblx0XHRcdCd7PSAke3RlY2huaWNhbERldGFpbHN9ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArICcgKyBcIjwvaHRtbD48L2JvZHk+XCIgOiBcIlwiIH0nO1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGdyb3VwTmFtZTogXCJ7aGVhZGVyTmFtZX1cIixcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkJpbmRpbmcgKyB0ZWNobmljYWxEZXRhaWxzQmluZGluZyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobXVsdGk0MTIpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJ7ZGVzY3JpcHRpb259XCIsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRtZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGUsXG5cdFx0XHRsZW5ndGg6IDk5OTlcblx0XHR9XG5cdH0pO1xuXHRtZXNzYWdlVmlldy5zZXRHcm91cEl0ZW1zKHRydWUpO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pOiB2b2lkIHtcblx0XHRcdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRtZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRtZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c/OiBib29sZWFuO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb24/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gaXNOb25UZWNobmljYWxNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdCgodGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0KHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHRlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyAhPT0gbnVsbCkpKSB8fFxuXHRcdG1lc3NhZ2UuZ2V0Q29kZSgpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdHJhbnNpdGlvbiBtZXNzYWdlcyBmb3IgY3JlYXRpbmcgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBfY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcmV0dXJucyBUcmFuc2l0aW9uIG1lc3NhZ2VzIHJlbGV2YW50IHRvIHNob3cgaW4gVUkuXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24odGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSwgc2hvd0JvdW5kVHJhbnNpdGlvbjogYm9vbGVhbiwgX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0bGV0IHRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvL2JvdW5kIFRyYW5zaXN0aW9uIE1lc3NhZ2VzXG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzLmNvbmNhdCh0aGlzLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgJ29uQmVmb3JlU2hvd01lc3NhZ2VzJyBjYWxsYmFjayB0byBsZXQgdGhlIGNhbGxlciBpbmZsdWVuY2UgdGhlIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdHJhbnNpdGlvbk1lc3NhZ2VzIFRyYW5zaXRpb24gbWVzc2FnZXMuXG4gKiBAcGFyYW0gb25CZWZvcmVTaG93TWVzc2FnZSBDYWxsYmFjay5cbiAqIEByZXR1cm5zIFNob3dNZXNzYWdlUGFyYW1ldGVycyBJbmZyb21hdGlvbiB0byBjaGFuZ2UgVUkgZGVjaXNpb24gYmFzZWQgb24gb25CZWZvcmVTaG93TWVzc2FnZXMgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyhcblx0dHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlV2l0aEhlYWRlcltdLFxuXHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnNcbik6IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW107XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlPzogRnVuY3Rpb247XG5cdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZz86IGJvb2xlYW47XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbjtcbn0ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3cgPSBbLi4udHJhbnNpdGlvbk1lc3NhZ2VzXTtcblx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPVxuXHRcdHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdHJhbnNpdGlvbk1lc3NhZ2VzWzBdLmdldENvZGUoKSA9PT0gXCI1MDNcIiA/IFwiQm94XCIgOiBcIkRpYWxvZ1wiO1xuXHRsZXQgZm5HZXRNc2dTdWJ0aXRsZTogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBzaG93Qm91bmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAob25CZWZvcmVTaG93TWVzc2FnZSkge1xuXHRcdC8vIFRoZSBjYWxsYmFjayBvbkJlZm9yZVNob3dNZXNzYWdlIGFsdGVycyB0aGUgVUlFbGVtZW50IHRvIHVzZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQoc2hvd01lc3NhZ2VEaWFsb2cgYW5kIHNob3dNZXNzYWdlQm94KS5cblx0XHRjb25zdCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nOiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIixcblx0XHRcdHNob3dNZXNzYWdlQm94OiB1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIlxuXHRcdH07XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3gsXG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyxcblx0XHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyxcblx0XHRcdGZpbHRlcmVkTWVzc2FnZXMsXG5cdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZSxcblx0XHRcdGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvblxuXHRcdH0gPSBvbkJlZm9yZVNob3dNZXNzYWdlKHRyYW5zaXRpb25NZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzKTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3ggPT09IHRydWUpIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJCb3hcIjtcblx0XHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJOb25lXCI7XG5cdFx0fVxuXHRcdHNob3dCb3VuZE1lc3NhZ2VzID0gY29udGFpbnNCb3VuZFRyYW5zaXN0aW9uO1xuXHRcdGZuR2V0TXNnU3VidGl0bGUgPSBmbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoc2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIHx8IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZmlsdGVyZWRNZXNzYWdlcyA/PyBbXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHVpRWxlbWVudFRvVXNlLFxuXHRcdG1lc3NhZ2VzVG9TaG93LFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBmbkdldE1zZ1N1YnRpdGxlLFxuXHRcdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBzaG93Qm91bmRNZXNzYWdlc1xuXHR9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBVSSBkZWNpc2lvbnMgZm9yIHNob3dpbmcgbWVzc2FnZXMuXG4gKlxuICogVGhlc2Ugc2hhbGwgY29udGFpbiB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgdGhlIFVJIGVsZW1lbnQgdG8gdXNlLlxuICogSXQgd291bGQgYWxzbyBob2xkIGluZm9ybWF0aW9uIGZvciBhZnRlciBwcm9jZXNzIGxpa2UuLlxuICogMS4gcmVmcmVzaCBjb250ZXh0IGR1ZSB0byBldGFnIG1pc21hdGNoLlxuICogMi4gZG8gd2Ugc2hvdyBib3VuZCBtZXNzYWdlcyBhbmQgaGVuY2UgY2xlYXIgdGhlbSBhZnRlciB3ZSBzaG93IHRoZSBVSSBlbGVtZW50LlxuICogQHBhcmFtIGN1c3RvbU1lc3NhZ2VzIEN1c3RvbSBtZXNzYWdlcyB0byBhZGQgdG8gbWVzc2FnZSBtb2RlbCBhbmQgc2hvdy5cbiAqIEBwYXJhbSBjb250ZXh0IEJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIGNvbmN1cnJlbnRFZGl0RmxhZyBJcyB0aGlzIGEgY29uY3VycmVudCBlZGl0IHNjZW5hcmlvLlxuICogQHBhcmFtIGNvbnRyb2wgU291cmNlIGNvbnRyb2wuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb24gd2hvc2UgcHJvY2VzcyByZXF1ZXN0ZWQgZm9yIG1lc3NhZ2VzIHRvIGJlIHNob3duLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2sgdG8gaW5mbHVlbmNlIFVJIGRlY2lzaW9uIGJlZm9yZSBjcmVhdGluZyBmaW5hbCBVSSBkZWNpc2lvbi5cbiAqIEBwYXJhbSB2aWV3VHlwZSBWaWV3IHR5cGUsIGxpc3QgcmVwb3J0IG9yIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEByZXR1cm5zIFVJIGRlY2lzaW9ucyB1c2VkIHRvIHNob3cgbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFVJRGVjaXNpb25zKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IGZhbHNlLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRjb250cm9sPzogQ29udHJvbCxcblx0YWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHR2aWV3VHlwZT86IHN0cmluZyxcblx0c2hvd1N0YXRlTWVzc2FnZXMgPSBmYWxzZSxcblx0bWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4pOiBNZXNzYWdlVUlEZWNpc2lvbnMge1xuXHQvLyBBZGQgQ3VzdG9tIG1lc3NhZ2VzXG5cdC8vIFRPRE86IFdpbGwgdGhlc2UgbWVzc2FnZXMgYmUgcGFydCBvZiB0cmFuc2l0aW9uTWVzc2FnZXM/XG5cdGlmIChjdXN0b21NZXNzYWdlcyAmJiBjdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhZGRDdXN0b21NZXNzYWdlcyhjdXN0b21NZXNzYWdlcyk7XG5cdH1cblxuXHQvLyBHZXQgdHJhbnNpc3Rpb24gTWVzc2FnZXNcblx0Y29uc3QgdHJhbnNpdGlvbk1lc3NhZ2VzID0gZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbi5jYWxsKHRoaXMsIHNob3dCb3VuZFRyYW5zaXRpb24sIGNvbnRleHQpO1xuXG5cdC8vIFVJIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEaWFsb2dcblx0Y29uc3QgdWlEZWNpc2lvbkludGVybWl0dGVudCA9IGV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcy5jYWxsKHRoaXMsIHRyYW5zaXRpb25NZXNzYWdlcywgb25CZWZvcmVTaG93TWVzc2FnZSk7XG5cdGxldCB7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSA9IFwiRGlhbG9nXCIgfSA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQ7XG5cdC8vIEdldCBGaWx0ZXJzIGZvciBVbmJvdW5kIE1lc3NhZ2VzXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSB1aURlY2lzaW9uSW50ZXJtaXR0ZW50LmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uID8/IHNob3dCb3VuZFRyYW5zaXRpb247XG5cdGNvbnN0IGZpbHRlcnMgPSBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMoc2hvd0JvdW5kVHJhbnNpdGlvbiwgc2hvd1N0YXRlTWVzc2FnZXMpO1xuXHRtZXNzYWdlc1RvU2hvdyA9IGdldE1lc3NhZ2VzVG9TaG93KGZpbHRlcnMsIG1lc3NhZ2VzVG9TaG93ID8/IFtdKTtcblx0Ly8gaGFuZGxlIGNvbnRleHQgYm91bmQgbWVzc2FnZXMsIElmIHRoZXJlIGlzIGEgc2luZ2xlIG1lc3NhZ2Ugb2Ygd2hpY2ggaXMgYm91bmRlZCB0byB0aGUgY29udGV4dCB0aGVuIHJlbW92ZSB0aGF0IGZyb20gdGhlIGRpYWxvZ1xuXHRtZXNzYWdlc1RvU2hvdyA9IHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwKG1lc3NhZ2VzVG9TaG93LCBjb250ZXh0KTtcblx0KHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0gPSBwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSh7IG1lc3NhZ2VzVG9TaG93LCB1aUVsZW1lbnRUb1VzZSB9KSk7XG5cdC8vIE1vZGlmeSBFVGFnIE1lc3NhZ2VzXG5cdGNvbnN0IGhhc0V0YWdNZXNzYWdlID0gdGhpcy5tb2RpZnlFVGFnTWVzc2FnZXNPbmx5KExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsIGNvbmN1cnJlbnRFZGl0RmxhZyk7XG5cblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDAgJiYgdWlFbGVtZW50VG9Vc2UgIT09IFwiTm9uZVwiKSB7XG5cdFx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA+IDEgJiYgY2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpKSB7XG5cdFx0XHRjb25zdCBnZW5lcmljU3VjY2Vzc01lc3NhZ2UgPSBhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2UoZ2V0UmVzb3VyY2VNb2RlbChjb250cm9sIGFzIENvbnRyb2wpLCBtZXNzYWdlRGlhbG9nUGFyYW1ldGVyKTtcblx0XHRcdG1lc3NhZ2VzVG9TaG93ID0gZ2VuZXJpY1N1Y2Nlc3NNZXNzYWdlID8gW2dlbmVyaWNTdWNjZXNzTWVzc2FnZV0gOiBbbWVzc2FnZXNUb1Nob3dbMF1dO1xuXHRcdH1cblx0XHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc0V0YWdNZXNzYWdlIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb24oKT8ubGVuZ3RoIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHdvdWxkIHNob3cgc2luZ2xlIG1lc3NhZ2UgaW4gbWVzc2FnZSBib3ggb25seSB3aGVuOlxuXHRcdFx0XHQvLyAxLiBJdCBpcyBub3QgYW4gRXRhZyBtZXNzYWdlLlxuXHRcdFx0XHQvLyAyLiBUaGVyZSBpcyBubyBtZXNzYWdlIGRlc2NyaXB0aW9uIG9yIGRlc2NyaXB0aW9uIHVybCBhdmFpbGFibGUgZm9yIGxvbmcgdGV4dC5cblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShtZXNzYWdlc1RvU2hvdywgY29udHJvbCwgYWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdGNvbnN0IGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5mbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3csXG5cdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IGhhc0V0YWdNZXNzYWdlID8gY29udGV4dCA6IHVuZGVmaW5lZCxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kVHJhbnNpdGlvblxuXHR9O1xufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlIHRvIG1lc3NhZ2UgbW9kZWwgZm9yIHJlYWRhYmlsaXR5LlxuICogQHBhcmFtIHJlc291cmNlTW9kZWwgUmVzb3VyY2UgbW9kZWwgZm9yIG1lc3NhZ2UgdGV4dFxuICogQHBhcmFtIHNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyIFNlbGVjdGVkIGNvbnRleHRzIGZvciB3aGljaCB0aGUgbWVzc2FnZSBpcyBzaG93bi5cbiAqIEByZXR1cm5zIE1lc3NhZ2Ugd2l0aCBnZW5lcmljIHN1Y2Nlc3MgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY1N1Y2Nlc3NNZXNzYWdlKFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRzaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlcj86IFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyXG4pOiBNZXNzYWdlV2l0aEhlYWRlciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNlbGVjdGlvbkNvbnRleHRzID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmFTZWxlY3RlZENvbnRleHRzO1xuXHRpZiAoc2VsZWN0aW9uQ29udGV4dHMgJiYgQXJyYXkuaXNBcnJheShzZWxlY3Rpb25Db250ZXh0cykgJiYgc2VsZWN0aW9uQ29udGV4dHM/Lmxlbmd0aCA+IDEgJiYgcmVzb3VyY2VNb2RlbCkge1xuXHRcdGxldCBhY3Rpb25OYW1lID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gc2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXI/LmVudGl0eVNldDtcblx0XHRhY3Rpb25OYW1lID0gYWN0aW9uTmFtZT8uaW5jbHVkZXMoXCIuXCIpID8gYWN0aW9uTmFtZT8uc3BsaXQoXCIuXCIpW2FjdGlvbk5hbWU/LnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXSA6IGFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBhY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2FjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiLCBbc2VsZWN0aW9uQ29udGV4dHM/Lmxlbmd0aF0sIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXG5cdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdH0pO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlzIGFsbCBhcmUgc2FtZSBzdWNjZXNzIG1lc3NhZ2VzLlxuICogQHBhcmFtIG1lc3NhZ2VzVG9TaG93IEluaXRpYWwgbWVzc2FnZXMgdG8gc2hvdy5cbiAqIEByZXR1cm5zIElmIGFsbCBhcmUgc2FtZSBzdWNjZXNzIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBjaGVja0lmQWxsQXJlU2FtZVN1Y2Nlc3NNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSk6IGJvb2xlYW4ge1xuXHRsZXQgcmVmZXJlbmNlTXNnOiBNZXNzYWdlV2l0aEhlYWRlcjtcblx0Y29uc3QgY2hlY2tGYWlsZWQgPSBtZXNzYWdlc1RvU2hvdy5zb21lKChtc2csIGlkeCkgPT4ge1xuXHRcdGlmIChtc2cuZ2V0VHlwZSgpICE9PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHQvLyBOb24gc3VjY2VzcyBtZXNzYWdlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKGlkeCA9PT0gMCkge1xuXHRcdFx0Ly8gMXN0IE1lc3NhZ2Vcblx0XHRcdHJlZmVyZW5jZU1zZyA9IG1zZztcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldENvZGUoKSA9PT0gbXNnLmdldENvZGUoKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldE1lc3NhZ2UoKSA9PT0gbXNnLmdldE1lc3NhZ2UoKSAmJlxuXHRcdFx0cmVmZXJlbmNlTXNnLmdldERlc2NyaXB0aW9uKCkgPT09IG1zZy5nZXREZXNjcmlwdGlvbigpICYmXG5cdFx0XHRyZWZlcmVuY2VNc2cuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gbXNnLmdldERlc2NyaXB0aW9uVXJsKCkgJiZcblx0XHRcdHJlZmVyZW5jZU1zZy5nZXRBZGRpdGlvbmFsVGV4dCgpID09PSBtc2cuZ2V0QWRkaXRpb25hbFRleHQoKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG5cblx0cmV0dXJuICFjaGVja0ZhaWxlZDtcbn1cblxuLyoqXG4gKiBTaG93IG1lc3NhZ2VzIGluIHRoZSBkZWNpZGVkIFVJIEVsZW1lbnQuXG4gKiBAcGFyYW0gdWlEZWNpc2lvbnMgVUkgRGVjaXNpb24gdG8gYmUgdXNlZCB0byBzaG93IHRoZSBtZXNzYWdlcy5cbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyBvciByZWplY3RzIGJhc2VkIG9uIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVUkgZWxlbWVudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VzSW5VSSh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0gPSB1aURlY2lzaW9ucztcblxuXHQvLyBTaG93IERpYWxvZyAvIE1lc3NhZ2VCb3ggLyBNZXNzYWdlVG9hc3Rcblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJUb2FzdFwiKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZVRvYXN0KG1lc3NhZ2VzVG9TaG93WzBdKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJEaWFsb2dcIikge1xuXHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wodWlEZWNpc2lvbnMpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fSBlbHNlIGlmICh1aUVsZW1lbnRUb1VzZSA9PT0gXCJCb3hcIikge1xuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb25zKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgbW9kZWwgZmlsdGVycyBmb3IgZ2V0dGluZyB0aGUgcmVsZXZhbnQgbWVzc2FnZXMuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBzaG93U3RhdGVNZXNzYWdlcyBTaG91bGQgc3RhdGUgbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcmV0dXJucyBNb2RlbCBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uOiBib29sZWFuLCBzaG93U3RhdGVNZXNzYWdlcyA9IGZhbHNlKTogRmlsdGVyW10ge1xuXHRjb25zdCBmaWx0ZXJzID0gc2hvd1N0YXRlTWVzc2FnZXMgPyBbXSA6IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGNvbnN0IGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIlwiLCB0ZXN0OiBpc05vblRlY2huaWNhbE1lc3NhZ2UgfSk7XG5cblx0aWYgKHNob3dTdGF0ZU1lc3NhZ2VzIHx8IHNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHQvLyBBZGQgdGhlIGZpbHRlciBmb3IgYm90aCBzdGF0ZSBtZXNzYWdlcyBvciBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0aWYgKHNob3dCb3VuZFRyYW5zaXRpb24gJiYgIXNob3dTdGF0ZU1lc3NhZ2VzKSB7XG5cdFx0XHQvLyBBZGQgZXh0cmEgZmlsdGVyIGlmIG9ubHkgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgc2hvd25cblx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRcdGZpbHRlcnMucHVzaChpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPbmx5IHVuYm91bmQgbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duXG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IFtcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0XHR0ZXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBcIlwiXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlKHtcblx0bWVzc2FnZXNUb1Nob3csXG5cdHVpRWxlbWVudFRvVXNlXG59OiBQaWNrPE1lc3NhZ2VVSURlY2lzaW9ucywgXCJ1aUVsZW1lbnRUb1VzZVwiIHwgXCJtZXNzYWdlc1RvU2hvd1wiPik6IFBpY2s8TWVzc2FnZVVJRGVjaXNpb25zLCBcInVpRWxlbWVudFRvVXNlXCIgfCBcIm1lc3NhZ2VzVG9TaG93XCI+IHtcblx0bGV0IHJldE1lc3NhZ2VzID0gWy4uLm1lc3NhZ2VzVG9TaG93XTtcblx0aWYgKG1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMikge1xuXHRcdC8vIFRoZXJlIGFyZSAyIG1lc3NhZ2U6XG5cdFx0Ly8gMS4gR2VuZXJpYyBlcnJvciBjaGFuZ2VzZXQgbWVzc2FnZSBhZGRlZCBieSBGRS5cblx0XHQvLyAyLiBNYWluIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgaW50ZXJhY3Rpb24uXG5cdFx0Ly8gV2UgcmVtb3ZlIHRoZSBnZW5lcmljIG1lc3NhZ2UsIHNob3cgb25seSBhbiBlbmhhbmNlZCAnTWFpbiBlcnJvciBtZXNzYWdlJyB3aXRoIGEgZ2VuZXJpYyBtZXNzc2FnZSBwcmUtdGV4dCBpbiB0aGUgbWVzc2FnZSBib3guXG5cdFx0Y29uc3QgZ2VuZXJpY01zZ3M6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkdlbmVyaWNNc2dzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRtZXNzYWdlc1RvU2hvdy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZS5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0XHRnZW5lcmljTXNncy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bm9uR2VuZXJpY01zZ3MucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoZ2VuZXJpY01zZ3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCB7IGZlOiBmZVRlY2huaWNhbERldGFpbHMgfSA9IChnZW5lcmljTXNnc1swXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHM7XG5cdFx0XHRpZiAoZmVUZWNobmljYWxEZXRhaWxzPy5jaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IpIHtcblx0XHRcdFx0Y29uc3QgcHJlVGV4dCA9IGZlVGVjaG5pY2FsRGV0YWlscz8uY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yO1xuXHRcdFx0XHRpZiAocHJlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IHRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2U6IEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdFx0XHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdFx0XHRzaW5nbGVFcnJvclByZVRleHQ6IHByZVRleHQsXG5cdFx0XHRcdFx0XHRcdHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ6IGdlbmVyaWNNc2dzWzBdLmdldElkKClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGV4aXN0aW5nVGVjaERldGFpbHMgPSBub25HZW5lcmljTXNnc1swXS5nZXRUZWNobmljYWxEZXRhaWxzKCkgPz8ge307XG5cdFx0XHRcdFx0Ly8gY29tYmluZSBleGlzdGluZyB0ZWNobmljYWwgZGV0YWlscyBpZiBhbnksIHdpdGggdGhlIGNoYW5nZSBzZXQgaW5mb3JtYXRpb24gd2Ugd2FudCB0byBhZGQuXG5cdFx0XHRcdFx0bm9uR2VuZXJpY01zZ3NbMF0uc2V0VGVjaG5pY2FsRGV0YWlscyh7IC4uLmV4aXN0aW5nVGVjaERldGFpbHMsIC4uLnRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2UgfSk7XG5cdFx0XHRcdFx0cmV0TWVzc2FnZXMgPSBub25HZW5lcmljTXNncztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1lc3NhZ2VzVG9TaG93OiByZXRNZXNzYWdlcyxcblx0XHR1aUVsZW1lbnRUb1VzZTogcmV0TWVzc2FnZXMubGVuZ3RoID09PSAxICYmIHVpRWxlbWVudFRvVXNlICE9PSBcIk5vbmVcIiA/IFwiQm94XCIgOiB1aUVsZW1lbnRUb1VzZVxuXHR9O1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY3VzdG9tIG1lc3NhZ2VzIHRvIG1lc3NhZ2UgbW9kZWwuXG4gKiBAcGFyYW0gY3VzdG9tTWVzc2FnZXMgQ3VzdG9tIG1lc3NhZ2VzIHRvIGFkZC5cbiAqL1xuZnVuY3Rpb24gYWRkQ3VzdG9tTWVzc2FnZXMoY3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSk6IHZvaWQge1xuXHRjdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogQ3VzdG9tTWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFNvcnRlckZvck1lc3NhZ2VzKCk6IFNvcnRlciB7XG5cdHJldHVybiBuZXcgU29ydGVyKFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAob2JqMTogTWVzc2FnZVdpdGhIZWFkZXIsIG9iajI6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB7XG5cdFx0Y29uc3QgcmFua0EgPSBnZXRNZXNzYWdlUmFuayhvYmoxKTtcblx0XHRjb25zdCByYW5rQiA9IGdldE1lc3NhZ2VSYW5rKG9iajIpO1xuXG5cdFx0aWYgKHJhbmtBIDwgcmFua0IpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKHJhbmtBID4gcmFua0IpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzVG9TaG93KGZpbHRlcnM6IEZpbHRlcltdLCB0cmFuc2lzdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10pOiBNZXNzYWdlV2l0aEhlYWRlcltdIHtcblx0bGV0IG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdID0gWy4uLnRyYW5zaXN0aW9uTWVzc2FnZXNdO1xuXHRjb25zdCBsaXN0QmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlcnMpLFxuXHRcdGN1cnJlbnRDb250ZXh0cyA9IGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRpZiAoY3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBpZiBmYWxzZSwgc2hvdyBtZXNzYWdlcyBpbiBkaWFsb2dcblx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0Ly8gU28gd2UgY3JlYXRlIG5ldyBqc29uIG1vZGVsIHRvIHVzZSBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdGNvbnN0IG9VbmlxdWVPYmo6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0XHRtZXNzYWdlc1RvU2hvdyA9IG1lc3NhZ2VzLmNvbmNhdChtZXNzYWdlc1RvU2hvdykuZmlsdGVyKGZ1bmN0aW9uIChvYmo6IE1lc3NhZ2UpIHtcblx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdHJldHVybiAhb1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gJiYgKG9VbmlxdWVPYmpbb2JqLmdldElkKCldID0gdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1lc3NhZ2VzVG9TaG93O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZVRvYXN0KG1lc3NhZ2U6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3cobWVzc2FnZS5nZXRNZXNzYWdlKCkpO1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlKTtcblx0XHRyZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3QgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IERpYWxvZz4ge1xuXHRsZXQgaGlnaGVzdFByaW9yaXR5O1xuXHRsZXQgaGlnaGVzdFByaW9yaXR5VGV4dDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAocGFyYW0xOiB2b2lkIHwgRGlhbG9nKSA9PiB2b2lkKSB7XG5cdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGbG93ID0gZmFsc2U7XG5cdFx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdywgY29udGV4dE5lZWRzRXRhZ1JlZnJlc2ggfSA9IHVpRGVjaXNpb247XG5cdFx0Y29uc3QgbWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbChtZXNzYWdlc1RvU2hvdyk7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhtZXNzYWdlRGlhbG9nTW9kZWwsIHN0cmljdEhhbmRsaW5nRmxvdyk7XG5cdFx0Y29uc3Qgc29ydGVyID0gZ2V0U29ydGVyRm9yTWVzc2FnZXMoKTtcblx0XHQobWVzc2FnZU9iamVjdC5tZXNzYWdlVmlldy5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZykuc29ydChzb3J0ZXIpO1xuXG5cdFx0aWYgKCFkaWFsb2dDb250cm9sIHx8ICFkaWFsb2dDb250cm9sLmlzT3BlbigpKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoY29tcGxldGlvblByb21pc2U6IHsgcmVzb2x2ZTogRnVuY3Rpb247IHJlamVjdDogRnVuY3Rpb24gfSk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1Nob3cpO1xuXHRcdFx0XHRcdGNvbXBsZXRpb25Qcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb0JhY2tCdXR0b25dXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiMjEuNWVtXCIsXG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0Y2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSZXNvbHZlRnVuY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRpdGVtKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRpYWxvZ0NvbnRyb2wucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdGRpYWxvZ0NvbnRyb2wuYWRkQ29udGVudChtZXNzYWdlVmlldyk7XG5cblx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2gpIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdGlmIChjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLnJlZnJlc2goKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlhbG9nQ29udHJvbC5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHR9XG5cdFx0aGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG1lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdGhpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coaGlnaGVzdFByaW9yaXR5KTtcblx0XHRkaWFsb2dDb250cm9sLnNldFN0YXRlKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0KChkaWFsb2dDb250cm9sLmdldEN1c3RvbUhlYWRlcigpIGFzIEJhcikuZ2V0Q29udGVudE1pZGRsZSgpWzBdIGFzIFRleHQpLnNldFRleHQoaGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0bWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0ZGlhbG9nQ29udHJvbC5vcGVuKCk7XG5cdFx0aWYgKHJ1blRvVGVzdCkge1xuXHRcdFx0cmVzb2x2ZShkaWFsb2dDb250cm9sKTtcblx0XHR9XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZUJveENvbnRyb2wodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IHsgbWVzc2FnZXNUb1Nob3cgfSA9IHVpRGVjaXNpb247XG5cdFx0Y29uc3QgbWVzc2FnZVRvU2hvdyA9IG1lc3NhZ2VzVG9TaG93WzBdO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzID0gbWVzc2FnZVRvU2hvdy5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgeyBzaW5nbGVHZW5lcmljTWVzc2FnZUlkLCBzaW5nbGVFcnJvclByZVRleHQgfSA9IChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKT8uZmUgPz8ge307XG5cdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0UmV0cnlBZnRlck1lc3NhZ2UobWVzc2FnZVRvU2hvdywgdHJ1ZSk7XG5cdFx0Ly8gSWYgaXQgaXMgYSByZXRyeSBtZXNzYWdlLCB0aGVuIGl0IG5lZWRzIHRvIGhhdmUgdGVjaG5pY2FsIGRldGFpbHMgdG8gc2hvdyBpdC5cblx0XHRjb25zdCBzaG93TWVzc2FnZUJveCA9IHJldHJ5QWZ0ZXJNZXNzYWdlID8gbWVzc2FnZVRlY2huaWNhbERldGFpbHMgOiB0cnVlO1xuXHRcdGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdFx0Y29uc3Qgc3RhcnRUYWcgPSBcIjxodG1sPjxib2R5PjxzcGFuIHN0eWxlPSd3aGl0ZS1zcGFjZTpwcmUtd3JhcCc+XCIsXG5cdFx0XHRcdGNsb3NlVGFnID0gXCI8L3NwYW4+PC9ib2R5PjwvaHRtbD5cIjtcblx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gc3RhcnRUYWc7XG5cblx0XHRcdC8vIEFkZGluZyBwcmUtdGV4dCBmb3IgdGhlIG1lc3NhZ2VzXG5cdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9PGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnI+PC9icj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHNpbmdsZUVycm9yUHJlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSAobWVzc2FnZVRvU2hvdyBhcyBNZXNzYWdlV2l0aEhlYWRlcik/LltcImhlYWRlck5hbWVcIl1cblx0XHRcdFx0XHRcdD8gYCR7KG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdfTpgXG5cdFx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9JHtzaW5nbGVFcnJvclByZVRleHR9PGJyLz48YnIvPiR7bWVzc2FnZUhlYWRlcn0gYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGRpbmcgdGhlIG1haW4gZXJyb3IgbWVzc2FnZS5cblx0XHRcdGlmIChtZXNzYWdlVG9TaG93LmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyArIG1lc3NhZ2VUb1Nob3cuZ2V0QWRkaXRpb25hbFRleHQoKVxuXHRcdFx0XHR9OiAke21lc3NhZ2VUb1Nob3cuZ2V0TWVzc2FnZSgpfSR7Y2xvc2VUYWd9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgbWVzc2FnZVRvU2hvdy5nZXRNZXNzYWdlKCl9JHtjbG9zZVRhZ31gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dCA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0aHRtbFRleHQ6IE1hbmFnZWRPYmplY3QuZXNjYXBlU2V0dGluZ3NWYWx1ZShmb3JtYXR0ZWRUZXh0U3RyaW5nKVxuXHRcdFx0fSk7XG5cblx0XHRcdHNob3dNZXNzYWdlQm94UGVyVHlwZShcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGNsb3NlTWVzc2FnZUJveC5iaW5kKG51bGwsIG1lc3NhZ2VUb1Nob3csIHJlc29sdmUsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VUb1Nob3dcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VNZXNzYWdlQm94KG1lc3NhZ2VTaG93bjogTWVzc2FnZVdpdGhIZWFkZXIsIGNhbGxCYWNrOiAodmFsdWU6IHZvaWQpID0+IHZvaWQsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgbWVzc2FnZXNUb1JlbW92ZSA9IFttZXNzYWdlU2hvd25dO1xuXHRpZiAoc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCkge1xuXHRcdGNvbnN0IGFsbE1zZ3MgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gYWxsTXNncy5maW5kKChtc2c6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBtc2cuZ2V0SWQoKSA9PT0gc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCk7XG5cdFx0aWYgKGdlbmVyaWNNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlc1RvUmVtb3ZlLnB1c2goZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1JlbW92ZSk7XG5cdGNhbGxCYWNrKHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHNob3dNZXNzYWdlQm94UGVyVHlwZShmb3JtYXR0ZWRUZXh0OiBzdHJpbmcsIGNsb3NlOiB7IG9uQ2xvc2U6IEZ1bmN0aW9uIH0sIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0c3dpdGNoIChtZXNzYWdlLmdldFR5cGUoKSkge1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuRXJyb3I6XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XG5cdFx0XHRNZXNzYWdlQm94LnN1Y2Nlc3MoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjpcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24oZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdE1lc3NhZ2VCb3guc2hvdyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAodHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRjb25zdCBib3VuZENvbnRleHRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdHRyYW5zaXRpb25NZXNzYWdlcz8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IGNvbnRleHQ/LmdldFBhdGgoKSAmJiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzPy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlICE9PSBib3VuZENvbnRleHRNZXNzYWdlc1swXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCBhcyBWaWV3KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqIEBwYXJhbSBvRWxlbVxuICogQHBhcmFtIGFNb2RlbERhdGFcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVMUlRhYmxlKG9FbGVtOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtICYmIChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpO1xuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAkeyhvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb1Jvd0JpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBgJHtyb3dDb250ZXh0LmdldFBhdGgoKX0vYDtcblx0XHRcdFx0XHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG9FbGVtLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uICYmIHJvd0NvbnRleHQuZ2V0T2JqZWN0KClbaWRlbnRpZmllckNvbHVtbl07XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uUHJvcGVydHlOYW1lID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sUHJvcGVydHkob0VsZW0sIGFNb2RlbERhdGEsIGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRjb25zdCB7IHNUYWJsZVRhcmdldENvbE5hbWUgfSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbEluZm8ob0VsZW0gYXMgTURDVGFibGUsIGNvbHVtblByb3BlcnR5TmFtZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0YXJnZXQgaGFzIHNvbWUgY29sdW1uIG5hbWUgYW5kIGNvbHVtbiBpcyB2aXNpYmxlIGluIFVJXG5cdFx0XHRcdFx0aWYgKGNvbHVtblByb3BlcnR5TmFtZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBoZWFkZXIgd2lsbCBiZSByb3cgSWRlbnRpZmllciwgaWYgZm91bmQgZnJvbSBhYm92ZSBjb2RlIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGFibGUgbmFtZVxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSByb3dJZGVudGlmaWVyID8gYCAke3Jvd0lkZW50aWZpZXJ9YCA6IChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0SGVhZGVyKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIGNvbHVtbiBkYXRhIG5vdCBmb3VuZCAobWF5IGJlIHRoZSBjb2x1bW4gaXMgaGlkZGVuKSwgYWRkIGdyb3VwaW5nIGFzIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG1kY1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogXCJcIjtcblx0XHRcdFx0Y29uc3QgY29sdW1uTmFtZVN1ZmZpeCA9IHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lID8gYCwgJHt0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZX1gIDogXCJcIjtcblx0XHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmICh0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdG1lc3NhZ2Uuc2V0QWRkaXRpb25hbFRleHQoYCR7dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWV9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8odGFibGVSb3dDb250ZXh0KTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZEFQSSkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcGFyYW0gaW5jbHVkZVRhYmxlR3JvdXBOYW1lXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRpbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciAmJiBpbmNsdWRlVGFibGVHcm91cE5hbWVcblx0XHRcdD8gYCwgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke29UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXJ9YFxuXHRcdFx0OiBcIlwiKVxuXHQpO1xufVxuXG5mdW5jdGlvbiBiSXNPcnBoYW5FbGVtZW50KG9FbGVtZW50OiBVSTVFbGVtZW50LCBhRWxlbWVudHM6IFVJNUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIWFFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChvRWxlbSkge1xuXHRcdGxldCBvUGFyZW50RWxlbWVudCA9IG9FbGVtZW50LmdldFBhcmVudCgpO1xuXHRcdHdoaWxlIChvUGFyZW50RWxlbWVudCAmJiBvUGFyZW50RWxlbWVudCAhPT0gb0VsZW0pIHtcblx0XHRcdG9QYXJlbnRFbGVtZW50ID0gb1BhcmVudEVsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyZW50RWxlbWVudCA/IHRydWUgOiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmaWx0ZXJzIGFuZCBnaXZlcyBiYWNrIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgY29udGV4dCBwYXNzZWQuXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHJldHVybnMgTWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRm9yQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogTWVzc2FnZVtdIHtcblx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPiAwICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0fSlcblx0KTtcblx0Y29uc3QgY3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdHJldHVybiBjdXJyZW50Q29udGV4dHMubWFwKChjdXJyZW50Q29udGV4dCkgPT4gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCkpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYm9vbGVhbiB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIHByZXNlbnQgaW4gdGhlIGRpYWxvZyBiYXNlZCBvbiB0aGUgY29udHJvbCBJZHMuXG4gKiBAcGFyYW0gY29udHJvbElkcyBBcnJheSBvZiBjb250cm9sIElkc1xuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgdGFyZ2V0IHByZXNlbnQgaW4gdGhlIGRpYWxvZy5cbiAqL1xuZnVuY3Rpb24gaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2coY29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0bGV0IG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgZXJyb3JGaWVsZENvbnRyb2w7XG5cdGNvbnN0IGluZGV4ID0gSW5maW5pdHk7XG5cdGlmIChjb250cm9sSWRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKTtcblx0XHRlcnJvckZpZWxkQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkc1swXSkgYXMgVUk1RWxlbWVudDtcblx0fSBlbHNlIHtcblx0XHRsZXQgZXJyb3JDb250cm9sSWQ7XG5cdFx0Y29udHJvbElkcy5mb3JFYWNoKChjb250cm9sSWQpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZCk7XG5cdFx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRlcnJvckNvbnRyb2xJZCA9IGNvbnRyb2xJZDtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGVycm9yQ29udHJvbElkKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9IEluZmluaXR5O1xuXHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbD8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIFRyYW5zaXRpb24gbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQgcGF0aCB3aGVuIHRoZSBvYmplY3QgcGFnZSBpcyBjbG9zZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIGFyZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0KG9Db250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IGlzTWVzc2FnZVN0cmlwTWVzc2FnZTogTWVzc2FnZVtdID0gW107XG5cblx0bWVzc2FnZXNJbk1vZGVsPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgaXNTaW5nbGVUYXJnZXQgPSBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDE7XG5cdFx0Y29uc3QgaXNUYXJnZXRNYXRjaGluZyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGlzVHJhbnNpdGlvbk1lc3NhZ2UgPSBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZTtcblxuXHRcdGlmIChpc1NpbmdsZVRhcmdldCAmJiBpc1RhcmdldE1hdGNoaW5nICYmIGlzVHJhbnNpdGlvbk1lc3NhZ2UpIHtcblx0XHRcdGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5wdXNoKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGlzTWVzc2FnZVN0cmlwTWVzc2FnZS5sZW5ndGggPT09IDEpIHtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoaXNNZXNzYWdlU3RyaXBNZXNzYWdlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2hlbiB0aGVyZSBpcyBlcnJvciBvbiB0aGUgZGlhbG9nIGFuZCB3aGVuIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dHM/OiBDb250ZXh0W10pOiB2b2lkIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoY29udGV4dHM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG1lc3NhZ2VzPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gY29udGV4dHM/LlswXT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhib3VuZENvbnRleHRNZXNzYWdlcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgZnJvbSBzaG93aW5nIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2YgbWVzc2FnZXMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuICovXG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0Y29uc3QgbWVzc2FnZXNUb0JlUmVtb3ZlZCA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZXNUb0JlUmVtb3ZlZD8uaW5jbHVkZXMobWVzc2FnZSkpO1xuXHRyZXR1cm4gbWVzc2FnZXM7XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgRmlvcmkgTWVzc2FnZSBIYW5kbGluZ1xuICogQG5hbWVzcGFjZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdGdldFVJRGVjaXNpb25zOiBnZXRVSURlY2lzaW9ucyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiBnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24sXG5cdGdldE1lc3NhZ2VSYW5rOiBnZXRNZXNzYWdlUmFuayxcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3M6IGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3csXG5cdHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwOiByZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcCxcblx0Z2V0RmlsdGVyc0Zvck1lc3NhZ2VzOiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMsXG5cdHNob3dNZXNzYWdlc0luVUk6IHNob3dNZXNzYWdlc0luVUksXG5cdHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbDogc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sLFxuXHRzaG93TWVzc2FnZVRvYXN0OiBzaG93TWVzc2FnZVRvYXN0LFxuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6IHNob3dNZXNzYWdlQm94Q29udHJvbCxcblx0Z2V0TWVzc2FnZXNGb3JDb250ZXh0OiBnZXRNZXNzYWdlc0ZvckNvbnRleHQsXG5cdGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nOiBpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyxcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiByZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwsXG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyxcblx0c2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUsXG5cdHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlOiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZSxcblx0dXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGU6IHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlLFxuXHRjbG9zZU1lc3NhZ2VCb3g6IGNsb3NlTWVzc2FnZUJveCxcblx0cmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dDogcmVtb3ZlVHJhbnNpc3Rpb25NZXNzYWdlRm9yQ29udGV4dCxcblx0Y2hlY2tJZkFsbEFyZVNhbWVTdWNjZXNzTWVzc2FnZXM6IGNoZWNrSWZBbGxBcmVTYW1lU3VjY2Vzc01lc3NhZ2VzLFxuXHRhZGRHZW5lcmljU3VjY2Vzc01lc3NhZ2U6IGFkZEdlbmVyaWNTdWNjZXNzTWVzc2FnZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVzc2FnZUhhbmRsaW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQStDQSxNQUFNQSxVQUFVLEdBQUdDLElBQUksQ0FBQ0QsVUFBVTtFQUNsQyxJQUFJRSxpQkFBc0QsR0FBRyxFQUFFO0VBQy9ELElBQUlDLGFBQXFCO0VBQ3pCLElBQUlDLFdBQW1CO0VBQ3ZCLElBQUlDLFdBQXdCOztFQTRCNUI7RUFDQTs7RUEySUEsU0FBU0Msd0JBQXdCQSxDQUFBLEVBQVc7SUFDM0MsSUFBSUMsa0JBQTBCOztJQUU5QjtJQUNBLFNBQVNDLFlBQVlBLENBQUNDLFNBQWtELEVBQVU7TUFDakYsT0FBT0EsU0FBUyxDQUFDQyxRQUFRLEdBQ3RCLE1BQU0sR0FDTkQsU0FBUyxDQUFDQyxRQUFRLEdBQ2xCLFdBQVcsR0FDWEQsU0FBUyxDQUFDQyxRQUFRLENBQUNDLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDQyxHQUFHLENBQUNKLFNB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