@robhan-cdk-lib/aws_grafana 0.0.33 → 0.0.35

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.
package/.jsii CHANGED
@@ -5150,7 +5150,7 @@
5150
5150
  },
5151
5151
  "locationInModule": {
5152
5152
  "filename": "src/workspace.ts",
5153
- "line": 1074
5153
+ "line": 1051
5154
5154
  },
5155
5155
  "parameters": [
5156
5156
  {
@@ -5176,7 +5176,7 @@
5176
5176
  "kind": "class",
5177
5177
  "locationInModule": {
5178
5178
  "filename": "src/workspace.ts",
5179
- "line": 296
5179
+ "line": 287
5180
5180
  },
5181
5181
  "methods": [
5182
5182
  {
@@ -5185,7 +5185,7 @@
5185
5185
  },
5186
5186
  "locationInModule": {
5187
5187
  "filename": "src/workspace.ts",
5188
- "line": 298
5188
+ "line": 289
5189
5189
  },
5190
5190
  "name": "fromWorkspaceAttributes",
5191
5191
  "parameters": [
@@ -5227,7 +5227,7 @@
5227
5227
  "immutable": true,
5228
5228
  "locationInModule": {
5229
5229
  "filename": "src/workspace.ts",
5230
- "line": 923
5230
+ "line": 900
5231
5231
  },
5232
5232
  "name": "accountAccessType",
5233
5233
  "overrides": "@robhan-cdk-lib/aws_grafana.WorkspaceBase",
@@ -5243,7 +5243,7 @@
5243
5243
  "immutable": true,
5244
5244
  "locationInModule": {
5245
5245
  "filename": "src/workspace.ts",
5246
- "line": 929
5246
+ "line": 906
5247
5247
  },
5248
5248
  "name": "authenticationProviders",
5249
5249
  "overrides": "@robhan-cdk-lib/aws_grafana.WorkspaceBase",
@@ -5264,7 +5264,7 @@
5264
5264
  "immutable": true,
5265
5265
  "locationInModule": {
5266
5266
  "filename": "src/workspace.ts",
5267
- "line": 1031
5267
+ "line": 1008
5268
5268
  },
5269
5269
  "name": "creationTimestamp",
5270
5270
  "type": {
@@ -5279,7 +5279,7 @@
5279
5279
  "immutable": true,
5280
5280
  "locationInModule": {
5281
5281
  "filename": "src/workspace.ts",
5282
- "line": 1036
5282
+ "line": 1013
5283
5283
  },
5284
5284
  "name": "endpoint",
5285
5285
  "type": {
@@ -5294,7 +5294,7 @@
5294
5294
  "immutable": true,
5295
5295
  "locationInModule": {
5296
5296
  "filename": "src/workspace.ts",
5297
- "line": 1041
5297
+ "line": 1018
5298
5298
  },
5299
5299
  "name": "grafanaVersion",
5300
5300
  "type": {
@@ -5309,7 +5309,7 @@
5309
5309
  "immutable": true,
5310
5310
  "locationInModule": {
5311
5311
  "filename": "src/workspace.ts",
5312
- "line": 1051
5312
+ "line": 1028
5313
5313
  },
5314
5314
  "name": "modificationTimestamp",
5315
5315
  "type": {
@@ -5325,7 +5325,7 @@
5325
5325
  "immutable": true,
5326
5326
  "locationInModule": {
5327
5327
  "filename": "src/workspace.ts",
5328
- "line": 988
5328
+ "line": 965
5329
5329
  },
5330
5330
  "name": "permissionType",
5331
5331
  "overrides": "@robhan-cdk-lib/aws_grafana.WorkspaceBase",
@@ -5341,7 +5341,7 @@
5341
5341
  "immutable": true,
5342
5342
  "locationInModule": {
5343
5343
  "filename": "src/workspace.ts",
5344
- "line": 1056
5344
+ "line": 1033
5345
5345
  },
5346
5346
  "name": "samlConfigurationStatus",
5347
5347
  "type": {
@@ -5356,7 +5356,7 @@
5356
5356
  "immutable": true,
5357
5357
  "locationInModule": {
5358
5358
  "filename": "src/workspace.ts",
5359
- "line": 1062
5359
+ "line": 1039
5360
5360
  },
5361
5361
  "name": "ssoClientId",
5362
5362
  "type": {
@@ -5371,7 +5371,7 @@
5371
5371
  "immutable": true,
5372
5372
  "locationInModule": {
5373
5373
  "filename": "src/workspace.ts",
5374
- "line": 1067
5374
+ "line": 1044
5375
5375
  },
5376
5376
  "name": "status",
5377
5377
  "type": {
@@ -5386,7 +5386,7 @@
5386
5386
  "immutable": true,
5387
5387
  "locationInModule": {
5388
5388
  "filename": "src/workspace.ts",
5389
- "line": 1072
5389
+ "line": 1049
5390
5390
  },
5391
5391
  "name": "workspaceArn",
5392
5392
  "overrides": "@robhan-cdk-lib/aws_grafana.WorkspaceBase",
@@ -5402,7 +5402,7 @@
5402
5402
  "immutable": true,
5403
5403
  "locationInModule": {
5404
5404
  "filename": "src/workspace.ts",
5405
- "line": 1046
5405
+ "line": 1023
5406
5406
  },
5407
5407
  "name": "workspaceId",
5408
5408
  "overrides": "@robhan-cdk-lib/aws_grafana.WorkspaceBase",
@@ -5418,7 +5418,7 @@
5418
5418
  "immutable": true,
5419
5419
  "locationInModule": {
5420
5420
  "filename": "src/workspace.ts",
5421
- "line": 934
5421
+ "line": 911
5422
5422
  },
5423
5423
  "name": "clientToken",
5424
5424
  "optional": true,
@@ -5436,7 +5436,7 @@
5436
5436
  "immutable": true,
5437
5437
  "locationInModule": {
5438
5438
  "filename": "src/workspace.ts",
5439
- "line": 943
5439
+ "line": 920
5440
5440
  },
5441
5441
  "name": "dataSources",
5442
5442
  "optional": true,
@@ -5458,7 +5458,7 @@
5458
5458
  "immutable": true,
5459
5459
  "locationInModule": {
5460
5460
  "filename": "src/workspace.ts",
5461
- "line": 948
5461
+ "line": 925
5462
5462
  },
5463
5463
  "name": "description",
5464
5464
  "optional": true,
@@ -5475,7 +5475,7 @@
5475
5475
  "immutable": true,
5476
5476
  "locationInModule": {
5477
5477
  "filename": "src/workspace.ts",
5478
- "line": 953
5478
+ "line": 930
5479
5479
  },
5480
5480
  "name": "name",
5481
5481
  "optional": true,
@@ -5492,7 +5492,7 @@
5492
5492
  "immutable": true,
5493
5493
  "locationInModule": {
5494
5494
  "filename": "src/workspace.ts",
5495
- "line": 958
5495
+ "line": 935
5496
5496
  },
5497
5497
  "name": "networkAccessControl",
5498
5498
  "optional": true,
@@ -5509,7 +5509,7 @@
5509
5509
  "immutable": true,
5510
5510
  "locationInModule": {
5511
5511
  "filename": "src/workspace.ts",
5512
- "line": 964
5512
+ "line": 941
5513
5513
  },
5514
5514
  "name": "notificationDestinations",
5515
5515
  "optional": true,
@@ -5531,7 +5531,7 @@
5531
5531
  "immutable": true,
5532
5532
  "locationInModule": {
5533
5533
  "filename": "src/workspace.ts",
5534
- "line": 970
5534
+ "line": 947
5535
5535
  },
5536
5536
  "name": "organizationalUnits",
5537
5537
  "optional": true,
@@ -5553,7 +5553,7 @@
5553
5553
  "immutable": true,
5554
5554
  "locationInModule": {
5555
5555
  "filename": "src/workspace.ts",
5556
- "line": 975
5556
+ "line": 952
5557
5557
  },
5558
5558
  "name": "organizationRoleName",
5559
5559
  "optional": true,
@@ -5571,7 +5571,7 @@
5571
5571
  "immutable": true,
5572
5572
  "locationInModule": {
5573
5573
  "filename": "src/workspace.ts",
5574
- "line": 996
5574
+ "line": 973
5575
5575
  },
5576
5576
  "name": "pluginAdminEnabled",
5577
5577
  "optional": true,
@@ -5588,7 +5588,7 @@
5588
5588
  "immutable": true,
5589
5589
  "locationInModule": {
5590
5590
  "filename": "src/workspace.ts",
5591
- "line": 1002
5591
+ "line": 979
5592
5592
  },
5593
5593
  "name": "role",
5594
5594
  "optional": true,
@@ -5605,7 +5605,7 @@
5605
5605
  "immutable": true,
5606
5606
  "locationInModule": {
5607
5607
  "filename": "src/workspace.ts",
5608
- "line": 1009
5608
+ "line": 986
5609
5609
  },
5610
5610
  "name": "samlConfiguration",
5611
5611
  "optional": true,
@@ -5622,7 +5622,7 @@
5622
5622
  "immutable": true,
5623
5623
  "locationInModule": {
5624
5624
  "filename": "src/workspace.ts",
5625
- "line": 1015
5625
+ "line": 992
5626
5626
  },
5627
5627
  "name": "stackSetName",
5628
5628
  "optional": true,
@@ -5639,7 +5639,7 @@
5639
5639
  "immutable": true,
5640
5640
  "locationInModule": {
5641
5641
  "filename": "src/workspace.ts",
5642
- "line": 1021
5642
+ "line": 998
5643
5643
  },
5644
5644
  "name": "vpcConfiguration",
5645
5645
  "optional": true,
@@ -5721,6 +5721,22 @@
5721
5721
  "fqn": "@robhan-cdk-lib/aws_grafana.PermissionTypes"
5722
5722
  }
5723
5723
  },
5724
+ {
5725
+ "abstract": true,
5726
+ "docs": {
5727
+ "stability": "stable",
5728
+ "summary": "The arn of this workspace."
5729
+ },
5730
+ "immutable": true,
5731
+ "locationInModule": {
5732
+ "filename": "src/workspace.ts",
5733
+ "line": 279
5734
+ },
5735
+ "name": "workspaceArn",
5736
+ "type": {
5737
+ "primitive": "string"
5738
+ }
5739
+ },
5724
5740
  {
5725
5741
  "abstract": true,
5726
5742
  "docs": {
@@ -5962,42 +5978,6 @@
5962
5978
  "type": {
5963
5979
  "fqn": "@robhan-cdk-lib/aws_grafana.VpcConfiguration"
5964
5980
  }
5965
- },
5966
- {
5967
- "abstract": true,
5968
- "docs": {
5969
- "remarks": "Either this or the workspaceId must be provided.",
5970
- "stability": "stable",
5971
- "summary": "The arn of this workspace."
5972
- },
5973
- "immutable": true,
5974
- "locationInModule": {
5975
- "filename": "src/workspace.ts",
5976
- "line": 281
5977
- },
5978
- "name": "workspaceArn",
5979
- "optional": true,
5980
- "type": {
5981
- "primitive": "string"
5982
- }
5983
- },
5984
- {
5985
- "abstract": true,
5986
- "docs": {
5987
- "remarks": "Either this or the workspaceArn must be provided.",
5988
- "stability": "stable",
5989
- "summary": "The unique ID of this workspace."
5990
- },
5991
- "immutable": true,
5992
- "locationInModule": {
5993
- "filename": "src/workspace.ts",
5994
- "line": 288
5995
- },
5996
- "name": "workspaceId",
5997
- "optional": true,
5998
- "type": {
5999
- "primitive": "string"
6000
- }
6001
5981
  }
6002
5982
  ],
6003
5983
  "symbolId": "src/workspace:WorkspaceAttributes"
@@ -6778,6 +6758,6 @@
6778
6758
  "symbolId": "src/workspace:WorkspaceProps"
6779
6759
  }
6780
6760
  },
6781
- "version": "0.0.33",
6782
- "fingerprint": "MDRoMdZ+FphfW09FBT2yD/9fD23TWv4cHlCxJHnqmis="
6761
+ "version": "0.0.35",
6762
+ "fingerprint": "e5PKeoTd2w5DC9hwETKlsKgvxEVZpdW5iUnYw0kwEkM="
6783
6763
  }
package/API.md CHANGED
@@ -1429,6 +1429,7 @@ const workspaceAttributes: WorkspaceAttributes = { ... }
1429
1429
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.accountAccessType">accountAccessType</a></code> | <code><a href="#@robhan-cdk-lib/aws_grafana.AccountAccessType">AccountAccessType</a></code> | Specifies whether the workspace can access AWS resources in this AWS account only, or whether it can also access AWS resources in other accounts in the same organization. |
1430
1430
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.authenticationProviders">authenticationProviders</a></code> | <code><a href="#@robhan-cdk-lib/aws_grafana.AuthenticationProviders">AuthenticationProviders</a>[]</code> | Specifies whether this workspace uses SAML 2.0, AWS IAM Identity Center, or both to authenticate users for using the Grafana console within a workspace. |
1431
1431
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.permissionType">permissionType</a></code> | <code><a href="#@robhan-cdk-lib/aws_grafana.PermissionTypes">PermissionTypes</a></code> | If this is SERVICE_MANAGED, and the workplace was created through the Amazon Managed Grafana console, then Amazon Managed Grafana automatically creates the IAM roles and provisions the permissions that the workspace needs to use AWS data sources and notification channels. |
1432
+ | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceArn">workspaceArn</a></code> | <code>string</code> | The arn of this workspace. |
1432
1433
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.clientToken">clientToken</a></code> | <code>string</code> | A unique, case-sensitive, user-provided identifier to ensure the idempotency of the request. |
1433
1434
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.dataSources">dataSources</a></code> | <code>string[]</code> | Specifies the AWS data sources that have been configured to have IAM roles and permissions created to allow Amazon Managed Grafana to read data from these sources. |
1434
1435
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.description">description</a></code> | <code>string</code> | The user-defined description of the workspace. |
@@ -1442,8 +1443,6 @@ const workspaceAttributes: WorkspaceAttributes = { ... }
1442
1443
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.samlConfiguration">samlConfiguration</a></code> | <code><a href="#@robhan-cdk-lib/aws_grafana.SamlConfiguration">SamlConfiguration</a></code> | If the workspace uses SAML, use this structure to map SAML assertion attributes to workspace user information and define which groups in the assertion attribute are to have the Admin and Editor roles in the workspace. |
1443
1444
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.stackSetName">stackSetName</a></code> | <code>string</code> | The name of the AWS CloudFormation stack set that is used to generate IAM roles to be used for this workspace. |
1444
1445
  | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.vpcConfiguration">vpcConfiguration</a></code> | <code><a href="#@robhan-cdk-lib/aws_grafana.VpcConfiguration">VpcConfiguration</a></code> | The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to. |
1445
- | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceArn">workspaceArn</a></code> | <code>string</code> | The arn of this workspace. |
1446
- | <code><a href="#@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceId">workspaceId</a></code> | <code>string</code> | The unique ID of this workspace. |
1447
1446
 
1448
1447
  ---
1449
1448
 
@@ -1499,6 +1498,18 @@ Required field.
1499
1498
 
1500
1499
  ---
1501
1500
 
1501
+ ##### `workspaceArn`<sup>Required</sup> <a name="workspaceArn" id="@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceArn"></a>
1502
+
1503
+ ```typescript
1504
+ public readonly workspaceArn: string;
1505
+ ```
1506
+
1507
+ - *Type:* string
1508
+
1509
+ The arn of this workspace.
1510
+
1511
+ ---
1512
+
1502
1513
  ##### `clientToken`<sup>Optional</sup> <a name="clientToken" id="@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.clientToken"></a>
1503
1514
 
1504
1515
  ```typescript
@@ -1674,34 +1685,6 @@ The configuration settings for an Amazon VPC that contains data sources for your
1674
1685
 
1675
1686
  ---
1676
1687
 
1677
- ##### `workspaceArn`<sup>Optional</sup> <a name="workspaceArn" id="@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceArn"></a>
1678
-
1679
- ```typescript
1680
- public readonly workspaceArn: string;
1681
- ```
1682
-
1683
- - *Type:* string
1684
-
1685
- The arn of this workspace.
1686
-
1687
- Either this or the workspaceId must be provided.
1688
-
1689
- ---
1690
-
1691
- ##### `workspaceId`<sup>Optional</sup> <a name="workspaceId" id="@robhan-cdk-lib/aws_grafana.WorkspaceAttributes.property.workspaceId"></a>
1692
-
1693
- ```typescript
1694
- public readonly workspaceId: string;
1695
- ```
1696
-
1697
- - *Type:* string
1698
-
1699
- The unique ID of this workspace.
1700
-
1701
- Either this or the workspaceArn must be provided.
1702
-
1703
- ---
1704
-
1705
1688
  ### WorkspaceProps <a name="WorkspaceProps" id="@robhan-cdk-lib/aws_grafana.WorkspaceProps"></a>
1706
1689
 
1707
1690
  Properties for creating an Amazon Managed Grafana workspace.
@@ -146,5 +146,5 @@ class WorkspaceBase extends aws_cdk_lib_1.Resource {
146
146
  }
147
147
  exports.WorkspaceBase = WorkspaceBase;
148
148
  _a = JSII_RTTI_SYMBOL_1;
149
- WorkspaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.WorkspaceBase", version: "0.0.33" };
149
+ WorkspaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.WorkspaceBase", version: "0.0.35" };
150
150
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya3NwYWNlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0Q7QUFJbEQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCx3REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVU1QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx1QkFVWDtBQVZELFdBQVksdUJBQXVCO0lBQ2pDOztPQUVHO0lBQ0gsOENBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCx3Q0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBVWxDO0FBMkJEOzs7R0FHRztBQUNILElBQVksd0JBS1g7QUFMRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHVDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFLbkM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsSUFBWSxlQVVYO0FBVkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsd0RBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxzREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBVlcsZUFBZSwrQkFBZixlQUFlLFFBVTFCO0FBNEpEOztHQUVHO0FBQ0gsSUFBWSx5QkFVWDtBQVZELFdBQVkseUJBQXlCO0lBQ25DOztPQUVHO0lBQ0gsc0RBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCw4REFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBVlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFVcEM7QUFFRDs7R0FFRztBQUNILElBQVksTUF1RFg7QUF2REQsV0FBWSxNQUFNO0lBQ2hCOztPQUVHO0lBQ0gsMkJBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCwrQkFBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILCtCQUFxQixDQUFBO0lBRXJCOztPQUVHO0lBQ0gsMkJBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCwrQkFBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILGlDQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsNkNBQW1DLENBQUE7SUFFbkM7O09BRUc7SUFDSCw2Q0FBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILHlDQUErQixDQUFBO0lBRS9COztPQUVHO0lBQ0gsMkNBQWlDLENBQUE7SUFFakM7O09BRUc7SUFDSCwyREFBaUQsQ0FBQTtBQUNuRCxDQUFDLEVBdkRXLE1BQU0sc0JBQU4sTUFBTSxRQXVEakI7QUE4SUQsTUFBc0IsYUFBYyxTQUFRLHNCQUFRO0lBcUd4QyxlQUFlLENBQUMsV0FBbUI7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixPQUFPLE9BQU8sS0FBSyxDQUFDLFNBQVMsWUFBWSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGVBQWUsV0FBVyxFQUFFLENBQUM7SUFDckcsQ0FBQztJQUVTLGNBQWMsQ0FBQyxZQUFvQjtRQUMzQyxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDOztBQTVHSCxzQ0E2R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb3VyY2UsIFJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVByZWZpeExpc3QsIElTZWN1cml0eUdyb3VwLCBJU3VibmV0LCBJVnBjRW5kcG9pbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyIGl0XG4gKiBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICovXG5leHBvcnQgZW51bSBBY2NvdW50QWNjZXNzVHlwZSB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBBV1MgYWNjb3VudCBvbmx5LlxuICAgKi9cbiAgQ1VSUkVOVF9BQ0NPVU5UID0gJ0NVUlJFTlRfQUNDT1VOVCcsXG5cbiAgLyoqXG4gICAqIEFjY2VzcyBpcyBleHRlbmRlZCB0byB0aGUgZW50aXJlIEFXUyBvcmdhbml6YXRpb24uXG4gICAqL1xuICBPUkdBTklaQVRJT04gPSAnT1JHQU5JWkFUSU9OJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0byBhdXRoZW50aWNhdGVcbiAqIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ncmFmYW5hL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVdvcmtzcGFjZS5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEFXUyBTaW5nbGUgU2lnbi1PbiBhdXRoZW50aWNhdGlvbiBwcm92aWRlci5cbiAgICovXG4gIEFXU19TU08gPSAnQVdTX1NTTycsXG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IEFzc2VydGlvbiBNYXJrdXAgTGFuZ3VhZ2UgKFNBTUwpIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLlxuICAgKi9cbiAgU0FNTCA9ICdTQU1MJyxcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0FjY2Vzc0NvbnRyb2wge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcHJlZml4IGxpc3QgSURzLiBBIHByZWZpeCBsaXN0IGlzIGEgbGlzdCBvZiBDSURSIHJhbmdlcyBvZiBJUCBhZGRyZXNzZXMuIFRoZSBJUFxuICAgKiBhZGRyZXNzZXMgc3BlY2lmaWVkIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB5b3VyIHdvcmtzcGFjZS4gSWYgdGhlIGxpc3QgaXMgbm90IGluY2x1ZGVkIGluIHRoZVxuICAgKiBjb25maWd1cmF0aW9uIChwYXNzZWQgYW4gZW1wdHkgYXJyYXkpIHRoZW4gbm8gSVAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGVcbiAgICogd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIG9mIDUgcHJlZml4IGxpc3RzIGFsbG93ZWQuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXhMaXN0cz86IElQcmVmaXhMaXN0W107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIEFtYXpvbiBWUEMgZW5kcG9pbnQgSURzIGZvciB0aGUgd29ya3NwYWNlLiBZb3UgY2FuIGNyZWF0ZSBWUEMgZW5kcG9pbnRzIHRvIHlvdXJcbiAgICogQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2UgZm9yIGFjY2VzcyBmcm9tIHdpdGhpbiBhIFZQQy4gSWYgYSBOZXR3b3JrQWNjZXNzQ29uZmlndXJhdGlvblxuICAgKiBpcyBzcGVjaWZpZWQgdGhlbiBvbmx5IFZQQyBlbmRwb2ludHMgc3BlY2lmaWVkIGhlcmUgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSB3b3Jrc3BhY2UuIElmXG4gICAqIHlvdSBwYXNzIGluIGFuIGVtcHR5IGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gbm8gVlBDcyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTWF4aW11bSBvZiA1IFZQQyBlbmRwb2ludHMgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0VuZHBvaW50cz86IElWcGNFbmRwb2ludFtdO1xufVxuXG4vKipcbiAqIFRoZSBBV1Mgbm90aWZpY2F0aW9uIGNoYW5uZWxzIHRoYXQgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBjYW4gYXV0b21hdGljYWxseSBjcmVhdGUgSUFNIHJvbGVzIGFuZFxuICogcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAqL1xuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uRGVzdGluYXRpb25zIHtcbiAgLyoqXG4gICAqIEFtYXpvbiBTaW1wbGUgTm90aWZpY2F0aW9uIFNlcnZpY2UgKFNOUykgYXMgbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9uLlxuICAgKi9cbiAgU05TID0gJ1NOUycsXG59XG5cbi8qKlxuICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAqIHBlcm1pc3Npb25zIHRoYXQgdGhlIHdvcmtzcGFjZSBuZWVkcyB0byB1c2UgQVdTIGRhdGEgc291cmNlcyBhbmQgbm90aWZpY2F0aW9uIGNoYW5uZWxzLlxuICpcbiAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cblxuICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICogbm90IGEgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRoZSB3b3Jrc3BhY2UgdG8gYWNjZXNzIGRhdGEgc291cmNlcyBpblxuICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gKi9cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlcyB7XG4gIC8qKlxuICAgKiBDdXN0b21lci1tYW5hZ2VkIHBlcm1pc3Npb25zIHdoZXJlIHlvdSBtYW5hZ2UgdXNlciBhY2Nlc3MgdG8gR3JhZmFuYS5cbiAgICovXG4gIENVU1RPTUVSX01BTkFHRUQgPSAnQ1VTVE9NRVJfTUFOQUdFRCcsXG5cbiAgLyoqXG4gICAqIFNlcnZpY2UtbWFuYWdlZCBwZXJtaXNzaW9ucyB3aGVyZSBBV1MgbWFuYWdlcyB1c2VyIGFjY2VzcyB0byBHcmFmYW5hLlxuICAgKi9cbiAgU0VSVklDRV9NQU5BR0VEID0gJ1NFUlZJQ0VfTUFOQUdFRCcsXG59XG5cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIElkUCBhc3NlcnRpb24gYXJlIHRvIGJlIHVzZWQgdG8gZGVmaW5lXG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGUgSWRQIHRvIHVzZSB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYSBzdHJpbmcgd2l0aCBsZW5ndGggYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSBlbWFpbCBuYW1lcyBmb3IgU0FNTCB1c2Vycy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBlbWFpbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgZnVsbCBcImZyaWVuZGx5XCIgbmFtZXNcbiAgICogZm9yIHVzZXIgZ3JvdXBzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGxvZ2luIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2luPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHVzZSBhcyB0aGUgdXNlciBmdWxsIFwiZnJpZW5kbHlcIiBuYW1lc1xuICAgKiBmb3IgU0FNTCB1c2Vycy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHVzZSBhcyB0aGUgdXNlciBmdWxsIFwiZnJpZW5kbHlcIiBuYW1lc1xuICAgKiBmb3IgdGhlIHVzZXJzJyBvcmdhbml6YXRpb25zLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgcm9sZXMuXG4gICAqXG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpZGVudGl0eSBwcm92aWRlciAoSWRQKSBtZXRhZGF0YSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaWRlbnRpdHlcbiAqIHByb3ZpZGVyIHdpdGggdGhpcyB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbElkcE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIElkUCBtZXRhZGF0YS5cbiAgICpcbiAgICogTXVzdCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bGwgSWRQIG1ldGFkYXRhLCBpbiBYTUwgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgeG1sPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYXJyYXlzIHRoYXQgbWFwIGdyb3VwIG5hbWVzIGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB0aGUgR3JhZmFuYSBBZG1pblxuICogYW5kIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbWxSb2xlVmFsdWVzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBncm91cHMgZnJvbSB0aGUgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlIHRvIGdyYW50IHRoZSBHcmFmYW5hIEFkbWluIHJvbGUgdG8uXG4gICAqXG4gICAqIE1heGltdW0gb2YgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRtaW4/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdyb3VwcyBmcm9tIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgdG8gZ3JhbnQgdGhlIEdyYWZhbmEgRWRpdG9yIHJvbGUgdG8uXG4gICAqXG4gICAqIE1heGltdW0gb2YgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdHMgd2hpY2ggb3JnYW5pemF0aW9ucyBkZWZpbmVkIGluIHRoZSBTQU1MIGFzc2VydGlvbiBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIEFtYXpvbiBNYW5hZ2VkXG4gICAqIEdyYWZhbmEgd29ya3NwYWNlLiBJZiB0aGlzIGlzIGVtcHR5LCBhbGwgb3JnYW5pemF0aW9ucyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBoYXZlIGFjY2Vzcy5cbiAgICpcbiAgICogTXVzdCBoYXZlIGJldHdlZW4gMSBhbmQgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZE9yZ2FuaXphdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIGFyZSB0byBiZSB1c2VkIHRvIGRlZmluZVxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGF0IElkUCB0byB1c2UgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2VydGlvbkF0cnJpYnV0ZXM/OiBTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcztcblxuICAvKipcbiAgICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgKElkUCkgbWV0YWRhdGEgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGlkZW50aXR5XG4gICAqIHByb3ZpZGVyIHdpdGggdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkIGZvciBTQU1MIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBpZHBNZXRhZGF0YTogU2FtbElkcE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyBhIHNpZ24tb24gc2Vzc2lvbiBieSBhIFNBTUwgdXNlciBpcyB2YWxpZCwgYmVmb3JlIHRoZSB1c2VyIGhhcyB0byBzaWduIG9uIGFnYWluLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9naW5WYWxpZGl0eUR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIGFycmF5cyB0aGF0IG1hcCBncm91cCBuYW1lcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdGhlIEdyYWZhbmEgQWRtaW5cbiAgICogYW5kIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZVZhbHVlcz86IFNhbWxSb2xlVmFsdWVzO1xufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgQW1hem9uIEVDMiBzZWN1cml0eSBncm91cHMgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBWUEMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdC4gRHVwbGljYXRlcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQXJyYXkgTWVtYmVyczogTWluaW11bSBudW1iZXIgb2YgMSBpdGVtcy4gTWF4aW11bSBudW1iZXIgb2YgNSBpdGVtcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZm9yIFZQQyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIEFtYXpvbiBFQzIgc3VibmV0cyBjcmVhdGVkIGluIHRoZSBBbWF6b24gVlBDIGZvciB5b3VyIEdyYWZhbmEgd29ya3NwYWNlIHRvXG4gICAqIGNvbm5lY3QuIER1cGxpY2F0ZXMgbm90IGFsbG93ZWQuXG4gICAqXG4gICAqIEFycmF5IE1lbWJlcnM6IE1pbmltdW0gbnVtYmVyIG9mIDIgaXRlbXMuIE1heGltdW0gbnVtYmVyIG9mIDYgaXRlbXMuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZvciBWUEMgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM6IElTdWJuZXRbXTtcbn1cblxuLyoqXG4gKiBTdGF0dXMgb2YgU0FNTCBjb25maWd1cmF0aW9uIGZvciBhIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgZW51bSBTYW1sQ29uZmlndXJhdGlvblN0YXR1c2VzIHtcbiAgLyoqXG4gICAqIFNBTUwgaXMgY29uZmlndXJlZCBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIENPTkZJR1VSRUQgPSAnQ09ORklHVVJFRCcsXG5cbiAgLyoqXG4gICAqIFNBTUwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBOT1RfQ09ORklHVVJFRCA9ICdOT1RfQ09ORklHVVJFRCcsXG59XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYWN0aXZlIGFuZCByZWFkeSB0byB1c2UuXG4gICAqL1xuICBBQ1RJVkUgPSAnQUNUSVZFJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGJlaW5nIGNyZWF0ZWQuXG4gICAqL1xuICBDUkVBVElORyA9ICdDUkVBVElORycsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyBkZWxldGVkLlxuICAgKi9cbiAgREVMRVRJTkcgPSAnREVMRVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2Ugb3BlcmF0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBGQUlMRUQgPSAnRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGJlaW5nIHVwZGF0ZWQuXG4gICAqL1xuICBVUERBVElORyA9ICdVUERBVElORycsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyB1cGdyYWRlZC5cbiAgICovXG4gIFVQR1JBRElORyA9ICdVUEdSQURJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgZGVsZXRpb24gaGFzIGZhaWxlZC5cbiAgICovXG4gIERFTEVUSU9OX0ZBSUxFRCA9ICdERUxFVElPTl9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgY3JlYXRpb24gaGFzIGZhaWxlZC5cbiAgICovXG4gIENSRUFUSU9OX0ZBSUxFRCA9ICdDUkVBVElPTl9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgdXBkYXRlIGhhcyBmYWlsZWQuXG4gICAqL1xuICBVUERBVEVfRkFJTEVEID0gJ1VQREFURV9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgdXBncmFkZSBoYXMgZmFpbGVkLlxuICAgKi9cbiAgVVBHUkFERV9GQUlMRUQgPSAnVVBHUkFERV9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBMaWNlbnNlIHJlbW92YWwgaGFzIGZhaWxlZC5cbiAgICovXG4gIExJQ0VOU0VfUkVNT1ZBTF9GQUlMRUQgPSAnTElDRU5TRV9SRU1PVkFMX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBHcmFmYW5hIHdvcmtzcGFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElXb3Jrc3BhY2UgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRBY2Nlc3NUeXBlOiBBY2NvdW50QWNjZXNzVHlwZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyB3b3Jrc3BhY2UgdXNlcyBTQU1MIDIuMCwgQVdTIElBTSBJZGVudGl0eSBDZW50ZXIsIG9yIGJvdGggdG9cbiAgICogYXV0aGVudGljYXRlIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEFXUyBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCB0byBoYXZlIElBTSByb2xlcyBhbmQgcGVybWlzc2lvbnNcbiAgICogY3JlYXRlZCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHJlYWQgZGF0YSBmcm9tIHRoZXNlIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFXUyBjb25zb2xlLCBhbmQgdGhlXG4gICAqIHBlcm1pc3Npb25UeXBlIGlzIFNFUlZJQ0VfTUFOQUdFRC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aHJvdWdoIE9yZ2FuaXphdGlvbnMuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIFNFUlZJQ0VfTUFOQUdFRCwgYW5kIHRoZSB3b3JrcGxhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQW1hem9uIE1hbmFnZWQgR3JhZmFuYVxuICAgKiBjb25zb2xlLCB0aGVuIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYXV0b21hdGljYWxseSBjcmVhdGVzIHRoZSBJQU0gcm9sZXMgYW5kIHByb3Zpc2lvbnMgdGhlXG4gICAqIHBlcm1pc3Npb25zIHRoYXQgdGhlIHdvcmtzcGFjZSBuZWVkcyB0byB1c2UgQVdTIGRhdGEgc291cmNlcyBhbmQgbm90aWZpY2F0aW9uIGNoYW5uZWxzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIENVU1RPTUVSX01BTkFHRUQsIHlvdSBtdXN0IG1hbmFnZSB0aG9zZSByb2xlcyBhbmQgcGVybWlzc2lvbnMgeW91cnNlbGYuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEgd29ya3NwYWNlIGluIGEgbWVtYmVyIGFjY291bnQgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCB0aGF0IGFjY291bnQgaXNcbiAgICogbm90IGEgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRoZSB3b3Jrc3BhY2UgdG8gYWNjZXNzIGRhdGEgc291cmNlcyBpblxuICAgKiBvdGhlciBBV1MgYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvbiwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gQ1VTVE9NRVJfTUFOQUdFRC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRoZSBBV1MgcmVzb3VyY2VzIHRoYXQgdGhlIHdvcmtzcGFjZSB3aWxsIHZpZXcgZGF0YVxuICAgKiBmcm9tLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gQW1hem9uIFZQQyB0aGF0IGNvbnRhaW5zIGRhdGEgc291cmNlcyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2cGNDb25maWd1cmF0aW9uPzogVnBjQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGlzIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHdvcmtzcGFjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VBcm46IHN0cmluZztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdvcmtzcGFjZUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElXb3Jrc3BhY2Uge1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBhY2Nlc3MgdHlwZSBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlcnMgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgdG9rZW4gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNvdXJjZXMgb2YgdGhpcyB3b3Jrc3BhY2VcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkYXRhU291cmNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyB3b3Jrc3BhY2VcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB3b3Jrc3BhY2VcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIG5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbnMgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgcmVzb3VyY2VzIHRocm91Z2ggT3JnYW5pemF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb24gdHlwZSBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBsdWdpbiBhZG1pbmlzdHJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSB3b3Jrc3BhY2UuIFNldHRpbmcgdG8gdHJ1ZSBhbGxvd3Mgd29ya3NwYWNlXG4gICAqIGFkbWlucyB0byBpbnN0YWxsLCB1bmluc3RhbGwsIGFuZCB1cGRhdGUgcGx1Z2lucyBmcm9tIHdpdGhpbiB0aGUgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHdvcmtzcGFjZXMgdGhhdCBzdXBwb3J0IEdyYWZhbmEgdmVyc2lvbiA5IG9yIG5ld2VyLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvbj86IFNhbWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgSUFNIHJvbGVzIHRvIGJlIHVzZWQgZm9yXG4gICAqIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNDb25maWd1cmF0aW9uPzogVnBjQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB3b3Jrc3BhY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGdldFdvcmtzcGFjZUFybih3b3Jrc3BhY2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLnN0YWNrO1xuICAgIHJldHVybiBgYXJuOiR7c3RhY2sucGFydGl0aW9ufTpncmFmYW5hOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OndvcmtzcGFjZXMvJHt3b3Jrc3BhY2VJZH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFdvcmtzcGFjZUlkKHdvcmtzcGFjZUFybjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZUFybi5zdWJzdHJpbmcod29ya3NwYWNlQXJuLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgfVxufSJdfQ==
@@ -228,16 +228,8 @@ export interface WorkspaceAttributes {
228
228
  readonly vpcConfiguration?: VpcConfiguration;
229
229
  /**
230
230
  * The arn of this workspace.
231
- *
232
- * Either this or the workspaceId must be provided.
233
- */
234
- readonly workspaceArn?: string;
235
- /**
236
- * The unique ID of this workspace.
237
- *
238
- * Either this or the workspaceArn must be provided.
239
231
  */
240
- readonly workspaceId?: string;
232
+ readonly workspaceArn: string;
241
233
  }
242
234
  /**
243
235
  * Specifies a workspace. In a workspace, you can create Grafana dashboards and visualizations to
package/lib/workspace.js CHANGED
@@ -32,24 +32,8 @@ class Workspace extends workspace_base_1.WorkspaceBase {
32
32
  this.samlConfiguration = attributes.samlConfiguration;
33
33
  this.stackSetName = attributes.stackSetName;
34
34
  this.vpcConfiguration = attributes.vpcConfiguration;
35
- if (attributes.workspaceArn && attributes.workspaceId) {
36
- if (this.getWorkspaceId(attributes.workspaceArn) !== attributes.workspaceId) {
37
- throw new Error(`workspaceId (${attributes.workspaceId}) does not match workspaceArn (${attributes.workspaceArn})`);
38
- }
39
- this.workspaceArn = attributes.workspaceArn;
40
- this.workspaceId = attributes.workspaceId;
41
- }
42
- else if (attributes.workspaceArn) {
43
- this.workspaceArn = attributes.workspaceArn;
44
- this.workspaceId = this.getWorkspaceId(attributes.workspaceArn);
45
- }
46
- else if (attributes.workspaceId) {
47
- this.workspaceId = attributes.workspaceId;
48
- this.workspaceArn = this.getWorkspaceArn(attributes.workspaceId);
49
- }
50
- else {
51
- throw new Error('workspaceArn or workspaceId must be provided');
52
- }
35
+ this.workspaceArn = attributes.workspaceArn;
36
+ this.workspaceId = this.getWorkspaceId(attributes.workspaceArn);
53
37
  }
54
38
  }
55
39
  return new Import(attrs);
@@ -576,5 +560,5 @@ class Workspace extends workspace_base_1.WorkspaceBase {
576
560
  }
577
561
  exports.Workspace = Workspace;
578
562
  _a = JSII_RTTI_SYMBOL_1;
579
- Workspace[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.0.33" };
580
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlEQUEwRTtBQUcxRSxxREFZMEI7QUFpUnpCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsOEJBQWE7SUFFbkMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQzVGLE1BQU0sTUFBTyxTQUFRLDhCQUFhO1lBb0JoQyxZQUFtQixVQUErQjtnQkFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2dCQUM1RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsVUFBVSxDQUFDLHdCQUF3QixDQUFDO2dCQUNwRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDO2dCQUMxRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2dCQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxrQkFBa0IsR0FB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QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUM7UUFDdEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTO2FBQzFDLDJCQUF3RCxDQUFDO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQW9CLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDOztBQXQxQkgsOEJBdTFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbldvcmtzcGFjZSwgQ2ZuV29ya3NwYWNlUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ3JhZmFuYSc7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBBY2NvdW50QWNjZXNzVHlwZSxcbiAgQXV0aGVudGljYXRpb25Qcm92aWRlcnMsXG4gIElXb3Jrc3BhY2UsXG4gIE5ldHdvcmtBY2Nlc3NDb250cm9sLFxuICBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnMsXG4gIFBlcm1pc3Npb25UeXBlcyxcbiAgU2FtbENvbmZpZ3VyYXRpb24sXG4gIFNhbWxDb25maWd1cmF0aW9uU3RhdHVzZXMsXG4gIFN0YXR1cyxcbiAgVnBjQ29uZmlndXJhdGlvbixcbiAgV29ya3NwYWNlQmFzZSxcbn0gZnJvbSAnLi93b3Jrc3BhY2UtYmFzZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlUHJvcHMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyXG4gICAqIGl0IGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICAgKiBPUkdBTklaQVRJT04sIHRoZSBPcmdhbml6YXRpb25hbFVuaXRzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhlXG4gICAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRBY2Nlc3NUeXBlOiBBY2NvdW50QWNjZXNzVHlwZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyB3b3Jrc3BhY2UgdXNlcyBTQU1MIDIuMCwgQVdTIElBTSBJZGVudGl0eSBDZW50ZXIsIG9yIGJvdGggdG9cbiAgICogYXV0aGVudGljYXRlIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyczogQXV0aGVudGljYXRpb25Qcm92aWRlcnNbXTtcblxuICAvKipcbiAgICogQSB1bmlxdWUsIGNhc2Utc2Vuc2l0aXZlLCB1c2VyLXByb3ZpZGVkIGlkZW50aWZpZXIgdG8gZW5zdXJlIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogTXVzdCBiZSAxLTY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIEdyYWZhbmEgdG8gc3VwcG9ydCBpbiB0aGUgd29ya3NwYWNlLiBEZWZhdWx0cyB0byB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgICogb24gY3JlYXRlIChmb3IgZXhhbXBsZSwgOS40KSwgb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgd29ya3NwYWNlIG9uIHVwZGF0ZS5cbiAgICogQ2FuIG9ubHkgYmUgdXNlZCB0byB1cGdyYWRlIChmb3IgZXhhbXBsZSwgZnJvbSA4LjQgdG8gOS40KSwgbm90IGRvd25ncmFkZSAoZm9yIGV4YW1wbGUsIGZyb21cbiAgICogOS40IHRvIDguNCkuXG4gICAqXG4gICAqIE11c3QgYmUgMS0yNTUgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhZmFuYVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE11c3QgYmUgMS0yNTUgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsXG4gICAqIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIElBTSByb2xlIHRvIHVzZSBmb3IgdGhlIG9yZ2FuaXphdGlvbi5cbiAgICogTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgU0VSVklDRV9NQU5BR0VELCBhbmQgdGhlIHdvcmtwbGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hXG4gICAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAgICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cbiAgICpcbiAgICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICAgKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gICAqIG90aGVyIEFXUyBhY2NvdW50cyBpbiB0aGUgb3JnYW5pemF0aW9uLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBDVVNUT01FUl9NQU5BR0VELlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGx1Z2luIGFkbWluaXN0cmF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIHdvcmtzcGFjZS4gU2V0dGluZyB0byB0cnVlIGFsbG93cyB3b3Jrc3BhY2VcbiAgICogYWRtaW5zIHRvIGluc3RhbGwsIHVuaW5zdGFsbCwgYW5kIHVwZGF0ZSBwbHVnaW5zIGZyb20gd2l0aGluIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igd29ya3NwYWNlcyB0aGF0IHN1cHBvcnQgR3JhZmFuYSB2ZXJzaW9uIDkgb3IgbmV3ZXIuXG4gICAqXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc2V0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBJQU0gcm9sZXMgdG8gYmUgdXNlZCBmb3JcbiAgICogdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICByZWFkb25seSB2cGNDb25maWd1cmF0aW9uPzogVnBjQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgY2FuIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIHRoaXMgQVdTIGFjY291bnQgb25seSwgb3Igd2hldGhlclxuICAgKiBpdCBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAgICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICAgKiB3b3Jrc3BhY2UgY2FuIGFjY2Vzcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIE11c3QgYmUgMS02NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEFXUyBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCB0byBoYXZlIElBTSByb2xlcyBhbmQgcGVybWlzc2lvbnNcbiAgICogY3JlYXRlZCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHJlYWQgZGF0YSBmcm9tIHRoZXNlIHNvdXJjZXMuXG4gICAqIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFXUyBjb25zb2xlLCBhbmQgdGhlXG4gICAqIHBlcm1pc3Npb25UeXBlIGlzIFNFUlZJQ0VfTUFOQUdFRC5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE11c3QgYmUgMS0yNTUgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsXG4gICAqIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIElBTSByb2xlIHRvIHVzZSBmb3IgdGhlIG9yZ2FuaXphdGlvbi5cbiAgICogTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgU0VSVklDRV9NQU5BR0VELCBhbmQgdGhlIHdvcmtwbGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hXG4gICAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAgICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cbiAgICpcbiAgICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICAgKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gICAqIG90aGVyIEFXUyBhY2NvdW50cyBpbiB0aGUgb3JnYW5pemF0aW9uLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBDVVNUT01FUl9NQU5BR0VELlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGx1Z2luIGFkbWluaXN0cmF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIHdvcmtzcGFjZS4gU2V0dGluZyB0byB0cnVlIGFsbG93cyB3b3Jrc3BhY2VcbiAgICogYWRtaW5zIHRvIGluc3RhbGwsIHVuaW5zdGFsbCwgYW5kIHVwZGF0ZSBwbHVnaW5zIGZyb20gd2l0aGluIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igd29ya3NwYWNlcyB0aGF0IHN1cHBvcnQgR3JhZmFuYSB2ZXJzaW9uIDkgb3IgbmV3ZXIuXG4gICAqXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc2V0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBJQU0gcm9sZXMgdG8gYmUgdXNlZCBmb3JcbiAgICogdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICByZWFkb25seSB2cGNDb25maWd1cmF0aW9uPzogVnBjQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGFybiBvZiB0aGlzIHdvcmtzcGFjZS5cbiAgICpcbiAgICogRWl0aGVyIHRoaXMgb3IgdGhlIHdvcmtzcGFjZUlkIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEVpdGhlciB0aGlzIG9yIHRoZSB3b3Jrc3BhY2VBcm4gbXVzdCBiZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSB3b3Jrc3BhY2UuIEluIGEgd29ya3NwYWNlLCB5b3UgY2FuIGNyZWF0ZSBHcmFmYW5hIGRhc2hib2FyZHMgYW5kIHZpc3VhbGl6YXRpb25zIHRvXG4gKiBhbmFseXplIHlvdXIgbWV0cmljcywgbG9ncywgYW5kIHRyYWNlcy4gWW91IGRvbid0IGhhdmUgdG8gYnVpbGQsIHBhY2thZ2UsIG9yIGRlcGxveSBhbnkgaGFyZHdhcmVcbiAqIHRvIHJ1biB0aGUgR3JhZmFuYSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2UgZXh0ZW5kcyBXb3Jrc3BhY2VCYXNlIHtcblxuICBwdWJsaWMgc3RhdGljIGZyb21Xb3Jrc3BhY2VBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBXb3Jrc3BhY2VBdHRyaWJ1dGVzKTogSVdvcmtzcGFjZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgV29ya3NwYWNlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUFybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cbiAgICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzOiBXb3Jrc3BhY2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAgICAgdGhpcy5hY2NvdW50QWNjZXNzVHlwZSA9IGF0dHJpYnV0ZXMuYWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcnMgPSBhdHRyaWJ1dGVzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzO1xuICAgICAgICB0aGlzLmNsaWVudFRva2VuID0gYXR0cmlidXRlcy5jbGllbnRUb2tlbjtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlcyA9IGF0dHJpYnV0ZXMuZGF0YVNvdXJjZXM7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhdHRyaWJ1dGVzLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWU7XG4gICAgICAgIHRoaXMubmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBhdHRyaWJ1dGVzLm5ldHdvcmtBY2Nlc3NDb250cm9sO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyA9IGF0dHJpYnV0ZXMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zO1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbmFsVW5pdHMgPSBhdHRyaWJ1dGVzLm9yZ2FuaXphdGlvbmFsVW5pdHM7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uUm9sZU5hbWUgPSBhdHRyaWJ1dGVzLm9yZ2FuaXphdGlvblJvbGVOYW1lO1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlID0gYXR0cmlidXRlcy5wZXJtaXNzaW9uVHlwZTtcbiAgICAgICAgdGhpcy5wbHVnaW5BZG1pbkVuYWJsZWQgPSBhdHRyaWJ1dGVzLnBsdWdpbkFkbWluRW5hYmxlZDtcbiAgICAgICAgdGhpcy5yb2xlID0gYXR0cmlidXRlcy5yb2xlO1xuICAgICAgICB0aGlzLnNhbWxDb25maWd1cmF0aW9uID0gYXR0cmlidXRlcy5zYW1sQ29uZmlndXJhdGlvbjtcbiAgICAgICAgdGhpcy5zdGFja1NldE5hbWUgPSBhdHRyaWJ1dGVzLnN0YWNrU2V0TmFtZTtcbiAgICAgICAgdGhpcy52cGNDb25maWd1cmF0aW9uID0gYXR0cmlidXRlcy52cGNDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLndvcmtzcGFjZUFybiAmJiBhdHRyaWJ1dGVzLndvcmtzcGFjZUlkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0V29ya3NwYWNlSWQoYXR0cmlidXRlcy53b3Jrc3BhY2VBcm4pICE9PSBhdHRyaWJ1dGVzLndvcmtzcGFjZUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdvcmtzcGFjZUlkICgke2F0dHJpYnV0ZXMud29ya3NwYWNlSWR9KSBkb2VzIG5vdCBtYXRjaCB3b3Jrc3BhY2VBcm4gKCR7YXR0cmlidXRlcy53b3Jrc3BhY2VBcm59KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLndvcmtzcGFjZUFybiA9IGF0dHJpYnV0ZXMud29ya3NwYWNlQXJuO1xuICAgICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSBhdHRyaWJ1dGVzLndvcmtzcGFjZUlkO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMud29ya3NwYWNlQXJuKSB7XG4gICAgICAgICAgdGhpcy53b3Jrc3BhY2VBcm4gPSBhdHRyaWJ1dGVzLndvcmtzcGFjZUFybjtcbiAgICAgICAgICB0aGlzLndvcmtzcGFjZUlkID0gdGhpcy5nZXRXb3Jrc3BhY2VJZChhdHRyaWJ1dGVzLndvcmtzcGFjZUFybik7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy53b3Jrc3BhY2VJZCkge1xuICAgICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSBhdHRyaWJ1dGVzLndvcmtzcGFjZUlkO1xuICAgICAgICAgIHRoaXMud29ya3NwYWNlQXJuID0gdGhpcy5nZXRXb3Jrc3BhY2VBcm4oYXR0cmlidXRlcy53b3Jrc3BhY2VJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3b3Jrc3BhY2VBcm4gb3Igd29ya3NwYWNlSWQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoYXR0cnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgY2xpZW50VG9rZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBjbGllbnQgdG9rZW4gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDY0IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIE11c3QgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUNsaWVudFRva2VuKHRva2VuOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnY2xpZW50VG9rZW4gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4ID0gL15bIS1+XXsxLDY0fSQvO1xuICAgIGlmICghcmVnZXgudGVzdCh0b2tlbikpIHtcbiAgICAgIGlmICh0b2tlbi5sZW5ndGggPCAxIHx8IHRva2VuLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdjbGllbnRUb2tlbiBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bIS1+XSokLy50ZXN0KHRva2VuKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnY2xpZW50VG9rZW4gbXVzdCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBjYW5ub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBncmFmYW5hVmVyc2lvbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgR3JhZmFuYSB2ZXJzaW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyBsb25nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUdyYWZhbmFWZXJzaW9uKHZlcnNpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2dyYWZhbmFWZXJzaW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPCAxKSB7XG4gICAgICBlcnJvcnMucHVzaCgnZ3JhZmFuYVZlcnNpb24gY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoID4gMjU1KSB7XG4gICAgICBlcnJvcnMucHVzaCgnZ3JhZmFuYVZlcnNpb24gY2Fubm90IGV4Y2VlZCAyNTUgY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBuYW1lIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSB3b3Jrc3BhY2UgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIENhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZU5hbWUobmFtZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnbmFtZSBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlcXC0uX35dezEsMjU1fSQvO1xuICAgIGlmICghcmVnZXgudGVzdChuYW1lKSkge1xuICAgICAgaWYgKG5hbWUubGVuZ3RoIDwgMSB8fCBuYW1lLmxlbmd0aCA+IDI1NSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMgbG9uZycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIS9eW2EtekEtWjAtOVxcLS5ffl0qJC8udGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAnbmFtZSBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLCB1bmRlcnNjb3JlcywgYW5kIHRpbGRlcycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG5ldHdvcmtBY2Nlc3NDb250cm9sIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFjIC0gVGhlIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYW4gb2JqZWN0XG4gICAqIC0gcHJlZml4TGlzdHMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBhdCBtb3N0IDUgaXRlbXNcbiAgICogLSB2cGNFbmRwb2ludHMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBhdCBtb3N0IDUgaXRlbXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlTmV0d29ya0FjY2Vzc0NvbnRyb2wobmFjOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICghbmFjIHx8IHR5cGVvZiBuYWMgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnbmV0d29ya0FjY2Vzc0NvbnRyb2wgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgY29uc3QgbmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBuYWMgYXMgTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgICAvLyBDaGVjayBwcmVmaXhMaXN0cyBpZiBwcmVzZW50XG4gICAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnByZWZpeExpc3RzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShuZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3ByZWZpeExpc3RzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH0gZWxzZSBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMubGVuZ3RoID4gNSkge1xuICAgICAgICBlcnJvcnMucHVzaCgncHJlZml4TGlzdHMgY2FuIGhhdmUgYXQgbW9zdCA1IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdnBjRW5kcG9pbnRzIGlmIHByZXNlbnRcbiAgICBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wudnBjRW5kcG9pbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShuZXR3b3JrQWNjZXNzQ29udHJvbC52cGNFbmRwb2ludHMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCd2cGNFbmRwb2ludHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfSBlbHNlIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC52cGNFbmRwb2ludHMubGVuZ3RoID4gNSkge1xuICAgICAgICBlcnJvcnMucHVzaCgndnBjRW5kcG9pbnRzIGNhbiBoYXZlIGF0IG1vc3QgNSBpdGVtcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBvcmdhbml6YXRpb25Sb2xlTmFtZSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVOYW1lIC0gVGhlIG9yZ2FuaXphdGlvbiByb2xlIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIwNDggY2hhcmFjdGVycyBsb25nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZU9yZ2FuaXphdGlvblJvbGVOYW1lKHJvbGVOYW1lOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygcm9sZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnb3JnYW5pemF0aW9uUm9sZU5hbWUgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICBlcnJvcnMucHVzaCgnb3JnYW5pemF0aW9uUm9sZU5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHJvbGVOYW1lLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdvcmdhbml6YXRpb25Sb2xlTmFtZSBjYW5ub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBFYWNoIGF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIFZhbGlkIGF0dHJpYnV0ZSBrZXlzIGFyZTogJ2VtYWlsJywgJ2dyb3VwcycsICdsb2dpbicsICduYW1lJywgJ29yZycsICdyb2xlJ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyhvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbJ0lucHV0IGlzIG5vdCBhbiBvYmplY3QnXTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTsgLy8gT3B0aW9uYWwgcHJvcGVydGllcyBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQcm9wZXJ0eSAnJHtrZXl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFByb3BlcnR5ICcke2tleX0nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgYFByb3BlcnR5ICcke2tleX0nIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMjU2IGNoYXJhY3RlcnNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBTQU1MIElkUCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIFRoZSBTQU1MIElkUCBtZXRhZGF0YSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYW4gb2JqZWN0XG4gICAqIC0gdXJsIChpZiBwcmVzZW50KSBtdXN0IGJlIGEgc3RyaW5nIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogLSB4bWwgKGlmIHByZXNlbnQpIG11c3QgYmUgYSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2FtbElkcE1ldGFkYXRhKG9iajogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFsnSW5wdXQgaXMgbm90IGFuIG9iamVjdCddO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ2hlY2sgdXJsIHByb3BlcnR5IGlmIHByZXNlbnRcbiAgICBpZiAobWV0YWRhdGEudXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEudXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd1cmwnIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnVybC5sZW5ndGggPCAxKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3VybCcgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS51cmwubGVuZ3RoID4gMjA0OCkge1xuICAgICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd1cmwnIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHhtbCBwcm9wZXJ0eSBpZiBwcmVzZW50XG4gICAgaWYgKG1ldGFkYXRhLnhtbCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBtZXRhZGF0YS54bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd4bWwnIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIFNBTUwgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBTQU1MIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIGlkcE1ldGFkYXRhIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIHZhbGlkXG4gICAqIC0gYXNzZXJ0aW9uQXRycmlidXRlcyAoaWYgcHJlc2VudCkgbXVzdCBiZSB2YWxpZFxuICAgKiAtIGFsbG93ZWRPcmdhbml6YXRpb25zIChpZiBwcmVzZW50KSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCAxLTI1NiBlbGVtZW50c1xuICAgKiAtIGxvZ2luVmFsaWRpdHlEdXJhdGlvbiAoaWYgcHJlc2VudCkgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclxuICAgKiAtIHJvbGVWYWx1ZXMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmFsaWQgYWRtaW4gYW5kIGVkaXRvciBhcnJheXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2FtbENvbmZpZ3VyYXRpb24oY29uZmlnOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICghY29uZmlnIHx8IHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc2FtbENvbmZpZ3VyYXRpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2FtbENvbmZpZyA9IGNvbmZpZyBhcyBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIENoZWNrIGlkcE1ldGFkYXRhIChyZXF1aXJlZClcbiAgICBpZiAoc2FtbENvbmZpZy5pZHBNZXRhZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnaWRwTWV0YWRhdGEgaXMgcmVxdWlyZWQgaW4gc2FtbENvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWRwTWV0YWRhdGFFcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVTYW1sSWRwTWV0YWRhdGEoXG4gICAgICAgIHNhbWxDb25maWcuaWRwTWV0YWRhdGEsXG4gICAgICApO1xuICAgICAgaWYgKGlkcE1ldGFkYXRhRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uaWRwTWV0YWRhdGFFcnJvcnMubWFwKChlcnIpID0+IGBpZHBNZXRhZGF0YTogJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGFzc2VydGlvbkF0cnJpYnV0ZXMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLmFzc2VydGlvbkF0cnJpYnV0ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXR0cmlidXRlRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlU2FtbEFzc2VydGlvbkF0dHJpYnV0ZXMoXG4gICAgICAgIHNhbWxDb25maWcuYXNzZXJ0aW9uQXRycmlidXRlcyxcbiAgICAgICk7XG4gICAgICBpZiAoYXR0cmlidXRlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uYXR0cmlidXRlRXJyb3JzLm1hcCgoZXJyKSA9PiBgYXNzZXJ0aW9uQXRycmlidXRlczogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYWxsb3dlZE9yZ2FuaXphdGlvbnMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnYWxsb3dlZE9yZ2FuaXphdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIGVycm9ycy5wdXNoKCdhbGxvd2VkT3JnYW5pemF0aW9ucyBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAnYWxsb3dlZE9yZ2FuaXphdGlvbnMgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDI1NiBlbGVtZW50cycsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG9yZyA9IHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnNbaV07XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChgYWxsb3dlZE9yZ2FuaXphdGlvbnNbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGxvZ2luVmFsaWRpdHlEdXJhdGlvbiBpZiBwcmVzZW50XG4gICAgaWYgKHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2FtbENvbmZpZy5sb2dpblZhbGlkaXR5RHVyYXRpb24gIT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdsb2dpblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfSBlbHNlIGlmIChzYW1sQ29uZmlnLmxvZ2luVmFsaWRpdHlEdXJhdGlvbiA8PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdsb2dpblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHJvbGVWYWx1ZXMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFzYW1sQ29uZmlnLnJvbGVWYWx1ZXMgfHwgdHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGFkbWluIGFycmF5IGlmIHByZXNlbnRcbiAgICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbikpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdyb2xlVmFsdWVzLmFkbWluIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW5baV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYHJvbGVWYWx1ZXMuYWRtaW5bJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4ubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgICAgICdyb2xlVmFsdWVzLmFkbWluIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgZWxlbWVudHMnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGVkaXRvciBhcnJheSBpZiBwcmVzZW50XG4gICAgICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvcikpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdyb2xlVmFsdWVzLmVkaXRvciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcy5lZGl0b3JbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYHJvbGVWYWx1ZXMuZWRpdG9yWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvci5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAgICAgJ3JvbGVWYWx1ZXMuZWRpdG9yIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgZWxlbWVudHMnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB2cGNDb25maWd1cmF0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIFZQQyBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBzZWN1cml0eUdyb3VwcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIDEtNSBpdGVtc1xuICAgKiAtIHN1Ym5ldHMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gYXJyYXkgd2l0aCAyLTYgaXRlbXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlVnBjQ29uZmlndXJhdGlvbihjb25maWc6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKCd2cGNDb25maWd1cmF0aW9uIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGNvbnN0IHZwY0NvbmZpZyA9IGNvbmZpZyBhcyBWcGNDb25maWd1cmF0aW9uO1xuXG4gICAgLy8gQ2hlY2sgc2VjdXJpdHlHcm91cHMgKHJlcXVpcmVkKVxuICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIGlzIHJlcXVpcmVkIGluIHZwY0NvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHZwY0NvbmZpZy5zZWN1cml0eUdyb3VwcykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMubGVuZ3RoIDwgMSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnc2VjdXJpdHlHcm91cHMgbXVzdCBoYXZlIGF0IGxlYXN0IDEgaXRlbScpO1xuICAgICAgfVxuICAgICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNSBpdGVtcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHN1Ym5ldHMgKHJlcXVpcmVkKVxuICAgIGlmICh2cGNDb25maWcuc3VibmV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc3VibmV0cyBpcyByZXF1aXJlZCBpbiB2cGNDb25maWd1cmF0aW9uJyk7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2cGNDb25maWcuc3VibmV0cykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgbXVzdCBoYXZlIGF0IGxlYXN0IDIgaXRlbXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2cGNDb25maWcuc3VibmV0cy5sZW5ndGggPiA2KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA2IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHdvcmtzcGFjZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgd29ya3NwYWNlIHByb3BlcnRpZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWdncmVnYXRlcyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSBhbGwgaW5kaXZpZHVhbCBwcm9wZXJ0eSB2YWxpZGF0b3JzLlxuICAgKiBJdCB0aHJvd3MgYW4gZXJyb3IgaWYgcHJvcHMgaXMgbm90IGFuIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUHJvcHMocHJvcHM6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFwcm9wcyB8fCB0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3BzIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3Qgd29ya3NwYWNlUHJvcHMgPSBwcm9wcyBhcyBXb3Jrc3BhY2VQcm9wcztcblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5jbGllbnRUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjbGllbnRUb2tlbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZUNsaWVudFRva2VuKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5jbGllbnRUb2tlbixcbiAgICAgICk7XG4gICAgICBpZiAoY2xpZW50VG9rZW5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5jbGllbnRUb2tlbkVycm9ycy5tYXAoKGVycikgPT4gYGNsaWVudFRva2VuOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgKTtcbiAgICAgIGlmIChkZXNjcmlwdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmRlc2NyaXB0aW9uRXJyb3JzLm1hcCgoZXJyKSA9PiBgZGVzY3JpcHRpb246ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuZ3JhZmFuYVZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ3JhZmFuYVZlcnNpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVHcmFmYW5hVmVyc2lvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuZ3JhZmFuYVZlcnNpb24sXG4gICAgICApO1xuICAgICAgaWYgKGdyYWZhbmFWZXJzaW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uZ3JhZmFuYVZlcnNpb25FcnJvcnMubWFwKChlcnIpID0+IGBncmFmYW5hVmVyc2lvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmFtZUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZU5hbWUod29ya3NwYWNlUHJvcHMubmFtZSk7XG4gICAgICBpZiAobmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLm5hbWVFcnJvcnMubWFwKChlcnIpID0+IGBuYW1lOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlTmV0d29ya0FjY2Vzc0NvbnRyb2woXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLm5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzLm1hcChcbiAgICAgICAgICAgIChlcnIpID0+IGBuZXR3b3JrQWNjZXNzQ29udHJvbDogJHtlcnJ9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZU9yZ2FuaXphdGlvblJvbGVOYW1lKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSxcbiAgICAgICk7XG4gICAgICBpZiAob3JnYW5pemF0aW9uUm9sZU5hbWVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5vcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycy5tYXAoXG4gICAgICAgICAgICAoZXJyKSA9PiBgb3JnYW5pemF0aW9uUm9sZU5hbWU6ICR7ZXJyfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuc2FtbENvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVTYW1sQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICApO1xuICAgICAgaWYgKHNhbWxDb25maWd1cmF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGBzYW1sQ29uZmlndXJhdGlvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLnZwY0NvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdnBjQ29uZmlndXJhdGlvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVZwY0NvbmZpZ3VyYXRpb24oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLnZwY0NvbmZpZ3VyYXRpb24sXG4gICAgICApO1xuICAgICAgaWYgKHZwY0NvbmZpZ3VyYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi52cGNDb25maWd1cmF0aW9uRXJyb3JzLm1hcCgoZXJyKSA9PiBgdnBjQ29uZmlndXJhdGlvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0b1xuICAgKiBhdXRoZW50aWNhdGUgdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgY2FzZS1zZW5zaXRpdmUsIHVzZXItcHJvdmlkZWQgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEFXUyBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCB0byBoYXZlIElBTSByb2xlcyBhbmQgcGVybWlzc2lvbnNcbiAgICogY3JlYXRlZCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHJlYWQgZGF0YSBmcm9tIHRoZXNlIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFXUyBjb25zb2xlLCBhbmQgdGhlXG4gICAqIHBlcm1pc3Npb25UeXBlIGlzIFNFUlZJQ0VfTUFOQUdFRC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhU291cmNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlci1kZWZpbmVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1Mgbm90aWZpY2F0aW9uIGNoYW5uZWxzIHRoYXQgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBjYW4gYXV0b21hdGljYWxseSBjcmVhdGUgSUFNIHJvbGVzXG4gICAqIGFuZCBwZXJtaXNzaW9ucyBmb3IsIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gdXNlIHRoZXNlIGNoYW5uZWxzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aHJvdWdoIE9yZ2FuaXphdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgU0VSVklDRV9NQU5BR0VELCBhbmQgdGhlIHdvcmtwbGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hXG4gICAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAgICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cbiAgICpcbiAgICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICAgKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gICAqIG90aGVyIEFXUyBhY2NvdW50cyBpbiB0aGUgb3JnYW5pemF0aW9uLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBDVVNUT01FUl9NQU5BR0VELlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGx1Z2luIGFkbWluaXN0cmF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIHdvcmtzcGFjZS4gU2V0dGluZyB0byB0cnVlIGFsbG93cyB3b3Jrc3BhY2VcbiAgICogYWRtaW5zIHRvIGluc3RhbGwsIHVuaW5zdGFsbCwgYW5kIHVwZGF0ZSBwbHVnaW5zIGZyb20gd2l0aGluIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igd29ya3NwYWNlcyB0aGF0IHN1cHBvcnQgR3JhZmFuYSB2ZXJzaW9uIDkgb3IgbmV3ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRoZSBBV1MgcmVzb3VyY2VzIHRoYXQgdGhlIHdvcmtzcGFjZSB3aWxsIHZpZXcgZGF0YVxuICAgKiBmcm9tLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAgICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gICAqIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc2V0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBJQU0gcm9sZXMgdG8gYmUgdXNlZCBmb3JcbiAgICogdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gQW1hem9uIFZQQyB0aGF0IGNvbnRhaW5zIGRhdGEgc291cmNlcyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlOiBDZm5Xb3Jrc3BhY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIHRoYXQgdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGlvblRpbWVzdGFtcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRoYXQgdXNlcnMgY2FuIHVzZSB0byBhY2Nlc3MgdGhlIEdyYWZhbmEgY29uc29sZSBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBHcmFmYW5hIHN1cHBvcnRlZCBieSB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFmYW5hVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IHJlY2VudCBkYXRlIHRoYXQgdGhlIHdvcmtzcGFjZSB3YXMgbW9kaWZpZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kaWZpY2F0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UncyBTQU1MIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb25TdGF0dXM6IFNhbWxDb25maWd1cmF0aW9uU3RhdHVzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgSUFNIElkZW50aXR5IENlbnRlci1tYW5hZ2VkIGFwcGxpY2F0aW9uIHRoYXQgaXMgY3JlYXRlZCBieSBBbWF6b24gTWFuYWdlZFxuICAgKiBHcmFmYW5hLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNzb0NsaWVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1czogU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJuIG9mIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUFybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXb3Jrc3BhY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSA9PT0gQWNjb3VudEFjY2Vzc1R5cGUuQ1VSUkVOVF9BQ0NPVU5UICYmXG4gICAgICAhcHJvcHMucm9sZVxuICAgICkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdSb2xlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBhY2NvdW50QWNjZXNzVHlwZSBpcyBDVVJSRU5UX0FDQ09VTlQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wczpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gcHJvcHMuYWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IHByb3BzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzO1xuICAgIHRoaXMuY2xpZW50VG9rZW4gPSBwcm9wcy5jbGllbnRUb2tlbjtcbiAgICB0aGlzLmRhdGFTb3VyY2VzID0gcHJvcHMuZGF0YVNvdXJjZXM7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBwcm9wcy5uZXR3b3JrQWNjZXNzQ29udHJvbDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyA9IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucztcbiAgICB0aGlzLm9yZ2FuaXphdGlvbmFsVW5pdHMgPSBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRzO1xuICAgIHRoaXMub3JnYW5pemF0aW9uUm9sZU5hbWUgPSBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZTtcbiAgICB0aGlzLnBlcm1pc3Npb25UeXBlID0gcHJvcHMucGVybWlzc2lvblR5cGU7XG4gICAgdGhpcy5wbHVnaW5BZG1pbkVuYWJsZWQgPSBwcm9wcy5wbHVnaW5BZG1pbkVuYWJsZWQ7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IHByb3BzLnN0YWNrU2V0TmFtZTtcbiAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBwcm9wcy52cGNDb25maWd1cmF0aW9uO1xuXG4gICAgbGV0IGNmbldvcmtzcGFjZVByb3BzOiBDZm5Xb3Jrc3BhY2VQcm9wcyA9IHtcbiAgICAgIGFjY291bnRBY2Nlc3NUeXBlOiBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSxcbiAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBwcm9wcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgICAgIGNsaWVudFRva2VuOiBwcm9wcy5jbGllbnRUb2tlbixcbiAgICAgIGRhdGFTb3VyY2VzOiBwcm9wcy5kYXRhU291cmNlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdyYWZhbmFWZXJzaW9uOiBwcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM6IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyxcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdHM6IHByb3BzLm9yZ2FuaXphdGlvbmFsVW5pdHMsXG4gICAgICBvcmdhbml6YXRpb25Sb2xlTmFtZTogcHJvcHMub3JnYW5pemF0aW9uUm9sZU5hbWUsXG4gICAgICBwZXJtaXNzaW9uVHlwZTogcHJvcHMucGVybWlzc2lvblR5cGUsXG4gICAgICBwbHVnaW5BZG1pbkVuYWJsZWQ6IHByb3BzLnBsdWdpbkFkbWluRW5hYmxlZCxcbiAgICAgIHJvbGVBcm46IHByb3BzLnJvbGU/LnJvbGVBcm4sXG4gICAgICBzYW1sQ29uZmlndXJhdGlvbjogcHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICBzdGFja1NldE5hbWU6IHByb3BzLnN0YWNrU2V0TmFtZSxcbiAgICAgIHZwY0NvbmZpZ3VyYXRpb246IHByb3BzLnZwY0NvbmZpZ3VyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zZWN1cml0eUdyb3Vwcy5tYXAoXG4gICAgICAgICAgICAoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym5ldElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zdWJuZXRzLm1hcChcbiAgICAgICAgICAgIChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtzcGFjZSA9IG5ldyBDZm5Xb3Jrc3BhY2UodGhpcywgJ1Jlc291cmNlJywgY2ZuV29ya3NwYWNlUHJvcHMpO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLndvcmtzcGFjZTtcblxuICAgIHRoaXMuY3JlYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyQ3JlYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy5lbmRwb2ludCA9IHRoaXMud29ya3NwYWNlLmF0dHJFbmRwb2ludDtcbiAgICB0aGlzLmdyYWZhbmFWZXJzaW9uID0gdGhpcy53b3Jrc3BhY2UuYXR0ckdyYWZhbmFWZXJzaW9uO1xuICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLndvcmtzcGFjZS5hdHRySWQ7XG4gICAgdGhpcy5tb2RpZmljYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyTW9kaWZpY2F0aW9uVGltZXN0YW1wO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb25TdGF0dXMgPSB0aGlzLndvcmtzcGFjZVxuICAgICAgLmF0dHJTYW1sQ29uZmlndXJhdGlvblN0YXR1cyBhcyBTYW1sQ29uZmlndXJhdGlvblN0YXR1c2VzO1xuICAgIHRoaXMuc3NvQ2xpZW50SWQgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3NvQ2xpZW50SWQ7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3RhdHVzIGFzIFN0YXR1cztcbiAgICB0aGlzLndvcmtzcGFjZUFybiA9IHRoaXMuZ2V0V29ya3NwYWNlQXJuKHRoaXMud29ya3NwYWNlSWQpO1xuICB9XG59XG4iXX0=
563
+ Workspace[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.0.35" };
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlEQUEwRTtBQUcxRSxxREFZMEI7QUF3UXpCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsOEJBQWE7SUFFbkMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQzVGLE1BQU0sTUFBTyxTQUFRLDhCQUFhO1lBb0JoQyxZQUFtQixVQUErQjtnQkFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2dCQUM1RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsVUFBVSxDQUFDLHdCQUF3QixDQUFDO2dCQUNwRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDO2dCQUMxRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2dCQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxrQkFBa0IsR0FB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RSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDNUI7aUJBQ0Y7Z0JBQ0QsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLDBCQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQztRQUN0RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVM7YUFDMUMsMkJBQXdELENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBb0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7O0FBeDBCSCw4QkF5MEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuV29ya3NwYWNlLCBDZm5Xb3Jrc3BhY2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ncmFmYW5hJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIEFjY291bnRBY2Nlc3NUeXBlLFxuICBBdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgSVdvcmtzcGFjZSxcbiAgTmV0d29ya0FjY2Vzc0NvbnRyb2wsXG4gIE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyxcbiAgUGVybWlzc2lvblR5cGVzLFxuICBTYW1sQ29uZmlndXJhdGlvbixcbiAgU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcyxcbiAgU3RhdHVzLFxuICBWcGNDb25maWd1cmF0aW9uLFxuICBXb3Jrc3BhY2VCYXNlLFxufSBmcm9tICcuL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0b1xuICAgKiBhdXRoZW50aWNhdGUgdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgY2FzZS1zZW5zaXRpdmUsIHVzZXItcHJvdmlkZWQgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBNdXN0IGJlIDEtNjQgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBBV1MgZGF0YSBzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gaGF2ZSBJQU0gcm9sZXMgYW5kIHBlcm1pc3Npb25zXG4gICAqIGNyZWF0ZWQgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byByZWFkIGRhdGEgZnJvbSB0aGVzZSBzb3VyY2VzLlxuICAgKiBUaGlzIGxpc3QgaXMgb25seSB1c2VkIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBV1MgY29uc29sZSwgYW5kIHRoZVxuICAgKiBwZXJtaXNzaW9uVHlwZSBpcyBTRVJWSUNFX01BTkFHRUQuXG4gICAqL1xuICByZWFkb25seSBkYXRhU291cmNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlci1kZWZpbmVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgR3JhZmFuYSB0byBzdXBwb3J0IGluIHRoZSB3b3Jrc3BhY2UuIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvblxuICAgKiBvbiBjcmVhdGUgKGZvciBleGFtcGxlLCA5LjQpLCBvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB3b3Jrc3BhY2Ugb24gdXBkYXRlLlxuICAgKiBDYW4gb25seSBiZSB1c2VkIHRvIHVwZ3JhZGUgKGZvciBleGFtcGxlLCBmcm9tIDguNCB0byA5LjQpLCBub3QgZG93bmdyYWRlIChmb3IgZXhhbXBsZSwgZnJvbVxuICAgKiA5LjQgdG8gOC40KS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBncmFmYW5hVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cyxcbiAgICogdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICpcbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAgICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gICAqIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyXG4gICAqIGl0IGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICAgKiBPUkdBTklaQVRJT04sIHRoZSBPcmdhbml6YXRpb25hbFVuaXRzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhlXG4gICAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRBY2Nlc3NUeXBlOiBBY2NvdW50QWNjZXNzVHlwZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyB3b3Jrc3BhY2UgdXNlcyBTQU1MIDIuMCwgQVdTIElBTSBJZGVudGl0eSBDZW50ZXIsIG9yIGJvdGggdG9cbiAgICogYXV0aGVudGljYXRlIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyczogQXV0aGVudGljYXRpb25Qcm92aWRlcnNbXTtcblxuICAvKipcbiAgICogQSB1bmlxdWUsIGNhc2Utc2Vuc2l0aXZlLCB1c2VyLXByb3ZpZGVkIGlkZW50aWZpZXIgdG8gZW5zdXJlIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogTXVzdCBiZSAxLTY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cyxcbiAgICogdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICpcbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAgICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gICAqIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJuIG9mIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHdvcmtzcGFjZS4gSW4gYSB3b3Jrc3BhY2UsIHlvdSBjYW4gY3JlYXRlIEdyYWZhbmEgZGFzaGJvYXJkcyBhbmQgdmlzdWFsaXphdGlvbnMgdG9cbiAqIGFuYWx5emUgeW91ciBtZXRyaWNzLCBsb2dzLCBhbmQgdHJhY2VzLiBZb3UgZG9uJ3QgaGF2ZSB0byBidWlsZCwgcGFja2FnZSwgb3IgZGVwbG95IGFueSBoYXJkd2FyZVxuICogdG8gcnVuIHRoZSBHcmFmYW5hIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZSBleHRlbmRzIFdvcmtzcGFjZUJhc2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVdvcmtzcGFjZUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFdvcmtzcGFjZUF0dHJpYnV0ZXMpOiBJV29ya3NwYWNlIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBXb3Jrc3BhY2VCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlPzogSVJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAgICAgcHVibGljIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXM6IFdvcmtzcGFjZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gYXR0cmlidXRlcy5hY2NvdW50QWNjZXNzVHlwZTtcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IGF0dHJpYnV0ZXMuYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XG4gICAgICAgIHRoaXMuY2xpZW50VG9rZW4gPSBhdHRyaWJ1dGVzLmNsaWVudFRva2VuO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VzID0gYXR0cmlidXRlcy5kYXRhU291cmNlcztcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGF0dHJpYnV0ZXMuZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZTtcbiAgICAgICAgdGhpcy5uZXR3b3JrQWNjZXNzQ29udHJvbCA9IGF0dHJpYnV0ZXMubmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zID0gYXR0cmlidXRlcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnM7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0cyA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uYWxVbml0cztcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25Sb2xlTmFtZSA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uUm9sZU5hbWU7XG4gICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUgPSBhdHRyaWJ1dGVzLnBlcm1pc3Npb25UeXBlO1xuICAgICAgICB0aGlzLnBsdWdpbkFkbWluRW5hYmxlZCA9IGF0dHJpYnV0ZXMucGx1Z2luQWRtaW5FbmFibGVkO1xuICAgICAgICB0aGlzLnJvbGUgPSBhdHRyaWJ1dGVzLnJvbGU7XG4gICAgICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnNhbWxDb25maWd1cmF0aW9uO1xuICAgICAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IGF0dHJpYnV0ZXMuc3RhY2tTZXROYW1lO1xuICAgICAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnZwY0NvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMud29ya3NwYWNlQXJuID0gYXR0cmlidXRlcy53b3Jrc3BhY2VBcm47XG4gICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLmdldFdvcmtzcGFjZUlkKGF0dHJpYnV0ZXMud29ya3NwYWNlQXJuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChhdHRycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjbGllbnRUb2tlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGNsaWVudCB0b2tlbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycyBsb25nXG4gICAqIC0gTXVzdCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlQ2xpZW50VG9rZW4odG9rZW46IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdjbGllbnRUb2tlbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgY29uc3QgcmVnZXggPSAvXlshLX5dezEsNjR9JC87XG4gICAgaWYgKCFyZWdleC50ZXN0KHRva2VuKSkge1xuICAgICAgaWYgKHRva2VuLmxlbmd0aCA8IDEgfHwgdG9rZW4ubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ2NsaWVudFRva2VuIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEvXlshLX5dKiQvLnRlc3QodG9rZW4pKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdjbGllbnRUb2tlbiBtdXN0IGNvbnRhaW4gb25seSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkZXNjcmlwdGlvbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIC0gVGhlIGRlc2NyaXB0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2Rlc2NyaXB0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMjA0OCkge1xuICAgICAgZXJyb3JzLnB1c2goJ2Rlc2NyaXB0aW9uIGNhbm5vdCBleGNlZWQgMjA0OCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGdyYWZhbmFWZXJzaW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBHcmFmYW5hIHZlcnNpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlR3JhZmFuYVZlcnNpb24odmVyc2lvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnZ3JhZmFuYVZlcnNpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA8IDEpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdncmFmYW5hVmVyc2lvbiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPiAyNTUpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdncmFmYW5hVmVyc2lvbiBjYW5ub3QgZXhjZWVkIDI1NSBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIHdvcmtzcGFjZSBuYW1lIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyBsb25nXG4gICAqIC0gQ2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cywgdW5kZXJzY29yZXMsIGFuZCB0aWxkZXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlTmFtZShuYW1lOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCduYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWjAtOVxcLS5ffl17MSwyNTV9JC87XG4gICAgaWYgKCFyZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICBpZiAobmFtZS5sZW5ndGggPCAxIHx8IG5hbWUubGVuZ3RoID4gMjU1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCduYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05XFwtLl9+XSokLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICduYW1lIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbmV0d29ya0FjY2Vzc0NvbnRyb2wgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBuYWMgLSBUaGUgbmV0d29yayBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBwcmVmaXhMaXN0cyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSB3aXRoIGF0IG1vc3QgNSBpdGVtc1xuICAgKiAtIHZwY0VuZHBvaW50cyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSB3aXRoIGF0IG1vc3QgNSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbChuYWM6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFuYWMgfHwgdHlwZW9mIG5hYyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKCduZXR3b3JrQWNjZXNzQ29udHJvbCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBjb25zdCBuZXR3b3JrQWNjZXNzQ29udHJvbCA9IG5hYyBhcyBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAgIC8vIENoZWNrIHByZWZpeExpc3RzIGlmIHByZXNlbnRcbiAgICBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5ldHdvcmtBY2Nlc3NDb250cm9sLnByZWZpeExpc3RzKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgncHJlZml4TGlzdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfSBlbHNlIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdwcmVmaXhMaXN0cyBjYW4gaGF2ZSBhdCBtb3N0IDUgaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB2cGNFbmRwb2ludHMgaWYgcHJlc2VudFxuICAgIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC52cGNFbmRwb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3ZwY0VuZHBvaW50cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9IGVsc2UgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCd2cGNFbmRwb2ludHMgY2FuIGhhdmUgYXQgbW9zdCA1IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG9yZ2FuaXphdGlvblJvbGVOYW1lIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gcm9sZU5hbWUgLSBUaGUgb3JnYW5pemF0aW9uIHJvbGUgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlT3JnYW5pemF0aW9uUm9sZU5hbWUocm9sZU5hbWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiByb2xlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdvcmdhbml6YXRpb25Sb2xlTmFtZSBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgaWYgKHJvbGVOYW1lLmxlbmd0aCA8IDEpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdvcmdhbml6YXRpb25Sb2xlTmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG5cbiAgICBpZiAocm9sZU5hbWUubGVuZ3RoID4gMjA0OCkge1xuICAgICAgZXJyb3JzLnB1c2goJ29yZ2FuaXphdGlvblJvbGVOYW1lIGNhbm5vdCBleGNlZWQgMjA0OCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmogLSBUaGUgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYW4gb2JqZWN0XG4gICAqIC0gRWFjaCBhdHRyaWJ1dGUgbXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nXG4gICAqIC0gVmFsaWQgYXR0cmlidXRlIGtleXMgYXJlOiAnZW1haWwnLCAnZ3JvdXBzJywgJ2xvZ2luJywgJ25hbWUnLCAnb3JnJywgJ3JvbGUnXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzKG9iajogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFsnSW5wdXQgaXMgbm90IGFuIG9iamVjdCddO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBPcHRpb25hbCBwcm9wZXJ0aWVzIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFByb3BlcnR5ICcke2tleX0nIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoIDwgMSkge1xuICAgICAgICBlcnJvcnMucHVzaChgUHJvcGVydHkgJyR7a2V5fScgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgUHJvcGVydHkgJyR7a2V5fScgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAyNTYgY2hhcmFjdGVyc2AsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIFNBTUwgSWRQIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIFNBTUwgSWRQIG1ldGFkYXRhIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSB1cmwgKGlmIHByZXNlbnQpIG11c3QgYmUgYSBzdHJpbmcgYmV0d2VlbiAxIGFuZCAyMDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIHhtbCAoaWYgcHJlc2VudCkgbXVzdCBiZSBhIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTYW1sSWRwTWV0YWRhdGEob2JqOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gWydJbnB1dCBpcyBub3QgYW4gb2JqZWN0J107XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSBvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB1cmwgcHJvcGVydHkgaWYgcHJlc2VudFxuICAgIGlmIChtZXRhZGF0YS51cmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBtZXRhZGF0YS51cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3VybCcgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudXJsLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXCJQcm9wZXJ0eSAndXJsJyBjYW5ub3QgYmUgZW1wdHlcIik7XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnVybC5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3VybCcgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnNcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgeG1sIHByb3BlcnR5IGlmIHByZXNlbnRcbiAgICBpZiAobWV0YWRhdGEueG1sICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG1ldGFkYXRhLnhtbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3htbCcgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgU0FNTCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIFNBTUwgY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYW4gb2JqZWN0XG4gICAqIC0gaWRwTWV0YWRhdGEgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgdmFsaWRcbiAgICogLSBhc3NlcnRpb25BdHJyaWJ1dGVzIChpZiBwcmVzZW50KSBtdXN0IGJlIHZhbGlkXG4gICAqIC0gYWxsb3dlZE9yZ2FuaXphdGlvbnMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIDEtMjU2IGVsZW1lbnRzXG4gICAqIC0gbG9naW5WYWxpZGl0eUR1cmF0aW9uIChpZiBwcmVzZW50KSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXG4gICAqIC0gcm9sZVZhbHVlcyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB2YWxpZCBhZG1pbiBhbmQgZWRpdG9yIGFycmF5c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTYW1sQ29uZmlndXJhdGlvbihjb25maWc6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzYW1sQ29uZmlndXJhdGlvbiBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBjb25zdCBzYW1sQ29uZmlnID0gY29uZmlnIGFzIFNhbWxDb25maWd1cmF0aW9uO1xuXG4gICAgLy8gQ2hlY2sgaWRwTWV0YWRhdGEgKHJlcXVpcmVkKVxuICAgIGlmIChzYW1sQ29uZmlnLmlkcE1ldGFkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdpZHBNZXRhZGF0YSBpcyByZXF1aXJlZCBpbiBzYW1sQ29uZmlndXJhdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZHBNZXRhZGF0YUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVNhbWxJZHBNZXRhZGF0YShcbiAgICAgICAgc2FtbENvbmZpZy5pZHBNZXRhZGF0YSxcbiAgICAgICk7XG4gICAgICBpZiAoaWRwTWV0YWRhdGFFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5pZHBNZXRhZGF0YUVycm9ycy5tYXAoKGVycikgPT4gYGlkcE1ldGFkYXRhOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYXNzZXJ0aW9uQXRycmlidXRlcyBpZiBwcmVzZW50XG4gICAgaWYgKHNhbWxDb25maWcuYXNzZXJ0aW9uQXRycmlidXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVFcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyhcbiAgICAgICAgc2FtbENvbmZpZy5hc3NlcnRpb25BdHJyaWJ1dGVzLFxuICAgICAgKTtcbiAgICAgIGlmIChhdHRyaWJ1dGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5hdHRyaWJ1dGVFcnJvcnMubWFwKChlcnIpID0+IGBhc3NlcnRpb25BdHJyaWJ1dGVzOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBhbGxvd2VkT3JnYW5pemF0aW9ucyBpZiBwcmVzZW50XG4gICAgaWYgKHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdhbGxvd2VkT3JnYW5pemF0aW9ucyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goJ2FsbG93ZWRPcmdhbml6YXRpb25zIG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucy5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgICdhbGxvd2VkT3JnYW5pemF0aW9ucyBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGVsZW1lbnRzJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgb3JnID0gc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9uc1tpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9yZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBhbGxvd2VkT3JnYW5pemF0aW9uc1ske2l9XSBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgbG9naW5WYWxpZGl0eUR1cmF0aW9uIGlmIHByZXNlbnRcbiAgICBpZiAoc2FtbENvbmZpZy5sb2dpblZhbGlkaXR5RHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzYW1sQ29uZmlnLmxvZ2luVmFsaWRpdHlEdXJhdGlvbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ2xvZ2luVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9IGVsc2UgaWYgKHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ2xvZ2luVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcm9sZVZhbHVlcyBpZiBwcmVzZW50XG4gICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXNhbWxDb25maWcucm9sZVZhbHVlcyB8fCB0eXBlb2Ygc2FtbENvbmZpZy5yb2xlVmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBlcnJvcnMucHVzaCgncm9sZVZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgYWRtaW4gYXJyYXkgaWYgcHJlc2VudFxuICAgICAgICBpZiAoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmFkbWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmFkbWluKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMuYWRtaW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbltpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgcm9sZVZhbHVlcy5hZG1pblske2l9XSBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbi5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAgICAgJ3JvbGVWYWx1ZXMuYWRtaW4gY2Fubm90IGhhdmUgbW9yZSB0aGFuIDI1NiBlbGVtZW50cycsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZWRpdG9yIGFycmF5IGlmIHByZXNlbnRcbiAgICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMuZWRpdG9yIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvcltpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgcm9sZVZhbHVlcy5lZGl0b3JbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgICAgICAncm9sZVZhbHVlcy5lZGl0b3IgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDI1NiBlbGVtZW50cycsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHZwY0NvbmZpZ3VyYXRpb24gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgVlBDIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIHNlY3VyaXR5R3JvdXBzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGFycmF5IHdpdGggMS01IGl0ZW1zXG4gICAqIC0gc3VibmV0cyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIDItNiBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVWcGNDb25maWd1cmF0aW9uKGNvbmZpZzogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goJ3ZwY0NvbmZpZ3VyYXRpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjQ29uZmlnID0gY29uZmlnIGFzIFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgICAvLyBDaGVjayBzZWN1cml0eUdyb3VwcyAocmVxdWlyZWQpXG4gICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc2VjdXJpdHlHcm91cHMgaXMgcmVxdWlyZWQgaW4gdnBjQ29uZmlndXJhdGlvbicpO1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodnBjQ29uZmlnLnNlY3VyaXR5R3JvdXBzKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPCAxKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBtdXN0IGhhdmUgYXQgbGVhc3QgMSBpdGVtJyk7XG4gICAgICB9XG4gICAgICBpZiAodnBjQ29uZmlnLnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA1IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc3VibmV0cyAocmVxdWlyZWQpXG4gICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIGlzIHJlcXVpcmVkIGluIHZwY0NvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHZwY0NvbmZpZy5zdWJuZXRzKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodnBjQ29uZmlnLnN1Ym5ldHMubGVuZ3RoIDwgMikge1xuICAgICAgICBlcnJvcnMucHVzaCgnc3VibmV0cyBtdXN0IGhhdmUgYXQgbGVhc3QgMiBpdGVtcycpO1xuICAgICAgfVxuICAgICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDYgaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgd29ya3NwYWNlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSB3b3Jrc3BhY2UgcHJvcGVydGllcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhZ2dyZWdhdGVzIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIGFsbCBpbmRpdmlkdWFsIHByb3BlcnR5IHZhbGlkYXRvcnMuXG4gICAqIEl0IHRocm93cyBhbiBlcnJvciBpZiBwcm9wcyBpcyBub3QgYW4gb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhwcm9wczogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIXByb3BzIHx8IHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcHMgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB3b3Jrc3BhY2VQcm9wcyA9IHByb3BzIGFzIFdvcmtzcGFjZVByb3BzO1xuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLmNsaWVudFRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNsaWVudFRva2VuRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlQ2xpZW50VG9rZW4oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLmNsaWVudFRva2VuLFxuICAgICAgKTtcbiAgICAgIGlmIChjbGllbnRUb2tlbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmNsaWVudFRva2VuRXJyb3JzLm1hcCgoZXJyKSA9PiBgY2xpZW50VG9rZW46ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICApO1xuICAgICAgaWYgKGRlc2NyaXB0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZGVzY3JpcHRpb25FcnJvcnMubWFwKChlcnIpID0+IGBkZXNjcmlwdGlvbjogJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5ncmFmYW5hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBncmFmYW5hVmVyc2lvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZUdyYWZhbmFWZXJzaW9uKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgICk7XG4gICAgICBpZiAoZ3JhZmFuYVZlcnNpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5ncmFmYW5hVmVyc2lvbkVycm9ycy5tYXAoKGVycikgPT4gYGdyYWZhbmFWZXJzaW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBuYW1lRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlTmFtZSh3b3Jrc3BhY2VQcm9wcy5uYW1lKTtcbiAgICAgIGlmIChuYW1lRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ubmFtZUVycm9ycy5tYXAoKGVycikgPT4gYG5hbWU6ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmV0d29ya0FjY2Vzc0NvbnRyb2xFcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbChcbiAgICAgICAgd29ya3NwYWNlUHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wsXG4gICAgICApO1xuICAgICAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4ubmV0d29ya0FjY2Vzc0NvbnRyb2xFcnJvcnMubWFwKFxuICAgICAgICAgICAgKGVycikgPT4gYG5ldHdvcmtBY2Nlc3NDb250cm9sOiAke2Vycn1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlT3JnYW5pemF0aW9uUm9sZU5hbWUoXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChvcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLm9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzLm1hcChcbiAgICAgICAgICAgIChlcnIpID0+IGBvcmdhbml6YXRpb25Sb2xlTmFtZTogJHtlcnJ9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5zYW1sQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzYW1sQ29uZmlndXJhdGlvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVNhbWxDb25maWd1cmF0aW9uKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5zYW1sQ29uZmlndXJhdGlvbixcbiAgICAgICk7XG4gICAgICBpZiAoc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5zYW1sQ29uZmlndXJhdGlvbkVycm9ycy5tYXAoKGVycikgPT4gYHNhbWxDb25maWd1cmF0aW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMudnBjQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2cGNDb25maWd1cmF0aW9uRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlVnBjQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMudnBjQ29uZmlndXJhdGlvbixcbiAgICAgICk7XG4gICAgICBpZiAodnBjQ29uZmlndXJhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLnZwY0NvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGB2cGNDb25maWd1cmF0aW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgY2FuIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIHRoaXMgQVdTIGFjY291bnQgb25seSwgb3Igd2hldGhlclxuICAgKiBpdCBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAgICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICAgKiB3b3Jrc3BhY2UgY2FuIGFjY2Vzcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICpcbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgcmVzb3VyY2VzIHRocm91Z2ggT3JnYW5pemF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IENmbldvcmtzcGFjZTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdGhhdCB1c2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgR3JhZmFuYSBjb25zb2xlIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIEdyYWZhbmEgc3VwcG9ydGVkIGJ5IHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vc3QgcmVjZW50IGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RpZmljYXRpb25UaW1lc3RhbXA6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSdzIFNBTUwgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvblN0YXR1czogU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBJQU0gSWRlbnRpdHkgQ2VudGVyLW1hbmFnZWQgYXBwbGljYXRpb24gdGhhdCBpcyBjcmVhdGVkIGJ5IEFtYXpvbiBNYW5hZ2VkXG4gICAqIEdyYWZhbmEuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvQ2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzOiBTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLmFjY291bnRBY2Nlc3NUeXBlID09PSBBY2NvdW50QWNjZXNzVHlwZS5DVVJSRU5UX0FDQ09VTlQgJiZcbiAgICAgICFwcm9wcy5yb2xlXG4gICAgKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ1JvbGUgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGFjY291bnRBY2Nlc3NUeXBlIGlzIENVUlJFTlRfQUNDT1VOVCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByb3BzOlxcbiR7ZXJyb3JzLmpvaW4oJ1xcbicpfWApO1xuICAgIH1cblxuICAgIHRoaXMuYWNjb3VudEFjY2Vzc1R5cGUgPSBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZTtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzID0gcHJvcHMuYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XG4gICAgdGhpcy5jbGllbnRUb2tlbiA9IHByb3BzLmNsaWVudFRva2VuO1xuICAgIHRoaXMuZGF0YVNvdXJjZXMgPSBwcm9wcy5kYXRhU291cmNlcztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uZXR3b3JrQWNjZXNzQ29udHJvbCA9IHByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sO1xuICAgIHRoaXMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zID0gcHJvcHMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zO1xuICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0cyA9IHByb3BzLm9yZ2FuaXphdGlvbmFsVW5pdHM7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Sb2xlTmFtZSA9IHByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lO1xuICAgIHRoaXMucGVybWlzc2lvblR5cGUgPSBwcm9wcy5wZXJtaXNzaW9uVHlwZTtcbiAgICB0aGlzLnBsdWdpbkFkbWluRW5hYmxlZCA9IHByb3BzLnBsdWdpbkFkbWluRW5hYmxlZDtcbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHRoaXMucm9sZSA9IHByb3BzLnJvbGU7XG4gICAgdGhpcy5zYW1sQ29uZmlndXJhdGlvbiA9IHByb3BzLnNhbWxDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuc3RhY2tTZXROYW1lID0gcHJvcHMuc3RhY2tTZXROYW1lO1xuICAgIHRoaXMudnBjQ29uZmlndXJhdGlvbiA9IHByb3BzLnZwY0NvbmZpZ3VyYXRpb247XG5cbiAgICBsZXQgY2ZuV29ya3NwYWNlUHJvcHM6IENmbldvcmtzcGFjZVByb3BzID0ge1xuICAgICAgYWNjb3VudEFjY2Vzc1R5cGU6IHByb3BzLmFjY291bnRBY2Nlc3NUeXBlLFxuICAgICAgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IHByb3BzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzLFxuICAgICAgY2xpZW50VG9rZW46IHByb3BzLmNsaWVudFRva2VuLFxuICAgICAgZGF0YVNvdXJjZXM6IHByb3BzLmRhdGFTb3VyY2VzLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ3JhZmFuYVZlcnNpb246IHByb3BzLmdyYWZhbmFWZXJzaW9uLFxuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uczogcHJvcHMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zLFxuICAgICAgb3JnYW5pemF0aW9uYWxVbml0czogcHJvcHMub3JnYW5pemF0aW9uYWxVbml0cyxcbiAgICAgIG9yZ2FuaXphdGlvblJvbGVOYW1lOiBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSxcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBwcm9wcy5wZXJtaXNzaW9uVHlwZSxcbiAgICAgIHBsdWdpbkFkbWluRW5hYmxlZDogcHJvcHMucGx1Z2luQWRtaW5FbmFibGVkLFxuICAgICAgcm9sZUFybjogcHJvcHMucm9sZT8ucm9sZUFybixcbiAgICAgIHNhbWxDb25maWd1cmF0aW9uOiBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbixcbiAgICAgIHN0YWNrU2V0TmFtZTogcHJvcHMuc3RhY2tTZXROYW1lLFxuICAgICAgdnBjQ29uZmlndXJhdGlvbjogcHJvcHMudnBjQ29uZmlndXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBwcm9wcy52cGNDb25maWd1cmF0aW9uLnNlY3VyaXR5R3JvdXBzLm1hcChcbiAgICAgICAgICAgIChzZykgPT4gc2cuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgICksXG4gICAgICAgICAgc3VibmV0SWRzOiBwcm9wcy52cGNDb25maWd1cmF0aW9uLnN1Ym5ldHMubWFwKFxuICAgICAgICAgICAgKHN1Ym5ldCkgPT4gc3VibmV0LnN1Ym5ldElkLFxuICAgICAgICAgICksXG4gICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHRoaXMud29ya3NwYWNlID0gbmV3IENmbldvcmtzcGFjZSh0aGlzLCAnUmVzb3VyY2UnLCBjZm5Xb3Jrc3BhY2VQcm9wcyk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMud29ya3NwYWNlO1xuXG4gICAgdGhpcy5jcmVhdGlvblRpbWVzdGFtcCA9IHRoaXMud29ya3NwYWNlLmF0dHJDcmVhdGlvblRpbWVzdGFtcDtcbiAgICB0aGlzLmVuZHBvaW50ID0gdGhpcy53b3Jrc3BhY2UuYXR0ckVuZHBvaW50O1xuICAgIHRoaXMuZ3JhZmFuYVZlcnNpb24gPSB0aGlzLndvcmtzcGFjZS5hdHRyR3JhZmFuYVZlcnNpb247XG4gICAgdGhpcy53b3Jrc3BhY2VJZCA9IHRoaXMud29ya3NwYWNlLmF0dHJJZDtcbiAgICB0aGlzLm1vZGlmaWNhdGlvblRpbWVzdGFtcCA9IHRoaXMud29ya3NwYWNlLmF0dHJNb2RpZmljYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy5zYW1sQ29uZmlndXJhdGlvblN0YXR1cyA9IHRoaXMud29ya3NwYWNlXG4gICAgICAuYXR0clNhbWxDb25maWd1cmF0aW9uU3RhdHVzIGFzIFNhbWxDb25maWd1cmF0aW9uU3RhdHVzZXM7XG4gICAgdGhpcy5zc29DbGllbnRJZCA9IHRoaXMud29ya3NwYWNlLmF0dHJTc29DbGllbnRJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMud29ya3NwYWNlLmF0dHJTdGF0dXMgYXMgU3RhdHVzO1xuICAgIHRoaXMud29ya3NwYWNlQXJuID0gdGhpcy5nZXRXb3Jrc3BhY2VBcm4odGhpcy53b3Jrc3BhY2VJZCk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -49,7 +49,7 @@
49
49
  "constructs": "10.0.5",
50
50
  "eslint": "^9",
51
51
  "eslint-import-resolver-typescript": "^4.4.3",
52
- "eslint-plugin-import": "^2.31.0",
52
+ "eslint-plugin-import": "^2.32.0",
53
53
  "jest": "^29.7.0",
54
54
  "jest-junit": "^16",
55
55
  "jsii": "~5.8.0",
@@ -72,7 +72,7 @@
72
72
  ],
73
73
  "main": "lib/index.js",
74
74
  "license": "MIT",
75
- "version": "0.0.33",
75
+ "version": "0.0.35",
76
76
  "jest": {
77
77
  "coverageProvider": "v8",
78
78
  "testMatch": [