@angular/language-service 11.1.2 → 11.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v11.1.2
2
+ * @license Angular v11.2.0
3
3
  * Copyright Google LLC All Rights Reserved.
4
4
  * License: MIT
5
5
  */
@@ -13675,6 +13675,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13675
13675
  return new Chain(this.span(start), this.sourceSpan(start), exprs);
13676
13676
  }
13677
13677
  parsePipe() {
13678
+ const start = this.inputIndex;
13678
13679
  let result = this.parseExpression();
13679
13680
  if (this.consumeOptionalOperator('|')) {
13680
13681
  if (this.parseAction) {
@@ -13710,7 +13711,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13710
13711
  // If there are additional expressions beyond the name, then the artificial end for the
13711
13712
  // name is no longer relevant.
13712
13713
  }
13713
- const { start } = result.span;
13714
13714
  result = new BindingPipe(this.span(start), this.sourceSpan(start, fullSpanEnd), result, nameId, args, nameSpan);
13715
13715
  } while (this.consumeOptionalOperator('|'));
13716
13716
  }
@@ -13742,26 +13742,27 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13742
13742
  }
13743
13743
  parseLogicalOr() {
13744
13744
  // '||'
13745
+ const start = this.inputIndex;
13745
13746
  let result = this.parseLogicalAnd();
13746
13747
  while (this.consumeOptionalOperator('||')) {
13747
13748
  const right = this.parseLogicalAnd();
13748
- const { start } = result.span;
13749
13749
  result = new Binary(this.span(start), this.sourceSpan(start), '||', result, right);
13750
13750
  }
13751
13751
  return result;
13752
13752
  }
13753
13753
  parseLogicalAnd() {
13754
13754
  // '&&'
13755
+ const start = this.inputIndex;
13755
13756
  let result = this.parseEquality();
13756
13757
  while (this.consumeOptionalOperator('&&')) {
13757
13758
  const right = this.parseEquality();
13758
- const { start } = result.span;
13759
13759
  result = new Binary(this.span(start), this.sourceSpan(start), '&&', result, right);
13760
13760
  }
13761
13761
  return result;
13762
13762
  }
13763
13763
  parseEquality() {
13764
13764
  // '==','!=','===','!=='
13765
+ const start = this.inputIndex;
13765
13766
  let result = this.parseRelational();
13766
13767
  while (this.next.type == TokenType$1.Operator) {
13767
13768
  const operator = this.next.strValue;
@@ -13772,7 +13773,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13772
13773
  case '!==':
13773
13774
  this.advance();
13774
13775
  const right = this.parseRelational();
13775
- const { start } = result.span;
13776
13776
  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
13777
13777
  continue;
13778
13778
  }
@@ -13782,6 +13782,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13782
13782
  }
13783
13783
  parseRelational() {
13784
13784
  // '<', '>', '<=', '>='
13785
+ const start = this.inputIndex;
13785
13786
  let result = this.parseAdditive();
13786
13787
  while (this.next.type == TokenType$1.Operator) {
13787
13788
  const operator = this.next.strValue;
@@ -13792,7 +13793,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13792
13793
  case '>=':
13793
13794
  this.advance();
13794
13795
  const right = this.parseAdditive();
13795
- const { start } = result.span;
13796
13796
  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
13797
13797
  continue;
13798
13798
  }
@@ -13802,6 +13802,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13802
13802
  }
13803
13803
  parseAdditive() {
13804
13804
  // '+', '-'
13805
+ const start = this.inputIndex;
13805
13806
  let result = this.parseMultiplicative();
13806
13807
  while (this.next.type == TokenType$1.Operator) {
13807
13808
  const operator = this.next.strValue;
@@ -13810,7 +13811,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13810
13811
  case '-':
13811
13812
  this.advance();
13812
13813
  let right = this.parseMultiplicative();
13813
- const { start } = result.span;
13814
13814
  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
13815
13815
  continue;
13816
13816
  }
@@ -13820,6 +13820,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13820
13820
  }
13821
13821
  parseMultiplicative() {
13822
13822
  // '*', '%', '/'
13823
+ const start = this.inputIndex;
13823
13824
  let result = this.parsePrefix();
13824
13825
  while (this.next.type == TokenType$1.Operator) {
13825
13826
  const operator = this.next.strValue;
@@ -13829,7 +13830,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13829
13830
  case '/':
13830
13831
  this.advance();
13831
13832
  let right = this.parsePrefix();
13832
- const { start } = result.span;
13833
13833
  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
13834
13834
  continue;
13835
13835
  }
@@ -13860,14 +13860,14 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13860
13860
  return this.parseCallChain();
13861
13861
  }
13862
13862
  parseCallChain() {
13863
+ const start = this.inputIndex;
13863
13864
  let result = this.parsePrimary();
13864
- const resultStart = result.span.start;
13865
13865
  while (true) {
13866
13866
  if (this.consumeOptionalCharacter($PERIOD)) {
13867
- result = this.parseAccessMemberOrMethodCall(result, false);
13867
+ result = this.parseAccessMemberOrMethodCall(result, start, false);
13868
13868
  }
13869
13869
  else if (this.consumeOptionalOperator('?.')) {
13870
- result = this.parseAccessMemberOrMethodCall(result, true);
13870
+ result = this.parseAccessMemberOrMethodCall(result, start, true);
13871
13871
  }
13872
13872
  else if (this.consumeOptionalCharacter($LBRACKET)) {
13873
13873
  this.withContext(ParseContextFlags.Writable, () => {
@@ -13880,11 +13880,10 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13880
13880
  this.expectCharacter($RBRACKET);
13881
13881
  if (this.consumeOptionalOperator('=')) {
13882
13882
  const value = this.parseConditional();
13883
- result = new KeyedWrite(this.span(resultStart), this.sourceSpan(resultStart), result, key, value);
13883
+ result = new KeyedWrite(this.span(start), this.sourceSpan(start), result, key, value);
13884
13884
  }
13885
13885
  else {
13886
- result =
13887
- new KeyedRead(this.span(resultStart), this.sourceSpan(resultStart), result, key);
13886
+ result = new KeyedRead(this.span(start), this.sourceSpan(start), result, key);
13888
13887
  }
13889
13888
  });
13890
13889
  }
@@ -13893,11 +13892,10 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13893
13892
  const args = this.parseCallArguments();
13894
13893
  this.rparensExpected--;
13895
13894
  this.expectCharacter($RPAREN);
13896
- result =
13897
- new FunctionCall(this.span(resultStart), this.sourceSpan(resultStart), result, args);
13895
+ result = new FunctionCall(this.span(start), this.sourceSpan(start), result, args);
13898
13896
  }
13899
13897
  else if (this.consumeOptionalOperator('!')) {
13900
- result = new NonNullAssert(this.span(resultStart), this.sourceSpan(resultStart), result);
13898
+ result = new NonNullAssert(this.span(start), this.sourceSpan(start), result);
13901
13899
  }
13902
13900
  else {
13903
13901
  return result;
@@ -13944,7 +13942,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13944
13942
  return this.parseLiteralMap();
13945
13943
  }
13946
13944
  else if (this.next.isIdentifier()) {
13947
- return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start), this.sourceSpan(start)), false);
13945
+ return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start), this.sourceSpan(start)), start, false);
13948
13946
  }
13949
13947
  else if (this.next.isNumber()) {
13950
13948
  const value = this.next.toNumber();
@@ -13996,8 +13994,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13996
13994
  }
13997
13995
  return new LiteralMap(this.span(start), this.sourceSpan(start), keys, values);
13998
13996
  }
13999
- parseAccessMemberOrMethodCall(receiver, isSafe = false) {
14000
- const start = receiver.span.start;
13997
+ parseAccessMemberOrMethodCall(receiver, start, isSafe = false) {
14001
13998
  const nameStart = this.inputIndex;
14002
13999
  const id = this.withContext(ParseContextFlags.Writable, () => {
14003
14000
  var _a;
@@ -15230,6 +15227,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
15230
15227
  else if (identifier.length === 0) {
15231
15228
  this.reportError(`Reference does not have a name`, sourceSpan);
15232
15229
  }
15230
+ else if (references.some(reference => reference.name === identifier)) {
15231
+ this.reportError(`Reference "#${identifier}" is defined more than once`, sourceSpan);
15232
+ }
15233
15233
  references.push(new Reference(identifier, value, sourceSpan, keySpan, valueSpan));
15234
15234
  }
15235
15235
  parseAssignmentEvent(name, expression, sourceSpan, valueSpan, targetMatchableAttrs, boundEvents, keySpan) {
@@ -19021,7 +19021,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
19021
19021
  * Use of this source code is governed by an MIT-style license that can be
19022
19022
  * found in the LICENSE file at https://angular.io/license
19023
19023
  */
19024
- const VERSION$1 = new Version('11.1.2');
19024
+ const VERSION$1 = new Version('11.2.0');
19025
19025
 
19026
19026
  /**
19027
19027
  * @license
@@ -27602,6 +27602,14 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
27602
27602
  throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);
27603
27603
  }
27604
27604
  }
27605
+ function assertProjectionSlots(lView, errMessage) {
27606
+ assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');
27607
+ assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage ||
27608
+ 'Components with projection nodes (<ng-content>) must have projection slots defined.');
27609
+ }
27610
+ function assertParentView(lView, errMessage) {
27611
+ assertDefined(lView, errMessage || 'Component views should always have a parent view (component\'s host view)');
27612
+ }
27605
27613
  /**
27606
27614
  * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
27607
27615
  * NodeInjector data structure.
@@ -31041,6 +31049,16 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
31041
31049
  function nativeParentNode(renderer, node) {
31042
31050
  return (isProceduralRenderer(renderer) ? renderer.parentNode(node) : node.parentNode);
31043
31051
  }
31052
+ function getProjectionNodes(lView, tNode) {
31053
+ if (tNode !== null) {
31054
+ const componentView = lView[DECLARATION_COMPONENT_VIEW];
31055
+ const componentHost = componentView[T_HOST];
31056
+ const slotIdx = tNode.projection;
31057
+ ngDevMode && assertProjectionSlots(lView);
31058
+ return componentHost.projection[slotIdx];
31059
+ }
31060
+ return null;
31061
+ }
31044
31062
  /**
31045
31063
  * Removes a native node itself using a given renderer. To remove the node we are looking up its
31046
31064
  * parent from the native tree as not all platforms / browsers support the equivalent of
@@ -35029,7 +35047,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
35029
35047
  /**
35030
35048
  * @publicApi
35031
35049
  */
35032
- const VERSION$2 = new Version$1('11.1.2');
35050
+ const VERSION$2 = new Version$1('11.2.0');
35033
35051
 
35034
35052
  /**
35035
35053
  * @license
@@ -35281,24 +35299,25 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
35281
35299
  // Remove the record from the collection since we know it does not match the item.
35282
35300
  this._remove(record);
35283
35301
  }
35284
- // Attempt to see if we have seen the item before.
35285
- record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
35302
+ // See if we have evicted the item, which used to be at some anterior position of _itHead list.
35303
+ record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
35286
35304
  if (record !== null) {
35287
- // We have seen this before, we need to move it forward in the collection.
35288
- // But first we need to check if identity changed, so we can update in view if necessary
35305
+ // It is an item which we have evicted earlier: reinsert it back into the list.
35306
+ // But first we need to check if identity changed, so we can update in view if necessary.
35289
35307
  if (!Object.is(record.item, item))
35290
35308
  this._addIdentityChange(record, item);
35291
- this._moveAfter(record, previousRecord, index);
35309
+ this._reinsertAfter(record, previousRecord, index);
35292
35310
  }
35293
35311
  else {
35294
- // Never seen it, check evicted list.
35295
- record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
35312
+ // Attempt to see if the item is at some posterior position of _itHead list.
35313
+ record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
35296
35314
  if (record !== null) {
35297
- // It is an item which we have evicted earlier: reinsert it back into the list.
35298
- // But first we need to check if identity changed, so we can update in view if necessary
35315
+ // We have the item in _itHead at/after `index` position. We need to move it forward in the
35316
+ // collection.
35317
+ // But first we need to check if identity changed, so we can update in view if necessary.
35299
35318
  if (!Object.is(record.item, item))
35300
35319
  this._addIdentityChange(record, item);
35301
- this._reinsertAfter(record, previousRecord, index);
35320
+ this._moveAfter(record, previousRecord, index);
35302
35321
  }
35303
35322
  else {
35304
35323
  // It is a new item: add it.
@@ -36129,19 +36148,13 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
36129
36148
  }
36130
36149
  }
36131
36150
  else if (tNodeType & 16 /* Projection */) {
36132
- const componentView = lView[DECLARATION_COMPONENT_VIEW];
36133
- const componentHost = componentView[T_HOST];
36134
- const slotIdx = tNode.projection;
36135
- ngDevMode &&
36136
- assertDefined(componentHost.projection, 'Components with projection nodes (<ng-content>) must have projection slots defined.');
36137
- const nodesInSlot = componentHost.projection[slotIdx];
36151
+ const nodesInSlot = getProjectionNodes(lView, tNode);
36138
36152
  if (Array.isArray(nodesInSlot)) {
36139
36153
  result.push(...nodesInSlot);
36140
36154
  }
36141
36155
  else {
36142
- const parentView = getLViewParent(componentView);
36143
- ngDevMode &&
36144
- assertDefined(parentView, 'Component views should always have a parent view (component\'s host view)');
36156
+ const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
36157
+ ngDevMode && assertParentView(parentView);
36145
36158
  collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);
36146
36159
  }
36147
36160
  }
@@ -52,7 +52,7 @@
52
52
  for (var definitionMetas_1 = tslib_1.__values(definitionMetas), definitionMetas_1_1 = definitionMetas_1.next(); !definitionMetas_1_1.done; definitionMetas_1_1 = definitionMetas_1.next()) {
53
53
  var definitionMeta = definitionMetas_1_1.value;
54
54
  // The `$event` of event handlers would point to the $event parameter in the shim file, as in
55
- // `_outputHelper(_t3["x"]).subscribe(function ($event): any { $event }) ;`
55
+ // `_t3["x"].subscribe(function ($event): any { $event }) ;`
56
56
  // If we wanted to return something for this, it would be more appropriate for something like
57
57
  // `getTypeDefinition`.
58
58
  if (utils_1.isDollarEvent(definitionMeta.node)) {
@@ -343,4 +343,4 @@
343
343
  };
344
344
  }
345
345
  });
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQW9KO0lBRXBKLHFFQUE0RTtJQUM1RSxxRUFBaUs7SUFDakssK0JBQWlDO0lBRWpDLGlGQUFzRTtJQUN0RSxtRUFBdUU7SUFDdkUsNkRBQWlQO0lBWWpQO1FBQ0UsMkJBQTZCLElBQXdCLEVBQW1CLFFBQW9CO1lBQS9ELFNBQUksR0FBSixJQUFJLENBQW9CO1lBQW1CLGFBQVEsR0FBUixRQUFRLENBQVk7UUFBRyxDQUFDO1FBRWhHLHFEQUF5QixHQUF6QixVQUEwQixRQUFnQixFQUFFLFFBQWdCOzs7WUFFMUQsSUFBTSxZQUFZLEdBQUcsaUNBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUM5QiwwRkFBMEY7Z0JBQzFGLDBGQUEwRjtnQkFDMUYsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsd0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQy9CLE9BQU87aUJBQ1I7Z0JBQ0QsT0FBTyxvQ0FBb0MsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRjtZQUNELElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakYsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQU0sV0FBVyxHQUF3QixFQUFFLENBQUM7O2dCQUM1QyxLQUE2QixJQUFBLG9CQUFBLGlCQUFBLGVBQWUsQ0FBQSxn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LE9BQU87U0FDUjtRQUVELElBQU0sWUFBWSxvQkFBTyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFDLENBQUM7UUFFakYsSUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxJQUFJLE9BQUEsUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQWxDLENBQWtDLENBQUMsQ0FBQztRQUNoRyxJQUFJLHFCQUFxQixLQUFLLFNBQVMsSUFBSSxDQUFDLDZCQUFrQixDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDckYsT0FBTztTQUNSO1FBRUQsSUFBTSxtQkFBbUIsR0FBd0IsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQzdDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO2dCQUNoQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU87Z0JBQzNDLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixpRUFBaUU7Z0JBQ2pFLHNEQUFzRDtnQkFDdEQsK0NBQStDO2dCQUMvQyxtREFBbUQ7Z0JBQ25ELFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQztnQkFDL0IsUUFBUSxFQUFFLHFCQUFxQixDQUFDLElBQUk7YUFDckMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFdBQVcsRUFBRSxtQkFBbUI7WUFDaEMsUUFBUSxFQUFFO2dCQUNSLHNEQUFzRDtnQkFDdEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO2dCQUNoQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDbEM7U0FDRixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0FTVCwgVG1wbEFzdEJvdW5kQXR0cmlidXRlLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3ROb2RlLCBUbXBsQXN0VGVtcGxhdGUsIFRtcGxBc3RUZXh0QXR0cmlidXRlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge05nQ29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZSc7XG5pbXBvcnQge2lzRXh0ZXJuYWxSZXNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9tZXRhZGF0YSc7XG5pbXBvcnQge0RpcmVjdGl2ZVN5bWJvbCwgRG9tQmluZGluZ1N5bWJvbCwgRWxlbWVudFN5bWJvbCwgU2hpbUxvY2F0aW9uLCBTeW1ib2wsIFN5bWJvbEtpbmQsIFRlbXBsYXRlU3ltYm9sfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9hcGknO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0VGFyZ2V0QXRQb3NpdGlvbiwgVGFyZ2V0Tm9kZUtpbmR9IGZyb20gJy4vdGVtcGxhdGVfdGFyZ2V0JztcbmltcG9ydCB7ZmluZFRpZ2h0ZXN0Tm9kZSwgZ2V0UGFyZW50Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnLi90c191dGlscyc7XG5pbXBvcnQge2ZsYXRNYXAsIGdldERpcmVjdGl2ZU1hdGNoZXNGb3JBdHRyaWJ1dGUsIGdldERpcmVjdGl2ZU1hdGNoZXNGb3JFbGVtZW50VGFnLCBnZXRUZW1wbGF0ZUluZm9BdFBvc2l0aW9uLCBnZXRUZW1wbGF0ZUxvY2F0aW9uRnJvbVNoaW1Mb2NhdGlvbiwgZ2V0VGV4dFNwYW5PZk5vZGUsIGlzRG9sbGFyRXZlbnQsIGlzVHlwZVNjcmlwdEZpbGUsIFRlbXBsYXRlSW5mbywgdG9UZXh0U3Bhbn0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBEZWZpbml0aW9uTWV0YSB7XG4gIG5vZGU6IEFTVHxUbXBsQXN0Tm9kZTtcbiAgcGFyZW50OiBBU1R8VG1wbEFzdE5vZGV8bnVsbDtcbiAgc3ltYm9sOiBTeW1ib2w7XG59XG5cbmludGVyZmFjZSBIYXNTaGltTG9jYXRpb24ge1xuICBzaGltTG9jYXRpb246IFNoaW1Mb2NhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmluaXRpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0c0xTOiB0cy5MYW5ndWFnZVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgY29tcGlsZXI6IE5nQ29tcGlsZXIpIHt9XG5cbiAgZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogdHMuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW5cbiAgICAgIHx1bmRlZmluZWQge1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IGdldFRlbXBsYXRlSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCB0aGlzLmNvbXBpbGVyKTtcbiAgICBpZiAodGVtcGxhdGVJbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHRlbXBsYXRlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gSWYgd2UgYXJlIGluIGEgVFMgZmlsZSwgaW5zdGVhZFxuICAgICAgLy8gYXR0ZW1wdCB0byBnZXQgYW4gQW5ndWxhciBkZWZpbml0aW9uIGF0IHRoZSBsb2NhdGlvbiBpbnNpZGUgYSBUUyBmaWxlIChleGFtcGxlcyBvZiB0aGlzXG4gICAgICAvLyB3b3VsZCBiZSB0ZW1wbGF0ZVVybCBvciBhIHVybCBpbiBzdHlsZVVybHMpLlxuICAgICAgaWYgKCFpc1R5cGVTY3JpcHRGaWxlKGZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbkZvckV4cHJlc3Npb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgdGhpcy5jb21waWxlcik7XG4gICAgfVxuICAgIGNvbnN0IGRlZmluaXRpb25NZXRhcyA9IHRoaXMuZ2V0RGVmaW5pdGlvbk1ldGFBdFBvc2l0aW9uKHRlbXBsYXRlSW5mbywgcG9zaXRpb24pO1xuICAgIGlmIChkZWZpbml0aW9uTWV0YXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbnM6IHRzLkRlZmluaXRpb25JbmZvW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25NZXRhIG9mIGRlZmluaXRpb25NZXRhcykge1xuICAgICAgLy8gVGhlIGAkZXZlbnRgIG9mIGV2ZW50IGhhbmRsZXJzIHdvdWxkIHBvaW50IHRvIHRoZSAkZXZlbnQgcGFyYW1ldGVyIGluIHRoZSBzaGltIGZpbGUsIGFzIGluXG4gICAgICAvLyBgX291dHB1dEhlbHBlcihfdDNbXCJ4XCJdKS5zdWJzY3JpYmUoZnVuY3Rpb24gKCRldmVudCk6IGFueSB7ICRldmVudCB9KSA7YFxuICAgICAgLy8gSWYgd2Ugd2FudGVkIHRvIHJldHVybiBzb21ldGhpbmcgZm9yIHRoaXMsIGl0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHNvbWV0aGluZyBsaWtlXG4gICAgICAvLyBgZ2V0VHlwZURlZmluaXRpb25gLlxuICAgICAgaWYgKGlzRG9sbGFyRXZlbnQoZGVmaW5pdGlvbk1ldGEubm9kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb25zLnB1c2goXG4gICAgICAgICAgLi4uKHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2woey4uLmRlZmluaXRpb25NZXRhLCAuLi50ZW1wbGF0ZUluZm99KSA/PyBbXSkpO1xuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkZWZpbml0aW9ucywgdGV4dFNwYW46IGdldFRleHRTcGFuT2ZOb2RlKGRlZmluaXRpb25NZXRhc1swXS5ub2RlKX07XG4gIH1cblxuICBwcml2YXRlIGdldERlZmluaXRpb25zRm9yU3ltYm9sKHtzeW1ib2wsIG5vZGUsIHBhcmVudCwgY29tcG9uZW50fTogRGVmaW5pdGlvbk1ldGEmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJbmZvKTogcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoc3ltYm9sLmtpbmQpIHtcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5EaXJlY3RpdmU6XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRWxlbWVudDpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5UZW1wbGF0ZTpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5Eb21CaW5kaW5nOlxuICAgICAgICAvLyBUaG91Z2ggaXQgaXMgZ2VuZXJhbGx5IG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBhYm92ZSBzeW1ib2wgZGVmaW5pdGlvbnMgdG8gYmVcbiAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIFwidHlwZSBkZWZpbml0aW9uc1wiIHNpbmNlIHRoZSBsb2NhdGlvbiBpbiB0aGUgdGVtcGxhdGUgaXMgdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkZWZpbml0aW9uIGxvY2F0aW9uLCB0aGUgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZSB3b3VsZCBiZSB0byBhbGxvd1xuICAgICAgICAvLyBMUyB1c2VycyB0byBcImdvIHRvIGRlZmluaXRpb25cIiBvbiBhbiBpdGVtIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IG1hcHMgdG8gYSBjbGFzcyBhbmQgYmVcbiAgICAgICAgLy8gdGFrZW4gdG8gdGhlIGRpcmVjdGl2ZSBvciBIVE1MIGNsYXNzLlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JUZW1wbGF0ZUluc3RhbmNlKHN5bWJvbCwgbm9kZSk7XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuUGlwZToge1xuICAgICAgICBpZiAoc3ltYm9sLnRzU3ltYm9sICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2xzKHN5bWJvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYHRzLlN5bWJvbGAgZm9yIHRoZSBwaXBlIHRyYW5zZm9ybSwgd2Ugd2FudCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgLy8gdHlwZSBkZWZpbml0aW9uICh0aGUgcGlwZSBjbGFzcykuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wuY2xhc3NTeW1ib2wpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuT3V0cHV0OlxuICAgICAgY2FzZSBTeW1ib2xLaW5kLklucHV0OiB7XG4gICAgICAgIGNvbnN0IGJpbmRpbmdEZWZzID0gdGhpcy5nZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sLmJpbmRpbmdzKTtcbiAgICAgICAgLy8gQWxzbyBhdHRlbXB0IHRvIGdldCBkaXJlY3RpdmUgbWF0Y2hlcyBmb3IgdGhlIGlucHV0IG5hbWUuIElmIHRoZXJlIGlzIGEgZGlyZWN0aXZlIHRoYXRcbiAgICAgICAgLy8gaGFzIHRoZSBpbnB1dCBuYW1lIGFzIHBhcnQgb2YgdGhlIHNlbGVjdG9yLCB3ZSB3YW50IHRvIHJldHVybiB0aGF0IGFzIHdlbGwuXG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZURlZnMgPSB0aGlzLmdldERpcmVjdGl2ZVR5cGVEZWZzRm9yQmluZGluZ05vZGUobm9kZSwgcGFyZW50LCBjb21wb25lbnQpO1xuICAgICAgICByZXR1cm4gWy4uLmJpbmRpbmdEZWZzLCAuLi5kaXJlY3RpdmVEZWZzXTtcbiAgICAgIH1cbiAgICAgIGNhc2UgU3ltYm9sS2luZC5WYXJpYWJsZTpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5SZWZlcmVuY2U6IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnM6IHRzLkRlZmluaXRpb25JbmZvW10gPSBbXTtcbiAgICAgICAgaWYgKHN5bWJvbC5kZWNsYXJhdGlvbiAhPT0gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHNoaW1Mb2NhdGlvbiA9IHN5bWJvbC5raW5kID09PSBTeW1ib2xLaW5kLlZhcmlhYmxlID8gc3ltYm9sLmxvY2FsVmFyTG9jYXRpb24gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLnJlZmVyZW5jZVZhckxvY2F0aW9uO1xuICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRUZW1wbGF0ZUxvY2F0aW9uRnJvbVNoaW1Mb2NhdGlvbihcbiAgICAgICAgICAgICAgdGhpcy5jb21waWxlci5nZXRUZW1wbGF0ZVR5cGVDaGVja2VyKCksIHNoaW1Mb2NhdGlvbi5zaGltUGF0aCxcbiAgICAgICAgICAgICAgc2hpbUxvY2F0aW9uLnBvc2l0aW9uSW5TaGltRmlsZSk7XG4gICAgICAgICAgaWYgKG1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBzeW1ib2wuZGVjbGFyYXRpb24ubmFtZSxcbiAgICAgICAgICAgICAgY29udGFpbmVyTmFtZTogJycsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcktpbmQ6IHRzLlNjcmlwdEVsZW1lbnRLaW5kLnVua25vd24sXG4gICAgICAgICAgICAgIGtpbmQ6IHRzLlNjcmlwdEVsZW1lbnRLaW5kLnZhcmlhYmxlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGV4dFNwYW46IGdldFRleHRTcGFuT2ZOb2RlKHN5bWJvbC5kZWNsYXJhdGlvbiksXG4gICAgICAgICAgICAgIGNvbnRleHRTcGFuOiB0b1RleHRTcGFuKHN5bWJvbC5kZWNsYXJhdGlvbi5zb3VyY2VTcGFuKSxcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hcHBpbmcudGVtcGxhdGVVcmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bWJvbC5raW5kID09PSBTeW1ib2xLaW5kLlZhcmlhYmxlKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoe3NoaW1Mb2NhdGlvbjogc3ltYm9sLmluaXRpYWxpemVyTG9jYXRpb259KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICAgICAgfVxuICAgICAgY2FzZSBTeW1ib2xLaW5kLkV4cHJlc3Npb246IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2xzKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sczogSGFzU2hpbUxvY2F0aW9uW10pOiB0cy5EZWZpbml0aW9uSW5mb1tdIHtcbiAgICByZXR1cm4gZmxhdE1hcChzeW1ib2xzLCAoe3NoaW1Mb2NhdGlvbn0pID0+IHtcbiAgICAgIGNvbnN0IHtzaGltUGF0aCwgcG9zaXRpb25JblNoaW1GaWxlfSA9IHNoaW1Mb2NhdGlvbjtcbiAgICAgIHJldHVybiB0aGlzLnRzTFMuZ2V0RGVmaW5pdGlvbkF0UG9zaXRpb24oc2hpbVBhdGgsIHBvc2l0aW9uSW5TaGltRmlsZSkgPz8gW107XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlRGVmaW5pdGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOlxuICAgICAgcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IGdldFRlbXBsYXRlSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCB0aGlzLmNvbXBpbGVyKTtcbiAgICBpZiAodGVtcGxhdGVJbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbk1ldGFzID0gdGhpcy5nZXREZWZpbml0aW9uTWV0YUF0UG9zaXRpb24odGVtcGxhdGVJbmZvLCBwb3NpdGlvbik7XG4gICAgaWYgKGRlZmluaXRpb25NZXRhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zOiB0cy5EZWZpbml0aW9uSW5mb1tdID0gW107XG4gICAgZm9yIChjb25zdCB7c3ltYm9sLCBub2RlLCBwYXJlbnR9IG9mIGRlZmluaXRpb25NZXRhcykge1xuICAgICAgc3dpdGNoIChzeW1ib2wua2luZCkge1xuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRGlyZWN0aXZlOlxuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRG9tQmluZGluZzpcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLkVsZW1lbnQ6XG4gICAgICAgIGNhc2UgU3ltYm9sS2luZC5UZW1wbGF0ZTpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yVGVtcGxhdGVJbnN0YW5jZShzeW1ib2wsIG5vZGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLk91dHB1dDpcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLklucHV0OiB7XG4gICAgICAgICAgY29uc3QgYmluZGluZ0RlZnMgPSB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sLmJpbmRpbmdzKTtcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLmJpbmRpbmdEZWZzKTtcbiAgICAgICAgICAvLyBBbHNvIGF0dGVtcHQgdG8gZ2V0IGRpcmVjdGl2ZSBtYXRjaGVzIGZvciB0aGUgaW5wdXQgbmFtZS4gSWYgdGhlcmUgaXMgYSBkaXJlY3RpdmUgdGhhdFxuICAgICAgICAgIC8vIGhhcyB0aGUgaW5wdXQgbmFtZSBhcyBwYXJ0IG9mIHRoZSBzZWxlY3Rvciwgd2Ugd2FudCB0byByZXR1cm4gdGhhdCBhcyB3ZWxsLlxuICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZURlZnMgPVxuICAgICAgICAgICAgICB0aGlzLmdldERpcmVjdGl2ZVR5cGVEZWZzRm9yQmluZGluZ05vZGUobm9kZSwgcGFyZW50LCB0ZW1wbGF0ZUluZm8uY29tcG9uZW50KTtcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLmRpcmVjdGl2ZURlZnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3ltYm9sS2luZC5QaXBlOiB7XG4gICAgICAgICAgaWYgKHN5bWJvbC50c1N5bWJvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZGVmaW5pdGlvbnMucHVzaCguLi50aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoc3ltYm9sKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGB0cy5TeW1ib2xgIGZvciB0aGUgcGlwZSB0cmFuc2Zvcm0sIHdlIHdhbnQgdG8gcmV0dXJuIHRoZVxuICAgICAgICAgICAgLy8gdHlwZSBkZWZpbml0aW9uICh0aGUgcGlwZSBjbGFzcykuXG4gICAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wuY2xhc3NTeW1ib2wpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLlJlZmVyZW5jZTpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAuLi50aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoe3NoaW1Mb2NhdGlvbjogc3ltYm9sLnRhcmdldExvY2F0aW9ufSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRXhwcmVzc2lvbjpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLlZhcmlhYmxlOiB7XG4gICAgICAgICAgZGVmaW5pdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKHtzaGltTG9jYXRpb246IHN5bWJvbC5pbml0aWFsaXplckxvY2F0aW9ufSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbnNGb3JUZW1wbGF0ZUluc3RhbmNlKFxuICAgICAgc3ltYm9sOiBUZW1wbGF0ZVN5bWJvbHxFbGVtZW50U3ltYm9sfERvbUJpbmRpbmdTeW1ib2x8RGlyZWN0aXZlU3ltYm9sLFxuICAgICAgbm9kZTogQVNUfFRtcGxBc3ROb2RlKTogdHMuRGVmaW5pdGlvbkluZm9bXSB7XG4gICAgc3dpdGNoIChzeW1ib2wua2luZCkge1xuICAgICAgY2FzZSBTeW1ib2xLaW5kLlRlbXBsYXRlOiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXREaXJlY3RpdmVNYXRjaGVzRm9yRWxlbWVudFRhZyhzeW1ib2wudGVtcGxhdGVOb2RlLCBzeW1ib2wuZGlyZWN0aXZlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4ubWF0Y2hlcyk7XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRWxlbWVudDoge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZ2V0RGlyZWN0aXZlTWF0Y2hlc0ZvckVsZW1lbnRUYWcoc3ltYm9sLnRlbXBsYXRlTm9kZSwgc3ltYm9sLmRpcmVjdGl2ZXMpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGRpcmVjdGl2ZSBtYXRjaGVzIGlzIGEgY29tcG9uZW50LCB3ZSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIG5hdGl2ZSBlbGVtZW50XG4gICAgICAgIC8vIGluIHRoZSByZXN1bHRzIGJlY2F1c2UgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obWF0Y2hlcykuc29tZShkaXIgPT4gZGlyLmlzQ29tcG9uZW50KSA/XG4gICAgICAgICAgICB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4ubWF0Y2hlcykgOlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLm1hdGNoZXMsIHN5bWJvbCk7XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRG9tQmluZGluZzoge1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgVG1wbEFzdFRleHRBdHRyaWJ1dGUpKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBnZXREaXJlY3RpdmVNYXRjaGVzRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgbm9kZS5uYW1lLCBzeW1ib2wuaG9zdC50ZW1wbGF0ZU5vZGUsIHN5bWJvbC5ob3N0LmRpcmVjdGl2ZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLmRpcnMpO1xuICAgICAgfVxuICAgICAgY2FzZSBTeW1ib2xLaW5kLkRpcmVjdGl2ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlVHlwZURlZnNGb3JCaW5kaW5nTm9kZShcbiAgICAgIG5vZGU6IFRtcGxBc3ROb2RlfEFTVCwgcGFyZW50OiBUbXBsQXN0Tm9kZXxBU1R8bnVsbCwgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSkgJiYgIShub2RlIGluc3RhbmNlb2YgVG1wbEFzdFRleHRBdHRyaWJ1dGUpICYmXG4gICAgICAgICEobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RCb3VuZEV2ZW50KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAocGFyZW50ID09PSBudWxsIHx8XG4gICAgICAgICEocGFyZW50IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlIHx8IHBhcmVudCBpbnN0YW5jZW9mIFRtcGxBc3RFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbCA9XG4gICAgICAgIHRoaXMuY29tcGlsZXIuZ2V0VGVtcGxhdGVUeXBlQ2hlY2tlcigpLmdldFN5bWJvbE9mTm9kZShwYXJlbnQsIGNvbXBvbmVudCk7XG4gICAgaWYgKHRlbXBsYXRlT3JFbGVtZW50U3ltYm9sID09PSBudWxsIHx8XG4gICAgICAgICh0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5raW5kICE9PSBTeW1ib2xLaW5kLlRlbXBsYXRlICYmXG4gICAgICAgICB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5raW5kICE9PSBTeW1ib2xLaW5kLkVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRpcnMgPVxuICAgICAgICBnZXREaXJlY3RpdmVNYXRjaGVzRm9yQXR0cmlidXRlKG5vZGUubmFtZSwgcGFyZW50LCB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5kaXJlY3RpdmVzKTtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLmRpcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLnN5bWJvbHM6IEhhc1NoaW1Mb2NhdGlvbltdKTogdHMuRGVmaW5pdGlvbkluZm9bXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAoc3ltYm9scywgKHtzaGltTG9jYXRpb259KSA9PiB7XG4gICAgICBjb25zdCB7c2hpbVBhdGgsIHBvc2l0aW9uSW5TaGltRmlsZX0gPSBzaGltTG9jYXRpb247XG4gICAgICByZXR1cm4gdGhpcy50c0xTLmdldFR5cGVEZWZpbml0aW9uQXRQb3NpdGlvbihzaGltUGF0aCwgcG9zaXRpb25JblNoaW1GaWxlKSA/PyBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmaW5pdGlvbk1ldGFBdFBvc2l0aW9uKHt0ZW1wbGF0ZSwgY29tcG9uZW50fTogVGVtcGxhdGVJbmZvLCBwb3NpdGlvbjogbnVtYmVyKTpcbiAgICAgIERlZmluaXRpb25NZXRhW118dW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXRBdFBvc2l0aW9uKHRlbXBsYXRlLCBwb3NpdGlvbik7XG4gICAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qge2NvbnRleHQsIHBhcmVudH0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBub2RlcyA9XG4gICAgICAgIGNvbnRleHQua2luZCA9PT0gVGFyZ2V0Tm9kZUtpbmQuVHdvV2F5QmluZGluZ0NvbnRleHQgPyBjb250ZXh0Lm5vZGVzIDogW2NvbnRleHQubm9kZV07XG5cblxuICAgIGNvbnN0IGRlZmluaXRpb25NZXRhczogRGVmaW5pdGlvbk1ldGFbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5jb21waWxlci5nZXRUZW1wbGF0ZVR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sT2ZOb2RlKG5vZGUsIGNvbXBvbmVudCk7XG4gICAgICBpZiAoc3ltYm9sID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbk1ldGFzLnB1c2goe25vZGUsIHBhcmVudCwgc3ltYm9sfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uTWV0YXMubGVuZ3RoID4gMCA/IGRlZmluaXRpb25NZXRhcyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYW4gQW5ndWxhci1zcGVjaWZpYyBkZWZpbml0aW9uIGluIGEgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbkZvckV4cHJlc3Npb25BdFBvc2l0aW9uKFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsIGNvbXBpbGVyOiBOZ0NvbXBpbGVyKTogdHMuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW58XG4gICAgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2YgPSBjb21waWxlci5nZXROZXh0UHJvZ3JhbSgpLmdldFNvdXJjZUZpbGUoZmlsZU5hbWUpO1xuICBpZiAoc2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBmaW5kVGlnaHRlc3ROb2RlKHNmLCBwb3NpdGlvbik7XG4gIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbiA9IGdldFBhcmVudENsYXNzRGVjbGFyYXRpb24oZXhwcmVzc2lvbik7XG4gIGlmIChjbGFzc0RlY2xhcmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29tcG9uZW50UmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0Q29tcG9uZW50UmVzb3VyY2VzKGNsYXNzRGVjbGFyYXRpb24pO1xuICBpZiAoY29tcG9uZW50UmVzb3VyY2VzID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxsUmVzb3VyY2VzID0gWy4uLmNvbXBvbmVudFJlc291cmNlcy5zdHlsZXMsIGNvbXBvbmVudFJlc291cmNlcy50ZW1wbGF0ZV07XG5cbiAgY29uc3QgcmVzb3VyY2VGb3JFeHByZXNzaW9uID0gYWxsUmVzb3VyY2VzLmZpbmQocmVzb3VyY2UgPT4gcmVzb3VyY2UuZXhwcmVzc2lvbiA9PT0gZXhwcmVzc2lvbik7XG4gIGlmIChyZXNvdXJjZUZvckV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCB8fCAhaXNFeHRlcm5hbFJlc291cmNlKHJlc291cmNlRm9yRXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZURlZmluaXRpb25zOiB0cy5EZWZpbml0aW9uSW5mb1tdID0gW3tcbiAgICBraW5kOiB0cy5TY3JpcHRFbGVtZW50S2luZC5leHRlcm5hbE1vZHVsZU5hbWUsXG4gICAgbmFtZTogcmVzb3VyY2VGb3JFeHByZXNzaW9uLnBhdGgsXG4gICAgY29udGFpbmVyS2luZDogdHMuU2NyaXB0RWxlbWVudEtpbmQudW5rbm93bixcbiAgICBjb250YWluZXJOYW1lOiAnJyxcbiAgICAvLyBSZWFkaW5nIHRoZSB0ZW1wbGF0ZSBpcyBleHBlbnNpdmUsIHNvIGRvbid0IHByb3ZpZGUgYSBwcmV2aWV3LlxuICAgIC8vIFRPRE8oYXlhemhhZml6KTogQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFjdHVhbCBzcGFuOlxuICAgIC8vICAxLiBXZSdyZSBsaWtlbHkgdG8gcmVhZCB0aGUgdGVtcGxhdGUgYW55d2F5XG4gICAgLy8gIDIuIFdlIGNvdWxkIHNob3cganVzdCB0aGUgZmlyc3QgMTAwIGNoYXJzIG9yIHNvXG4gICAgdGV4dFNwYW46IHtzdGFydDogMCwgbGVuZ3RoOiAwfSxcbiAgICBmaWxlTmFtZTogcmVzb3VyY2VGb3JFeHByZXNzaW9uLnBhdGgsXG4gIH1dO1xuXG4gIHJldHVybiB7XG4gICAgZGVmaW5pdGlvbnM6IHRlbXBsYXRlRGVmaW5pdGlvbnMsXG4gICAgdGV4dFNwYW46IHtcbiAgICAgIC8vIEV4Y2x1ZGUgb3BlbmluZyBhbmQgY2xvc2luZyBxdW90ZXMgaW4gdGhlIHVybCBzcGFuLlxuICAgICAgc3RhcnQ6IGV4cHJlc3Npb24uZ2V0U3RhcnQoKSArIDEsXG4gICAgICBsZW5ndGg6IGV4cHJlc3Npb24uZ2V0V2lkdGgoKSAtIDIsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQW9KO0lBRXBKLHFFQUE0RTtJQUM1RSxxRUFBaUs7SUFDakssK0JBQWlDO0lBRWpDLGlGQUFzRTtJQUN0RSxtRUFBdUU7SUFDdkUsNkRBQWlQO0lBWWpQO1FBQ0UsMkJBQTZCLElBQXdCLEVBQW1CLFFBQW9CO1lBQS9ELFNBQUksR0FBSixJQUFJLENBQW9CO1lBQW1CLGFBQVEsR0FBUixRQUFRLENBQVk7UUFBRyxDQUFDO1FBRWhHLHFEQUF5QixHQUF6QixVQUEwQixRQUFnQixFQUFFLFFBQWdCOzs7WUFFMUQsSUFBTSxZQUFZLEdBQUcsaUNBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUM5QiwwRkFBMEY7Z0JBQzFGLDBGQUEwRjtnQkFDMUYsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsd0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQy9CLE9BQU87aUJBQ1I7Z0JBQ0QsT0FBTyxvQ0FBb0MsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRjtZQUNELElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakYsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQU0sV0FBVyxHQUF3QixFQUFFLENBQUM7O2dCQUM1QyxLQUE2QixJQUFBLG9CQUFBLGlCQUFBLGVBQWUsQ0FBQSxn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LE9BQU87U0FDUjtRQUVELElBQU0sWUFBWSxvQkFBTyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFDLENBQUM7UUFFakYsSUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxJQUFJLE9BQUEsUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQWxDLENBQWtDLENBQUMsQ0FBQztRQUNoRyxJQUFJLHFCQUFxQixLQUFLLFNBQVMsSUFBSSxDQUFDLDZCQUFrQixDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDckYsT0FBTztTQUNSO1FBRUQsSUFBTSxtQkFBbUIsR0FBd0IsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQzdDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO2dCQUNoQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU87Z0JBQzNDLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixpRUFBaUU7Z0JBQ2pFLHNEQUFzRDtnQkFDdEQsK0NBQStDO2dCQUMvQyxtREFBbUQ7Z0JBQ25ELFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQztnQkFDL0IsUUFBUSxFQUFFLHFCQUFxQixDQUFDLElBQUk7YUFDckMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFdBQVcsRUFBRSxtQkFBbUI7WUFDaEMsUUFBUSxFQUFFO2dCQUNSLHNEQUFzRDtnQkFDdEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO2dCQUNoQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDbEM7U0FDRixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0FTVCwgVG1wbEFzdEJvdW5kQXR0cmlidXRlLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3ROb2RlLCBUbXBsQXN0VGVtcGxhdGUsIFRtcGxBc3RUZXh0QXR0cmlidXRlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge05nQ29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZSc7XG5pbXBvcnQge2lzRXh0ZXJuYWxSZXNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9tZXRhZGF0YSc7XG5pbXBvcnQge0RpcmVjdGl2ZVN5bWJvbCwgRG9tQmluZGluZ1N5bWJvbCwgRWxlbWVudFN5bWJvbCwgU2hpbUxvY2F0aW9uLCBTeW1ib2wsIFN5bWJvbEtpbmQsIFRlbXBsYXRlU3ltYm9sfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9hcGknO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0VGFyZ2V0QXRQb3NpdGlvbiwgVGFyZ2V0Tm9kZUtpbmR9IGZyb20gJy4vdGVtcGxhdGVfdGFyZ2V0JztcbmltcG9ydCB7ZmluZFRpZ2h0ZXN0Tm9kZSwgZ2V0UGFyZW50Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnLi90c191dGlscyc7XG5pbXBvcnQge2ZsYXRNYXAsIGdldERpcmVjdGl2ZU1hdGNoZXNGb3JBdHRyaWJ1dGUsIGdldERpcmVjdGl2ZU1hdGNoZXNGb3JFbGVtZW50VGFnLCBnZXRUZW1wbGF0ZUluZm9BdFBvc2l0aW9uLCBnZXRUZW1wbGF0ZUxvY2F0aW9uRnJvbVNoaW1Mb2NhdGlvbiwgZ2V0VGV4dFNwYW5PZk5vZGUsIGlzRG9sbGFyRXZlbnQsIGlzVHlwZVNjcmlwdEZpbGUsIFRlbXBsYXRlSW5mbywgdG9UZXh0U3Bhbn0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBEZWZpbml0aW9uTWV0YSB7XG4gIG5vZGU6IEFTVHxUbXBsQXN0Tm9kZTtcbiAgcGFyZW50OiBBU1R8VG1wbEFzdE5vZGV8bnVsbDtcbiAgc3ltYm9sOiBTeW1ib2w7XG59XG5cbmludGVyZmFjZSBIYXNTaGltTG9jYXRpb24ge1xuICBzaGltTG9jYXRpb246IFNoaW1Mb2NhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmluaXRpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0c0xTOiB0cy5MYW5ndWFnZVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgY29tcGlsZXI6IE5nQ29tcGlsZXIpIHt9XG5cbiAgZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogdHMuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW5cbiAgICAgIHx1bmRlZmluZWQge1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IGdldFRlbXBsYXRlSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCB0aGlzLmNvbXBpbGVyKTtcbiAgICBpZiAodGVtcGxhdGVJbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHRlbXBsYXRlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gSWYgd2UgYXJlIGluIGEgVFMgZmlsZSwgaW5zdGVhZFxuICAgICAgLy8gYXR0ZW1wdCB0byBnZXQgYW4gQW5ndWxhciBkZWZpbml0aW9uIGF0IHRoZSBsb2NhdGlvbiBpbnNpZGUgYSBUUyBmaWxlIChleGFtcGxlcyBvZiB0aGlzXG4gICAgICAvLyB3b3VsZCBiZSB0ZW1wbGF0ZVVybCBvciBhIHVybCBpbiBzdHlsZVVybHMpLlxuICAgICAgaWYgKCFpc1R5cGVTY3JpcHRGaWxlKGZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbkZvckV4cHJlc3Npb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgdGhpcy5jb21waWxlcik7XG4gICAgfVxuICAgIGNvbnN0IGRlZmluaXRpb25NZXRhcyA9IHRoaXMuZ2V0RGVmaW5pdGlvbk1ldGFBdFBvc2l0aW9uKHRlbXBsYXRlSW5mbywgcG9zaXRpb24pO1xuICAgIGlmIChkZWZpbml0aW9uTWV0YXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbnM6IHRzLkRlZmluaXRpb25JbmZvW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25NZXRhIG9mIGRlZmluaXRpb25NZXRhcykge1xuICAgICAgLy8gVGhlIGAkZXZlbnRgIG9mIGV2ZW50IGhhbmRsZXJzIHdvdWxkIHBvaW50IHRvIHRoZSAkZXZlbnQgcGFyYW1ldGVyIGluIHRoZSBzaGltIGZpbGUsIGFzIGluXG4gICAgICAvLyBgX3QzW1wieFwiXS5zdWJzY3JpYmUoZnVuY3Rpb24gKCRldmVudCk6IGFueSB7ICRldmVudCB9KSA7YFxuICAgICAgLy8gSWYgd2Ugd2FudGVkIHRvIHJldHVybiBzb21ldGhpbmcgZm9yIHRoaXMsIGl0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHNvbWV0aGluZyBsaWtlXG4gICAgICAvLyBgZ2V0VHlwZURlZmluaXRpb25gLlxuICAgICAgaWYgKGlzRG9sbGFyRXZlbnQoZGVmaW5pdGlvbk1ldGEubm9kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb25zLnB1c2goXG4gICAgICAgICAgLi4uKHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2woey4uLmRlZmluaXRpb25NZXRhLCAuLi50ZW1wbGF0ZUluZm99KSA/PyBbXSkpO1xuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkZWZpbml0aW9ucywgdGV4dFNwYW46IGdldFRleHRTcGFuT2ZOb2RlKGRlZmluaXRpb25NZXRhc1swXS5ub2RlKX07XG4gIH1cblxuICBwcml2YXRlIGdldERlZmluaXRpb25zRm9yU3ltYm9sKHtzeW1ib2wsIG5vZGUsIHBhcmVudCwgY29tcG9uZW50fTogRGVmaW5pdGlvbk1ldGEmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJbmZvKTogcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoc3ltYm9sLmtpbmQpIHtcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5EaXJlY3RpdmU6XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRWxlbWVudDpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5UZW1wbGF0ZTpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5Eb21CaW5kaW5nOlxuICAgICAgICAvLyBUaG91Z2ggaXQgaXMgZ2VuZXJhbGx5IG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBhYm92ZSBzeW1ib2wgZGVmaW5pdGlvbnMgdG8gYmVcbiAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIFwidHlwZSBkZWZpbml0aW9uc1wiIHNpbmNlIHRoZSBsb2NhdGlvbiBpbiB0aGUgdGVtcGxhdGUgaXMgdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkZWZpbml0aW9uIGxvY2F0aW9uLCB0aGUgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZSB3b3VsZCBiZSB0byBhbGxvd1xuICAgICAgICAvLyBMUyB1c2VycyB0byBcImdvIHRvIGRlZmluaXRpb25cIiBvbiBhbiBpdGVtIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IG1hcHMgdG8gYSBjbGFzcyBhbmQgYmVcbiAgICAgICAgLy8gdGFrZW4gdG8gdGhlIGRpcmVjdGl2ZSBvciBIVE1MIGNsYXNzLlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JUZW1wbGF0ZUluc3RhbmNlKHN5bWJvbCwgbm9kZSk7XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuUGlwZToge1xuICAgICAgICBpZiAoc3ltYm9sLnRzU3ltYm9sICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2xzKHN5bWJvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYHRzLlN5bWJvbGAgZm9yIHRoZSBwaXBlIHRyYW5zZm9ybSwgd2Ugd2FudCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgLy8gdHlwZSBkZWZpbml0aW9uICh0aGUgcGlwZSBjbGFzcykuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wuY2xhc3NTeW1ib2wpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuT3V0cHV0OlxuICAgICAgY2FzZSBTeW1ib2xLaW5kLklucHV0OiB7XG4gICAgICAgIGNvbnN0IGJpbmRpbmdEZWZzID0gdGhpcy5nZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sLmJpbmRpbmdzKTtcbiAgICAgICAgLy8gQWxzbyBhdHRlbXB0IHRvIGdldCBkaXJlY3RpdmUgbWF0Y2hlcyBmb3IgdGhlIGlucHV0IG5hbWUuIElmIHRoZXJlIGlzIGEgZGlyZWN0aXZlIHRoYXRcbiAgICAgICAgLy8gaGFzIHRoZSBpbnB1dCBuYW1lIGFzIHBhcnQgb2YgdGhlIHNlbGVjdG9yLCB3ZSB3YW50IHRvIHJldHVybiB0aGF0IGFzIHdlbGwuXG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZURlZnMgPSB0aGlzLmdldERpcmVjdGl2ZVR5cGVEZWZzRm9yQmluZGluZ05vZGUobm9kZSwgcGFyZW50LCBjb21wb25lbnQpO1xuICAgICAgICByZXR1cm4gWy4uLmJpbmRpbmdEZWZzLCAuLi5kaXJlY3RpdmVEZWZzXTtcbiAgICAgIH1cbiAgICAgIGNhc2UgU3ltYm9sS2luZC5WYXJpYWJsZTpcbiAgICAgIGNhc2UgU3ltYm9sS2luZC5SZWZlcmVuY2U6IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnM6IHRzLkRlZmluaXRpb25JbmZvW10gPSBbXTtcbiAgICAgICAgaWYgKHN5bWJvbC5kZWNsYXJhdGlvbiAhPT0gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHNoaW1Mb2NhdGlvbiA9IHN5bWJvbC5raW5kID09PSBTeW1ib2xLaW5kLlZhcmlhYmxlID8gc3ltYm9sLmxvY2FsVmFyTG9jYXRpb24gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLnJlZmVyZW5jZVZhckxvY2F0aW9uO1xuICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRUZW1wbGF0ZUxvY2F0aW9uRnJvbVNoaW1Mb2NhdGlvbihcbiAgICAgICAgICAgICAgdGhpcy5jb21waWxlci5nZXRUZW1wbGF0ZVR5cGVDaGVja2VyKCksIHNoaW1Mb2NhdGlvbi5zaGltUGF0aCxcbiAgICAgICAgICAgICAgc2hpbUxvY2F0aW9uLnBvc2l0aW9uSW5TaGltRmlsZSk7XG4gICAgICAgICAgaWYgKG1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBzeW1ib2wuZGVjbGFyYXRpb24ubmFtZSxcbiAgICAgICAgICAgICAgY29udGFpbmVyTmFtZTogJycsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcktpbmQ6IHRzLlNjcmlwdEVsZW1lbnRLaW5kLnVua25vd24sXG4gICAgICAgICAgICAgIGtpbmQ6IHRzLlNjcmlwdEVsZW1lbnRLaW5kLnZhcmlhYmxlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGV4dFNwYW46IGdldFRleHRTcGFuT2ZOb2RlKHN5bWJvbC5kZWNsYXJhdGlvbiksXG4gICAgICAgICAgICAgIGNvbnRleHRTcGFuOiB0b1RleHRTcGFuKHN5bWJvbC5kZWNsYXJhdGlvbi5zb3VyY2VTcGFuKSxcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hcHBpbmcudGVtcGxhdGVVcmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bWJvbC5raW5kID09PSBTeW1ib2xLaW5kLlZhcmlhYmxlKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoe3NoaW1Mb2NhdGlvbjogc3ltYm9sLmluaXRpYWxpemVyTG9jYXRpb259KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICAgICAgfVxuICAgICAgY2FzZSBTeW1ib2xLaW5kLkV4cHJlc3Npb246IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbnNGb3JTeW1ib2xzKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sczogSGFzU2hpbUxvY2F0aW9uW10pOiB0cy5EZWZpbml0aW9uSW5mb1tdIHtcbiAgICByZXR1cm4gZmxhdE1hcChzeW1ib2xzLCAoe3NoaW1Mb2NhdGlvbn0pID0+IHtcbiAgICAgIGNvbnN0IHtzaGltUGF0aCwgcG9zaXRpb25JblNoaW1GaWxlfSA9IHNoaW1Mb2NhdGlvbjtcbiAgICAgIHJldHVybiB0aGlzLnRzTFMuZ2V0RGVmaW5pdGlvbkF0UG9zaXRpb24oc2hpbVBhdGgsIHBvc2l0aW9uSW5TaGltRmlsZSkgPz8gW107XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlRGVmaW5pdGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOlxuICAgICAgcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IGdldFRlbXBsYXRlSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCB0aGlzLmNvbXBpbGVyKTtcbiAgICBpZiAodGVtcGxhdGVJbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbk1ldGFzID0gdGhpcy5nZXREZWZpbml0aW9uTWV0YUF0UG9zaXRpb24odGVtcGxhdGVJbmZvLCBwb3NpdGlvbik7XG4gICAgaWYgKGRlZmluaXRpb25NZXRhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zOiB0cy5EZWZpbml0aW9uSW5mb1tdID0gW107XG4gICAgZm9yIChjb25zdCB7c3ltYm9sLCBub2RlLCBwYXJlbnR9IG9mIGRlZmluaXRpb25NZXRhcykge1xuICAgICAgc3dpdGNoIChzeW1ib2wua2luZCkge1xuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRGlyZWN0aXZlOlxuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRG9tQmluZGluZzpcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLkVsZW1lbnQ6XG4gICAgICAgIGNhc2UgU3ltYm9sS2luZC5UZW1wbGF0ZTpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yVGVtcGxhdGVJbnN0YW5jZShzeW1ib2wsIG5vZGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLk91dHB1dDpcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLklucHV0OiB7XG4gICAgICAgICAgY29uc3QgYmluZGluZ0RlZnMgPSB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4uc3ltYm9sLmJpbmRpbmdzKTtcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLmJpbmRpbmdEZWZzKTtcbiAgICAgICAgICAvLyBBbHNvIGF0dGVtcHQgdG8gZ2V0IGRpcmVjdGl2ZSBtYXRjaGVzIGZvciB0aGUgaW5wdXQgbmFtZS4gSWYgdGhlcmUgaXMgYSBkaXJlY3RpdmUgdGhhdFxuICAgICAgICAgIC8vIGhhcyB0aGUgaW5wdXQgbmFtZSBhcyBwYXJ0IG9mIHRoZSBzZWxlY3Rvciwgd2Ugd2FudCB0byByZXR1cm4gdGhhdCBhcyB3ZWxsLlxuICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZURlZnMgPVxuICAgICAgICAgICAgICB0aGlzLmdldERpcmVjdGl2ZVR5cGVEZWZzRm9yQmluZGluZ05vZGUobm9kZSwgcGFyZW50LCB0ZW1wbGF0ZUluZm8uY29tcG9uZW50KTtcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLmRpcmVjdGl2ZURlZnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU3ltYm9sS2luZC5QaXBlOiB7XG4gICAgICAgICAgaWYgKHN5bWJvbC50c1N5bWJvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZGVmaW5pdGlvbnMucHVzaCguLi50aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoc3ltYm9sKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGB0cy5TeW1ib2xgIGZvciB0aGUgcGlwZSB0cmFuc2Zvcm0sIHdlIHdhbnQgdG8gcmV0dXJuIHRoZVxuICAgICAgICAgICAgLy8gdHlwZSBkZWZpbml0aW9uICh0aGUgcGlwZSBjbGFzcykuXG4gICAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wuY2xhc3NTeW1ib2wpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLlJlZmVyZW5jZTpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAuLi50aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoe3NoaW1Mb2NhdGlvbjogc3ltYm9sLnRhcmdldExvY2F0aW9ufSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN5bWJvbEtpbmQuRXhwcmVzc2lvbjpcbiAgICAgICAgICBkZWZpbml0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTeW1ib2xLaW5kLlZhcmlhYmxlOiB7XG4gICAgICAgICAgZGVmaW5pdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKHtzaGltTG9jYXRpb246IHN5bWJvbC5pbml0aWFsaXplckxvY2F0aW9ufSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbnNGb3JUZW1wbGF0ZUluc3RhbmNlKFxuICAgICAgc3ltYm9sOiBUZW1wbGF0ZVN5bWJvbHxFbGVtZW50U3ltYm9sfERvbUJpbmRpbmdTeW1ib2x8RGlyZWN0aXZlU3ltYm9sLFxuICAgICAgbm9kZTogQVNUfFRtcGxBc3ROb2RlKTogdHMuRGVmaW5pdGlvbkluZm9bXSB7XG4gICAgc3dpdGNoIChzeW1ib2wua2luZCkge1xuICAgICAgY2FzZSBTeW1ib2xLaW5kLlRlbXBsYXRlOiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXREaXJlY3RpdmVNYXRjaGVzRm9yRWxlbWVudFRhZyhzeW1ib2wudGVtcGxhdGVOb2RlLCBzeW1ib2wuZGlyZWN0aXZlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4ubWF0Y2hlcyk7XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRWxlbWVudDoge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZ2V0RGlyZWN0aXZlTWF0Y2hlc0ZvckVsZW1lbnRUYWcoc3ltYm9sLnRlbXBsYXRlTm9kZSwgc3ltYm9sLmRpcmVjdGl2ZXMpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGRpcmVjdGl2ZSBtYXRjaGVzIGlzIGEgY29tcG9uZW50LCB3ZSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIG5hdGl2ZSBlbGVtZW50XG4gICAgICAgIC8vIGluIHRoZSByZXN1bHRzIGJlY2F1c2UgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obWF0Y2hlcykuc29tZShkaXIgPT4gZGlyLmlzQ29tcG9uZW50KSA/XG4gICAgICAgICAgICB0aGlzLmdldFR5cGVEZWZpbml0aW9uc0ZvclN5bWJvbHMoLi4ubWF0Y2hlcykgOlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLm1hdGNoZXMsIHN5bWJvbCk7XG4gICAgICB9XG4gICAgICBjYXNlIFN5bWJvbEtpbmQuRG9tQmluZGluZzoge1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgVG1wbEFzdFRleHRBdHRyaWJ1dGUpKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBnZXREaXJlY3RpdmVNYXRjaGVzRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgbm9kZS5uYW1lLCBzeW1ib2wuaG9zdC50ZW1wbGF0ZU5vZGUsIHN5bWJvbC5ob3N0LmRpcmVjdGl2ZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLmRpcnMpO1xuICAgICAgfVxuICAgICAgY2FzZSBTeW1ib2xLaW5kLkRpcmVjdGl2ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb25zRm9yU3ltYm9scyhzeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlVHlwZURlZnNGb3JCaW5kaW5nTm9kZShcbiAgICAgIG5vZGU6IFRtcGxBc3ROb2RlfEFTVCwgcGFyZW50OiBUbXBsQXN0Tm9kZXxBU1R8bnVsbCwgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSkgJiYgIShub2RlIGluc3RhbmNlb2YgVG1wbEFzdFRleHRBdHRyaWJ1dGUpICYmXG4gICAgICAgICEobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RCb3VuZEV2ZW50KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAocGFyZW50ID09PSBudWxsIHx8XG4gICAgICAgICEocGFyZW50IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlIHx8IHBhcmVudCBpbnN0YW5jZW9mIFRtcGxBc3RFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbCA9XG4gICAgICAgIHRoaXMuY29tcGlsZXIuZ2V0VGVtcGxhdGVUeXBlQ2hlY2tlcigpLmdldFN5bWJvbE9mTm9kZShwYXJlbnQsIGNvbXBvbmVudCk7XG4gICAgaWYgKHRlbXBsYXRlT3JFbGVtZW50U3ltYm9sID09PSBudWxsIHx8XG4gICAgICAgICh0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5raW5kICE9PSBTeW1ib2xLaW5kLlRlbXBsYXRlICYmXG4gICAgICAgICB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5raW5kICE9PSBTeW1ib2xLaW5kLkVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRpcnMgPVxuICAgICAgICBnZXREaXJlY3RpdmVNYXRjaGVzRm9yQXR0cmlidXRlKG5vZGUubmFtZSwgcGFyZW50LCB0ZW1wbGF0ZU9yRWxlbWVudFN5bWJvbC5kaXJlY3RpdmVzKTtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLmRpcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbnNGb3JTeW1ib2xzKC4uLnN5bWJvbHM6IEhhc1NoaW1Mb2NhdGlvbltdKTogdHMuRGVmaW5pdGlvbkluZm9bXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAoc3ltYm9scywgKHtzaGltTG9jYXRpb259KSA9PiB7XG4gICAgICBjb25zdCB7c2hpbVBhdGgsIHBvc2l0aW9uSW5TaGltRmlsZX0gPSBzaGltTG9jYXRpb247XG4gICAgICByZXR1cm4gdGhpcy50c0xTLmdldFR5cGVEZWZpbml0aW9uQXRQb3NpdGlvbihzaGltUGF0aCwgcG9zaXRpb25JblNoaW1GaWxlKSA/PyBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmaW5pdGlvbk1ldGFBdFBvc2l0aW9uKHt0ZW1wbGF0ZSwgY29tcG9uZW50fTogVGVtcGxhdGVJbmZvLCBwb3NpdGlvbjogbnVtYmVyKTpcbiAgICAgIERlZmluaXRpb25NZXRhW118dW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXRBdFBvc2l0aW9uKHRlbXBsYXRlLCBwb3NpdGlvbik7XG4gICAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qge2NvbnRleHQsIHBhcmVudH0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBub2RlcyA9XG4gICAgICAgIGNvbnRleHQua2luZCA9PT0gVGFyZ2V0Tm9kZUtpbmQuVHdvV2F5QmluZGluZ0NvbnRleHQgPyBjb250ZXh0Lm5vZGVzIDogW2NvbnRleHQubm9kZV07XG5cblxuICAgIGNvbnN0IGRlZmluaXRpb25NZXRhczogRGVmaW5pdGlvbk1ldGFbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5jb21waWxlci5nZXRUZW1wbGF0ZVR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sT2ZOb2RlKG5vZGUsIGNvbXBvbmVudCk7XG4gICAgICBpZiAoc3ltYm9sID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbk1ldGFzLnB1c2goe25vZGUsIHBhcmVudCwgc3ltYm9sfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uTWV0YXMubGVuZ3RoID4gMCA/IGRlZmluaXRpb25NZXRhcyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYW4gQW5ndWxhci1zcGVjaWZpYyBkZWZpbml0aW9uIGluIGEgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbkZvckV4cHJlc3Npb25BdFBvc2l0aW9uKFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsIGNvbXBpbGVyOiBOZ0NvbXBpbGVyKTogdHMuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW58XG4gICAgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2YgPSBjb21waWxlci5nZXROZXh0UHJvZ3JhbSgpLmdldFNvdXJjZUZpbGUoZmlsZU5hbWUpO1xuICBpZiAoc2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBmaW5kVGlnaHRlc3ROb2RlKHNmLCBwb3NpdGlvbik7XG4gIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbiA9IGdldFBhcmVudENsYXNzRGVjbGFyYXRpb24oZXhwcmVzc2lvbik7XG4gIGlmIChjbGFzc0RlY2xhcmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29tcG9uZW50UmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0Q29tcG9uZW50UmVzb3VyY2VzKGNsYXNzRGVjbGFyYXRpb24pO1xuICBpZiAoY29tcG9uZW50UmVzb3VyY2VzID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxsUmVzb3VyY2VzID0gWy4uLmNvbXBvbmVudFJlc291cmNlcy5zdHlsZXMsIGNvbXBvbmVudFJlc291cmNlcy50ZW1wbGF0ZV07XG5cbiAgY29uc3QgcmVzb3VyY2VGb3JFeHByZXNzaW9uID0gYWxsUmVzb3VyY2VzLmZpbmQocmVzb3VyY2UgPT4gcmVzb3VyY2UuZXhwcmVzc2lvbiA9PT0gZXhwcmVzc2lvbik7XG4gIGlmIChyZXNvdXJjZUZvckV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCB8fCAhaXNFeHRlcm5hbFJlc291cmNlKHJlc291cmNlRm9yRXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZURlZmluaXRpb25zOiB0cy5EZWZpbml0aW9uSW5mb1tdID0gW3tcbiAgICBraW5kOiB0cy5TY3JpcHRFbGVtZW50S2luZC5leHRlcm5hbE1vZHVsZU5hbWUsXG4gICAgbmFtZTogcmVzb3VyY2VGb3JFeHByZXNzaW9uLnBhdGgsXG4gICAgY29udGFpbmVyS2luZDogdHMuU2NyaXB0RWxlbWVudEtpbmQudW5rbm93bixcbiAgICBjb250YWluZXJOYW1lOiAnJyxcbiAgICAvLyBSZWFkaW5nIHRoZSB0ZW1wbGF0ZSBpcyBleHBlbnNpdmUsIHNvIGRvbid0IHByb3ZpZGUgYSBwcmV2aWV3LlxuICAgIC8vIFRPRE8oYXlhemhhZml6KTogQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFjdHVhbCBzcGFuOlxuICAgIC8vICAxLiBXZSdyZSBsaWtlbHkgdG8gcmVhZCB0aGUgdGVtcGxhdGUgYW55d2F5XG4gICAgLy8gIDIuIFdlIGNvdWxkIHNob3cganVzdCB0aGUgZmlyc3QgMTAwIGNoYXJzIG9yIHNvXG4gICAgdGV4dFNwYW46IHtzdGFydDogMCwgbGVuZ3RoOiAwfSxcbiAgICBmaWxlTmFtZTogcmVzb3VyY2VGb3JFeHByZXNzaW9uLnBhdGgsXG4gIH1dO1xuXG4gIHJldHVybiB7XG4gICAgZGVmaW5pdGlvbnM6IHRlbXBsYXRlRGVmaW5pdGlvbnMsXG4gICAgdGV4dFNwYW46IHtcbiAgICAgIC8vIEV4Y2x1ZGUgb3BlbmluZyBhbmQgY2xvc2luZyBxdW90ZXMgaW4gdGhlIHVybCBzcGFuLlxuICAgICAgc3RhcnQ6IGV4cHJlc3Npb24uZ2V0U3RhcnQoKSArIDEsXG4gICAgICBsZW5ndGg6IGV4cHJlc3Npb24uZ2V0V2lkdGgoKSAtIDIsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -8,6 +8,7 @@
8
8
  /// <amd-module name="@angular/language-service/ivy/language_service" />
9
9
  import { CompilerOptions } from '@angular/compiler-cli';
10
10
  import * as ts from 'typescript/lib/tsserverlibrary';
11
+ import { GetTcbResponse } from '../api';
11
12
  import { CompilerFactory } from './compiler_factory';
12
13
  export declare class LanguageService {
13
14
  private readonly project;
@@ -24,10 +25,14 @@ export declare class LanguageService {
24
25
  getTypeDefinitionAtPosition(fileName: string, position: number): readonly ts.DefinitionInfo[] | undefined;
25
26
  getQuickInfoAtPosition(fileName: string, position: number): ts.QuickInfo | undefined;
26
27
  getReferencesAtPosition(fileName: string, position: number): ts.ReferenceEntry[] | undefined;
28
+ getRenameInfo(fileName: string, position: number): ts.RenameInfo;
29
+ findRenameLocations(fileName: string, position: number): readonly ts.RenameLocation[] | undefined;
27
30
  private getCompletionBuilder;
28
31
  getCompletionsAtPosition(fileName: string, position: number, options: ts.GetCompletionsAtPositionOptions | undefined): ts.WithMetadata<ts.CompletionInfo> | undefined;
29
32
  getCompletionEntryDetails(fileName: string, position: number, entryName: string, formatOptions: ts.FormatCodeOptions | ts.FormatCodeSettings | undefined, preferences: ts.UserPreferences | undefined): ts.CompletionEntryDetails | undefined;
30
33
  getCompletionEntrySymbol(fileName: string, position: number, entryName: string): ts.Symbol | undefined;
34
+ getTcb(fileName: string, position: number): GetTcbResponse;
35
+ private withCompiler;
31
36
  getCompilerOptionsDiagnostics(): ts.Diagnostic[];
32
37
  private watchConfigFile;
33
38
  }