@orcabus/platform-cdk-constructs 0.0.104 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -4604,6 +4604,67 @@
4604
4604
  ],
4605
4605
  "symbolId": "api-gateway/api-gateway:OrcaBusApiGatewayProps"
4606
4606
  },
4607
+ "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps": {
4608
+ "assembly": "@orcabus/platform-cdk-constructs",
4609
+ "datatype": true,
4610
+ "docs": {
4611
+ "stability": "experimental"
4612
+ },
4613
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps",
4614
+ "kind": "interface",
4615
+ "locationInModule": {
4616
+ "filename": "deployment-stack-pipeline/pipeline.ts",
4617
+ "line": 106
4618
+ },
4619
+ "name": "CodeBuildStepProps",
4620
+ "namespace": "deploymentPipeline",
4621
+ "properties": [
4622
+ {
4623
+ "abstract": true,
4624
+ "docs": {
4625
+ "stability": "experimental",
4626
+ "summary": "the main command for the build step to run."
4627
+ },
4628
+ "immutable": true,
4629
+ "locationInModule": {
4630
+ "filename": "deployment-stack-pipeline/pipeline.ts",
4631
+ "line": 110
4632
+ },
4633
+ "name": "command",
4634
+ "type": {
4635
+ "collection": {
4636
+ "elementtype": {
4637
+ "primitive": "string"
4638
+ },
4639
+ "kind": "array"
4640
+ }
4641
+ }
4642
+ },
4643
+ {
4644
+ "abstract": true,
4645
+ "docs": {
4646
+ "stability": "experimental",
4647
+ "summary": "Partial buildspec for this CodeBuildStep."
4648
+ },
4649
+ "immutable": true,
4650
+ "locationInModule": {
4651
+ "filename": "deployment-stack-pipeline/pipeline.ts",
4652
+ "line": 114
4653
+ },
4654
+ "name": "partialBuildSpec",
4655
+ "optional": true,
4656
+ "type": {
4657
+ "collection": {
4658
+ "elementtype": {
4659
+ "primitive": "any"
4660
+ },
4661
+ "kind": "map"
4662
+ }
4663
+ }
4664
+ }
4665
+ ],
4666
+ "symbolId": "deployment-stack-pipeline/pipeline:CodeBuildStepProps"
4667
+ },
4607
4668
  "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket": {
4608
4669
  "assembly": "@orcabus/platform-cdk-constructs",
4609
4670
  "base": "constructs.Construct",
@@ -4726,7 +4787,7 @@
4726
4787
  },
4727
4788
  "locationInModule": {
4728
4789
  "filename": "deployment-stack-pipeline/pipeline.ts",
4729
- "line": 188
4790
+ "line": 244
4730
4791
  },
4731
4792
  "parameters": [
4732
4793
  {
@@ -4752,7 +4813,7 @@
4752
4813
  "kind": "class",
4753
4814
  "locationInModule": {
4754
4815
  "filename": "deployment-stack-pipeline/pipeline.ts",
4755
- "line": 182
4816
+ "line": 238
4756
4817
  },
4757
4818
  "name": "DeploymentStackPipeline",
4758
4819
  "namespace": "deploymentPipeline",
@@ -4765,7 +4826,7 @@
4765
4826
  "immutable": true,
4766
4827
  "locationInModule": {
4767
4828
  "filename": "deployment-stack-pipeline/pipeline.ts",
4768
- "line": 186
4829
+ "line": 242
4769
4830
  },
4770
4831
  "name": "pipeline",
4771
4832
  "type": {
@@ -4785,7 +4846,7 @@
4785
4846
  "kind": "interface",
4786
4847
  "locationInModule": {
4787
4848
  "filename": "deployment-stack-pipeline/pipeline.ts",
4788
- "line": 82
4849
+ "line": 117
4789
4850
  },
4790
4851
  "name": "DeploymentStackPipelineProps",
4791
4852
  "namespace": "deploymentPipeline",
@@ -4800,7 +4861,7 @@
4800
4861
  "immutable": true,
4801
4862
  "locationInModule": {
4802
4863
  "filename": "deployment-stack-pipeline/pipeline.ts",
4803
- "line": 128
4864
+ "line": 163
4804
4865
  },
4805
4866
  "name": "cdkSynthCmd",
4806
4867
  "type": {
@@ -4825,7 +4886,7 @@
4825
4886
  "immutable": true,
4826
4887
  "locationInModule": {
4827
4888
  "filename": "deployment-stack-pipeline/pipeline.ts",
4828
- "line": 89
4889
+ "line": 124
4829
4890
  },
4830
4891
  "name": "githubBranch",
4831
4892
  "type": {
@@ -4842,7 +4903,7 @@
4842
4903
  "immutable": true,
4843
4904
  "locationInModule": {
4844
4905
  "filename": "deployment-stack-pipeline/pipeline.ts",
4845
- "line": 93
4906
+ "line": 128
4846
4907
  },
4847
4908
  "name": "githubRepo",
4848
4909
  "type": {
@@ -4858,7 +4919,7 @@
4858
4919
  "immutable": true,
4859
4920
  "locationInModule": {
4860
4921
  "filename": "deployment-stack-pipeline/pipeline.ts",
4861
- "line": 110
4922
+ "line": 145
4862
4923
  },
4863
4924
  "name": "pipelineName",
4864
4925
  "type": {
@@ -4874,7 +4935,7 @@
4874
4935
  "immutable": true,
4875
4936
  "locationInModule": {
4876
4937
  "filename": "deployment-stack-pipeline/pipeline.ts",
4877
- "line": 97
4938
+ "line": 132
4878
4939
  },
4879
4940
  "name": "stack",
4880
4941
  "type": {
@@ -4890,7 +4951,7 @@
4890
4951
  "immutable": true,
4891
4952
  "locationInModule": {
4892
4953
  "filename": "deployment-stack-pipeline/pipeline.ts",
4893
- "line": 106
4954
+ "line": 141
4894
4955
  },
4895
4956
  "name": "stackConfig",
4896
4957
  "type": {
@@ -4907,13 +4968,30 @@
4907
4968
  "immutable": true,
4908
4969
  "locationInModule": {
4909
4970
  "filename": "deployment-stack-pipeline/pipeline.ts",
4910
- "line": 102
4971
+ "line": 137
4911
4972
  },
4912
4973
  "name": "stackName",
4913
4974
  "type": {
4914
4975
  "primitive": "string"
4915
4976
  }
4916
4977
  },
4978
+ {
4979
+ "abstract": true,
4980
+ "docs": {
4981
+ "remarks": "This step will execute in parallel with {@link unitIacTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nensure your command includes 'cd' to the main app directory, as the build context starts from the root.",
4982
+ "stability": "experimental",
4983
+ "summary": "Configuration for the CodeBuild step that runs unit tests for the main application code."
4984
+ },
4985
+ "immutable": true,
4986
+ "locationInModule": {
4987
+ "filename": "deployment-stack-pipeline/pipeline.ts",
4988
+ "line": 183
4989
+ },
4990
+ "name": "unitAppTestConfig",
4991
+ "type": {
4992
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps"
4993
+ }
4994
+ },
4917
4995
  {
4918
4996
  "abstract": true,
4919
4997
  "docs": {
@@ -4924,7 +5002,7 @@
4924
5002
  "immutable": true,
4925
5003
  "locationInModule": {
4926
5004
  "filename": "deployment-stack-pipeline/pipeline.ts",
4927
- "line": 134
5005
+ "line": 169
4928
5006
  },
4929
5007
  "name": "cdkOut",
4930
5008
  "optional": true,
@@ -4932,6 +5010,24 @@
4932
5010
  "primitive": "string"
4933
5011
  }
4934
5012
  },
5013
+ {
5014
+ "abstract": true,
5015
+ "docs": {
5016
+ "remarks": "If specified, the pipeline will check for CloudFormation drift and fail if detected.",
5017
+ "stability": "experimental",
5018
+ "summary": "Configuration for drift detection checks before deployment."
5019
+ },
5020
+ "immutable": true,
5021
+ "locationInModule": {
5022
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5023
+ "line": 229
5024
+ },
5025
+ "name": "driftCheckConfig",
5026
+ "optional": true,
5027
+ "type": {
5028
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig"
5029
+ }
5030
+ },
4935
5031
  {
4936
5032
  "abstract": true,
4937
5033
  "docs": {
@@ -4942,7 +5038,7 @@
4942
5038
  "immutable": true,
4943
5039
  "locationInModule": {
4944
5040
  "filename": "deployment-stack-pipeline/pipeline.ts",
4945
- "line": 149
5041
+ "line": 200
4946
5042
  },
4947
5043
  "name": "enableSlackNotification",
4948
5044
  "optional": true,
@@ -4960,7 +5056,7 @@
4960
5056
  "immutable": true,
4961
5057
  "locationInModule": {
4962
5058
  "filename": "deployment-stack-pipeline/pipeline.ts",
4963
- "line": 124
5059
+ "line": 159
4964
5060
  },
4965
5061
  "name": "excludedFilePaths",
4966
5062
  "optional": true,
@@ -4983,7 +5079,7 @@
4983
5079
  "immutable": true,
4984
5080
  "locationInModule": {
4985
5081
  "filename": "deployment-stack-pipeline/pipeline.ts",
4986
- "line": 117
5082
+ "line": 152
4987
5083
  },
4988
5084
  "name": "includedFilePaths",
4989
5085
  "optional": true,
@@ -5007,7 +5103,7 @@
5007
5103
  "immutable": true,
5008
5104
  "locationInModule": {
5009
5105
  "filename": "deployment-stack-pipeline/pipeline.ts",
5010
- "line": 157
5106
+ "line": 208
5011
5107
  },
5012
5108
  "name": "notificationEvents",
5013
5109
  "optional": true,
@@ -5031,7 +5127,7 @@
5031
5127
  "immutable": true,
5032
5128
  "locationInModule": {
5033
5129
  "filename": "deployment-stack-pipeline/pipeline.ts",
5034
- "line": 165
5130
+ "line": 216
5035
5131
  },
5036
5132
  "name": "reuseExistingArtifactBucket",
5037
5133
  "optional": true,
@@ -5048,7 +5144,7 @@
5048
5144
  "immutable": true,
5049
5145
  "locationInModule": {
5050
5146
  "filename": "deployment-stack-pipeline/pipeline.ts",
5051
- "line": 144
5147
+ "line": 195
5052
5148
  },
5053
5149
  "name": "stageEnv",
5054
5150
  "optional": true,
@@ -5067,7 +5163,7 @@
5067
5163
  "immutable": true,
5068
5164
  "locationInModule": {
5069
5165
  "filename": "deployment-stack-pipeline/pipeline.ts",
5070
- "line": 173
5166
+ "line": 224
5071
5167
  },
5072
5168
  "name": "stripAssemblyAssets",
5073
5169
  "optional": true,
@@ -5086,7 +5182,7 @@
5086
5182
  "immutable": true,
5087
5183
  "locationInModule": {
5088
5184
  "filename": "deployment-stack-pipeline/pipeline.ts",
5089
- "line": 140
5185
+ "line": 175
5090
5186
  },
5091
5187
  "name": "synthBuildSpec",
5092
5188
  "optional": true,
@@ -5098,10 +5194,169 @@
5098
5194
  "kind": "map"
5099
5195
  }
5100
5196
  }
5197
+ },
5198
+ {
5199
+ "abstract": true,
5200
+ "docs": {
5201
+ "remarks": "This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nThe default command will be from the root of the repo: [\"make install\", \"make test\"]",
5202
+ "stability": "experimental",
5203
+ "summary": "Configuration for the CodeBuild step that runs unit tests for Infrastructure-as-Code (IaC) at the repository root."
5204
+ },
5205
+ "immutable": true,
5206
+ "locationInModule": {
5207
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5208
+ "line": 191
5209
+ },
5210
+ "name": "unitIacTestConfig",
5211
+ "optional": true,
5212
+ "type": {
5213
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps"
5214
+ }
5101
5215
  }
5102
5216
  ],
5103
5217
  "symbolId": "deployment-stack-pipeline/pipeline:DeploymentStackPipelineProps"
5104
5218
  },
5219
+ "@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig": {
5220
+ "assembly": "@orcabus/platform-cdk-constructs",
5221
+ "datatype": true,
5222
+ "docs": {
5223
+ "stability": "experimental",
5224
+ "summary": "Configuration for pre-deployment drift detection checks."
5225
+ },
5226
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig",
5227
+ "kind": "interface",
5228
+ "locationInModule": {
5229
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5230
+ "line": 89
5231
+ },
5232
+ "name": "DriftCheckConfig",
5233
+ "namespace": "deploymentPipeline",
5234
+ "properties": [
5235
+ {
5236
+ "abstract": true,
5237
+ "docs": {
5238
+ "remarks": "Examples: \"pnpm cdk\", \"pnpm cdk-stateful\", \"pnpm cdk-stateless\".\nMust support: \"drift <stackId>\".",
5239
+ "stability": "experimental",
5240
+ "summary": "CDK CLI entrypoint used to run the drift command."
5241
+ },
5242
+ "immutable": true,
5243
+ "locationInModule": {
5244
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5245
+ "line": 95
5246
+ },
5247
+ "name": "cdkCommand",
5248
+ "type": {
5249
+ "primitive": "string"
5250
+ }
5251
+ },
5252
+ {
5253
+ "abstract": true,
5254
+ "docs": {
5255
+ "remarks": "If your app is in a subdirectory, prefix with \"cd <dir> &&\".\nExample: \"cd dev && pnpm install --frozen-lockfile --ignore-scripts\"\n\nDefault: \"pnpm install --frozen-lockfile --ignore-scripts\"",
5256
+ "stability": "experimental",
5257
+ "summary": "Command to install dependencies before running CDK."
5258
+ },
5259
+ "immutable": true,
5260
+ "locationInModule": {
5261
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5262
+ "line": 103
5263
+ },
5264
+ "name": "installCommand",
5265
+ "optional": true,
5266
+ "type": {
5267
+ "primitive": "string"
5268
+ }
5269
+ }
5270
+ ],
5271
+ "symbolId": "deployment-stack-pipeline/pipeline:DriftCheckConfig"
5272
+ },
5273
+ "@orcabus/platform-cdk-constructs.deploymentPipeline.FailOnDriftBuildStepProps": {
5274
+ "assembly": "@orcabus/platform-cdk-constructs",
5275
+ "datatype": true,
5276
+ "docs": {
5277
+ "stability": "experimental"
5278
+ },
5279
+ "fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.FailOnDriftBuildStepProps",
5280
+ "kind": "interface",
5281
+ "locationInModule": {
5282
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5283
+ "line": 630
5284
+ },
5285
+ "name": "FailOnDriftBuildStepProps",
5286
+ "namespace": "deploymentPipeline",
5287
+ "properties": [
5288
+ {
5289
+ "abstract": true,
5290
+ "docs": {
5291
+ "remarks": "Used to assume the CDK lookup role and set AWS_DEFAULT_REGION.",
5292
+ "stability": "experimental",
5293
+ "summary": "AWS account and region where the drift check runs."
5294
+ },
5295
+ "immutable": true,
5296
+ "locationInModule": {
5297
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5298
+ "line": 635
5299
+ },
5300
+ "name": "accountEnv",
5301
+ "type": {
5302
+ "fqn": "aws-cdk-lib.Environment"
5303
+ }
5304
+ },
5305
+ {
5306
+ "abstract": true,
5307
+ "docs": {
5308
+ "remarks": "Examples: \"pnpm cdk\", \"pnpm cdk-stateful\", \"pnpm cdk-stateless\".\nMust support: \"drift <stackId>\".",
5309
+ "stability": "experimental",
5310
+ "summary": "CDK CLI entrypoint used to run the drift command."
5311
+ },
5312
+ "immutable": true,
5313
+ "locationInModule": {
5314
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5315
+ "line": 649
5316
+ },
5317
+ "name": "cdkCommand",
5318
+ "type": {
5319
+ "primitive": "string"
5320
+ }
5321
+ },
5322
+ {
5323
+ "abstract": true,
5324
+ "docs": {
5325
+ "remarks": "Format: `<rootStack>/<constructId>/<envName>/<stackName>`\n\nExample: `DevStack/DeploymentPipeline/OrcaBusBeta/TestStack`",
5326
+ "stability": "experimental",
5327
+ "summary": "Fully qualified CDK stack ID to check for drift."
5328
+ },
5329
+ "immutable": true,
5330
+ "locationInModule": {
5331
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5332
+ "line": 643
5333
+ },
5334
+ "name": "stackId",
5335
+ "type": {
5336
+ "primitive": "string"
5337
+ }
5338
+ },
5339
+ {
5340
+ "abstract": true,
5341
+ "docs": {
5342
+ "remarks": "If your app is in a subdirectory, prefix with \"cd <dir> &&\".\nExample: \"cd dev && pnpm install --frozen-lockfile --ignore-scripts\"\n\nDefault: \"pnpm install --frozen-lockfile --ignore-scripts\"",
5343
+ "stability": "experimental",
5344
+ "summary": "Command to install dependencies before running CDK."
5345
+ },
5346
+ "immutable": true,
5347
+ "locationInModule": {
5348
+ "filename": "deployment-stack-pipeline/pipeline.ts",
5349
+ "line": 657
5350
+ },
5351
+ "name": "installCommand",
5352
+ "optional": true,
5353
+ "type": {
5354
+ "primitive": "string"
5355
+ }
5356
+ }
5357
+ ],
5358
+ "symbolId": "deployment-stack-pipeline/pipeline:FailOnDriftBuildStepProps"
5359
+ },
5105
5360
  "@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket": {
5106
5361
  "assembly": "@orcabus/platform-cdk-constructs",
5107
5362
  "docs": {
@@ -5161,7 +5416,7 @@
5161
5416
  "kind": "interface",
5162
5417
  "locationInModule": {
5163
5418
  "filename": "deployment-stack-pipeline/pipeline.ts",
5164
- "line": 67
5419
+ "line": 71
5165
5420
  },
5166
5421
  "name": "StackConfigProps",
5167
5422
  "namespace": "deploymentPipeline",
@@ -5175,7 +5430,7 @@
5175
5430
  "immutable": true,
5176
5431
  "locationInModule": {
5177
5432
  "filename": "deployment-stack-pipeline/pipeline.ts",
5178
- "line": 71
5433
+ "line": 75
5179
5434
  },
5180
5435
  "name": "beta",
5181
5436
  "type": {
@@ -5196,7 +5451,7 @@
5196
5451
  "immutable": true,
5197
5452
  "locationInModule": {
5198
5453
  "filename": "deployment-stack-pipeline/pipeline.ts",
5199
- "line": 75
5454
+ "line": 79
5200
5455
  },
5201
5456
  "name": "gamma",
5202
5457
  "type": {
@@ -5217,7 +5472,7 @@
5217
5472
  "immutable": true,
5218
5473
  "locationInModule": {
5219
5474
  "filename": "deployment-stack-pipeline/pipeline.ts",
5220
- "line": 79
5475
+ "line": 83
5221
5476
  },
5222
5477
  "name": "prod",
5223
5478
  "type": {
@@ -5242,7 +5497,7 @@
5242
5497
  "kind": "interface",
5243
5498
  "locationInModule": {
5244
5499
  "filename": "deployment-stack-pipeline/pipeline.ts",
5245
- "line": 52
5500
+ "line": 56
5246
5501
  },
5247
5502
  "name": "StageEnvProps",
5248
5503
  "namespace": "deploymentPipeline",
@@ -5256,7 +5511,7 @@
5256
5511
  "immutable": true,
5257
5512
  "locationInModule": {
5258
5513
  "filename": "deployment-stack-pipeline/pipeline.ts",
5259
- "line": 56
5514
+ "line": 60
5260
5515
  },
5261
5516
  "name": "beta",
5262
5517
  "type": {
@@ -5272,7 +5527,7 @@
5272
5527
  "immutable": true,
5273
5528
  "locationInModule": {
5274
5529
  "filename": "deployment-stack-pipeline/pipeline.ts",
5275
- "line": 60
5530
+ "line": 64
5276
5531
  },
5277
5532
  "name": "gamma",
5278
5533
  "type": {
@@ -5288,7 +5543,7 @@
5288
5543
  "immutable": true,
5289
5544
  "locationInModule": {
5290
5545
  "filename": "deployment-stack-pipeline/pipeline.ts",
5291
- "line": 64
5546
+ "line": 68
5292
5547
  },
5293
5548
  "name": "prod",
5294
5549
  "type": {
@@ -7163,6 +7418,6 @@
7163
7418
  "symbolId": "shared-config/slack:SlackAlerts"
7164
7419
  }
7165
7420
  },
7166
- "version": "0.0.104",
7167
- "fingerprint": "8AsqEKwEq47IHwU7uXbyWa7zxnJSt8IBwMi+dm3nfvs="
7421
+ "version": "1.0.0",
7422
+ "fingerprint": "lCoewncHb7xUSGcdjCbP1XHCpJWEQgEbdIniIlhBiqU="
7168
7423
  }
@@ -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.104" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.0.0" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -18,9 +18,13 @@ exports.DEFAULT_LOGS_CONFIG = {
18
18
  },
19
19
  };
20
20
  exports.DEFAULT_ALLOW_CORS_ORIGINS = {
21
- BETA: ["https://orcaui.dev.umccr.org", "http://localhost:3000"],
22
- GAMMA: ["https://orcaui.stg.umccr.org"],
23
- PROD: ["https://orcaui.prod.umccr.org", "https://orcaui.umccr.org"],
21
+ BETA: [
22
+ "https://orcaui.dev.umccr.org",
23
+ "https://portal.dev.umccr.org",
24
+ "http://localhost:3000",
25
+ ],
26
+ GAMMA: ["https://orcaui.stg.umccr.org", "https://portal.stg.umccr.org"],
27
+ PROD: ["https://orcaui.umccr.org", "https://portal.umccr.org"],
24
28
  };
25
29
  // portal - TokenServiceStack
26
30
  exports.COGNITO_PORTAL_APP_CLIENT_ID_PARAMETER_NAME = "/data_portal/client/data2/cog_app_client_id_stage";
@@ -57,4 +61,4 @@ exports.getDefaultApiGatewayConfiguration = getDefaultApiGatewayConfiguration;
57
61
  * The SSM parameter name for the HTTP Lambda authorizer ARN.
58
62
  */
59
63
  exports.AUTH_STACK_HTTP_LAMBDA_AUTHORIZER_PARAMETER_NAME = "/orcabus/authorization-stack/http-lambda-authorization-arn";
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRDtBQUNyRCw2Q0FBNEM7QUFlL0IsUUFBQSxtQkFBbUIsR0FBdUM7SUFDckUsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO0tBQ3BDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQWdDO0lBQ3JFLElBQUksRUFBRSxDQUFDLDhCQUE4QixFQUFFLHVCQUF1QixDQUFDO0lBQy9ELEtBQUssRUFBRSxDQUFDLDhCQUE4QixDQUFDO0lBQ3ZDLElBQUksRUFBRSxDQUFDLCtCQUErQixFQUFFLDBCQUEwQixDQUFDO0NBQ3BFLENBQUM7QUFFRiw2QkFBNkI7QUFDaEIsUUFBQSwyQ0FBMkMsR0FDdEQsbURBQW1ELENBQUM7QUFFekMsUUFBQSwyQ0FBMkMsR0FDdEQsaUNBQWlDLENBQUM7QUFFcEMsd0JBQXdCO0FBQ1gsUUFBQSwwQ0FBMEMsR0FDckQsNkNBQTZDLENBQUM7QUFFaEQsK0NBQStDO0FBQy9DLE1BQU0sc0NBQXNDLEdBQUc7SUFDN0MsbURBQTJDO0lBQzNDLG1EQUEyQztDQUM1QyxDQUFDO0FBRUYsd0NBQXdDO0FBQzNCLFFBQUEsc0NBQXNDLEdBRy9DO0lBQ0YsSUFBSSxFQUFFO1FBQ0osR0FBRyxzQ0FBc0M7UUFDekMsa0RBQTBDO0tBQzNDO0lBQ0QsS0FBSyxFQUFFLHNDQUFzQztJQUM3QyxJQUFJLEVBQUUsc0NBQXNDO0NBQzdDLENBQUM7QUFFVyxRQUFBLDJDQUEyQyxHQUN0RCxzQ0FBc0MsQ0FBQztBQUU1QixRQUFBLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDO0FBQzFELFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsUUFBQSw2QkFBNkIsR0FBRyx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLGlDQUFpQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFO0lBQ3BFLE9BQU87UUFDTCxpQ0FBaUMsRUFDL0IsOENBQXNDLENBQUMsS0FBSyxDQUFDO1FBQy9DLGdCQUFnQixFQUFFLGtDQUEwQixDQUFDLEtBQUssQ0FBQztRQUNuRCxlQUFlLEVBQUUsMkJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUM7QUFQVyxRQUFBLGlDQUFpQyxxQ0FPNUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsZ0RBQWdELEdBQzNELDREQUE0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgU3RhZ2VOYW1lIH0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dzQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogUmV0ZW50aW9uIHBvbGljeSBmb3IgdGhlIEFQSSBHYXRld2F5IGxvZ3MuXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb246IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgbG9nIGdyb3VwXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5O1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MT0dTX0NPTkZJRzogUmVjb3JkPFN0YWdlTmFtZSwgTG9nc0NvbmZpZ1Byb3BzPiA9IHtcbiAgQkVUQToge1xuICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICB9LFxuICBHQU1NQToge1xuICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICB9LFxuICBQUk9EOiB7XG4gICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19ZRUFSUyxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FMTE9XX0NPUlNfT1JJR0lOUzogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nW10+ID0ge1xuICBCRVRBOiBbXCJodHRwczovL29yY2F1aS5kZXYudW1jY3Iub3JnXCIsIFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCJdLFxuICBHQU1NQTogW1wiaHR0cHM6Ly9vcmNhdWkuc3RnLnVtY2NyLm9yZ1wiXSxcbiAgUFJPRDogW1wiaHR0cHM6Ly9vcmNhdWkucHJvZC51bWNjci5vcmdcIiwgXCJodHRwczovL29yY2F1aS51bWNjci5vcmdcIl0sXG59O1xuXG4vLyBwb3J0YWwgLSBUb2tlblNlcnZpY2VTdGFja1xuZXhwb3J0IGNvbnN0IENPR05JVE9fUE9SVEFMX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvZGF0YTIvY29nX2FwcF9jbGllbnRfaWRfc3RhZ2VcIjtcblxuZXhwb3J0IGNvbnN0IENPR05JVE9fT1JDQVVJX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9vcmNhdWkvY29nX2FwcF9jbGllbnRfaWRfc3RhZ2VcIjtcblxuLy8gbG9jYWxob3N0IGRldmVsb3BtZW50XG5leHBvcnQgY29uc3QgQ09HTklUT19MT0NBTF9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FID1cbiAgXCIvZGF0YV9wb3J0YWwvY2xpZW50L2NvZ19hcHBfY2xpZW50X2lkX2xvY2FsXCI7XG5cbi8vIEJhc2UgY2xpZW50IElEcyB1c2VkIGFjcm9zcyBhbGwgZW52aXJvbm1lbnRzXG5jb25zdCBCQVNFX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FUyA9IFtcbiAgQ09HTklUT19QT1JUQUxfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSxcbiAgQ09HTklUT19PUkNBVUlfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSxcbl07XG5cbi8vIEVudmlyb25tZW50LXNwZWNpZmljIGNsaWVudCBJRCBhcnJheXNcbmV4cG9ydCBjb25zdCBDT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRV9BUlJBWTogUmVjb3JkPFxuICBTdGFnZU5hbWUsXG4gIHN0cmluZ1tdXG4+ID0ge1xuICBCRVRBOiBbXG4gICAgLi4uQkFTRV9DT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRVMsXG4gICAgQ09HTklUT19MT0NBTF9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FLFxuICBdLFxuICBHQU1NQTogQkFTRV9DT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRVMsXG4gIFBST0Q6IEJBU0VfQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVTLFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09HTklUT19VU0VSX1BPT0xfSURfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvY29nX3VzZXJfcG9vbF9pZFwiO1xuXG5leHBvcnQgY29uc3QgQ0VSVElGSUNBVEVfQVJOX1BBUkFNRVRFUl9OQU1FID0gXCIvdW1jY3IvY2VydGlmaWNhdGVfYXJuXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfRE9NQUlOX1BBUkFNRVRFUl9OQU1FID0gXCIvaG9zdGVkX3pvbmUvdW1jY3IvbmFtZVwiO1xuZXhwb3J0IGNvbnN0IEhPU1RFRF9aT05FX0lEX1BBUkFNRVRFUl9OQU1FID0gXCIvaG9zdGVkX3pvbmUvdW1jY3IvaWRcIjtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRBcGlHYXRld2F5Q29uZmlndXJhdGlvbiA9IChzdGFnZTogU3RhZ2VOYW1lKSA9PiB7XG4gIHJldHVybiB7XG4gICAgY29nbml0b0NsaWVudElkUGFyYW1ldGVyTmFtZUFycmF5OlxuICAgICAgQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVfQVJSQVlbc3RhZ2VdLFxuICAgIGNvcnNBbGxvd09yaWdpbnM6IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TW3N0YWdlXSxcbiAgICBhcGlHd0xvZ3NDb25maWc6IERFRkFVTFRfTE9HU19DT05GSUdbc3RhZ2VdLFxuICB9O1xufTtcblxuLyoqXG4gKiBUaGUgU1NNIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgSFRUUCBMYW1iZGEgYXV0aG9yaXplciBBUk4uXG4gKi9cbmV4cG9ydCBjb25zdCBBVVRIX1NUQUNLX0hUVFBfTEFNQkRBX0FVVEhPUklaRVJfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9vcmNhYnVzL2F1dGhvcml6YXRpb24tc3RhY2svaHR0cC1sYW1iZGEtYXV0aG9yaXphdGlvbi1hcm5cIjtcbiJdfQ==
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRDtBQUNyRCw2Q0FBNEM7QUFlL0IsUUFBQSxtQkFBbUIsR0FBdUM7SUFDckUsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO0tBQ3BDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQWdDO0lBQ3JFLElBQUksRUFBRTtRQUNKLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsdUJBQXVCO0tBQ3hCO0lBQ0QsS0FBSyxFQUFFLENBQUMsOEJBQThCLEVBQUUsOEJBQThCLENBQUM7SUFDdkUsSUFBSSxFQUFFLENBQUMsMEJBQTBCLEVBQUUsMEJBQTBCLENBQUM7Q0FDL0QsQ0FBQztBQUVGLDZCQUE2QjtBQUNoQixRQUFBLDJDQUEyQyxHQUN0RCxtREFBbUQsQ0FBQztBQUV6QyxRQUFBLDJDQUEyQyxHQUN0RCxpQ0FBaUMsQ0FBQztBQUVwQyx3QkFBd0I7QUFDWCxRQUFBLDBDQUEwQyxHQUNyRCw2Q0FBNkMsQ0FBQztBQUVoRCwrQ0FBK0M7QUFDL0MsTUFBTSxzQ0FBc0MsR0FBRztJQUM3QyxtREFBMkM7SUFDM0MsbURBQTJDO0NBQzVDLENBQUM7QUFFRix3Q0FBd0M7QUFDM0IsUUFBQSxzQ0FBc0MsR0FHL0M7SUFDRixJQUFJLEVBQUU7UUFDSixHQUFHLHNDQUFzQztRQUN6QyxrREFBMEM7S0FDM0M7SUFDRCxLQUFLLEVBQUUsc0NBQXNDO0lBQzdDLElBQUksRUFBRSxzQ0FBc0M7Q0FDN0MsQ0FBQztBQUVXLFFBQUEsMkNBQTJDLEdBQ3RELHNDQUFzQyxDQUFDO0FBRTVCLFFBQUEsOEJBQThCLEdBQUcsd0JBQXdCLENBQUM7QUFDMUQsUUFBQSxpQ0FBaUMsR0FBRyx5QkFBeUIsQ0FBQztBQUM5RCxRQUFBLDZCQUE2QixHQUFHLHVCQUF1QixDQUFDO0FBRTlELE1BQU0saUNBQWlDLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUU7SUFDcEUsT0FBTztRQUNMLGlDQUFpQyxFQUMvQiw4Q0FBc0MsQ0FBQyxLQUFLLENBQUM7UUFDL0MsZ0JBQWdCLEVBQUUsa0NBQTBCLENBQUMsS0FBSyxDQUFDO1FBQ25ELGVBQWUsRUFBRSwyQkFBbUIsQ0FBQyxLQUFLLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVBXLFFBQUEsaUNBQWlDLHFDQU81QztBQUVGOztHQUVHO0FBQ1UsUUFBQSxnREFBZ0QsR0FDM0QsNERBQTRELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ3NDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXRlbnRpb24gcG9saWN5IGZvciB0aGUgQVBJIEdhdGV3YXkgbG9ncy5cbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbjogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBsb2cgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPR1NfQ09ORklHOiBSZWNvcmQ8U3RhZ2VOYW1lLCBMb2dzQ29uZmlnUHJvcHM+ID0ge1xuICBCRVRBOiB7XG4gICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIEdBTU1BOiB7XG4gICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIFBST0Q6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gIEJFVEE6IFtcbiAgICBcImh0dHBzOi8vb3JjYXVpLmRldi51bWNjci5vcmdcIixcbiAgICBcImh0dHBzOi8vcG9ydGFsLmRldi51bWNjci5vcmdcIixcbiAgICBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLFxuICBdLFxuICBHQU1NQTogW1wiaHR0cHM6Ly9vcmNhdWkuc3RnLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vcG9ydGFsLnN0Zy51bWNjci5vcmdcIl0sXG4gIFBST0Q6IFtcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vcG9ydGFsLnVtY2NyLm9yZ1wiXSxcbn07XG5cbi8vIHBvcnRhbCAtIFRva2VuU2VydmljZVN0YWNrXG5leHBvcnQgY29uc3QgQ09HTklUT19QT1JUQUxfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9kYXRhMi9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiO1xuXG5leHBvcnQgY29uc3QgQ09HTklUT19PUkNBVUlfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL29yY2F1aS9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiO1xuXG4vLyBsb2NhbGhvc3QgZGV2ZWxvcG1lbnRcbmV4cG9ydCBjb25zdCBDT0dOSVRPX0xPQ0FMX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvY29nX2FwcF9jbGllbnRfaWRfbG9jYWxcIjtcblxuLy8gQmFzZSBjbGllbnQgSURzIHVzZWQgYWNyb3NzIGFsbCBlbnZpcm9ubWVudHNcbmNvbnN0IEJBU0VfQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVTID0gW1xuICBDT0dOSVRPX1BPUlRBTF9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FLFxuICBDT0dOSVRPX09SQ0FVSV9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FLFxuXTtcblxuLy8gRW52aXJvbm1lbnQtc3BlY2lmaWMgY2xpZW50IElEIGFycmF5c1xuZXhwb3J0IGNvbnN0IENPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZOiBSZWNvcmQ8XG4gIFN0YWdlTmFtZSxcbiAgc3RyaW5nW11cbj4gPSB7XG4gIEJFVEE6IFtcbiAgICAuLi5CQVNFX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FUyxcbiAgICBDT0dOSVRPX0xPQ0FMX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUsXG4gIF0sXG4gIEdBTU1BOiBCQVNFX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FUyxcbiAgUFJPRDogQkFTRV9DT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRVMsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0dOSVRPX1VTRVJfUE9PTF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICBDT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRV9BUlJBWVtzdGFnZV0sXG4gICAgY29yc0FsbG93T3JpZ2luczogREVGQVVMVF9BTExPV19DT1JTX09SSUdJTlNbc3RhZ2VdLFxuICAgIGFwaUd3TG9nc0NvbmZpZzogREVGQVVMVF9MT0dTX0NPTkZJR1tzdGFnZV0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBIVFRQIExhbWJkYSBhdXRob3JpemVyIEFSTi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFVVEhfU1RBQ0tfSFRUUF9MQU1CREFfQVVUSE9SSVpFUl9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL29yY2FidXMvYXV0aG9yaXphdGlvbi1zdGFjay9odHRwLWxhbWJkYS1hdXRob3JpemF0aW9uLWFyblwiO1xuIl19
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.104" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.0.0" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -41,6 +41,35 @@ export interface StackConfigProps {
41
41
  */
42
42
  readonly prod: Record<string, any>;
43
43
  }
44
+ /**
45
+ * Configuration for pre-deployment drift detection checks.
46
+ */
47
+ export interface DriftCheckConfig {
48
+ /**
49
+ * CDK CLI entrypoint used to run the drift command.
50
+ * Examples: "pnpm cdk", "pnpm cdk-stateful", "pnpm cdk-stateless".
51
+ * Must support: "drift <stackId>".
52
+ */
53
+ readonly cdkCommand: string;
54
+ /**
55
+ * Command to install dependencies before running CDK.
56
+ * If your app is in a subdirectory, prefix with "cd <dir> &&".
57
+ * Example: "cd dev && pnpm install --frozen-lockfile --ignore-scripts"
58
+ *
59
+ * Default: "pnpm install --frozen-lockfile --ignore-scripts"
60
+ */
61
+ readonly installCommand?: string;
62
+ }
63
+ export interface CodeBuildStepProps {
64
+ /**
65
+ * the main command for the build step to run
66
+ */
67
+ readonly command: string[];
68
+ /**
69
+ * Partial buildspec for this CodeBuildStep
70
+ */
71
+ readonly partialBuildSpec?: Record<string, any>;
72
+ }
44
73
  export interface DeploymentStackPipelineProps {
45
74
  /**
46
75
  * The GitHub branch name the pipeline will listen to.
@@ -100,6 +129,22 @@ export interface DeploymentStackPipelineProps {
100
129
  * @default DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC
101
130
  */
102
131
  readonly synthBuildSpec?: Record<string, any>;
132
+ /**
133
+ * Configuration for the CodeBuild step that runs unit tests for the main application code.
134
+ * This step will execute in parallel with {@link unitIacTestConfig} as part of the synth stage dependencies.
135
+ * Both must succeed before the synth step runs.
136
+ *
137
+ * ensure your command includes 'cd' to the main app directory, as the build context starts from the root.
138
+ */
139
+ readonly unitAppTestConfig: CodeBuildStepProps;
140
+ /**
141
+ * Configuration for the CodeBuild step that runs unit tests for Infrastructure-as-Code (IaC) at the repository root.
142
+ * This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.
143
+ * Both must succeed before the synth step runs.
144
+ *
145
+ * The default command will be from the root of the repo: ["make install", "make test"]
146
+ */
147
+ readonly unitIacTestConfig?: CodeBuildStepProps;
103
148
  /**
104
149
  * The stage environment for the deployment stack
105
150
  */
@@ -131,6 +176,11 @@ export interface DeploymentStackPipelineProps {
131
176
  * @see https://github.com/aws/aws-cdk/issues/9917
132
177
  */
133
178
  readonly stripAssemblyAssets?: boolean;
179
+ /**
180
+ * Configuration for drift detection checks before deployment.
181
+ * If specified, the pipeline will check for CloudFormation drift and fail if detected.
182
+ */
183
+ readonly driftCheckConfig?: DriftCheckConfig;
134
184
  }
135
185
  /**
136
186
  * A CDK construct that creates a deployment pipeline across environments for the OrcaBus project.
@@ -145,3 +195,32 @@ export declare class DeploymentStackPipeline extends Construct {
145
195
  readonly pipeline: Pipeline;
146
196
  constructor(scope: Construct, id: string, props: DeploymentStackPipelineProps);
147
197
  }
198
+ export interface FailOnDriftBuildStepProps {
199
+ /**
200
+ * AWS account and region where the drift check runs.
201
+ * Used to assume the CDK lookup role and set AWS_DEFAULT_REGION.
202
+ */
203
+ readonly accountEnv: Environment;
204
+ /**
205
+ * Fully qualified CDK stack ID to check for drift.
206
+ *
207
+ * Format: `<rootStack>/<constructId>/<envName>/<stackName>`
208
+ *
209
+ * Example: `DevStack/DeploymentPipeline/OrcaBusBeta/TestStack`
210
+ */
211
+ readonly stackId: string;
212
+ /**
213
+ * CDK CLI entrypoint used to run the drift command.
214
+ * Examples: "pnpm cdk", "pnpm cdk-stateful", "pnpm cdk-stateless".
215
+ * Must support: "drift <stackId>".
216
+ */
217
+ readonly cdkCommand: string;
218
+ /**
219
+ * Command to install dependencies before running CDK.
220
+ * If your app is in a subdirectory, prefix with "cd <dir> &&".
221
+ * Example: "cd dev && pnpm install --frozen-lockfile --ignore-scripts"
222
+ *
223
+ * Default: "pnpm install --frozen-lockfile --ignore-scripts"
224
+ */
225
+ readonly installCommand?: string;
226
+ }
@@ -13,6 +13,7 @@ const aws_chatbot_1 = require("aws-cdk-lib/aws-chatbot");
13
13
  const aws_codestarnotifications_1 = require("aws-cdk-lib/aws-codestarnotifications");
14
14
  const artifact_bucket_1 = require("./artifact-bucket");
15
15
  const aws_codepipeline_actions_1 = require("aws-cdk-lib/aws-codepipeline-actions");
16
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
16
17
  /**
17
18
  * The default partial build spec for the synth step in the pipeline.
18
19
  */
@@ -32,14 +33,14 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
32
33
  * before using this construct.
33
34
  */
34
35
  class DeploymentStackPipeline extends constructs_1.Construct {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.104" };
36
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.0" };
36
37
  /**
37
38
  * The code pipeline construct that is created.
38
39
  */
39
40
  pipeline;
40
41
  constructor(scope, id, props) {
41
42
  super(scope, id);
42
- const codeStarArn = aws_ssm_1.StringParameter.valueForStringParameter(this, "/orcabus/codestar_github_arn");
43
+ const codeStarArn = aws_ssm_1.StringParameter.valueForStringParameter(this, "codestar_github_arn");
43
44
  const codeStarSourceActionName = "pipeline-src";
44
45
  const sourceFile = pipelines_1.CodePipelineSource.connection(`OrcaBus/${props.githubRepo}`, props.githubBranch, {
45
46
  connectionArn: codeStarArn,
@@ -83,21 +84,62 @@ class DeploymentStackPipeline extends constructs_1.Construct {
83
84
  },
84
85
  ]);
85
86
  }
87
+ // Add unit test for IaC at the root of the
88
+ const { command: unitIacTestCommand = ["make install", "make test"], partialBuildSpec: unitIacPartialBuildSpec = undefined, } = props.unitIacTestConfig || {};
89
+ const unitIacTest = new pipelines_1.CodeBuildStep("UnitIacTest", {
90
+ commands: unitIacTestCommand,
91
+ input: sourceFile,
92
+ buildEnvironment: {
93
+ privileged: true,
94
+ computeType: aws_codebuild_1.ComputeType.LARGE,
95
+ buildImage: aws_codebuild_1.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
96
+ environmentVariables: {
97
+ NODE_OPTIONS: {
98
+ value: "--max-old-space-size=8192",
99
+ },
100
+ },
101
+ },
102
+ partialBuildSpec: unitIacPartialBuildSpec
103
+ ? aws_codebuild_1.BuildSpec.fromObject(unitIacPartialBuildSpec)
104
+ : undefined,
105
+ });
106
+ // Adding unit test for the main app
107
+ const { command: unitAppTestCommand, partialBuildSpec: unitAppPartialBuildSpec = undefined, } = props.unitAppTestConfig;
108
+ const unitAppTest = new pipelines_1.CodeBuildStep("UnitAppTest", {
109
+ commands: unitAppTestCommand,
110
+ input: sourceFile,
111
+ buildEnvironment: {
112
+ privileged: true,
113
+ computeType: aws_codebuild_1.ComputeType.LARGE,
114
+ buildImage: aws_codebuild_1.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
115
+ environmentVariables: {
116
+ NODE_OPTIONS: {
117
+ value: "--max-old-space-size=8192",
118
+ },
119
+ },
120
+ },
121
+ partialBuildSpec: unitAppPartialBuildSpec
122
+ ? aws_codebuild_1.BuildSpec.fromObject(unitAppPartialBuildSpec)
123
+ : undefined,
124
+ });
86
125
  const { synthBuildSpec = exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC } = props;
126
+ const synthStep = new pipelines_1.CodeBuildStep("CdkSynth", {
127
+ installCommands: [
128
+ "node -v",
129
+ "npm install --global corepack@latest",
130
+ "corepack --version",
131
+ "corepack enable",
132
+ ],
133
+ commands: props.cdkSynthCmd,
134
+ input: sourceFile,
135
+ primaryOutputDirectory: props.cdkOut || "cdk.out",
136
+ partialBuildSpec: aws_codebuild_1.BuildSpec.fromObject(synthBuildSpec),
137
+ });
138
+ synthStep.addStepDependency(unitIacTest);
139
+ synthStep.addStepDependency(unitAppTest);
87
140
  const cdkPipeline = new pipelines_1.CodePipeline(this, "CDKCodePipeline", {
88
141
  codePipeline: this.pipeline,
89
- synth: new pipelines_1.CodeBuildStep("CdkSynth", {
90
- installCommands: [
91
- "node -v",
92
- "npm install --global corepack@latest",
93
- "corepack --version",
94
- "corepack enable",
95
- ],
96
- commands: props.cdkSynthCmd,
97
- input: sourceFile,
98
- primaryOutputDirectory: props.cdkOut || "cdk.out",
99
- partialBuildSpec: aws_codebuild_1.BuildSpec.fromObject(synthBuildSpec),
100
- }),
142
+ synth: synthStep,
101
143
  selfMutation: true,
102
144
  codeBuildDefaults: {
103
145
  buildEnvironment: {
@@ -140,8 +182,43 @@ class DeploymentStackPipeline extends constructs_1.Construct {
140
182
  pre: [stripAssetsFromAssembly],
141
183
  });
142
184
  }
143
- cdkPipeline.addStage(new DeploymentStage(this, "OrcaBusBeta", stageEnv.beta, props.stackName, props.stack, props.stackConfig.beta, props.githubRepo, props.githubBranch));
144
- cdkPipeline.addStage(new DeploymentStage(this, "OrcaBusGamma", stageEnv.gamma, props.stackName, props.stack, props.stackConfig.gamma, props.githubRepo, props.githubBranch), {
185
+ // Construct function to get StackId for drift check
186
+ const rootStackName = aws_cdk_lib_1.Stack.of(this).stackName;
187
+ const constructId = this.node.id;
188
+ const getStackId = (envName) => `${rootStackName}/${constructId}/${envName}/${props.stackName}`;
189
+ // Drift check config
190
+ const isDriftCheckStep = !!props.driftCheckConfig;
191
+ const cdkInstallCmd = props.driftCheckConfig?.installCommand ??
192
+ "pnpm install --frozen-lockfile --ignore-scripts";
193
+ const cdkRunCmd = props.driftCheckConfig?.cdkCommand ?? ``;
194
+ const betaEnvName = "OrcaBusBeta";
195
+ cdkPipeline.addStage(new DeploymentStage(this, betaEnvName, stageEnv.beta, props.stackName, props.stack, props.stackConfig.beta, props.githubRepo, props.githubBranch), {
196
+ pre: isDriftCheckStep
197
+ ? [
198
+ new FailOnDriftBuildStep("DriftOnFailBetaCheck", {
199
+ accountEnv: stageEnv.beta,
200
+ stackId: getStackId(betaEnvName),
201
+ cdkCommand: cdkRunCmd,
202
+ installCommand: cdkInstallCmd,
203
+ }),
204
+ ]
205
+ : undefined,
206
+ });
207
+ /**
208
+ * GAMMA
209
+ */
210
+ const gammaEnvName = "OrcaBusGamma";
211
+ cdkPipeline.addStage(new DeploymentStage(this, gammaEnvName, stageEnv.gamma, props.stackName, props.stack, props.stackConfig.gamma, props.githubRepo, props.githubBranch), {
212
+ pre: isDriftCheckStep
213
+ ? [
214
+ new FailOnDriftBuildStep("DriftOnFailGammaCheck", {
215
+ accountEnv: stageEnv.gamma,
216
+ stackId: getStackId(gammaEnvName),
217
+ cdkCommand: cdkRunCmd,
218
+ installCommand: cdkInstallCmd,
219
+ }),
220
+ ]
221
+ : undefined,
145
222
  post: [
146
223
  new ManualApprovalActionStep("PromoteToProd", {
147
224
  actionName: "PromoteToProd",
@@ -154,7 +231,22 @@ class DeploymentStackPipeline extends constructs_1.Construct {
154
231
  }),
155
232
  ],
156
233
  });
157
- cdkPipeline.addStage(new DeploymentStage(this, "OrcaBusProd", stageEnv.prod, props.stackName, props.stack, props.stackConfig.prod, props.githubRepo, props.githubBranch));
234
+ /**
235
+ * PROD
236
+ */
237
+ const prodEnvName = "OrcaBusProd";
238
+ cdkPipeline.addStage(new DeploymentStage(this, prodEnvName, stageEnv.prod, props.stackName, props.stack, props.stackConfig.prod, props.githubRepo, props.githubBranch), {
239
+ pre: isDriftCheckStep
240
+ ? [
241
+ new FailOnDriftBuildStep("DriftOnFailProdCheck", {
242
+ accountEnv: stageEnv.prod,
243
+ stackId: getStackId(prodEnvName),
244
+ cdkCommand: cdkRunCmd,
245
+ installCommand: cdkInstallCmd,
246
+ }),
247
+ ]
248
+ : undefined,
249
+ });
158
250
  cdkPipeline.buildPipeline();
159
251
  if (stripAssetsFromAssembly) {
160
252
  cdkPipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsFromAssembly.project);
@@ -212,4 +304,35 @@ class DeploymentStage extends aws_cdk_lib_1.Stage {
212
304
  });
213
305
  }
214
306
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFJbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVMrQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUU5Qzs7R0FFRztBQUNVLFFBQUEscUNBQXFDLEdBQUc7SUFDbkQsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFO1lBQ1Asa0JBQWtCLEVBQUU7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQThIRjs7Ozs7R0FLRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7O0lBQ3BEOztPQUVHO0lBQ00sUUFBUSxDQUFXO0lBRTVCLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW1DO1FBRW5DLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDekQsSUFBSSxFQUNKLDhCQUE4QixDQUMvQixDQUFDO1FBQ0YsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsOEJBQWtCLENBQUMsVUFBVSxDQUM5QyxXQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFDN0IsS0FBSyxDQUFDLFlBQVksRUFDbEI7WUFDRSxhQUFhLEVBQUUsV0FBVztZQUMxQixVQUFVLEVBQUUsd0JBQXdCO1lBQ3BDLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQ0YsQ0FBQztRQUVGLE1BQU0sK0JBQStCLEdBQ25DLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUM7UUFDNUMsTUFBTSxjQUFjLEdBQUcsK0JBQStCO1lBQ3BELENBQUMsQ0FBQywrQ0FBNkIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYztZQUMvRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQzNELGNBQWMsRUFBRSxjQUFjO1lBQzlCLFlBQVksRUFBRSwrQkFBWSxDQUFDLEVBQUU7WUFDN0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdCQUFnQixFQUFFLElBQUk7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkQsTUFBTSxTQUFTLEdBQTZCLEVBQUUsQ0FBQztZQUUvQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM1QixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQ2xELENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM1QixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQ2xELENBQUM7WUFFRCxnRkFBZ0Y7WUFDaEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBMkIsQ0FBQztZQUNuRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFO2dCQUMxQztvQkFDRSxnQkFBZ0IsRUFBRTt3QkFDaEIsSUFBSSxFQUFFOzRCQUNKO2dDQUNFLFFBQVEsRUFBRTtvQ0FDUixRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO2lDQUMvQjtnQ0FDRCxTQUFTLEVBQUUsU0FBUzs2QkFDckI7eUJBQ0Y7d0JBQ0QsZ0JBQWdCLEVBQUUsd0JBQXdCO3FCQUMzQztvQkFDRCxZQUFZLEVBQUUsMEJBQTBCO2lCQUN6QzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLEVBQUUsY0FBYyxHQUFHLDZDQUFxQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksd0JBQVksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDNUQsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQzNCLEtBQUssRUFBRSxJQUFJLHlCQUFhLENBQUMsVUFBVSxFQUFFO2dCQUNuQyxlQUFlLEVBQUU7b0JBQ2YsU0FBUztvQkFDVCxzQ0FBc0M7b0JBQ3RDLG9CQUFvQjtvQkFDcEIsaUJBQWlCO2lCQUNsQjtnQkFDRCxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzNCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixzQkFBc0IsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVM7Z0JBQ2pELGdCQUFnQixFQUFFLHlCQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsWUFBWSxFQUFFLElBQUk7WUFDbEIsaUJBQWlCLEVBQUU7Z0JBQ2pCLGdCQUFnQixFQUFFO29CQUNoQixXQUFXLEVBQUUsMkJBQVcsQ0FBQyxLQUFLO29CQUM5QixVQUFVLEVBQUUsa0NBQWtCLENBQUMsMkJBQTJCO29CQUMxRCxvQkFBb0IsRUFBRTt3QkFDcEIsWUFBWSxFQUFFOzRCQUNaLEtBQUssRUFBRSwyQkFBMkI7eUJBQ25DO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLGVBQWUsR0FBa0I7WUFDckMsSUFBSSxFQUFFLHlCQUFnQjtZQUN0QixLQUFLLEVBQUUsMEJBQWlCO1lBQ3hCLElBQUksRUFBRSx5QkFBZ0I7U0FDdkIsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksZUFBZSxDQUFDO1FBRW5ELDhFQUE4RTtRQUM5RSwyREFBMkQ7UUFDM0QsNkNBQTZDO1FBQzdDLElBQUksdUJBQWtELENBQUM7UUFDdkQsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5Qix1QkFBdUIsR0FBRyxJQUFJLHlCQUFhLENBQUMseUJBQXlCLEVBQUU7Z0JBQ3JFLEtBQUssRUFBRSxXQUFXLENBQUMsb0JBQW9CO2dCQUN2QyxRQUFRLEVBQUU7b0JBQ1IscURBQXFEO29CQUNyRCxrQ0FBa0M7b0JBQ2xDLGVBQWU7b0JBQ2YsbUJBQW1CO29CQUNuQixJQUFJO29CQUNKLGlCQUFpQjtvQkFDakIsNkJBQTZCO29CQUM3QixJQUFJO29CQUNKLHNDQUFzQztpQkFDdkM7YUFDRixDQUFDLENBQUM7WUFFSCxXQUFXLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO2dCQUMzQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzthQUMvQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsV0FBVyxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxlQUFlLENBQ2pCLElBQUksRUFDSixhQUFhLEVBQ2IsUUFBUSxDQUFDLElBQUksRUFDYixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxLQUFLLEVBQ1gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQ3RCLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQ0YsQ0FBQztRQUVGLFdBQVcsQ0FBQyxRQUFRLENBQ2xCLElBQUksZUFBZSxDQUNqQixJQUFJLEVBQ0osY0FBYyxFQUNkLFFBQVEsQ0FBQyxLQUFLLEVBQ2QsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUN2QixLQUFLLENBQUMsVUFBVSxFQUNoQixLQUFLLENBQUMsWUFBWSxDQUNuQixFQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksd0JBQXdCLENBQUMsZUFBZSxFQUFFO29CQUM1QyxVQUFVLEVBQUUsZUFBZTtvQkFDM0IsbUZBQW1GO29CQUNuRiw0RUFBNEU7b0JBQzVFLDJFQUEyRTtvQkFDM0UsUUFBUSxFQUFFLENBQUM7b0JBQ1gscUZBQXFGO29CQUNyRixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUM5QixDQUFDO2FBQ0g7U0FDRixDQUNGLENBQUM7UUFFRixXQUFXLENBQUMsUUFBUSxDQUNsQixJQUFJLGVBQWUsQ0FDakIsSUFBSSxFQUNKLGFBQWEsRUFDYixRQUFRLENBQUMsSUFBSSxFQUNiLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFDdEIsS0FBSyxDQUFDLFVBQVUsRUFDaEIsS0FBSyxDQUFDLFlBQVksQ0FDbkIsQ0FDRixDQUFDO1FBRUYsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQ2hELHVCQUF1QixDQUFDLE9BQU8sQ0FDaEMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxNQUFNLHlCQUF5QixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3ZFLElBQUksRUFDSixpQ0FBaUMsQ0FDbEMsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLHVDQUF5QixDQUFDLGdDQUFnQyxDQUN2RSxJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLHlCQUF5QixDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxFQUFFO2dCQUMxRCxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixJQUFJO29CQUNsQyw2Q0FBMEIsQ0FBQyx5QkFBeUI7aUJBQ3JEO2dCQUNELFVBQVUsRUFBRSxzQ0FBVSxDQUFDLElBQUk7Z0JBQzNCLG9CQUFvQixFQUFFLFdBQVcsS0FBSyxDQUFDLFlBQVksRUFBRTthQUN0RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFuTkgsMERBb05DO0FBWUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHdCQUNKLFNBQVEsZ0JBQUk7SUFHSyx5QkFBeUIsQ0FBZ0M7SUFDMUUsWUFBWSxFQUFVLEVBQUUsT0FBc0M7UUFDNUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRU0sYUFBYSxDQUNsQixLQUFhLEVBQ2IsT0FBNkI7UUFFN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLCtDQUFvQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7UUFFMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVELE1BQU0sZUFBZ0IsU0FBUSxtQkFBSztJQUNqQyxZQUNFLEtBQWdCLEVBQ2hCLGVBQXVCLEVBQ3ZCLEdBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFVBQW1FLEVBQ25FLGFBQWtCLEVBQ2xCLFVBQWtCLEVBQ2xCLFlBQXFCO1FBRXJCLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUMsSUFBSSxNQUFNLEdBQUcsOEJBQThCLFVBQVUsRUFBRSxDQUFDO1FBQ3hELElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLFlBQVksRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFO2dCQUNKLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLGtCQUFrQixFQUFFLE1BQU07YUFDM0I7WUFDRCxHQUFHLGFBQWE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBMaW51eEFybUJ1aWxkSW1hZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBNYW51YWxBcHByb3ZhbFN0ZXAsXG4gIFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICBTdGVwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge1xuICBQaXBlbGluZSxcbiAgQ2ZuUGlwZWxpbmUsXG4gIFBpcGVsaW5lVHlwZSxcbiAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsXG4gIElTdGFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7XG4gIEJFVEFfRU5WSVJPTk1FTlQsXG4gIEdBTU1BX0VOVklST05NRU5ULFxuICBQUk9EX0VOVklST05NRU5ULFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IFNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNoYXRib3RcIjtcbmltcG9ydCB7IERldGFpbFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVzdGFybm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHsgQ3Jvc3NEZXBsb3ltZW50QXJ0aWZhY3RCdWNrZXQgfSBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmltcG9ydCB7XG4gIE1hbnVhbEFwcHJvdmFsQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcGFydGlhbCBidWlsZCBzcGVjIGZvciB0aGUgc3ludGggc3RlcCBpbiB0aGUgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDID0ge1xuICBwaGFzZXM6IHtcbiAgICBpbnN0YWxsOiB7XG4gICAgICBcInJ1bnRpbWUtdmVyc2lvbnNcIjoge1xuICAgICAgICBub2RlanM6IFwiMjIueFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUVudlByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGJldGEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgZ2FtbWEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZXRhIChkZXYpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYW1tYSAoc3RnKSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wieWFybiBpbnN0YWxsIC0taW1tdXRhYmxlXCIsIFwieWFybiBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgcGFzc2VkIGFzIHRoZSBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQ1xuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcIi9vcmNhYnVzL2NvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN5bnRoQnVpbGRTcGVjID0gREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBuZXcgQ29kZUJ1aWxkU3RlcChcIkNka1N5bnRoXCIsIHtcbiAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgICAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGNvbW1hbmRzOiBwcm9wcy5jZGtTeW50aENtZCxcbiAgICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHByb3BzLmNka091dCB8fCBcImNkay5vdXRcIixcbiAgICAgICAgcGFydGlhbEJ1aWxkU3BlYzogQnVpbGRTcGVjLmZyb21PYmplY3Qoc3ludGhCdWlsZFNwZWMpLFxuICAgICAgfSksXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJPcmNhQnVzQmV0YVwiLFxuICAgICAgICBzdGFnZUVudi5iZXRhLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5iZXRhLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiT3JjYUJ1c0dhbW1hXCIsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcG9zdDogW1xuICAgICAgICAgIG5ldyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAoXCJQcm9tb3RlVG9Qcm9kXCIsIHtcbiAgICAgICAgICAgIGFjdGlvbk5hbWU6IFwiUHJvbW90ZVRvUHJvZFwiLFxuICAgICAgICAgICAgLy8gQ3VzdG9tIHN0ZXBzIGJ5cGFzcyBzdGFnZSBwcmUvcG9zdCBvcmRlcmluZywgc28gcnVuT3JkZXIgbXVzdCBiZSBleHBsaWNpdGx5IHNldC5cbiAgICAgICAgICAgIC8vIFNldCB0byA1IHRvIGVuc3VyZSB0aGlzIHJ1bnMgYWZ0ZXIgYWxsIE9yY2FCdXNHYW1tYSBzdGFnZSBzdGVwcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIC8vIChHYW1tYSBkZXBsb3ltZW50IHR5cGljYWxseSB1c2VzIDIgc3RlcHMsIHNvIDUgcHJvdmlkZXMgYWRlcXVhdGUgYnVmZmVyKVxuICAgICAgICAgICAgcnVuT3JkZXI6IDUsXG4gICAgICAgICAgICAvLyA2MC1taW51dGUgdGltZW91dCBhbGxvd3MgcXVldWVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgdG8gcHJvY2VlZCBpZiBhcHByb3ZhbCBleHBpcmVzXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDYwKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJPcmNhQnVzUHJvZFwiLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBpZiAoc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkpIHtcbiAgICAgIGNka1BpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseS5wcm9qZWN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlU2xhY2tOb3RpZmljYXRpb24gPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIvY2hhdGJvdF9hcm4vc2xhY2svYWxlcnRzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbi5mcm9tU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBpcGVsaW5lLm5vdGlmeU9uKFwiUGlwZWxpbmVTbGFja05vdGlmaWNhdGlvblwiLCB0YXJnZXQsIHtcbiAgICAgICAgZXZlbnRzOiBwcm9wcy5ub3RpZmljYXRpb25FdmVudHMgfHwgW1xuICAgICAgICAgIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbFR5cGU6IERldGFpbFR5cGUuRlVMTCxcbiAgICAgICAgbm90aWZpY2F0aW9uUnVsZU5hbWU6IGBPcmNhQnVzLSR7cHJvcHMucGlwZWxpbmVOYW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAgd2l0aCByZXF1aXJlZCBydW5PcmRlci5cbiAqL1xuaW50ZXJmYWNlIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzIGV4dGVuZHMgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIG9yZGVyIGZvciB0aGlzIGFjdGlvbiBpbiB0aGUgcGlwZWxpbmUgc3RhZ2UuIFRoZSBzdGFnZSBQcmUvUG9zdCBvcmRlciBkb2VzIG5vdCBhcHBseSB0byB0aGlzIGN1c3RvbVxuICAgKiBzdGVwL2FjdGlvbiwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJ1bk9yZGVyLlxuICAgKi9cbiAgcnVuT3JkZXI6IG51bWJlcjtcbn1cbi8qKlxuICogQ3VzdG9tIG1hbnVhbCBhcHByb3ZhbCBzdGVwIGZvciBDREsgQ29kZVBpcGVsaW5lLlxuICpcbiAqIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgZ2FwIHRvIGVuYWJsZSB1c2luZyBNYW51YWxBcHByb3ZhbEFjdGlvbiB3aXRoaW4gYSBTdGVwIGNsYXNzLFxuICogbWFraW5nIGl0IGNvbXBhdGlibGUgd2l0aCBjZGsucGlwZWxpbmVzIGNvbnN0cnVjdHMuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW51YWwgYXBwcm92YWwgYWN0aW9uLCBpbmNsdWRpbmdcbiAqL1xuY2xhc3MgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwXG4gIGV4dGVuZHMgU3RlcFxuICBpbXBsZW1lbnRzIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHM7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQpO1xuICAgIHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcHJvZHVjZUFjdGlvbihcbiAgICBzdGFnZTogSVN0YWdlLFxuICAgIG9wdGlvbnM6IFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICApOiBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0IHtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uKHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykpO1xuXG4gICAgcmV0dXJuIHsgcnVuT3JkZXJzQ29uc3VtZWQ6IDEgfTtcbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
307
+ class FailOnDriftBuildStep extends pipelines_1.CodeBuildStep {
308
+ constructor(id, { accountEnv, stackId, cdkCommand, installCommand, }) {
309
+ const cdkInstall = installCommand
310
+ ? installCommand
311
+ : "pnpm install --frozen-lockfile --ignore-scripts";
312
+ super(id, {
313
+ commands: [
314
+ "node -v",
315
+ "npm install --global corepack@latest",
316
+ "corepack --version",
317
+ "corepack enable",
318
+ cdkInstall,
319
+ `LOOKUP_ROLE_ARN="arn:aws:iam::${accountEnv.account}:role/cdk-hnb659fds-lookup-role-${accountEnv.account}-${accountEnv.region}"`,
320
+ 'SESSION_NAME="drift-check"',
321
+ 'read AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN < <(aws sts assume-role --role-arn "$LOOKUP_ROLE_ARN" --role-session-name "$SESSION_NAME" --duration-seconds 900 --query \'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]\' --output text)',
322
+ "export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN",
323
+ `export AWS_DEFAULT_REGION="${accountEnv.region}"`,
324
+ "aws sts get-caller-identity",
325
+ `if ${cdkCommand} ls | grep -Fq "${stackId}"; then echo "Stack ${stackId} found; checking for drift..."; ${cdkCommand} drift "${stackId}" -e --fail; else echo "Stack not found in cdk ls; skipping drift check."; fi`,
326
+ ],
327
+ rolePolicyStatements: [
328
+ new aws_iam_1.PolicyStatement({
329
+ actions: ["sts:AssumeRole"],
330
+ resources: [
331
+ `arn:aws:iam::${accountEnv.account}:role/cdk-hnb659fds-lookup-role-${accountEnv.account}-${accountEnv.region}`,
332
+ ],
333
+ }),
334
+ ],
335
+ });
336
+ }
337
+ }
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFPc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUk4QztBQUM5QyxpREFBc0Q7QUFFdEQ7O0dBRUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHO0lBQ25ELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNQLGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFrTEY7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTOztJQUNwRDs7T0FFRztJQUNNLFFBQVEsQ0FBVztJQUU1QixZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFtQztRQUVuQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3pELElBQUksRUFDSixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FDOUMsV0FBVyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQzdCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCO1lBQ0UsYUFBYSxFQUFFLFdBQVc7WUFDMUIsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLCtCQUErQixHQUNuQyxLQUFLLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDO1FBQzVDLE1BQU0sY0FBYyxHQUFHLCtCQUErQjtZQUNwRCxDQUFDLENBQUMsK0NBQTZCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWM7WUFDL0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRTtZQUMzRCxjQUFjLEVBQUUsY0FBYztZQUM5QixZQUFZLEVBQUUsK0JBQVksQ0FBQyxFQUFFO1lBQzdCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7WUFFL0MsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRCxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQTJCLENBQUM7WUFDbkUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRTtnQkFDMUM7b0JBQ0UsZ0JBQWdCLEVBQUU7d0JBQ2hCLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxRQUFRLEVBQUU7b0NBQ1IsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztpQ0FDL0I7Z0NBQ0QsU0FBUyxFQUFFLFNBQVM7NkJBQ3JCO3lCQUNGO3dCQUNELGdCQUFnQixFQUFFLHdCQUF3QjtxQkFDM0M7b0JBQ0QsWUFBWSxFQUFFLDBCQUEwQjtpQkFDekM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLE1BQU0sRUFDSixPQUFPLEVBQUUsa0JBQWtCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQzNELGdCQUFnQixFQUFFLHVCQUF1QixHQUFHLFNBQVMsR0FDdEQsR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUkseUJBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDbkQsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixLQUFLLEVBQUUsVUFBVTtZQUNqQixnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSwyQkFBVyxDQUFDLEtBQUs7Z0JBQzlCLFVBQVUsRUFBRSxrQ0FBa0IsQ0FBQywyQkFBMkI7Z0JBQzFELG9CQUFvQixFQUFFO29CQUNwQixZQUFZLEVBQUU7d0JBQ1osS0FBSyxFQUFFLDJCQUEyQjtxQkFDbkM7aUJBQ0Y7YUFDRjtZQUNELGdCQUFnQixFQUFFLHVCQUF1QjtnQkFDdkMsQ0FBQyxDQUFDLHlCQUFTLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDO2dCQUMvQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxNQUFNLEVBQ0osT0FBTyxFQUFFLGtCQUFrQixFQUMzQixnQkFBZ0IsRUFBRSx1QkFBdUIsR0FBRyxTQUFTLEdBQ3RELEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUkseUJBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDbkQsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixLQUFLLEVBQUUsVUFBVTtZQUNqQixnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSwyQkFBVyxDQUFDLEtBQUs7Z0JBQzlCLFVBQVUsRUFBRSxrQ0FBa0IsQ0FBQywyQkFBMkI7Z0JBQzFELG9CQUFvQixFQUFFO29CQUNwQixZQUFZLEVBQUU7d0JBQ1osS0FBSyxFQUFFLDJCQUEyQjtxQkFDbkM7aUJBQ0Y7YUFDRjtZQUNELGdCQUFnQixFQUFFLHVCQUF1QjtnQkFDdkMsQ0FBQyxDQUFDLHlCQUFTLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDO2dCQUMvQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxjQUFjLEdBQUcsNkNBQXFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSx5QkFBYSxDQUFDLFVBQVUsRUFBRTtZQUM5QyxlQUFlLEVBQUU7Z0JBQ2YsU0FBUztnQkFDVCxzQ0FBc0M7Z0JBQ3RDLG9CQUFvQjtnQkFDcEIsaUJBQWlCO2FBQ2xCO1lBQ0QsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzNCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUztZQUNqRCxnQkFBZ0IsRUFBRSx5QkFBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7U0FDdkQsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLHdCQUFZLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzVELFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUMzQixLQUFLLEVBQUUsU0FBUztZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixpQkFBaUIsRUFBRTtnQkFDakIsZ0JBQWdCLEVBQUU7b0JBQ2hCLFdBQVcsRUFBRSwyQkFBVyxDQUFDLEtBQUs7b0JBQzlCLFVBQVUsRUFBRSxrQ0FBa0IsQ0FBQywyQkFBMkI7b0JBQzFELG9CQUFvQixFQUFFO3dCQUNwQixZQUFZLEVBQUU7NEJBQ1osS0FBSyxFQUFFLDJCQUEyQjt5QkFDbkM7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFrQjtZQUNyQyxJQUFJLEVBQUUseUJBQWdCO1lBQ3RCLEtBQUssRUFBRSwwQkFBaUI7WUFDeEIsSUFBSSxFQUFFLHlCQUFnQjtTQUN2QixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUM7UUFFbkQsOEVBQThFO1FBQzlFLDJEQUEyRDtRQUMzRCw2Q0FBNkM7UUFDN0MsSUFBSSx1QkFBa0QsQ0FBQztRQUN2RCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlCLHVCQUF1QixHQUFHLElBQUkseUJBQWEsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDckUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLFFBQVEsRUFBRTtvQkFDUixxREFBcUQ7b0JBQ3JELGtDQUFrQztvQkFDbEMsZUFBZTtvQkFDZixtQkFBbUI7b0JBQ25CLElBQUk7b0JBQ0osaUJBQWlCO29CQUNqQiw2QkFBNkI7b0JBQzdCLElBQUk7b0JBQ0osc0NBQXNDO2lCQUN2QzthQUNGLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzNDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxhQUFhLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FDckMsR0FBRyxhQUFhLElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbEUscUJBQXFCO1FBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGNBQWM7WUFDdEMsaURBQWlELENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFM0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLFdBQVcsQ0FBQyxRQUFRLENBQ2xCLElBQUksZUFBZSxDQUNqQixJQUFJLEVBQ0osV0FBVyxFQUNYLFFBQVEsQ0FBQyxJQUFJLEVBQ2IsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUN0QixLQUFLLENBQUMsVUFBVSxFQUNoQixLQUFLLENBQUMsWUFBWSxDQUNuQixFQUNEO1lBQ0UsR0FBRyxFQUFFLGdCQUFnQjtnQkFDbkIsQ0FBQyxDQUFDO29CQUNFLElBQUksb0JBQW9CLENBQUMsc0JBQXNCLEVBQUU7d0JBQy9DLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSTt3QkFDekIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUM7d0JBQ2hDLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixjQUFjLEVBQUUsYUFBYTtxQkFDOUIsQ0FBQztpQkFDSDtnQkFDSCxDQUFDLENBQUMsU0FBUztTQUNkLENBQ0YsQ0FBQztRQUVGOztXQUVHO1FBQ0gsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO1FBRXBDLFdBQVcsQ0FBQyxRQUFRLENBQ2xCLElBQUksZUFBZSxDQUNqQixJQUFJLEVBQ0osWUFBWSxFQUNaLFFBQVEsQ0FBQyxLQUFLLEVBQ2QsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUN2QixLQUFLLENBQUMsVUFBVSxFQUNoQixLQUFLLENBQUMsWUFBWSxDQUNuQixFQUNEO1lBQ0UsR0FBRyxFQUFFLGdCQUFnQjtnQkFDbkIsQ0FBQyxDQUFDO29CQUNFLElBQUksb0JBQW9CLENBQUMsdUJBQXVCLEVBQUU7d0JBQ2hELFVBQVUsRUFBRSxRQUFRLENBQUMsS0FBSzt3QkFDMUIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ2pDLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixjQUFjLEVBQUUsYUFBYTtxQkFDOUIsQ0FBQztpQkFDSDtnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLElBQUksRUFBRTtnQkFDSixJQUFJLHdCQUF3QixDQUFDLGVBQWUsRUFBRTtvQkFDNUMsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLG1GQUFtRjtvQkFDbkYsNEVBQTRFO29CQUM1RSwyRUFBMkU7b0JBQzNFLFFBQVEsRUFBRSxDQUFDO29CQUNYLHFGQUFxRjtvQkFDckYsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDOUIsQ0FBQzthQUNIO1NBQ0YsQ0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUM7UUFFbEMsV0FBVyxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxlQUFlLENBQ2pCLElBQUksRUFDSixXQUFXLEVBQ1gsUUFBUSxDQUFDLElBQUksRUFDYixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxLQUFLLEVBQ1gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQ3RCLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLEtBQUssQ0FBQyxZQUFZLENBQ25CLEVBQ0Q7WUFDRSxHQUFHLEVBQUUsZ0JBQWdCO2dCQUNuQixDQUFDLENBQUM7b0JBQ0UsSUFBSSxvQkFBb0IsQ0FBQyxzQkFBc0IsRUFBRTt3QkFDL0MsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJO3dCQUN6QixPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDaEMsVUFBVSxFQUFFLFNBQVM7d0JBQ3JCLGNBQWMsRUFBRSxhQUFhO3FCQUM5QixDQUFDO2lCQUNIO2dCQUNILENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FDRixDQUFDO1FBRUYsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQ2hELHVCQUF1QixDQUFDLE9BQU8sQ0FDaEMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxNQUFNLHlCQUF5QixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3ZFLElBQUksRUFDSixpQ0FBaUMsQ0FDbEMsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLHVDQUF5QixDQUFDLGdDQUFnQyxDQUN2RSxJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLHlCQUF5QixDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxFQUFFO2dCQUMxRCxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixJQUFJO29CQUNsQyw2Q0FBMEIsQ0FBQyx5QkFBeUI7aUJBQ3JEO2dCQUNELFVBQVUsRUFBRSxzQ0FBVSxDQUFDLElBQUk7Z0JBQzNCLG9CQUFvQixFQUFFLFdBQVcsS0FBSyxDQUFDLFlBQVksRUFBRTthQUN0RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUEvVEgsMERBZ1VDO0FBWUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHdCQUNKLFNBQVEsZ0JBQUk7SUFHSyx5QkFBeUIsQ0FBZ0M7SUFDMUUsWUFBWSxFQUFVLEVBQUUsT0FBc0M7UUFDNUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRU0sYUFBYSxDQUNsQixLQUFhLEVBQ2IsT0FBNkI7UUFFN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLCtDQUFvQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7UUFFMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVELE1BQU0sZUFBZ0IsU0FBUSxtQkFBSztJQUNqQyxZQUNFLEtBQWdCLEVBQ2hCLGVBQXVCLEVBQ3ZCLEdBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFVBQW1FLEVBQ25FLGFBQWtCLEVBQ2xCLFVBQWtCLEVBQ2xCLFlBQXFCO1FBRXJCLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUMsSUFBSSxNQUFNLEdBQUcsOEJBQThCLFVBQVUsRUFBRSxDQUFDO1FBQ3hELElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLFlBQVksRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFO2dCQUNKLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLGtCQUFrQixFQUFFLE1BQU07YUFDM0I7WUFDRCxHQUFHLGFBQWE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBZ0NELE1BQU0sb0JBQXFCLFNBQVEseUJBQWE7SUFDOUMsWUFDRSxFQUFVLEVBQ1YsRUFDRSxVQUFVLEVBQ1YsT0FBTyxFQUNQLFVBQVUsRUFDVixjQUFjLEdBQ1k7UUFFNUIsTUFBTSxVQUFVLEdBQUcsY0FBYztZQUMvQixDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsaURBQWlELENBQUM7UUFFdEQsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRTtnQkFDUixTQUFTO2dCQUNULHNDQUFzQztnQkFDdEMsb0JBQW9CO2dCQUNwQixpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBRVYsaUNBQWlDLFVBQVUsQ0FBQyxPQUFPLG1DQUFtQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2hJLDRCQUE0QjtnQkFDNUIsbVFBQW1RO2dCQUNuUSxrRUFBa0U7Z0JBQ2xFLDhCQUE4QixVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsRCw2QkFBNkI7Z0JBRTdCLE1BQU0sVUFBVSxtQkFBbUIsT0FBTyx1QkFBdUIsT0FBTyxtQ0FBbUMsVUFBVSxXQUFXLE9BQU8sK0VBQStFO2FBQ3ZOO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCxnQkFBZ0IsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtxQkFDL0c7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBJUHJvamVjdCxcbiAgTGludXhBcm1CdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxuICBJU3RhZ2UsXG4gIEFydGlmYWN0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB9IGZyb20gXCIuL2FydGlmYWN0LWJ1Y2tldFwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbiAgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIHRoZSBzeW50aCBzdGVwIGluIHRoZSBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlRW52UHJvcHMge1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgYmV0YSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBnYW1tYSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJldGEgKGRldikgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhbW1hIChzdGcpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBwcmUtZGVwbG95bWVudCBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyaWZ0Q2hlY2tDb25maWcge1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBtYWluIGNvbW1hbmQgZm9yIHRoZSBidWlsZCBzdGVwIHRvIHJ1blxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYXJ0aWFsIGJ1aWxkc3BlYyBmb3IgdGhpcyBDb2RlQnVpbGRTdGVwXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhY2tQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYnJhbmNoIG5hbWUgdGhlIHBpcGVsaW5lIHdpbGwgbGlzdGVuIHRvLlxuICAgKiBBdm9pZCB1c2luZyBicmFuY2ggbmFtZXMgdGhhdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2VzLlxuICAgKiBBbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycyBhcmU6IFwiKyAtID0gLiBfIDogLyBAXCIuXG4gICAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgZHVlIHRvIEFXUyByZXNvdXJjZSB0YWdnaW5nIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgbmFtZSB0aGF0IGV4aXN0IGluIHRoZSAnT3JjYUJ1cycgZ2l0aHViIG9yZ2FuaXNhdGlvbi4gZS5nLiBgYS1taWNyby1zZXJ2aWNlLXJlcG9gXG4gICAqL1xuICByZWFkb25seSBnaXRodWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gd2hpY2ggdGhlIHBpcGVsaW5lIHdpbGwgYmUgZGVwbG95aW5nIHRvIGl0cyByZXNwZWN0aXZlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBhbnk7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgbmFtZSAoaW4gY2xvdWRmb3JtYXRpb24pIGZvciB0aGUgc3RhY2sgZGVmaW5lZCBpbiBgc3RhY2tgLiBUaGUgc3RhY2sgbmFtZSB3aWxsIHByZXBlbmQgd2l0aCB0aGUgc3RhZ2VcbiAgICogbmFtZSBlLmcuIGBPcmNhQnVzQmV0YS08c3RhY2tOYW1lPmAsIGBPcmNhQnVzR2FtbWEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c1Byb2QtPHN0YWNrTmFtZT5gXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBjb25maWd1cmF0aW9uL2NvbnN0YW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzdGFjayBwcm9wcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQ29uZmlnOiBTdGFja0NvbmZpZ1Byb3BzO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5hbWUgaW4gdGhlIGJhc3Rpb24gYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGF0dGVybnMgb2YgR2l0IHJlcG9zaXRvcnkgZmlsZSBwYXRocyB0aGF0LCB3aGVuIGEgY29tbWl0IGlzIHB1c2hlZCwgYXJlIHRvIGJlIElOQ0xVREVEIGFzIGNyaXRlcmlhIHRoYXQgc3RhcnRzIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBFWENMVURFRCBmcm9tIHN0YXJ0aW5nIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1biB0byBzeW50aCB0aGUgY2RrIHN0YWNrIHdoaWNoIGFsc28gaW5zdGFsbGluZyB0aGUgY2RrIGRlcGVuZGVuY2llcy4gZS5nLiBbXCJ5YXJuIGluc3RhbGwgLS1pbW11dGFibGVcIiwgXCJ5YXJuIGNkayBzeW50aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU3ludGhDbWQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjZGsgb3V0cHV0IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBjZGtPdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcCBkdXJpbmcgdGhlIENESyBzeW50aCBwaGFzZS4gSXQgd2lsbCBwYXNzZWQgYXMgdGhlIGBwYXJ0aWFsQnVpbGRTcGVjYCB0byB0aGUgYENvZGVCdWlsZFN0ZXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDXG4gICAqL1xuICByZWFkb25seSBzeW50aEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIHRoZSBtYWluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdElhY1Rlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIGVuc3VyZSB5b3VyIGNvbW1hbmQgaW5jbHVkZXMgJ2NkJyB0byB0aGUgbWFpbiBhcHAgZGlyZWN0b3J5LCBhcyB0aGUgYnVpbGQgY29udGV4dCBzdGFydHMgZnJvbSB0aGUgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRBcHBUZXN0Q29uZmlnOiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIEluZnJhc3RydWN0dXJlLWFzLUNvZGUgKElhQykgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogVGhpcyBzdGVwIHdpbGwgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIHtAbGluayB1bml0QXBwVGVzdENvbmZpZ30gYXMgcGFydCBvZiB0aGUgc3ludGggc3RhZ2UgZGVwZW5kZW5jaWVzLlxuICAgKiBCb3RoIG11c3Qgc3VjY2VlZCBiZWZvcmUgdGhlIHN5bnRoIHN0ZXAgcnVucy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29tbWFuZCB3aWxsIGJlIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG86IFtcIm1ha2UgaW5zdGFsbFwiLCBcIm1ha2UgdGVzdFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdElhY1Rlc3RDb25maWc/OiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBkZXBsb3ltZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFnZUVudj86IFN0YWdlRW52UHJvcHM7XG4gIC8qKlxuICAgKiBFbmFibGUgbm90aWZpY2F0aW9uIHRvIHRoZSAnYWxlcnRzLWJ1aWxkJyBzbGFjayBjaGFubmVsLlxuICAgKiBAZGVmYXVsdCBUcnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTbGFja05vdGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIFNsYWNrIGNoYW5uZWwgbm90aWZpY2F0aW9uLlxuICAgKiBPbmx5IGFwcGxpZXMgaWYgYGVuYWJsZVNsYWNrTm90aWZpY2F0aW9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1BpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRURdIOKAk1xuICAgKiAgIE9ubHkgZmFpbGVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgd2lsbCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXVzZSB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgbG9vayB1cCB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VFeGlzdGluZ0FydGlmYWN0QnVja2V0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlIGFzc2V0cyBmcm9tIHRoZSBDREsgYXNzZW1ibHkgcHJlLWRlcGxveW1lbnQgdG8gcHJldmVudCBoaXR0aW5nIENvZGVQaXBlbGluZSdzIDI1NiBNQiBhcnRpZmFjdCBzaXplIGxpbWl0LlxuICAgKiBVc2VmdWwgd2hlbiBDREsgYXNzZXRzIChMYW1iZGEgY29kZSwgRG9ja2VyIGltYWdlcywgZXRjLikgYXJlIGxhcmdlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgKi9cbiAgcmVhZG9ubHkgc3RyaXBBc3NlbWJseUFzc2V0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBwaXBlbGluZSB3aWxsIGNoZWNrIGZvciBDbG91ZEZvcm1hdGlvbiBkcmlmdCBhbmQgZmFpbCBpZiBkZXRlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRyaWZ0Q2hlY2tDb25maWc/OiBEcmlmdENoZWNrQ29uZmlnO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdElhY1Rlc3RDb21tYW5kID0gW1wibWFrZSBpbnN0YWxsXCIsIFwibWFrZSB0ZXN0XCJdLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWMgPSB1bmRlZmluZWQsXG4gICAgfSA9IHByb3BzLnVuaXRJYWNUZXN0Q29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHVuaXRJYWNUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0SWFjVGVzdFwiLCB7XG4gICAgICBjb21tYW5kczogdW5pdElhY1Rlc3RDb21tYW5kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdElhY1BhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkaW5nIHVuaXQgdGVzdCBmb3IgdGhlIG1haW4gYXBwXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMgPSB1bmRlZmluZWQsXG4gICAgfSA9IHByb3BzLnVuaXRBcHBUZXN0Q29uZmlnO1xuICAgIGNvbnN0IHVuaXRBcHBUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0QXBwVGVzdFwiLCB7XG4gICAgICBjb21tYW5kczogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBzeW50aEJ1aWxkU3BlYyA9IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgfSA9IHByb3BzO1xuICAgIGNvbnN0IHN5bnRoU3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiQ2RrU3ludGhcIiwge1xuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgXSxcbiAgICAgIGNvbW1hbmRzOiBwcm9wcy5jZGtTeW50aENtZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcHJvcHMuY2RrT3V0IHx8IFwiY2RrLm91dFwiLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogQnVpbGRTcGVjLmZyb21PYmplY3Qoc3ludGhCdWlsZFNwZWMpLFxuICAgIH0pO1xuICAgIHN5bnRoU3RlcC5hZGRTdGVwRGVwZW5kZW5jeSh1bml0SWFjVGVzdCk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRBcHBUZXN0KTtcblxuICAgIGNvbnN0IGNka1BpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCBcIkNES0NvZGVQaXBlbGluZVwiLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBzeW50aDogc3ludGhTdGVwLFxuICAgICAgc2VsZk11dGF0aW9uOiB0cnVlLFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRTdGFnZUVudjogU3RhZ2VFbnZQcm9wcyA9IHtcbiAgICAgIGJldGE6IEJFVEFfRU5WSVJPTk1FTlQsXG4gICAgICBnYW1tYTogR0FNTUFfRU5WSVJPTk1FTlQsXG4gICAgICBwcm9kOiBQUk9EX0VOVklST05NRU5ULFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VFbnYgPSBwcm9wcy5zdGFnZUVudiB8fCBkZWZhdWx0U3RhZ2VFbnY7XG5cbiAgICAvLyBBZnRlciBhc3NldHMgYXJlIHB1Ymxpc2hlZCwgdGhleSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICAvLyB0byBoZWxwIHByZXZlbnQgaGl0dGluZyB0aGUgQ29kZVBpcGVsaW5lIGFydGlmYWN0IGxpbWl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIGxldCBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuc3RyaXBBc3NlbWJseUFzc2V0cykge1xuICAgICAgc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XCIsIHtcbiAgICAgICAgaW5wdXQ6IGNka1BpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICAgXCJaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKVwiLFxuICAgICAgICAgIFwiZWNobyAkUzNfUEFUSFwiLFxuICAgICAgICAgIFwiZWNobyAkWklQX0FSQ0hJVkVcIixcbiAgICAgICAgICBcImxzXCIsXG4gICAgICAgICAgXCJybSAtcmZ2IGFzc2V0LipcIixcbiAgICAgICAgICBcInppcCAtciAtcSAtQSAkWklQX0FSQ0hJVkUgKlwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcImF3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSFwiLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNka1BpcGVsaW5lLmFkZFdhdmUoXCJCZWZvcmVTdGFnZURlcGxveW1lbnRcIiwge1xuICAgICAgICBwcmU6IFtzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgZnVuY3Rpb24gdG8gZ2V0IFN0YWNrSWQgZm9yIGRyaWZ0IGNoZWNrXG4gICAgY29uc3Qgcm9vdFN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IHRoaXMubm9kZS5pZDtcbiAgICBjb25zdCBnZXRTdGFja0lkID0gKGVudk5hbWU6IHN0cmluZykgPT5cbiAgICAgIGAke3Jvb3RTdGFja05hbWV9LyR7Y29uc3RydWN0SWR9LyR7ZW52TmFtZX0vJHtwcm9wcy5zdGFja05hbWV9YDtcblxuICAgIC8vIERyaWZ0IGNoZWNrIGNvbmZpZ1xuICAgIGNvbnN0IGlzRHJpZnRDaGVja1N0ZXAgPSAhIXByb3BzLmRyaWZ0Q2hlY2tDb25maWc7XG4gICAgY29uc3QgY2RrSW5zdGFsbENtZCA9XG4gICAgICBwcm9wcy5kcmlmdENoZWNrQ29uZmlnPy5pbnN0YWxsQ29tbWFuZCA/P1xuICAgICAgXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiO1xuICAgIGNvbnN0IGNka1J1bkNtZCA9IHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/LmNka0NvbW1hbmQgPz8gYGA7XG5cbiAgICBjb25zdCBiZXRhRW52TmFtZSA9IFwiT3JjYUJ1c0JldGFcIjtcbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGJldGFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5iZXRhLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5iZXRhLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxCZXRhQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmJldGEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChiZXRhRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEdBTU1BXG4gICAgICovXG4gICAgY29uc3QgZ2FtbWFFbnZOYW1lID0gXCJPcmNhQnVzR2FtbWFcIjtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZ2FtbWFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuZ2FtbWEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEdhbW1hQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmdhbW1hLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQoZ2FtbWFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0OiBbXG4gICAgICAgICAgbmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcChcIlByb21vdGVUb1Byb2RcIiwge1xuICAgICAgICAgICAgYWN0aW9uTmFtZTogXCJQcm9tb3RlVG9Qcm9kXCIsXG4gICAgICAgICAgICAvLyBDdXN0b20gc3RlcHMgYnlwYXNzIHN0YWdlIHByZS9wb3N0IG9yZGVyaW5nLCBzbyBydW5PcmRlciBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgICAgLy8gU2V0IHRvIDUgdG8gZW5zdXJlIHRoaXMgcnVucyBhZnRlciBhbGwgT3JjYUJ1c0dhbW1hIHN0YWdlIHN0ZXBzIGNvbXBsZXRlLlxuICAgICAgICAgICAgLy8gKEdhbW1hIGRlcGxveW1lbnQgdHlwaWNhbGx5IHVzZXMgMiBzdGVwcywgc28gNSBwcm92aWRlcyBhZGVxdWF0ZSBidWZmZXIpXG4gICAgICAgICAgICBydW5PcmRlcjogNSxcbiAgICAgICAgICAgIC8vIDYwLW1pbnV0ZSB0aW1lb3V0IGFsbG93cyBxdWV1ZWQgcGlwZWxpbmUgZXhlY3V0aW9ucyB0byBwcm9jZWVkIGlmIGFwcHJvdmFsIGV4cGlyZXNcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNjApLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogUFJPRFxuICAgICAqL1xuICAgIGNvbnN0IHByb2RFbnZOYW1lID0gXCJPcmNhQnVzUHJvZFwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9kRW52TmFtZSxcbiAgICAgICAgc3RhZ2VFbnYucHJvZCxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcucHJvZCxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsUHJvZENoZWNrXCIsIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50RW52OiBzdGFnZUVudi5wcm9kLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQocHJvZEVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBpZiAoc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkpIHtcbiAgICAgIGNka1BpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseS5wcm9qZWN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlU2xhY2tOb3RpZmljYXRpb24gPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIvY2hhdGJvdF9hcm4vc2xhY2svYWxlcnRzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbi5mcm9tU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBpcGVsaW5lLm5vdGlmeU9uKFwiUGlwZWxpbmVTbGFja05vdGlmaWNhdGlvblwiLCB0YXJnZXQsIHtcbiAgICAgICAgZXZlbnRzOiBwcm9wcy5ub3RpZmljYXRpb25FdmVudHMgfHwgW1xuICAgICAgICAgIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbFR5cGU6IERldGFpbFR5cGUuRlVMTCxcbiAgICAgICAgbm90aWZpY2F0aW9uUnVsZU5hbWU6IGBPcmNhQnVzLSR7cHJvcHMucGlwZWxpbmVOYW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAgd2l0aCByZXF1aXJlZCBydW5PcmRlci5cbiAqL1xuaW50ZXJmYWNlIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzIGV4dGVuZHMgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIG9yZGVyIGZvciB0aGlzIGFjdGlvbiBpbiB0aGUgcGlwZWxpbmUgc3RhZ2UuIFRoZSBzdGFnZSBQcmUvUG9zdCBvcmRlciBkb2VzIG5vdCBhcHBseSB0byB0aGlzIGN1c3RvbVxuICAgKiBzdGVwL2FjdGlvbiwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJ1bk9yZGVyLlxuICAgKi9cbiAgcnVuT3JkZXI6IG51bWJlcjtcbn1cbi8qKlxuICogQ3VzdG9tIG1hbnVhbCBhcHByb3ZhbCBzdGVwIGZvciBDREsgQ29kZVBpcGVsaW5lLlxuICpcbiAqIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgZ2FwIHRvIGVuYWJsZSB1c2luZyBNYW51YWxBcHByb3ZhbEFjdGlvbiB3aXRoaW4gYSBTdGVwIGNsYXNzLFxuICogbWFraW5nIGl0IGNvbXBhdGlibGUgd2l0aCBjZGsucGlwZWxpbmVzIGNvbnN0cnVjdHMuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW51YWwgYXBwcm92YWwgYWN0aW9uLCBpbmNsdWRpbmdcbiAqL1xuY2xhc3MgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwXG4gIGV4dGVuZHMgU3RlcFxuICBpbXBsZW1lbnRzIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHM7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQpO1xuICAgIHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcHJvZHVjZUFjdGlvbihcbiAgICBzdGFnZTogSVN0YWdlLFxuICAgIG9wdGlvbnM6IFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICApOiBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0IHtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uKHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykpO1xuXG4gICAgcmV0dXJuIHsgcnVuT3JkZXJzQ29uc3VtZWQ6IDEgfTtcbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBBV1MgYWNjb3VudCBhbmQgcmVnaW9uIHdoZXJlIHRoZSBkcmlmdCBjaGVjayBydW5zLlxuICAgKiBVc2VkIHRvIGFzc3VtZSB0aGUgQ0RLIGxvb2t1cCByb2xlIGFuZCBzZXQgQVdTX0RFRkFVTFRfUkVHSU9OLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEVudjogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgQ0RLIHN0YWNrIElEIHRvIGNoZWNrIGZvciBkcmlmdC5cbiAgICpcbiAgICogRm9ybWF0OiBgPHJvb3RTdGFjaz4vPGNvbnN0cnVjdElkPi88ZW52TmFtZT4vPHN0YWNrTmFtZT5gXG4gICAqXG4gICAqIEV4YW1wbGU6IGBEZXZTdGFjay9EZXBsb3ltZW50UGlwZWxpbmUvT3JjYUJ1c0JldGEvVGVzdFN0YWNrYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIEZhaWxPbkRyaWZ0QnVpbGRTdGVwIGV4dGVuZHMgQ29kZUJ1aWxkU3RlcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAge1xuICAgICAgYWNjb3VudEVudixcbiAgICAgIHN0YWNrSWQsXG4gICAgICBjZGtDb21tYW5kLFxuICAgICAgaW5zdGFsbENvbW1hbmQsXG4gICAgfTogRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyxcbiAgKSB7XG4gICAgY29uc3QgY2RrSW5zdGFsbCA9IGluc3RhbGxDb21tYW5kXG4gICAgICA/IGluc3RhbGxDb21tYW5kXG4gICAgICA6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIjtcblxuICAgIHN1cGVyKGlkLCB7XG4gICAgICBjb21tYW5kczogW1xuICAgICAgICBcIm5vZGUgLXZcIixcbiAgICAgICAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgICAgICAgXCJjb3JlcGFjayAtLXZlcnNpb25cIixcbiAgICAgICAgXCJjb3JlcGFjayBlbmFibGVcIixcbiAgICAgICAgY2RrSW5zdGFsbCxcblxuICAgICAgICBgTE9PS1VQX1JPTEVfQVJOPVwiYXJuOmF3czppYW06OiR7YWNjb3VudEVudi5hY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtJHthY2NvdW50RW52LmFjY291bnR9LSR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICAnU0VTU0lPTl9OQU1FPVwiZHJpZnQtY2hlY2tcIicsXG4gICAgICAgICdyZWFkIEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTiA8IDwoYXdzIHN0cyBhc3N1bWUtcm9sZSAtLXJvbGUtYXJuIFwiJExPT0tVUF9ST0xFX0FSTlwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXCIkU0VTU0lPTl9OQU1FXCIgLS1kdXJhdGlvbi1zZWNvbmRzIDkwMCAtLXF1ZXJ5IFxcJ0NyZWRlbnRpYWxzLltBY2Nlc3NLZXlJZCxTZWNyZXRBY2Nlc3NLZXksU2Vzc2lvblRva2VuXVxcJyAtLW91dHB1dCB0ZXh0KScsXG4gICAgICAgIFwiZXhwb3J0IEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTlwiLFxuICAgICAgICBgZXhwb3J0IEFXU19ERUZBVUxUX1JFR0lPTj1cIiR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICBcImF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eVwiLFxuXG4gICAgICAgIGBpZiAke2Nka0NvbW1hbmR9IGxzIHwgZ3JlcCAtRnEgXCIke3N0YWNrSWR9XCI7IHRoZW4gZWNobyBcIlN0YWNrICR7c3RhY2tJZH0gZm91bmQ7IGNoZWNraW5nIGZvciBkcmlmdC4uLlwiOyAke2Nka0NvbW1hbmR9IGRyaWZ0IFwiJHtzdGFja0lkfVwiIC1lIC0tZmFpbDsgZWxzZSBlY2hvIFwiU3RhY2sgbm90IGZvdW5kIGluIGNkayBsczsgc2tpcHBpbmcgZHJpZnQgY2hlY2suXCI7IGZpYCxcbiAgICAgIF0sXG4gICAgICByb2xlUG9saWN5U3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzdHM6QXNzdW1lUm9sZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
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.104" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.0.0" };
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.104" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.0.0" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
55
55
  ['ARM64']: lambda.Architecture.ARM_64
56
56
  };
57
57
  class EcsFargateTaskConstruct extends constructs_1.Construct {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.104" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.0.0" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
@@ -17,7 +17,7 @@ var SfnEventStatus;
17
17
  SfnEventStatus["ABORTED"] = "ABORTED";
18
18
  })(SfnEventStatus || (exports.SfnEventStatus = SfnEventStatus = {}));
19
19
  class SfnSlackNotification extends constructs_1.Construct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "0.0.104" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.0.0" };
21
21
  rule;
22
22
  constructor(scope, id, props) {
23
23
  super(scope, id);
package/lambda/index.js CHANGED
@@ -57,7 +57,7 @@ function getPythonUvDockerImage() {
57
57
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
58
58
  }
59
59
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
60
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.104" };
60
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.0.0" };
61
61
  // Class constructs, to be used for caching the layers
62
62
  // This means that if there are multiple lambdas throughout the stack
63
63
  // They will all use the same layer
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
13
  * SNS topic.
14
14
  */
15
15
  class MonitoredQueue extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.104" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.0.0" };
17
17
  queue;
18
18
  deadLetterQueue;
19
19
  alarm;
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.104" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.0.0" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "0.0.104",
3
+ "version": "1.0.0",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.104" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.0.0" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.104" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.0.0" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.104" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.0.0" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
11
11
  * A helper class to construct the arn for the slack SNS topic.
12
12
  */
13
13
  class SlackAlerts {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.104" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.0.0" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack