@orcabus/platform-cdk-constructs 0.0.7-beta.1 → 0.0.7-beta.10
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 +232 -34
- package/api-gateway/api-gateway.js +1 -1
- package/deployment-stack-pipeline/artifact-bucket.d.ts +34 -0
- package/deployment-stack-pipeline/artifact-bucket.js +86 -0
- package/deployment-stack-pipeline/index.d.ts +1 -0
- package/deployment-stack-pipeline/index.js +2 -1
- package/deployment-stack-pipeline/pipeline.d.ts +17 -1
- package/deployment-stack-pipeline/pipeline.js +13 -2
- package/dynamodb/index.js +2 -2
- package/ecs/index.js +1 -1
- package/lambda/index.d.ts +6 -0
- package/lambda/index.js +38 -4
- package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/icav2_wes/__init__.py +3 -3
- package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/icav2_wes/globals.py +1 -1
- package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/icav2_wes/update_helpers.py +11 -8
- package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/utils/aws_helpers.py +1 -1
- package/package.json +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.js +8 -38
package/.jsii
CHANGED
|
@@ -4359,12 +4359,121 @@
|
|
|
4359
4359
|
],
|
|
4360
4360
|
"symbolId": "api-gateway/api-gateway:OrcaBusApiGatewayProps"
|
|
4361
4361
|
},
|
|
4362
|
-
"@orcabus/platform-cdk-constructs.deploymentPipeline.
|
|
4362
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket": {
|
|
4363
4363
|
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4364
4364
|
"base": "constructs.Construct",
|
|
4365
4365
|
"docs": {
|
|
4366
4366
|
"stability": "experimental"
|
|
4367
4367
|
},
|
|
4368
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket",
|
|
4369
|
+
"initializer": {
|
|
4370
|
+
"docs": {
|
|
4371
|
+
"stability": "experimental"
|
|
4372
|
+
},
|
|
4373
|
+
"locationInModule": {
|
|
4374
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4375
|
+
"line": 50
|
|
4376
|
+
},
|
|
4377
|
+
"parameters": [
|
|
4378
|
+
{
|
|
4379
|
+
"name": "scope",
|
|
4380
|
+
"type": {
|
|
4381
|
+
"fqn": "constructs.Construct"
|
|
4382
|
+
}
|
|
4383
|
+
},
|
|
4384
|
+
{
|
|
4385
|
+
"name": "id",
|
|
4386
|
+
"type": {
|
|
4387
|
+
"primitive": "string"
|
|
4388
|
+
}
|
|
4389
|
+
}
|
|
4390
|
+
]
|
|
4391
|
+
},
|
|
4392
|
+
"interfaces": [
|
|
4393
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket"
|
|
4394
|
+
],
|
|
4395
|
+
"kind": "class",
|
|
4396
|
+
"locationInModule": {
|
|
4397
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4398
|
+
"line": 37
|
|
4399
|
+
},
|
|
4400
|
+
"methods": [
|
|
4401
|
+
{
|
|
4402
|
+
"docs": {
|
|
4403
|
+
"returns": "ICrossDeploymentArtifactBucket",
|
|
4404
|
+
"stability": "experimental",
|
|
4405
|
+
"summary": "Imports an existing cross-deployment artifact bucket and its KMS key using SSM and resource lookups."
|
|
4406
|
+
},
|
|
4407
|
+
"locationInModule": {
|
|
4408
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4409
|
+
"line": 115
|
|
4410
|
+
},
|
|
4411
|
+
"name": "fromLookup",
|
|
4412
|
+
"parameters": [
|
|
4413
|
+
{
|
|
4414
|
+
"docs": {
|
|
4415
|
+
"summary": "The scope in which to look up the artifact bucket."
|
|
4416
|
+
},
|
|
4417
|
+
"name": "scope",
|
|
4418
|
+
"type": {
|
|
4419
|
+
"fqn": "constructs.Construct"
|
|
4420
|
+
}
|
|
4421
|
+
}
|
|
4422
|
+
],
|
|
4423
|
+
"returns": {
|
|
4424
|
+
"type": {
|
|
4425
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket"
|
|
4426
|
+
}
|
|
4427
|
+
},
|
|
4428
|
+
"static": true
|
|
4429
|
+
}
|
|
4430
|
+
],
|
|
4431
|
+
"name": "CrossDeploymentArtifactBucket",
|
|
4432
|
+
"namespace": "deploymentPipeline",
|
|
4433
|
+
"properties": [
|
|
4434
|
+
{
|
|
4435
|
+
"docs": {
|
|
4436
|
+
"stability": "experimental",
|
|
4437
|
+
"summary": "The S3 bucket used to store artifacts for cross-deployment pipelines."
|
|
4438
|
+
},
|
|
4439
|
+
"immutable": true,
|
|
4440
|
+
"locationInModule": {
|
|
4441
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4442
|
+
"line": 44
|
|
4443
|
+
},
|
|
4444
|
+
"name": "artifactBucket",
|
|
4445
|
+
"overrides": "@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket",
|
|
4446
|
+
"type": {
|
|
4447
|
+
"fqn": "aws-cdk-lib.aws_s3.IBucket"
|
|
4448
|
+
}
|
|
4449
|
+
},
|
|
4450
|
+
{
|
|
4451
|
+
"docs": {
|
|
4452
|
+
"stability": "experimental",
|
|
4453
|
+
"summary": "The KMS key used to encrypt artifacts for cross-deployment pipelines."
|
|
4454
|
+
},
|
|
4455
|
+
"immutable": true,
|
|
4456
|
+
"locationInModule": {
|
|
4457
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4458
|
+
"line": 48
|
|
4459
|
+
},
|
|
4460
|
+
"name": "artifactKms",
|
|
4461
|
+
"overrides": "@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket",
|
|
4462
|
+
"type": {
|
|
4463
|
+
"fqn": "aws-cdk-lib.aws_kms.IKey"
|
|
4464
|
+
}
|
|
4465
|
+
}
|
|
4466
|
+
],
|
|
4467
|
+
"symbolId": "deployment-stack-pipeline/artifact-bucket:CrossDeploymentArtifactBucket"
|
|
4468
|
+
},
|
|
4469
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline": {
|
|
4470
|
+
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4471
|
+
"base": "constructs.Construct",
|
|
4472
|
+
"docs": {
|
|
4473
|
+
"remarks": "Prerequisite: Ensure that the \"CrossDeploymentArtifactBucket\" stack is deployed in the TOOLCHAIN account\nbefore using this construct.",
|
|
4474
|
+
"stability": "experimental",
|
|
4475
|
+
"summary": "A CDK construct that creates a deployment pipeline across environments for the OrcaBus project."
|
|
4476
|
+
},
|
|
4368
4477
|
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline",
|
|
4369
4478
|
"initializer": {
|
|
4370
4479
|
"docs": {
|
|
@@ -4372,7 +4481,7 @@
|
|
|
4372
4481
|
},
|
|
4373
4482
|
"locationInModule": {
|
|
4374
4483
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4375
|
-
"line":
|
|
4484
|
+
"line": 164
|
|
4376
4485
|
},
|
|
4377
4486
|
"parameters": [
|
|
4378
4487
|
{
|
|
@@ -4398,7 +4507,7 @@
|
|
|
4398
4507
|
"kind": "class",
|
|
4399
4508
|
"locationInModule": {
|
|
4400
4509
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4401
|
-
"line":
|
|
4510
|
+
"line": 158
|
|
4402
4511
|
},
|
|
4403
4512
|
"name": "DeploymentStackPipeline",
|
|
4404
4513
|
"namespace": "deploymentPipeline",
|
|
@@ -4411,7 +4520,7 @@
|
|
|
4411
4520
|
"immutable": true,
|
|
4412
4521
|
"locationInModule": {
|
|
4413
4522
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4414
|
-
"line":
|
|
4523
|
+
"line": 162
|
|
4415
4524
|
},
|
|
4416
4525
|
"name": "pipeline",
|
|
4417
4526
|
"type": {
|
|
@@ -4431,7 +4540,7 @@
|
|
|
4431
4540
|
"kind": "interface",
|
|
4432
4541
|
"locationInModule": {
|
|
4433
4542
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4434
|
-
"line":
|
|
4543
|
+
"line": 73
|
|
4435
4544
|
},
|
|
4436
4545
|
"name": "DeploymentStackPipelineProps",
|
|
4437
4546
|
"namespace": "deploymentPipeline",
|
|
@@ -4446,7 +4555,7 @@
|
|
|
4446
4555
|
"immutable": true,
|
|
4447
4556
|
"locationInModule": {
|
|
4448
4557
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4449
|
-
"line":
|
|
4558
|
+
"line": 112
|
|
4450
4559
|
},
|
|
4451
4560
|
"name": "cdkSynthCmd",
|
|
4452
4561
|
"type": {
|
|
@@ -4461,13 +4570,17 @@
|
|
|
4461
4570
|
{
|
|
4462
4571
|
"abstract": true,
|
|
4463
4572
|
"docs": {
|
|
4573
|
+
"custom": {
|
|
4574
|
+
"": "\".\nThis restriction is due to AWS resource tagging requirements."
|
|
4575
|
+
},
|
|
4576
|
+
"remarks": "Avoid using branch names that contain special characters such as parentheses.\nAllowed special characters are: \"+ - = . _ : /",
|
|
4464
4577
|
"stability": "experimental",
|
|
4465
|
-
"summary": "The
|
|
4578
|
+
"summary": "The GitHub branch name the pipeline will listen to."
|
|
4466
4579
|
},
|
|
4467
4580
|
"immutable": true,
|
|
4468
4581
|
"locationInModule": {
|
|
4469
4582
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4470
|
-
"line":
|
|
4583
|
+
"line": 80
|
|
4471
4584
|
},
|
|
4472
4585
|
"name": "githubBranch",
|
|
4473
4586
|
"type": {
|
|
@@ -4484,7 +4597,7 @@
|
|
|
4484
4597
|
"immutable": true,
|
|
4485
4598
|
"locationInModule": {
|
|
4486
4599
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4487
|
-
"line":
|
|
4600
|
+
"line": 84
|
|
4488
4601
|
},
|
|
4489
4602
|
"name": "githubRepo",
|
|
4490
4603
|
"type": {
|
|
@@ -4500,7 +4613,7 @@
|
|
|
4500
4613
|
"immutable": true,
|
|
4501
4614
|
"locationInModule": {
|
|
4502
4615
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4503
|
-
"line":
|
|
4616
|
+
"line": 101
|
|
4504
4617
|
},
|
|
4505
4618
|
"name": "pipelineName",
|
|
4506
4619
|
"type": {
|
|
@@ -4516,7 +4629,7 @@
|
|
|
4516
4629
|
"immutable": true,
|
|
4517
4630
|
"locationInModule": {
|
|
4518
4631
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4519
|
-
"line":
|
|
4632
|
+
"line": 88
|
|
4520
4633
|
},
|
|
4521
4634
|
"name": "stack",
|
|
4522
4635
|
"type": {
|
|
@@ -4532,7 +4645,7 @@
|
|
|
4532
4645
|
"immutable": true,
|
|
4533
4646
|
"locationInModule": {
|
|
4534
4647
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4535
|
-
"line":
|
|
4648
|
+
"line": 97
|
|
4536
4649
|
},
|
|
4537
4650
|
"name": "stackConfig",
|
|
4538
4651
|
"type": {
|
|
@@ -4549,7 +4662,7 @@
|
|
|
4549
4662
|
"immutable": true,
|
|
4550
4663
|
"locationInModule": {
|
|
4551
4664
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4552
|
-
"line":
|
|
4665
|
+
"line": 93
|
|
4553
4666
|
},
|
|
4554
4667
|
"name": "stackName",
|
|
4555
4668
|
"type": {
|
|
@@ -4566,7 +4679,7 @@
|
|
|
4566
4679
|
"immutable": true,
|
|
4567
4680
|
"locationInModule": {
|
|
4568
4681
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4569
|
-
"line":
|
|
4682
|
+
"line": 118
|
|
4570
4683
|
},
|
|
4571
4684
|
"name": "cdkOut",
|
|
4572
4685
|
"optional": true,
|
|
@@ -4584,7 +4697,7 @@
|
|
|
4584
4697
|
"immutable": true,
|
|
4585
4698
|
"locationInModule": {
|
|
4586
4699
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4587
|
-
"line":
|
|
4700
|
+
"line": 133
|
|
4588
4701
|
},
|
|
4589
4702
|
"name": "enableSlackNotification",
|
|
4590
4703
|
"optional": true,
|
|
@@ -4602,7 +4715,7 @@
|
|
|
4602
4715
|
"immutable": true,
|
|
4603
4716
|
"locationInModule": {
|
|
4604
4717
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4605
|
-
"line":
|
|
4718
|
+
"line": 108
|
|
4606
4719
|
},
|
|
4607
4720
|
"name": "filePaths",
|
|
4608
4721
|
"optional": true,
|
|
@@ -4626,7 +4739,7 @@
|
|
|
4626
4739
|
"immutable": true,
|
|
4627
4740
|
"locationInModule": {
|
|
4628
4741
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4629
|
-
"line":
|
|
4742
|
+
"line": 141
|
|
4630
4743
|
},
|
|
4631
4744
|
"name": "notificationEvents",
|
|
4632
4745
|
"optional": true,
|
|
@@ -4639,6 +4752,25 @@
|
|
|
4639
4752
|
}
|
|
4640
4753
|
}
|
|
4641
4754
|
},
|
|
4755
|
+
{
|
|
4756
|
+
"abstract": true,
|
|
4757
|
+
"docs": {
|
|
4758
|
+
"default": "True",
|
|
4759
|
+
"remarks": "If set to true, it will look up the existing artifact bucket in the TOOLCHAIN account.",
|
|
4760
|
+
"stability": "experimental",
|
|
4761
|
+
"summary": "Whether to reuse the existing artifact bucket for cross-deployment pipelines."
|
|
4762
|
+
},
|
|
4763
|
+
"immutable": true,
|
|
4764
|
+
"locationInModule": {
|
|
4765
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4766
|
+
"line": 149
|
|
4767
|
+
},
|
|
4768
|
+
"name": "reuseExistingArtifactBucket",
|
|
4769
|
+
"optional": true,
|
|
4770
|
+
"type": {
|
|
4771
|
+
"primitive": "boolean"
|
|
4772
|
+
}
|
|
4773
|
+
},
|
|
4642
4774
|
{
|
|
4643
4775
|
"abstract": true,
|
|
4644
4776
|
"docs": {
|
|
@@ -4648,7 +4780,7 @@
|
|
|
4648
4780
|
"immutable": true,
|
|
4649
4781
|
"locationInModule": {
|
|
4650
4782
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4651
|
-
"line":
|
|
4783
|
+
"line": 128
|
|
4652
4784
|
},
|
|
4653
4785
|
"name": "stageEnv",
|
|
4654
4786
|
"optional": true,
|
|
@@ -4667,7 +4799,7 @@
|
|
|
4667
4799
|
"immutable": true,
|
|
4668
4800
|
"locationInModule": {
|
|
4669
4801
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4670
|
-
"line":
|
|
4802
|
+
"line": 124
|
|
4671
4803
|
},
|
|
4672
4804
|
"name": "synthBuildSpec",
|
|
4673
4805
|
"optional": true,
|
|
@@ -4683,6 +4815,55 @@
|
|
|
4683
4815
|
],
|
|
4684
4816
|
"symbolId": "deployment-stack-pipeline/pipeline:DeploymentStackPipelineProps"
|
|
4685
4817
|
},
|
|
4818
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket": {
|
|
4819
|
+
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4820
|
+
"docs": {
|
|
4821
|
+
"stability": "experimental"
|
|
4822
|
+
},
|
|
4823
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket",
|
|
4824
|
+
"kind": "interface",
|
|
4825
|
+
"locationInModule": {
|
|
4826
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4827
|
+
"line": 26
|
|
4828
|
+
},
|
|
4829
|
+
"name": "ICrossDeploymentArtifactBucket",
|
|
4830
|
+
"namespace": "deploymentPipeline",
|
|
4831
|
+
"properties": [
|
|
4832
|
+
{
|
|
4833
|
+
"abstract": true,
|
|
4834
|
+
"docs": {
|
|
4835
|
+
"stability": "experimental",
|
|
4836
|
+
"summary": "The S3 bucket used to store artifacts for cross-deployment pipelines."
|
|
4837
|
+
},
|
|
4838
|
+
"immutable": true,
|
|
4839
|
+
"locationInModule": {
|
|
4840
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4841
|
+
"line": 30
|
|
4842
|
+
},
|
|
4843
|
+
"name": "artifactBucket",
|
|
4844
|
+
"type": {
|
|
4845
|
+
"fqn": "aws-cdk-lib.aws_s3.IBucket"
|
|
4846
|
+
}
|
|
4847
|
+
},
|
|
4848
|
+
{
|
|
4849
|
+
"abstract": true,
|
|
4850
|
+
"docs": {
|
|
4851
|
+
"stability": "experimental",
|
|
4852
|
+
"summary": "The KMS key used to encrypt artifacts for cross-deployment pipelines."
|
|
4853
|
+
},
|
|
4854
|
+
"immutable": true,
|
|
4855
|
+
"locationInModule": {
|
|
4856
|
+
"filename": "deployment-stack-pipeline/artifact-bucket.ts",
|
|
4857
|
+
"line": 34
|
|
4858
|
+
},
|
|
4859
|
+
"name": "artifactKms",
|
|
4860
|
+
"type": {
|
|
4861
|
+
"fqn": "aws-cdk-lib.aws_kms.IKey"
|
|
4862
|
+
}
|
|
4863
|
+
}
|
|
4864
|
+
],
|
|
4865
|
+
"symbolId": "deployment-stack-pipeline/artifact-bucket:ICrossDeploymentArtifactBucket"
|
|
4866
|
+
},
|
|
4686
4867
|
"@orcabus/platform-cdk-constructs.deploymentPipeline.StackConfigProps": {
|
|
4687
4868
|
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4688
4869
|
"datatype": true,
|
|
@@ -4693,7 +4874,7 @@
|
|
|
4693
4874
|
"kind": "interface",
|
|
4694
4875
|
"locationInModule": {
|
|
4695
4876
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4696
|
-
"line":
|
|
4877
|
+
"line": 58
|
|
4697
4878
|
},
|
|
4698
4879
|
"name": "StackConfigProps",
|
|
4699
4880
|
"namespace": "deploymentPipeline",
|
|
@@ -4707,7 +4888,7 @@
|
|
|
4707
4888
|
"immutable": true,
|
|
4708
4889
|
"locationInModule": {
|
|
4709
4890
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4710
|
-
"line":
|
|
4891
|
+
"line": 62
|
|
4711
4892
|
},
|
|
4712
4893
|
"name": "beta",
|
|
4713
4894
|
"type": {
|
|
@@ -4728,7 +4909,7 @@
|
|
|
4728
4909
|
"immutable": true,
|
|
4729
4910
|
"locationInModule": {
|
|
4730
4911
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4731
|
-
"line":
|
|
4912
|
+
"line": 66
|
|
4732
4913
|
},
|
|
4733
4914
|
"name": "gamma",
|
|
4734
4915
|
"type": {
|
|
@@ -4749,7 +4930,7 @@
|
|
|
4749
4930
|
"immutable": true,
|
|
4750
4931
|
"locationInModule": {
|
|
4751
4932
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4752
|
-
"line":
|
|
4933
|
+
"line": 70
|
|
4753
4934
|
},
|
|
4754
4935
|
"name": "prod",
|
|
4755
4936
|
"type": {
|
|
@@ -4774,7 +4955,7 @@
|
|
|
4774
4955
|
"kind": "interface",
|
|
4775
4956
|
"locationInModule": {
|
|
4776
4957
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4777
|
-
"line":
|
|
4958
|
+
"line": 43
|
|
4778
4959
|
},
|
|
4779
4960
|
"name": "StageEnvProps",
|
|
4780
4961
|
"namespace": "deploymentPipeline",
|
|
@@ -4788,7 +4969,7 @@
|
|
|
4788
4969
|
"immutable": true,
|
|
4789
4970
|
"locationInModule": {
|
|
4790
4971
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4791
|
-
"line":
|
|
4972
|
+
"line": 47
|
|
4792
4973
|
},
|
|
4793
4974
|
"name": "beta",
|
|
4794
4975
|
"type": {
|
|
@@ -4804,7 +4985,7 @@
|
|
|
4804
4985
|
"immutable": true,
|
|
4805
4986
|
"locationInModule": {
|
|
4806
4987
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4807
|
-
"line":
|
|
4988
|
+
"line": 51
|
|
4808
4989
|
},
|
|
4809
4990
|
"name": "gamma",
|
|
4810
4991
|
"type": {
|
|
@@ -4820,7 +5001,7 @@
|
|
|
4820
5001
|
"immutable": true,
|
|
4821
5002
|
"locationInModule": {
|
|
4822
5003
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4823
|
-
"line":
|
|
5004
|
+
"line": 55
|
|
4824
5005
|
},
|
|
4825
5006
|
"name": "prod",
|
|
4826
5007
|
"type": {
|
|
@@ -5487,7 +5668,7 @@
|
|
|
5487
5668
|
},
|
|
5488
5669
|
"locationInModule": {
|
|
5489
5670
|
"filename": "lambda/index.ts",
|
|
5490
|
-
"line":
|
|
5671
|
+
"line": 126
|
|
5491
5672
|
},
|
|
5492
5673
|
"parameters": [
|
|
5493
5674
|
{
|
|
@@ -5513,7 +5694,7 @@
|
|
|
5513
5694
|
"kind": "class",
|
|
5514
5695
|
"locationInModule": {
|
|
5515
5696
|
"filename": "lambda/index.ts",
|
|
5516
|
-
"line":
|
|
5697
|
+
"line": 117
|
|
5517
5698
|
},
|
|
5518
5699
|
"name": "PythonUvFunction",
|
|
5519
5700
|
"namespace": "lambda",
|
|
@@ -5549,7 +5730,7 @@
|
|
|
5549
5730
|
"immutable": true,
|
|
5550
5731
|
"locationInModule": {
|
|
5551
5732
|
"filename": "lambda/index.ts",
|
|
5552
|
-
"line":
|
|
5733
|
+
"line": 113
|
|
5553
5734
|
},
|
|
5554
5735
|
"name": "icav2Resources",
|
|
5555
5736
|
"optional": true,
|
|
@@ -5557,6 +5738,23 @@
|
|
|
5557
5738
|
"fqn": "@orcabus/platform-cdk-constructs.lambda.Icav2ResourcesProps"
|
|
5558
5739
|
}
|
|
5559
5740
|
},
|
|
5741
|
+
{
|
|
5742
|
+
"abstract": true,
|
|
5743
|
+
"docs": {
|
|
5744
|
+
"stability": "experimental",
|
|
5745
|
+
"summary": "Whether or not to include the fastapi layer in the lambda function build."
|
|
5746
|
+
},
|
|
5747
|
+
"immutable": true,
|
|
5748
|
+
"locationInModule": {
|
|
5749
|
+
"filename": "lambda/index.ts",
|
|
5750
|
+
"line": 93
|
|
5751
|
+
},
|
|
5752
|
+
"name": "includeFastApiLayer",
|
|
5753
|
+
"optional": true,
|
|
5754
|
+
"type": {
|
|
5755
|
+
"primitive": "boolean"
|
|
5756
|
+
}
|
|
5757
|
+
},
|
|
5560
5758
|
{
|
|
5561
5759
|
"abstract": true,
|
|
5562
5760
|
"docs": {
|
|
@@ -5620,7 +5818,7 @@
|
|
|
5620
5818
|
"immutable": true,
|
|
5621
5819
|
"locationInModule": {
|
|
5622
5820
|
"filename": "lambda/index.ts",
|
|
5623
|
-
"line":
|
|
5821
|
+
"line": 107
|
|
5624
5822
|
},
|
|
5625
5823
|
"name": "martEnvironmentVariables",
|
|
5626
5824
|
"optional": true,
|
|
@@ -5641,7 +5839,7 @@
|
|
|
5641
5839
|
"immutable": true,
|
|
5642
5840
|
"locationInModule": {
|
|
5643
5841
|
"filename": "lambda/index.ts",
|
|
5644
|
-
"line":
|
|
5842
|
+
"line": 100
|
|
5645
5843
|
},
|
|
5646
5844
|
"name": "orcabusTokenResources",
|
|
5647
5845
|
"optional": true,
|
|
@@ -5653,6 +5851,6 @@
|
|
|
5653
5851
|
"symbolId": "lambda/index:PythonUvFunctionProps"
|
|
5654
5852
|
}
|
|
5655
5853
|
},
|
|
5656
|
-
"version": "0.0.7-beta.
|
|
5657
|
-
"fingerprint": "
|
|
5854
|
+
"version": "0.0.7-beta.10",
|
|
5855
|
+
"fingerprint": "VBUneoq1FMbsHWvMD7HtsC9oM0SlTuz55+xIn/fdNtw="
|
|
5658
5856
|
}
|
|
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
|
15
15
|
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
16
16
|
const config_1 = require("./config");
|
|
17
17
|
class OrcaBusApiGateway extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.7-beta.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.7-beta.10" };
|
|
19
19
|
/**
|
|
20
20
|
* The AWS region where the API Gateway is deployed.
|
|
21
21
|
*/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { IBucket } from "aws-cdk-lib/aws-s3";
|
|
3
|
+
import { IKey } from "aws-cdk-lib/aws-kms";
|
|
4
|
+
export declare const CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepipeline-artifact";
|
|
5
|
+
export declare const CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
|
|
6
|
+
export declare const CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
|
|
7
|
+
export interface ICrossDeploymentArtifactBucket {
|
|
8
|
+
/**
|
|
9
|
+
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
10
|
+
*/
|
|
11
|
+
readonly artifactBucket: IBucket;
|
|
12
|
+
/**
|
|
13
|
+
* The KMS key used to encrypt artifacts for cross-deployment pipelines.
|
|
14
|
+
*/
|
|
15
|
+
readonly artifactKms: IKey;
|
|
16
|
+
}
|
|
17
|
+
export declare class CrossDeploymentArtifactBucket extends Construct implements ICrossDeploymentArtifactBucket {
|
|
18
|
+
/**
|
|
19
|
+
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
20
|
+
*/
|
|
21
|
+
readonly artifactBucket: IBucket;
|
|
22
|
+
/**
|
|
23
|
+
* The KMS key used to encrypt artifacts for cross-deployment pipelines.
|
|
24
|
+
*/
|
|
25
|
+
readonly artifactKms: IKey;
|
|
26
|
+
constructor(scope: Construct, id: string);
|
|
27
|
+
/**
|
|
28
|
+
* Imports an existing cross-deployment artifact bucket and its KMS key
|
|
29
|
+
* using SSM and resource lookups.
|
|
30
|
+
* @param scope The scope in which to look up the artifact bucket.
|
|
31
|
+
* @returns ICrossDeploymentArtifactBucket
|
|
32
|
+
*/
|
|
33
|
+
static fromLookup(scope: Construct): ICrossDeploymentArtifactBucket;
|
|
34
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CrossDeploymentArtifactBucket = exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
7
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
10
|
+
const config_1 = require("./config");
|
|
11
|
+
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
12
|
+
exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepipeline-artifact";
|
|
13
|
+
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
|
|
14
|
+
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
|
|
15
|
+
class CrossDeploymentArtifactBucket extends constructs_1.Construct {
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.7-beta.10" };
|
|
17
|
+
/**
|
|
18
|
+
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
19
|
+
*/
|
|
20
|
+
artifactBucket;
|
|
21
|
+
/**
|
|
22
|
+
* The KMS key used to encrypt artifacts for cross-deployment pipelines.
|
|
23
|
+
*/
|
|
24
|
+
artifactKms;
|
|
25
|
+
constructor(scope, id) {
|
|
26
|
+
super(scope, id);
|
|
27
|
+
const stageDeployRolePrincipal = [
|
|
28
|
+
new aws_iam_1.ArnPrincipal(`arn:aws:iam::${config_1.BETA_ENVIRONMENT.account}:role/cdk-hnb659fds-deploy-role-${config_1.BETA_ENVIRONMENT.account}-ap-southeast-2`),
|
|
29
|
+
new aws_iam_1.ArnPrincipal(`arn:aws:iam::${config_1.GAMMA_ENVIRONMENT.account}:role/cdk-hnb659fds-deploy-role-${config_1.GAMMA_ENVIRONMENT.account}-ap-southeast-2`),
|
|
30
|
+
new aws_iam_1.ArnPrincipal(`arn:aws:iam::${config_1.PROD_ENVIRONMENT.account}:role/cdk-hnb659fds-deploy-role-${config_1.PROD_ENVIRONMENT.account}-ap-southeast-2`),
|
|
31
|
+
];
|
|
32
|
+
this.artifactKms = new aws_kms_1.Key(this, "KmsKeyCodepipelineArtifactBucket", {
|
|
33
|
+
pendingWindow: aws_cdk_lib_1.Duration.days(30),
|
|
34
|
+
description: "OrcaBus Cross Deployment Artifact Bucket KMS Key",
|
|
35
|
+
enableKeyRotation: false,
|
|
36
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
|
|
37
|
+
alias: exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS,
|
|
38
|
+
});
|
|
39
|
+
this.artifactKms.addToResourcePolicy(new aws_iam_1.PolicyStatement({
|
|
40
|
+
actions: ["kms:Decrypt", "kms:DescribeKey"],
|
|
41
|
+
principals: stageDeployRolePrincipal,
|
|
42
|
+
resources: ["*"],
|
|
43
|
+
}));
|
|
44
|
+
new aws_ssm_1.StringParameter(this, "SSMArtifactBucketKmsArnParameter", {
|
|
45
|
+
parameterName: exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME,
|
|
46
|
+
stringValue: this.artifactKms.keyArn,
|
|
47
|
+
description: "KMS Key ARN for the OrcaBus cross-deployment artifact bucket",
|
|
48
|
+
});
|
|
49
|
+
this.artifactBucket = new aws_s3_1.Bucket(this, "BucketCodepipelineCrossArtifact", {
|
|
50
|
+
bucketName: exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME,
|
|
51
|
+
versioned: false,
|
|
52
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
|
|
53
|
+
encryption: aws_s3_1.BucketEncryption.KMS,
|
|
54
|
+
encryptionKey: this.artifactKms,
|
|
55
|
+
enforceSSL: true,
|
|
56
|
+
});
|
|
57
|
+
this.artifactBucket.addToResourcePolicy(new aws_iam_1.PolicyStatement({
|
|
58
|
+
actions: ["s3:GetObject*", "s3:GetBucket*", "s3:List*"],
|
|
59
|
+
resources: [
|
|
60
|
+
this.artifactBucket.bucketArn,
|
|
61
|
+
this.artifactBucket.arnForObjects("*"),
|
|
62
|
+
],
|
|
63
|
+
principals: stageDeployRolePrincipal,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Imports an existing cross-deployment artifact bucket and its KMS key
|
|
68
|
+
* using SSM and resource lookups.
|
|
69
|
+
* @param scope The scope in which to look up the artifact bucket.
|
|
70
|
+
* @returns ICrossDeploymentArtifactBucket
|
|
71
|
+
*/
|
|
72
|
+
static fromLookup(scope) {
|
|
73
|
+
const artifactBucketKmsArn = aws_ssm_1.StringParameter.valueForStringParameter(scope, exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME);
|
|
74
|
+
const artifactBucketKmsKey = aws_kms_1.Key.fromKeyArn(scope, "KmsKeyCodepipelineArtifactBucket", artifactBucketKmsArn);
|
|
75
|
+
const artifactBucket = aws_s3_1.Bucket.fromBucketAttributes(scope, "BucketCodepipelineCrossArtifact", {
|
|
76
|
+
bucketName: exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME,
|
|
77
|
+
encryptionKey: artifactBucketKmsKey,
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
artifactBucket: artifactBucket,
|
|
81
|
+
artifactKms: artifactBucketKmsKey,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.CrossDeploymentArtifactBucket = CrossDeploymentArtifactBucket;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3QtYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJ0aWZhY3QtYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMsK0NBQXVFO0FBQ3ZFLGlEQUFnRDtBQUNoRCw2Q0FBc0Q7QUFDdEQsaURBSTZCO0FBQzdCLHFDQUlrQjtBQUNsQixpREFBc0Q7QUFFekMsUUFBQSxxQ0FBcUMsR0FDaEQsZ0RBQWdELENBQUM7QUFFdEMsUUFBQSxtQ0FBbUMsR0FDOUMsZ0RBQWdELENBQUM7QUFFdEMsUUFBQSxvREFBb0QsR0FDL0QsZ0VBQWdFLENBQUM7QUFhbkUsTUFBYSw2QkFDWCxTQUFRLHNCQUFTOztJQUdqQjs7T0FFRztJQUNhLGNBQWMsQ0FBVTtJQUN4Qzs7T0FFRztJQUNhLFdBQVcsQ0FBTztJQUVsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sd0JBQXdCLEdBQUc7WUFDL0IsSUFBSSxzQkFBWSxDQUNkLGdCQUFnQix5QkFBZ0IsQ0FBQyxPQUFPLG1DQUFtQyx5QkFBZ0IsQ0FBQyxPQUFPLGlCQUFpQixDQUNySDtZQUNELElBQUksc0JBQVksQ0FDZCxnQkFBZ0IsMEJBQWlCLENBQUMsT0FBTyxtQ0FBbUMsMEJBQWlCLENBQUMsT0FBTyxpQkFBaUIsQ0FDdkg7WUFDRCxJQUFJLHNCQUFZLENBQ2QsZ0JBQWdCLHlCQUFnQixDQUFDLE9BQU8sbUNBQW1DLHlCQUFnQixDQUFDLE9BQU8saUJBQWlCLENBQ3JIO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxhQUFHLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxFQUFFO1lBQ25FLGFBQWEsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxFQUFFLGtEQUFrRDtZQUMvRCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07WUFDbkMsS0FBSyxFQUFFLDJDQUFtQztTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUNsQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDO1lBQzNDLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSx5QkFBZSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRTtZQUM1RCxhQUFhLEVBQUUsNERBQW9EO1lBQ25FLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDcEMsV0FBVyxFQUNULDhEQUE4RDtTQUNqRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBRTtZQUN4RSxVQUFVLEVBQUUsNkNBQXFDO1lBQ2pELFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07WUFDbkMsVUFBVSxFQUFFLHlCQUFnQixDQUFDLEdBQUc7WUFDaEMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQy9CLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQ3JDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQztZQUN2RCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTO2dCQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7YUFDdkM7WUFDRCxVQUFVLEVBQUUsd0JBQXdCO1NBQ3JDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFnQjtRQUN2QyxNQUFNLG9CQUFvQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2xFLEtBQUssRUFDTCw0REFBb0QsQ0FDckQsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsYUFBRyxDQUFDLFVBQVUsQ0FDekMsS0FBSyxFQUNMLGtDQUFrQyxFQUNsQyxvQkFBb0IsQ0FDckIsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLGVBQU0sQ0FBQyxvQkFBb0IsQ0FDaEQsS0FBSyxFQUNMLGlDQUFpQyxFQUNqQztZQUNFLFVBQVUsRUFBRSw2Q0FBcUM7WUFDakQsYUFBYSxFQUFFLG9CQUFvQjtTQUNwQyxDQUNGLENBQUM7UUFFRixPQUFPO1lBQ0wsY0FBYyxFQUFFLGNBQWM7WUFDOUIsV0FBVyxFQUFFLG9CQUFvQjtTQUNsQyxDQUFDO0lBQ0osQ0FBQzs7QUF0R0gsc0VBdUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IElLZXksIEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQXJuUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcblxuZXhwb3J0IGNvbnN0IENST1NTX0RFUExPWU1FTlRfQVJUSUZBQ1RfQlVDS0VUX05BTUUgPVxuICBcIm9yY2FidXMtY3Jvc3MtZGVwbG95bWVudC1jb2RlcGlwZWxpbmUtYXJ0aWZhY3RcIjtcblxuZXhwb3J0IGNvbnN0IENST1NTX0RFUExPWU1FTlRfQVJUSUZBQ1RfS01TX0FMSUFTID1cbiAgXCJvcmNhYnVzLWNyb3NzLWRlcGxveW1lbnQtY29kZXBpcGVsaW5lLWFydGlmYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDUk9TU19ERVBMT1lNRU5UX0FSVElGQUNUX0tNU19BUk5fU1NNX1BBUkFNRVRFUl9OQU1FID1cbiAgXCIvb3JjYWJ1cy9kZXBsb3ltZW50LXN0YWNrLXBpcGVsaW5lL2FydGlmYWN0LWJ1Y2tldC9rbXMta2V5LWFyblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB7XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHVzZWQgdG8gc3RvcmUgYXJ0aWZhY3RzIGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0QnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGFydGlmYWN0cyBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdEttczogSUtleTtcbn1cblxuZXhwb3J0IGNsYXNzIENyb3NzRGVwbG95bWVudEFydGlmYWN0QnVja2V0XG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSUNyb3NzRGVwbG95bWVudEFydGlmYWN0QnVja2V0XG57XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHVzZWQgdG8gc3RvcmUgYXJ0aWZhY3RzIGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdEJ1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCBhcnRpZmFjdHMgZm9yIGNyb3NzLWRlcGxveW1lbnQgcGlwZWxpbmVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFydGlmYWN0S21zOiBJS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc3RhZ2VEZXBsb3lSb2xlUHJpbmNpcGFsID0gW1xuICAgICAgbmV3IEFyblByaW5jaXBhbChcbiAgICAgICAgYGFybjphd3M6aWFtOjoke0JFVEFfRU5WSVJPTk1FTlQuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWRlcGxveS1yb2xlLSR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fS1hcC1zb3V0aGVhc3QtMmAsXG4gICAgICApLFxuICAgICAgbmV3IEFyblByaW5jaXBhbChcbiAgICAgICAgYGFybjphd3M6aWFtOjoke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1kZXBsb3ktcm9sZS0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICAgICksXG4gICAgICBuZXcgQXJuUHJpbmNpcGFsKFxuICAgICAgICBgYXJuOmF3czppYW06OiR7UFJPRF9FTlZJUk9OTUVOVC5hY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtZGVwbG95LXJvbGUtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICAgICksXG4gICAgXTtcblxuICAgIHRoaXMuYXJ0aWZhY3RLbXMgPSBuZXcgS2V5KHRoaXMsIFwiS21zS2V5Q29kZXBpcGVsaW5lQXJ0aWZhY3RCdWNrZXRcIiwge1xuICAgICAgcGVuZGluZ1dpbmRvdzogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICBkZXNjcmlwdGlvbjogXCJPcmNhQnVzIENyb3NzIERlcGxveW1lbnQgQXJ0aWZhY3QgQnVja2V0IEtNUyBLZXlcIixcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiBmYWxzZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgYWxpYXM6IENST1NTX0RFUExPWU1FTlRfQVJUSUZBQ1RfS01TX0FMSUFTLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcnRpZmFjdEttcy5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCIsIFwia21zOkRlc2NyaWJlS2V5XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBzdGFnZURlcGxveVJvbGVQcmluY2lwYWwsXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiU1NNQXJ0aWZhY3RCdWNrZXRLbXNBcm5QYXJhbWV0ZXJcIiwge1xuICAgICAgcGFyYW1ldGVyTmFtZTogQ1JPU1NfREVQTE9ZTUVOVF9BUlRJRkFDVF9LTVNfQVJOX1NTTV9QQVJBTUVURVJfTkFNRSxcbiAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLmFydGlmYWN0S21zLmtleUFybixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIktNUyBLZXkgQVJOIGZvciB0aGUgT3JjYUJ1cyBjcm9zcy1kZXBsb3ltZW50IGFydGlmYWN0IGJ1Y2tldFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcnRpZmFjdEJ1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRDb2RlcGlwZWxpbmVDcm9zc0FydGlmYWN0XCIsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IENST1NTX0RFUExPWU1FTlRfQVJUSUZBQ1RfQlVDS0VUX05BTUUsXG4gICAgICB2ZXJzaW9uZWQ6IGZhbHNlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLktNUyxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuYXJ0aWZhY3RLbXMsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcnRpZmFjdEJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdCpcIiwgXCJzMzpHZXRCdWNrZXQqXCIsIFwiczM6TGlzdCpcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHRoaXMuYXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgIHRoaXMuYXJ0aWZhY3RCdWNrZXQuYXJuRm9yT2JqZWN0cyhcIipcIiksXG4gICAgICAgIF0sXG4gICAgICAgIHByaW5jaXBhbHM6IHN0YWdlRGVwbG95Um9sZVByaW5jaXBhbCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhbiBleGlzdGluZyBjcm9zcy1kZXBsb3ltZW50IGFydGlmYWN0IGJ1Y2tldCBhbmQgaXRzIEtNUyBrZXlcbiAgICogdXNpbmcgU1NNIGFuZCByZXNvdXJjZSBsb29rdXBzLlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGxvb2sgdXAgdGhlIGFydGlmYWN0IGJ1Y2tldC5cbiAgICogQHJldHVybnMgSUNyb3NzRGVwbG95bWVudEFydGlmYWN0QnVja2V0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb29rdXAoc2NvcGU6IENvbnN0cnVjdCk6IElDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB7XG4gICAgY29uc3QgYXJ0aWZhY3RCdWNrZXRLbXNBcm4gPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzY29wZSxcbiAgICAgIENST1NTX0RFUExPWU1FTlRfQVJUSUZBQ1RfS01TX0FSTl9TU01fUEFSQU1FVEVSX05BTUUsXG4gICAgKTtcblxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0S21zS2V5ID0gS2V5LmZyb21LZXlBcm4oXG4gICAgICBzY29wZSxcbiAgICAgIFwiS21zS2V5Q29kZXBpcGVsaW5lQXJ0aWZhY3RCdWNrZXRcIixcbiAgICAgIGFydGlmYWN0QnVja2V0S21zQXJuLFxuICAgICk7XG4gICAgY29uc3QgYXJ0aWZhY3RCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldEF0dHJpYnV0ZXMoXG4gICAgICBzY29wZSxcbiAgICAgIFwiQnVja2V0Q29kZXBpcGVsaW5lQ3Jvc3NBcnRpZmFjdFwiLFxuICAgICAge1xuICAgICAgICBidWNrZXROYW1lOiBDUk9TU19ERVBMT1lNRU5UX0FSVElGQUNUX0JVQ0tFVF9OQU1FLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiBhcnRpZmFjdEJ1Y2tldEttc0tleSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldDogYXJ0aWZhY3RCdWNrZXQsXG4gICAgICBhcnRpZmFjdEttczogYXJ0aWZhY3RCdWNrZXRLbXNLZXksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./config"), exports);
|
|
18
18
|
__exportStar(require("./pipeline"), exports);
|
|
19
|
-
|
|
19
|
+
__exportStar(require("./artifact-bucket"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQixvREFBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb25maWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BpcGVsaW5lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbiJdfQ==
|
|
@@ -43,7 +43,10 @@ export interface StackConfigProps {
|
|
|
43
43
|
}
|
|
44
44
|
export interface DeploymentStackPipelineProps {
|
|
45
45
|
/**
|
|
46
|
-
* The
|
|
46
|
+
* The GitHub branch name the pipeline will listen to.
|
|
47
|
+
* Avoid using branch names that contain special characters such as parentheses.
|
|
48
|
+
* Allowed special characters are: "+ - = . _ : / @".
|
|
49
|
+
* This restriction is due to AWS resource tagging requirements.
|
|
47
50
|
*/
|
|
48
51
|
readonly githubBranch: string;
|
|
49
52
|
/**
|
|
@@ -107,7 +110,20 @@ export interface DeploymentStackPipelineProps {
|
|
|
107
110
|
* Only failed pipeline executions will trigger a notification.
|
|
108
111
|
*/
|
|
109
112
|
readonly notificationEvents?: PipelineNotificationEvents[];
|
|
113
|
+
/**
|
|
114
|
+
* Whether to reuse the existing artifact bucket for cross-deployment pipelines.
|
|
115
|
+
* If set to true, it will look up the existing artifact bucket in the TOOLCHAIN account.
|
|
116
|
+
*
|
|
117
|
+
* @default True
|
|
118
|
+
*/
|
|
119
|
+
readonly reuseExistingArtifactBucket?: boolean;
|
|
110
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* A CDK construct that creates a deployment pipeline across environments for the OrcaBus project.
|
|
123
|
+
*
|
|
124
|
+
* Prerequisite: Ensure that the "CrossDeploymentArtifactBucket" stack is deployed in the TOOLCHAIN account
|
|
125
|
+
* before using this construct.
|
|
126
|
+
*/
|
|
111
127
|
export declare class DeploymentStackPipeline extends Construct {
|
|
112
128
|
/**
|
|
113
129
|
* The code pipeline construct that is created.
|
|
@@ -11,6 +11,7 @@ const aws_codepipeline_1 = require("aws-cdk-lib/aws-codepipeline");
|
|
|
11
11
|
const config_1 = require("./config");
|
|
12
12
|
const aws_chatbot_1 = require("aws-cdk-lib/aws-chatbot");
|
|
13
13
|
const aws_codestarnotifications_1 = require("aws-cdk-lib/aws-codestarnotifications");
|
|
14
|
+
const artifact_bucket_1 = require("./artifact-bucket");
|
|
14
15
|
/**
|
|
15
16
|
* The default partial build spec for the synth step in the pipeline.
|
|
16
17
|
*/
|
|
@@ -23,8 +24,14 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
|
|
|
23
24
|
},
|
|
24
25
|
},
|
|
25
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* A CDK construct that creates a deployment pipeline across environments for the OrcaBus project.
|
|
29
|
+
*
|
|
30
|
+
* Prerequisite: Ensure that the "CrossDeploymentArtifactBucket" stack is deployed in the TOOLCHAIN account
|
|
31
|
+
* before using this construct.
|
|
32
|
+
*/
|
|
26
33
|
class DeploymentStackPipeline extends constructs_1.Construct {
|
|
27
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.7-beta.
|
|
34
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.7-beta.10" };
|
|
28
35
|
/**
|
|
29
36
|
* The code pipeline construct that is created.
|
|
30
37
|
*/
|
|
@@ -38,7 +45,11 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
38
45
|
actionName: codeStarSourceActionName,
|
|
39
46
|
triggerOnPush: true,
|
|
40
47
|
});
|
|
48
|
+
const artifactBucket = !!props.reuseExistingArtifactBucket
|
|
49
|
+
? artifact_bucket_1.CrossDeploymentArtifactBucket.fromLookup(this).artifactBucket
|
|
50
|
+
: undefined;
|
|
41
51
|
this.pipeline = new aws_codepipeline_1.Pipeline(this, "DeploymentCodePipeline", {
|
|
52
|
+
artifactBucket: artifactBucket,
|
|
42
53
|
pipelineType: aws_codepipeline_1.PipelineType.V2,
|
|
43
54
|
pipelineName: props.pipelineName,
|
|
44
55
|
crossAccountKeys: true,
|
|
@@ -135,4 +146,4 @@ class DeploymentStage extends aws_cdk_lib_1.Stage {
|
|
|
135
146
|
});
|
|
136
147
|
}
|
|
137
148
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF3RDtBQUN4RCw2REFJbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQUsrQjtBQUMvQixtRUFLc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFFbkU7O0dBRUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHO0lBQ25ELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNQLGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFvR0YsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lBQzFCLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQzNELFlBQVksRUFBRSwrQkFBWSxDQUFDLEVBQUU7WUFDN0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdC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QU0sU0FBUyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRTtnQkFDSixtQkFBbUIsRUFBRSxTQUFTO2dCQUM5QixtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixtQkFBbUIsRUFBRSxTQUFTO2dCQUM5QixrQkFBa0IsRUFBRSxNQUFNO2FBQzNCO1lBQ0QsR0FBRyxhQUFhO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBMaW51eEFybUJ1aWxkSW1hZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIE1hbnVhbEFwcHJvdmFsU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcGFydGlhbCBidWlsZCBzcGVjIGZvciB0aGUgc3ludGggc3RlcCBpbiB0aGUgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDID0ge1xuICBwaGFzZXM6IHtcbiAgICBpbnN0YWxsOiB7XG4gICAgICBcInJ1bnRpbWUtdmVyc2lvbnNcIjoge1xuICAgICAgICBub2RlanM6IFwiMjIueFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUVudlByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGJldGEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgZ2FtbWEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZXRhIChkZXYpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYW1tYSAoc3RnKSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZ2l0aHViIGJyYW5jaCBuYW1lIGl0IHdpbGwgbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViQnJhbmNoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSBuYW1lIHRoYXQgZXhpc3QgaW4gdGhlICdPcmNhQnVzJyBnaXRodWIgb3JnYW5pc2F0aW9uLiBlLmcuIGBhLW1pY3JvLXNlcnZpY2UtcmVwb2BcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YlJlcG86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0byB3aGljaCB0aGUgcGlwZWxpbmUgd2lsbCBiZSBkZXBsb3lpbmcgdG8gaXRzIHJlc3BlY3RpdmUgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGFueTtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIChpbiBjbG91ZGZvcm1hdGlvbikgZm9yIHRoZSBzdGFjayBkZWZpbmVkIGluIGBzdGFja2AuIFRoZSBzdGFjayBuYW1lIHdpbGwgcHJlcGVuZCB3aXRoIHRoZSBzdGFnZVxuICAgKiBuYW1lIGUuZy4gYE9yY2FCdXNCZXRhLTxzdGFja05hbWU+YCwgYE9yY2FCdXNHYW1tYS08c3RhY2tOYW1lPmAsIGBPcmNhQnVzUHJvZC08c3RhY2tOYW1lPmBcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIGNvbmZpZ3VyYXRpb24vY29uc3RhbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHN0YWNrIHByb3BzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tDb25maWc6IFN0YWNrQ29uZmlnUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbmFtZSBpbiB0aGUgYmFzdGlvbiBhY2NvdW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBwYXRocyB0byB0cmlnZ2VyIHRoZSBwaXBlbGluZS4gZS5nLiBbXCJzdGF0ZWxlc3MvKipcIl1cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wieWFybiBpbnN0YWxsIC0taW1tdXRhYmxlXCIsIFwieWFybiBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgcGFzc2VkIGFzIHRoZSBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQ1xuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG59XG5cbmV4cG9ydCBjbGFzcyBEZXBsb3ltZW50U3RhY2tQaXBlbGluZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSBwaXBlbGluZSBjb25zdHJ1Y3QgdGhhdCBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGNvZGVTdGFyQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgdGhpcyxcbiAgICAgIFwiL29yY2FidXMvY29kZXN0YXJfZ2l0aHViX2FyblwiLFxuICAgICk7XG4gICAgY29uc3QgY29kZVN0YXJTb3VyY2VBY3Rpb25OYW1lID0gXCJwaXBlbGluZS1zcmNcIjtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gQ29kZVBpcGVsaW5lU291cmNlLmNvbm5lY3Rpb24oXG4gICAgICBgT3JjYUJ1cy8ke3Byb3BzLmdpdGh1YlJlcG99YCxcbiAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdGlvbkFybjogY29kZVN0YXJBcm4sXG4gICAgICAgIGFjdGlvbk5hbWU6IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSxcbiAgICAgICAgdHJpZ2dlck9uUHVzaDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmZpbGVQYXRocykge1xuICAgICAgLy8gQWRkIGV2ZW50IGZpbHRlciB0byBvbmx5IHRyaWdnZXIgaWYgdGhlIHB1c2ggZXZlbnQgaXMgZnJvbSBgZGVwbG95YCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGNmblBpcGVsaW5lID0gdGhpcy5waXBlbGluZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5QaXBlbGluZTtcbiAgICAgIGNmblBpcGVsaW5lLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJUcmlnZ2Vyc1wiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBHaXRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBQdXNoOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBCcmFuY2hlczoge1xuICAgICAgICAgICAgICAgICAgSW5jbHVkZXM6IFtwcm9wcy5naXRodWJCcmFuY2hdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgRmlsZVBhdGhzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogcHJvcHMuZmlsZVBhdGhzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgU291cmNlQWN0aW9uTmFtZTogY29kZVN0YXJTb3VyY2VBY3Rpb25OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUHJvdmlkZXJUeXBlOiBcIkNvZGVTdGFyU291cmNlQ29ubmVjdGlvblwiLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzeW50aEJ1aWxkU3BlYyA9IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNka1BpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCBcIkNES0NvZGVQaXBlbGluZVwiLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBzeW50aDogbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICAgIGluc3RhbGxDb21tYW5kczogW1xuICAgICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgICAgXCJjb3JlcGFjayAtLXZlcnNpb25cIixcbiAgICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBdLFxuICAgICAgICBjb21tYW5kczogcHJvcHMuY2RrU3ludGhDbWQsXG4gICAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHN5bnRoQnVpbGRTcGVjKSxcbiAgICAgIH0pLFxuICAgICAgc2VsZk11dGF0aW9uOiB0cnVlLFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRTdGFnZUVudjogU3RhZ2VFbnZQcm9wcyA9IHtcbiAgICAgIGJldGE6IEJFVEFfRU5WSVJPTk1FTlQsXG4gICAgICBnYW1tYTogR0FNTUFfRU5WSVJPTk1FTlQsXG4gICAgICBwcm9kOiBQUk9EX0VOVklST05NRU5ULFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VFbnYgPSBwcm9wcy5zdGFnZUVudiB8fCBkZWZhdWx0U3RhZ2VFbnY7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiT3JjYUJ1c0JldGFcIixcbiAgICAgICAgc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuYmV0YSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk9yY2FCdXNHYW1tYVwiLFxuICAgICAgICBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuZ2FtbWEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7IHBvc3Q6IFtuZXcgTWFudWFsQXBwcm92YWxTdGVwKFwiUHJvbW90ZVRvUHJvZFwiKV0gfSxcbiAgICApO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk9yY2FCdXNQcm9kXCIsXG4gICAgICAgIHN0YWdlRW52LnByb2QsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLnByb2QsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF1RTtBQUN2RSw2REFJbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQUsrQjtBQUMvQixtRUFLc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBRWxFOztHQUVHO0FBQ1UsUUFBQSxxQ0FBcUMsR0FBRztJQUNuRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBK0dGOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lBQzFCLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQywyQkFBMkI7WUFDeEQsQ0FBQyxDQUFDLCtDQUE2QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjO1lB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QyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUMsSUFBSSxNQUFNLEdBQUcsOEJBQThCLFVBQVUsRUFBRSxDQUFDO1FBQ3hELElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLFlBQVksRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFO2dCQUNKLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLGtCQUFrQixFQUFFLE1BQU07YUFDM0I7WUFDRCxHQUFHLGFBQWE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEVudmlyb25tZW50LCBSZW1vdmFsUG9saWN5LCBTdGFjaywgU3RhZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIEJ1aWxkU3BlYyxcbiAgQ29tcHV0ZVR5cGUsXG4gIExpbnV4QXJtQnVpbGRJbWFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQge1xuICBDb2RlQnVpbGRTdGVwLFxuICBDb2RlUGlwZWxpbmUsXG4gIENvZGVQaXBlbGluZVNvdXJjZSxcbiAgTWFudWFsQXBwcm92YWxTdGVwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge1xuICBQaXBlbGluZSxcbiAgQ2ZuUGlwZWxpbmUsXG4gIFBpcGVsaW5lVHlwZSxcbiAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lXCI7XG5pbXBvcnQge1xuICBCRVRBX0VOVklST05NRU5ULFxuICBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgUFJPRF9FTlZJUk9OTUVOVCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgeyBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jaGF0Ym90XCI7XG5pbXBvcnQgeyBEZXRhaWxUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2Rlc3Rhcm5vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCB7IENyb3NzRGVwbG95bWVudEFydGlmYWN0QnVja2V0IH0gZnJvbSBcIi4vYXJ0aWZhY3QtYnVja2V0XCI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcGFydGlhbCBidWlsZCBzcGVjIGZvciB0aGUgc3ludGggc3RlcCBpbiB0aGUgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDID0ge1xuICBwaGFzZXM6IHtcbiAgICBpbnN0YWxsOiB7XG4gICAgICBcInJ1bnRpbWUtdmVyc2lvbnNcIjoge1xuICAgICAgICBub2RlanM6IFwiMjIueFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUVudlByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGJldGEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgZ2FtbWEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZXRhIChkZXYpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYW1tYSAoc3RnKSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmaWxlIHBhdGhzIHRvIHRyaWdnZXIgdGhlIHBpcGVsaW5lLiBlLmcuIFtcInN0YXRlbGVzcy8qKlwiXVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jb2RlcGlwZWxpbmUtcGlwZWxpbmUtZ2l0ZmlsZXBhdGhmaWx0ZXJjcml0ZXJpYS5odG1sXG4gICAqXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1biB0byBzeW50aCB0aGUgY2RrIHN0YWNrIHdoaWNoIGFsc28gaW5zdGFsbGluZyB0aGUgY2RrIGRlcGVuZGVuY2llcy4gZS5nLiBbXCJ5YXJuIGluc3RhbGwgLS1pbW11dGFibGVcIiwgXCJ5YXJuIGNkayBzeW50aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU3ludGhDbWQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjZGsgb3V0cHV0IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBjZGtPdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcCBkdXJpbmcgdGhlIENESyBzeW50aCBwaGFzZS4gSXQgd2lsbCBwYXNzZWQgYXMgdGhlIGBwYXJ0aWFsQnVpbGRTcGVjYCB0byB0aGUgYENvZGVCdWlsZFN0ZXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDXG4gICAqL1xuICByZWFkb25seSBzeW50aEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBkZXBsb3ltZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFnZUVudj86IFN0YWdlRW52UHJvcHM7XG4gIC8qKlxuICAgKiBFbmFibGUgbm90aWZpY2F0aW9uIHRvIHRoZSAnYWxlcnRzLWJ1aWxkJyBzbGFjayBjaGFubmVsLlxuICAgKiBAZGVmYXVsdCBUcnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTbGFja05vdGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIFNsYWNrIGNoYW5uZWwgbm90aWZpY2F0aW9uLlxuICAgKiBPbmx5IGFwcGxpZXMgaWYgYGVuYWJsZVNsYWNrTm90aWZpY2F0aW9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1BpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRURdIOKAk1xuICAgKiAgIE9ubHkgZmFpbGVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgd2lsbCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXVzZSB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgbG9vayB1cCB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VFeGlzdGluZ0FydGlmYWN0QnVja2V0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGEgZGVwbG95bWVudCBwaXBlbGluZSBhY3Jvc3MgZW52aXJvbm1lbnRzIGZvciB0aGUgT3JjYUJ1cyBwcm9qZWN0LlxuICpcbiAqIFByZXJlcXVpc2l0ZTogRW5zdXJlIHRoYXQgdGhlIFwiQ3Jvc3NEZXBsb3ltZW50QXJ0aWZhY3RCdWNrZXRcIiBzdGFjayBpcyBkZXBsb3llZCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnRcbiAqIGJlZm9yZSB1c2luZyB0aGlzIGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIERlcGxveW1lbnRTdGFja1BpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBjb2RlIHBpcGVsaW5lIGNvbnN0cnVjdCB0aGF0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZTogUGlwZWxpbmU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEZXBsb3ltZW50U3RhY2tQaXBlbGluZVByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29kZVN0YXJBcm4gPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICB0aGlzLFxuICAgICAgXCIvb3JjYWJ1cy9jb2Rlc3Rhcl9naXRodWJfYXJuXCIsXG4gICAgKTtcbiAgICBjb25zdCBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUgPSBcInBpcGVsaW5lLXNyY1wiO1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBDb2RlUGlwZWxpbmVTb3VyY2UuY29ubmVjdGlvbihcbiAgICAgIGBPcmNhQnVzLyR7cHJvcHMuZ2l0aHViUmVwb31gLFxuICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAge1xuICAgICAgICBjb25uZWN0aW9uQXJuOiBjb2RlU3RhckFybixcbiAgICAgICAgYWN0aW9uTmFtZTogY29kZVN0YXJTb3VyY2VBY3Rpb25OYW1lLFxuICAgICAgICB0cmlnZ2VyT25QdXNoOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYXJ0aWZhY3RCdWNrZXQgPSAhIXByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmZpbGVQYXRocykge1xuICAgICAgLy8gQWRkIGV2ZW50IGZpbHRlciB0byBvbmx5IHRyaWdnZXIgaWYgdGhlIHB1c2ggZXZlbnQgaXMgZnJvbSBgZGVwbG95YCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGNmblBpcGVsaW5lID0gdGhpcy5waXBlbGluZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5QaXBlbGluZTtcbiAgICAgIGNmblBpcGVsaW5lLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJUcmlnZ2Vyc1wiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBHaXRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBQdXNoOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBCcmFuY2hlczoge1xuICAgICAgICAgICAgICAgICAgSW5jbHVkZXM6IFtwcm9wcy5naXRodWJCcmFuY2hdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgRmlsZVBhdGhzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogcHJvcHMuZmlsZVBhdGhzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgU291cmNlQWN0aW9uTmFtZTogY29kZVN0YXJTb3VyY2VBY3Rpb25OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUHJvdmlkZXJUeXBlOiBcIkNvZGVTdGFyU291cmNlQ29ubmVjdGlvblwiLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzeW50aEJ1aWxkU3BlYyA9IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNka1BpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCBcIkNES0NvZGVQaXBlbGluZVwiLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBzeW50aDogbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICAgIGluc3RhbGxDb21tYW5kczogW1xuICAgICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgICAgXCJjb3JlcGFjayAtLXZlcnNpb25cIixcbiAgICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBdLFxuICAgICAgICBjb21tYW5kczogcHJvcHMuY2RrU3ludGhDbWQsXG4gICAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHN5bnRoQnVpbGRTcGVjKSxcbiAgICAgIH0pLFxuICAgICAgc2VsZk11dGF0aW9uOiB0cnVlLFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRTdGFnZUVudjogU3RhZ2VFbnZQcm9wcyA9IHtcbiAgICAgIGJldGE6IEJFVEFfRU5WSVJPTk1FTlQsXG4gICAgICBnYW1tYTogR0FNTUFfRU5WSVJPTk1FTlQsXG4gICAgICBwcm9kOiBQUk9EX0VOVklST05NRU5ULFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VFbnYgPSBwcm9wcy5zdGFnZUVudiB8fCBkZWZhdWx0U3RhZ2VFbnY7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiT3JjYUJ1c0JldGFcIixcbiAgICAgICAgc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuYmV0YSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk9yY2FCdXNHYW1tYVwiLFxuICAgICAgICBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuZ2FtbWEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7IHBvc3Q6IFtuZXcgTWFudWFsQXBwcm92YWxTdGVwKFwiUHJvbW90ZVRvUHJvZFwiKV0gfSxcbiAgICApO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk9yY2FCdXNQcm9kXCIsXG4gICAgICAgIHN0YWdlRW52LnByb2QsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLnByb2QsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
package/dynamodb/index.js
CHANGED
|
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
|
|
|
40
40
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
41
|
const config_1 = require("./config");
|
|
42
42
|
class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
43
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.7-beta.
|
|
43
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.7-beta.10" };
|
|
44
44
|
table;
|
|
45
45
|
constructor(scope, id, props) {
|
|
46
46
|
super(scope, id);
|
|
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
|
75
75
|
}
|
|
76
76
|
exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
|
|
77
77
|
class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
|
|
78
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.7-beta.
|
|
78
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.7-beta.10" };
|
|
79
79
|
table;
|
|
80
80
|
constructor(scope, id, props) {
|
|
81
81
|
super(scope, id);
|
package/ecs/index.js
CHANGED
|
@@ -52,7 +52,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
|
|
|
52
52
|
['ARM64']: lambda.Architecture.ARM_64
|
|
53
53
|
};
|
|
54
54
|
class EcsFargateTaskConstruct extends constructs_1.Construct {
|
|
55
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.7-beta.
|
|
55
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.7-beta.10" };
|
|
56
56
|
cluster;
|
|
57
57
|
taskDefinition;
|
|
58
58
|
securityGroup;
|
package/lambda/index.d.ts
CHANGED
|
@@ -48,6 +48,10 @@ export interface PythonUvFunctionProps extends PythonFunctionProps {
|
|
|
48
48
|
* Whether or not to include the icav2 layer in the lambda function build
|
|
49
49
|
*/
|
|
50
50
|
readonly includeIcav2Layer?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Whether or not to include the fastapi layer in the lambda function build
|
|
53
|
+
*/
|
|
54
|
+
readonly includeFastApiLayer?: boolean;
|
|
51
55
|
/**
|
|
52
56
|
* Provide the orcabusTokenResources, optional, otherwise it will default to
|
|
53
57
|
* @DEFAULT_ORCABUS_TOKEN_SECRET_ID and @DEFAULT_HOSTNAME_SSM_PARAMETER
|
|
@@ -70,10 +74,12 @@ export declare class PythonUvFunction extends PythonFunction {
|
|
|
70
74
|
private static orcabusApiToolsLayer;
|
|
71
75
|
private static martLayer;
|
|
72
76
|
private static icav2Layer;
|
|
77
|
+
private static fastApiLayer;
|
|
73
78
|
constructor(scope: Construct, id: string, props: PythonUvFunctionProps);
|
|
74
79
|
private buildOrcabusApiToolsLayer;
|
|
75
80
|
private buildMartToolsLayer;
|
|
76
81
|
private buildIcav2Layer;
|
|
82
|
+
private buildFastApiLayer;
|
|
77
83
|
private setOrcabusResources;
|
|
78
84
|
private setAthenaResources;
|
|
79
85
|
private setIcav2Resources;
|
package/lambda/index.js
CHANGED
|
@@ -54,13 +54,14 @@ function getPythonUvDockerImage() {
|
|
|
54
54
|
return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
|
|
55
55
|
}
|
|
56
56
|
class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
57
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.7-beta.
|
|
57
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.7-beta.10" };
|
|
58
58
|
// Class constructs, to be used for caching the layers
|
|
59
59
|
// This means that if there are multiple lambdas throughout the stack
|
|
60
60
|
// They will all use the same layer
|
|
61
61
|
static orcabusApiToolsLayer = new Map();
|
|
62
62
|
static martLayer = new Map();
|
|
63
63
|
static icav2Layer = new Map();
|
|
64
|
+
static fastApiLayer = new Map();
|
|
64
65
|
constructor(scope, id, props) {
|
|
65
66
|
const uvProps = {
|
|
66
67
|
...props,
|
|
@@ -112,6 +113,11 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
112
113
|
this.buildIcav2Layer(scope);
|
|
113
114
|
this.addLayers(PythonUvFunction.icav2Layer.get(scope));
|
|
114
115
|
}
|
|
116
|
+
if (props.includeFastApiLayer) {
|
|
117
|
+
/* Build the fastapi layer */
|
|
118
|
+
this.buildFastApiLayer(scope);
|
|
119
|
+
this.addLayers(PythonUvFunction.fastApiLayer.get(scope));
|
|
120
|
+
}
|
|
115
121
|
}
|
|
116
122
|
buildOrcabusApiToolsLayer(scope) {
|
|
117
123
|
// Only build orcabus api layer if it doesn't exist
|
|
@@ -197,6 +203,34 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
197
203
|
PythonUvFunction.icav2Layer.set(scope, layer);
|
|
198
204
|
}
|
|
199
205
|
}
|
|
206
|
+
buildFastApiLayer(scope) {
|
|
207
|
+
// Only build the layer if it doesn't exist
|
|
208
|
+
if (!PythonUvFunction.fastApiLayer.has(scope)) {
|
|
209
|
+
const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(this, 'fastApiLayer', {
|
|
210
|
+
entry: path_1.default.join(__dirname, 'layers/fastapi_tools'),
|
|
211
|
+
compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
|
|
212
|
+
compatibleArchitectures: [lambda.Architecture.ARM_64],
|
|
213
|
+
license: 'GPL3',
|
|
214
|
+
description: 'fastApiLayer',
|
|
215
|
+
bundling: {
|
|
216
|
+
image: getPythonUvDockerImage(),
|
|
217
|
+
commandHooks: {
|
|
218
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
219
|
+
beforeBundling(inputDir, outputDir) {
|
|
220
|
+
return [];
|
|
221
|
+
},
|
|
222
|
+
afterBundling(inputDir, outputDir) {
|
|
223
|
+
return [
|
|
224
|
+
`pip install ${inputDir} --target ${outputDir}`,
|
|
225
|
+
`find ${outputDir} -name 'pandas' -exec rm -rf {}/tests/ \\;`,
|
|
226
|
+
];
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
PythonUvFunction.fastApiLayer.set(scope, layer);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
200
234
|
setOrcabusResources(props) {
|
|
201
235
|
// Set secret object
|
|
202
236
|
const orcabusTokenSecretId = secretsManager.Secret.fromSecretNameV2(this, 'orcabusTokenSecretId', props.orcabusTokenSecretId ?? config_1.DEFAULT_ORCABUS_TOKEN_SECRET_ID);
|
|
@@ -211,7 +245,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
211
245
|
}
|
|
212
246
|
setAthenaResources(props) {
|
|
213
247
|
// Resolve the stage name by performing a reverse lookup using cdk.Aws.ACCOUNT_ID on accountIdAlias
|
|
214
|
-
const stageName = (0, utils_1.resolveStageName)();
|
|
248
|
+
const stageName = (0, utils_1.resolveStageName)(this);
|
|
215
249
|
const athenaS3Bucket = s3.Bucket.fromBucketName(this, 'athenaS3Bucket', config_1.MART_S3_BUCKET[stageName]);
|
|
216
250
|
const athenaFunctionName = lambda.Function.fromFunctionName(this, 'lambdaFunctionName', config_1.MART_LAMBDA_FUNCTION_NAME);
|
|
217
251
|
// Add env vars
|
|
@@ -276,7 +310,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
276
310
|
}
|
|
277
311
|
setIcav2Resources(props) {
|
|
278
312
|
// Resolve the stage name by performing a reverse lookup using cdk.Aws.ACCOUNT_ID on accountIdAlias
|
|
279
|
-
const stageName = (0, utils_1.resolveStageName)();
|
|
313
|
+
const stageName = (0, utils_1.resolveStageName)(this);
|
|
280
314
|
// Set secret object
|
|
281
315
|
const icav2AccessTokenSecretId = secretsManager.Secret.fromSecretNameV2(this, 'icav2AccessTokenSecretId', props.icav2AccessTokenSecretId ?? config_1.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID[stageName]);
|
|
282
316
|
// Add permissions for the secret and SSM parameter
|
|
@@ -287,4 +321,4 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
287
321
|
}
|
|
288
322
|
}
|
|
289
323
|
exports.PythonUvFunction = PythonUvFunction;
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQVNrQjtBQUNsQixvQ0FBa0U7QUFHbEUsU0FBZ0Isc0JBQXNCO0lBQ2xDLE9BQU8seUJBQVcsQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBZ0ZELE1BQWEsZ0JBQWlCLFNBQVEsd0NBQWM7O0lBQ2hELHNEQUFzRDtJQUN0RCxxRUFBcUU7SUFDckUsbUNBQW1DO0lBQzNCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM5RSxNQUFNLENBQUMsU0FBUyxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFNUUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNsRSxNQUFNLE9BQU8sR0FBRztZQUNaLEdBQUcsS0FBSztZQUNSLFFBQVEsRUFBRTtnQkFDTixHQUFHLEtBQUssQ0FBQyxRQUFRO2dCQUNqQixTQUFTLEVBQUU7b0JBQ1AsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVM7b0JBQzVCLDJEQUEyRDtvQkFDM0QsY0FBYyxFQUNWLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGNBQWMsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjO2lCQUM3RjtnQkFDRCxL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Q0FBQyxjQUFjLHNCQUFhLENBQUMsbUJBQW1CLEVBQUU7YUFDekc7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxjQUFjLENBQUMsY0FBYyxDQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixHQUFHLHVCQUFjLEdBQUcsQ0FDdkIsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUE7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQ3JCLEtBQTBCO1FBRTFCLG1HQUFtRztRQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixHQUFFLENBQUE7UUFFcEMsb0JBQW9CO1FBQ3BCLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDbkUsSUFBSSxFQUFFLDBCQUEwQixFQUNoQyxLQUFLLENBQUMsd0JBQXdCLElBQUksNkNBQW9DLENBQUMsU0FBUyxDQUFDLENBQ3BGLENBQUM7UUFFRixtREFBbUQ7UUFDbkQseUJBQXlCO1FBQ3pCLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQ2YsOEJBQThCLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxDQUN0RSxDQUFBO0lBQ0wsQ0FBQzs7QUFuU0wsNENBcVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQeXRob25GdW5jdGlvbiwgUHl0aG9uRnVuY3Rpb25Qcm9wcywgUHl0aG9uTGF5ZXJWZXJzaW9ufSBmcm9tIFwiQGF3cy1jZGsvYXdzLWxhbWJkYS1weXRob24tYWxwaGFcIjtcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgKiBhcyBzZWNyZXRzTWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtEb2NrZXJJbWFnZX0gZnJvbSAnYXdzLWNkay1saWInO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQge1xuICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24sXG4gICAgUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLFxuICAgIFBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge1xuICAgIC8vIE9yY2FidXMgZGVmYXVsdHNcbiAgICBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVIsIERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQsXG4gICAgLy8gTWFydCBkZWZhdWx0c1xuICAgIE1BUlRfRU5WX1ZBUlMsIE1BUlRfTEFNQkRBX0ZVTkNUSU9OX05BTUUsXG4gICAgTUFSVF9TM19CVUNLRVQsXG4gICAgTUFSVF9TM19QUkVGSVgsXG4gICAgLy8gSUNBVjIgZGVmYXVsdHNcbiAgICBERUZBVUxUX0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge2FjY291bnRJZEFsaWFzLCByZWdpb24sIHJlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQ/OiBzdHJpbmdcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblV2RnVuY3Rpb25Qcm9wcyBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIG9yY2FidXMgYXBpIHRvb2xzIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlT3JjYWJ1c0FwaVRvb2xzTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBtYXJ0IGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKiBOb3RlIHRoYXQgdGhlIG1hcnQgbGF5ZXIgaXMgYSBsaXR0bGUgaGVhdmllciB0aGFuIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllclxuICAgICAqIFNpbmNlIHdlIHJlcXVpcmUgcGFuZGFzIHRvIGJlIGluc3RhbGxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVNYXJ0TGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBpY2F2MiBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUljYXYyTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5SZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgYW5kIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKiBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlciByZXNwZWN0aXZlbHlcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5SZXNvdXJjZXM/OiBPcmNhYnVzUmVzb3VyY2VzUHJvcHNcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUUsIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBU09VUkNFX05BTUVcbiAgICAgKiBhbmQgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUUgZm9yIHRoZSBhdGhlbmEgd29ya2dyb3VwLCBkYXRhc291cmNlIGFuZCBkYXRhYmFzZSByZXNwZWN0aXZlbHlcbiAgICAgKi9cbiAgICByZWFkb25seSBtYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXM/OiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGljYXYyUmVzb3VyY2VzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBERUZBVUxUX0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQgZm9yIHRoZSBzZWNyZXRcbiAgICAgKi9cbiAgICByZWFkb25seSBpY2F2MlJlc291cmNlcz86IEljYXYyUmVzb3VyY2VzUHJvcHNcbn1cblxuXG5leHBvcnQgY2xhc3MgUHl0aG9uVXZGdW5jdGlvbiBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uIHtcbiAgICAvLyBDbGFzcyBjb25zdHJ1Y3RzLCB0byBiZSB1c2VkIGZvciBjYWNoaW5nIHRoZSBsYXllcnNcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGxhbWJkYXMgdGhyb3VnaG91dCB0aGUgc3RhY2tcbiAgICAvLyBUaGV5IHdpbGwgYWxsIHVzZSB0aGUgc2FtZSBsYXllclxuICAgIHByaXZhdGUgc3RhdGljIG9yY2FidXNBcGlUb29sc0xheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbWFydExheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaWNhdjJMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB5dGhvblV2RnVuY3Rpb25Qcm9wcykge1xuICAgICAgICBjb25zdCB1dlByb3BzID0ge1xuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nLFxuICAgICAgICAgICAgICAgIGJ1aWxkQXJnczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcm9wcy5idW5kbGluZz8uYnVpbGRBcmdzLFxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgVEFSR0VUUExBVEZPUk0gdG8gYnVpbGQgYXJncyBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICAgICAgICAgICAgICBUQVJHRVRQTEFURk9STTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3M/LlRBUkdFVFBMQVRGT1JNID8/IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LmRvY2tlclBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtgcm0gLXJmICR7b3V0cHV0RGlyfS9wYW5kYXMvdGVzdHNgXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdvcmNhYnVzQXBpVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9vcmNhYnVzX2FwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdvcmNhYnVzQXBpVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgdGhlIGxheWVyIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ21hcnRUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL21hcnRfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWFydFRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRJY2F2MkxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ2ljYXYyVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9pY2F2Ml90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpY2F2MlRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE9yY2FidXNSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBPcmNhYnVzUmVzb3VyY2VzUHJvcHNcbiAgICApIHtcbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JjYWJ1c1Rva2VuU2VjcmV0SWQgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdvcmNhYnVzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5vcmNhYnVzVG9rZW5TZWNyZXRJZCA/PyBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lJyxcbiAgICAgICAgICAgIHByb3BzLmhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSA/PyBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVIsXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBvcmNhYnVzVG9rZW5TZWNyZXRJZC5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbik7XG4gICAgICAgIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbilcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQnLCBvcmNhYnVzVG9rZW5TZWNyZXRJZC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSE9TVE5BTUVfU1NNX1BBUkFNRVRFUl9OQU1FJywgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLnBhcmFtZXRlck5hbWUsXG4gICAgICAgIClcbiAgICB9XG5cblxuICAgIHByaXZhdGUgc2V0QXRoZW5hUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogTWFydEVudmlyb25tZW50VmFyaWFibGVzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBhY2NvdW50SWRBbGlhc1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKClcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7cmVnaW9ufToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke3JlZ2lvbn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSgpXG5cbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3QgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLmljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA/PyBERUZBVUxUX0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURbc3RhZ2VOYW1lXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZC5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbik7XG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQnLCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQuc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxufVxuXG5cblxuXG4iXX0=
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQVNrQjtBQUNsQixvQ0FBa0U7QUFHbEUsU0FBZ0Isc0JBQXNCO0lBQ2xDLE9BQU8seUJBQVcsQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBcUZELE1BQWEsZ0JBQWlCLFNBQVEsd0NBQWM7O0lBQ2hELHNEQUFzRDtJQUN0RCxxRUFBcUU7SUFDckUsbUNBQW1DO0lBQzNCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM5RSxNQUFNLENBQUMsU0FBUyxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDcEUsTUFBTSxDQUFDLFlBQVksR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU5RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ2xFLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFO2dCQUNOLEdBQUcsS0FBSyxDQUFDLFFBQVE7Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDUCxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUztvQkFDNUIsMkRBQTJEO29CQUMzRCxjQUFjLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLE1B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QkFDL0IsZ0NBQWdDO2dCQUNoQyxnQ0FBZ0M7YUFDbkM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Asa0JBQWtCLGNBQU0sSUFBSSxzQkFBYyxDQUFDLFNBQVMsQ0FBQyxjQUFjLHNCQUFhLENBQUMsbUJBQW1CLEVBQUU7YUFDekc7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxjQUFjLENBQUMsY0FBYyxDQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixHQUFHLHVCQUFjLEdBQUcsQ0FDdkIsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUE7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQ3JCLEtBQTBCO1FBRTFCLG1HQUFtRztRQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhDLG9CQUFvQjtRQUNwQixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQ25FLElBQUksRUFBRSwwQkFBMEIsRUFDaEMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLDZDQUFvQyxDQUFDLFNBQVMsQ0FBQyxDQUNwRixDQUFDO1FBRUYsbURBQW1EO1FBQ25ELHlCQUF5QjtRQUN6Qix3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLHdCQUF3QixDQUFDLFVBQVUsQ0FDdEUsQ0FBQTtJQUNMLENBQUM7O0FBdlVMLDRDQXlVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxuICAgIC8vIElDQVYyIGRlZmF1bHRzXG4gICAgREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHthY2NvdW50SWRBbGlhcywgcmVnaW9uLCByZXNvbHZlU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpOiBEb2NrZXJJbWFnZSB7XG4gICAgcmV0dXJuIERvY2tlckltYWdlLmZyb21CdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnYnVpbGRfcHl0aG9uJykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2FidXNSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuU2VjcmV0SWQsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5TZWNyZXRJZD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYVdvcmtncm91cE5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hV29ya2dyb3VwTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YXNvdXJjZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuYXRoZW5hRGF0YXNvdXJjZU5hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhc291cmNlTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YWJhc2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNhdjJSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGlkIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyB0aGUgaWNhdjIgYWNjZXNzIHRva2VuXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ29yY2FidXNBcGlUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL29yY2FidXNfYXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ29yY2FidXNBcGlUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdmYXN0QXBpTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvZmFzdGFwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdmYXN0QXBpTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIGFjY291bnRJZEFsaWFzXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7cmVnaW9ufToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke3JlZ2lvbn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ2ljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICB9XG5cbn1cblxuXG5cblxuIl19
|
|
@@ -65,9 +65,9 @@ def icav2_wes_post_request(
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
# Set all
|
|
68
|
-
from create_helpers import create_icav2_wes_analysis
|
|
69
|
-
from query_helpers import get_icav2_wes_analysis_by_name
|
|
70
|
-
from update_helpers import update_icav2_wes_analysis_status
|
|
68
|
+
from .create_helpers import create_icav2_wes_analysis
|
|
69
|
+
from .query_helpers import get_icav2_wes_analysis_by_name
|
|
70
|
+
from .update_helpers import update_icav2_wes_analysis_status
|
|
71
71
|
|
|
72
72
|
__all__ = [
|
|
73
73
|
# Launch helpers
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from . import icav2_wes_patch_request
|
|
4
5
|
from .globals import ANALYSES_ENDPOINT
|
|
@@ -7,17 +8,19 @@ from .models import WESResponse
|
|
|
7
8
|
# Get the icav2 wes analysis by analysis name
|
|
8
9
|
def update_icav2_wes_analysis_status(
|
|
9
10
|
icav2_wes_orcabus_id: str,
|
|
10
|
-
status: str
|
|
11
|
+
status: str,
|
|
12
|
+
icav2_analysis_id: Optional[str] = None
|
|
11
13
|
) -> WESResponse:
|
|
12
14
|
"""
|
|
13
15
|
Get the icav2 wes analysis by analysis name
|
|
14
16
|
"""
|
|
15
|
-
|
|
17
|
+
return icav2_wes_patch_request(
|
|
16
18
|
f"{ANALYSES_ENDPOINT}/{icav2_wes_orcabus_id}",
|
|
17
|
-
params=
|
|
19
|
+
params=dict(filter(
|
|
20
|
+
lambda kv_iter_: kv_iter_[1] is not None,
|
|
21
|
+
{
|
|
22
|
+
"status": status,
|
|
23
|
+
"icav2AnalysisId": icav2_analysis_id
|
|
24
|
+
}.items()
|
|
25
|
+
))
|
|
18
26
|
)
|
|
19
|
-
|
|
20
|
-
if not len(response_results) == 1:
|
|
21
|
-
raise ValueError(f"Expected 1 result, got {len(response_results)}")
|
|
22
|
-
|
|
23
|
-
return response_results[0]
|
package/package.json
CHANGED
package/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
1
2
|
export type StageName = "BETA" | "GAMMA" | "PROD";
|
|
2
3
|
export declare const region = "ap-southeast-2";
|
|
3
4
|
export declare const accountIdAlias: Record<StageName, string>;
|
|
4
|
-
export declare function resolveStageName(): StageName;
|
|
5
|
+
export declare function resolveStageName(scope: Construct): StageName;
|
package/utils/index.js
CHANGED
|
@@ -1,52 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.accountIdAlias = exports.region = void 0;
|
|
37
4
|
exports.resolveStageName = resolveStageName;
|
|
38
|
-
const
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
39
6
|
exports.region = 'ap-southeast-2';
|
|
40
7
|
exports.accountIdAlias = {
|
|
41
8
|
BETA: '843407916570', // umccr_development
|
|
42
9
|
GAMMA: '455634345446', // umccr_staging
|
|
43
10
|
PROD: '472057503814', // umccr_production
|
|
44
11
|
};
|
|
45
|
-
function resolveStageName() {
|
|
46
|
-
|
|
12
|
+
function resolveStageName(scope) {
|
|
13
|
+
// See discussion in https://github.com/aws/aws-cdk/issues/1754
|
|
14
|
+
// Use Stack.of(scope).account to get the account ID instead of
|
|
15
|
+
// cdk.Aws.ACCOUNT_ID, which may not be available at this point in the CDK lifecycle.
|
|
16
|
+
const match = Object.entries(exports.accountIdAlias).find(([_, value]) => value === aws_cdk_lib_1.Stack.of(scope).account);
|
|
47
17
|
if (!match) {
|
|
48
|
-
throw new Error(`Account ID ${
|
|
18
|
+
throw new Error(`Account ID ${aws_cdk_lib_1.Stack.of(scope).account} not found in accountIdAlias`);
|
|
49
19
|
}
|
|
50
20
|
return match[0];
|
|
51
21
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSw0Q0FXQztBQXZCRCw2Q0FBa0M7QUFJckIsUUFBQSxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7QUFFMUIsUUFBQSxjQUFjLEdBQThCO0lBQ3ZELElBQUksRUFBRSxjQUFjLEVBQUUsb0JBQW9CO0lBQzFDLEtBQUssRUFBRSxjQUFjLEVBQUUsZ0JBQWdCO0lBQ3ZDLElBQUksRUFBRSxjQUFjLEVBQUUsbUJBQW1CO0NBQzFDLENBQUM7QUFFRixTQUFnQixnQkFBZ0IsQ0FBQyxLQUFnQjtJQUM3QywrREFBK0Q7SUFDL0QsK0RBQStEO0lBQy9ELHFGQUFxRjtJQUNyRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXBHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLDhCQUE4QixDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBYyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7U3RhY2t9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgdHlwZSBTdGFnZU5hbWUgPSBcIkJFVEFcIiB8IFwiR0FNTUFcIiB8IFwiUFJPRFwiO1xuXG5leHBvcnQgY29uc3QgcmVnaW9uID0gJ2FwLXNvdXRoZWFzdC0yJztcblxuZXhwb3J0IGNvbnN0IGFjY291bnRJZEFsaWFzOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiAnODQzNDA3OTE2NTcwJywgLy8gdW1jY3JfZGV2ZWxvcG1lbnRcbiAgR0FNTUE6ICc0NTU2MzQzNDU0NDYnLCAvLyB1bWNjcl9zdGFnaW5nXG4gIFBST0Q6ICc0NzIwNTc1MDM4MTQnLCAvLyB1bWNjcl9wcm9kdWN0aW9uXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN0YWdlTmFtZShzY29wZTogQ29uc3RydWN0KTogU3RhZ2VOYW1lIHtcbiAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE3NTRcbiAgICAvLyBVc2UgU3RhY2sub2Yoc2NvcGUpLmFjY291bnQgdG8gZ2V0IHRoZSBhY2NvdW50IElEIGluc3RlYWQgb2ZcbiAgICAvLyBjZGsuQXdzLkFDQ09VTlRfSUQsIHdoaWNoIG1heSBub3QgYmUgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgaW4gdGhlIENESyBsaWZlY3ljbGUuXG4gICAgY29uc3QgbWF0Y2ggPSBPYmplY3QuZW50cmllcyhhY2NvdW50SWRBbGlhcykuZmluZCgoW18sIHZhbHVlXSkgPT4gdmFsdWUgPT09IFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50KVxuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjY291bnQgSUQgJHtTdGFjay5vZihzY29wZSkuYWNjb3VudH0gbm90IGZvdW5kIGluIGFjY291bnRJZEFsaWFzYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoWzBdIGFzIFN0YWdlTmFtZTtcbn0iXX0=
|