@rio-cloud/cdk-v2-constructs 8.8.0-alpha.1 → 8.8.0-alpha.3
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 +103 -28
- package/lib/sbom-catalog/catalog-project.d.ts +24 -0
- package/lib/sbom-catalog/catalog-project.js +26 -9
- package/package.json +1 -1
- package/version.json +1 -1
package/.jsii
CHANGED
|
@@ -14771,6 +14771,47 @@
|
|
|
14771
14771
|
],
|
|
14772
14772
|
"symbolId": "src/kafka/kafka-topic:KafkaTopicV4Props"
|
|
14773
14773
|
},
|
|
14774
|
+
"@rio-cloud/cdk-v2-constructs.LicensePolicy": {
|
|
14775
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
14776
|
+
"docs": {
|
|
14777
|
+
"stability": "stable",
|
|
14778
|
+
"summary": "Enum to specify which license policy should applied."
|
|
14779
|
+
},
|
|
14780
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.LicensePolicy",
|
|
14781
|
+
"kind": "enum",
|
|
14782
|
+
"locationInModule": {
|
|
14783
|
+
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
14784
|
+
"line": 31
|
|
14785
|
+
},
|
|
14786
|
+
"members": [
|
|
14787
|
+
{
|
|
14788
|
+
"docs": {
|
|
14789
|
+
"stability": "stable"
|
|
14790
|
+
},
|
|
14791
|
+
"name": "NONE"
|
|
14792
|
+
},
|
|
14793
|
+
{
|
|
14794
|
+
"docs": {
|
|
14795
|
+
"stability": "stable"
|
|
14796
|
+
},
|
|
14797
|
+
"name": "JVM_BACKEND"
|
|
14798
|
+
},
|
|
14799
|
+
{
|
|
14800
|
+
"docs": {
|
|
14801
|
+
"stability": "stable"
|
|
14802
|
+
},
|
|
14803
|
+
"name": "NPM_BACKEND"
|
|
14804
|
+
},
|
|
14805
|
+
{
|
|
14806
|
+
"docs": {
|
|
14807
|
+
"stability": "stable"
|
|
14808
|
+
},
|
|
14809
|
+
"name": "NPM_FRONTEND"
|
|
14810
|
+
}
|
|
14811
|
+
],
|
|
14812
|
+
"name": "LicensePolicy",
|
|
14813
|
+
"symbolId": "src/sbom-catalog/catalog-project:LicensePolicy"
|
|
14814
|
+
},
|
|
14774
14815
|
"@rio-cloud/cdk-v2-constructs.ListenerRule": {
|
|
14775
14816
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
14776
14817
|
"datatype": true,
|
|
@@ -18491,7 +18532,7 @@
|
|
|
18491
18532
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
18492
18533
|
"base": "constructs.Construct",
|
|
18493
18534
|
"docs": {
|
|
18494
|
-
"remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time\nand ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst apiSbom = new s3Assets.Asset(this, 'ApiSbomAsset', {\n path: 'build/api-sbom.json',\n});\nconst infrastructureSbom = new s3Assets.Asset(this, 'InfrastructureSbomAsset', {\n path: 'build/infrastructure-sbom.json',\n});\n\nnew SbomCatalogProject(this, 'CatalogUpload', {\n collectionName: 'billing',\n collectionVersion: '1.4.0',\n sharedTags: ['domain:billing'],\n children: [\n {\n name: 'api',\n sbom: apiSbom,\n additionalTags: ['component:backend'],\n },\n {\n name: 'infrastructure',\n sbom: infrastructureSbom,\n additionalTags: ['component:infrastructure'],\n },\n ],\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n});\n```",
|
|
18535
|
+
"remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time\nand ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst apiSbom = new s3Assets.Asset(this, 'ApiSbomAsset', {\n path: 'build/api-sbom.json',\n});\nconst infrastructureSbom = new s3Assets.Asset(this, 'InfrastructureSbomAsset', {\n path: 'build/infrastructure-sbom.json',\n});\n\nnew SbomCatalogProject(this, 'CatalogUpload', {\n collectionName: 'billing',\n collectionVersion: '1.4.0',\n sharedTags: ['domain:billing'],\n children: [\n {\n name: 'api',\n sbom: apiSbom,\n additionalTags: ['component:backend'],\n licensePolicy: LicensePolicy.JVM_BACKEND,\n },\n {\n name: 'infrastructure',\n sbom: infrastructureSbom,\n additionalTags: ['component:infrastructure'],\n* licensePolicy: LicensePolicy.NPM_BACKEND,\n },\n ],\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n});\n```",
|
|
18495
18536
|
"stability": "stable",
|
|
18496
18537
|
"summary": "Registers a collection of related project SBOMs and optional VEX files in the central SBOM catalog."
|
|
18497
18538
|
},
|
|
@@ -18502,7 +18543,7 @@
|
|
|
18502
18543
|
},
|
|
18503
18544
|
"locationInModule": {
|
|
18504
18545
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18505
|
-
"line":
|
|
18546
|
+
"line": 254
|
|
18506
18547
|
},
|
|
18507
18548
|
"parameters": [
|
|
18508
18549
|
{
|
|
@@ -18528,7 +18569,7 @@
|
|
|
18528
18569
|
"kind": "class",
|
|
18529
18570
|
"locationInModule": {
|
|
18530
18571
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18531
|
-
"line":
|
|
18572
|
+
"line": 253
|
|
18532
18573
|
},
|
|
18533
18574
|
"name": "SbomCatalogProject",
|
|
18534
18575
|
"symbolId": "src/sbom-catalog/catalog-project:SbomCatalogProject"
|
|
@@ -18544,10 +18585,27 @@
|
|
|
18544
18585
|
"kind": "interface",
|
|
18545
18586
|
"locationInModule": {
|
|
18546
18587
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18547
|
-
"line":
|
|
18588
|
+
"line": 83
|
|
18548
18589
|
},
|
|
18549
18590
|
"name": "SbomCatalogProjectChild",
|
|
18550
18591
|
"properties": [
|
|
18592
|
+
{
|
|
18593
|
+
"abstract": true,
|
|
18594
|
+
"docs": {
|
|
18595
|
+
"remarks": "Use `LicensePolicy.NONE` in exceptional cases only!",
|
|
18596
|
+
"stability": "stable",
|
|
18597
|
+
"summary": "Specifies the mandatory license policy to be applied to this project."
|
|
18598
|
+
},
|
|
18599
|
+
"immutable": true,
|
|
18600
|
+
"locationInModule": {
|
|
18601
|
+
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18602
|
+
"line": 111
|
|
18603
|
+
},
|
|
18604
|
+
"name": "licensePolicy",
|
|
18605
|
+
"type": {
|
|
18606
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.LicensePolicy"
|
|
18607
|
+
}
|
|
18608
|
+
},
|
|
18551
18609
|
{
|
|
18552
18610
|
"abstract": true,
|
|
18553
18611
|
"docs": {
|
|
@@ -18557,7 +18615,7 @@
|
|
|
18557
18615
|
"immutable": true,
|
|
18558
18616
|
"locationInModule": {
|
|
18559
18617
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18560
|
-
"line":
|
|
18618
|
+
"line": 87
|
|
18561
18619
|
},
|
|
18562
18620
|
"name": "name",
|
|
18563
18621
|
"type": {
|
|
@@ -18573,7 +18631,7 @@
|
|
|
18573
18631
|
"immutable": true,
|
|
18574
18632
|
"locationInModule": {
|
|
18575
18633
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18576
|
-
"line":
|
|
18634
|
+
"line": 101
|
|
18577
18635
|
},
|
|
18578
18636
|
"name": "sbom",
|
|
18579
18637
|
"type": {
|
|
@@ -18590,7 +18648,7 @@
|
|
|
18590
18648
|
"immutable": true,
|
|
18591
18649
|
"locationInModule": {
|
|
18592
18650
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18593
|
-
"line":
|
|
18651
|
+
"line": 98
|
|
18594
18652
|
},
|
|
18595
18653
|
"name": "additionalTags",
|
|
18596
18654
|
"optional": true,
|
|
@@ -18613,7 +18671,7 @@
|
|
|
18613
18671
|
"immutable": true,
|
|
18614
18672
|
"locationInModule": {
|
|
18615
18673
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18616
|
-
"line":
|
|
18674
|
+
"line": 90
|
|
18617
18675
|
},
|
|
18618
18676
|
"name": "version",
|
|
18619
18677
|
"optional": true,
|
|
@@ -18630,7 +18688,7 @@
|
|
|
18630
18688
|
"immutable": true,
|
|
18631
18689
|
"locationInModule": {
|
|
18632
18690
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18633
|
-
"line":
|
|
18691
|
+
"line": 104
|
|
18634
18692
|
},
|
|
18635
18693
|
"name": "vex",
|
|
18636
18694
|
"optional": true,
|
|
@@ -18651,7 +18709,7 @@
|
|
|
18651
18709
|
"kind": "interface",
|
|
18652
18710
|
"locationInModule": {
|
|
18653
18711
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18654
|
-
"line":
|
|
18712
|
+
"line": 114
|
|
18655
18713
|
},
|
|
18656
18714
|
"name": "SbomCatalogProjectProps",
|
|
18657
18715
|
"properties": [
|
|
@@ -18665,7 +18723,7 @@
|
|
|
18665
18723
|
"immutable": true,
|
|
18666
18724
|
"locationInModule": {
|
|
18667
18725
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18668
|
-
"line":
|
|
18726
|
+
"line": 130
|
|
18669
18727
|
},
|
|
18670
18728
|
"name": "children",
|
|
18671
18729
|
"type": {
|
|
@@ -18686,7 +18744,7 @@
|
|
|
18686
18744
|
"immutable": true,
|
|
18687
18745
|
"locationInModule": {
|
|
18688
18746
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18689
|
-
"line":
|
|
18747
|
+
"line": 116
|
|
18690
18748
|
},
|
|
18691
18749
|
"name": "collectionName",
|
|
18692
18750
|
"type": {
|
|
@@ -18703,7 +18761,7 @@
|
|
|
18703
18761
|
"immutable": true,
|
|
18704
18762
|
"locationInModule": {
|
|
18705
18763
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18706
|
-
"line":
|
|
18764
|
+
"line": 119
|
|
18707
18765
|
},
|
|
18708
18766
|
"name": "collectionVersion",
|
|
18709
18767
|
"optional": true,
|
|
@@ -18721,7 +18779,7 @@
|
|
|
18721
18779
|
"immutable": true,
|
|
18722
18780
|
"locationInModule": {
|
|
18723
18781
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18724
|
-
"line":
|
|
18782
|
+
"line": 127
|
|
18725
18783
|
},
|
|
18726
18784
|
"name": "sharedTags",
|
|
18727
18785
|
"optional": true,
|
|
@@ -18745,7 +18803,7 @@
|
|
|
18745
18803
|
"immutable": true,
|
|
18746
18804
|
"locationInModule": {
|
|
18747
18805
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18748
|
-
"line":
|
|
18806
|
+
"line": 139
|
|
18749
18807
|
},
|
|
18750
18808
|
"name": "vulnerabilityMonitorProps",
|
|
18751
18809
|
"optional": true,
|
|
@@ -18767,7 +18825,7 @@
|
|
|
18767
18825
|
"kind": "interface",
|
|
18768
18826
|
"locationInModule": {
|
|
18769
18827
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18770
|
-
"line":
|
|
18828
|
+
"line": 39
|
|
18771
18829
|
},
|
|
18772
18830
|
"name": "SbomCatalogVulnerabilityMonitorProps",
|
|
18773
18831
|
"properties": [
|
|
@@ -18780,7 +18838,7 @@
|
|
|
18780
18838
|
"immutable": true,
|
|
18781
18839
|
"locationInModule": {
|
|
18782
18840
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18783
|
-
"line":
|
|
18841
|
+
"line": 41
|
|
18784
18842
|
},
|
|
18785
18843
|
"name": "notification",
|
|
18786
18844
|
"type": {
|
|
@@ -19509,7 +19567,7 @@
|
|
|
19509
19567
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
19510
19568
|
"base": "constructs.Construct",
|
|
19511
19569
|
"docs": {
|
|
19512
|
-
"remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.\n\nThe construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda\npermission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in\nthe same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst sbom = new s3Assets.Asset(this, 'SbomAsset', {\n path: 'build/sbom.json',\n});\nconst vex = new s3Assets.Asset(this, 'VexAsset', {\n path: 'build/vex.json',\n});\n\nnew StandaloneSbomCatalogProject(this, 'CatalogUpload', {\n name: 'billing-api',\n version: '1.4.0',\n additionalTags: ['component:backend'],\n sbom,\n vex,\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n});\n```",
|
|
19570
|
+
"remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.\n\nThe construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda\npermission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in\nthe same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst sbom = new s3Assets.Asset(this, 'SbomAsset', {\n path: 'build/sbom.json',\n});\nconst vex = new s3Assets.Asset(this, 'VexAsset', {\n path: 'build/vex.json',\n});\n\nnew StandaloneSbomCatalogProject(this, 'CatalogUpload', {\n name: 'billing-api',\n version: '1.4.0',\n additionalTags: ['component:backend'],\n sbom,\n vex,\n vulnerabilityMonitorProps: {\n notification: new datadogv2.DefaultSlackNotification(),\n },\n licensePolicy: licensePolicy.JVM_BACKEND,\n});\n```",
|
|
19513
19571
|
"stability": "stable",
|
|
19514
19572
|
"summary": "Registers one project's SBOM and optional VEX in the central SBOM catalog."
|
|
19515
19573
|
},
|
|
@@ -19520,7 +19578,7 @@
|
|
|
19520
19578
|
},
|
|
19521
19579
|
"locationInModule": {
|
|
19522
19580
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19523
|
-
"line":
|
|
19581
|
+
"line": 175
|
|
19524
19582
|
},
|
|
19525
19583
|
"parameters": [
|
|
19526
19584
|
{
|
|
@@ -19546,7 +19604,7 @@
|
|
|
19546
19604
|
"kind": "class",
|
|
19547
19605
|
"locationInModule": {
|
|
19548
19606
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19549
|
-
"line":
|
|
19607
|
+
"line": 174
|
|
19550
19608
|
},
|
|
19551
19609
|
"name": "StandaloneSbomCatalogProject",
|
|
19552
19610
|
"symbolId": "src/sbom-catalog/catalog-project:StandaloneSbomCatalogProject"
|
|
@@ -19561,10 +19619,27 @@
|
|
|
19561
19619
|
"kind": "interface",
|
|
19562
19620
|
"locationInModule": {
|
|
19563
19621
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19564
|
-
"line":
|
|
19622
|
+
"line": 44
|
|
19565
19623
|
},
|
|
19566
19624
|
"name": "StandaloneSbomCatalogProjectProps",
|
|
19567
19625
|
"properties": [
|
|
19626
|
+
{
|
|
19627
|
+
"abstract": true,
|
|
19628
|
+
"docs": {
|
|
19629
|
+
"remarks": "Use `LicensePolicy.NONE` in exceptional cases only!",
|
|
19630
|
+
"stability": "stable",
|
|
19631
|
+
"summary": "Specifies the mandatory license policy to be applied to this project."
|
|
19632
|
+
},
|
|
19633
|
+
"immutable": true,
|
|
19634
|
+
"locationInModule": {
|
|
19635
|
+
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19636
|
+
"line": 79
|
|
19637
|
+
},
|
|
19638
|
+
"name": "licensePolicy",
|
|
19639
|
+
"type": {
|
|
19640
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.LicensePolicy"
|
|
19641
|
+
}
|
|
19642
|
+
},
|
|
19568
19643
|
{
|
|
19569
19644
|
"abstract": true,
|
|
19570
19645
|
"docs": {
|
|
@@ -19574,7 +19649,7 @@
|
|
|
19574
19649
|
"immutable": true,
|
|
19575
19650
|
"locationInModule": {
|
|
19576
19651
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19577
|
-
"line":
|
|
19652
|
+
"line": 46
|
|
19578
19653
|
},
|
|
19579
19654
|
"name": "name",
|
|
19580
19655
|
"type": {
|
|
@@ -19590,7 +19665,7 @@
|
|
|
19590
19665
|
"immutable": true,
|
|
19591
19666
|
"locationInModule": {
|
|
19592
19667
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19593
|
-
"line":
|
|
19668
|
+
"line": 60
|
|
19594
19669
|
},
|
|
19595
19670
|
"name": "sbom",
|
|
19596
19671
|
"type": {
|
|
@@ -19607,7 +19682,7 @@
|
|
|
19607
19682
|
"immutable": true,
|
|
19608
19683
|
"locationInModule": {
|
|
19609
19684
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19610
|
-
"line":
|
|
19685
|
+
"line": 57
|
|
19611
19686
|
},
|
|
19612
19687
|
"name": "additionalTags",
|
|
19613
19688
|
"optional": true,
|
|
@@ -19630,7 +19705,7 @@
|
|
|
19630
19705
|
"immutable": true,
|
|
19631
19706
|
"locationInModule": {
|
|
19632
19707
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19633
|
-
"line":
|
|
19708
|
+
"line": 49
|
|
19634
19709
|
},
|
|
19635
19710
|
"name": "version",
|
|
19636
19711
|
"optional": true,
|
|
@@ -19647,7 +19722,7 @@
|
|
|
19647
19722
|
"immutable": true,
|
|
19648
19723
|
"locationInModule": {
|
|
19649
19724
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19650
|
-
"line":
|
|
19725
|
+
"line": 63
|
|
19651
19726
|
},
|
|
19652
19727
|
"name": "vex",
|
|
19653
19728
|
"optional": true,
|
|
@@ -19666,7 +19741,7 @@
|
|
|
19666
19741
|
"immutable": true,
|
|
19667
19742
|
"locationInModule": {
|
|
19668
19743
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19669
|
-
"line":
|
|
19744
|
+
"line": 72
|
|
19670
19745
|
},
|
|
19671
19746
|
"name": "vulnerabilityMonitorProps",
|
|
19672
19747
|
"optional": true,
|
|
@@ -29994,5 +30069,5 @@
|
|
|
29994
30069
|
}
|
|
29995
30070
|
},
|
|
29996
30071
|
"version": "0.0.0",
|
|
29997
|
-
"fingerprint": "
|
|
30072
|
+
"fingerprint": "C1DTK6eWy2kvi+7hyccqyyN+Zo+cuVqU9t+gCagWqfI="
|
|
29998
30073
|
}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import * as s3Assets from 'aws-cdk-lib/aws-s3-assets';
|
|
2
2
|
import { Construct } from 'constructs';
|
|
3
3
|
import * as datadogv2 from '../datadogv2';
|
|
4
|
+
/**
|
|
5
|
+
* Enum to specify which license policy should applied.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum LicensePolicy {
|
|
8
|
+
NONE = "none",
|
|
9
|
+
JVM_BACKEND = "jvm-backend",
|
|
10
|
+
NPM_BACKEND = "npm-backend",
|
|
11
|
+
NPM_FRONTEND = "npm-frontend"
|
|
12
|
+
}
|
|
4
13
|
/** Notification configuration for an SBOM catalog vulnerability monitor. */
|
|
5
14
|
export interface SbomCatalogVulnerabilityMonitorProps {
|
|
6
15
|
/** Notification sent when the vulnerability monitor changes state. */
|
|
@@ -30,6 +39,12 @@ export interface StandaloneSbomCatalogProjectProps {
|
|
|
30
39
|
* @defaultValue A vulnerability monitor using {@link datadogv2.DefaultSlackNotification}
|
|
31
40
|
*/
|
|
32
41
|
readonly vulnerabilityMonitorProps?: SbomCatalogVulnerabilityMonitorProps;
|
|
42
|
+
/**
|
|
43
|
+
* Specifies the mandatory license policy to be applied to this project.
|
|
44
|
+
*
|
|
45
|
+
* Use `LicensePolicy.NONE` in exceptional cases only!
|
|
46
|
+
*/
|
|
47
|
+
readonly licensePolicy: LicensePolicy;
|
|
33
48
|
}
|
|
34
49
|
/** A child project in an SBOM catalog collection. */
|
|
35
50
|
export interface SbomCatalogProjectChild {
|
|
@@ -50,6 +65,12 @@ export interface SbomCatalogProjectChild {
|
|
|
50
65
|
readonly sbom: s3Assets.Asset;
|
|
51
66
|
/** Optional JSON VEX file asset to upload. */
|
|
52
67
|
readonly vex?: s3Assets.Asset;
|
|
68
|
+
/**
|
|
69
|
+
* Specifies the mandatory license policy to be applied to this project.
|
|
70
|
+
*
|
|
71
|
+
* Use `LicensePolicy.NONE` in exceptional cases only!
|
|
72
|
+
*/
|
|
73
|
+
readonly licensePolicy: LicensePolicy;
|
|
53
74
|
}
|
|
54
75
|
export interface SbomCatalogProjectProps {
|
|
55
76
|
/** Collection name stored in the manifest and used in the destination key. */
|
|
@@ -102,6 +123,7 @@ export interface SbomCatalogProjectProps {
|
|
|
102
123
|
* vulnerabilityMonitorProps: {
|
|
103
124
|
* notification: new datadogv2.DefaultSlackNotification(),
|
|
104
125
|
* },
|
|
126
|
+
* licensePolicy: licensePolicy.JVM_BACKEND,
|
|
105
127
|
* });
|
|
106
128
|
* ```
|
|
107
129
|
*/
|
|
@@ -136,11 +158,13 @@ export declare class StandaloneSbomCatalogProject extends Construct {
|
|
|
136
158
|
* name: 'api',
|
|
137
159
|
* sbom: apiSbom,
|
|
138
160
|
* additionalTags: ['component:backend'],
|
|
161
|
+
* licensePolicy: LicensePolicy.JVM_BACKEND,
|
|
139
162
|
* },
|
|
140
163
|
* {
|
|
141
164
|
* name: 'infrastructure',
|
|
142
165
|
* sbom: infrastructureSbom,
|
|
143
166
|
* additionalTags: ['component:infrastructure'],
|
|
167
|
+
* * licensePolicy: LicensePolicy.NPM_BACKEND,
|
|
144
168
|
* },
|
|
145
169
|
* ],
|
|
146
170
|
* vulnerabilityMonitorProps: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a, _b;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.SbomCatalogProject = exports.StandaloneSbomCatalogProject = void 0;
|
|
4
|
+
exports.SbomCatalogProject = exports.StandaloneSbomCatalogProject = exports.LicensePolicy = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
7
|
const events = require("aws-cdk-lib/aws-events");
|
|
@@ -17,10 +17,20 @@ const rio_landing_zone_1 = require("../rio-landing-zone");
|
|
|
17
17
|
const constants_2 = require("./constants");
|
|
18
18
|
const DEFAULT_VERSION = 'main';
|
|
19
19
|
const MAX_CHILDREN = 3;
|
|
20
|
-
const MANAGED_TAG_KEYS = new Set(['account_id', 'team_identifier']);
|
|
20
|
+
const MANAGED_TAG_KEYS = new Set(['account_id', 'team_identifier', 'license_policy']);
|
|
21
21
|
const UPLOAD_FUNCTION_UUID = 'd20b9f46-0702-47dd-89c2-9ea4bddaacfc';
|
|
22
22
|
const UPLOAD_FUNCTION_PURPOSE = 'SbomCatalogUpload';
|
|
23
23
|
const UPLOAD_LOG_GROUP_ID = 'SbomCatalogUploadLogGroup';
|
|
24
|
+
/**
|
|
25
|
+
* Enum to specify which license policy should applied.
|
|
26
|
+
*/
|
|
27
|
+
var LicensePolicy;
|
|
28
|
+
(function (LicensePolicy) {
|
|
29
|
+
LicensePolicy["NONE"] = "none";
|
|
30
|
+
LicensePolicy["JVM_BACKEND"] = "jvm-backend";
|
|
31
|
+
LicensePolicy["NPM_BACKEND"] = "npm-backend";
|
|
32
|
+
LicensePolicy["NPM_FRONTEND"] = "npm-frontend";
|
|
33
|
+
})(LicensePolicy || (exports.LicensePolicy = LicensePolicy = {}));
|
|
24
34
|
/**
|
|
25
35
|
* Registers one project's SBOM and optional VEX in the central SBOM catalog.
|
|
26
36
|
*
|
|
@@ -49,6 +59,7 @@ const UPLOAD_LOG_GROUP_ID = 'SbomCatalogUploadLogGroup';
|
|
|
49
59
|
* vulnerabilityMonitorProps: {
|
|
50
60
|
* notification: new datadogv2.DefaultSlackNotification(),
|
|
51
61
|
* },
|
|
62
|
+
* licensePolicy: licensePolicy.JVM_BACKEND,
|
|
52
63
|
* });
|
|
53
64
|
* ```
|
|
54
65
|
*/
|
|
@@ -57,7 +68,7 @@ class StandaloneSbomCatalogProject extends constructs_1.Construct {
|
|
|
57
68
|
super(scope, id);
|
|
58
69
|
const version = props.version ?? DEFAULT_VERSION;
|
|
59
70
|
const teamIdentifier = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(this).stringValue;
|
|
60
|
-
const tags = mergeTags([`team_identifier:${teamIdentifier}`], props.additionalTags) ?? [];
|
|
71
|
+
const tags = mergeTags(addLicensePolicyTagIfRequired([`team_identifier:${teamIdentifier}`], props.licensePolicy), props.additionalTags) ?? [];
|
|
61
72
|
assertNonEmptyValueWithoutSlashes('name', props.name);
|
|
62
73
|
assertNonEmptyVersion('version', version);
|
|
63
74
|
parseTagsWithValidUniqueKeys(props.additionalTags ?? [], 'additionalTags');
|
|
@@ -111,11 +122,13 @@ StandaloneSbomCatalogProject[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.Standalo
|
|
|
111
122
|
* name: 'api',
|
|
112
123
|
* sbom: apiSbom,
|
|
113
124
|
* additionalTags: ['component:backend'],
|
|
125
|
+
* licensePolicy: LicensePolicy.JVM_BACKEND,
|
|
114
126
|
* },
|
|
115
127
|
* {
|
|
116
128
|
* name: 'infrastructure',
|
|
117
129
|
* sbom: infrastructureSbom,
|
|
118
130
|
* additionalTags: ['component:infrastructure'],
|
|
131
|
+
* * licensePolicy: LicensePolicy.NPM_BACKEND,
|
|
119
132
|
* },
|
|
120
133
|
* ],
|
|
121
134
|
* vulnerabilityMonitorProps: {
|
|
@@ -144,7 +157,7 @@ class SbomCatalogProject extends constructs_1.Construct {
|
|
|
144
157
|
children: props.children.map(child => ({
|
|
145
158
|
name: child.name,
|
|
146
159
|
version: child.version ?? DEFAULT_VERSION,
|
|
147
|
-
...optionalTags(mergeTags(sharedTags, child.additionalTags)),
|
|
160
|
+
...optionalTags(mergeTags(addLicensePolicyTagIfRequired(sharedTags, child.licensePolicy), child.additionalTags)),
|
|
148
161
|
sbom: assetLocation(child.sbom),
|
|
149
162
|
...(child.vex === undefined ? {} : { vex: assetLocation(child.vex) }),
|
|
150
163
|
})),
|
|
@@ -167,10 +180,8 @@ function createVulnerabilityMonitor(props) {
|
|
|
167
180
|
name: `${props.accountName} VulnerabilityMonitor`,
|
|
168
181
|
serviceName: props.projectName,
|
|
169
182
|
monitorType: datadogv2.DatadogMonitorQueryAlertType.METRIC_ALERT,
|
|
170
|
-
query:
|
|
171
|
-
|
|
172
|
-
`project_name:${props.projectName}` +
|
|
173
|
-
'} > 0',
|
|
183
|
+
query: `max(last_15m):max:service.vulnerabilities{project_name:${props.projectName}} > 0`,
|
|
184
|
+
lowercaseQuery: true,
|
|
174
185
|
message: [
|
|
175
186
|
'{{#is_alert}}',
|
|
176
187
|
`Project ${props.projectName} has {{value}} known vulnerabilities.`,
|
|
@@ -306,6 +317,12 @@ function mergeTags(sharedTags, additionalTags) {
|
|
|
306
317
|
merged.set(key, tag);
|
|
307
318
|
return [...merged.values()];
|
|
308
319
|
}
|
|
320
|
+
function addLicensePolicyTagIfRequired(tags, policy) {
|
|
321
|
+
if (policy !== LicensePolicy.NONE) {
|
|
322
|
+
return [...(tags ?? []), `license_policy:${policy}`];
|
|
323
|
+
}
|
|
324
|
+
return tags;
|
|
325
|
+
}
|
|
309
326
|
function parseTagsWithValidUniqueKeys(tags, propertyName, allowManagedTags = false) {
|
|
310
327
|
const result = new Map();
|
|
311
328
|
for (const tag of tags) {
|
|
@@ -327,4 +344,4 @@ function parseTagsWithValidUniqueKeys(tags, propertyName, allowManagedTags = fal
|
|
|
327
344
|
function optionalTags(tags) {
|
|
328
345
|
return tags === undefined ? {} : { tags };
|
|
329
346
|
}
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsMERBQXFEO0FBQ3JELDJDQUFzRDtBQVF0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sb0JBQW9CLEdBQUcsc0NBQXNDLENBQUM7QUFDcEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBNEZ4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUN6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsbUJBQW1CLGNBQWMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUs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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczNBc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBkYXRhZG9ndjIgZnJvbSAnLi4vZGF0YWRvZ3YyJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJ10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbi8qKiBOb3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgYW4gU0JPTSBjYXRhbG9nIHZ1bG5lcmFiaWxpdHkgbW9uaXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZW50IHdoZW4gdGhlIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjaGFuZ2VzIHN0YXRlLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb246IGRhdGFkb2d2Mi5JTm90aWZpY2F0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcyB7XG4gIC8qKiBNdXN0IGJlIG5vbi1lbXB0eSBhbmQgbXVzdCBub3QgY29udGFpbiBgL2AuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogUHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvamVjdCB0YWdzIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yXG4gICAqIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdnVsbmVyYWJpbGl0eSBtb25pdG9yIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIG1vbml0b3IgdXNlcyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgQSB2dWxuZXJhYmlsaXR5IG1vbml0b3IgdXNpbmcge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259XG4gICAqL1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzPzogU2JvbUNhdGFsb2dWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzO1xufVxuXG4vKiogQSBjaGlsZCBwcm9qZWN0IGluIGFuIFNCT00gY2F0YWxvZyBjb2xsZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZCB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbiwgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDaGlsZCBwcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhZGRlZCB0byB0aGlzIGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBDaGlsZCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgaW5oZXJpdGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmVcbiAgICogY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIENvbGxlY3Rpb24gbmFtZSBzdG9yZWQgaW4gdGhlIG1hbmlmZXN0IGFuZCB1c2VkIGluIHRoZSBkZXN0aW5hdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqIENvbGxlY3Rpb24gdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIEEgY2hpbGQncyBhZGRpdGlvbmFsIHRhZ3Mgb3ZlcnJpZGUgc2hhcmVkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU9cbiAgICogTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogQ2hpbGQgY2F0YWxvZyBwcm9qZWN0cy4gTXVzdCBjb250YWluIGJldHdlZW4gb25lIGFuZCB0aHJlZSBwcm9qZWN0cy4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW46IFNib21DYXRhbG9nUHJvamVjdENoaWxkW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBhbGwgY2hpbGQgbW9uaXRvcnMuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIG1vbml0b3JzIHVzZSB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgVnVsbmVyYWJpbGl0eSBtb25pdG9ycyB1c2luZyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn1cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/OiBTYm9tQ2F0YWxvZ1Z1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG9uZSBwcm9qZWN0J3MgU0JPTSBhbmQgb3B0aW9uYWwgVkVYIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBhIHN0YWNrIG93bnMgb25lIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkIHByb2plY3QuIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrXG4gKiByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZSBhbmQgSUQgaWRlbnRpZnkgdGhlIHVwbG9hZC5cbiAqXG4gKiBUaGUgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgUklPIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgYW5kIGdyYW50cyB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBMYW1iZGFcbiAqIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc291cmNlIGFzc2V0cyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgY2VudHJhbCBjYXRhbG9nIGJ1Y2tldC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluXG4gKiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IHNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1Nib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3Nib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IHZleCA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnVmV4QXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC92ZXguanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgbmFtZTogJ2JpbGxpbmctYXBpJyxcbiAqICAgdmVyc2lvbjogJzEuNC4wJyxcbiAqICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgc2JvbSxcbiAqICAgdmV4LFxuICogICB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzOiB7XG4gKiAgICAgbm90aWZpY2F0aW9uOiBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwcm9wcy52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuYWRkaXRpb25hbFRhZ3MpID8/IFtdO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnbmFtZScsIHByb3BzLm5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbigndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuYWRkaXRpb25hbFRhZ3MgPz8gW10sICdhZGRpdGlvbmFsVGFncycpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdGFncyxcbiAgICAgIHNib206IGFzc2V0TG9jYXRpb24ocHJvcHMuc2JvbSksXG4gICAgICAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmV4OiBhc3NldExvY2F0aW9uKHByb3BzLnZleCkgfSksXG4gICAgfTtcblxuICAgIGNyZWF0ZVVwbG9hZFJlc291cmNlcyh0aGlzLCBjb25maWd1cmF0aW9uLCBbcHJvcHMuc2JvbSwgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8gW10gOiBbcHJvcHMudmV4XSldKTtcbiAgICBjcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvcih7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIHByb2plY3ROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgYWNjb3VudE5hbWU6IGNvbmZpZ3VyYXRpb24ub3JpZ2luQWNjb3VudE5hbWUsXG4gICAgICBub3RpZmljYXRpb246IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHByb2plY3QgU0JPTXMgYW5kIG9wdGlvbmFsIFZFWCBmaWxlcyBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gb25lIHN0YWNrIHByb2R1Y2VzIGJldHdlZW4gb25lIGFuZCB0aHJlZSByZWxhdGVkIHByb2plY3RzIHRoYXQgc2hvdWxkIHNoYXJlIGEgY2F0YWxvZ1xuICogY29sbGVjdGlvbi4gU2hhcmVkIHRhZ3MgYXJlIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgd2hpbGUgY2hpbGQgdGFncyB3aXRoIHRoZSBzYW1lIGtleSBvdmVycmlkZSB0aGVtLiBUaGUgUklPXG4gKiBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGlzIGFsd2F5cyBpbmNsdWRlZC5cbiAqXG4gKiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFjayByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZVxuICogYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpbiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IGFwaVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0FwaVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2FwaS1zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCBpbmZyYXN0cnVjdHVyZVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0luZnJhc3RydWN0dXJlU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvaW5mcmFzdHJ1Y3R1cmUtc2JvbS5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIGNvbGxlY3Rpb25OYW1lOiAnYmlsbGluZycsXG4gKiAgIGNvbGxlY3Rpb25WZXJzaW9uOiAnMS40LjAnLFxuICogICBzaGFyZWRUYWdzOiBbJ2RvbWFpbjpiaWxsaW5nJ10sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2FwaScsXG4gKiAgICAgICBzYm9tOiBhcGlTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdpbmZyYXN0cnVjdHVyZScsXG4gKiAgICAgICBzYm9tOiBpbmZyYXN0cnVjdHVyZVNib20sXG4gKiAgICAgICBhZGRpdGlvbmFsVGFnczogWydjb21wb25lbnQ6aW5mcmFzdHJ1Y3R1cmUnXSxcbiAqICAgICB9LFxuICogICBdLFxuICogICB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzOiB7XG4gKiAgICAgbm90aWZpY2F0aW9uOiBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNib21DYXRhbG9nUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uVmVyc2lvbiA9IHByb3BzLmNvbGxlY3Rpb25WZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY29sbGVjdGlvbk5hbWUnLCBwcm9wcy5jb2xsZWN0aW9uTmFtZSk7XG4gICAgYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKCdjb2xsZWN0aW9uVmVyc2lvbicsIGNvbGxlY3Rpb25WZXJzaW9uKTtcbiAgICB2YWxpZGF0ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLnNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJyk7XG4gICAgY29uc3Qgc2hhcmVkVGFncyA9IG1lcmdlVGFncyhbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLCBwcm9wcy5zaGFyZWRUYWdzKSA/PyBbXTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBjb2xsZWN0aW9uTmFtZTogcHJvcHMuY29sbGVjdGlvbk5hbWUsXG4gICAgICBjb2xsZWN0aW9uVmVyc2lvbixcbiAgICAgIHRhZ3M6IFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sXG4gICAgICBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4ubWFwKGNoaWxkID0+ICh7XG4gICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGNoaWxkLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OLFxuICAgICAgICAuLi5vcHRpb25hbFRhZ3MobWVyZ2VUYWdzKHNoYXJlZFRhZ3MsIGNoaWxkLmFkZGl0aW9uYWxUYWdzKSksXG4gICAgICAgIHNib206IGFzc2V0TG9jYXRpb24oY2hpbGQuc2JvbSksXG4gICAgICAgIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24oY2hpbGQudmV4KSB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBwcm9wcy5jaGlsZHJlbi5mbGF0TWFwKGNoaWxkID0+IFtjaGlsZC5zYm9tLCAuLi4oY2hpbGQudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtjaGlsZC52ZXhdKV0pXG4gICAgKTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpO1xuICAgIHByb3BzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT5cbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yKHtcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgIHByb2plY3ROYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICBhY2NvdW50TmFtZTogY29uZmlndXJhdGlvbi5vcmlnaW5BY2NvdW50TmFtZSxcbiAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3IocHJvcHM6IENyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMpOiB2b2lkIHtcbiAgbmV3IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvcihwcm9wcy5zY29wZSwgYCR7cHJvcHMucHJvamVjdE5hbWV9VnVsbmVyYWJpbGl0eU1vbml0b3JgLCB7XG4gICAgbmFtZTogYCR7cHJvcHMuYWNjb3VudE5hbWV9IFZ1bG5lcmFiaWxpdHlNb25pdG9yYCxcbiAgICBzZXJ2aWNlTmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgbW9uaXRvclR5cGU6IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLk1FVFJJQ19BTEVSVCxcbiAgICBxdWVyeTpcbiAgICAgICdtYXgobGFzdF8xNW0pOm1heDpzZXJ2aWNlLnZ1bG5lcmFiaWxpdGllc3snICtcbiAgICAgIGBhY2NvdW50X25hbWU6JHtwcm9wcy5hY2NvdW50TmFtZX0sYCArXG4gICAgICBgcHJvamVjdF9uYW1lOiR7cHJvcHMucHJvamVjdE5hbWV9YCArXG4gICAgICAnfSA+IDAnLFxuICAgIG1lc3NhZ2U6IFtcbiAgICAgICd7eyNpc19hbGVydH19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IGhhcyB7e3ZhbHVlfX0ga25vd24gdnVsbmVyYWJpbGl0aWVzLmAsXG4gICAgICAne3svaXNfYWxlcnR9fScsXG4gICAgICAnJyxcbiAgICAgICd7eyNpc19yZWNvdmVyeX19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IG5vIGxvbmdlciByZXBvcnRzIHZ1bG5lcmFiaWxpdGllcy5gLFxuICAgICAgJ3t7L2lzX3JlY292ZXJ5fX0nLFxuICAgIF0uam9pbignXFxuJyksXG4gICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgcHJpb3JpdHk6IDMsXG4gICAgZXh0cmFUYWdzOiBbJ21vbml0b3JfdHlwZTp2dWxuZXJhYmlsaXR5J10sXG4gICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgIGNyaXRpY2FsOiAwLFxuICAgICAgfSxcbiAgICAgIG5vdGlmeU5vRGF0YTogZmFsc2UsXG4gICAgICByZXF1aXJlRnVsbFdpbmRvdzogZmFsc2UsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFJlc291cmNlcyhcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgc291cmNlQXNzZXRzOiBzM0Fzc2V0cy5Bc3NldFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgY29uc3QgdXBsb2FkRnVuY3Rpb24gPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHNjb3BlLCAnVXBsb2FkRnVuY3Rpb24nLCB7XG4gICAgdXVpZDogVVBMT0FEX0ZVTkNUSU9OX1VVSUQsXG4gICAgbGFtYmRhUHVycG9zZTogVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UsXG4gICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICBoYW5kbGVyOiAnaGFuZGxlci5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgfSksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBsb2dHcm91cDogZ2V0T3JDcmVhdGVVcGxvYWRMb2dHcm91cChzdGFjayksXG4gICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTn0vKmBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBzb3VyY2VBc3NldHMpIHtcbiAgICBhc3NldC5ncmFudFJlYWQodXBsb2FkRnVuY3Rpb24pO1xuICB9XG5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU3RhY2tDb21wbGV0aW9uUnVsZScsIHtcbiAgICBldmVudFBhdHRlcm46IHtcbiAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnQ2xvdWRGb3JtYXRpb24gU3RhY2sgU3RhdHVzIENoYW5nZSddLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgICdzdGFjay1pZCc6IFtzdGFjay5zdGFja0lkXSxcbiAgICAgICAgJ3N0YXR1cy1kZXRhaWxzJzoge1xuICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnLCAnVVBEQVRFX0NPTVBMRVRFJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdGFyZ2V0czogW1xuICAgICAgbmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24odXBsb2FkRnVuY3Rpb24sIHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgZXZlbnRJZDogZXZlbnRzLkV2ZW50RmllbGQuZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRpbWU6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLnRpbWUnKSxcbiAgICAgICAgICBzdGFja0lkOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuc3RhY2staWQnKSxcbiAgICAgICAgICBzdGFja1N0YXR1czogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YXR1cy1kZXRhaWxzLnN0YXR1cycpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2s6IFN0YWNrKTogbG9ncy5Mb2dHcm91cCB7XG4gIGNvbnN0IGV4aXN0aW5nTG9nR3JvdXAgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChVUExPQURfTE9HX0dST1VQX0lEKTtcbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgaW5zdGFuY2VvZiBsb2dzLkxvZ0dyb3VwKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTG9nR3JvdXA7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgYWxyZWFkeSBjb250YWlucyBhIGNvbnN0cnVjdCBuYW1lZCAnJHtVUExPQURfTE9HX0dST1VQX0lEfSdgKTtcbiAgfVxuICByZXR1cm4gbmV3IGxvZ3MuTG9nR3JvdXAoc3RhY2ssIFVQTE9BRF9MT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2V0TG9jYXRpb24oYXNzZXQ6IHMzQXNzZXRzLkFzc2V0KTogQXNzZXRMb2NhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgYnVja2V0TmFtZTogYXNzZXQuczNCdWNrZXROYW1lLFxuICAgIG9iamVjdEtleTogYXNzZXQuczNPYmplY3RLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aG91dCAnLydgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZlcnNpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdKTogdm9pZCB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkcmVuIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvamVjdCcpO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiBNQVhfQ0hJTERSRU4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNoaWxkcmVuIG11c3QgY29udGFpbiBhdCBtb3N0ICR7TUFYX0NISUxEUkVOfSBwcm9qZWN0c2ApO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY2hpbGQgbmFtZScsIGNoaWxkLm5hbWUpO1xuICAgIGlmIChjaGlsZC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbihgdmVyc2lvbiBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCwgY2hpbGQudmVyc2lvbik7XG4gICAgfVxuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoY2hpbGQuYWRkaXRpb25hbFRhZ3MgPz8gW10sIGBhZGRpdGlvbmFsVGFncyBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCk7XG4gICAgaWYgKG5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZCBuYW1lICcke2NoaWxkLm5hbWV9JyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb25gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGFncyhzaGFyZWRUYWdzPzogc3RyaW5nW10sIGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaGFyZWRUYWdzID09PSB1bmRlZmluZWQgJiYgYWRkaXRpb25hbFRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaGFyZWQgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJywgdHJ1ZSk7XG4gIGNvbnN0IGFkZGl0aW9uYWwgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcChzaGFyZWQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHRhZ10gb2YgYWRkaXRpb25hbCkgbWVyZ2VkLnNldChrZXksIHRhZyk7XG4gIHJldHVybiBbLi4ubWVyZ2VkLnZhbHVlcygpXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsMERBQXFEO0FBQ3JELDJDQUFzRDtBQVF0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsc0NBQXNDLENBQUM7QUFDcEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCLDhCQUFhLENBQUE7SUFDYiw0Q0FBMkIsQ0FBQTtJQUMzQiw0Q0FBMkIsQ0FBQTtJQUMzQiw4Q0FBNkIsQ0FBQTtBQUMvQixDQUFDLEVBTFcsYUFBYSw2QkFBYixhQUFhLFFBS3hCO0FBMEdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUN6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7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QUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxrQ0FBa0MsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksZ0NBQWdDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBZTtJQUNuQyxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczNBc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBkYXRhZG9ndjIgZnJvbSAnLi4vZGF0YWRvZ3YyJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJywgJ2xpY2Vuc2VfcG9saWN5J10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbi8qKlxuICogRW51bSB0byBzcGVjaWZ5IHdoaWNoIGxpY2Vuc2UgcG9saWN5IHNob3VsZCBhcHBsaWVkLlxuICovXG5leHBvcnQgZW51bSBMaWNlbnNlUG9saWN5IHtcbiAgTk9ORSA9ICdub25lJyxcbiAgSlZNX0JBQ0tFTkQgPSAnanZtLWJhY2tlbmQnLFxuICBOUE1fQkFDS0VORCA9ICducG0tYmFja2VuZCcsXG4gIE5QTV9GUk9OVEVORCA9ICducG0tZnJvbnRlbmQnLFxufVxuXG4vKiogTm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGFuIFNCT00gY2F0YWxvZyB2dWxuZXJhYmlsaXR5IG1vbml0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcyB7XG4gIC8qKiBOb3RpZmljYXRpb24gc2VudCB3aGVuIHRoZSB2dWxuZXJhYmlsaXR5IG1vbml0b3IgY2hhbmdlcyBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMge1xuICAvKiogTXVzdCBiZSBub24tZW1wdHkgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByb2plY3QgdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb2plY3QgdGFncyB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgYWRkZWQgZnJvbSB0aGUgUklPIExhbmRpbmcgWm9uZSBjb25maWd1cmF0aW9uLiBEbyBub3QgcHJvdmlkZSBgdGVhbV9pZGVudGlmaWVyYCBvclxuICAgKiBgYWNjb3VudF9pZGA7IGJvdGggYXJlIG1hbmFnZWQgdGFnIGtleXMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsVGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKiBKU09OIFNCT00gZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHNib206IHMzQXNzZXRzLkFzc2V0O1xuXG4gIC8qKiBPcHRpb25hbCBKU09OIFZFWCBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgdmV4PzogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIHRoZSBtb25pdG9yIHVzZXMge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIEEgdnVsbmVyYWJpbGl0eSBtb25pdG9yIHVzaW5nIHtAbGluayBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufVxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcz86IFNib21DYXRhbG9nVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYW5kYXRvcnkgbGljZW5zZSBwb2xpY3kgdG8gYmUgYXBwbGllZCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIFVzZSBgTGljZW5zZVBvbGljeS5OT05FYCBpbiBleGNlcHRpb25hbCBjYXNlcyBvbmx5IVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZVBvbGljeTogTGljZW5zZVBvbGljeTtcbn1cblxuLyoqIEEgY2hpbGQgcHJvamVjdCBpbiBhbiBTQk9NIGNhdGFsb2cgY29sbGVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGQge1xuICAvKipcbiAgICogTXVzdCBiZSBub24tZW1wdHksIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb24sIGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQ2hpbGQgcHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgYWRkZWQgdG8gdGhpcyBjaGlsZCwgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogQ2hpbGQgdGFncyBvdmVycmlkZSBzaGFyZWQgdGFncyB3aXRoIHRoZSBzYW1lIGtleS4gYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGluaGVyaXRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lXG4gICAqIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYW5kYXRvcnkgbGljZW5zZSBwb2xpY3kgdG8gYmUgYXBwbGllZCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIFVzZSBgTGljZW5zZVBvbGljeS5OT05FYCBpbiBleGNlcHRpb25hbCBjYXNlcyBvbmx5IVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZVBvbGljeTogTGljZW5zZVBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcyB7XG4gIC8qKiBDb2xsZWN0aW9uIG5hbWUgc3RvcmVkIGluIHRoZSBtYW5pZmVzdCBhbmQgdXNlZCBpbiB0aGUgZGVzdGluYXRpb24ga2V5LiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDb2xsZWN0aW9uIHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgaW5oZXJpdGVkIGJ5IGV2ZXJ5IGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBBIGNoaWxkJ3MgYWRkaXRpb25hbCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgYWRkZWQgZnJvbSB0aGUgUklPXG4gICAqIExhbmRpbmcgWm9uZSBjb25maWd1cmF0aW9uLiBEbyBub3QgcHJvdmlkZSBgdGVhbV9pZGVudGlmaWVyYCBvciBgYWNjb3VudF9pZGA7IGJvdGggYXJlIG1hbmFnZWQgdGFnIGtleXMuXG4gICAqL1xuICByZWFkb25seSBzaGFyZWRUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIENoaWxkIGNhdGFsb2cgcHJvamVjdHMuIE11c3QgY29udGFpbiBiZXR3ZWVuIG9uZSBhbmQgdGhyZWUgcHJvamVjdHMuICovXG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB2dWxuZXJhYmlsaXR5IG1vbml0b3IgY29uZmlndXJhdGlvbiBzaGFyZWQgYnkgYWxsIGNoaWxkIG1vbml0b3JzLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIHRoZSBtb25pdG9ycyB1c2Uge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFZ1bG5lcmFiaWxpdHkgbW9uaXRvcnMgdXNpbmcge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259XG4gICAqL1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzPzogU2JvbUNhdGFsb2dWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBvbmUgcHJvamVjdCdzIFNCT00gYW5kIG9wdGlvbmFsIFZFWCBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gYSBzdGFjayBvd25zIG9uZSBpbmRlcGVuZGVudGx5IHZlcnNpb25lZCBwcm9qZWN0LiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFja1xuICogcmVhY2hlcyBgQ1JFQVRFX0NPTVBMRVRFYCBvciBgVVBEQVRFX0NPTVBMRVRFYC4gVGhlIEV2ZW50QnJpZGdlIGV2ZW50IHRpbWUgYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIFJJTyBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGFuZCBncmFudHMgdGhlIGdlbmVyYXRlZCB1cGxvYWQgTGFtYmRhXG4gKiBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHNvdXJjZSBhc3NldHMgYW5kIHdyaXRlIHRoZW0gdG8gdGhlIGNlbnRyYWwgY2F0YWxvZyBidWNrZXQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpblxuICogdGhlIHNhbWUgc3RhY2sgcmV1c2Ugb25lIHVwbG9hZCBMYW1iZGEuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBzYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdTYm9tQXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC9zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCB2ZXggPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1ZleEFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvdmV4Lmpzb24nLFxuICogfSk7XG4gKlxuICogbmV3IFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIG5hbWU6ICdiaWxsaW5nLWFwaScsXG4gKiAgIHZlcnNpb246ICcxLjQuMCcsXG4gKiAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDpiYWNrZW5kJ10sXG4gKiAgIHNib20sXG4gKiAgIHZleCxcbiAqICAgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wczoge1xuICogICAgIG5vdGlmaWNhdGlvbjogbmV3IGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb24oKSxcbiAqICAgfSxcbiAqICAgbGljZW5zZVBvbGljeTogbGljZW5zZVBvbGljeS5KVk1fQkFDS0VORCxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcHJvcHMudmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0YWdzID1cbiAgICAgIG1lcmdlVGFncyhcbiAgICAgICAgYWRkTGljZW5zZVBvbGljeVRhZ0lmUmVxdWlyZWQoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMubGljZW5zZVBvbGljeSksXG4gICAgICAgIHByb3BzLmFkZGl0aW9uYWxUYWdzXG4gICAgICApID8/IFtdO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnbmFtZScsIHByb3BzLm5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbigndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuYWRkaXRpb25hbFRhZ3MgPz8gW10sICdhZGRpdGlvbmFsVGFncycpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdGFncyxcbiAgICAgIHNib206IGFzc2V0TG9jYXRpb24ocHJvcHMuc2JvbSksXG4gICAgICAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmV4OiBhc3NldExvY2F0aW9uKHByb3BzLnZleCkgfSksXG4gICAgfTtcblxuICAgIGNyZWF0ZVVwbG9hZFJlc291cmNlcyh0aGlzLCBjb25maWd1cmF0aW9uLCBbcHJvcHMuc2JvbSwgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8gW10gOiBbcHJvcHMudmV4XSldKTtcbiAgICBjcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvcih7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIHByb2plY3ROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgYWNjb3VudE5hbWU6IGNvbmZpZ3VyYXRpb24ub3JpZ2luQWNjb3VudE5hbWUsXG4gICAgICBub3RpZmljYXRpb246IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHByb2plY3QgU0JPTXMgYW5kIG9wdGlvbmFsIFZFWCBmaWxlcyBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gb25lIHN0YWNrIHByb2R1Y2VzIGJldHdlZW4gb25lIGFuZCB0aHJlZSByZWxhdGVkIHByb2plY3RzIHRoYXQgc2hvdWxkIHNoYXJlIGEgY2F0YWxvZ1xuICogY29sbGVjdGlvbi4gU2hhcmVkIHRhZ3MgYXJlIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgd2hpbGUgY2hpbGQgdGFncyB3aXRoIHRoZSBzYW1lIGtleSBvdmVycmlkZSB0aGVtLiBUaGUgUklPXG4gKiBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGlzIGFsd2F5cyBpbmNsdWRlZC5cbiAqXG4gKiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFjayByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZVxuICogYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpbiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IGFwaVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0FwaVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2FwaS1zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCBpbmZyYXN0cnVjdHVyZVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0luZnJhc3RydWN0dXJlU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvaW5mcmFzdHJ1Y3R1cmUtc2JvbS5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIGNvbGxlY3Rpb25OYW1lOiAnYmlsbGluZycsXG4gKiAgIGNvbGxlY3Rpb25WZXJzaW9uOiAnMS40LjAnLFxuICogICBzaGFyZWRUYWdzOiBbJ2RvbWFpbjpiaWxsaW5nJ10sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2FwaScsXG4gKiAgICAgICBzYm9tOiBhcGlTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgICAgIGxpY2Vuc2VQb2xpY3k6IExpY2Vuc2VQb2xpY3kuSlZNX0JBQ0tFTkQsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAnaW5mcmFzdHJ1Y3R1cmUnLFxuICogICAgICAgc2JvbTogaW5mcmFzdHJ1Y3R1cmVTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmluZnJhc3RydWN0dXJlJ10sXG4gKiAqICAgICAgIGxpY2Vuc2VQb2xpY3k6IExpY2Vuc2VQb2xpY3kuTlBNX0JBQ0tFTkQsXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqICAgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wczoge1xuICogICAgIG5vdGlmaWNhdGlvbjogbmV3IGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb24oKSxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29sbGVjdGlvblZlcnNpb24gPSBwcm9wcy5jb2xsZWN0aW9uVmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NvbGxlY3Rpb25OYW1lJywgcHJvcHMuY29sbGVjdGlvbk5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbignY29sbGVjdGlvblZlcnNpb24nLCBjb2xsZWN0aW9uVmVyc2lvbik7XG4gICAgdmFsaWRhdGVDaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG4gICAgcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhwcm9wcy5zaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycpO1xuICAgIGNvbnN0IHNoYXJlZFRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuc2hhcmVkVGFncykgPz8gW107XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IENhdGFsb2dVcGxvYWRDb25maWd1cmF0aW9uID0ge1xuICAgICAgb3JpZ2luQWNjb3VudElkOiBzdGFjay5hY2NvdW50LFxuICAgICAgb3JpZ2luQWNjb3VudE5hbWU6IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlLFxuICAgICAgY29sbGVjdGlvbk5hbWU6IHByb3BzLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgY29sbGVjdGlvblZlcnNpb24sXG4gICAgICB0YWdzOiBbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLFxuICAgICAgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoe1xuICAgICAgICBuYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBjaGlsZC52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTixcbiAgICAgICAgLi4ub3B0aW9uYWxUYWdzKFxuICAgICAgICAgIG1lcmdlVGFncyhhZGRMaWNlbnNlUG9saWN5VGFnSWZSZXF1aXJlZChzaGFyZWRUYWdzLCBjaGlsZC5saWNlbnNlUG9saWN5KSwgY2hpbGQuYWRkaXRpb25hbFRhZ3MpXG4gICAgICAgICksXG4gICAgICAgIHNib206IGFzc2V0TG9jYXRpb24oY2hpbGQuc2JvbSksXG4gICAgICAgIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24oY2hpbGQudmV4KSB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBwcm9wcy5jaGlsZHJlbi5mbGF0TWFwKGNoaWxkID0+IFtjaGlsZC5zYm9tLCAuLi4oY2hpbGQudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtjaGlsZC52ZXhdKV0pXG4gICAgKTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpO1xuICAgIHByb3BzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT5cbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yKHtcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgIHByb2plY3ROYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICBhY2NvdW50TmFtZTogY29uZmlndXJhdGlvbi5vcmlnaW5BY2NvdW50TmFtZSxcbiAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3IocHJvcHM6IENyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMpOiB2b2lkIHtcbiAgbmV3IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvcihwcm9wcy5zY29wZSwgYCR7cHJvcHMucHJvamVjdE5hbWV9VnVsbmVyYWJpbGl0eU1vbml0b3JgLCB7XG4gICAgbmFtZTogYCR7cHJvcHMuYWNjb3VudE5hbWV9IFZ1bG5lcmFiaWxpdHlNb25pdG9yYCxcbiAgICBzZXJ2aWNlTmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgbW9uaXRvclR5cGU6IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLk1FVFJJQ19BTEVSVCxcbiAgICBxdWVyeTogYG1heChsYXN0XzE1bSk6bWF4OnNlcnZpY2UudnVsbmVyYWJpbGl0aWVze3Byb2plY3RfbmFtZToke3Byb3BzLnByb2plY3ROYW1lfX0gPiAwYCxcbiAgICBsb3dlcmNhc2VRdWVyeTogdHJ1ZSxcbiAgICBtZXNzYWdlOiBbXG4gICAgICAne3sjaXNfYWxlcnR9fScsXG4gICAgICBgUHJvamVjdCAke3Byb3BzLnByb2plY3ROYW1lfSBoYXMge3t2YWx1ZX19IGtub3duIHZ1bG5lcmFiaWxpdGllcy5gLFxuICAgICAgJ3t7L2lzX2FsZXJ0fX0nLFxuICAgICAgJycsXG4gICAgICAne3sjaXNfcmVjb3Zlcnl9fScsXG4gICAgICBgUHJvamVjdCAke3Byb3BzLnByb2plY3ROYW1lfSBubyBsb25nZXIgcmVwb3J0cyB2dWxuZXJhYmlsaXRpZXMuYCxcbiAgICAgICd7ey9pc19yZWNvdmVyeX19JyxcbiAgICBdLmpvaW4oJ1xcbicpLFxuICAgIG5vdGlmaWNhdGlvbjogcHJvcHMubm90aWZpY2F0aW9uLFxuICAgIHByaW9yaXR5OiAzLFxuICAgIGV4dHJhVGFnczogWydtb25pdG9yX3R5cGU6dnVsbmVyYWJpbGl0eSddLFxuICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICBjcml0aWNhbDogMCxcbiAgICAgIH0sXG4gICAgICBub3RpZnlOb0RhdGE6IGZhbHNlLFxuICAgICAgcmVxdWlyZUZ1bGxXaW5kb3c6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGNvbmZpZ3VyYXRpb246IFVwbG9hZENvbmZpZ3VyYXRpb24sXG4gIHNvdXJjZUFzc2V0czogczNBc3NldHMuQXNzZXRbXVxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gIGNvbnN0IHVwbG9hZEZ1bmN0aW9uID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbihzY29wZSwgJ1VwbG9hZEZ1bmN0aW9uJywge1xuICAgIHV1aWQ6IFVQTE9BRF9GVU5DVElPTl9VVUlELFxuICAgIGxhbWJkYVB1cnBvc2U6IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFLFxuICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgaGFuZGxlcjogJ2hhbmRsZXIuaGFuZGxlcicsXG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICdsYW1iZGEnKSwge1xuICAgICAgZXhjbHVkZTogWycqLmpzJywgJyouZC50cyddLFxuICAgIH0pLFxuICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgbG9nR3JvdXA6IGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2spLFxuICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7U0JPTV9DQVRBTE9HX0JVQ0tFVF9BUk59LypgXSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgbWVtb3J5U2l6ZTogMjU2LFxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgYXNzZXQgb2Ygc291cmNlQXNzZXRzKSB7XG4gICAgYXNzZXQuZ3JhbnRSZWFkKHVwbG9hZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIG5ldyBldmVudHMuUnVsZShzY29wZSwgJ1N0YWNrQ29tcGxldGlvblJ1bGUnLCB7XG4gICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICBzb3VyY2U6IFsnYXdzLmNsb3VkZm9ybWF0aW9uJ10sXG4gICAgICBkZXRhaWxUeXBlOiBbJ0Nsb3VkRm9ybWF0aW9uIFN0YWNrIFN0YXR1cyBDaGFuZ2UnXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICAnc3RhY2staWQnOiBbc3RhY2suc3RhY2tJZF0sXG4gICAgICAgICdzdGF0dXMtZGV0YWlscyc6IHtcbiAgICAgICAgICBzdGF0dXM6IFsnQ1JFQVRFX0NPTVBMRVRFJywgJ1VQREFURV9DT01QTEVURSddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRhcmdldHM6IFtcbiAgICAgIG5ldyBldmVudHNUYXJnZXRzLkxhbWJkYUZ1bmN0aW9uKHVwbG9hZEZ1bmN0aW9uLCB7XG4gICAgICAgIGV2ZW50OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIGV2ZW50SWQ6IGV2ZW50cy5FdmVudEZpZWxkLmV2ZW50SWQsXG4gICAgICAgICAgZXZlbnRUaW1lOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC50aW1lJyksXG4gICAgICAgICAgc3RhY2tJZDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YWNrLWlkJyksXG4gICAgICAgICAgc3RhY2tTdGF0dXM6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLmRldGFpbC5zdGF0dXMtZGV0YWlscy5zdGF0dXMnKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRPckNyZWF0ZVVwbG9hZExvZ0dyb3VwKHN0YWNrOiBTdGFjayk6IGxvZ3MuTG9nR3JvdXAge1xuICBjb25zdCBleGlzdGluZ0xvZ0dyb3VwID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoVVBMT0FEX0xPR19HUk9VUF9JRCk7XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwIGluc3RhbmNlb2YgbG9ncy5Mb2dHcm91cCkge1xuICAgIHJldHVybiBleGlzdGluZ0xvZ0dyb3VwO1xuICB9XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIGFscmVhZHkgY29udGFpbnMgYSBjb25zdHJ1Y3QgbmFtZWQgJyR7VVBMT0FEX0xPR19HUk9VUF9JRH0nYCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBsb2dzLkxvZ0dyb3VwKHN0YWNrLCBVUExPQURfTE9HX0dST1VQX0lELCB7XG4gICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NldExvY2F0aW9uKGFzc2V0OiBzM0Fzc2V0cy5Bc3NldCk6IEFzc2V0TG9jYXRpb24ge1xuICByZXR1cm4ge1xuICAgIGJ1Y2tldE5hbWU6IGFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICBvYmplY3RLZXk6IGFzc2V0LnMzT2JqZWN0S2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUuaW5jbHVkZXMoJy8nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHZhbHVlIHdpdGhvdXQgJy8nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZHJlbihjaGlsZHJlbjogU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGRbXSk6IHZvaWQge1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHByb2plY3QnKTtcbiAgfVxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gTUFYX0NISUxEUkVOKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke01BWF9DSElMRFJFTn0gcHJvamVjdHNgKTtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NoaWxkIG5hbWUnLCBjaGlsZC5uYW1lKTtcbiAgICBpZiAoY2hpbGQudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oYHZlcnNpb24gZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2AsIGNoaWxkLnZlcnNpb24pO1xuICAgIH1cbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGNoaWxkLmFkZGl0aW9uYWxUYWdzID8/IFtdLCBgYWRkaXRpb25hbFRhZ3MgZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2ApO1xuICAgIGlmIChuYW1lcy5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2hpbGQgbmFtZSAnJHtjaGlsZC5uYW1lfScgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBjb2xsZWN0aW9uYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjaGlsZC5uYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVRhZ3Moc2hhcmVkVGFncz86IHN0cmluZ1tdLCBhZGRpdGlvbmFsVGFncz86IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoc2hhcmVkVGFncyA9PT0gdW5kZWZpbmVkICYmIGFkZGl0aW9uYWxUYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhzaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycsIHRydWUpO1xuICBjb25zdCBhZGRpdGlvbmFsID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhhZGRpdGlvbmFsVGFncyA/PyBbXSwgJ2FkZGl0aW9uYWxUYWdzJyk7XG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXAoc2hhcmVkKTtcbiAgZm9yIChjb25zdCBba2V5LCB0YWddIG9mIGFkZGl0aW9uYWwpIG1lcmdlZC5zZXQoa2V5LCB0YWcpO1xuICByZXR1cm4gWy4uLm1lcmdlZC52YWx1ZXMoKV07XG59XG5cbmZ1bmN0aW9uIGFkZExpY2Vuc2VQb2xpY3lUYWdJZlJlcXVpcmVkKHRhZ3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBwb2xpY3k6IExpY2Vuc2VQb2xpY3kpIHtcbiAgaWYgKHBvbGljeSAhPT0gTGljZW5zZVBvbGljeS5OT05FKSB7XG4gICAgcmV0dXJuIFsuLi4odGFncyA/PyBbXSksIGBsaWNlbnNlX3BvbGljeToke3BvbGljeX1gXTtcbiAgfVxuICByZXR1cm4gdGFncztcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/version.json
CHANGED