@gammarers/aws-rds-database-running-schedule-stack 2.2.12 → 2.3.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
@@ -8,6 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "dependencies": {
11
+ "@gammarers/aws-resource-naming": "^0.8.2",
11
12
  "aws-cdk-lib": "^2.120.0",
12
13
  "constructs": "^10.0.5"
13
14
  },
@@ -90,6 +91,24 @@
90
91
  }
91
92
  }
92
93
  },
94
+ "@gammarers/aws-resource-naming": {
95
+ "submodules": {
96
+ "@gammarers/aws-resource-naming.ResourceNaming": {}
97
+ },
98
+ "targets": {
99
+ "dotnet": {
100
+ "namespace": "Gammarers.Utils.AWS",
101
+ "packageId": "Gammarers.Utils.AWS.ResourceNaming"
102
+ },
103
+ "js": {
104
+ "npm": "@gammarers/aws-resource-naming"
105
+ },
106
+ "python": {
107
+ "distName": "gammarers.aws-resource-naming",
108
+ "module": "gammarers.aws_resource_naming"
109
+ }
110
+ }
111
+ },
93
112
  "aws-cdk-lib": {
94
113
  "submodules": {
95
114
  "aws-cdk-lib.alexa_ask": {
@@ -3684,7 +3703,7 @@
3684
3703
  },
3685
3704
  "name": "@gammarers/aws-rds-database-running-schedule-stack",
3686
3705
  "readme": {
3687
- "markdown": "# AWS RDS Database Running Schedule Stack\n\n[![GitHub](https://img.shields.io/github/license/gammarers/aws-rds-database-running-schedule-stack?style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/blob/main/LICENSE)\n[![npm (scoped)](https://img.shields.io/npm/v/@gammarers/aws-rds-database-running-schedule-stack?style=flat-square)](https://www.npmjs.com/package/@gammarers/aws-rds-database-running-schedule-stack)\n[![PyPI](https://img.shields.io/pypi/v/gammarers.aws-rds-database-running-schedule-stack?style=flat-square)](https://pypi.org/project/gammarers.aws-rds-database-running-schedule-stack/)\n[![Nuget](https://img.shields.io/nuget/v/Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack?style=flat-square)](https://www.nuget.org/packages/Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack/)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers/aws-rds-database-running-schedule-stack/release.yml?branch=main&label=release&style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/actions/workflows/release.yml)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/gammarers/aws-rds-database-running-schedule-stack?sort=semver&style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/releases)\n\n[![View on Construct Hub](https://constructs.dev/badge?package=@gammarers/aws-rds-database-running-schedule-stack)](https://constructs.dev/packages/@gammarers/aws-rds-database-running-schedule-stack)\n\nThis AWS CDK Construct Stack controls the starting and stopping of RDS DB instances and clusters based on specified tags, ensuring they only run during working hours. It uses EventBridge Scheduler to trigger a StepFunctions State Machine at the start and end of the working hours(default 07:50(UTC) - 21:10(UTC)), which then starts or stops the databases depending on the mode.\n\n## Fixed\n\n- RDS Aurora Cluster\n- RDS Instance\n\n## Resources\n\nThis construct creating resource list.\n\n- EventBridge Scheduler execution role\n- EventBridge Scheduler\n- StepFunctions StateMahcine (star or stop controle)\n- StepFunctions StateMahcine execution role\n\n## Install\n\n### TypeScript\n\n#### install by npm\n\n```shell\nnpm install @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by yarn\n\n```shell\nyarn add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by pnpm\n\n```shell\npnpm add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by bun\n\n```shell\nbun add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n### Python\n\n```shell\npip install gammarers.aws-rds-database-running-schedule-stack\n```\n\n### C# / .NET\n\n```shell\ndotnet add package Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack\n```\n\n## Example\n\n```typescript\nimport { RdsDatabaseRunningScheduler, DatabaseType } from '@gammarer/aws-rds-database-running-schedule-stack';\n\nnew RDSDatabaseRunningScheduleStack(app, 'RDSDatabaseRunningScheduleStack', {\n targetResource: {\n tagKey: 'WorkHoursRunning', // already tagging to rds instance or cluster\n tagValues: ['YES'], // already tagging to rds instance or cluster\n },\n enableScheduling: true,\n startSchedule: {\n timezone: 'Asia/Tokyo',\n minute: '55',\n hour: '8',\n week: 'MON-FRI',\n },\n stopSchedule: {\n timezone: 'Asia/Tokyo',\n minute: '5',\n hour: '19',\n week: 'MON-FRI',\n },\n});\n\n```\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n\n\n\n"
3706
+ "markdown": "# AWS RDS Database Running Schedule Stack\n\n[![GitHub](https://img.shields.io/github/license/gammarers/aws-rds-database-running-schedule-stack?style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/blob/main/LICENSE)\n[![npm (scoped)](https://img.shields.io/npm/v/@gammarers/aws-rds-database-running-schedule-stack?style=flat-square)](https://www.npmjs.com/package/@gammarers/aws-rds-database-running-schedule-stack)\n[![PyPI](https://img.shields.io/pypi/v/gammarers.aws-rds-database-running-schedule-stack?style=flat-square)](https://pypi.org/project/gammarers.aws-rds-database-running-schedule-stack/)\n[![Nuget](https://img.shields.io/nuget/v/Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack?style=flat-square)](https://www.nuget.org/packages/Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack/)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/gammarers/aws-rds-database-running-schedule-stack/release.yml?branch=main&label=release&style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/actions/workflows/release.yml)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/gammarers/aws-rds-database-running-schedule-stack?sort=semver&style=flat-square)](https://github.com/gammarers/aws-rds-database-running-schedule-stack/releases)\n\n[![View on Construct Hub](https://constructs.dev/badge?package=@gammarers/aws-rds-database-running-schedule-stack)](https://constructs.dev/packages/@gammarers/aws-rds-database-running-schedule-stack)\n\nThis AWS CDK Construct Stack controls the starting and stopping of RDS DB instances and clusters based on specified tags, ensuring they only run during working hours. It uses EventBridge Scheduler to trigger a StepFunctions State Machine at the start and end of the working hours(default 07:50(UTC) - 21:10(UTC)), which then starts or stops the databases depending on the mode.\n\n> [!WARNING]\n> v2.3.0:\n> Stack props add option resourceNamingOption\n> default ResourceNamingType.DEFAULT is cdk generated name\n> f you want to maintain compatibility with versions below `v2.3.0`, please include the following settings (ResourceNamingType.AUTO).\n> ```typescript\n> new RDSDatabaseRunningScheduleStack(app, 'RDSDatabaseRunningScheduleStack', {\n> targetResource: {\n> tagKey: 'WorkHoursRunning',\n> tagValues: ['YES'],\n> },\n> resourceNamingOption: {\n> type: ResourceNamingType.AUTO, // HERE\n> },\n> });\n> ```\n\n\n## Fixed\n\n- RDS Aurora Cluster\n- RDS Instance\n\n## Resources\n\nThis construct creating resource list.\n\n- EventBridge Scheduler execution role\n- EventBridge Scheduler\n- StepFunctions StateMahcine (star or stop controle)\n- StepFunctions StateMahcine execution role\n\n## Install\n\n### TypeScript\n\n#### install by npm\n\n```shell\nnpm install @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by yarn\n\n```shell\nyarn add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by pnpm\n\n```shell\npnpm add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n#### install by bun\n\n```shell\nbun add @gammarers/aws-rds-database-running-schedule-stack\n```\n\n### Python\n\n```shell\npip install gammarers.aws-rds-database-running-schedule-stack\n```\n\n### C# / .NET\n\n```shell\ndotnet add package Gammarers.CDK.AWS.RdsDatabaseRunningScheduleStack\n```\n\n## Example\n\n```typescript\nimport { RdsDatabaseRunningScheduler, DatabaseType } from '@gammarer/aws-rds-database-running-schedule-stack';\n\nnew RDSDatabaseRunningScheduleStack(app, 'RDSDatabaseRunningScheduleStack', {\n targetResource: {\n tagKey: 'WorkHoursRunning', // already tagging to rds instance or cluster\n tagValues: ['YES'], // already tagging to rds instance or cluster\n },\n enableScheduling: true,\n startSchedule: {\n timezone: 'Asia/Tokyo',\n minute: '55',\n hour: '8',\n week: 'MON-FRI',\n },\n stopSchedule: {\n timezone: 'Asia/Tokyo',\n minute: '5',\n hour: '19',\n week: 'MON-FRI',\n },\n resourceNamingOption: {\n type: ResourceNamingType.AUTO, // DEFAULT or AUTO or CUSTOM\n },\n});\n\n```\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n\n\n\n"
3688
3707
  },
3689
3708
  "repository": {
3690
3709
  "type": "git",
@@ -3705,6 +3724,143 @@
3705
3724
  }
3706
3725
  },
3707
3726
  "types": {
3727
+ "@gammarers/aws-rds-database-running-schedule-stack.CustomNaming": {
3728
+ "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
3729
+ "datatype": true,
3730
+ "docs": {
3731
+ "stability": "stable"
3732
+ },
3733
+ "fqn": "@gammarers/aws-rds-database-running-schedule-stack.CustomNaming",
3734
+ "kind": "interface",
3735
+ "locationInModule": {
3736
+ "filename": "src/index.ts",
3737
+ "line": 12
3738
+ },
3739
+ "name": "CustomNaming",
3740
+ "properties": [
3741
+ {
3742
+ "abstract": true,
3743
+ "docs": {
3744
+ "stability": "stable"
3745
+ },
3746
+ "immutable": true,
3747
+ "locationInModule": {
3748
+ "filename": "src/index.ts",
3749
+ "line": 15
3750
+ },
3751
+ "name": "notificationTopicDisplayName",
3752
+ "type": {
3753
+ "primitive": "string"
3754
+ }
3755
+ },
3756
+ {
3757
+ "abstract": true,
3758
+ "docs": {
3759
+ "stability": "stable"
3760
+ },
3761
+ "immutable": true,
3762
+ "locationInModule": {
3763
+ "filename": "src/index.ts",
3764
+ "line": 14
3765
+ },
3766
+ "name": "notificationTopicName",
3767
+ "type": {
3768
+ "primitive": "string"
3769
+ }
3770
+ },
3771
+ {
3772
+ "abstract": true,
3773
+ "docs": {
3774
+ "stability": "stable"
3775
+ },
3776
+ "immutable": true,
3777
+ "locationInModule": {
3778
+ "filename": "src/index.ts",
3779
+ "line": 18
3780
+ },
3781
+ "name": "schedulerRoleName",
3782
+ "type": {
3783
+ "primitive": "string"
3784
+ }
3785
+ },
3786
+ {
3787
+ "abstract": true,
3788
+ "docs": {
3789
+ "stability": "stable"
3790
+ },
3791
+ "immutable": true,
3792
+ "locationInModule": {
3793
+ "filename": "src/index.ts",
3794
+ "line": 19
3795
+ },
3796
+ "name": "startScheduleName",
3797
+ "type": {
3798
+ "primitive": "string"
3799
+ }
3800
+ },
3801
+ {
3802
+ "abstract": true,
3803
+ "docs": {
3804
+ "stability": "stable"
3805
+ },
3806
+ "immutable": true,
3807
+ "locationInModule": {
3808
+ "filename": "src/index.ts",
3809
+ "line": 16
3810
+ },
3811
+ "name": "stateMachineName",
3812
+ "type": {
3813
+ "primitive": "string"
3814
+ }
3815
+ },
3816
+ {
3817
+ "abstract": true,
3818
+ "docs": {
3819
+ "stability": "stable"
3820
+ },
3821
+ "immutable": true,
3822
+ "locationInModule": {
3823
+ "filename": "src/index.ts",
3824
+ "line": 17
3825
+ },
3826
+ "name": "stateMachineRoleName",
3827
+ "type": {
3828
+ "primitive": "string"
3829
+ }
3830
+ },
3831
+ {
3832
+ "abstract": true,
3833
+ "docs": {
3834
+ "stability": "stable"
3835
+ },
3836
+ "immutable": true,
3837
+ "locationInModule": {
3838
+ "filename": "src/index.ts",
3839
+ "line": 20
3840
+ },
3841
+ "name": "stopScheduleName",
3842
+ "type": {
3843
+ "primitive": "string"
3844
+ }
3845
+ },
3846
+ {
3847
+ "abstract": true,
3848
+ "docs": {
3849
+ "stability": "stable"
3850
+ },
3851
+ "immutable": true,
3852
+ "locationInModule": {
3853
+ "filename": "src/index.ts",
3854
+ "line": 13
3855
+ },
3856
+ "name": "type",
3857
+ "type": {
3858
+ "fqn": "@gammarers/aws-resource-naming.ResourceNamingType"
3859
+ }
3860
+ }
3861
+ ],
3862
+ "symbolId": "src/index:CustomNaming"
3863
+ },
3708
3864
  "@gammarers/aws-rds-database-running-schedule-stack.NotificationsProperty": {
3709
3865
  "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
3710
3866
  "datatype": true,
@@ -3715,7 +3871,7 @@
3715
3871
  "kind": "interface",
3716
3872
  "locationInModule": {
3717
3873
  "filename": "src/index.ts",
3718
- "line": 23
3874
+ "line": 37
3719
3875
  },
3720
3876
  "name": "NotificationsProperty",
3721
3877
  "properties": [
@@ -3727,7 +3883,7 @@
3727
3883
  "immutable": true,
3728
3884
  "locationInModule": {
3729
3885
  "filename": "src/index.ts",
3730
- "line": 24
3886
+ "line": 38
3731
3887
  },
3732
3888
  "name": "emails",
3733
3889
  "optional": true,
@@ -3756,7 +3912,7 @@
3756
3912
  },
3757
3913
  "locationInModule": {
3758
3914
  "filename": "src/index.ts",
3759
- "line": 36
3915
+ "line": 51
3760
3916
  },
3761
3917
  "parameters": [
3762
3918
  {
@@ -3782,7 +3938,7 @@
3782
3938
  "kind": "class",
3783
3939
  "locationInModule": {
3784
3940
  "filename": "src/index.ts",
3785
- "line": 35
3941
+ "line": 50
3786
3942
  },
3787
3943
  "name": "RDSDatabaseRunningScheduleStack",
3788
3944
  "symbolId": "src/index:RDSDatabaseRunningScheduleStack"
@@ -3800,7 +3956,7 @@
3800
3956
  "kind": "interface",
3801
3957
  "locationInModule": {
3802
3958
  "filename": "src/index.ts",
3803
- "line": 27
3959
+ "line": 41
3804
3960
  },
3805
3961
  "name": "RDSDatabaseRunningScheduleStackProps",
3806
3962
  "properties": [
@@ -3812,7 +3968,7 @@
3812
3968
  "immutable": true,
3813
3969
  "locationInModule": {
3814
3970
  "filename": "src/index.ts",
3815
- "line": 28
3971
+ "line": 42
3816
3972
  },
3817
3973
  "name": "targetResource",
3818
3974
  "type": {
@@ -3827,7 +3983,7 @@
3827
3983
  "immutable": true,
3828
3984
  "locationInModule": {
3829
3985
  "filename": "src/index.ts",
3830
- "line": 29
3986
+ "line": 43
3831
3987
  },
3832
3988
  "name": "enableScheduling",
3833
3989
  "optional": true,
@@ -3843,7 +3999,7 @@
3843
3999
  "immutable": true,
3844
4000
  "locationInModule": {
3845
4001
  "filename": "src/index.ts",
3846
- "line": 32
4002
+ "line": 46
3847
4003
  },
3848
4004
  "name": "notifications",
3849
4005
  "optional": true,
@@ -3859,7 +4015,35 @@
3859
4015
  "immutable": true,
3860
4016
  "locationInModule": {
3861
4017
  "filename": "src/index.ts",
3862
- "line": 31
4018
+ "line": 47
4019
+ },
4020
+ "name": "resourceNamingOption",
4021
+ "optional": true,
4022
+ "type": {
4023
+ "union": {
4024
+ "types": [
4025
+ {
4026
+ "fqn": "@gammarers/aws-rds-database-running-schedule-stack.CustomNaming"
4027
+ },
4028
+ {
4029
+ "fqn": "@gammarers/aws-resource-naming.ResourceDefaultNaming"
4030
+ },
4031
+ {
4032
+ "fqn": "@gammarers/aws-resource-naming.ResourceAutoNaming"
4033
+ }
4034
+ ]
4035
+ }
4036
+ }
4037
+ },
4038
+ {
4039
+ "abstract": true,
4040
+ "docs": {
4041
+ "stability": "stable"
4042
+ },
4043
+ "immutable": true,
4044
+ "locationInModule": {
4045
+ "filename": "src/index.ts",
4046
+ "line": 45
3863
4047
  },
3864
4048
  "name": "startSchedule",
3865
4049
  "optional": true,
@@ -3875,7 +4059,7 @@
3875
4059
  "immutable": true,
3876
4060
  "locationInModule": {
3877
4061
  "filename": "src/index.ts",
3878
- "line": 30
4062
+ "line": 44
3879
4063
  },
3880
4064
  "name": "stopSchedule",
3881
4065
  "optional": true,
@@ -3886,6 +4070,104 @@
3886
4070
  ],
3887
4071
  "symbolId": "src/index:RDSDatabaseRunningScheduleStackProps"
3888
4072
  },
4073
+ "@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming": {
4074
+ "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
4075
+ "datatype": true,
4076
+ "docs": {
4077
+ "stability": "stable"
4078
+ },
4079
+ "fqn": "@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming",
4080
+ "kind": "interface",
4081
+ "locationInModule": {
4082
+ "filename": "node_modules/@gammarers/aws-resource-naming/lib/index.d.ts",
4083
+ "line": 7
4084
+ },
4085
+ "name": "ResourceAutoNaming",
4086
+ "properties": [
4087
+ {
4088
+ "abstract": true,
4089
+ "docs": {
4090
+ "stability": "stable"
4091
+ },
4092
+ "immutable": true,
4093
+ "locationInModule": {
4094
+ "filename": "node_modules/@gammarers/aws-resource-naming/lib/index.d.ts",
4095
+ "line": 8
4096
+ },
4097
+ "name": "type",
4098
+ "type": {
4099
+ "fqn": "@gammarers/aws-resource-naming.ResourceNamingType"
4100
+ }
4101
+ }
4102
+ ],
4103
+ "symbolId": "lib/index:ResourceAutoNaming"
4104
+ },
4105
+ "@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming": {
4106
+ "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
4107
+ "datatype": true,
4108
+ "docs": {
4109
+ "stability": "stable"
4110
+ },
4111
+ "fqn": "@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming",
4112
+ "kind": "interface",
4113
+ "locationInModule": {
4114
+ "filename": "node_modules/@gammarers/aws-resource-naming/lib/index.d.ts",
4115
+ "line": 10
4116
+ },
4117
+ "name": "ResourceDefaultNaming",
4118
+ "properties": [
4119
+ {
4120
+ "abstract": true,
4121
+ "docs": {
4122
+ "stability": "stable"
4123
+ },
4124
+ "immutable": true,
4125
+ "locationInModule": {
4126
+ "filename": "node_modules/@gammarers/aws-resource-naming/lib/index.d.ts",
4127
+ "line": 11
4128
+ },
4129
+ "name": "type",
4130
+ "type": {
4131
+ "fqn": "@gammarers/aws-resource-naming.ResourceNamingType"
4132
+ }
4133
+ }
4134
+ ],
4135
+ "symbolId": "lib/index:ResourceDefaultNaming"
4136
+ },
4137
+ "@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType": {
4138
+ "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
4139
+ "docs": {
4140
+ "stability": "stable"
4141
+ },
4142
+ "fqn": "@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType",
4143
+ "kind": "enum",
4144
+ "locationInModule": {
4145
+ "filename": "node_modules/@gammarers/aws-resource-naming/lib/index.d.ts",
4146
+ "line": 2
4147
+ },
4148
+ "members": [
4149
+ {
4150
+ "docs": {
4151
+ "stability": "stable"
4152
+ },
4153
+ "name": "DEFAULT"
4154
+ },
4155
+ {
4156
+ "docs": {
4157
+ "stability": "stable"
4158
+ },
4159
+ "name": "AUTO"
4160
+ },
4161
+ {
4162
+ "docs": {
4163
+ "stability": "stable"
4164
+ },
4165
+ "name": "CUSTOM"
4166
+ }
4167
+ ],
4168
+ "name": "ResourceNamingType",
4169
+ "symbolId": "lib/index:ResourceNamingType"
4170
+ },
3889
4171
  "@gammarers/aws-rds-database-running-schedule-stack.ScheduleProperty": {
3890
4172
  "assembly": "@gammarers/aws-rds-database-running-schedule-stack",
3891
4173
  "datatype": true,
@@ -3896,7 +4178,7 @@
3896
4178
  "kind": "interface",
3897
4179
  "locationInModule": {
3898
4180
  "filename": "src/index.ts",
3899
- "line": 11
4181
+ "line": 25
3900
4182
  },
3901
4183
  "name": "ScheduleProperty",
3902
4184
  "properties": [
@@ -3908,7 +4190,7 @@
3908
4190
  "immutable": true,
3909
4191
  "locationInModule": {
3910
4192
  "filename": "src/index.ts",
3911
- "line": 12
4193
+ "line": 26
3912
4194
  },
3913
4195
  "name": "timezone",
3914
4196
  "type": {
@@ -3923,7 +4205,7 @@
3923
4205
  "immutable": true,
3924
4206
  "locationInModule": {
3925
4207
  "filename": "src/index.ts",
3926
- "line": 14
4208
+ "line": 28
3927
4209
  },
3928
4210
  "name": "hour",
3929
4211
  "optional": true,
@@ -3939,7 +4221,7 @@
3939
4221
  "immutable": true,
3940
4222
  "locationInModule": {
3941
4223
  "filename": "src/index.ts",
3942
- "line": 13
4224
+ "line": 27
3943
4225
  },
3944
4226
  "name": "minute",
3945
4227
  "optional": true,
@@ -3955,7 +4237,7 @@
3955
4237
  "immutable": true,
3956
4238
  "locationInModule": {
3957
4239
  "filename": "src/index.ts",
3958
- "line": 15
4240
+ "line": 29
3959
4241
  },
3960
4242
  "name": "week",
3961
4243
  "optional": true,
@@ -3976,7 +4258,7 @@
3976
4258
  "kind": "interface",
3977
4259
  "locationInModule": {
3978
4260
  "filename": "src/index.ts",
3979
- "line": 18
4261
+ "line": 32
3980
4262
  },
3981
4263
  "name": "TargetResourceProperty",
3982
4264
  "properties": [
@@ -3988,7 +4270,7 @@
3988
4270
  "immutable": true,
3989
4271
  "locationInModule": {
3990
4272
  "filename": "src/index.ts",
3991
- "line": 19
4273
+ "line": 33
3992
4274
  },
3993
4275
  "name": "tagKey",
3994
4276
  "type": {
@@ -4003,7 +4285,7 @@
4003
4285
  "immutable": true,
4004
4286
  "locationInModule": {
4005
4287
  "filename": "src/index.ts",
4006
- "line": 20
4288
+ "line": 34
4007
4289
  },
4008
4290
  "name": "tagValues",
4009
4291
  "type": {
@@ -4019,6 +4301,6 @@
4019
4301
  "symbolId": "src/index:TargetResourceProperty"
4020
4302
  }
4021
4303
  },
4022
- "version": "2.2.12",
4023
- "fingerprint": "3sAmtQPfJs3OCVcDF32EP45ciRs7SilAfb/qAZZtowY="
4304
+ "version": "2.3.0",
4305
+ "fingerprint": "Vwh7QQFE3i5lYvqbaD8E8h9jOPrYGBO3Fn2hhuZA+88="
4024
4306
  }
package/API.md CHANGED
@@ -879,6 +879,111 @@ Whether termination protection is enabled for this stack.
879
879
 
880
880
  ## Structs <a name="Structs" id="Structs"></a>
881
881
 
882
+ ### CustomNaming <a name="CustomNaming" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming"></a>
883
+
884
+ #### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.Initializer"></a>
885
+
886
+ ```typescript
887
+ import { CustomNaming } from '@gammarers/aws-rds-database-running-schedule-stack'
888
+
889
+ const customNaming: CustomNaming = { ... }
890
+ ```
891
+
892
+ #### Properties <a name="Properties" id="Properties"></a>
893
+
894
+ | **Name** | **Type** | **Description** |
895
+ | --- | --- | --- |
896
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.notificationTopicDisplayName">notificationTopicDisplayName</a></code> | <code>string</code> | *No description.* |
897
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.notificationTopicName">notificationTopicName</a></code> | <code>string</code> | *No description.* |
898
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.schedulerRoleName">schedulerRoleName</a></code> | <code>string</code> | *No description.* |
899
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.startScheduleName">startScheduleName</a></code> | <code>string</code> | *No description.* |
900
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stateMachineName">stateMachineName</a></code> | <code>string</code> | *No description.* |
901
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stateMachineRoleName">stateMachineRoleName</a></code> | <code>string</code> | *No description.* |
902
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stopScheduleName">stopScheduleName</a></code> | <code>string</code> | *No description.* |
903
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.type">type</a></code> | <code>@gammarers/aws-resource-naming.ResourceNamingType</code> | *No description.* |
904
+
905
+ ---
906
+
907
+ ##### `notificationTopicDisplayName`<sup>Required</sup> <a name="notificationTopicDisplayName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.notificationTopicDisplayName"></a>
908
+
909
+ ```typescript
910
+ public readonly notificationTopicDisplayName: string;
911
+ ```
912
+
913
+ - *Type:* string
914
+
915
+ ---
916
+
917
+ ##### `notificationTopicName`<sup>Required</sup> <a name="notificationTopicName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.notificationTopicName"></a>
918
+
919
+ ```typescript
920
+ public readonly notificationTopicName: string;
921
+ ```
922
+
923
+ - *Type:* string
924
+
925
+ ---
926
+
927
+ ##### `schedulerRoleName`<sup>Required</sup> <a name="schedulerRoleName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.schedulerRoleName"></a>
928
+
929
+ ```typescript
930
+ public readonly schedulerRoleName: string;
931
+ ```
932
+
933
+ - *Type:* string
934
+
935
+ ---
936
+
937
+ ##### `startScheduleName`<sup>Required</sup> <a name="startScheduleName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.startScheduleName"></a>
938
+
939
+ ```typescript
940
+ public readonly startScheduleName: string;
941
+ ```
942
+
943
+ - *Type:* string
944
+
945
+ ---
946
+
947
+ ##### `stateMachineName`<sup>Required</sup> <a name="stateMachineName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stateMachineName"></a>
948
+
949
+ ```typescript
950
+ public readonly stateMachineName: string;
951
+ ```
952
+
953
+ - *Type:* string
954
+
955
+ ---
956
+
957
+ ##### `stateMachineRoleName`<sup>Required</sup> <a name="stateMachineRoleName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stateMachineRoleName"></a>
958
+
959
+ ```typescript
960
+ public readonly stateMachineRoleName: string;
961
+ ```
962
+
963
+ - *Type:* string
964
+
965
+ ---
966
+
967
+ ##### `stopScheduleName`<sup>Required</sup> <a name="stopScheduleName" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.stopScheduleName"></a>
968
+
969
+ ```typescript
970
+ public readonly stopScheduleName: string;
971
+ ```
972
+
973
+ - *Type:* string
974
+
975
+ ---
976
+
977
+ ##### `type`<sup>Required</sup> <a name="type" id="@gammarers/aws-rds-database-running-schedule-stack.CustomNaming.property.type"></a>
978
+
979
+ ```typescript
980
+ public readonly type: ResourceNamingType;
981
+ ```
982
+
983
+ - *Type:* @gammarers/aws-resource-naming.ResourceNamingType
984
+
985
+ ---
986
+
882
987
  ### NotificationsProperty <a name="NotificationsProperty" id="@gammarers/aws-rds-database-running-schedule-stack.NotificationsProperty"></a>
883
988
 
884
989
  #### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-running-schedule-stack.NotificationsProperty.Initializer"></a>
@@ -934,6 +1039,7 @@ const rDSDatabaseRunningScheduleStackProps: RDSDatabaseRunningScheduleStackProps
934
1039
  | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.targetResource">targetResource</a></code> | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.TargetResourceProperty">TargetResourceProperty</a></code> | *No description.* |
935
1040
  | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.enableScheduling">enableScheduling</a></code> | <code>boolean</code> | *No description.* |
936
1041
  | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.notifications">notifications</a></code> | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.NotificationsProperty">NotificationsProperty</a></code> | *No description.* |
1042
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.resourceNamingOption">resourceNamingOption</a></code> | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming">CustomNaming</a> \| @gammarers/aws-resource-naming.ResourceDefaultNaming \| @gammarers/aws-resource-naming.ResourceAutoNaming</code> | *No description.* |
937
1043
  | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.startSchedule">startSchedule</a></code> | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ScheduleProperty">ScheduleProperty</a></code> | *No description.* |
938
1044
  | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.stopSchedule">stopSchedule</a></code> | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ScheduleProperty">ScheduleProperty</a></code> | *No description.* |
939
1045
 
@@ -1179,6 +1285,16 @@ public readonly notifications: NotificationsProperty;
1179
1285
 
1180
1286
  ---
1181
1287
 
1288
+ ##### `resourceNamingOption`<sup>Optional</sup> <a name="resourceNamingOption" id="@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.resourceNamingOption"></a>
1289
+
1290
+ ```typescript
1291
+ public readonly resourceNamingOption: CustomNaming | ResourceDefaultNaming | ResourceAutoNaming;
1292
+ ```
1293
+
1294
+ - *Type:* <a href="#@gammarers/aws-rds-database-running-schedule-stack.CustomNaming">CustomNaming</a> | @gammarers/aws-resource-naming.ResourceDefaultNaming | @gammarers/aws-resource-naming.ResourceAutoNaming
1295
+
1296
+ ---
1297
+
1182
1298
  ##### `startSchedule`<sup>Optional</sup> <a name="startSchedule" id="@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStackProps.property.startSchedule"></a>
1183
1299
 
1184
1300
  ```typescript
@@ -1199,6 +1315,62 @@ public readonly stopSchedule: ScheduleProperty;
1199
1315
 
1200
1316
  ---
1201
1317
 
1318
+ ### ResourceAutoNaming <a name="ResourceAutoNaming" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming"></a>
1319
+
1320
+ #### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming.Initializer"></a>
1321
+
1322
+ ```typescript
1323
+ import { ResourceAutoNaming } from '@gammarers/aws-rds-database-running-schedule-stack'
1324
+
1325
+ const resourceAutoNaming: ResourceAutoNaming = { ... }
1326
+ ```
1327
+
1328
+ #### Properties <a name="Properties" id="Properties"></a>
1329
+
1330
+ | **Name** | **Type** | **Description** |
1331
+ | --- | --- | --- |
1332
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming.property.type">type</a></code> | <code>@gammarers/aws-resource-naming.ResourceNamingType</code> | *No description.* |
1333
+
1334
+ ---
1335
+
1336
+ ##### `type`<sup>Required</sup> <a name="type" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceAutoNaming.property.type"></a>
1337
+
1338
+ ```typescript
1339
+ public readonly type: ResourceNamingType;
1340
+ ```
1341
+
1342
+ - *Type:* @gammarers/aws-resource-naming.ResourceNamingType
1343
+
1344
+ ---
1345
+
1346
+ ### ResourceDefaultNaming <a name="ResourceDefaultNaming" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming"></a>
1347
+
1348
+ #### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming.Initializer"></a>
1349
+
1350
+ ```typescript
1351
+ import { ResourceDefaultNaming } from '@gammarers/aws-rds-database-running-schedule-stack'
1352
+
1353
+ const resourceDefaultNaming: ResourceDefaultNaming = { ... }
1354
+ ```
1355
+
1356
+ #### Properties <a name="Properties" id="Properties"></a>
1357
+
1358
+ | **Name** | **Type** | **Description** |
1359
+ | --- | --- | --- |
1360
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming.property.type">type</a></code> | <code>@gammarers/aws-resource-naming.ResourceNamingType</code> | *No description.* |
1361
+
1362
+ ---
1363
+
1364
+ ##### `type`<sup>Required</sup> <a name="type" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceDefaultNaming.property.type"></a>
1365
+
1366
+ ```typescript
1367
+ public readonly type: ResourceNamingType;
1368
+ ```
1369
+
1370
+ - *Type:* @gammarers/aws-resource-naming.ResourceNamingType
1371
+
1372
+ ---
1373
+
1202
1374
  ### ScheduleProperty <a name="ScheduleProperty" id="@gammarers/aws-rds-database-running-schedule-stack.ScheduleProperty"></a>
1203
1375
 
1204
1376
  #### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-running-schedule-stack.ScheduleProperty.Initializer"></a>
@@ -1301,3 +1473,31 @@ public readonly tagValues: string[];
1301
1473
 
1302
1474
 
1303
1475
 
1476
+ ## Enums <a name="Enums" id="Enums"></a>
1477
+
1478
+ ### ResourceNamingType <a name="ResourceNamingType" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType"></a>
1479
+
1480
+ #### Members <a name="Members" id="Members"></a>
1481
+
1482
+ | **Name** | **Description** |
1483
+ | --- | --- |
1484
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.DEFAULT">DEFAULT</a></code> | *No description.* |
1485
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.AUTO">AUTO</a></code> | *No description.* |
1486
+ | <code><a href="#@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.CUSTOM">CUSTOM</a></code> | *No description.* |
1487
+
1488
+ ---
1489
+
1490
+ ##### `DEFAULT` <a name="DEFAULT" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.DEFAULT"></a>
1491
+
1492
+ ---
1493
+
1494
+
1495
+ ##### `AUTO` <a name="AUTO" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.AUTO"></a>
1496
+
1497
+ ---
1498
+
1499
+
1500
+ ##### `CUSTOM` <a name="CUSTOM" id="@gammarers/aws-rds-database-running-schedule-stack.ResourceNamingType.CUSTOM"></a>
1501
+
1502
+ ---
1503
+
package/README.md CHANGED
@@ -11,6 +11,24 @@
11
11
 
12
12
  This AWS CDK Construct Stack controls the starting and stopping of RDS DB instances and clusters based on specified tags, ensuring they only run during working hours. It uses EventBridge Scheduler to trigger a StepFunctions State Machine at the start and end of the working hours(default 07:50(UTC) - 21:10(UTC)), which then starts or stops the databases depending on the mode.
13
13
 
14
+ > [!WARNING]
15
+ > v2.3.0:
16
+ > Stack props add option resourceNamingOption
17
+ > default ResourceNamingType.DEFAULT is cdk generated name
18
+ > f you want to maintain compatibility with versions below `v2.3.0`, please include the following settings (ResourceNamingType.AUTO).
19
+ > ```typescript
20
+ > new RDSDatabaseRunningScheduleStack(app, 'RDSDatabaseRunningScheduleStack', {
21
+ > targetResource: {
22
+ > tagKey: 'WorkHoursRunning',
23
+ > tagValues: ['YES'],
24
+ > },
25
+ > resourceNamingOption: {
26
+ > type: ResourceNamingType.AUTO, // HERE
27
+ > },
28
+ > });
29
+ > ```
30
+
31
+
14
32
  ## Fixed
15
33
 
16
34
  - RDS Aurora Cluster
@@ -88,6 +106,9 @@ new RDSDatabaseRunningScheduleStack(app, 'RDSDatabaseRunningScheduleStack', {
88
106
  hour: '19',
89
107
  week: 'MON-FRI',
90
108
  },
109
+ resourceNamingOption: {
110
+ type: ResourceNamingType.AUTO, // DEFAULT or AUTO or CUSTOM
111
+ },
91
112
  });
92
113
 
93
114
  ```
package/lib/index.d.ts CHANGED
@@ -1,5 +1,18 @@
1
+ import { ResourceAutoNaming, ResourceDefaultNaming, ResourceNamingType } from '@gammarers/aws-resource-naming';
2
+ export { ResourceAutoNaming, ResourceDefaultNaming, ResourceNaming, ResourceNamingOptions, ResourceNamingType } from '@gammarers/aws-resource-naming';
1
3
  import { Stack, StackProps } from 'aws-cdk-lib';
2
4
  import { Construct } from 'constructs';
5
+ export interface CustomNaming {
6
+ readonly type: ResourceNamingType.CUSTOM;
7
+ readonly notificationTopicName: string;
8
+ readonly notificationTopicDisplayName: string;
9
+ readonly stateMachineName: string;
10
+ readonly stateMachineRoleName: string;
11
+ readonly schedulerRoleName: string;
12
+ readonly startScheduleName: string;
13
+ readonly stopScheduleName: string;
14
+ }
15
+ export type ResourceNamingOption = ResourceDefaultNaming | ResourceAutoNaming | CustomNaming;
3
16
  export interface ScheduleProperty {
4
17
  readonly timezone: string;
5
18
  readonly minute?: string;
@@ -19,6 +32,7 @@ export interface RDSDatabaseRunningScheduleStackProps extends StackProps {
19
32
  readonly stopSchedule?: ScheduleProperty;
20
33
  readonly startSchedule?: ScheduleProperty;
21
34
  readonly notifications?: NotificationsProperty;
35
+ readonly resourceNamingOption?: ResourceNamingOption;
22
36
  }
23
37
  export declare class RDSDatabaseRunningScheduleStack extends Stack {
24
38
  constructor(scope: Construct, id: string, props: RDSDatabaseRunningScheduleStackProps);
package/lib/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.RDSDatabaseRunningScheduleStack = void 0;
4
+ exports.RDSDatabaseRunningScheduleStack = exports.ResourceNamingType = exports.ResourceNaming = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const crypto = require("crypto");
6
+ const aws_resource_naming_1 = require("@gammarers/aws-resource-naming");
7
+ var aws_resource_naming_2 = require("@gammarers/aws-resource-naming");
8
+ Object.defineProperty(exports, "ResourceNaming", { enumerable: true, get: function () { return aws_resource_naming_2.ResourceNaming; } });
9
+ Object.defineProperty(exports, "ResourceNamingType", { enumerable: true, get: function () { return aws_resource_naming_2.ResourceNamingType; } });
7
10
  const cdk = require("aws-cdk-lib");
8
11
  const aws_cdk_lib_1 = require("aws-cdk-lib");
9
12
  const iam = require("aws-cdk-lib/aws-iam");
@@ -14,17 +17,26 @@ const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
14
17
  class RDSDatabaseRunningScheduleStack extends aws_cdk_lib_1.Stack {
15
18
  constructor(scope, id, props) {
16
19
  super(scope, id, props);
20
+ // 👇 Get account
17
21
  const account = cdk.Stack.of(this).account;
18
- //const stackName: string = cdk.Stack.of(this).stackName;
19
- //const region = cdk.Stack.of(this).region;
20
22
  // 👇 Create random 8 length string
21
- const random = crypto.createHash('shake256', { outputLength: 4 })
22
- .update(`${cdk.Names.uniqueId(scope)}-${cdk.Names.uniqueId(this)}`)
23
- .digest('hex');
23
+ const random = aws_resource_naming_1.ResourceNaming.createRandomString(`${cdk.Names.uniqueId(scope)}-${cdk.Names.uniqueId(this)}`);
24
+ // 👇 Definition auto naming
25
+ const autoNaming = {
26
+ notificationTopicName: `rds-db-running-schedule-notification-${random}-topic`,
27
+ notificationTopicDisplayName: 'RDS DB Running Schedule Notification Topic',
28
+ stateMachineName: `rds-db-running-schedule-${random}-state-machine`,
29
+ stateMachineRoleName: `rds-db-running-schedule-${random}-state-machine-role`,
30
+ schedulerRoleName: `rds-db-running-scheduler-${random}-exec-role`,
31
+ startScheduleName: `rds-database-running-stop-${random}-schedule`,
32
+ stopScheduleName: `rds-database-running-start-${random}-schedule`,
33
+ };
34
+ // 👇 final naming
35
+ const names = aws_resource_naming_1.ResourceNaming.naming(autoNaming, props.resourceNamingOption);
24
36
  // 👇 SNS Topic for notifications
25
37
  const topic = new sns.Topic(this, 'NotificationTopic', {
26
- topicName: `rds-db-running-schedule-notification-${random}-topic`,
27
- displayName: 'RDS DB Running Schedule Notification Topic',
38
+ topicName: names.notificationTopicName,
39
+ displayName: names.notificationTopicDisplayName,
28
40
  });
29
41
  // 👇 Subscribe an email endpoint to the topic
30
42
  const emails = props.notifications?.emails ?? [];
@@ -210,21 +222,23 @@ class RDSDatabaseRunningScheduleStack extends aws_cdk_lib_1.Stack {
210
222
  describeDBClustersTask.next(statusChoice);
211
223
  // 👇 StepFunctions State Machine
212
224
  const stateMachine = new sfn.StateMachine(this, 'StateMachine', {
213
- stateMachineName: `rds-db-running-schedule-${random}-state-machine`,
225
+ stateMachineName: names.stateMachineName,
214
226
  definitionBody: sfn.DefinitionBody.fromChainable(initStateListDefinition),
215
227
  });
216
228
  // 👇 rename role name & description.
217
- const role = stateMachine.node.findChild('Role');
218
- const cfnRole = role.node.defaultChild;
219
- cfnRole.addPropertyOverride('RoleName', `rds-db-running-schedule-${random}-state-machine-role`);
220
- cfnRole.addPropertyOverride('Description', 'RDS DB Running chedule machine role.');
221
- const policy = role.node.findChild('DefaultPolicy');
222
- const cfnPolicy = policy.node.defaultChild;
223
- cfnPolicy.addPropertyOverride('PolicyName', 'default-policy');
229
+ if (names.stateMachineRoleName) {
230
+ const role = stateMachine.node.findChild('Role');
231
+ const cfnRole = role.node.defaultChild;
232
+ cfnRole.addPropertyOverride('RoleName', names.stateMachineRoleName);
233
+ cfnRole.addPropertyOverride('Description', 'RDS DB Running machine role.');
234
+ const policy = role.node.findChild('DefaultPolicy');
235
+ const cfnPolicy = policy.node.defaultChild;
236
+ cfnPolicy.addPropertyOverride('PolicyName', `rds-db-running-schedule-${random}-state-machine-policy`);
237
+ }
224
238
  // 👇 StateMachine Exec Role of Scheduler
225
239
  const schedulerExecRole = new iam.Role(this, 'SchedulerExecutionRole', {
226
- roleName: `rds-db-running-scheduler-${random}-exec-role`,
227
- description: 'RDS DB Running scheduler execution role',
240
+ roleName: names.schedulerRoleName,
241
+ description: 'RDS DB Running scheduler role',
228
242
  assumedBy: new iam.ServicePrincipal('scheduler.amazonaws.com'),
229
243
  inlinePolicies: {
230
244
  'state-machine-exec-policy': new iam.PolicyDocument({
@@ -269,7 +283,7 @@ class RDSDatabaseRunningScheduleStack extends aws_cdk_lib_1.Stack {
269
283
  })();
270
284
  // 👇 Stop DB schedule
271
285
  new DBRuningSchedule(this, 'StopDatabaseRunningSchedule', {
272
- name: `rds-database-running-stop-${random}-schedule`,
286
+ name: names.startScheduleName,
273
287
  description: 'stop database(instance/cluster) running stop schedule.',
274
288
  sheduleState,
275
289
  timezone: props.stopSchedule?.timezone ?? 'UTC',
@@ -286,7 +300,7 @@ class RDSDatabaseRunningScheduleStack extends aws_cdk_lib_1.Stack {
286
300
  });
287
301
  // 👇 Start DB schedule
288
302
  new DBRuningSchedule(this, 'StartDatabaseRunningSchedule', {
289
- name: `rds-database-running-start-${random}-schedule`,
303
+ name: names.stopScheduleName,
290
304
  description: 'start db instance schedule.',
291
305
  sheduleState,
292
306
  timezone: props.startSchedule?.timezone ?? 'UTC',
@@ -305,7 +319,7 @@ class RDSDatabaseRunningScheduleStack extends aws_cdk_lib_1.Stack {
305
319
  }
306
320
  exports.RDSDatabaseRunningScheduleStack = RDSDatabaseRunningScheduleStack;
307
321
  _a = JSII_RTTI_SYMBOL_1;
308
- RDSDatabaseRunningScheduleStack[_a] = { fqn: "@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStack", version: "2.2.12" };
322
+ RDSDatabaseRunningScheduleStack[_a] = { fqn: "@gammarers/aws-rds-database-running-schedule-stack.RDSDatabaseRunningScheduleStack", version: "2.3.0" };
309
323
  class DBRuningSchedule extends scheduler.CfnSchedule {
310
324
  constructor(scope, id, props) {
311
325
  super(scope, id, {
@@ -336,4 +350,4 @@ class DBRuningSchedule extends scheduler.CfnSchedule {
336
350
  });
337
351
  }
338
352
  }
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLDZDQUFnRDtBQUNoRCwyQ0FBMkM7QUFDM0MsdURBQXVEO0FBQ3ZELDJDQUEyQztBQUMzQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBMkI3RCxNQUFhLCtCQUFnQyxTQUFRLG1CQUFLO0lBQ3hELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkM7UUFDbkYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzNDLHlEQUF5RDtRQUN6RCwyQ0FBMkM7UUFFM0MsbUNBQW1DO1FBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzlELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDbEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpCLGlDQUFpQztRQUNqQyxNQUFNLEtBQUssR0FBYyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ2hFLFNBQVMsRUFBRSx3Q0FBd0MsTUFBTSxRQUFRO1lBQ2pFLFdBQVcsRUFBRSw0Q0FBNEM7U0FDMUQsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNq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WUFDM0Msa0JBQWtCLEVBQUU7Z0JBQ2xCLElBQUksRUFBRSxLQUFLO2FBQ1o7WUFDRCwwQkFBMEIsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUMxQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUNwQyxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZTtnQkFDakMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRzt3QkFDcEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU07d0JBQzFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJO3FCQUM5QjtpQkFDRixDQUFDO2dCQUNGLFdBQVcsRUFBRTtvQkFDWCx3QkFBd0IsRUFBRSxFQUFFO29CQUM1QixvQkFBb0IsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzY2hlZHVsZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNjaGVkdWxlcic7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IHRpbWV6b25lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1pbnV0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaG91cj86IHN0cmluZztcbiAgcmVhZG9ubHkgd2Vlaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZVByb3BlcnR5IHtcbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uc1Byb3BlcnR5IHtcbiAgcmVhZG9ubHkgZW1haWxzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZVByb3BlcnR5O1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RvcFNjaGVkdWxlPzogU2NoZWR1bGVQcm9wZXJ0eTtcbiAgcmVhZG9ubHkgc3RhcnRTY2hlZHVsZT86IFNjaGVkdWxlUHJvcGVydHk7XG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM/OiBOb3RpZmljYXRpb25zUHJvcGVydHk7XG59XG5cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZVJ1bm5pbmdTY2hlZHVsZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBhY2NvdW50ID0gY2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgLy9jb25zdCBzdGFja05hbWU6IHN0cmluZyA9IGNkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgLy9jb25zdCByZWdpb24gPSBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgcmFuZG9tIDggbGVuZ3RoIHN0cmluZ1xuICAgIGNvbnN0IHJhbmRvbSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGFrZTI1NicsIHsgb3V0cHV0TGVuZ3RoOiA0IH0pXG4gICAgICAudXBkYXRlKGAke2Nkay5OYW1lcy51bmlxdWVJZChzY29wZSl9LSR7Y2RrLk5hbWVzLnVuaXF1ZUlkKHRoaXMpfWApXG4gICAgICAuZGlnZXN0KCdoZXgnKTtcblxuICAgIC8vIPCfkYcgU05TIFRvcGljIGZvciBub3RpZmljYXRpb25zXG4gICAgY29uc3QgdG9waWM6IHNucy5Ub3BpYyA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvblRvcGljJywge1xuICAgICAgdG9waWNOYW1lOiBgcmRzLWRiLXJ1bm5pbmctc2NoZWR1bGUtbm90aWZpY2F0aW9uLSR7cmFuZG9tfS10b3BpY2AsXG4gICAgICBkaXNwbGF5TmFtZTogJ1JEUyBEQiBSdW5uaW5nIFNjaGVkdWxlIE5vdGlmaWNhdGlvbiBUb3BpYycsXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIFN1YnNjcmliZSBhbiBlbWFpbCBlbmRwb2ludCB0byB0aGUgdG9waWNcbiAgICBjb25zdCBlbWFpbHMgPSBwcm9wcy5ub3RpZmljYXRpb25zPy5lbWFpbHMgPz8gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHZhbHVlXSBvZiBlbWFpbHMuZW50cmllcygpKSB7XG4gICAgICBuZXcgc25zLlN1YnNjcmlwdGlvbih0aGlzLCBgU3Vic2NyaXB0aW9uRW1haWwke2luZGV4LnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKX1gLCB7XG4gICAgICAgIHRvcGljLFxuICAgICAgICBwcm90b2NvbDogc25zLlN1YnNjcmlwdGlvblByb3RvY29sLkVNQUlMLFxuICAgICAgICBlbmRwb2ludDogdmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0U3RhdGVMaXN0RGVmaW5pdGlvbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ0luaXRTdGF0ZUxpc3REZWZpbml0aW9uJywge1xuICAgICAgcmVzdWx0OiBzZm4uUmVzdWx0LmZyb21PYmplY3QoW1xuICAgICAgICB7IG5hbWU6ICdBVkFJTEFCTEUnLCBlbW9qaTogJ/CfpKknLCBzdGF0ZTogJ2F2YWlsYWJsZScgfSxcbiAgICAgICAgeyBuYW1lOiAnU1RPUFBFRCcsIGVtb2ppOiAn8J+YtCcsIHN0YXRlOiAnc3RvcHBlZCcgfSxcbiAgICAgIF0pLFxuICAgICAgcmVzdWx0UGF0aDogJyQuZGVmaW5pdGlvbi5zdGF0ZUxpc3QnLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdWNjZWVkXG4gICAgY29uc3Qgc3RhdGVDaGFuZ2VTdWNjZWVkID0gbmV3IHNmbi5TdWNjZWVkKHRoaXMsICdTdGF0ZUNoYW5nZVN1Y2NlZWQnKTtcblxuICAgIGNvbnN0IHByZXBhcmVUb3BpY1ZhbHVlID0gbmV3IHNmbi5QYXNzKHRoaXMsICdQcmVwYXJlVG9waWNWYWx1ZScsIHtcbiAgICAgIHJlc3VsdFBhdGg6ICckLnByZXBhcmUudG9waWMudmFsdWVzJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgZW1vamk6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmRlZmluaXRpb24uc3RhdGVMaXN0Wz8oQC5zdGF0ZSA9PSAkLlJlc3VsdC5zdGF0dXMuY3VycmVudCldLmVtb2ppJyksIDApLFxuICAgICAgICBzdGF0dXM6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmRlZmluaXRpb24uc3RhdGVMaXN0Wz8oQC5zdGF0ZSA9PSAkLlJlc3VsdC5zdGF0dXMuY3VycmVudCldLm5hbWUnKSwgMCksXG4gICAgICAgIGFjY291bnQ6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5UYXJnZXRSZXNvdXJjZScpLCAnOicpLCA0KSwgLy8gYWNjb3VudFxuICAgICAgICByZWdpb246IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5UYXJnZXRSZXNvdXJjZScpLCAnOicpLCAzKSwgLy8gcmVnaW9uXG4gICAgICB9LFxuICAgIH0pLm5leHQobmV3IHNmbi5QYXNzKHRoaXMsICdHZW5lcmF0ZVRvcGljJywge1xuICAgICAgcmVzdWx0UGF0aDogJyQuR2VuZXJhdGUuVG9waWMnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBTdWJqZWN0OiBzZm4uSnNvblBhdGguZm9ybWF0KCd7fSBbe31dIEFXUyBSRFMgREIge30gUnVubmluZyBOb3RpZmljYXRpb24gW3t9XVt7fV0nLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5lbW9qaScpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5zdGF0dXMnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucGFyYW1zLk1vZGUnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucHJlcGFyZS50b3BpYy52YWx1ZXMuYWNjb3VudCcpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5yZWdpb24nKSxcbiAgICAgICAgKSxcbiAgICAgICAgVGV4dE1lc3NhZ2U6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ0FjY291bnQgOiB7fVxcblJlZ2lvbiA6IHt9XFxuVHlwZSA6IHt9XFxuSWRlbnRpZmllciA6IHt9XFxuU3RhdHVzIDoge30nLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5hY2NvdW50JyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnJlZ2lvbicpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LnR5cGUnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnN0YXR1cycpLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KS5uZXh0KG5ldyB0YXNrcy5TbnNQdWJsaXNoKHRoaXMsICdTZW5kTm90aWZpY2F0aW9uJywge1xuICAgICAgdG9waWM6IHRvcGljLFxuICAgICAgc3ViamVjdDogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkdlbmVyYXRlLlRvcGljLlN1YmplY3QnKSxcbiAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQuR2VuZXJhdGUuVG9waWMuVGV4dE1lc3NhZ2UnKSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLnNuc1Jlc3VsdCcsXG4gICAgfSkubmV4dChzdGF0ZUNoYW5nZVN1Y2NlZWQpKSk7XG5cbiAgICAvLyDwn5GHIEdldCBEQiBJbnN0YW5jZSBSZXNvdXJjZXMgKEZpbHRlciBieSBUYWcpXG4gICAgY29uc3QgZ2V0UmVzb3VyY2VzID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdHZXRSZXNvdXJjZXMnLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFsnKiddLFxuICAgICAgaWFtQWN0aW9uOiAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBzZXJ2aWNlOiAncmVzb3VyY2Vncm91cHN0YWdnaW5nYXBpJyxcbiAgICAgIGFjdGlvbjogJ2dldFJlc291cmNlcycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIFJlc291cmNlVHlwZUZpbHRlcnM6IFtcbiAgICAgICAgICAncmRzOmRiJyxcbiAgICAgICAgICAncmRzOmNsdXN0ZXInLFxuICAgICAgICBdLFxuICAgICAgICBUYWdGaWx0ZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgS2V5OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUGFyYW1zLlRhZ0tleScpLFxuICAgICAgICAgICAgVmFsdWVzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUGFyYW1zLlRhZ1ZhbHVlcycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0JyxcbiAgICAgIHJlc3VsdFNlbGVjdG9yOiB7XG4gICAgICAgIFRhcmdldFJlc291cmNlczogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLi5SZXNvdXJjZVRhZ01hcHBpbmdMaXN0WypdLlJlc291cmNlQVJOJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaW5pdFN0YXRlTGlzdERlZmluaXRpb24ubmV4dChnZXRSZXNvdXJjZXMpO1xuXG4gICAgLy8g8J+RhyBEZXNjcmliZSBEQiBJbnN0YW5jZSBUYXNrXG4gICAgY29uc3QgZGVzY3JpYmVEQkluc3RhbmNlc1Rhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0Rlc2NyaWJlREJJbnN0YW5jZXMnLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFtgYXJuOmF3czpyZHM6Kjoke2FjY291bnR9OmRiOipgXSxcbiAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgYWN0aW9uOiAnZGVzY3JpYmVEQkluc3RhbmNlcycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiSW5zdGFuY2VJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LnN0YXR1cycsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICBjdXJyZW50OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJJbnN0YW5jZXNbMF0uRGJJbnN0YW5jZVN0YXR1cycpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU3RvcCBEQiBJbnN0YW5jZSBUYXNrXG4gICAgY29uc3Qgc3RvcERCSW5zdGFuY2VUYXNrID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdTdG9wREJJbnN0YW5jZScsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06ZGI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdzdG9wREJJbnN0YW5jZScsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiSW5zdGFuY2VJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LlN0b3BEQkluc3RhbmNlJyxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU3RhcnQgREIgSW5zdGFuY2UgVGFza1xuICAgIGNvbnN0IHN0YXJ0REJJbnN0YW5jZVRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1N0YXJ0REJJbnN0YW5jZScsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06ZGI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdzdGFydERCSW5zdGFuY2UnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBEYkluc3RhbmNlSWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC50YXJnZXQuaWRlbnRpZmllcicpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5TdGFydERCSW5zdGFuY2UnLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBEZXNjcmliZSBEQiBDbHVzdGVyIFRhc2tcbiAgICBjb25zdCBkZXNjcmliZURCQ2x1c3RlcnNUYXNrID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdEZXNjcmliZURCQ2x1c3RlcnMnLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFtgYXJuOmF3czpyZHM6Kjoke2FjY291bnR9OmNsdXN0ZXI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdkZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBEYkNsdXN0ZXJJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LnN0YXR1cycsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICBjdXJyZW50OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJDbHVzdGVyc1swXS5TdGF0dXMnKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVEYkNsdXN0ZXJOb3RGb3VuZCA9IG5ldyBzZm4uUGFzcyh0aGlzLCAnSGFuZGxlRGJDbHVzdGVyTm90Rm91bmQnLCB7XG4gICAgICByZXN1bHQ6IHNmbi5SZXN1bHQuZnJvbU9iamVjdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdEQiBDbHVzdGVyIG5vdCBmb3VuZCwgYnV0IGNvbnRpbnVpbmcuLi4nLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZURCQ2x1c3RlcnNUYXNrLmFkZENhdGNoKGhhbmRsZURiQ2x1c3Rlck5vdEZvdW5kLCB7XG4gICAgICBlcnJvcnM6IFsnUmRzLkRiQ2x1c3Rlck5vdEZvdW5kRXhjZXB0aW9uJ10sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIFN0b3AgREIgQ2x1c3RlciBUYXNrXG4gICAgY29uc3Qgc3RvcERCQ2x1c3RlclRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1N0b3BEQkNsdXN0ZXInLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFtgYXJuOmF3czpyZHM6Kjoke2FjY291bnR9OmNsdXN0ZXI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdzdG9wREJDbHVzdGVyJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRGJDbHVzdGVySWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC50YXJnZXQuaWRlbnRpZmllcicpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5TdG9wREJDbHVzdGVyJyxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU3RvcCBEQiBDbHVzdGVyIFRhc2tcbiAgICBjb25zdCBzdGFydERCQ2x1c3RlclRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1N0YXJ0REJDbHVzdGVyJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpjbHVzdGVyOipgXSxcbiAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgYWN0aW9uOiAnc3RhcnREQkNsdXN0ZXInLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBEYkNsdXN0ZXJJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LlN0YXJ0REJDbHVzdGVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc2NyaWJlVHlwZUNob2ljZSA9IG5ldyBzZm4uQ2hvaWNlKHRoaXMsICdEZXNjcmliZVR5cGVDaG9pY2UnKVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdkYicpLFxuICAgICAgICBkZXNjcmliZURCSW5zdGFuY2VzVGFzayxcbiAgICAgIClcbiAgICAgIC53aGVuKFxuICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICBkZXNjcmliZURCQ2x1c3RlcnNUYXNrLFxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShuZXcgc2ZuLkZhaWwodGhpcywgJ1Vua25vd25UeXBlJykpO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2hhbmdlV2FpdCA9IG5ldyBzZm4uV2FpdCh0aGlzLCAnU3RhdHVzQ2hhbmdlV2FpdCcsIHtcbiAgICAgIHRpbWU6IHNmbi5XYWl0VGltZS5kdXJhdGlvbihjZGsuRHVyYXRpb24ubWludXRlcygxKSksXG4gICAgfSk7XG4gICAgc3RhdHVzQ2hhbmdlV2FpdC5uZXh0KGRlc2NyaWJlVHlwZUNob2ljZSk7XG5cbiAgICBzdGFydERCSW5zdGFuY2VUYXNrLm5leHQoc3RhdHVzQ2hhbmdlV2FpdCk7XG4gICAgc3RvcERCSW5zdGFuY2VUYXNrLm5leHQoc3RhdHVzQ2hhbmdlV2FpdCk7XG5cbiAgICBzdGFydERCQ2x1c3RlclRhc2submV4dChzdGF0dXNDaGFuZ2VXYWl0KTtcbiAgICBzdG9wREJDbHVzdGVyVGFzay5uZXh0KHN0YXR1c0NoYW5nZVdhaXQpO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2hvaWNlID0gbmV3IHNmbi5DaG9pY2UodGhpcywgJ1N0YXR1c0Nob2ljZScpXG4gICAgICAvLyBkYiBpbnN0YW5jZSBzdGFydCBvbiBzdGF0dXMuc3RvcHBlZFxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0YXJ0JyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2RiJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ3N0b3BwZWQnKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnREQkluc3RhbmNlVGFzayxcbiAgICAgIClcbiAgICAgIC8vIGRiIGluc3RhbmNlIHN0b3Agb24gc3RhdHVzLmF2YWlsYWJsZVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0b3AnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnZGInKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnYXZhaWxhYmxlJyksXG4gICAgICAgICksXG4gICAgICAgIHN0b3BEQkluc3RhbmNlVGFzayxcbiAgICAgIClcbiAgICAgIC8vIHN0YXJ0IG9uIHN0YXR1cy5zdG9wcGVkXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RhcnQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdzdG9wcGVkJyksXG4gICAgICAgICksXG4gICAgICAgIHN0YXJ0REJDbHVzdGVyVGFzayxcbiAgICAgIClcbiAgICAgIC8vIHN0b3Agb24gc3RhdHVzLmF2YWlsYWJsZVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0b3AnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdhdmFpbGFibGUnKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RvcERCQ2x1c3RlclRhc2ssXG4gICAgICApXG4gICAgICAvLyBzdGF0dXMgY2hhbmdlIHN1Y2NlZWQsIGdlbmVyYXRlIHRvcGljXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0YXJ0JyksXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnZGInKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2NsdXN0ZXInKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnYXZhaWxhYmxlJyksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0b3AnKSxcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdkYicpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdzdG9wcGVkJyksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgcHJlcGFyZVRvcGljVmFsdWUsXG4gICAgICApXG4gICAgICAud2hlbihcbiAgICAgICAgLy8gc3RhcnQgJiBzdGFydGluZy9jb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nL2JhY2tpbmctdXAgb3Igc3RvcCBtb2RpZnlpbmcvc3RvcHBpbmdcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5wYXJhbXMuTW9kZScsICdTdGFydCcpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdkYicpLFxuICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdjbHVzdGVyJyksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ3N0YXJ0aW5nJyksXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ2NvbmZpZ3VyaW5nLWVuaGFuY2VkLW1vbml0b3JpbmcnKSxcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnYmFja2luZy11cCcpLFxuICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdtb2RpZnlpbmcnKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5wYXJhbXMuTW9kZScsICdTdG9wJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2RiJyksXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2NsdXN0ZXInKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnbW9kaWZ5aW5nJyksXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ3N0b3BwaW5nJyksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIHN0YXR1c0NoYW5nZVdhaXQsXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKG5ldyBzZm4uRmFpbCh0aGlzLCAnU3RhdHVzRmFpbCcsIHtcbiAgICAgICAgY2F1c2U6ICdkYiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cyBmYWlsLicsXG4gICAgICB9KSk7XG5cbiAgICBnZXRSZXNvdXJjZXMubmV4dChcbiAgICAgIG5ldyBzZm4uTWFwKHRoaXMsICdSZXNvdXJjZVByb2Nlc3NpbmdNYXAnLCB7XG4gICAgICAgIGl0ZW1zUGF0aDogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5UYXJnZXRSZXNvdXJjZXMnKSxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIFRhcmdldFJlc291cmNlOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQkLk1hcC5JdGVtLlZhbHVlJyksXG4gICAgICAgICAgcGFyYW1zOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUGFyYW1zJyksXG4gICAgICAgICAgZGVmaW5pdGlvbjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmRlZmluaXRpb24nKSxcbiAgICAgICAgfSxcbiAgICAgICAgbWF4Q29uY3VycmVuY3k6IDEwLFxuICAgICAgfSkuaXRlbVByb2Nlc3NvcihcbiAgICAgICAgbmV3IHNmbi5QYXNzKHRoaXMsICdHZXRJZGVudGlmaWVyJywge1xuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC50YXJnZXQnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5UYXJnZXRSZXNvdXJjZScpLCAnOicpLCA2KSxcbiAgICAgICAgICAgIHR5cGU6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5UYXJnZXRSZXNvdXJjZScpLCAnOicpLCA1KSwgLy8gZGIgb3IgY2x1c3RlclxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLm5leHQoZGVzY3JpYmVUeXBlQ2hvaWNlKSkpO1xuXG4gICAgZGVzY3JpYmVEQkluc3RhbmNlc1Rhc2submV4dChzdGF0dXNDaG9pY2UpO1xuICAgIGRlc2NyaWJlREJDbHVzdGVyc1Rhc2submV4dChzdGF0dXNDaG9pY2UpO1xuXG4gICAgLy8g8J+RhyBTdGVwRnVuY3Rpb25zIFN0YXRlIE1hY2hpbmVcbiAgICBjb25zdCBzdGF0ZU1hY2hpbmUgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZSh0aGlzLCAnU3RhdGVNYWNoaW5lJywge1xuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogYHJkcy1kYi1ydW5uaW5nLXNjaGVkdWxlLSR7cmFuZG9tfS1zdGF0ZS1tYWNoaW5lYCxcbiAgICAgIGRlZmluaXRpb25Cb2R5OiBzZm4uRGVmaW5pdGlvbkJvZHkuZnJvbUNoYWluYWJsZShpbml0U3RhdGVMaXN0RGVmaW5pdGlvbiksXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIHJlbmFtZSByb2xlIG5hbWUgJiBkZXNjcmlwdGlvbi5cbiAgICBjb25zdCByb2xlID0gc3RhdGVNYWNoaW5lLm5vZGUuZmluZENoaWxkKCdSb2xlJykgYXMgaWFtLlJvbGU7XG4gICAgY29uc3QgY2ZuUm9sZSA9IHJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgaWFtLkNmblJvbGU7XG4gICAgY2ZuUm9sZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdSb2xlTmFtZScsIGByZHMtZGItcnVubmluZy1zY2hlZHVsZS0ke3JhbmRvbX0tc3RhdGUtbWFjaGluZS1yb2xlYCk7XG4gICAgY2ZuUm9sZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdEZXNjcmlwdGlvbicsICdSRFMgREIgUnVubmluZyBjaGVkdWxlIG1hY2hpbmUgcm9sZS4nKTtcbiAgICBjb25zdCBwb2xpY3kgPSByb2xlLm5vZGUuZmluZENoaWxkKCdEZWZhdWx0UG9saWN5JykgYXMgaWFtLlBvbGljeTtcbiAgICBjb25zdCBjZm5Qb2xpY3kgPSBwb2xpY3kubm9kZS5kZWZhdWx0Q2hpbGQgYXMgaWFtLkNmblBvbGljeTtcbiAgICBjZm5Qb2xpY3kuYWRkUHJvcGVydHlPdmVycmlkZSgnUG9saWN5TmFtZScsICdkZWZhdWx0LXBvbGljeScpO1xuXG4gICAgLy8g8J+RhyBTdGF0ZU1hY2hpbmUgRXhlYyBSb2xlIG9mIFNjaGVkdWxlclxuICAgIGNvbnN0IHNjaGVkdWxlckV4ZWNSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTY2hlZHVsZXJFeGVjdXRpb25Sb2xlJywge1xuICAgICAgcm9sZU5hbWU6IGByZHMtZGItcnVubmluZy1zY2hlZHVsZXItJHtyYW5kb219LWV4ZWMtcm9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ1JEUyBEQiBSdW5uaW5nIHNjaGVkdWxlciBleGVjdXRpb24gcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc2NoZWR1bGVyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICdzdGF0ZS1tYWNoaW5lLWV4ZWMtcG9saWN5JzogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnc3RhdGVzOlN0YXJ0RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU2NoZWR1bGUgc3RhdGVcbiAgICBjb25zdCBzaGVkdWxlU3RhdGU6IHN0cmluZyA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuICdFTkFCTEVEJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnRElTQUJMRUQnO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIFN0b3AgU2NoZWR1bGUgZXhwcmVzc2lvblxuICAgIGNvbnN0IHN0b3BTY2hlZHVsZUV4cHJlc3Npb246IHN0cmluZyA9ICgoKSA9PiB7XG4gICAgICAvLyBkZWZhdWx0OiB3ZWVrZGF5IDIxOjEwXG4gICAgICBjb25zdCBtaW51dGU6IHN0cmluZyA9IHByb3BzLnN0b3BTY2hlZHVsZT8ubWludXRlID8/ICcxMCc7XG4gICAgICBjb25zdCBob3VyOiBzdHJpbmcgPSBwcm9wcy5zdG9wU2NoZWR1bGU/LmhvdXIgPz8gJzIxJztcbiAgICAgIGNvbnN0IHdlZWs6IHN0cmluZyA9IHByb3BzLnN0b3BTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSSc7XG4gICAgICByZXR1cm4gYGNyb24oJHttaW51dGV9ICR7aG91cn0gPyAqICR7d2Vla30gKilgO1xuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIFN0YXJ0IFNjaGVkdWxlIGV4cHJlc3Npb25cbiAgICBjb25zdCBzdGFydFNjaGVkdWxlRXhwcmVzc2lvbjogc3RyaW5nID0gKCgpID0+IHtcbiAgICAgIC8vIGRlZmF1bHQ6IHdlZWtkYXkgMDc6NTBcbiAgICAgIGNvbnN0IG1pbnV0ZTogc3RyaW5nID0gcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCc7XG4gICAgICBjb25zdCBob3VyOiBzdHJpbmcgPSBwcm9wcy5zdGFydFNjaGVkdWxlPy5ob3VyID8/ICc3JztcbiAgICAgIGNvbnN0IHdlZWs6IHN0cmluZyA9IHByb3BzLnN0YXJ0U2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknO1xuICAgICAgcmV0dXJuIGBjcm9uKCR7bWludXRlfSAke2hvdXJ9ID8gKiAke3dlZWt9ICopYDtcbiAgICB9KSgpO1xuXG4gICAgLy8g8J+RhyBTdG9wIERCIHNjaGVkdWxlXG4gICAgbmV3IERCUnVuaW5nU2NoZWR1bGUodGhpcywgJ1N0b3BEYXRhYmFzZVJ1bm5pbmdTY2hlZHVsZScsIHtcbiAgICAgIG5hbWU6IGByZHMtZGF0YWJhc2UtcnVubmluZy1zdG9wLSR7cmFuZG9tfS1zY2hlZHVsZWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ3N0b3AgZGF0YWJhc2UoaW5zdGFuY2UvY2x1c3RlcikgcnVubmluZyBzdG9wIHNjaGVkdWxlLicsXG4gICAgICBzaGVkdWxlU3RhdGUsXG4gICAgICB0aW1lem9uZTogcHJvcHMuc3RvcFNjaGVkdWxlPy50aW1lem9uZSA/PyAnVVRDJyxcbiAgICAgIGV4cHJlc3Npb246IHN0b3BTY2hlZHVsZUV4cHJlc3Npb24sXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgc3RhdGVNYWNoaW5lQXJuOiBzdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICByb2xlQXJuOiBzY2hlZHVsZXJFeGVjUm9sZS5yb2xlQXJuLFxuICAgICAgICByZXNvdXJjZVRhZzoge1xuICAgICAgICAgIGtleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgIHZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogeyBtb2RlOiAnU3RvcCcgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIFN0YXJ0IERCIHNjaGVkdWxlXG4gICAgbmV3IERCUnVuaW5nU2NoZWR1bGUodGhpcywgJ1N0YXJ0RGF0YWJhc2VSdW5uaW5nU2NoZWR1bGUnLCB7XG4gICAgICBuYW1lOiBgcmRzLWRhdGFiYXNlLXJ1bm5pbmctc3RhcnQtJHtyYW5kb219LXNjaGVkdWxlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnc3RhcnQgZGIgaW5zdGFuY2Ugc2NoZWR1bGUuJyxcbiAgICAgIHNoZWR1bGVTdGF0ZSxcbiAgICAgIHRpbWV6b25lOiBwcm9wcy5zdGFydFNjaGVkdWxlPy50aW1lem9uZSA/PyAnVVRDJyxcbiAgICAgIGV4cHJlc3Npb246IHN0YXJ0U2NoZWR1bGVFeHByZXNzaW9uLFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHN0YXRlTWFjaGluZUFybjogc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgcm9sZUFybjogc2NoZWR1bGVyRXhlY1JvbGUucm9sZUFybixcbiAgICAgICAgcmVzb3VyY2VUYWc6IHtcbiAgICAgICAgICBrZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICB2YWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6IHsgbW9kZTogJ1N0YXJ0JyB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICB9XG59XG5cbmludGVyZmFjZSBEQlJ1bmluZ1NjaGVkdWxlUHJvcHMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHNoZWR1bGVTdGF0ZTogc3RyaW5nO1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBleHByZXNzaW9uOiBzdHJpbmc7XG4gIHRhcmdldDoge1xuICAgIHN0YXRlTWFjaGluZUFybjogc3RyaW5nO1xuICAgIHJvbGVBcm46IHN0cmluZztcbiAgICByZXNvdXJjZVRhZzoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgaW5wdXQ6IHtcbiAgICAgIG1vZGU6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5jbGFzcyBEQlJ1bmluZ1NjaGVkdWxlIGV4dGVuZHMgc2NoZWR1bGVyLkNmblNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERCUnVuaW5nU2NoZWR1bGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwcm9wcy5zaGVkdWxlU3RhdGUsXG4gICAgICAvL2dyb3VwTmFtZTogc2NoZWR1bGVHcm91cC5uYW1lLCAvLyBkZWZhdWx0XG4gICAgICBmbGV4aWJsZVRpbWVXaW5kb3c6IHtcbiAgICAgICAgbW9kZTogJ09GRicsXG4gICAgICB9LFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uVGltZXpvbmU6IHByb3BzLnRpbWV6b25lLFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBwcm9wcy5leHByZXNzaW9uLFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIGFybjogcHJvcHMudGFyZ2V0LnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgcm9sZUFybjogcHJvcHMudGFyZ2V0LnJvbGVBcm4sXG4gICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgUGFyYW1zOiB7XG4gICAgICAgICAgICBUYWdLZXk6IHByb3BzLnRhcmdldC5yZXNvdXJjZVRhZy5rZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldC5yZXNvdXJjZVRhZy52YWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiBwcm9wcy50YXJnZXQuaW5wdXQubW9kZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgcmV0cnlQb2xpY3k6IHtcbiAgICAgICAgICBtYXhpbXVtRXZlbnRBZ2VJblNlY29uZHM6IDYwLFxuICAgICAgICAgIG1heGltdW1SZXRyeUF0dGVtcHRzOiAwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBc0o7QUFDdEosc0VBQXNKO0FBQWxHLHFIQUFBLGNBQWMsT0FBQTtBQUF5Qix5SEFBQSxrQkFBa0IsT0FBQTtBQUM3RyxtQ0FBbUM7QUFDbkMsNkNBQWdEO0FBQ2hELDJDQUEyQztBQUMzQyx1REFBdUQ7QUFDdkQsMkNBQTJDO0FBQzNDLHFEQUFxRDtBQUNyRCw2REFBNkQ7QUF5QzdELE1BQWEsK0JBQWdDLFNBQVEsbUJBQUs7SUFDeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQztRQUNuRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixpQkFBaUI7UUFDakIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTNDLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxvQ0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdHLDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRztZQUNqQixxQkFBcUIsRUFBRSx3Q0FBd0MsTUFBTSxRQUFRO1lBQzdFLDRCQUE0QixFQUFFLDRDQUE0QztZQUMxRSxnQkFBZ0IsRUFBRSwyQkFBMkIsTUFBTSxnQkFBZ0I7WUFDbkUsb0JBQW9CLEVBQUUsMkJBQTJCLE1BQU0scUJBQXFCO1lBQzVFLGlCQUFpQixFQUFFLDRCQUE0QixNQUFNLFlBQVk7WUFDakUsaUJBQWlCLEVBQUUsNkJBQTZCLE1BQU0sV0FBVztZQUNqRSxnQkFBZ0IsRUFBRSw4QkFBOEIs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RSxDQUFDO2lCQUN4QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VBdXRvTmFtaW5nLCBSZXNvdXJjZURlZmF1bHROYW1pbmcsIFJlc291cmNlTmFtaW5nLCBSZXNvdXJjZU5hbWluZ09wdGlvbnMsIFJlc291cmNlTmFtaW5nVHlwZSB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLXJlc291cmNlLW5hbWluZyc7XG5leHBvcnQgeyBSZXNvdXJjZUF1dG9OYW1pbmcsIFJlc291cmNlRGVmYXVsdE5hbWluZywgUmVzb3VyY2VOYW1pbmcsIFJlc291cmNlTmFtaW5nT3B0aW9ucywgUmVzb3VyY2VOYW1pbmdUeXBlIH0gZnJvbSAnQGdhbW1hcmVycy9hd3MtcmVzb3VyY2UtbmFtaW5nJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHNjaGVkdWxlciBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgKiBhcyB0YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21OYW1pbmcge1xuICByZWFkb25seSB0eXBlOiBSZXNvdXJjZU5hbWluZ1R5cGUuQ1VTVE9NO1xuICByZWFkb25seSBub3RpZmljYXRpb25Ub3BpY05hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNEaXNwbGF5TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzdGF0ZU1hY2hpbmVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZVJvbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjaGVkdWxlclJvbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXJ0U2NoZWR1bGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VOYW1pbmdPcHRpb24gPSBSZXNvdXJjZURlZmF1bHROYW1pbmcgfCBSZXNvdXJjZUF1dG9OYW1pbmcgfCBDdXN0b21OYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IHRpbWV6b25lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1pbnV0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaG91cj86IHN0cmluZztcbiAgcmVhZG9ubHkgd2Vlaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZVByb3BlcnR5IHtcbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uc1Byb3BlcnR5IHtcbiAgcmVhZG9ubHkgZW1haWxzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZVByb3BlcnR5O1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RvcFNjaGVkdWxlPzogU2NoZWR1bGVQcm9wZXJ0eTtcbiAgcmVhZG9ubHkgc3RhcnRTY2hlZHVsZT86IFNjaGVkdWxlUHJvcGVydHk7XG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM/OiBOb3RpZmljYXRpb25zUHJvcGVydHk7XG4gIHJlYWRvbmx5IHJlc291cmNlTmFtaW5nT3B0aW9uPzogUmVzb3VyY2VOYW1pbmdPcHRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZVJ1bm5pbmdTY2hlZHVsZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyDwn5GHIEdldCBhY2NvdW50XG4gICAgY29uc3QgYWNjb3VudCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50O1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgcmFuZG9tIDggbGVuZ3RoIHN0cmluZ1xuICAgIGNvbnN0IHJhbmRvbSA9IFJlc291cmNlTmFtaW5nLmNyZWF0ZVJhbmRvbVN0cmluZyhgJHtjZGsuTmFtZXMudW5pcXVlSWQoc2NvcGUpfS0ke2Nkay5OYW1lcy51bmlxdWVJZCh0aGlzKX1gKTtcbiAgICAvLyDwn5GHIERlZmluaXRpb24gYXV0byBuYW1pbmdcbiAgICBjb25zdCBhdXRvTmFtaW5nID0ge1xuICAgICAgbm90aWZpY2F0aW9uVG9waWNOYW1lOiBgcmRzLWRiLXJ1bm5pbmctc2NoZWR1bGUtbm90aWZpY2F0aW9uLSR7cmFuZG9tfS10b3BpY2AsXG4gICAgICBub3RpZmljYXRpb25Ub3BpY0Rpc3BsYXlOYW1lOiAnUkRTIERCIFJ1bm5pbmcgU2NoZWR1bGUgTm90aWZpY2F0aW9uIFRvcGljJyxcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IGByZHMtZGItcnVubmluZy1zY2hlZHVsZS0ke3JhbmRvbX0tc3RhdGUtbWFjaGluZWAsXG4gICAgICBzdGF0ZU1hY2hpbmVSb2xlTmFtZTogYHJkcy1kYi1ydW5uaW5nLXNjaGVkdWxlLSR7cmFuZG9tfS1zdGF0ZS1tYWNoaW5lLXJvbGVgLFxuICAgICAgc2NoZWR1bGVyUm9sZU5hbWU6IGByZHMtZGItcnVubmluZy1zY2hlZHVsZXItJHtyYW5kb219LWV4ZWMtcm9sZWAsXG4gICAgICBzdGFydFNjaGVkdWxlTmFtZTogYHJkcy1kYXRhYmFzZS1ydW5uaW5nLXN0b3AtJHtyYW5kb219LXNjaGVkdWxlYCxcbiAgICAgIHN0b3BTY2hlZHVsZU5hbWU6IGByZHMtZGF0YWJhc2UtcnVubmluZy1zdGFydC0ke3JhbmRvbX0tc2NoZWR1bGVgLFxuICAgIH07XG4gICAgLy8g8J+Rh+OAgGZpbmFsIG5hbWluZ1xuICAgIGNvbnN0IG5hbWVzID0gUmVzb3VyY2VOYW1pbmcubmFtaW5nKGF1dG9OYW1pbmcsIHByb3BzLnJlc291cmNlTmFtaW5nT3B0aW9uIGFzIFJlc291cmNlTmFtaW5nT3B0aW9ucyk7XG5cblxuICAgIC8vIPCfkYcgU05TIFRvcGljIGZvciBub3RpZmljYXRpb25zXG4gICAgY29uc3QgdG9waWM6IHNucy5Ub3BpYyA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvblRvcGljJywge1xuICAgICAgdG9waWNOYW1lOiBuYW1lcy5ub3RpZmljYXRpb25Ub3BpY05hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogbmFtZXMubm90aWZpY2F0aW9uVG9waWNEaXNwbGF5TmFtZSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU3Vic2NyaWJlIGFuIGVtYWlsIGVuZHBvaW50IHRvIHRoZSB0b3BpY1xuICAgIGNvbnN0IGVtYWlscyA9IHByb3BzLm5vdGlmaWNhdGlvbnM/LmVtYWlscyA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmFsdWVdIG9mIGVtYWlscy5lbnRyaWVzKCkpIHtcbiAgICAgIG5ldyBzbnMuU3Vic2NyaXB0aW9uKHRoaXMsIGBTdWJzY3JpcHRpb25FbWFpbCR7aW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpfWAsIHtcbiAgICAgICAgdG9waWMsXG4gICAgICAgIHByb3RvY29sOiBzbnMuU3Vic2NyaXB0aW9uUHJvdG9jb2wuRU1BSUwsXG4gICAgICAgIGVuZHBvaW50OiB2YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRTdGF0ZUxpc3REZWZpbml0aW9uOiBzZm4uUGFzcyA9IG5ldyBzZm4uUGFzcyh0aGlzLCAnSW5pdFN0YXRlTGlzdERlZmluaXRpb24nLCB7XG4gICAgICByZXN1bHQ6IHNmbi5SZXN1bHQuZnJvbU9iamVjdChbXG4gICAgICAgIHsgbmFtZTogJ0FWQUlMQUJMRScsIGVtb2ppOiAn8J+kqScsIHN0YXRlOiAnYXZhaWxhYmxlJyB9LFxuICAgICAgICB7IG5hbWU6ICdTVE9QUEVEJywgZW1vamk6ICfwn5i0Jywgc3RhdGU6ICdzdG9wcGVkJyB9LFxuICAgICAgXSksXG4gICAgICByZXN1bHRQYXRoOiAnJC5kZWZpbml0aW9uLnN0YXRlTGlzdCcsXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIFN1Y2NlZWRcbiAgICBjb25zdCBzdGF0ZUNoYW5nZVN1Y2NlZWQgPSBuZXcgc2ZuLlN1Y2NlZWQodGhpcywgJ1N0YXRlQ2hhbmdlU3VjY2VlZCcpO1xuXG4gICAgY29uc3QgcHJlcGFyZVRvcGljVmFsdWUgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ1ByZXBhcmVUb3BpY1ZhbHVlJywge1xuICAgICAgcmVzdWx0UGF0aDogJyQucHJlcGFyZS50b3BpYy52YWx1ZXMnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBlbW9qaTogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZGVmaW5pdGlvbi5zdGF0ZUxpc3RbPyhALnN0YXRlID09ICQuUmVzdWx0LnN0YXR1cy5jdXJyZW50KV0uZW1vamknKSwgMCksXG4gICAgICAgIHN0YXR1czogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZGVmaW5pdGlvbi5zdGF0ZUxpc3RbPyhALnN0YXRlID09ICQuUmVzdWx0LnN0YXR1cy5jdXJyZW50KV0ubmFtZScpLCAwKSxcbiAgICAgICAgYWNjb3VudDogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nU3BsaXQoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlRhcmdldFJlc291cmNlJyksICc6JyksIDQpLCAvLyBhY2NvdW50XG4gICAgICAgIHJlZ2lvbjogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nU3BsaXQoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlRhcmdldFJlc291cmNlJyksICc6JyksIDMpLCAvLyByZWdpb25cbiAgICAgIH0sXG4gICAgfSkubmV4dChuZXcgc2ZuLlBhc3ModGhpcywgJ0dlbmVyYXRlVG9waWMnLCB7XG4gICAgICByZXN1bHRQYXRoOiAnJC5HZW5lcmF0ZS5Ub3BpYycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIFN1YmplY3Q6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ3t9IFt7fV0gQVdTIFJEUyBEQiB7fSBSdW5uaW5nIE5vdGlmaWNhdGlvbiBbe31dW3t9XScsXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLmVtb2ppJyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnN0YXR1cycpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wYXJhbXMuTW9kZScpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5hY2NvdW50JyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnJlZ2lvbicpLFxuICAgICAgICApLFxuICAgICAgICBUZXh0TWVzc2FnZTogc2ZuLkpzb25QYXRoLmZvcm1hdCgnQWNjb3VudCA6IHt9XFxuUmVnaW9uIDoge31cXG5UeXBlIDoge31cXG5JZGVudGlmaWVyIDoge31cXG5TdGF0dXMgOiB7fScsXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLmFjY291bnQnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucHJlcGFyZS50b3BpYy52YWx1ZXMucmVnaW9uJyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC50YXJnZXQudHlwZScpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LmlkZW50aWZpZXInKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucHJlcGFyZS50b3BpYy52YWx1ZXMuc3RhdHVzJyksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLm5leHQobmV3IHRhc2tzLlNuc1B1Ymxpc2godGhpcywgJ1NlbmROb3RpZmljYXRpb24nLCB7XG4gICAgICB0b3BpYzogdG9waWMsXG4gICAgICBzdWJqZWN0OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuR2VuZXJhdGUuVG9waWMuU3ViamVjdCcpLFxuICAgICAgbWVzc2FnZTogc2ZuLlRhc2tJbnB1dC5mcm9tSnNvblBhdGhBdCgnJC5HZW5lcmF0ZS5Ub3BpYy5UZXh0TWVzc2FnZScpLFxuICAgICAgcmVzdWx0UGF0aDogJyQuc25zUmVzdWx0JyxcbiAgICB9KS5uZXh0KHN0YXRlQ2hhbmdlU3VjY2VlZCkpKTtcblxuICAgIC8vIPCfkYcgR2V0IERCIEluc3RhbmNlIFJlc291cmNlcyAoRmlsdGVyIGJ5IFRhZylcbiAgICBjb25zdCBnZXRSZXNvdXJjZXMgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0dldFJlc291cmNlcycsIHtcbiAgICAgIGlhbVJlc291cmNlczogWycqJ10sXG4gICAgICBpYW1BY3Rpb246ICd0YWc6R2V0UmVzb3VyY2VzJyxcbiAgICAgIHNlcnZpY2U6ICdyZXNvdXJjZWdyb3Vwc3RhZ2dpbmdhcGknLFxuICAgICAgYWN0aW9uOiAnZ2V0UmVzb3VyY2VzJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgUmVzb3VyY2VUeXBlRmlsdGVyczogW1xuICAgICAgICAgICdyZHM6ZGInLFxuICAgICAgICAgICdyZHM6Y2x1c3RlcicsXG4gICAgICAgIF0sXG4gICAgICAgIFRhZ0ZpbHRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBLZXk6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5QYXJhbXMuVGFnS2V5JyksXG4gICAgICAgICAgICBWYWx1ZXM6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5QYXJhbXMuVGFnVmFsdWVzJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQnLFxuICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgVGFyZ2V0UmVzb3VyY2VzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuLlJlc291cmNlVGFnTWFwcGluZ0xpc3RbKl0uUmVzb3VyY2VBUk4nKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpbml0U3RhdGVMaXN0RGVmaW5pdGlvbi5uZXh0KGdldFJlc291cmNlcyk7XG5cbiAgICAvLyDwn5GHIERlc2NyaWJlIERCIEluc3RhbmNlIFRhc2tcbiAgICBjb25zdCBkZXNjcmliZURCSW5zdGFuY2VzVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnRGVzY3JpYmVEQkluc3RhbmNlcycsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06ZGI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdkZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRGJJbnN0YW5jZUlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LmlkZW50aWZpZXInKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuc3RhdHVzJyxcbiAgICAgIHJlc3VsdFNlbGVjdG9yOiB7XG4gICAgICAgIGN1cnJlbnQ6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkluc3RhbmNlc1swXS5EYkluc3RhbmNlU3RhdHVzJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdG9wIERCIEluc3RhbmNlIFRhc2tcbiAgICBjb25zdCBzdG9wREJJbnN0YW5jZVRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1N0b3BEQkluc3RhbmNlJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpkYjoqYF0sXG4gICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgIGFjdGlvbjogJ3N0b3BEQkluc3RhbmNlJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRGJJbnN0YW5jZUlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LmlkZW50aWZpZXInKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuU3RvcERCSW5zdGFuY2UnLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdGFydCBEQiBJbnN0YW5jZSBUYXNrXG4gICAgY29uc3Qgc3RhcnREQkluc3RhbmNlVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnU3RhcnREQkluc3RhbmNlJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpkYjoqYF0sXG4gICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgIGFjdGlvbjogJ3N0YXJ0REJJbnN0YW5jZScsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiSW5zdGFuY2VJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LlN0YXJ0REJJbnN0YW5jZScsXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIERlc2NyaWJlIERCIENsdXN0ZXIgVGFza1xuICAgIGNvbnN0IGRlc2NyaWJlREJDbHVzdGVyc1Rhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0Rlc2NyaWJlREJDbHVzdGVycycsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06Y2x1c3RlcjoqYF0sXG4gICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgIGFjdGlvbjogJ2Rlc2NyaWJlREJDbHVzdGVycycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiQ2x1c3RlcklkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LmlkZW50aWZpZXInKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuc3RhdHVzJyxcbiAgICAgIHJlc3VsdFNlbGVjdG9yOiB7XG4gICAgICAgIGN1cnJlbnQ6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkNsdXN0ZXJzWzBdLlN0YXR1cycpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZURiQ2x1c3Rlck5vdEZvdW5kID0gbmV3IHNmbi5QYXNzKHRoaXMsICdIYW5kbGVEYkNsdXN0ZXJOb3RGb3VuZCcsIHtcbiAgICAgIHJlc3VsdDogc2ZuLlJlc3VsdC5mcm9tT2JqZWN0KHtcbiAgICAgICAgbWVzc2FnZTogJ0RCIENsdXN0ZXIgbm90IGZvdW5kLCBidXQgY29udGludWluZy4uLicsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlREJDbHVzdGVyc1Rhc2suYWRkQ2F0Y2goaGFuZGxlRGJDbHVzdGVyTm90Rm91bmQsIHtcbiAgICAgIGVycm9yczogWydSZHMuRGJDbHVzdGVyTm90Rm91bmRFeGNlcHRpb24nXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU3RvcCBEQiBDbHVzdGVyIFRhc2tcbiAgICBjb25zdCBzdG9wREJDbHVzdGVyVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnU3RvcERCQ2x1c3RlcicsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06Y2x1c3RlcjoqYF0sXG4gICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgIGFjdGlvbjogJ3N0b3BEQkNsdXN0ZXInLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBEYkNsdXN0ZXJJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LnRhcmdldC5pZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LlN0b3BEQkNsdXN0ZXInLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdG9wIERCIENsdXN0ZXIgVGFza1xuICAgIGNvbnN0IHN0YXJ0REJDbHVzdGVyVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnU3RhcnREQkNsdXN0ZXInLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFtgYXJuOmF3czpyZHM6Kjoke2FjY291bnR9OmNsdXN0ZXI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdzdGFydERCQ2x1c3RlcicsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiQ2x1c3RlcklkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQudGFyZ2V0LmlkZW50aWZpZXInKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuU3RhcnREQkNsdXN0ZXInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzY3JpYmVUeXBlQ2hvaWNlID0gbmV3IHNmbi5DaG9pY2UodGhpcywgJ0Rlc2NyaWJlVHlwZUNob2ljZScpXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2RiJyksXG4gICAgICAgIGRlc2NyaWJlREJJbnN0YW5jZXNUYXNrLFxuICAgICAgKVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdjbHVzdGVyJyksXG4gICAgICAgIGRlc2NyaWJlREJDbHVzdGVyc1Rhc2ssXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKG5ldyBzZm4uRmFpbCh0aGlzLCAnVW5rbm93blR5cGUnKSk7XG5cbiAgICBjb25zdCBzdGF0dXNDaGFuZ2VXYWl0ID0gbmV3IHNmbi5XYWl0KHRoaXMsICdTdGF0dXNDaGFuZ2VXYWl0Jywge1xuICAgICAgdGltZTogc2ZuLldhaXRUaW1lLmR1cmF0aW9uKGNkay5EdXJhdGlvbi5taW51dGVzKDEpKSxcbiAgICB9KTtcbiAgICBzdGF0dXNDaGFuZ2VXYWl0Lm5leHQoZGVzY3JpYmVUeXBlQ2hvaWNlKTtcblxuICAgIHN0YXJ0REJJbnN0YW5jZVRhc2submV4dChzdGF0dXNDaGFuZ2VXYWl0KTtcbiAgICBzdG9wREJJbnN0YW5jZVRhc2submV4dChzdGF0dXNDaGFuZ2VXYWl0KTtcblxuICAgIHN0YXJ0REJDbHVzdGVyVGFzay5uZXh0KHN0YXR1c0NoYW5nZVdhaXQpO1xuICAgIHN0b3BEQkNsdXN0ZXJUYXNrLm5leHQoc3RhdHVzQ2hhbmdlV2FpdCk7XG5cbiAgICBjb25zdCBzdGF0dXNDaG9pY2UgPSBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnU3RhdHVzQ2hvaWNlJylcbiAgICAgIC8vIGRiIGluc3RhbmNlIHN0YXJ0IG9uIHN0YXR1cy5zdG9wcGVkXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RhcnQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnZGInKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnc3RvcHBlZCcpLFxuICAgICAgICApLFxuICAgICAgICBzdGFydERCSW5zdGFuY2VUYXNrLFxuICAgICAgKVxuICAgICAgLy8gZGIgaW5zdGFuY2Ugc3RvcCBvbiBzdGF0dXMuYXZhaWxhYmxlXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RvcCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdkYicpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdhdmFpbGFibGUnKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RvcERCSW5zdGFuY2VUYXNrLFxuICAgICAgKVxuICAgICAgLy8gc3RhcnQgb24gc3RhdHVzLnN0b3BwZWRcbiAgICAgIC53aGVuKFxuICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5wYXJhbXMuTW9kZScsICdTdGFydCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdjbHVzdGVyJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ3N0b3BwZWQnKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnREQkNsdXN0ZXJUYXNrLFxuICAgICAgKVxuICAgICAgLy8gc3RvcCBvbiBzdGF0dXMuYXZhaWxhYmxlXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RvcCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdjbHVzdGVyJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ2F2YWlsYWJsZScpLFxuICAgICAgICApLFxuICAgICAgICBzdG9wREJDbHVzdGVyVGFzayxcbiAgICAgIClcbiAgICAgIC8vIHN0YXR1cyBjaGFuZ2Ugc3VjY2VlZCwgZ2VuZXJhdGUgdG9waWNcbiAgICAgIC53aGVuKFxuICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RhcnQnKSxcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdkYicpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdhdmFpbGFibGUnKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucGFyYW1zLk1vZGUnLCAnU3RvcCcpLFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2RiJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC50YXJnZXQudHlwZScsICdjbHVzdGVyJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ3N0b3BwZWQnKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBwcmVwYXJlVG9waWNWYWx1ZSxcbiAgICAgIClcbiAgICAgIC53aGVuKFxuICAgICAgICAvLyBzdGFydCAmIHN0YXJ0aW5nL2NvbmZpZ3VyaW5nLWVuaGFuY2VkLW1vbml0b3JpbmcvYmFja2luZy11cCBvciBzdG9wIG1vZGlmeWluZy9zdG9wcGluZ1xuICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0YXJ0JyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2RiJyksXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnRhcmdldC50eXBlJywgJ2NsdXN0ZXInKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnc3RhcnRpbmcnKSxcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycpLFxuICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdiYWNraW5nLXVwJyksXG4gICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuUmVzdWx0LnN0YXR1cy5jdXJyZW50JywgJ21vZGlmeWluZycpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnBhcmFtcy5Nb2RlJywgJ1N0b3AnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnZGInKSxcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQudGFyZ2V0LnR5cGUnLCAnY2x1c3RlcicpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLlJlc3VsdC5zdGF0dXMuY3VycmVudCcsICdtb2RpZnlpbmcnKSxcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5SZXN1bHQuc3RhdHVzLmN1cnJlbnQnLCAnc3RvcHBpbmcnKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RhdHVzQ2hhbmdlV2FpdCxcbiAgICAgIClcbiAgICAgIC5vdGhlcndpc2UobmV3IHNmbi5GYWlsKHRoaXMsICdTdGF0dXNGYWlsJywge1xuICAgICAgICBjYXVzZTogJ2RiIGluc3RhbmNlIG9yIGNsdXN0ZXIgc3RhdHVzIGZhaWwuJyxcbiAgICAgIH0pKTtcblxuICAgIGdldFJlc291cmNlcy5uZXh0KFxuICAgICAgbmV3IHNmbi5NYXAodGhpcywgJ1Jlc291cmNlUHJvY2Vzc2luZ01hcCcsIHtcbiAgICAgICAgaXRlbXNQYXRoOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlRhcmdldFJlc291cmNlcycpLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgVGFyZ2V0UmVzb3VyY2U6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJCQuTWFwLkl0ZW0uVmFsdWUnKSxcbiAgICAgICAgICBwYXJhbXM6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5QYXJhbXMnKSxcbiAgICAgICAgICBkZWZpbml0aW9uOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZGVmaW5pdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBtYXhDb25jdXJyZW5jeTogMTAsXG4gICAgICB9KS5pdGVtUHJvY2Vzc29yKFxuICAgICAgICBuZXcgc2ZuLlBhc3ModGhpcywgJ0dldElkZW50aWZpZXInLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LnRhcmdldCcsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nU3BsaXQoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlRhcmdldFJlc291cmNlJyksICc6JyksIDYpLFxuICAgICAgICAgICAgdHlwZTogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nU3BsaXQoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlRhcmdldFJlc291cmNlJyksICc6JyksIDUpLCAvLyBkYiBvciBjbHVzdGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkubmV4dChkZXNjcmliZVR5cGVDaG9pY2UpKSk7XG5cbiAgICBkZXNjcmliZURCSW5zdGFuY2VzVGFzay5uZXh0KHN0YXR1c0Nob2ljZSk7XG4gICAgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzay5uZXh0KHN0YXR1c0Nob2ljZSk7XG5cbiAgICAvLyDwn5GHIFN0ZXBGdW5jdGlvbnMgU3RhdGUgTWFjaGluZVxuICAgIGNvbnN0IHN0YXRlTWFjaGluZSA9IG5ldyBzZm4uU3RhdGVNYWNoaW5lKHRoaXMsICdTdGF0ZU1hY2hpbmUnLCB7XG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBuYW1lcy5zdGF0ZU1hY2hpbmVOYW1lLFxuICAgICAgZGVmaW5pdGlvbkJvZHk6IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKGluaXRTdGF0ZUxpc3REZWZpbml0aW9uKSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgcmVuYW1lIHJvbGUgbmFtZSAmIGRlc2NyaXB0aW9uLlxuICAgIGlmIChuYW1lcy5zdGF0ZU1hY2hpbmVSb2xlTmFtZSkge1xuICAgICAgY29uc3Qgcm9sZSA9IHN0YXRlTWFjaGluZS5ub2RlLmZpbmRDaGlsZCgnUm9sZScpIGFzIGlhbS5Sb2xlO1xuICAgICAgY29uc3QgY2ZuUm9sZSA9IHJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgaWFtLkNmblJvbGU7XG4gICAgICBjZm5Sb2xlLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1JvbGVOYW1lJywgbmFtZXMuc3RhdGVNYWNoaW5lUm9sZU5hbWUpO1xuICAgICAgY2ZuUm9sZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdEZXNjcmlwdGlvbicsICdSRFMgREIgUnVubmluZyBtYWNoaW5lIHJvbGUuJyk7XG4gICAgICBjb25zdCBwb2xpY3kgPSByb2xlLm5vZGUuZmluZENoaWxkKCdEZWZhdWx0UG9saWN5JykgYXMgaWFtLlBvbGljeTtcbiAgICAgIGNvbnN0IGNmblBvbGljeSA9IHBvbGljeS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBpYW0uQ2ZuUG9saWN5O1xuICAgICAgY2ZuUG9saWN5LmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1BvbGljeU5hbWUnLCBgcmRzLWRiLXJ1bm5pbmctc2NoZWR1bGUtJHtyYW5kb219LXN0YXRlLW1hY2hpbmUtcG9saWN5YCk7XG4gICAgfVxuXG4gICAgLy8g8J+RhyBTdGF0ZU1hY2hpbmUgRXhlYyBSb2xlIG9mIFNjaGVkdWxlclxuICAgIGNvbnN0IHNjaGVkdWxlckV4ZWNSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTY2hlZHVsZXJFeGVjdXRpb25Sb2xlJywge1xuICAgICAgcm9sZU5hbWU6IG5hbWVzLnNjaGVkdWxlclJvbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdSRFMgREIgUnVubmluZyBzY2hlZHVsZXIgcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc2NoZWR1bGVyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICdzdGF0ZS1tYWNoaW5lLWV4ZWMtcG9saWN5JzogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnc3RhdGVzOlN0YXJ0RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgU2NoZWR1bGUgc3RhdGVcbiAgICBjb25zdCBzaGVkdWxlU3RhdGU6IHN0cmluZyA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuICdFTkFCTEVEJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnRElTQUJMRUQnO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIFN0b3AgU2NoZWR1bGUgZXhwcmVzc2lvblxuICAgIGNvbnN0IHN0b3BTY2hlZHVsZUV4cHJlc3Npb246IHN0cmluZyA9ICgoKSA9PiB7XG4gICAgICAvLyBkZWZhdWx0OiB3ZWVrZGF5IDIxOjEwXG4gICAgICBjb25zdCBtaW51dGU6IHN0cmluZyA9IHByb3BzLnN0b3BTY2hlZHVsZT8ubWludXRlID8/ICcxMCc7XG4gICAgICBjb25zdCBob3VyOiBzdHJpbmcgPSBwcm9wcy5zdG9wU2NoZWR1bGU/LmhvdXIgPz8gJzIxJztcbiAgICAgIGNvbnN0IHdlZWs6IHN0cmluZyA9IHByb3BzLnN0b3BTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSSc7XG4gICAgICByZXR1cm4gYGNyb24oJHttaW51dGV9ICR7aG91cn0gPyAqICR7d2Vla30gKilgO1xuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIFN0YXJ0IFNjaGVkdWxlIGV4cHJlc3Npb25cbiAgICBjb25zdCBzdGFydFNjaGVkdWxlRXhwcmVzc2lvbjogc3RyaW5nID0gKCgpID0+IHtcbiAgICAgIC8vIGRlZmF1bHQ6IHdlZWtkYXkgMDc6NTBcbiAgICAgIGNvbnN0IG1pbnV0ZTogc3RyaW5nID0gcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCc7XG4gICAgICBjb25zdCBob3VyOiBzdHJpbmcgPSBwcm9wcy5zdGFydFNjaGVkdWxlPy5ob3VyID8/ICc3JztcbiAgICAgIGNvbnN0IHdlZWs6IHN0cmluZyA9IHByb3BzLnN0YXJ0U2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknO1xuICAgICAgcmV0dXJuIGBjcm9uKCR7bWludXRlfSAke2hvdXJ9ID8gKiAke3dlZWt9ICopYDtcbiAgICB9KSgpO1xuXG4gICAgLy8g8J+RhyBTdG9wIERCIHNjaGVkdWxlXG4gICAgbmV3IERCUnVuaW5nU2NoZWR1bGUodGhpcywgJ1N0b3BEYXRhYmFzZVJ1bm5pbmdTY2hlZHVsZScsIHtcbiAgICAgIG5hbWU6IG5hbWVzLnN0YXJ0U2NoZWR1bGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdzdG9wIGRhdGFiYXNlKGluc3RhbmNlL2NsdXN0ZXIpIHJ1bm5pbmcgc3RvcCBzY2hlZHVsZS4nLFxuICAgICAgc2hlZHVsZVN0YXRlLFxuICAgICAgdGltZXpvbmU6IHByb3BzLnN0b3BTY2hlZHVsZT8udGltZXpvbmUgPz8gJ1VUQycsXG4gICAgICBleHByZXNzaW9uOiBzdG9wU2NoZWR1bGVFeHByZXNzaW9uLFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHN0YXRlTWFjaGluZUFybjogc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgcm9sZUFybjogc2NoZWR1bGVyRXhlY1JvbGUucm9sZUFybixcbiAgICAgICAgcmVzb3VyY2VUYWc6IHtcbiAgICAgICAgICBrZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICB2YWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6IHsgbW9kZTogJ1N0b3AnIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdGFydCBEQiBzY2hlZHVsZVxuICAgIG5ldyBEQlJ1bmluZ1NjaGVkdWxlKHRoaXMsICdTdGFydERhdGFiYXNlUnVubmluZ1NjaGVkdWxlJywge1xuICAgICAgbmFtZTogbmFtZXMuc3RvcFNjaGVkdWxlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnc3RhcnQgZGIgaW5zdGFuY2Ugc2NoZWR1bGUuJyxcbiAgICAgIHNoZWR1bGVTdGF0ZSxcbiAgICAgIHRpbWV6b25lOiBwcm9wcy5zdGFydFNjaGVkdWxlPy50aW1lem9uZSA/PyAnVVRDJyxcbiAgICAgIGV4cHJlc3Npb246IHN0YXJ0U2NoZWR1bGVFeHByZXNzaW9uLFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHN0YXRlTWFjaGluZUFybjogc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgcm9sZUFybjogc2NoZWR1bGVyRXhlY1JvbGUucm9sZUFybixcbiAgICAgICAgcmVzb3VyY2VUYWc6IHtcbiAgICAgICAgICBrZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICB2YWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6IHsgbW9kZTogJ1N0YXJ0JyB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICB9XG59XG5cbmludGVyZmFjZSBEQlJ1bmluZ1NjaGVkdWxlUHJvcHMge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzaGVkdWxlU3RhdGU6IHN0cmluZztcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xuICB0YXJnZXQ6IHtcbiAgICBzdGF0ZU1hY2hpbmVBcm46IHN0cmluZztcbiAgICByb2xlQXJuOiBzdHJpbmc7XG4gICAgcmVzb3VyY2VUYWc6IHtcbiAgICAgIGtleTogc3RyaW5nO1xuICAgICAgdmFsdWVzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGlucHV0OiB7XG4gICAgICBtb2RlOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn1cblxuY2xhc3MgREJSdW5pbmdTY2hlZHVsZSBleHRlbmRzIHNjaGVkdWxlci5DZm5TY2hlZHVsZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEQlJ1bmluZ1NjaGVkdWxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBzdGF0ZTogcHJvcHMuc2hlZHVsZVN0YXRlLFxuICAgICAgLy9ncm91cE5hbWU6IHNjaGVkdWxlR3JvdXAubmFtZSwgLy8gZGVmYXVsdFxuICAgICAgZmxleGlibGVUaW1lV2luZG93OiB7XG4gICAgICAgIG1vZGU6ICdPRkYnLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxlRXhwcmVzc2lvblRpbWV6b25lOiBwcm9wcy50aW1lem9uZSxcbiAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogcHJvcHMuZXhwcmVzc2lvbixcbiAgICAgIHRhcmdldDoge1xuICAgICAgICBhcm46IHByb3BzLnRhcmdldC5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIHJvbGVBcm46IHByb3BzLnRhcmdldC5yb2xlQXJuLFxuICAgICAgICBpbnB1dDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXQucmVzb3VyY2VUYWcua2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXQucmVzb3VyY2VUYWcudmFsdWVzLFxuICAgICAgICAgICAgTW9kZTogcHJvcHMudGFyZ2V0LmlucHV0Lm1vZGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJldHJ5UG9saWN5OiB7XG4gICAgICAgICAgbWF4aW11bUV2ZW50QWdlSW5TZWNvbmRzOiA2MCxcbiAgICAgICAgICBtYXhpbXVtUmV0cnlBdHRlbXB0czogMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -64,6 +64,9 @@
64
64
  "aws-cdk-lib": "^2.120.0",
65
65
  "constructs": "^10.0.5"
66
66
  },
67
+ "dependencies": {
68
+ "@gammarers/aws-resource-naming": "^0.8.2"
69
+ },
67
70
  "keywords": [
68
71
  "aws",
69
72
  "aws-cdk",
@@ -81,7 +84,7 @@
81
84
  "publishConfig": {
82
85
  "access": "public"
83
86
  },
84
- "version": "2.2.12",
87
+ "version": "2.3.0",
85
88
  "jest": {
86
89
  "coverageProvider": "v8",
87
90
  "testMatch": [