@aws-solutions-constructs/aws-cloudfront-apigateway-lambda 2.47.0 → 2.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,177 @@
1
1
  {
2
2
  "Description": "Integration Test for aws-cloudfront-apigateway-lambda custom Cloudfront Logging Bucket",
3
3
  "Resources": {
4
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunctionServiceRole00AAA44C": {
5
+ "Type": "AWS::IAM::Role",
6
+ "Properties": {
7
+ "AssumeRolePolicyDocument": {
8
+ "Statement": [
9
+ {
10
+ "Action": "sts:AssumeRole",
11
+ "Effect": "Allow",
12
+ "Principal": {
13
+ "Service": "lambda.amazonaws.com"
14
+ }
15
+ }
16
+ ],
17
+ "Version": "2012-10-17"
18
+ },
19
+ "ManagedPolicyArns": [
20
+ {
21
+ "Fn::Join": [
22
+ "",
23
+ [
24
+ "arn:",
25
+ {
26
+ "Ref": "AWS::Partition"
27
+ },
28
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
29
+ ]
30
+ ]
31
+ }
32
+ ]
33
+ }
34
+ },
35
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunction86ECA8C3": {
36
+ "Type": "AWS::Lambda::Function",
37
+ "Properties": {
38
+ "Code": {
39
+ "S3Bucket": {
40
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
41
+ },
42
+ "S3Key": "42a35bbf0dec9ef0ac5b0dde87e71a1b8929e8d2d178dd09ccfb2c928ec0198c.zip"
43
+ },
44
+ "Handler": ".handler",
45
+ "Role": {
46
+ "Fn::GetAtt": [
47
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunctionServiceRole00AAA44C",
48
+ "Arn"
49
+ ]
50
+ },
51
+ "Runtime": "nodejs16.x"
52
+ },
53
+ "DependsOn": [
54
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunctionServiceRole00AAA44C"
55
+ ],
56
+ "Metadata": {
57
+ "cfn_nag": {
58
+ "rules_to_suppress": [
59
+ {
60
+ "id": "W58",
61
+ "reason": "Test Resource"
62
+ },
63
+ {
64
+ "id": "W89",
65
+ "reason": "Test Resource"
66
+ },
67
+ {
68
+ "id": "W92",
69
+ "reason": "Test Resource"
70
+ }
71
+ ]
72
+ }
73
+ }
74
+ },
75
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunctioncftaplamcustomCloudfrontLoggingBucketcftaplamcustomCloudfrontLoggingBucketauthorizer02C97B0FPermissionsBF8A1A3B": {
76
+ "Type": "AWS::Lambda::Permission",
77
+ "Properties": {
78
+ "Action": "lambda:InvokeFunction",
79
+ "FunctionName": {
80
+ "Fn::GetAtt": [
81
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunction86ECA8C3",
82
+ "Arn"
83
+ ]
84
+ },
85
+ "Principal": "apigateway.amazonaws.com",
86
+ "SourceArn": {
87
+ "Fn::Join": [
88
+ "",
89
+ [
90
+ "arn:",
91
+ {
92
+ "Ref": "AWS::Partition"
93
+ },
94
+ ":execute-api:",
95
+ {
96
+ "Ref": "AWS::Region"
97
+ },
98
+ ":",
99
+ {
100
+ "Ref": "AWS::AccountId"
101
+ },
102
+ ":",
103
+ {
104
+ "Ref": "cfapigwlambdaLambdaRestApi775C255B"
105
+ },
106
+ "/authorizers/",
107
+ {
108
+ "Ref": "cftaplamcustomCloudfrontLoggingBucketauthorizer4D180075"
109
+ }
110
+ ]
111
+ ]
112
+ }
113
+ }
114
+ },
115
+ "cftaplamcustomCloudfrontLoggingBucketauthorizer4D180075": {
116
+ "Type": "AWS::ApiGateway::Authorizer",
117
+ "Properties": {
118
+ "AuthorizerUri": {
119
+ "Fn::Join": [
120
+ "",
121
+ [
122
+ "arn:",
123
+ {
124
+ "Fn::Select": [
125
+ 1,
126
+ {
127
+ "Fn::Split": [
128
+ ":",
129
+ {
130
+ "Fn::GetAtt": [
131
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunction86ECA8C3",
132
+ "Arn"
133
+ ]
134
+ }
135
+ ]
136
+ }
137
+ ]
138
+ },
139
+ ":apigateway:",
140
+ {
141
+ "Fn::Select": [
142
+ 3,
143
+ {
144
+ "Fn::Split": [
145
+ ":",
146
+ {
147
+ "Fn::GetAtt": [
148
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunction86ECA8C3",
149
+ "Arn"
150
+ ]
151
+ }
152
+ ]
153
+ }
154
+ ]
155
+ },
156
+ ":lambda:path/2015-03-31/functions/",
157
+ {
158
+ "Fn::GetAtt": [
159
+ "cftaplamcustomCloudfrontLoggingBucketauthorizerAuthFunction86ECA8C3",
160
+ "Arn"
161
+ ]
162
+ },
163
+ "/invocations"
164
+ ]
165
+ ]
166
+ },
167
+ "IdentitySource": "method.request.header.Authorization",
168
+ "Name": "cftaplamcustomCloudfrontLoggingBucketcftaplamcustomCloudfrontLoggingBucketauthorizer02C97B0F",
169
+ "RestApiId": {
170
+ "Ref": "cfapigwlambdaLambdaRestApi775C255B"
171
+ },
172
+ "Type": "REQUEST"
173
+ }
174
+ },
4
175
  "cfapigwlambdaLambdaFunctionServiceRole9B40D826": {
5
176
  "Type": "AWS::IAM::Role",
6
177
  "Properties": {
@@ -169,7 +340,7 @@
169
340
  "Name": "LambdaRestApi"
170
341
  }
171
342
  },
172
- "cfapigwlambdaLambdaRestApiDeployment33C24C7D5b6eb6dc887b9e8b9bde9a765f4aacbb": {
343
+ "cfapigwlambdaLambdaRestApiDeployment33C24C7D41e6d6ff15b0c6d292b31cce930b3216": {
173
344
  "Type": "AWS::ApiGateway::Deployment",
174
345
  "Properties": {
175
346
  "Description": "Automatically created by the RestApi construct",
@@ -206,7 +377,7 @@
206
377
  "Format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
207
378
  },
208
379
  "DeploymentId": {
209
- "Ref": "cfapigwlambdaLambdaRestApiDeployment33C24C7D5b6eb6dc887b9e8b9bde9a765f4aacbb"
380
+ "Ref": "cfapigwlambdaLambdaRestApiDeployment33C24C7D41e6d6ff15b0c6d292b31cce930b3216"
210
381
  },
211
382
  "MethodSettings": [
212
383
  {
@@ -319,7 +490,10 @@
319
490
  "cfapigwlambdaLambdaRestApiproxyANY68181290": {
320
491
  "Type": "AWS::ApiGateway::Method",
321
492
  "Properties": {
322
- "AuthorizationType": "NONE",
493
+ "AuthorizationType": "CUSTOM",
494
+ "AuthorizerId": {
495
+ "Ref": "cftaplamcustomCloudfrontLoggingBucketauthorizer4D180075"
496
+ },
323
497
  "HttpMethod": "ANY",
324
498
  "Integration": {
325
499
  "IntegrationHttpMethod": "POST",
@@ -354,16 +528,6 @@
354
528
  "RestApiId": {
355
529
  "Ref": "cfapigwlambdaLambdaRestApi775C255B"
356
530
  }
357
- },
358
- "Metadata": {
359
- "cfn_nag": {
360
- "rules_to_suppress": [
361
- {
362
- "id": "W59",
363
- "reason": "AWS::ApiGateway::Method AuthorizationType is set to 'NONE' because API Gateway behind CloudFront does not support AWS_IAM authentication"
364
- }
365
- ]
366
- }
367
531
  }
368
532
  },
369
533
  "cfapigwlambdaLambdaRestApiANYApiPermissioncftaplamcustomCloudfrontLoggingBucketcfapigwlambdaLambdaRestApi92F6CCCCANY63987F12": {
@@ -447,7 +611,10 @@
447
611
  "cfapigwlambdaLambdaRestApiANY81C176E9": {
448
612
  "Type": "AWS::ApiGateway::Method",
449
613
  "Properties": {
450
- "AuthorizationType": "NONE",
614
+ "AuthorizationType": "CUSTOM",
615
+ "AuthorizerId": {
616
+ "Ref": "cftaplamcustomCloudfrontLoggingBucketauthorizer4D180075"
617
+ },
451
618
  "HttpMethod": "ANY",
452
619
  "Integration": {
453
620
  "IntegrationHttpMethod": "POST",
@@ -485,16 +652,6 @@
485
652
  "RestApiId": {
486
653
  "Ref": "cfapigwlambdaLambdaRestApi775C255B"
487
654
  }
488
- },
489
- "Metadata": {
490
- "cfn_nag": {
491
- "rules_to_suppress": [
492
- {
493
- "id": "W59",
494
- "reason": "AWS::ApiGateway::Method AuthorizationType is set to 'NONE' because API Gateway behind CloudFront does not support AWS_IAM authentication"
495
- }
496
- ]
497
- }
498
655
  }
499
656
  },
500
657
  "cfapigwlambdaLambdaRestApiUsagePlan11CE9748": {
@@ -598,10 +755,9 @@
598
755
  "Name": "SetHttpSecurityHeadersc860b559e82562b55d86431c32566a0eb839407df7"
599
756
  }
600
757
  },
601
- "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucket2E8E3DC2": {
758
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A": {
602
759
  "Type": "AWS::S3::Bucket",
603
760
  "Properties": {
604
- "AccessControl": "LogDeliveryWrite",
605
761
  "BucketEncryption": {
606
762
  "ServerSideEncryptionConfiguration": [
607
763
  {
@@ -641,12 +797,197 @@
641
797
  "rules_to_suppress": [
642
798
  {
643
799
  "id": "W35",
644
- "reason": "This S3 bucket is used as the access logging bucket for CloudFront Distribution"
800
+ "reason": "This S3 bucket is used as the access logging bucket for another bucket"
645
801
  }
646
802
  ]
647
803
  }
648
804
  }
649
805
  },
806
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLogPolicyC05E1C71": {
807
+ "Type": "AWS::S3::BucketPolicy",
808
+ "Properties": {
809
+ "Bucket": {
810
+ "Ref": "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A"
811
+ },
812
+ "PolicyDocument": {
813
+ "Statement": [
814
+ {
815
+ "Action": "s3:*",
816
+ "Condition": {
817
+ "Bool": {
818
+ "aws:SecureTransport": "false"
819
+ }
820
+ },
821
+ "Effect": "Deny",
822
+ "Principal": {
823
+ "AWS": "*"
824
+ },
825
+ "Resource": [
826
+ {
827
+ "Fn::GetAtt": [
828
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A",
829
+ "Arn"
830
+ ]
831
+ },
832
+ {
833
+ "Fn::Join": [
834
+ "",
835
+ [
836
+ {
837
+ "Fn::GetAtt": [
838
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A",
839
+ "Arn"
840
+ ]
841
+ },
842
+ "/*"
843
+ ]
844
+ ]
845
+ }
846
+ ]
847
+ },
848
+ {
849
+ "Action": [
850
+ "s3:PutBucketPolicy",
851
+ "s3:GetBucket*",
852
+ "s3:List*",
853
+ "s3:DeleteObject*"
854
+ ],
855
+ "Effect": "Allow",
856
+ "Principal": {
857
+ "AWS": {
858
+ "Fn::GetAtt": [
859
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
860
+ "Arn"
861
+ ]
862
+ }
863
+ },
864
+ "Resource": [
865
+ {
866
+ "Fn::GetAtt": [
867
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A",
868
+ "Arn"
869
+ ]
870
+ },
871
+ {
872
+ "Fn::Join": [
873
+ "",
874
+ [
875
+ {
876
+ "Fn::GetAtt": [
877
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A",
878
+ "Arn"
879
+ ]
880
+ },
881
+ "/*"
882
+ ]
883
+ ]
884
+ }
885
+ ]
886
+ },
887
+ {
888
+ "Action": "s3:PutObject",
889
+ "Condition": {
890
+ "ArnLike": {
891
+ "aws:SourceArn": {
892
+ "Fn::GetAtt": [
893
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucket2E8E3DC2",
894
+ "Arn"
895
+ ]
896
+ }
897
+ },
898
+ "StringEquals": {
899
+ "aws:SourceAccount": {
900
+ "Ref": "AWS::AccountId"
901
+ }
902
+ }
903
+ },
904
+ "Effect": "Allow",
905
+ "Principal": {
906
+ "Service": "logging.s3.amazonaws.com"
907
+ },
908
+ "Resource": {
909
+ "Fn::Join": [
910
+ "",
911
+ [
912
+ {
913
+ "Fn::GetAtt": [
914
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A",
915
+ "Arn"
916
+ ]
917
+ },
918
+ "/*"
919
+ ]
920
+ ]
921
+ }
922
+ }
923
+ ],
924
+ "Version": "2012-10-17"
925
+ }
926
+ }
927
+ },
928
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLogAutoDeleteObjectsCustomResource296BC002": {
929
+ "Type": "Custom::S3AutoDeleteObjects",
930
+ "Properties": {
931
+ "ServiceToken": {
932
+ "Fn::GetAtt": [
933
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
934
+ "Arn"
935
+ ]
936
+ },
937
+ "BucketName": {
938
+ "Ref": "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A"
939
+ }
940
+ },
941
+ "DependsOn": [
942
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLogPolicyC05E1C71"
943
+ ],
944
+ "UpdateReplacePolicy": "Delete",
945
+ "DeletionPolicy": "Delete"
946
+ },
947
+ "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucket2E8E3DC2": {
948
+ "Type": "AWS::S3::Bucket",
949
+ "Properties": {
950
+ "AccessControl": "LogDeliveryWrite",
951
+ "BucketEncryption": {
952
+ "ServerSideEncryptionConfiguration": [
953
+ {
954
+ "ServerSideEncryptionByDefault": {
955
+ "SSEAlgorithm": "AES256"
956
+ }
957
+ }
958
+ ]
959
+ },
960
+ "LoggingConfiguration": {
961
+ "DestinationBucketName": {
962
+ "Ref": "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A"
963
+ }
964
+ },
965
+ "OwnershipControls": {
966
+ "Rules": [
967
+ {
968
+ "ObjectOwnership": "ObjectWriter"
969
+ }
970
+ ]
971
+ },
972
+ "PublicAccessBlockConfiguration": {
973
+ "BlockPublicAcls": true,
974
+ "BlockPublicPolicy": true,
975
+ "IgnorePublicAcls": true,
976
+ "RestrictPublicBuckets": true
977
+ },
978
+ "Tags": [
979
+ {
980
+ "Key": "aws-cdk:auto-delete-objects",
981
+ "Value": "true"
982
+ }
983
+ ],
984
+ "VersioningConfiguration": {
985
+ "Status": "Enabled"
986
+ }
987
+ },
988
+ "UpdateReplacePolicy": "Delete",
989
+ "DeletionPolicy": "Delete"
990
+ },
650
991
  "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketPolicy416A95E3": {
651
992
  "Type": "AWS::S3::BucketPolicy",
652
993
  "Properties": {
@@ -910,7 +1251,7 @@
910
1251
  [
911
1252
  "Lambda function for auto-deleting objects in ",
912
1253
  {
913
- "Ref": "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucket2E8E3DC2"
1254
+ "Ref": "cfapigwlambdaCloudFrontToApiGatewayCloudfrontLoggingBucketAccessLog48BE423A"
914
1255
  },
915
1256
  " S3 bucket."
916
1257
  ]
@@ -18,11 +18,18 @@ const lib_1 = require("../lib");
18
18
  const lambda = require("aws-cdk-lib/aws-lambda");
19
19
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
20
20
  const core_1 = require("@aws-solutions-constructs/core");
21
+ const apigateway = require("aws-cdk-lib/aws-apigateway");
21
22
  // Setup
22
23
  const app = new aws_cdk_lib_1.App();
23
24
  const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filename));
24
25
  stack.templateOptions.description = 'Integration Test for aws-cloudfront-apigateway-lambda custom Cloudfront Logging Bucket';
25
26
  new lib_1.CloudFrontToApiGatewayToLambda(stack, 'cf-apigw-lambda', {
27
+ apiGatewayProps: {
28
+ defaultMethodOptions: {
29
+ authorizationType: apigateway.AuthorizationType.CUSTOM,
30
+ authorizer: core_1.CreateApiAuthorizer(stack, `${core_1.generateIntegStackName(__filename)}-authorizer`)
31
+ },
32
+ },
26
33
  lambdaFunctionProps: {
27
34
  code: lambda.Code.fromAsset(`${__dirname}/lambda`),
28
35
  runtime: lambda.Runtime.NODEJS_16_X,
@@ -38,4 +45,4 @@ new lib_1.CloudFrontToApiGatewayToLambda(stack, 'cf-apigw-lambda', {
38
45
  core_1.suppressAutoDeleteHandlerWarnings(stack);
39
46
  // Synth
40
47
  app.synth();
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY2Z0YXBsYW0tY3VzdG9tQ2xvdWRmcm9udExvZ2dpbmdCdWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5jZnRhcGxhbS1jdXN0b21DbG91ZGZyb250TG9nZ2luZ0J1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsZ0JBQWdCO0FBQ2hCLDZDQUF3RDtBQUN4RCxnQ0FBd0Q7QUFDeEQsaURBQWlEO0FBQ2pELCtDQUFzRDtBQUN0RCx5REFBMkc7QUFFM0csUUFBUTtBQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRSxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyx3RkFBd0YsQ0FBQztBQUU3SCxJQUFJLG9DQUE4QixDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtJQUMzRCxtQkFBbUIsRUFBRTtRQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1FBQ25DLE9BQU8sRUFBRSxlQUFlO0tBQ3pCO0lBQ0QsNEJBQTRCLEVBQUU7UUFDNUIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLFVBQVUsRUFBRSx5QkFBZ0IsQ0FBQyxVQUFVO1FBQ3ZDLFNBQVMsRUFBRSxJQUFJO0tBQ2hCO0NBQ0YsQ0FBQyxDQUFDO0FBQ0gsd0NBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekMsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vLyAhY2RrLWludGVnICpcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb0FwaUdhdGV3YXlUb0xhbWJkYSB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lLCBzdXBwcmVzc0F1dG9EZWxldGVIYW5kbGVyV2FybmluZ3MgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBhd3MtY2xvdWRmcm9udC1hcGlnYXRld2F5LWxhbWJkYSBjdXN0b20gQ2xvdWRmcm9udCBMb2dnaW5nIEJ1Y2tldCc7XG5cbm5ldyBDbG91ZEZyb250VG9BcGlHYXRld2F5VG9MYW1iZGEoc3RhY2ssICdjZi1hcGlndy1sYW1iZGEnLCB7XG4gIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcidcbiAgfSxcbiAgY2xvdWRGcm9udExvZ2dpbmdCdWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgdmVyc2lvbmVkOiB0cnVlXG4gIH1cbn0pO1xuc3VwcHJlc3NBdXRvRGVsZXRlSGFuZGxlcldhcm5pbmdzKHN0YWNrKTtcblxuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY2Z0YXBsYW0tY3VzdG9tQ2xvdWRmcm9udExvZ2dpbmdCdWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5jZnRhcGxhbS1jdXN0b21DbG91ZGZyb250TG9nZ2luZ0J1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsZ0JBQWdCO0FBQ2hCLDZDQUF3RDtBQUN4RCxnQ0FBd0Q7QUFDeEQsaURBQWlEO0FBQ2pELCtDQUFzRDtBQUN0RCx5REFBZ0k7QUFDaEkseURBQXlEO0FBRXpELFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsd0ZBQXdGLENBQUM7QUFFN0gsSUFBSSxvQ0FBOEIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7SUFDM0QsZUFBZSxFQUFFO1FBQ2Ysb0JBQW9CLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU07WUFDdEQsVUFBVSxFQUFFLDBCQUFtQixDQUFDLEtBQUssRUFBRSxHQUFHLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7U0FDM0Y7S0FDRjtJQUNELG1CQUFtQixFQUFFO1FBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7UUFDbkMsT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFDRCw0QkFBNEIsRUFBRTtRQUM1QixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7UUFDdkMsU0FBUyxFQUFFLElBQUk7S0FDaEI7Q0FDRixDQUFDLENBQUM7QUFDSCx3Q0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV6QyxRQUFRO0FBQ1IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8vICFjZGstaW50ZWcgKlxuaW1wb3J0IHsgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvQXBpR2F0ZXdheVRvTGFtYmRhIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQnVja2V0RW5jcnlwdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IGdlbmVyYXRlSW50ZWdTdGFja05hbWUsIHN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncywgQ3JlYXRlQXBpQXV0aG9yaXplciB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBhcGlnYXRld2F5IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcblxuLy8gU2V0dXBcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKSk7XG5zdGFjay50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24gPSAnSW50ZWdyYXRpb24gVGVzdCBmb3IgYXdzLWNsb3VkZnJvbnQtYXBpZ2F0ZXdheS1sYW1iZGEgY3VzdG9tIENsb3VkZnJvbnQgTG9nZ2luZyBCdWNrZXQnO1xuXG5uZXcgQ2xvdWRGcm9udFRvQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAnY2YtYXBpZ3ctbGFtYmRhJywge1xuICBhcGlHYXRld2F5UHJvcHM6IHtcbiAgICBkZWZhdWx0TWV0aG9kT3B0aW9uczoge1xuICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGFwaWdhdGV3YXkuQXV0aG9yaXphdGlvblR5cGUuQ1VTVE9NLFxuICAgICAgYXV0aG9yaXplcjogQ3JlYXRlQXBpQXV0aG9yaXplcihzdGFjaywgYCR7Z2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKX0tYXV0aG9yaXplcmApXG4gICAgfSxcbiAgfSxcbiAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJ1xuICB9LFxuICBjbG91ZEZyb250TG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB2ZXJzaW9uZWQ6IHRydWVcbiAgfVxufSk7XG5zdXBwcmVzc0F1dG9EZWxldGVIYW5kbGVyV2FybmluZ3Moc3RhY2spO1xuXG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=