@aws-solutions-constructs/core 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -13,7 +13,7 @@
13
13
  "npmlog": "^4.1.2"
14
14
  },
15
15
  "dependencies": {
16
- "aws-cdk-lib": "^2.7.0",
16
+ "aws-cdk-lib": "^2.10.0",
17
17
  "constructs": "^10.0.0"
18
18
  },
19
19
  "dependencyClosure": {
@@ -1190,6 +1190,19 @@
1190
1190
  }
1191
1191
  }
1192
1192
  },
1193
+ "aws-cdk-lib.aws_forecast": {
1194
+ "targets": {
1195
+ "dotnet": {
1196
+ "namespace": "Amazon.CDK.AWS.Forecast"
1197
+ },
1198
+ "java": {
1199
+ "package": "software.amazon.awscdk.services.forecast"
1200
+ },
1201
+ "python": {
1202
+ "module": "aws_cdk.aws_forecast"
1203
+ }
1204
+ }
1205
+ },
1193
1206
  "aws-cdk-lib.aws_frauddetector": {
1194
1207
  "targets": {
1195
1208
  "dotnet": {
@@ -1372,6 +1385,19 @@
1372
1385
  }
1373
1386
  }
1374
1387
  },
1388
+ "aws-cdk-lib.aws_inspectorv2": {
1389
+ "targets": {
1390
+ "dotnet": {
1391
+ "namespace": "Amazon.CDK.AWS.InspectorV2"
1392
+ },
1393
+ "java": {
1394
+ "package": "software.amazon.awscdk.services.inspectorv2"
1395
+ },
1396
+ "python": {
1397
+ "module": "aws_cdk.aws_inspectorv2"
1398
+ }
1399
+ }
1400
+ },
1375
1401
  "aws-cdk-lib.aws_iot": {
1376
1402
  "targets": {
1377
1403
  "dotnet": {
@@ -1541,6 +1567,19 @@
1541
1567
  }
1542
1568
  }
1543
1569
  },
1570
+ "aws-cdk-lib.aws_kinesisanalyticsv2": {
1571
+ "targets": {
1572
+ "dotnet": {
1573
+ "namespace": "Amazon.CDK.AWS.KinesisAnalyticsV2"
1574
+ },
1575
+ "java": {
1576
+ "package": "software.amazon.awscdk.services.kinesisanalyticsv2"
1577
+ },
1578
+ "python": {
1579
+ "module": "aws_cdk.aws_kinesisanalyticsv2"
1580
+ }
1581
+ }
1582
+ },
1544
1583
  "aws-cdk-lib.aws_kinesisfirehose": {
1545
1584
  "targets": {
1546
1585
  "dotnet": {
@@ -1554,6 +1593,19 @@
1554
1593
  }
1555
1594
  }
1556
1595
  },
1596
+ "aws-cdk-lib.aws_kinesisvideo": {
1597
+ "targets": {
1598
+ "dotnet": {
1599
+ "namespace": "Amazon.CDK.AWS.KinesisVideo"
1600
+ },
1601
+ "java": {
1602
+ "package": "software.amazon.awscdk.services.kinesisvideo"
1603
+ },
1604
+ "python": {
1605
+ "module": "aws_cdk.aws_kinesisvideo"
1606
+ }
1607
+ }
1608
+ },
1557
1609
  "aws-cdk-lib.aws_kms": {
1558
1610
  "targets": {
1559
1611
  "dotnet": {
@@ -2857,7 +2909,7 @@
2857
2909
  },
2858
2910
  "description": "Core CDK Construct for patterns library",
2859
2911
  "homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
2860
- "jsiiVersion": "1.54.0 (build b1b977a)",
2912
+ "jsiiVersion": "1.55.1 (build 07d2d90)",
2861
2913
  "license": "Apache-2.0",
2862
2914
  "metadata": {
2863
2915
  "jsii": {
@@ -2879,8 +2931,8 @@
2879
2931
  "targets": {
2880
2932
  "dotnet": {
2881
2933
  "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png",
2882
- "namespace": "Amazon.Constructs",
2883
- "packageId": "Amazon.Constructs",
2934
+ "namespace": "Amazon.SolutionsConstructs.AWS.Core",
2935
+ "packageId": "Amazon.SolutionsConstructs.AWS.Core",
2884
2936
  "signAssembly": true
2885
2937
  },
2886
2938
  "java": {
@@ -2906,7 +2958,7 @@
2906
2958
  "kind": "interface",
2907
2959
  "locationInModule": {
2908
2960
  "filename": "lib/apigateway-helper.ts",
2909
- "line": 240
2961
+ "line": 235
2910
2962
  },
2911
2963
  "name": "AddProxyMethodToApiResourceInputParams",
2912
2964
  "properties": [
@@ -2915,7 +2967,7 @@
2915
2967
  "immutable": true,
2916
2968
  "locationInModule": {
2917
2969
  "filename": "lib/apigateway-helper.ts",
2918
- "line": 246
2970
+ "line": 241
2919
2971
  },
2920
2972
  "name": "apiGatewayRole",
2921
2973
  "type": {
@@ -2927,7 +2979,7 @@
2927
2979
  "immutable": true,
2928
2980
  "locationInModule": {
2929
2981
  "filename": "lib/apigateway-helper.ts",
2930
- "line": 245
2982
+ "line": 240
2931
2983
  },
2932
2984
  "name": "apiMethod",
2933
2985
  "type": {
@@ -2939,7 +2991,7 @@
2939
2991
  "immutable": true,
2940
2992
  "locationInModule": {
2941
2993
  "filename": "lib/apigateway-helper.ts",
2942
- "line": 244
2994
+ "line": 239
2943
2995
  },
2944
2996
  "name": "apiResource",
2945
2997
  "type": {
@@ -2951,7 +3003,7 @@
2951
3003
  "immutable": true,
2952
3004
  "locationInModule": {
2953
3005
  "filename": "lib/apigateway-helper.ts",
2954
- "line": 247
3006
+ "line": 242
2955
3007
  },
2956
3008
  "name": "requestTemplate",
2957
3009
  "type": {
@@ -2963,7 +3015,7 @@
2963
3015
  "immutable": true,
2964
3016
  "locationInModule": {
2965
3017
  "filename": "lib/apigateway-helper.ts",
2966
- "line": 241
3018
+ "line": 236
2967
3019
  },
2968
3020
  "name": "service",
2969
3021
  "type": {
@@ -2975,7 +3027,7 @@
2975
3027
  "immutable": true,
2976
3028
  "locationInModule": {
2977
3029
  "filename": "lib/apigateway-helper.ts",
2978
- "line": 242
3030
+ "line": 237
2979
3031
  },
2980
3032
  "name": "action",
2981
3033
  "optional": true,
@@ -2988,7 +3040,7 @@
2988
3040
  "immutable": true,
2989
3041
  "locationInModule": {
2990
3042
  "filename": "lib/apigateway-helper.ts",
2991
- "line": 251
3043
+ "line": 246
2992
3044
  },
2993
3045
  "name": "awsIntegrationProps",
2994
3046
  "optional": true,
@@ -3001,7 +3053,7 @@
3001
3053
  "immutable": true,
3002
3054
  "locationInModule": {
3003
3055
  "filename": "lib/apigateway-helper.ts",
3004
- "line": 248
3056
+ "line": 243
3005
3057
  },
3006
3058
  "name": "contentType",
3007
3059
  "optional": true,
@@ -3014,7 +3066,7 @@
3014
3066
  "immutable": true,
3015
3067
  "locationInModule": {
3016
3068
  "filename": "lib/apigateway-helper.ts",
3017
- "line": 252
3069
+ "line": 247
3018
3070
  },
3019
3071
  "name": "methodOptions",
3020
3072
  "optional": true,
@@ -3027,7 +3079,7 @@
3027
3079
  "immutable": true,
3028
3080
  "locationInModule": {
3029
3081
  "filename": "lib/apigateway-helper.ts",
3030
- "line": 243
3082
+ "line": 238
3031
3083
  },
3032
3084
  "name": "path",
3033
3085
  "optional": true,
@@ -3040,7 +3092,7 @@
3040
3092
  "immutable": true,
3041
3093
  "locationInModule": {
3042
3094
  "filename": "lib/apigateway-helper.ts",
3043
- "line": 250
3095
+ "line": 245
3044
3096
  },
3045
3097
  "name": "requestModel",
3046
3098
  "optional": true,
@@ -3058,7 +3110,7 @@
3058
3110
  "immutable": true,
3059
3111
  "locationInModule": {
3060
3112
  "filename": "lib/apigateway-helper.ts",
3061
- "line": 249
3113
+ "line": 244
3062
3114
  },
3063
3115
  "name": "requestValidator",
3064
3116
  "optional": true,
@@ -3739,7 +3791,7 @@
3739
3791
  "kind": "interface",
3740
3792
  "locationInModule": {
3741
3793
  "filename": "lib/sagemaker-helper.ts",
3742
- "line": 302
3794
+ "line": 300
3743
3795
  },
3744
3796
  "name": "BuildSagemakerEndpointProps",
3745
3797
  "properties": [
@@ -3752,7 +3804,7 @@
3752
3804
  "immutable": true,
3753
3805
  "locationInModule": {
3754
3806
  "filename": "lib/sagemaker-helper.ts",
3755
- "line": 320
3807
+ "line": 318
3756
3808
  },
3757
3809
  "name": "endpointConfigProps",
3758
3810
  "optional": true,
@@ -3769,7 +3821,7 @@
3769
3821
  "immutable": true,
3770
3822
  "locationInModule": {
3771
3823
  "filename": "lib/sagemaker-helper.ts",
3772
- "line": 326
3824
+ "line": 324
3773
3825
  },
3774
3826
  "name": "endpointProps",
3775
3827
  "optional": true,
@@ -3786,7 +3838,7 @@
3786
3838
  "immutable": true,
3787
3839
  "locationInModule": {
3788
3840
  "filename": "lib/sagemaker-helper.ts",
3789
- "line": 308
3841
+ "line": 306
3790
3842
  },
3791
3843
  "name": "existingSagemakerEndpointObj",
3792
3844
  "optional": true,
@@ -3803,7 +3855,7 @@
3803
3855
  "immutable": true,
3804
3856
  "locationInModule": {
3805
3857
  "filename": "lib/sagemaker-helper.ts",
3806
- "line": 314
3858
+ "line": 312
3807
3859
  },
3808
3860
  "name": "modelProps",
3809
3861
  "optional": true,
@@ -3820,7 +3872,7 @@
3820
3872
  "immutable": true,
3821
3873
  "locationInModule": {
3822
3874
  "filename": "lib/sagemaker-helper.ts",
3823
- "line": 332
3875
+ "line": 330
3824
3876
  },
3825
3877
  "name": "vpc",
3826
3878
  "optional": true,
@@ -4416,7 +4468,7 @@
4416
4468
  "kind": "enum",
4417
4469
  "locationInModule": {
4418
4470
  "filename": "lib/vpc-helper.ts",
4419
- "line": 83
4471
+ "line": 77
4420
4472
  },
4421
4473
  "members": [
4422
4474
  {
@@ -5025,6 +5077,6 @@
5025
5077
  "symbolId": "lib/input-validation:VerifiedProps"
5026
5078
  }
5027
5079
  },
5028
- "version": "2.3.0",
5029
- "fingerprint": "dqOz02Sm4t+zV3YKoTY942JMGxN8Rg7FIhkPC9p2NqE="
5080
+ "version": "2.4.0",
5081
+ "fingerprint": "clkPdrTLyvJowwNOt7MSTzEq0r+IlPRNTNozLmZEHl4="
5030
5082
  }
package/lib/alb-helper.js CHANGED
@@ -28,14 +28,10 @@ function ObtainAlb(scope, id, vpc, publicApi, existingLoadBalancerObj, loadBalan
28
28
  loadBalancer = existingLoadBalancerObj;
29
29
  }
30
30
  else {
31
- const consolidatedProps = loadBalancerProps
32
- ? utils_1.overrideProps(loadBalancerProps, { vpc, internetFacing: publicApi })
33
- : { vpc, internetFacing: publicApi };
31
+ const consolidatedProps = utils_1.consolidateProps({}, loadBalancerProps, { vpc, internetFacing: publicApi });
34
32
  loadBalancer = new elb.ApplicationLoadBalancer(scope, `${id}-alb`, consolidatedProps);
35
33
  if (logAccessLogs === undefined || logAccessLogs === true) {
36
- const consolidatedLoggingBucketProps = loggingBucketProps
37
- ? utils_1.overrideProps(s3_bucket_defaults_1.DefaultLoggingBucketProps(), loggingBucketProps)
38
- : s3_bucket_defaults_1.DefaultLoggingBucketProps();
34
+ const consolidatedLoggingBucketProps = utils_1.consolidateProps(s3_bucket_defaults_1.DefaultLoggingBucketProps(), loggingBucketProps);
39
35
  const loggingBucket = s3_bucket_helper_1.createAlbLoggingBucket(scope, id, consolidatedLoggingBucketProps);
40
36
  loadBalancer.logAccessLogs(loggingBucket);
41
37
  }
@@ -46,8 +42,8 @@ exports.ObtainAlb = ObtainAlb;
46
42
  function AddListener(scope, id, loadBalancer, listenerProps) {
47
43
  var _a;
48
44
  let consolidatedListenerProps;
49
- consolidatedListenerProps = utils_1.overrideProps(alb_defaults_1.DefaultListenerProps(loadBalancer), listenerProps);
50
- // create the listener
45
+ consolidatedListenerProps = utils_1.consolidateProps(alb_defaults_1.DefaultListenerProps(loadBalancer), listenerProps);
46
+ // create the listener
51
47
  const listener = new elb.ApplicationListener(scope, `${id}-listener`, consolidatedListenerProps);
52
48
  loadBalancer.listeners.push(listener);
53
49
  if (consolidatedListenerProps.protocol === elb.ApplicationProtocol.HTTP) {
@@ -91,15 +87,8 @@ function AddLambdaTarget(scope, id, currentListener, lambdaFunction, ruleProps,
91
87
  });
92
88
  // The interface AddRuleProps includes conditions and priority, combine that
93
89
  // with targetGroups and we can assemble AddApplicationTargetGroupProps
94
- if (ruleProps) {
95
- const consolidatedTargetProps = utils_1.overrideProps(ruleProps, { targetGroups: [newTargetGroup] });
96
- currentListener.addTargetGroups(`${scope.node.id}-targets`, consolidatedTargetProps);
97
- }
98
- else {
99
- currentListener.addTargetGroups("targets", {
100
- targetGroups: [newTargetGroup],
101
- });
102
- }
90
+ const consolidatedTargetProps = utils_1.consolidateProps({}, ruleProps, { targetGroups: [newTargetGroup] });
91
+ currentListener.addTargetGroups(`${scope.node.id}-targets`, consolidatedTargetProps);
103
92
  newTargetGroup.setAttribute('stickiness.enabled', undefined);
104
93
  return newTargetGroup;
105
94
  }
@@ -111,15 +100,8 @@ function AddFargateTarget(scope, id, currentListener, fargateService, ruleProps,
111
100
  const newTargetGroup = new elb.ApplicationTargetGroup(scope, `${id}-tg`, targetProps);
112
101
  // The interface AddRuleProps includes conditions and priority, combine that
113
102
  // with targetGroups and we can assemble an AddApplicationTargetGroupProps object
114
- if (ruleProps) {
115
- const consolidatedTargetProps = utils_1.overrideProps(ruleProps, { targetGroups: [newTargetGroup] });
116
- currentListener.addTargetGroups(`${scope.node.id}-targets`, consolidatedTargetProps);
117
- }
118
- else {
119
- currentListener.addTargetGroups(`${id}-targets`, {
120
- targetGroups: [newTargetGroup],
121
- });
122
- }
103
+ const consolidatedTargetProps = utils_1.consolidateProps({ targetGroups: [newTargetGroup] }, ruleProps);
104
+ currentListener.addTargetGroups(`${scope.node.id}-targets`, consolidatedTargetProps);
123
105
  newTargetGroup.addTarget(fargateService);
124
106
  return newTargetGroup;
125
107
  }
@@ -185,4 +167,4 @@ function CheckAlbProps(props) {
185
167
  }
186
168
  }
187
169
  exports.CheckAlbProps = CheckAlbProps;
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFsYi1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSCw4REFBOEQ7QUFNOUQsdUZBQThGO0FBQzlGLHVFQUF1RTtBQUN2RSxtQ0FBc0Q7QUFDdEQsaURBQXNEO0FBQ3RELHlEQUE0RDtBQUM1RCw2REFBaUU7QUFFakUsc0ZBQXNGO0FBQ3RGLDZEQUE2RDtBQUM3RCxTQUFnQixTQUFTLENBQ3ZCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixHQUFhLEVBQ2IsU0FBa0IsRUFDbEIsdUJBQXFELEVBQ3JELGlCQUEwRCxFQUMxRCxhQUF1QixFQUN2QixrQkFBbUM7SUFFbkMsSUFBSSxZQUF5QyxDQUFDO0lBRTlDLElBQUksdUJBQXVCLEVBQUU7UUFDM0IsWUFBWSxHQUFHLHVCQUF1QixDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQjtZQUN6QyxDQUFDLENBQUMscUJBQWEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdEUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQzVDLEtBQUssRUFDTCxHQUFHLEVBQUUsTUFBTSxFQUNYLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDekQsTUFBTSw4QkFBOEIsR0FBRyxrQkFBa0I7Z0JBQ3ZELENBQUMsQ0FBQyxxQkFBYSxDQUFDLDhDQUF5QixFQUFFLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyw4Q0FBeUIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sYUFBYSxHQUFHLHlDQUFzQixDQUFDLEtB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bnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjIgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Qcm90b2NvbCwgTGlzdGVuZXJBY3Rpb24sIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgKiBhcyBlbGJ0IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRzXCI7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBwcmludFdhcm5pbmcgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRGVmYXVsdExpc3RlbmVyUHJvcHMgfSBmcm9tIFwiLi9hbGItZGVmYXVsdHNcIjtcbmltcG9ydCB7IGNyZWF0ZUFsYkxvZ2dpbmdCdWNrZXQgfSBmcm9tIFwiLi9zMy1idWNrZXQtaGVscGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0TG9nZ2luZ0J1Y2tldFByb3BzIH0gZnJvbSBcIi4vczMtYnVja2V0LWRlZmF1bHRzXCI7XG5cbi8vICBSZXR1cm5zIHRoZSBjb3JyZWN0IEFMQiBMb2FkIEJhbGFuY2VyIHRvIHVzZSBpbiB0aGlzIGNvbnN0cnVjdCwgZWl0aGVyIGFuIGV4aXN0aW5nXG4vLyAgb25lIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IG9yIGNyZWF0ZSAgbmV3IG9uZSBvdGhlcndpc2UuXG5leHBvcnQgZnVuY3Rpb24gT2J0YWluQWxiKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICB2cGM6IGVjMi5JVnBjLFxuICBwdWJsaWNBcGk6IGJvb2xlYW4sXG4gIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqPzogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBsb2FkQmFsYW5jZXJQcm9wcz86IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlclByb3BzIHwgYW55LFxuICBsb2dBY2Nlc3NMb2dzPzogYm9vbGVhbixcbiAgbG9nZ2luZ0J1Y2tldFByb3BzPzogczMuQnVja2V0UHJvcHNcbik6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB7XG4gIGxldCBsb2FkQmFsYW5jZXI6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcblxuICBpZiAoZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmopIHtcbiAgICBsb2FkQmFsYW5jZXIgPSBleGlzdGluZ0xvYWRCYWxhbmNlck9iajtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb25zb2xpZGF0ZWRQcm9wcyA9IGxvYWRCYWxhbmNlclByb3BzXG4gICAgICA/IG92ZXJyaWRlUHJvcHMobG9hZEJhbGFuY2VyUHJvcHMsIHsgdnBjLCBpbnRlcm5ldEZhY2luZzogcHVibGljQXBpIH0pXG4gICAgICA6IHsgdnBjLCBpbnRlcm5ldEZhY2luZzogcHVibGljQXBpIH07XG4gICAgbG9hZEJhbGFuY2VyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9LWFsYmAsXG4gICAgICBjb25zb2xpZGF0ZWRQcm9wc1xuICAgICk7XG4gICAgaWYgKGxvZ0FjY2Vzc0xvZ3MgPT09IHVuZGVmaW5lZCB8fCBsb2dBY2Nlc3NMb2dzID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBjb25zb2xpZGF0ZWRMb2dnaW5nQnVja2V0UHJvcHMgPSBsb2dnaW5nQnVja2V0UHJvcHNcbiAgICAgICAgPyBvdmVycmlkZVByb3BzKERlZmF1bHRMb2dnaW5nQnVja2V0UHJvcHMoKSwgbG9nZ2luZ0J1Y2tldFByb3BzKVxuICAgICAgICA6IERlZmF1bHRMb2dnaW5nQnVja2V0UHJvcHMoKTtcbiAgICAgIGNvbnN0IGxvZ2dpbmdCdWNrZXQgPSBjcmVhdGVBbGJMb2dnaW5nQnVja2V0KHNjb3BlLCBpZCwgY29uc29saWRhdGVkTG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgICAgIGxvYWRCYWxhbmNlci5sb2dBY2Nlc3NMb2dzKGxvZ2dpbmdCdWNrZXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9hZEJhbGFuY2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWRkTGlzdGVuZXIoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGxvYWRCYWxhbmNlcjogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBsaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzIHwgYW55XG4pOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lciB7XG4gIGxldCBjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzO1xuXG4gIGNvbnNvbGlkYXRlZExpc3RlbmVyUHJvcHMgPSBvdmVycmlkZVByb3BzKFxuICAgIERlZmF1bHRMaXN0ZW5lclByb3BzKGxvYWRCYWxhbmNlciksXG4gICAgbGlzdGVuZXJQcm9wc1xuICApO1xuXG4gIC8vICAgY3JlYXRlIHRoZSBsaXN0ZW5lclxuICBjb25zdCBsaXN0ZW5lciA9IG5ldyBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcihcbiAgICBzY29wZSxcbiAgICBgJHtpZH0tbGlzdGVuZXJgLFxuICAgIGNvbnNvbGlkYXRlZExpc3RlbmVyUHJvcHNcbiAgKTtcbiAgbG9hZEJhbGFuY2VyLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICBpZiAoY29uc29saWRhdGVkTGlzdGVuZXJQcm9wcy5wcm90b2NvbCA9PT0gZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCkge1xuICAgIC8vIFRoaXMgd2lsbCB1c2UgY29yZS5wcmludFdhcm5pbmcgaW4gdGhlIGFjdHVhbCBjb25zdHJ1Y3RcbiAgICBwcmludFdhcm5pbmcoXG4gICAgICBcIkFXUyByZWNvbW1lbmRzIGVuY3J5cHRpbmcgdHJhZmZpYyB0byBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIHVzaW5nIEhUVFBTLlwiXG4gICAgKTtcbiAgICBpZiAobGlzdGVuZXJQcm9wcy5jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgbGlzdGVuZXJzIGNhbm5vdCB1c2UgYSBjZXJ0aWZpY2F0ZVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcyB8fCBsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgbGlzdGVuZXIgdXNpbmcgSFRUUFMgcHJvdG9jb2wgcmVxdWlyZXMgYSBjZXJ0aWZpY2F0ZVwiKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lci5hZGRDZXJ0aWZpY2F0ZXMoYCR7aWR9LWNlcnRgLCBsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcyk7XG4gIH1cblxuICBpZiAoY29uc29saWRhdGVkTGlzdGVuZXJQcm9wcy5wcm90b2NvbCA9PT0gZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMpIHtcbiAgICBjb25zdCBvcHQ6IGVsYi5SZWRpcmVjdE9wdGlvbnMgPSB7XG4gICAgICBwb3J0OiBcIjQ0M1wiLFxuICAgICAgcHJvdG9jb2w6IFwiSFRUUFNcIixcbiAgICB9O1xuXG4gICAgY29uc3QgaHR0cExpc3RlbmVyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0tcmVkaXJlY3RgLFxuICAgICAge1xuICAgICAgICBsb2FkQmFsYW5jZXIsXG4gICAgICAgIHByb3RvY29sOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgIGRlZmF1bHRBY3Rpb246IExpc3RlbmVyQWN0aW9uLnJlZGlyZWN0KG9wdCksXG4gICAgICB9XG4gICAgKTtcbiAgICBsb2FkQmFsYW5jZXIubGlzdGVuZXJzLnB1c2goaHR0cExpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLy8gQ3JlYXRlcyBhIFRhcmdldCBHcm91cCBmb3IgTGFtYmRhIGZ1bmN0aW9ucyBhbmQgYWRkcyB0aGVcbi8vIHByb3ZpZGVkIGZ1bmN0aW9ucyBhcyBhIHRhcmdldCB0byB0aGF0IGdyb3VwLiBUaGVuIGFkZHNcbi8vIHRoZSBuZXcgVGFyZ2V0IEdyb3VwIHRvIHRoZSBwcm92aWRlZCBMaXN0ZW5lci5cbmV4cG9ydCBmdW5jdGlvbiBBZGRMYW1iZGFUYXJnZXQoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGN1cnJlbnRMaXN0ZW5lcjogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gIGxhbWJkYUZ1bmN0aW9uOiBsYW1iZGEuSUZ1bmN0aW9uLFxuICBydWxlUHJvcHM/OiBlbGIuQWRkUnVsZVByb3BzLFxuICB0YXJnZXRQcm9wcz86IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHMsXG4pOiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cCAge1xuXG4gIC8vICBDcmVhdGUgdGhlIHRhcmdldCBhbmQgYXNzaWduIGl0IHRvIGEgbmV3IHRhcmdldCBncm91cFxuICBjb25zdCBsYW1iZGFUYXJnZXQgPSBuZXcgZWxidC5MYW1iZGFUYXJnZXQobGFtYmRhRnVuY3Rpb24pO1xuICBjb25zdCBuZXdUYXJnZXRHcm91cCA9IG5ldyBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cChzY29wZSwgYCR7aWR9LXRnYCwge1xuICAgIHRhcmdldHM6IFtsYW1iZGFUYXJnZXRdLFxuICAgIHRhcmdldEdyb3VwTmFtZTogdGFyZ2V0UHJvcHMgPyB0YXJnZXRQcm9wcy50YXJnZXRHcm91cE5hbWUgOiB1bmRlZmluZWQsXG4gICAgaGVhbHRoQ2hlY2s6IHRhcmdldFByb3BzID8gdGFyZ2V0UHJvcHMuaGVhbHRoQ2hlY2sgOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgLy8gVGhlIGludGVyZmFjZSBBZGRSdWxlUHJvcHMgaW5jbHVkZXMgY29uZGl0aW9ucyBhbmQgcHJpb3JpdHksIGNvbWJpbmUgdGhhdFxuICAvLyB3aXRoIHRhcmdldEdyb3VwcyBhbmQgd2UgY2FuIGFzc2VtYmxlIEFkZEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wc1xuICBpZiAocnVsZVByb3BzKSB7XG4gICAgY29uc3QgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMgPSBvdmVycmlkZVByb3BzKHJ1bGVQcm9wcywgeyB0YXJnZXRHcm91cHM6IFtuZXdUYXJnZXRHcm91cF0gfSk7XG4gICAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtzY29wZS5ub2RlLmlkfS10YXJnZXRzYCwgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIGN1cnJlbnRMaXN0ZW5lci5hZGRUYXJnZXRHcm91cHMoXCJ0YXJnZXRzXCIsIHtcbiAgICAgIHRhcmdldEdyb3VwczogW25ld1RhcmdldEdyb3VwXSxcbiAgICB9KTtcbiAgfVxuICBuZXdUYXJnZXRHcm91cC5zZXRBdHRyaWJ1dGUoJ3N0aWNraW5lc3MuZW5hYmxlZCcsIHVuZGVmaW5lZCk7XG4gIHJldHVybiBuZXdUYXJnZXRHcm91cDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFkZEZhcmdhdGVUYXJnZXQoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGN1cnJlbnRMaXN0ZW5lcjogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gIGZhcmdhdGVTZXJ2aWNlOiBlY3MuRmFyZ2F0ZVNlcnZpY2UsXG4gIHJ1bGVQcm9wcz86IGVsYi5BZGRSdWxlUHJvcHMsXG4gIHRhcmdldFByb3BzPzogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyxcbik6IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwICB7XG5cbiAgaWYgKHRhcmdldFByb3BzPy5wcm90b2NvbCAhPT0gZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMpIHtcbiAgICBwcmludFdhcm5pbmcoJ0FXUyByZWNvbW1lbmRzIHVzaW5nIEhUVFBTIHByb3RvY29sIGZvciBUYXJnZXQgR3JvdXBzIGluIHByb2R1Y3Rpb24gYXBwbGljYXRpb25zJyk7XG4gIH1cblxuICBjb25zdCBuZXdUYXJnZXRHcm91cCA9IG5ldyBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cChzY29wZSwgYCR7aWR9LXRnYCwgdGFyZ2V0UHJvcHMpO1xuXG4gIC8vIFRoZSBpbnRlcmZhY2UgQWRkUnVsZVByb3BzIGluY2x1ZGVzIGNvbmRpdGlvbnMgYW5kIHByaW9yaXR5LCBjb21iaW5lIHRoYXRcbiAgLy8gd2l0aCB0YXJnZXRHcm91cHMgYW5kIHdlIGNhbiBhc3NlbWJsZSBhbiBBZGRBcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHMgb2JqZWN0XG4gIGlmIChydWxlUHJvcHMpIHtcbiAgICBjb25zdCBjb25zb2xpZGF0ZWRUYXJnZXRQcm9wcyA9IG92ZXJyaWRlUHJvcHMocnVsZVByb3BzLCB7IHRhcmdldEdyb3VwczogW25ld1RhcmdldEdyb3VwXSB9KTtcbiAgICBjdXJyZW50TGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGAke3Njb3BlLm5vZGUuaWR9LXRhcmdldHNgLCBjb25zb2xpZGF0ZWRUYXJnZXRQcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtpZH0tdGFyZ2V0c2AsIHtcbiAgICAgIHRhcmdldEdyb3VwczogW25ld1RhcmdldEdyb3VwXSxcbiAgICB9KTtcbiAgfVxuICBuZXdUYXJnZXRHcm91cC5hZGRUYXJnZXQoZmFyZ2F0ZVNlcnZpY2UpO1xuXG4gIHJldHVybiBuZXdUYXJnZXRHcm91cDtcbn1cblxuLy8gTG9va3MgZm9yIHRoZSBsaXN0ZW5lciBhc3NvY2lhdGVkIHdpdGggVGFyZ2V0IEdyb3Vwc1xuLy8gSWYgdGhlcmUgaXMgYSBzaW5nbGUgbGlzdGVuZXIsIHRoaXMgcmV0dXJucyBpdCB3aGV0aGVyIGl0IGlzIEhUVFAgb3IgSFRUUFNcbi8vIElmIHRoZXJlIGFyZSAyIGxpc3RlbmVycywgaXQgZmluZHMgdGhlIEhUVFBTIGxpc3RlbmVyICh3ZSBhc3N1bWUgdGhlIEhUVFAgbGlzdGVuZXIgcmVkaXJlY3RzIHRvIEhUVFBTKVxuZXhwb3J0IGZ1bmN0aW9uIEdldEFjdGl2ZUxpc3RlbmVyKGxpc3RlbmVyczogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJbXSk6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyIHtcbiAgbGV0IGxpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgaW4gdGhlIEFMQmApO1xuICB9XG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAxICkge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzWzBdO1xuICB9IGVsc2Uge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzLmZpbmQoaSA9PiAoaS5ub2RlLmNoaWxkcmVuWzBdIGFzIGVsYi5DZm5MaXN0ZW5lcikucHJvdG9jb2wgPT09IFwiSFRUUFNcIikgYXMgZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIH1cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tBbGJQcm9wcyhwcm9wczogYW55KSB7XG4gIGxldCBlcnJvck1lc3NhZ2VzID0gJyc7XG4gIGxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgaWYgKHByb3BzLmxpc3RlbmVyUHJvcHM/LmNlcnRpZmljYXRlQXJucykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJjZXJ0aWZpY2F0ZUFybnMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHN1cHBseSBjZXJ0aWZpY2F0ZXMgdXNpbmcgcHJvcHMubGlzdGVuZXJQcm9wcy5jZXJ0aWZpY2F0ZXNcXG5cIjtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICAoKHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iai5saXN0ZW5lcnMubGVuZ3RoID09PSAwKSB8fFxuICAgICAgIXByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqKSAmJlxuICAgICFwcm9wcy5saXN0ZW5lclByb3BzXG4gICkge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJXaGVuIGFkZGluZyB0aGUgZmlyc3QgbGlzdGVuZXIgYW5kIHRhcmdldCB0byBhIGxvYWQgYmFsYW5jZXIsIGxpc3RlbmVyUHJvcHMgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIGluY2x1ZGUgYXQgbGVhc3QgYSBjZXJ0aWZpY2F0ZSBvciBwcm90b2NvbDogSFRUUFxcblwiO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmoubGlzdGVuZXJzLmxlbmd0aCA+IDAgJiZcbiAgICBwcm9wcy5saXN0ZW5lclByb3BzXG4gICkge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJUaGlzIGxvYWQgYmFsYW5jZXIgYWxyZWFkeSBoYXMgYSBsaXN0ZW5lciwgbGlzdGVuZXJQcm9wcyBtYXkgbm90IGJlIHNwZWNpZmllZFxcblwiO1xuICB9XG5cbiAgaWYgKFxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmoubGlzdGVuZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAhcHJvcHMucnVsZVByb3BzXG4gICkge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJXaGVuIGFkZGluZyBhIHNlY29uZCB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgbGlzdGVuZXIsIHRoZXJlIG11c3QgYmUgcnVsZXMgcHJvdmlkZWRcXG5cIjtcbiAgfVxuXG4gIC8vIENoZWNrIGNvbnN0cnVjdCBzcGVjaWZpYyBpbnZhbGlkIGlucHV0c1xuICBpZiAocHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmogJiYgIXByb3BzLmV4aXN0aW5nVnBjKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcIkFuIGV4aXN0aW5nIEFMQiBpcyBhbHJlYWR5IGluIGEgVlBDLCB0aGF0IFZQQyBtdXN0IGJlIHByb3ZpZGVkIGluIHByb3BzLmV4aXN0aW5nVnBjIGZvciB0aGUgcmVzdCBvZiB0aGUgY29uc3RydWN0IHRvIHVzZS5cXG5cIjtcbiAgfVxuXG4gIGlmIChwcm9wcy5sb2FkQmFsYW5jZXJQcm9wcz8udnBjKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnU3BlY2lmeSBhbnkgZXhpc3RpbmcgVlBDIGF0IHRoZSBjb25zdHJ1Y3QgbGV2ZWwsIG5vdCB3aXRoaW4gbG9hZEJhbGFuY2VyUHJvcHMuXFxuJztcbiAgfVxuXG4gIGlmIChwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaikge1xuICAgIHByaW50V2FybmluZyhcbiAgICAgIFwiVGhlIHB1YmxpYy9wcml2YXRlIHByb3BlcnR5IG9mIGFuIGV4aXN0aW5nIEFMQiBtdXN0IG1hdGNoIHRoZSBwcm9wcy5wdWJsaWNBcGkgc2V0dGluZyBwcm92aWRlZC5cIlxuICAgICk7XG4gIH1cblxuICBpZiAoZXJyb3JGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgfVxufSJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFsYi1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSCw4REFBOEQ7QUFNOUQsdUZBQThGO0FBQzlGLHVFQUF1RTtBQUN2RSxtQ0FBeUQ7QUFDekQsaURBQXNEO0FBQ3RELHlEQUE0RDtBQUM1RCw2REFBaUU7QUFFakUsc0ZBQXNGO0FBQ3RGLDZEQUE2RDtBQUM3RCxTQUFnQixTQUFTLENBQ3ZCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixHQUFhLEVBQ2IsU0FBa0IsRUFDbEIsdUJBQXFELEVBQ3JELGlCQUEwRCxFQUMxRCxhQUF1QixFQUN2QixrQkFBbUM7SUFFbkMsSUFBSSxZQUF5QyxDQUFDO0lBRTlDLElBQUksdUJBQXVCLEVBQUU7UUFDM0IsWUFBWSxHQUFHLHVCQUF1QixDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLGlCQUFpQixHQUFHLHdCQUFnQixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN0RyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQzVDLEtBQUssRUFDTCxHQUFHLEVBQUUsTUFBTSxFQUNYLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDekQsTUFBTSw4QkFBOEIsR0FBRyx3QkFBZ0IsQ0FBQyw4Q0FBeUIsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDekcsTUFBTSxhQUFhLEdBQUcseUNBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ3hGLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0M7S0FDRjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUE1QkQsOEJBNEJDO0FBRUQsU0FBZ0IsV0FBVyxDQUN6QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBeUMsRUFDekMsYUFBaUQ7O0lBRWpELElBQUkseUJBQXVELENBQUM7SUFFNUQseUJBQXlCLEdBQUcsd0JBQWdCLENBQUMsbUNBQW9CLENBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFaEcsdUJBQXVCO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUMxQyxLQUFLLEVBQ0wsR0FBRyxFQUFFLFdBQVcsRUFDaEIseUJBQXlCLENBQzFCLENBQUM7SUFDRixZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0QyxJQUFJLHlCQUF5QixDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFO1FBQ3ZFLDBEQUEwRDtRQUMxRCxvQkFBWSxDQUNWLGdGQUFnRixDQUNqRixDQUFDO1FBQ0YsSUFBSSxPQUFBLGFBQWEsQ0FBQyxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO0tBQ0Y7U0FBTTtRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7U0FDM0U7UUFFRCxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsSUFBSSx5QkFBeUIsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtRQUN4RSxNQUFNLEdBQUcsR0FBd0I7WUFDL0IsSUFBSSxFQUFFLEtBQUs7WUFDWCxRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsbUJBQW1CLENBQzlDLEtBQUssRUFDTCxHQUFHLEVBQUUsV0FBVyxFQUNoQjtZQUNFLFlBQVk7WUFDWixRQUFRLEVBQUUsZ0RBQW1CLENBQUMsSUFBSTtZQUNsQyxhQUFhLEVBQUUsMkNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1NBQzVDLENBQ0YsQ0FBQztRQUNGLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQXJERCxrQ0FxREM7QUFFRCwyREFBMkQ7QUFDM0QsMERBQTBEO0FBQzFELGlEQUFpRDtBQUNqRCxTQUFnQixlQUFlLENBQzdCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixlQUF3QyxFQUN4QyxjQUFnQyxFQUNoQyxTQUE0QixFQUM1QixXQUE2QztJQUc3Qyx5REFBeUQ7SUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1FBQ3ZFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN2QixlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3RFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDL0QsQ0FBQyxDQUFDO0lBRUgsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxNQUFNLHVCQUF1QixHQUFHLHdCQUFnQixDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUVyRixjQUFjLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUF4QkQsMENBd0JDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixlQUF3QyxFQUN4QyxjQUFrQyxFQUNsQyxTQUE0QixFQUM1QixXQUE2QztJQUc3QyxJQUFJLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFFBQVEsTUFBSyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO1FBQzNELG9CQUFZLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztLQUNsRztJQUVELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXRGLDRFQUE0RTtJQUM1RSxpRkFBaUY7SUFDakYsTUFBTSx1QkFBdUIsR0FBRyx3QkFBZ0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFaEcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNyRixjQUFjLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUF2QkQsNENBdUJDO0FBRUQsdURBQXVEO0FBQ3ZELDZFQUE2RTtBQUM3RSx5R0FBeUc7QUFDekcsU0FBZ0IsaUJBQWlCLENBQUMsU0FBb0M7SUFDcEUsSUFBSSxRQUFpQyxDQUFDO0lBRXRDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUc7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRztRQUMzQixRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCO1NBQU07UUFDTCxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBcUIsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUE0QixDQUFDO0tBQ3pIO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQVpELDhDQVlDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEtBQVU7O0lBQ3RDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFdkIsVUFBSSxLQUFLLENBQUMsYUFBYSwwQ0FBRSxlQUFlLEVBQUU7UUFDeEMsYUFBYSxJQUFJLG9HQUFvRyxDQUFDO1FBQ3RILFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDbkI7SUFFRCxJQUNFLENBQUMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCO1FBQzdCLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztRQUNqQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQ3BCO1FBQ0EsYUFBYSxJQUFJLHNKQUFzSixDQUFDO1FBQ3hLLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDbkI7SUFFRCxJQUNFLEtBQUssQ0FBQyx1QkFBdUI7UUFDN0IsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNsRCxLQUFLLENBQUMsYUFBYSxFQUNuQjtRQUNBLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxJQUFJLGlGQUFpRixDQUFDO0tBQ3BHO0lBRUQsSUFDRSxLQUFLLENBQUMsdUJBQXVCO1FBQzdCLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDbEQsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUNoQjtRQUNBLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxJQUFJLHFGQUFxRixDQUFDO0tBQ3hHO0lBRUQsMENBQTBDO0lBQzFDLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUN2RCxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQWEsSUFBSSw2SEFBNkgsQ0FBQztLQUNoSjtJQUVELFVBQUksS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxHQUFHLEVBQUU7UUFDaEMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFhLElBQUksa0ZBQWtGLENBQUM7S0FDckc7SUFFRCxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtRQUNqQyxvQkFBWSxDQUNWLGlHQUFpRyxDQUNsRyxDQUFDO0tBQ0g7SUFFRCxJQUFJLFVBQVUsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDaEM7QUFDSCxDQUFDO0FBekRELHNDQXlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIyIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvdG9jb2wsIExpc3RlbmVyQWN0aW9uLCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0ICogYXMgZWxidCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItdGFyZ2V0c1wiO1xuaW1wb3J0IHsgcHJpbnRXYXJuaW5nLCBjb25zb2xpZGF0ZVByb3BzIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERlZmF1bHRMaXN0ZW5lclByb3BzIH0gZnJvbSBcIi4vYWxiLWRlZmF1bHRzXCI7XG5pbXBvcnQgeyBjcmVhdGVBbGJMb2dnaW5nQnVja2V0IH0gZnJvbSBcIi4vczMtYnVja2V0LWhlbHBlclwiO1xuaW1wb3J0IHsgRGVmYXVsdExvZ2dpbmdCdWNrZXRQcm9wcyB9IGZyb20gXCIuL3MzLWJ1Y2tldC1kZWZhdWx0c1wiO1xuXG4vLyAgUmV0dXJucyB0aGUgY29ycmVjdCBBTEIgTG9hZCBCYWxhbmNlciB0byB1c2UgaW4gdGhpcyBjb25zdHJ1Y3QsIGVpdGhlciBhbiBleGlzdGluZ1xuLy8gIG9uZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCBvciBjcmVhdGUgIG5ldyBvbmUgb3RoZXJ3aXNlLlxuZXhwb3J0IGZ1bmN0aW9uIE9idGFpbkFsYihcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgdnBjOiBlYzIuSVZwYyxcbiAgcHVibGljQXBpOiBib29sZWFuLFxuICBleGlzdGluZ0xvYWRCYWxhbmNlck9iaj86IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgbG9hZEJhbGFuY2VyUHJvcHM/OiBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJQcm9wcyB8IGFueSxcbiAgbG9nQWNjZXNzTG9ncz86IGJvb2xlYW4sXG4gIGxvZ2dpbmdCdWNrZXRQcm9wcz86IHMzLkJ1Y2tldFByb3BzXG4pOiBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIge1xuICBsZXQgbG9hZEJhbGFuY2VyOiBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG5cbiAgaWYgKGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqKSB7XG4gICAgbG9hZEJhbGFuY2VyID0gZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmo7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29uc29saWRhdGVkUHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKHt9LCBsb2FkQmFsYW5jZXJQcm9wcywgeyB2cGMsIGludGVybmV0RmFjaW5nOiBwdWJsaWNBcGkgfSk7XG4gICAgbG9hZEJhbGFuY2VyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9LWFsYmAsXG4gICAgICBjb25zb2xpZGF0ZWRQcm9wc1xuICAgICk7XG4gICAgaWYgKGxvZ0FjY2Vzc0xvZ3MgPT09IHVuZGVmaW5lZCB8fCBsb2dBY2Nlc3NMb2dzID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBjb25zb2xpZGF0ZWRMb2dnaW5nQnVja2V0UHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKERlZmF1bHRMb2dnaW5nQnVja2V0UHJvcHMoKSwgbG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgICAgIGNvbnN0IGxvZ2dpbmdCdWNrZXQgPSBjcmVhdGVBbGJMb2dnaW5nQnVja2V0KHNjb3BlLCBpZCwgY29uc29saWRhdGVkTG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgICAgIGxvYWRCYWxhbmNlci5sb2dBY2Nlc3NMb2dzKGxvZ2dpbmdCdWNrZXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9hZEJhbGFuY2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWRkTGlzdGVuZXIoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGxvYWRCYWxhbmNlcjogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBsaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzIHwgYW55XG4pOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lciB7XG4gIGxldCBjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzO1xuXG4gIGNvbnNvbGlkYXRlZExpc3RlbmVyUHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKERlZmF1bHRMaXN0ZW5lclByb3BzKGxvYWRCYWxhbmNlciksIGxpc3RlbmVyUHJvcHMpO1xuXG4gIC8vICBjcmVhdGUgdGhlIGxpc3RlbmVyXG4gIGNvbnN0IGxpc3RlbmVyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKFxuICAgIHNjb3BlLFxuICAgIGAke2lkfS1saXN0ZW5lcmAsXG4gICAgY29uc29saWRhdGVkTGlzdGVuZXJQcm9wc1xuICApO1xuICBsb2FkQmFsYW5jZXIubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gIGlmIChjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzLnByb3RvY29sID09PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQKSB7XG4gICAgLy8gVGhpcyB3aWxsIHVzZSBjb3JlLnByaW50V2FybmluZyBpbiB0aGUgYWN0dWFsIGNvbnN0cnVjdFxuICAgIHByaW50V2FybmluZyhcbiAgICAgIFwiQVdTIHJlY29tbWVuZHMgZW5jcnlwdGluZyB0cmFmZmljIHRvIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgdXNpbmcgSFRUUFMuXCJcbiAgICApO1xuICAgIGlmIChsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBsaXN0ZW5lcnMgY2Fubm90IHVzZSBhIGNlcnRpZmljYXRlXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzIHx8IGxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBsaXN0ZW5lciB1c2luZyBIVFRQUyBwcm90b2NvbCByZXF1aXJlcyBhIGNlcnRpZmljYXRlXCIpO1xuICAgIH1cblxuICAgIGxpc3RlbmVyLmFkZENlcnRpZmljYXRlcyhgJHtpZH0tY2VydGAsIGxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzKTtcbiAgfVxuXG4gIGlmIChjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzLnByb3RvY29sID09PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUykge1xuICAgIGNvbnN0IG9wdDogZWxiLlJlZGlyZWN0T3B0aW9ucyA9IHtcbiAgICAgIHBvcnQ6IFwiNDQzXCIsXG4gICAgICBwcm90b2NvbDogXCJIVFRQU1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBodHRwTGlzdGVuZXIgPSBuZXcgZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkfS1yZWRpcmVjdGAsXG4gICAgICB7XG4gICAgICAgIGxvYWRCYWxhbmNlcixcbiAgICAgICAgcHJvdG9jb2w6IEFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgICAgZGVmYXVsdEFjdGlvbjogTGlzdGVuZXJBY3Rpb24ucmVkaXJlY3Qob3B0KSxcbiAgICAgIH1cbiAgICApO1xuICAgIGxvYWRCYWxhbmNlci5saXN0ZW5lcnMucHVzaChodHRwTGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vLyBDcmVhdGVzIGEgVGFyZ2V0IEdyb3VwIGZvciBMYW1iZGEgZnVuY3Rpb25zIGFuZCBhZGRzIHRoZVxuLy8gcHJvdmlkZWQgZnVuY3Rpb25zIGFzIGEgdGFyZ2V0IHRvIHRoYXQgZ3JvdXAuIFRoZW4gYWRkc1xuLy8gdGhlIG5ldyBUYXJnZXQgR3JvdXAgdG8gdGhlIHByb3ZpZGVkIExpc3RlbmVyLlxuZXhwb3J0IGZ1bmN0aW9uIEFkZExhbWJkYVRhcmdldChcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgY3VycmVudExpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5JRnVuY3Rpb24sXG4gIHJ1bGVQcm9wcz86IGVsYi5BZGRSdWxlUHJvcHMsXG4gIHRhcmdldFByb3BzPzogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyxcbik6IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwICB7XG5cbiAgLy8gIENyZWF0ZSB0aGUgdGFyZ2V0IGFuZCBhc3NpZ24gaXQgdG8gYSBuZXcgdGFyZ2V0IGdyb3VwXG4gIGNvbnN0IGxhbWJkYVRhcmdldCA9IG5ldyBlbGJ0LkxhbWJkYVRhcmdldChsYW1iZGFGdW5jdGlvbik7XG4gIGNvbnN0IG5ld1RhcmdldEdyb3VwID0gbmV3IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHNjb3BlLCBgJHtpZH0tdGdgLCB7XG4gICAgdGFyZ2V0czogW2xhbWJkYVRhcmdldF0sXG4gICAgdGFyZ2V0R3JvdXBOYW1lOiB0YXJnZXRQcm9wcyA/IHRhcmdldFByb3BzLnRhcmdldEdyb3VwTmFtZSA6IHVuZGVmaW5lZCxcbiAgICBoZWFsdGhDaGVjazogdGFyZ2V0UHJvcHMgPyB0YXJnZXRQcm9wcy5oZWFsdGhDaGVjayA6IHVuZGVmaW5lZFxuICB9KTtcblxuICAvLyBUaGUgaW50ZXJmYWNlIEFkZFJ1bGVQcm9wcyBpbmNsdWRlcyBjb25kaXRpb25zIGFuZCBwcmlvcml0eSwgY29tYmluZSB0aGF0XG4gIC8vIHdpdGggdGFyZ2V0R3JvdXBzIGFuZCB3ZSBjYW4gYXNzZW1ibGUgQWRkQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzXG4gIGNvbnN0IGNvbnNvbGlkYXRlZFRhcmdldFByb3BzID0gY29uc29saWRhdGVQcm9wcyh7fSwgcnVsZVByb3BzLCB7IHRhcmdldEdyb3VwczogW25ld1RhcmdldEdyb3VwXSB9KTtcbiAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtzY29wZS5ub2RlLmlkfS10YXJnZXRzYCwgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMpO1xuXG4gIG5ld1RhcmdldEdyb3VwLnNldEF0dHJpYnV0ZSgnc3RpY2tpbmVzcy5lbmFibGVkJywgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIG5ld1RhcmdldEdyb3VwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWRkRmFyZ2F0ZVRhcmdldChcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgY3VycmVudExpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgZmFyZ2F0ZVNlcnZpY2U6IGVjcy5GYXJnYXRlU2VydmljZSxcbiAgcnVsZVByb3BzPzogZWxiLkFkZFJ1bGVQcm9wcyxcbiAgdGFyZ2V0UHJvcHM/OiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzLFxuKTogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgIHtcblxuICBpZiAodGFyZ2V0UHJvcHM/LnByb3RvY29sICE9PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUykge1xuICAgIHByaW50V2FybmluZygnQVdTIHJlY29tbWVuZHMgdXNpbmcgSFRUUFMgcHJvdG9jb2wgZm9yIFRhcmdldCBHcm91cHMgaW4gcHJvZHVjdGlvbiBhcHBsaWNhdGlvbnMnKTtcbiAgfVxuXG4gIGNvbnN0IG5ld1RhcmdldEdyb3VwID0gbmV3IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHNjb3BlLCBgJHtpZH0tdGdgLCB0YXJnZXRQcm9wcyk7XG5cbiAgLy8gVGhlIGludGVyZmFjZSBBZGRSdWxlUHJvcHMgaW5jbHVkZXMgY29uZGl0aW9ucyBhbmQgcHJpb3JpdHksIGNvbWJpbmUgdGhhdFxuICAvLyB3aXRoIHRhcmdldEdyb3VwcyBhbmQgd2UgY2FuIGFzc2VtYmxlIGFuIEFkZEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyBvYmplY3RcbiAgY29uc3QgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKHsgdGFyZ2V0R3JvdXBzOiBbbmV3VGFyZ2V0R3JvdXBdIH0sIHJ1bGVQcm9wcyk7XG5cbiAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtzY29wZS5ub2RlLmlkfS10YXJnZXRzYCwgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMpO1xuICBuZXdUYXJnZXRHcm91cC5hZGRUYXJnZXQoZmFyZ2F0ZVNlcnZpY2UpO1xuXG4gIHJldHVybiBuZXdUYXJnZXRHcm91cDtcbn1cblxuLy8gTG9va3MgZm9yIHRoZSBsaXN0ZW5lciBhc3NvY2lhdGVkIHdpdGggVGFyZ2V0IEdyb3Vwc1xuLy8gSWYgdGhlcmUgaXMgYSBzaW5nbGUgbGlzdGVuZXIsIHRoaXMgcmV0dXJucyBpdCB3aGV0aGVyIGl0IGlzIEhUVFAgb3IgSFRUUFNcbi8vIElmIHRoZXJlIGFyZSAyIGxpc3RlbmVycywgaXQgZmluZHMgdGhlIEhUVFBTIGxpc3RlbmVyICh3ZSBhc3N1bWUgdGhlIEhUVFAgbGlzdGVuZXIgcmVkaXJlY3RzIHRvIEhUVFBTKVxuZXhwb3J0IGZ1bmN0aW9uIEdldEFjdGl2ZUxpc3RlbmVyKGxpc3RlbmVyczogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJbXSk6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyIHtcbiAgbGV0IGxpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgaW4gdGhlIEFMQmApO1xuICB9XG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAxICkge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzWzBdO1xuICB9IGVsc2Uge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzLmZpbmQoaSA9PiAoaS5ub2RlLmNoaWxkcmVuWzBdIGFzIGVsYi5DZm5MaXN0ZW5lcikucHJvdG9jb2wgPT09IFwiSFRUUFNcIikgYXMgZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIH1cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tBbGJQcm9wcyhwcm9wczogYW55KSB7XG4gIGxldCBlcnJvck1lc3NhZ2VzID0gJyc7XG4gIGxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgaWYgKHByb3BzLmxpc3RlbmVyUHJvcHM/LmNlcnRpZmljYXRlQXJucykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJjZXJ0aWZpY2F0ZUFybnMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHN1cHBseSBjZXJ0aWZpY2F0ZXMgdXNpbmcgcHJvcHMubGlzdGVuZXJQcm9wcy5jZXJ0aWZpY2F0ZXNcXG5cIjtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICAoKHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iai5saXN0ZW5lcnMubGVuZ3RoID09PSAwKSB8fFxuICAgICAgIXByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqKSAmJlxuICAgICFwcm9wcy5saXN0ZW5lclByb3BzXG4gICkge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJXaGVuIGFkZGluZyB0aGUgZmlyc3QgbGlzdGVuZXIgYW5kIHRhcmdldCB0byBhIGxvYWQgYmFsYW5jZXIsIGxpc3RlbmVyUHJvcHMgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIGluY2x1ZGUgYXQgbGVhc3QgYSBjZXJ0aWZpY2F0ZSBvciBwcm90b2NvbDogSFRUUFxcblwiO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmoubGlzdGVuZXJzLmxlbmd0aCA+IDAgJiZcbiAgICBwcm9wcy5saXN0ZW5lclByb3BzXG4gICkge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJUaGlzIGxvYWQgYmFsYW5jZXIgYWxyZWFkeSBoYXMgYSBsaXN0ZW5lciwgbGlzdGVuZXJQcm9wcyBtYXkgbm90IGJlIHNwZWNpZmllZFxcblwiO1xuICB9XG5cbiAgaWYgKFxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmoubGlzdGVuZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAhcHJvcHMucnVsZVByb3BzXG4gICkge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJXaGVuIGFkZGluZyBhIHNlY29uZCB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgbGlzdGVuZXIsIHRoZXJlIG11c3QgYmUgcnVsZXMgcHJvdmlkZWRcXG5cIjtcbiAgfVxuXG4gIC8vIENoZWNrIGNvbnN0cnVjdCBzcGVjaWZpYyBpbnZhbGlkIGlucHV0c1xuICBpZiAocHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmogJiYgIXByb3BzLmV4aXN0aW5nVnBjKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcIkFuIGV4aXN0aW5nIEFMQiBpcyBhbHJlYWR5IGluIGEgVlBDLCB0aGF0IFZQQyBtdXN0IGJlIHByb3ZpZGVkIGluIHByb3BzLmV4aXN0aW5nVnBjIGZvciB0aGUgcmVzdCBvZiB0aGUgY29uc3RydWN0IHRvIHVzZS5cXG5cIjtcbiAgfVxuXG4gIGlmIChwcm9wcy5sb2FkQmFsYW5jZXJQcm9wcz8udnBjKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnU3BlY2lmeSBhbnkgZXhpc3RpbmcgVlBDIGF0IHRoZSBjb25zdHJ1Y3QgbGV2ZWwsIG5vdCB3aXRoaW4gbG9hZEJhbGFuY2VyUHJvcHMuXFxuJztcbiAgfVxuXG4gIGlmIChwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaikge1xuICAgIHByaW50V2FybmluZyhcbiAgICAgIFwiVGhlIHB1YmxpYy9wcml2YXRlIHByb3BlcnR5IG9mIGFuIGV4aXN0aW5nIEFMQiBtdXN0IG1hdGNoIHRoZSBwcm9wcy5wdWJsaWNBcGkgc2V0dGluZyBwcm92aWRlZC5cIlxuICAgICk7XG4gIH1cblxuICBpZiAoZXJyb3JGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgfVxufSJdfQ==
@@ -79,7 +79,7 @@ function configureLambdaRestApi(scope, defaultApiGatewayProps, apiGatewayProps)
79
79
  let _api;
80
80
  if (apiGatewayProps) {
81
81
  // If property overrides have been provided, incorporate them and deploy
82
- const _apiGatewayProps = utils_1.overrideProps(defaultApiGatewayProps, { ...apiGatewayProps, cloudWatchRole: false });
82
+ const _apiGatewayProps = utils_1.consolidateProps(defaultApiGatewayProps, apiGatewayProps, { cloudWatchRole: false });
83
83
  _api = new api.LambdaRestApi(scope, 'LambdaRestApi', _apiGatewayProps);
84
84
  }
85
85
  else {
@@ -122,15 +122,8 @@ function configureRestApi(scope, defaultApiGatewayProps, apiGatewayProps) {
122
122
  }
123
123
  // Define the API
124
124
  let _api;
125
- if (apiGatewayProps) {
126
- // If property overrides have been provided, incorporate them and deploy
127
- const _apiGatewayProps = utils_1.overrideProps(defaultApiGatewayProps, { ...apiGatewayProps, cloudWatchRole: false });
128
- _api = new api.RestApi(scope, 'RestApi', _apiGatewayProps);
129
- }
130
- else {
131
- // If no property overrides, deploy using the default configuration
132
- _api = new api.RestApi(scope, 'RestApi', defaultApiGatewayProps);
133
- }
125
+ const _apiGatewayProps = utils_1.consolidateProps(defaultApiGatewayProps, apiGatewayProps, { cloudWatchRole: false });
126
+ _api = new api.RestApi(scope, 'RestApi', _apiGatewayProps);
134
127
  let cwRole;
135
128
  // Configure API access logging
136
129
  if ((apiGatewayProps === null || apiGatewayProps === void 0 ? void 0 : apiGatewayProps.cloudWatchRole) !== false) {
@@ -251,13 +244,8 @@ function addProxyMethodToApiResource(params) {
251
244
  // Setup the API Gateway AWS Integration
252
245
  baseProps = Object.assign(baseProps, extraProps);
253
246
  let apiGatewayIntegration;
254
- if (params.awsIntegrationProps) {
255
- const overridenProps = utils_1.overrideProps(baseProps, params.awsIntegrationProps);
256
- apiGatewayIntegration = new api.AwsIntegration(overridenProps);
257
- }
258
- else {
259
- apiGatewayIntegration = new api.AwsIntegration(baseProps);
260
- }
247
+ const newProps = utils_1.consolidateProps(baseProps, params.awsIntegrationProps);
248
+ apiGatewayIntegration = new api.AwsIntegration(newProps);
261
249
  const defaultMethodOptions = {
262
250
  methodResponses: [
263
251
  {
@@ -278,14 +266,9 @@ function addProxyMethodToApiResource(params) {
278
266
  };
279
267
  let apiMethod;
280
268
  // Setup the API Gateway method
281
- if (params.methodOptions) {
282
- const overridenProps = utils_1.overrideProps(defaultMethodOptions, params.methodOptions);
283
- apiMethod = params.apiResource.addMethod(params.apiMethod, apiGatewayIntegration, overridenProps);
284
- }
285
- else {
286
- apiMethod = params.apiResource.addMethod(params.apiMethod, apiGatewayIntegration, defaultMethodOptions);
287
- }
269
+ const overridenProps = utils_1.consolidateProps(defaultMethodOptions, params.methodOptions);
270
+ apiMethod = params.apiResource.addMethod(params.apiMethod, apiGatewayIntegration, overridenProps);
288
271
  return apiMethod;
289
272
  }
290
273
  exports.addProxyMethodToApiResource = addProxyMethodToApiResource;
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpZ2F0ZXdheS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcGlnYXRld2F5LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUtILG1DQUFtQztBQUNuQyxrREFBa0Q7QUFDbEQsMkNBQTJDO0FBQzNDLHFEQUFxRDtBQUNyRCwrRUFBOEQ7QUFDOUQsbUNBQTZEO0FBSzdEOzs7O0dBSUc7QUFDSCxTQUFTLDZCQUE2QixDQUFDLEtBQWdCLEVBQUUsSUFBaUI7O0lBQ3hFLHVEQUF1RDtJQUN2RCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLEVBQUU7UUFDL0UsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDO1FBQy9ELGNBQWMsRUFBRTtZQUNkLGlDQUFpQyxFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDeEQsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AscUJBQXFCOzRCQUNyQixzQkFBc0I7NEJBQ3RCLHdCQUF3Qjs0QkFDeEIseUJBQXlCOzRCQUN6QixtQkFBbUI7NEJBQ25CLG1CQUFtQjs0QkFDbkIsc0JBQXNCO3lCQUN2Qjt3QkFDRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUM7cUJBQ3ZGLENBQUMsQ0FBQzthQUNKLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztJQUNELG9GQUFvRjtJQUN0RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQW1CLENBQUM7SUFDakUsTUFBTSxVQUFVLEdBQW1CLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDbkYsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsT0FBTztLQUNqRCxDQUFDLENBQUM7SUFDSCxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhDLG9DQUFvQztJQUNwQyxNQUFNLFVBQVUsR0FBc0IsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFzQixDQUFDO0lBQzdHLDJCQUFtQixDQUFDLFVBQVUsRUFBRTtRQUM5QjtZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLDZJQUE2STtTQUN0SjtLQUNGLENBQUMsQ0FBQztJQUVILHFCQUFxQjtJQUNyQixPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsc0JBQXNCLENBQUMsS0FBZ0IsRUFBRSxzQkFBOEMsRUFDOUYsZUFBd0M7O0lBRXhDLDZHQUE2RztJQUM3RyxJQUFJLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxhQUFhLEVBQUU7UUFDbEMsTUFBTSxLQUFLLENBQUMsZ0hBQWdILENBQUMsQ0FBQztLQUMvSDtJQUVELHdCQUF3QjtJQUN4QixJQUFJLElBQWlCLENBQUM7SUFDdEIsSUFBSSxlQUFlLEVBQUU7UUFDbkIsd0VBQXdFO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEdBQUcsZUFBZSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hFO1NBQU07UUFDTCxtRUFBbUU7UUFDbkUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixDQUFDLENBQUM7S0FDOUU7SUFDRCwrQkFBK0I7SUFDL0IsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLENBQUEsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLGNBQWMsTUFBSyxLQUFLLEVBQUU7UUFDN0MsTUFBTSxHQUFHLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyRDtJQUVELHVCQUF1QjtJQUN2QixNQUFNLGNBQWMsR0FBdUI7UUFDekMsU0FBUyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQzVCLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFNUQsb0ZBQW9GO0lBQ3BGLElBQUksT0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsb0JBQW9CLDBDQUFFLGNBQWMsTUFBSyxJQUFJLEVBQUU7UUFDbEUsb0NBQW9DO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNyQjtJQUVELDZCQUE2QjtJQUM3QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBZ0IsRUFBRSxzQkFBd0MsRUFDbEYsZUFBa0M7O0lBRWxDLDZHQUE2RztJQUM3RyxJQUFJLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxhQUFhLEVBQUU7UUFDbEMsTUFBTSxLQUFLLENBQUMsZ0hBQWdILENBQUMsQ0FBQztLQUMvSDtJQUVELGlCQUFpQjtJQUNqQixJQUFJLElBQWlCLENBQUM7SUFDdEIsSUFBSSxlQUFlLEVBQUU7UUFDbkIsd0VBQXdFO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEdBQUcsZUFBZSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzVEO1NBQU07UUFDTCxtRUFBbUU7UUFDbkUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7S0FDbEU7SUFFRCxJQUFJLE1BQU0sQ0FBQztJQUVYLCtCQUErQjtJQUMvQixJQUFJLENBQUEsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLGNBQWMsTUFBSyxLQUFLLEVBQUU7UUFDN0MsTUFBTSxHQUFHLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyRDtJQUVELHVCQUF1QjtJQUN2QixNQUFNLGNBQWMsR0FBdUI7UUFDekMsU0FBUyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQzVCLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFNUQsb0ZBQW9GO0lBQ3BGLElBQUksT0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsb0JBQW9CLDBDQUFFLGNBQWMsTUFBSyxJQUFJLEVBQUU7UUFDbEUsb0NBQW9DO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNyQjtJQUVELDZCQUE2QjtJQUM3QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEtBQWdCLEVBQUUsa0JBQW1DLEVBQ3ZGLGVBQXdDLEVBQUUsYUFBa0M7SUFDNUUsb0RBQW9EO0lBQ3BELE1BQU0sUUFBUSxHQUFHLDJDQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRixNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDMUYsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFFLENBQUM7QUFDekMsQ0FBQztBQVJELGtEQVFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxLQUFnQixFQUFFLGtCQUFtQyxFQUN6RixlQUF3QyxFQUFFLGFBQWtDO0lBQzVFLG9EQUFvRDtJQUNwRCxNQUFNLFFBQVEsR0FBRywyQ0FBYSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUxRSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsaUNBQWlDLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakcsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBRSxDQUFDO0FBQ3pDLENBQUM7QUFSRCxzREFRQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBZ0IsRUFBRSxlQUFrQyxFQUNoRixhQUFrQztJQUNsQyxvREFBb0Q7SUFDcEQsTUFBTSxRQUFRLEdBQUcsMkNBQWEsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFMUUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRixPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUUsQ0FBQztBQUN6QyxDQUFDO0FBUkQsc0NBUUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEtBQWdCLEVBQUUsZUFBa0MsRUFDbEYsYUFBa0M7SUFDbEMsb0RBQW9EO0lBQ3BELE1BQU0sUUFBUSxHQUFHLDJDQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEYsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFFLENBQUM7QUFDekMsQ0FBQztBQVJELDBDQVFDO0FBaUJELFNBQWdCLDJCQUEyQixDQUFDLE1BQThDO0lBQ3hGLElBQUksU0FBUyxHQUE0QjtRQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIscUJBQXFCLEVBQUUsTUFBTTtRQUM3QixPQUFPLEVBQUU7WUFDUCxtQkFBbUIsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSztZQUNsRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDdEMsaUJBQWlCLEVBQUU7Z0JBQ2pCLHlDQUF5QyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjthQUMxRztZQUNELGdCQUFnQixFQUFFO2dCQUNoQixrQkFBa0IsRUFBRSxNQUFNLENBQUMsZUFBZTthQUMzQztZQUNELG9CQUFvQixFQUFFO2dCQUNwQjtvQkFDRSxVQUFVLEVBQUUsS0FBSztpQkFDbEI7Z0JBQ0Q7b0JBQ0UsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGlCQUFpQixFQUFFO3dCQUNqQixXQUFXLEVBQUUsT0FBTztxQkFDckI7b0JBQ0QsZ0JBQWdCLEVBQUUsS0FBSztpQkFDeEI7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLElBQUksVUFBVSxDQUFDO0lBRWYsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2pCLFVBQVUsR0FBRztZQUNYLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtTQUN0QixDQUFDO0tBQ0g7U0FBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDdEIsVUFBVSxHQUFHO1lBQ1gsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ2xCLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztLQUNsRDtJQUVELHdDQUF3QztJQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakQsSUFBSSxxQkFBcUIsQ0FBQztJQUMxQixJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtRQUM5QixNQUFNLGNBQWMsR0FBRyxxQkFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDaEU7U0FBTTtRQUNMLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sb0JBQW9CLEdBQUc7UUFDM0IsZUFBZSxFQUFFO1lBQ2Y7Z0JBQ0UsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGtCQUFrQixFQUFFO29CQUNsQixxQ0FBcUMsRUFBRSxJQUFJO2lCQUM1QzthQUNGO1lBQ0Q7Z0JBQ0UsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGtCQUFrQixFQUFFO29CQUNsQixxQ0FBcUMsRUFBRSxJQUFJO2lCQUM1QzthQUNGO1NBQ0Y7UUFDRCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1FBQ3pDLGFBQWEsRUFBRSxNQUFNLENBQUMsWUFBWTtLQUNuQyxDQUFDO0lBRUYsSUFBSSxTQUFTLENBQUM7SUFDZCwrQkFBK0I7SUFDL0IsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFO1FBQ3hCLE1BQU0sY0FBYyxHQUFJLHFCQUFhLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ25HO1NBQU07UUFDTCxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3pHO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQWhGRCxrRUFnRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFwaSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBhcGlEZWZhdWx0cyBmcm9tICcuL2FwaWdhdGV3YXktZGVmYXVsdHMnO1xuaW1wb3J0IHsgYnVpbGRMb2dHcm91cCB9IGZyb20gJy4vY2xvdWR3YXRjaC1sb2ctZ3JvdXAtaGVscGVyJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMsIGFkZENmblN1cHByZXNzUnVsZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZXMgYWNjZXNzIGxvZ2dpbmcgZm9yIEFQSSBHYXRld2F5IHJlc291cmNlcy5cbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIGFjY2VzcyBsb2dnaW5nIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gX2FwaSAtIGFuIGV4aXN0aW5nIGFwaS5SZXN0QXBpIG9yIGFwaS5MYW1iZGFSZXN0QXBpLlxuICovXG5mdW5jdGlvbiBjb25maWd1cmVDbG91ZHdhdGNoUm9sZUZvckFwaShzY29wZTogQ29uc3RydWN0LCBfYXBpOiBhcGkuUmVzdEFwaSk6IGlhbS5Sb2xlIHtcbiAgLy8gU2V0dXAgdGhlIElBTSBSb2xlIGZvciBBUEkgR2F0ZXdheSBDbG91ZFdhdGNoIGFjY2Vzc1xuICBjb25zdCByZXN0QXBpQ2xvdWR3YXRjaFJvbGUgPSBuZXcgaWFtLlJvbGUoc2NvcGUsICdMYW1iZGFSZXN0QXBpQ2xvdWRXYXRjaFJvbGUnLCB7XG4gICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICBMYW1iZGFSZXN0QXBpQ2xvdWRXYXRjaFJvbGVQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgICAnbG9nczpGaWx0ZXJMb2dFdmVudHMnXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OmxvZ3M6JHtjZGsuQXdzLlJFR0lPTn06JHtjZGsuQXdzLkFDQ09VTlRfSUR9OipgXVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfVxuICB9KTtcbiAgICAvLyBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBBV1M6OkFwaUdhdGV3YXk6OkFjY291bnQgd2l0aCBDbG91ZFdhdGNoIFJvbGUgZm9yIEFwaUdhdGV3YXlcbiAgY29uc3QgQ2ZuQXBpID0gX2FwaS5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBhcGkuQ2ZuUmVzdEFwaTtcbiAgY29uc3QgY2ZuQWNjb3VudDogYXBpLkNmbkFjY291bnQgPSBuZXcgYXBpLkNmbkFjY291bnQoc2NvcGUsICdMYW1iZGFSZXN0QXBpQWNjb3VudCcsIHtcbiAgICBjbG91ZFdhdGNoUm9sZUFybjogcmVzdEFwaUNsb3Vkd2F0Y2hSb2xlLnJvbGVBcm5cbiAgfSk7XG4gIGNmbkFjY291bnQuYWRkRGVwZW5kc09uKENmbkFwaSk7XG5cbiAgLy8gU3VwcHJlc3MgQ2ZuIE5hZyB3YXJuaW5nIGZvciBBUElHXG4gIGNvbnN0IGRlcGxveW1lbnQ6IGFwaS5DZm5EZXBsb3ltZW50ID0gX2FwaS5sYXRlc3REZXBsb3ltZW50Py5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBhcGkuQ2ZuRGVwbG95bWVudDtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhkZXBsb3ltZW50LCBbXG4gICAge1xuICAgICAgaWQ6ICdXNDUnLFxuICAgICAgcmVhc29uOiBgQXBpR2F0ZXdheSBoYXMgQWNjZXNzTG9nZ2luZyBlbmFibGVkIGluIEFXUzo6QXBpR2F0ZXdheTo6U3RhZ2UgcmVzb3VyY2UsIGJ1dCBjZm5fbmFnIGNoZWNrZXMgZm9yIGl0IGluIEFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudCByZXNvdXJjZWBcbiAgICB9XG4gIF0pO1xuXG4gIC8vIFJldHVybiB0aGUgQ1cgUm9sZVxuICByZXR1cm4gcmVzdEFwaUNsb3Vkd2F0Y2hSb2xlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYW4gYXBpLkxhbWJkYVJlc3RBcGkuXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBMYW1iZGFSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBkZWZhdWx0QXBpR2F0ZXdheVByb3BzIC0gdGhlIGRlZmF1bHQgcHJvcGVydGllcyBmb3IgdGhlIExhbWJkYVJlc3RBcGkuXG4gKiBAcGFyYW0gYXBpR2F0ZXdheVByb3BzIC0gKG9wdGlvbmFsKSB1c2VyLXNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZUxhbWJkYVJlc3RBcGkoc2NvcGU6IENvbnN0cnVjdCwgZGVmYXVsdEFwaUdhdGV3YXlQcm9wczogYXBpLkxhbWJkYVJlc3RBcGlQcm9wcyxcbiAgYXBpR2F0ZXdheVByb3BzPzogYXBpLkxhbWJkYVJlc3RBcGlQcm9wcyk6IFthcGkuUmVzdEFwaSwgaWFtLlJvbGUgfCB1bmRlZmluZWRdIHtcblxuICAvLyBBUEkgR2F0ZXdheSBkb2Vzbid0IGFsbG93IGJvdGggZW5kcG9pbnRUeXBlcyBhbmQgZW5kcG9pbnRDb25maWd1cmF0aW9uLCBjaGVjayB3aGV0aGVyIGVuZFBvaW50VHlwZXMgZXhpc3RzXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmVuZHBvaW50VHlwZXMpIHtcbiAgICB0aHJvdyBFcnJvcignU29sdXRpb25zIENvbnN0cnVjdHMgaW50ZXJuYWxseSB1c2VzIGVuZHBvaW50Q29uZmlndXJhdGlvbiwgdXNlIGVuZHBvaW50Q29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGVuZHBvaW50VHlwZXMnKTtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgQVBJIG9iamVjdFxuICBsZXQgX2FwaTogYXBpLlJlc3RBcGk7XG4gIGlmIChhcGlHYXRld2F5UHJvcHMpIHtcbiAgICAvLyBJZiBwcm9wZXJ0eSBvdmVycmlkZXMgaGF2ZSBiZWVuIHByb3ZpZGVkLCBpbmNvcnBvcmF0ZSB0aGVtIGFuZCBkZXBsb3lcbiAgICBjb25zdCBfYXBpR2F0ZXdheVByb3BzID0gb3ZlcnJpZGVQcm9wcyhkZWZhdWx0QXBpR2F0ZXdheVByb3BzLCB7IC4uLmFwaUdhdGV3YXlQcm9wcywgY2xvdWRXYXRjaFJvbGU6IGZhbHNlIH0pO1xuICAgIF9hcGkgPSBuZXcgYXBpLkxhbWJkYVJlc3RBcGkoc2NvcGUsICdMYW1iZGFSZXN0QXBpJywgX2FwaUdhdGV3YXlQcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbm8gcHJvcGVydHkgb3ZlcnJpZGVzLCBkZXBsb3kgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgIF9hcGkgPSBuZXcgYXBpLkxhbWJkYVJlc3RBcGkoc2NvcGUsICdMYW1iZGFSZXN0QXBpJywgZGVmYXVsdEFwaUdhdGV3YXlQcm9wcyk7XG4gIH1cbiAgLy8gQ29uZmlndXJlIEFQSSBhY2Nlc3MgbG9nZ2luZ1xuICBsZXQgY3dSb2xlO1xuXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmNsb3VkV2F0Y2hSb2xlICE9PSBmYWxzZSkge1xuICAgIGN3Um9sZSA9IGNvbmZpZ3VyZUNsb3Vkd2F0Y2hSb2xlRm9yQXBpKHNjb3BlLCBfYXBpKTtcbiAgfVxuXG4gIC8vIENvbmZpZ3VyZSBVc2FnZSBQbGFuXG4gIGNvbnN0IHVzYWdlUGxhblByb3BzOiBhcGkuVXNhZ2VQbGFuUHJvcHMgPSB7XG4gICAgYXBpU3RhZ2VzOiBbe1xuICAgICAgYXBpOiBfYXBpLFxuICAgICAgc3RhZ2U6IF9hcGkuZGVwbG95bWVudFN0YWdlXG4gICAgfV1cbiAgfTtcblxuICBjb25zdCBwbGFuID0gX2FwaS5hZGRVc2FnZVBsYW4oJ1VzYWdlUGxhbicsIHVzYWdlUGxhblByb3BzKTtcblxuICAvLyBJZiByZXF1aXJlQXBpS2V5IHBhcmFtIGlzIHNldCB0byB0cnVlLCBjcmVhdGUgYSBhcGkga2V5ICYgYXNzb2NpYXRlIHRvIFVzYWdlIFBsYW5cbiAgaWYgKGFwaUdhdGV3YXlQcm9wcz8uZGVmYXVsdE1ldGhvZE9wdGlvbnM/LmFwaUtleVJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgLy8gQ29uZmlndXJlIFVzYWdlIFBsYW4gd2l0aCBBUEkgS2V5XG4gICAgY29uc3Qga2V5ID0gX2FwaS5hZGRBcGlLZXkoJ0FwaUtleScpO1xuICAgIHBsYW4uYWRkQXBpS2V5KGtleSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIEFQSSBhbmQgQ1cgUm9sZVxuICByZXR1cm4gW19hcGksIGN3Um9sZV07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgY29uZmlndXJlcyBhbiBhcGkuUmVzdEFwaS5cbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIFJlc3RBcGkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIGRlZmF1bHRBcGlHYXRld2F5UHJvcHMgLSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgUmVzdEFwaS5cbiAqIEBwYXJhbSBhcGlHYXRld2F5UHJvcHMgLSAob3B0aW9uYWwpIHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlUmVzdEFwaShzY29wZTogQ29uc3RydWN0LCBkZWZhdWx0QXBpR2F0ZXdheVByb3BzOiBhcGkuUmVzdEFwaVByb3BzLFxuICBhcGlHYXRld2F5UHJvcHM/OiBhcGkuUmVzdEFwaVByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZF0ge1xuXG4gIC8vIEFQSSBHYXRld2F5IGRvZXNuJ3QgYWxsb3cgYm90aCBlbmRwb2ludFR5cGVzIGFuZCBlbmRwb2ludENvbmZpZ3VyYXRpb24sIGNoZWNrIHdoZXRoZXIgZW5kUG9pbnRUeXBlcyBleGlzdHNcbiAgaWYgKGFwaUdhdGV3YXlQcm9wcz8uZW5kcG9pbnRUeXBlcykge1xuICAgIHRocm93IEVycm9yKCdTb2x1dGlvbnMgQ29uc3RydWN0cyBpbnRlcm5hbGx5IHVzZXMgZW5kcG9pbnRDb25maWd1cmF0aW9uLCB1c2UgZW5kcG9pbnRDb25maWd1cmF0aW9uIGluc3RlYWQgb2YgZW5kcG9pbnRUeXBlcycpO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBBUElcbiAgbGV0IF9hcGk6IGFwaS5SZXN0QXBpO1xuICBpZiAoYXBpR2F0ZXdheVByb3BzKSB7XG4gICAgLy8gSWYgcHJvcGVydHkgb3ZlcnJpZGVzIGhhdmUgYmVlbiBwcm92aWRlZCwgaW5jb3Jwb3JhdGUgdGhlbSBhbmQgZGVwbG95XG4gICAgY29uc3QgX2FwaUdhdGV3YXlQcm9wcyA9IG92ZXJyaWRlUHJvcHMoZGVmYXVsdEFwaUdhdGV3YXlQcm9wcywgeyAuLi5hcGlHYXRld2F5UHJvcHMsIGNsb3VkV2F0Y2hSb2xlOiBmYWxzZSB9KTtcbiAgICBfYXBpID0gbmV3IGFwaS5SZXN0QXBpKHNjb3BlLCAnUmVzdEFwaScsIF9hcGlHYXRld2F5UHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIHByb3BlcnR5IG92ZXJyaWRlcywgZGVwbG95IHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICBfYXBpID0gbmV3IGFwaS5SZXN0QXBpKHNjb3BlLCAnUmVzdEFwaScsIGRlZmF1bHRBcGlHYXRld2F5UHJvcHMpO1xuICB9XG5cbiAgbGV0IGN3Um9sZTtcblxuICAvLyBDb25maWd1cmUgQVBJIGFjY2VzcyBsb2dnaW5nXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmNsb3VkV2F0Y2hSb2xlICE9PSBmYWxzZSkge1xuICAgIGN3Um9sZSA9IGNvbmZpZ3VyZUNsb3Vkd2F0Y2hSb2xlRm9yQXBpKHNjb3BlLCBfYXBpKTtcbiAgfVxuXG4gIC8vIENvbmZpZ3VyZSBVc2FnZSBQbGFuXG4gIGNvbnN0IHVzYWdlUGxhblByb3BzOiBhcGkuVXNhZ2VQbGFuUHJvcHMgPSB7XG4gICAgYXBpU3RhZ2VzOiBbe1xuICAgICAgYXBpOiBfYXBpLFxuICAgICAgc3RhZ2U6IF9hcGkuZGVwbG95bWVudFN0YWdlXG4gICAgfV1cbiAgfTtcblxuICBjb25zdCBwbGFuID0gX2FwaS5hZGRVc2FnZVBsYW4oJ1VzYWdlUGxhbicsIHVzYWdlUGxhblByb3BzKTtcblxuICAvLyBJZiByZXF1aXJlQXBpS2V5IHBhcmFtIGlzIHNldCB0byB0cnVlLCBjcmVhdGUgYSBhcGkga2V5ICYgYXNzb2NpYXRlIHRvIFVzYWdlIFBsYW5cbiAgaWYgKGFwaUdhdGV3YXlQcm9wcz8uZGVmYXVsdE1ldGhvZE9wdGlvbnM/LmFwaUtleVJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgLy8gQ29uZmlndXJlIFVzYWdlIFBsYW4gd2l0aCBBUEkgS2V5XG4gICAgY29uc3Qga2V5ID0gX2FwaS5hZGRBcGlLZXkoJ0FwaUtleScpO1xuICAgIHBsYW4uYWRkQXBpS2V5KGtleSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIEFQSSBhbmQgQ1cgUm9sZVxuICByZXR1cm4gW19hcGksIGN3Um9sZV07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgZ2xvYmFsIGFwaS5SZXN0QXBpIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uLlxuICogQHBhcmFtIHNjb3BlIC0gdGhlIGNvbnN0cnVjdCB0byB3aGljaCB0aGUgUmVzdEFwaSBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gX2V4aXN0aW5nTGFtYmRhT2JqIC0gYW4gZXhpc3RpbmcgQVdTIExhbWJkYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBhcGlHYXRld2F5UHJvcHMgLSAob3B0aW9uYWwpIHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbExhbWJkYVJlc3RBcGkoc2NvcGU6IENvbnN0cnVjdCwgX2V4aXN0aW5nTGFtYmRhT2JqOiBsYW1iZGEuRnVuY3Rpb24sXG4gIGFwaUdhdGV3YXlQcm9wcz86IGFwaS5MYW1iZGFSZXN0QXBpUHJvcHMsIGxvZ0dyb3VwUHJvcHM/OiBsb2dzLkxvZ0dyb3VwUHJvcHMpOiBbYXBpLlJlc3RBcGksIGlhbS5Sb2xlIHwgdW5kZWZpbmVkLCBsb2dzLkxvZ0dyb3VwXSB7XG4gIC8vIENvbmZpZ3VyZSBsb2cgZ3JvdXAgZm9yIEFQSSBHYXRld2F5IEFjY2Vzc0xvZ2dpbmdcbiAgY29uc3QgbG9nR3JvdXAgPSBidWlsZExvZ0dyb3VwKHNjb3BlLCAnQXBpQWNjZXNzTG9nR3JvdXAnLCBsb2dHcm91cFByb3BzKTtcblxuICBjb25zdCBkZWZhdWx0UHJvcHMgPSBhcGlEZWZhdWx0cy5EZWZhdWx0R2xvYmFsTGFtYmRhUmVzdEFwaVByb3BzKF9leGlzdGluZ0xhbWJkYU9iaiwgbG9nR3JvdXApO1xuICBjb25zdCBbcmVzdEFwaSwgYXBpQ1dSb2xlXSA9IGNvbmZpZ3VyZUxhbWJkYVJlc3RBcGkoc2NvcGUsIGRlZmF1bHRQcm9wcywgYXBpR2F0ZXdheVByb3BzKTtcbiAgcmV0dXJuIFtyZXN0QXBpLCBhcGlDV1JvbGUsIGxvZ0dyb3VwIF07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgcmVnaW9uYWwgYXBpLlJlc3RBcGkgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBfZXhpc3RpbmdMYW1iZGFPYmogLSBhbiBleGlzdGluZyBBV1MgTGFtYmRhIGZ1bmN0aW9uLlxuICogQHBhcmFtIGFwaUdhdGV3YXlQcm9wcyAtIChvcHRpb25hbCkgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVnaW9uYWxMYW1iZGFSZXN0QXBpKHNjb3BlOiBDb25zdHJ1Y3QsIF9leGlzdGluZ0xhbWJkYU9iajogbGFtYmRhLkZ1bmN0aW9uLFxuICBhcGlHYXRld2F5UHJvcHM/OiBhcGkuTGFtYmRhUmVzdEFwaVByb3BzLCBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZCwgbG9ncy5Mb2dHcm91cF0ge1xuICAvLyBDb25maWd1cmUgbG9nIGdyb3VwIGZvciBBUEkgR2F0ZXdheSBBY2Nlc3NMb2dnaW5nXG4gIGNvbnN0IGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ0FwaUFjY2Vzc0xvZ0dyb3VwJywgbG9nR3JvdXBQcm9wcyk7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0gYXBpRGVmYXVsdHMuRGVmYXVsdFJlZ2lvbmFsTGFtYmRhUmVzdEFwaVByb3BzKF9leGlzdGluZ0xhbWJkYU9iaiwgbG9nR3JvdXApO1xuICBjb25zdCBbcmVzdEFwaSwgYXBpQ1dSb2xlXSA9IGNvbmZpZ3VyZUxhbWJkYVJlc3RBcGkoc2NvcGUsIGRlZmF1bHRQcm9wcywgYXBpR2F0ZXdheVByb3BzKTtcbiAgcmV0dXJuIFtyZXN0QXBpLCBhcGlDV1JvbGUsIGxvZ0dyb3VwIF07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgc3RhbmRhcmQgYXBpLlJlc3RBcGkuXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBhcGlHYXRld2F5UHJvcHMgLSAob3B0aW9uYWwpIHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbFJlc3RBcGkoc2NvcGU6IENvbnN0cnVjdCwgYXBpR2F0ZXdheVByb3BzPzogYXBpLlJlc3RBcGlQcm9wcyxcbiAgbG9nR3JvdXBQcm9wcz86IGxvZ3MuTG9nR3JvdXBQcm9wcyk6IFthcGkuUmVzdEFwaSwgaWFtLlJvbGUgfCB1bmRlZmluZWQsIGxvZ3MuTG9nR3JvdXBdIHtcbiAgLy8gQ29uZmlndXJlIGxvZyBncm91cCBmb3IgQVBJIEdhdGV3YXkgQWNjZXNzTG9nZ2luZ1xuICBjb25zdCBsb2dHcm91cCA9IGJ1aWxkTG9nR3JvdXAoc2NvcGUsICdBcGlBY2Nlc3NMb2dHcm91cCcsIGxvZ0dyb3VwUHJvcHMpO1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IGFwaURlZmF1bHRzLkRlZmF1bHRHbG9iYWxSZXN0QXBpUHJvcHMobG9nR3JvdXApO1xuICBjb25zdCBbcmVzdEFwaSwgYXBpQ1dSb2xlXSA9IGNvbmZpZ3VyZVJlc3RBcGkoc2NvcGUsIGRlZmF1bHRQcm9wcywgYXBpR2F0ZXdheVByb3BzKTtcbiAgcmV0dXJuIFtyZXN0QXBpLCBhcGlDV1JvbGUsIGxvZ0dyb3VwIF07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgUmVnaW9uYWwgYXBpLlJlc3RBcGkuXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBhcGlHYXRld2F5UHJvcHMgLSAob3B0aW9uYWwpIHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlZ2lvbmFsUmVzdEFwaShzY29wZTogQ29uc3RydWN0LCBhcGlHYXRld2F5UHJvcHM/OiBhcGkuUmVzdEFwaVByb3BzLFxuICBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZCwgbG9ncy5Mb2dHcm91cF0ge1xuICAvLyBDb25maWd1cmUgbG9nIGdyb3VwIGZvciBBUEkgR2F0ZXdheSBBY2Nlc3NMb2dnaW5nXG4gIGNvbnN0IGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ0FwaUFjY2Vzc0xvZ0dyb3VwJywgbG9nR3JvdXBQcm9wcyk7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0gYXBpRGVmYXVsdHMuRGVmYXVsdFJlZ2lvbmFsUmVzdEFwaVByb3BzKGxvZ0dyb3VwKTtcbiAgY29uc3QgW3Jlc3RBcGksIGFwaUNXUm9sZV0gPSBjb25maWd1cmVSZXN0QXBpKHNjb3BlLCBkZWZhdWx0UHJvcHMsIGFwaUdhdGV3YXlQcm9wcyk7XG4gIHJldHVybiBbcmVzdEFwaSwgYXBpQ1dSb2xlLCBsb2dHcm91cCBdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFByb3h5TWV0aG9kVG9BcGlSZXNvdXJjZUlucHV0UGFyYW1zIHtcbiAgICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgYWN0aW9uPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgYXBpUmVzb3VyY2U6IGFwaS5JUmVzb3VyY2UsXG4gICAgcmVhZG9ubHkgYXBpTWV0aG9kOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgYXBpR2F0ZXdheVJvbGU6IElSb2xlLFxuICAgIHJlYWRvbmx5IHJlcXVlc3RUZW1wbGF0ZTogc3RyaW5nLFxuICAgIHJlYWRvbmx5IGNvbnRlbnRUeXBlPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHJlcXVlc3RWYWxpZGF0b3I/OiBhcGkuSVJlcXVlc3RWYWxpZGF0b3IsXG4gICAgcmVhZG9ubHkgcmVxdWVzdE1vZGVsPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IGFwaS5JTW9kZWw7IH0sXG4gICAgcmVhZG9ubHkgYXdzSW50ZWdyYXRpb25Qcm9wcz86IGFwaS5Bd3NJbnRlZ3JhdGlvblByb3BzIHwgYW55LFxuICAgIHJlYWRvbmx5IG1ldGhvZE9wdGlvbnM/OiBhcGkuTWV0aG9kT3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHBhcmFtczogQWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlSW5wdXRQYXJhbXMpOiBhcGkuTWV0aG9kIHtcbiAgbGV0IGJhc2VQcm9wczogYXBpLkF3c0ludGVncmF0aW9uUHJvcHMgPSB7XG4gICAgc2VydmljZTogcGFyYW1zLnNlcnZpY2UsXG4gICAgaW50ZWdyYXRpb25IdHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBhcGkuUGFzc3Rocm91Z2hCZWhhdmlvci5ORVZFUixcbiAgICAgIGNyZWRlbnRpYWxzUm9sZTogcGFyYW1zLmFwaUdhdGV3YXlSb2xlLFxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGVcIjogcGFyYW1zLmNvbnRlbnRUeXBlID8gcGFyYW1zLmNvbnRlbnRUeXBlIDogXCInYXBwbGljYXRpb24vanNvbidcIlxuICAgICAgfSxcbiAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHBhcmFtcy5yZXF1ZXN0VGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgXCJ0ZXh0L2h0bWxcIjogXCJFcnJvclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBcIjUwMFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG5cbiAgbGV0IGV4dHJhUHJvcHM7XG5cbiAgaWYgKHBhcmFtcy5hY3Rpb24pIHtcbiAgICBleHRyYVByb3BzID0ge1xuICAgICAgYWN0aW9uOiBwYXJhbXMuYWN0aW9uXG4gICAgfTtcbiAgfSBlbHNlIGlmIChwYXJhbXMucGF0aCkge1xuICAgIGV4dHJhUHJvcHMgPSB7XG4gICAgICBwYXRoOiBwYXJhbXMucGF0aFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoJ0VpdGhlciBhY3Rpb24gb3IgcGF0aCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5IEFXUyBJbnRlZ3JhdGlvblxuICBiYXNlUHJvcHMgPSBPYmplY3QuYXNzaWduKGJhc2VQcm9wcywgZXh0cmFQcm9wcyk7XG4gIGxldCBhcGlHYXRld2F5SW50ZWdyYXRpb247XG4gIGlmIChwYXJhbXMuYXdzSW50ZWdyYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IG92ZXJyaWRlblByb3BzID0gb3ZlcnJpZGVQcm9wcyhiYXNlUHJvcHMsIHBhcmFtcy5hd3NJbnRlZ3JhdGlvblByb3BzKTtcbiAgICBhcGlHYXRld2F5SW50ZWdyYXRpb24gPSBuZXcgYXBpLkF3c0ludGVncmF0aW9uKG92ZXJyaWRlblByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICBhcGlHYXRld2F5SW50ZWdyYXRpb24gPSBuZXcgYXBpLkF3c0ludGVncmF0aW9uKGJhc2VQcm9wcyk7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0TWV0aG9kT3B0aW9ucyA9IHtcbiAgICBtZXRob2RSZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfVxuICAgIF0sXG4gICAgcmVxdWVzdFZhbGlkYXRvcjogcGFyYW1zLnJlcXVlc3RWYWxpZGF0b3IsXG4gICAgcmVxdWVzdE1vZGVsczogcGFyYW1zLnJlcXVlc3RNb2RlbFxuICB9O1xuXG4gIGxldCBhcGlNZXRob2Q7XG4gIC8vIFNldHVwIHRoZSBBUEkgR2F0ZXdheSBtZXRob2RcbiAgaWYgKHBhcmFtcy5tZXRob2RPcHRpb25zKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVuUHJvcHMgPSAgb3ZlcnJpZGVQcm9wcyhkZWZhdWx0TWV0aG9kT3B0aW9ucywgcGFyYW1zLm1ldGhvZE9wdGlvbnMpO1xuICAgIGFwaU1ldGhvZCA9IHBhcmFtcy5hcGlSZXNvdXJjZS5hZGRNZXRob2QocGFyYW1zLmFwaU1ldGhvZCwgYXBpR2F0ZXdheUludGVncmF0aW9uLCBvdmVycmlkZW5Qcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgYXBpTWV0aG9kID0gcGFyYW1zLmFwaVJlc291cmNlLmFkZE1ldGhvZChwYXJhbXMuYXBpTWV0aG9kLCBhcGlHYXRld2F5SW50ZWdyYXRpb24sIGRlZmF1bHRNZXRob2RPcHRpb25zKTtcbiAgfVxuICByZXR1cm4gYXBpTWV0aG9kO1xufSJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpZ2F0ZXdheS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcGlnYXRld2F5LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUtILG1DQUFtQztBQUNuQyxrREFBa0Q7QUFDbEQsMkNBQTJDO0FBQzNDLHFEQUFxRDtBQUNyRCwrRUFBOEQ7QUFDOUQsbUNBQWdFO0FBS2hFOzs7O0dBSUc7QUFDSCxTQUFTLDZCQUE2QixDQUFDLEtBQWdCLEVBQUUsSUFBaUI7O0lBQ3hFLHVEQUF1RDtJQUN2RCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLEVBQUU7UUFDL0UsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDO1FBQy9ELGNBQWMsRUFBRTtZQUNkLGlDQUFpQyxFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDeEQsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO3dCQUNuQyxPQUFPLEVBQUU7NEJBQ1AscUJBQXFCOzRCQUNyQixzQkFBc0I7NEJBQ3RCLHdCQUF3Qjs0QkFDeEIseUJBQXlCOzRCQUN6QixtQkFBbUI7NEJBQ25CLG1CQUFtQjs0QkFDbkIsc0JBQXNCO3lCQUN2Qjt3QkFDRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUM7cUJBQ3ZGLENBQUMsQ0FBQzthQUNKLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILG9GQUFvRjtJQUNwRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQW1CLENBQUM7SUFDakUsTUFBTSxVQUFVLEdB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Z0IsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEYsU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbEcsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQTVFRCxrRUE0RUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFwaSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBhcGlEZWZhdWx0cyBmcm9tICcuL2FwaWdhdGV3YXktZGVmYXVsdHMnO1xuaW1wb3J0IHsgYnVpbGRMb2dHcm91cCB9IGZyb20gJy4vY2xvdWR3YXRjaC1sb2ctZ3JvdXAtaGVscGVyJztcbmltcG9ydCB7IGFkZENmblN1cHByZXNzUnVsZXMsIGNvbnNvbGlkYXRlUHJvcHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZXMgYWNjZXNzIGxvZ2dpbmcgZm9yIEFQSSBHYXRld2F5IHJlc291cmNlcy5cbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIGFjY2VzcyBsb2dnaW5nIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gX2FwaSAtIGFuIGV4aXN0aW5nIGFwaS5SZXN0QXBpIG9yIGFwaS5MYW1iZGFSZXN0QXBpLlxuICovXG5mdW5jdGlvbiBjb25maWd1cmVDbG91ZHdhdGNoUm9sZUZvckFwaShzY29wZTogQ29uc3RydWN0LCBfYXBpOiBhcGkuUmVzdEFwaSk6IGlhbS5Sb2xlIHtcbiAgLy8gU2V0dXAgdGhlIElBTSBSb2xlIGZvciBBUEkgR2F0ZXdheSBDbG91ZFdhdGNoIGFjY2Vzc1xuICBjb25zdCByZXN0QXBpQ2xvdWR3YXRjaFJvbGUgPSBuZXcgaWFtLlJvbGUoc2NvcGUsICdMYW1iZGFSZXN0QXBpQ2xvdWRXYXRjaFJvbGUnLCB7XG4gICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICBMYW1iZGFSZXN0QXBpQ2xvdWRXYXRjaFJvbGVQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgICAnbG9nczpGaWx0ZXJMb2dFdmVudHMnXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OmxvZ3M6JHtjZGsuQXdzLlJFR0lPTn06JHtjZGsuQXdzLkFDQ09VTlRfSUR9OipgXVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfVxuICB9KTtcbiAgLy8gQ3JlYXRlIGFuZCBjb25maWd1cmUgQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50IHdpdGggQ2xvdWRXYXRjaCBSb2xlIGZvciBBcGlHYXRld2F5XG4gIGNvbnN0IENmbkFwaSA9IF9hcGkubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgYXBpLkNmblJlc3RBcGk7XG4gIGNvbnN0IGNmbkFjY291bnQ6IGFwaS5DZm5BY2NvdW50ID0gbmV3IGFwaS5DZm5BY2NvdW50KHNjb3BlLCAnTGFtYmRhUmVzdEFwaUFjY291bnQnLCB7XG4gICAgY2xvdWRXYXRjaFJvbGVBcm46IHJlc3RBcGlDbG91ZHdhdGNoUm9sZS5yb2xlQXJuXG4gIH0pO1xuICBjZm5BY2NvdW50LmFkZERlcGVuZHNPbihDZm5BcGkpO1xuXG4gIC8vIFN1cHByZXNzIENmbiBOYWcgd2FybmluZyBmb3IgQVBJR1xuICBjb25zdCBkZXBsb3ltZW50OiBhcGkuQ2ZuRGVwbG95bWVudCA9IF9hcGkubGF0ZXN0RGVwbG95bWVudD8ubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgYXBpLkNmbkRlcGxveW1lbnQ7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZGVwbG95bWVudCwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzQ1JyxcbiAgICAgIHJlYXNvbjogYEFwaUdhdGV3YXkgaGFzIEFjY2Vzc0xvZ2dpbmcgZW5hYmxlZCBpbiBBV1M6OkFwaUdhdGV3YXk6OlN0YWdlIHJlc291cmNlLCBidXQgY2ZuX25hZyBjaGVja2VzIGZvciBpdCBpbiBBV1M6OkFwaUdhdGV3YXk6OkRlcGxveW1lbnQgcmVzb3VyY2VgXG4gICAgfVxuICBdKTtcblxuICAvLyBSZXR1cm4gdGhlIENXIFJvbGVcbiAgcmV0dXJuIHJlc3RBcGlDbG91ZHdhdGNoUm9sZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBjb25maWd1cmVzIGFuIGFwaS5MYW1iZGFSZXN0QXBpLlxuICogQHBhcmFtIHNjb3BlIC0gdGhlIGNvbnN0cnVjdCB0byB3aGljaCB0aGUgTGFtYmRhUmVzdEFwaSBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gZGVmYXVsdEFwaUdhdGV3YXlQcm9wcyAtIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGFSZXN0QXBpLlxuICogQHBhcmFtIGFwaUdhdGV3YXlQcm9wcyAtIChvcHRpb25hbCkgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBjb25maWd1cmVMYW1iZGFSZXN0QXBpKHNjb3BlOiBDb25zdHJ1Y3QsIGRlZmF1bHRBcGlHYXRld2F5UHJvcHM6IGFwaS5MYW1iZGFSZXN0QXBpUHJvcHMsXG4gIGFwaUdhdGV3YXlQcm9wcz86IGFwaS5MYW1iZGFSZXN0QXBpUHJvcHMpOiBbYXBpLlJlc3RBcGksIGlhbS5Sb2xlIHwgdW5kZWZpbmVkXSB7XG5cbiAgLy8gQVBJIEdhdGV3YXkgZG9lc24ndCBhbGxvdyBib3RoIGVuZHBvaW50VHlwZXMgYW5kIGVuZHBvaW50Q29uZmlndXJhdGlvbiwgY2hlY2sgd2hldGhlciBlbmRQb2ludFR5cGVzIGV4aXN0c1xuICBpZiAoYXBpR2F0ZXdheVByb3BzPy5lbmRwb2ludFR5cGVzKSB7XG4gICAgdGhyb3cgRXJyb3IoJ1NvbHV0aW9ucyBDb25zdHJ1Y3RzIGludGVybmFsbHkgdXNlcyBlbmRwb2ludENvbmZpZ3VyYXRpb24sIHVzZSBlbmRwb2ludENvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBlbmRwb2ludFR5cGVzJyk7XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIEFQSSBvYmplY3RcbiAgbGV0IF9hcGk6IGFwaS5SZXN0QXBpO1xuICBpZiAoYXBpR2F0ZXdheVByb3BzKSB7XG4gICAgLy8gSWYgcHJvcGVydHkgb3ZlcnJpZGVzIGhhdmUgYmVlbiBwcm92aWRlZCwgaW5jb3Jwb3JhdGUgdGhlbSBhbmQgZGVwbG95XG4gICAgY29uc3QgX2FwaUdhdGV3YXlQcm9wcyA9IGNvbnNvbGlkYXRlUHJvcHMoZGVmYXVsdEFwaUdhdGV3YXlQcm9wcywgYXBpR2F0ZXdheVByb3BzLCB7IGNsb3VkV2F0Y2hSb2xlOiBmYWxzZSB9KTtcbiAgICBfYXBpID0gbmV3IGFwaS5MYW1iZGFSZXN0QXBpKHNjb3BlLCAnTGFtYmRhUmVzdEFwaScsIF9hcGlHYXRld2F5UHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIHByb3BlcnR5IG92ZXJyaWRlcywgZGVwbG95IHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICBfYXBpID0gbmV3IGFwaS5MYW1iZGFSZXN0QXBpKHNjb3BlLCAnTGFtYmRhUmVzdEFwaScsIGRlZmF1bHRBcGlHYXRld2F5UHJvcHMpO1xuICB9XG4gIC8vIENvbmZpZ3VyZSBBUEkgYWNjZXNzIGxvZ2dpbmdcbiAgbGV0IGN3Um9sZTtcblxuICBpZiAoYXBpR2F0ZXdheVByb3BzPy5jbG91ZFdhdGNoUm9sZSAhPT0gZmFsc2UpIHtcbiAgICBjd1JvbGUgPSBjb25maWd1cmVDbG91ZHdhdGNoUm9sZUZvckFwaShzY29wZSwgX2FwaSk7XG4gIH1cblxuICAvLyBDb25maWd1cmUgVXNhZ2UgUGxhblxuICBjb25zdCB1c2FnZVBsYW5Qcm9wczogYXBpLlVzYWdlUGxhblByb3BzID0ge1xuICAgIGFwaVN0YWdlczogW3tcbiAgICAgIGFwaTogX2FwaSxcbiAgICAgIHN0YWdlOiBfYXBpLmRlcGxveW1lbnRTdGFnZVxuICAgIH1dXG4gIH07XG5cbiAgY29uc3QgcGxhbiA9IF9hcGkuYWRkVXNhZ2VQbGFuKCdVc2FnZVBsYW4nLCB1c2FnZVBsYW5Qcm9wcyk7XG5cbiAgLy8gSWYgcmVxdWlyZUFwaUtleSBwYXJhbSBpcyBzZXQgdG8gdHJ1ZSwgY3JlYXRlIGEgYXBpIGtleSAmIGFzc29jaWF0ZSB0byBVc2FnZSBQbGFuXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmRlZmF1bHRNZXRob2RPcHRpb25zPy5hcGlLZXlSZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgIC8vIENvbmZpZ3VyZSBVc2FnZSBQbGFuIHdpdGggQVBJIEtleVxuICAgIGNvbnN0IGtleSA9IF9hcGkuYWRkQXBpS2V5KCdBcGlLZXknKTtcbiAgICBwbGFuLmFkZEFwaUtleShrZXkpO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBBUEkgYW5kIENXIFJvbGVcbiAgcmV0dXJuIFtfYXBpLCBjd1JvbGVdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYW4gYXBpLlJlc3RBcGkuXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBkZWZhdWx0QXBpR2F0ZXdheVByb3BzIC0gdGhlIGRlZmF1bHQgcHJvcGVydGllcyBmb3IgdGhlIFJlc3RBcGkuXG4gKiBAcGFyYW0gYXBpR2F0ZXdheVByb3BzIC0gKG9wdGlvbmFsKSB1c2VyLXNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZVJlc3RBcGkoc2NvcGU6IENvbnN0cnVjdCwgZGVmYXVsdEFwaUdhdGV3YXlQcm9wczogYXBpLlJlc3RBcGlQcm9wcyxcbiAgYXBpR2F0ZXdheVByb3BzPzogYXBpLlJlc3RBcGlQcm9wcyk6IFthcGkuUmVzdEFwaSwgaWFtLlJvbGUgfCB1bmRlZmluZWRdIHtcblxuICAvLyBBUEkgR2F0ZXdheSBkb2Vzbid0IGFsbG93IGJvdGggZW5kcG9pbnRUeXBlcyBhbmQgZW5kcG9pbnRDb25maWd1cmF0aW9uLCBjaGVjayB3aGV0aGVyIGVuZFBvaW50VHlwZXMgZXhpc3RzXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmVuZHBvaW50VHlwZXMpIHtcbiAgICB0aHJvdyBFcnJvcignU29sdXRpb25zIENvbnN0cnVjdHMgaW50ZXJuYWxseSB1c2VzIGVuZHBvaW50Q29uZmlndXJhdGlvbiwgdXNlIGVuZHBvaW50Q29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGVuZHBvaW50VHlwZXMnKTtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgQVBJXG4gIGxldCBfYXBpOiBhcGkuUmVzdEFwaTtcblxuICBjb25zdCBfYXBpR2F0ZXdheVByb3BzID0gY29uc29saWRhdGVQcm9wcyhkZWZhdWx0QXBpR2F0ZXdheVByb3BzLCBhcGlHYXRld2F5UHJvcHMsIHsgY2xvdWRXYXRjaFJvbGU6IGZhbHNlIH0pO1xuICBfYXBpID0gbmV3IGFwaS5SZXN0QXBpKHNjb3BlLCAnUmVzdEFwaScsIF9hcGlHYXRld2F5UHJvcHMpO1xuXG4gIGxldCBjd1JvbGU7XG5cbiAgLy8gQ29uZmlndXJlIEFQSSBhY2Nlc3MgbG9nZ2luZ1xuICBpZiAoYXBpR2F0ZXdheVByb3BzPy5jbG91ZFdhdGNoUm9sZSAhPT0gZmFsc2UpIHtcbiAgICBjd1JvbGUgPSBjb25maWd1cmVDbG91ZHdhdGNoUm9sZUZvckFwaShzY29wZSwgX2FwaSk7XG4gIH1cblxuICAvLyBDb25maWd1cmUgVXNhZ2UgUGxhblxuICBjb25zdCB1c2FnZVBsYW5Qcm9wczogYXBpLlVzYWdlUGxhblByb3BzID0ge1xuICAgIGFwaVN0YWdlczogW3tcbiAgICAgIGFwaTogX2FwaSxcbiAgICAgIHN0YWdlOiBfYXBpLmRlcGxveW1lbnRTdGFnZVxuICAgIH1dXG4gIH07XG5cbiAgY29uc3QgcGxhbiA9IF9hcGkuYWRkVXNhZ2VQbGFuKCdVc2FnZVBsYW4nLCB1c2FnZVBsYW5Qcm9wcyk7XG5cbiAgLy8gSWYgcmVxdWlyZUFwaUtleSBwYXJhbSBpcyBzZXQgdG8gdHJ1ZSwgY3JlYXRlIGEgYXBpIGtleSAmIGFzc29jaWF0ZSB0byBVc2FnZSBQbGFuXG4gIGlmIChhcGlHYXRld2F5UHJvcHM/LmRlZmF1bHRNZXRob2RPcHRpb25zPy5hcGlLZXlSZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgIC8vIENvbmZpZ3VyZSBVc2FnZSBQbGFuIHdpdGggQVBJIEtleVxuICAgIGNvbnN0IGtleSA9IF9hcGkuYWRkQXBpS2V5KCdBcGlLZXknKTtcbiAgICBwbGFuLmFkZEFwaUtleShrZXkpO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBBUEkgYW5kIENXIFJvbGVcbiAgcmV0dXJuIFtfYXBpLCBjd1JvbGVdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIGdsb2JhbCBhcGkuUmVzdEFwaSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggYW4gQVdTIExhbWJkYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIFJlc3RBcGkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIF9leGlzdGluZ0xhbWJkYU9iaiAtIGFuIGV4aXN0aW5nIEFXUyBMYW1iZGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gYXBpR2F0ZXdheVByb3BzIC0gKG9wdGlvbmFsKSB1c2VyLXNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHbG9iYWxMYW1iZGFSZXN0QXBpKHNjb3BlOiBDb25zdHJ1Y3QsIF9leGlzdGluZ0xhbWJkYU9iajogbGFtYmRhLkZ1bmN0aW9uLFxuICBhcGlHYXRld2F5UHJvcHM/OiBhcGkuTGFtYmRhUmVzdEFwaVByb3BzLCBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZCwgbG9ncy5Mb2dHcm91cF0ge1xuICAvLyBDb25maWd1cmUgbG9nIGdyb3VwIGZvciBBUEkgR2F0ZXdheSBBY2Nlc3NMb2dnaW5nXG4gIGNvbnN0IGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ0FwaUFjY2Vzc0xvZ0dyb3VwJywgbG9nR3JvdXBQcm9wcyk7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0gYXBpRGVmYXVsdHMuRGVmYXVsdEdsb2JhbExhbWJkYVJlc3RBcGlQcm9wcyhfZXhpc3RpbmdMYW1iZGFPYmosIGxvZ0dyb3VwKTtcbiAgY29uc3QgW3Jlc3RBcGksIGFwaUNXUm9sZV0gPSBjb25maWd1cmVMYW1iZGFSZXN0QXBpKHNjb3BlLCBkZWZhdWx0UHJvcHMsIGFwaUdhdGV3YXlQcm9wcyk7XG4gIHJldHVybiBbcmVzdEFwaSwgYXBpQ1dSb2xlLCBsb2dHcm91cF07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgcmVnaW9uYWwgYXBpLlJlc3RBcGkgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBSZXN0QXBpIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBfZXhpc3RpbmdMYW1iZGFPYmogLSBhbiBleGlzdGluZyBBV1MgTGFtYmRhIGZ1bmN0aW9uLlxuICogQHBhcmFtIGFwaUdhdGV3YXlQcm9wcyAtIChvcHRpb25hbCkgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVnaW9uYWxMYW1iZGFSZXN0QXBpKHNjb3BlOiBDb25zdHJ1Y3QsIF9leGlzdGluZ0xhbWJkYU9iajogbGFtYmRhLkZ1bmN0aW9uLFxuICBhcGlHYXRld2F5UHJvcHM/OiBhcGkuTGFtYmRhUmVzdEFwaVByb3BzLCBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZCwgbG9ncy5Mb2dHcm91cF0ge1xuICAvLyBDb25maWd1cmUgbG9nIGdyb3VwIGZvciBBUEkgR2F0ZXdheSBBY2Nlc3NMb2dnaW5nXG4gIGNvbnN0IGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ0FwaUFjY2Vzc0xvZ0dyb3VwJywgbG9nR3JvdXBQcm9wcyk7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0gYXBpRGVmYXVsdHMuRGVmYXVsdFJlZ2lvbmFsTGFtYmRhUmVzdEFwaVByb3BzKF9leGlzdGluZ0xhbWJkYU9iaiwgbG9nR3JvdXApO1xuICBjb25zdCBbcmVzdEFwaSwgYXBpQ1dSb2xlXSA9IGNvbmZpZ3VyZUxhbWJkYVJlc3RBcGkoc2NvcGUsIGRlZmF1bHRQcm9wcywgYXBpR2F0ZXdheVByb3BzKTtcbiAgcmV0dXJuIFtyZXN0QXBpLCBhcGlDV1JvbGUsIGxvZ0dyb3VwXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYSBzdGFuZGFyZCBhcGkuUmVzdEFwaS5cbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIFJlc3RBcGkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIGFwaUdhdGV3YXlQcm9wcyAtIChvcHRpb25hbCkgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gR2xvYmFsUmVzdEFwaShzY29wZTogQ29uc3RydWN0LCBhcGlHYXRld2F5UHJvcHM/OiBhcGkuUmVzdEFwaVByb3BzLFxuICBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzKTogW2FwaS5SZXN0QXBpLCBpYW0uUm9sZSB8IHVuZGVmaW5lZCwgbG9ncy5Mb2dHcm91cF0ge1xuICAvLyBDb25maWd1cmUgbG9nIGdyb3VwIGZvciBBUEkgR2F0ZXdheSBBY2Nlc3NMb2dnaW5nXG4gIGNvbnN0IGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ0FwaUFjY2Vzc0xvZ0dyb3VwJywgbG9nR3JvdXBQcm9wcyk7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0gYXBpRGVmYXVsdHMuRGVmYXVsdEdsb2JhbFJlc3RBcGlQcm9wcyhsb2dHcm91cCk7XG4gIGNvbnN0IFtyZXN0QXBpLCBhcGlDV1JvbGVdID0gY29uZmlndXJlUmVzdEFwaShzY29wZSwgZGVmYXVsdFByb3BzLCBhcGlHYXRld2F5UHJvcHMpO1xuICByZXR1cm4gW3Jlc3RBcGksIGFwaUNXUm9sZSwgbG9nR3JvdXBdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIFJlZ2lvbmFsIGFwaS5SZXN0QXBpLlxuICogQHBhcmFtIHNjb3BlIC0gdGhlIGNvbnN0cnVjdCB0byB3aGljaCB0aGUgUmVzdEFwaSBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gYXBpR2F0ZXdheVByb3BzIC0gKG9wdGlvbmFsKSB1c2VyLXNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWdpb25hbFJlc3RBcGkoc2NvcGU6IENvbnN0cnVjdCwgYXBpR2F0ZXdheVByb3BzPzogYXBpLlJlc3RBcGlQcm9wcyxcbiAgbG9nR3JvdXBQcm9wcz86IGxvZ3MuTG9nR3JvdXBQcm9wcyk6IFthcGkuUmVzdEFwaSwgaWFtLlJvbGUgfCB1bmRlZmluZWQsIGxvZ3MuTG9nR3JvdXBdIHtcbiAgLy8gQ29uZmlndXJlIGxvZyBncm91cCBmb3IgQVBJIEdhdGV3YXkgQWNjZXNzTG9nZ2luZ1xuICBjb25zdCBsb2dHcm91cCA9IGJ1aWxkTG9nR3JvdXAoc2NvcGUsICdBcGlBY2Nlc3NMb2dHcm91cCcsIGxvZ0dyb3VwUHJvcHMpO1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IGFwaURlZmF1bHRzLkRlZmF1bHRSZWdpb25hbFJlc3RBcGlQcm9wcyhsb2dHcm91cCk7XG4gIGNvbnN0IFtyZXN0QXBpLCBhcGlDV1JvbGVdID0gY29uZmlndXJlUmVzdEFwaShzY29wZSwgZGVmYXVsdFByb3BzLCBhcGlHYXRld2F5UHJvcHMpO1xuICByZXR1cm4gW3Jlc3RBcGksIGFwaUNXUm9sZSwgbG9nR3JvdXBdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFByb3h5TWV0aG9kVG9BcGlSZXNvdXJjZUlucHV0UGFyYW1zIHtcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nLFxuICByZWFkb25seSBhY3Rpb24/OiBzdHJpbmcsXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmcsXG4gIHJlYWRvbmx5IGFwaVJlc291cmNlOiBhcGkuSVJlc291cmNlLFxuICByZWFkb25seSBhcGlNZXRob2Q6IHN0cmluZyxcbiAgcmVhZG9ubHkgYXBpR2F0ZXdheVJvbGU6IElSb2xlLFxuICByZWFkb25seSByZXF1ZXN0VGVtcGxhdGU6IHN0cmluZyxcbiAgcmVhZG9ubHkgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gIHJlYWRvbmx5IHJlcXVlc3RWYWxpZGF0b3I/OiBhcGkuSVJlcXVlc3RWYWxpZGF0b3IsXG4gIHJlYWRvbmx5IHJlcXVlc3RNb2RlbD86IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBhcGkuSU1vZGVsOyB9LFxuICByZWFkb25seSBhd3NJbnRlZ3JhdGlvblByb3BzPzogYXBpLkF3c0ludGVncmF0aW9uUHJvcHMgfCBhbnksXG4gIHJlYWRvbmx5IG1ldGhvZE9wdGlvbnM/OiBhcGkuTWV0aG9kT3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHBhcmFtczogQWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlSW5wdXRQYXJhbXMpOiBhcGkuTWV0aG9kIHtcbiAgbGV0IGJhc2VQcm9wczogYXBpLkF3c0ludGVncmF0aW9uUHJvcHMgPSB7XG4gICAgc2VydmljZTogcGFyYW1zLnNlcnZpY2UsXG4gICAgaW50ZWdyYXRpb25IdHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBhcGkuUGFzc3Rocm91Z2hCZWhhdmlvci5ORVZFUixcbiAgICAgIGNyZWRlbnRpYWxzUm9sZTogcGFyYW1zLmFwaUdhdGV3YXlSb2xlLFxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGVcIjogcGFyYW1zLmNvbnRlbnRUeXBlID8gcGFyYW1zLmNvbnRlbnRUeXBlIDogXCInYXBwbGljYXRpb24vanNvbidcIlxuICAgICAgfSxcbiAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHBhcmFtcy5yZXF1ZXN0VGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgXCJ0ZXh0L2h0bWxcIjogXCJFcnJvclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBcIjUwMFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG5cbiAgbGV0IGV4dHJhUHJvcHM7XG5cbiAgaWYgKHBhcmFtcy5hY3Rpb24pIHtcbiAgICBleHRyYVByb3BzID0ge1xuICAgICAgYWN0aW9uOiBwYXJhbXMuYWN0aW9uXG4gICAgfTtcbiAgfSBlbHNlIGlmIChwYXJhbXMucGF0aCkge1xuICAgIGV4dHJhUHJvcHMgPSB7XG4gICAgICBwYXRoOiBwYXJhbXMucGF0aFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoJ0VpdGhlciBhY3Rpb24gb3IgcGF0aCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5IEFXUyBJbnRlZ3JhdGlvblxuICBiYXNlUHJvcHMgPSBPYmplY3QuYXNzaWduKGJhc2VQcm9wcywgZXh0cmFQcm9wcyk7XG5cbiAgbGV0IGFwaUdhdGV3YXlJbnRlZ3JhdGlvbjtcbiAgY29uc3QgbmV3UHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKGJhc2VQcm9wcywgcGFyYW1zLmF3c0ludGVncmF0aW9uUHJvcHMpO1xuXG4gIGFwaUdhdGV3YXlJbnRlZ3JhdGlvbiA9IG5ldyBhcGkuQXdzSW50ZWdyYXRpb24obmV3UHJvcHMpO1xuXG4gIGNvbnN0IGRlZmF1bHRNZXRob2RPcHRpb25zID0ge1xuICAgIG1ldGhvZFJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgXSxcbiAgICByZXF1ZXN0VmFsaWRhdG9yOiBwYXJhbXMucmVxdWVzdFZhbGlkYXRvcixcbiAgICByZXF1ZXN0TW9kZWxzOiBwYXJhbXMucmVxdWVzdE1vZGVsXG4gIH07XG5cbiAgbGV0IGFwaU1ldGhvZDtcblxuICAvLyBTZXR1cCB0aGUgQVBJIEdhdGV3YXkgbWV0aG9kXG4gIGNvbnN0IG92ZXJyaWRlblByb3BzID0gY29uc29saWRhdGVQcm9wcyhkZWZhdWx0TWV0aG9kT3B0aW9ucywgcGFyYW1zLm1ldGhvZE9wdGlvbnMpO1xuICBhcGlNZXRob2QgPSBwYXJhbXMuYXBpUmVzb3VyY2UuYWRkTWV0aG9kKHBhcmFtcy5hcGlNZXRob2QsIGFwaUdhdGV3YXlJbnRlZ3JhdGlvbiwgb3ZlcnJpZGVuUHJvcHMpO1xuXG4gIHJldHVybiBhcGlNZXRob2Q7XG59Il19