@microsoft/terraform-cdk-constructs 1.3.1 → 1.4.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.
Files changed (72) hide show
  1. package/.jsii +10617 -7822
  2. package/API.md +25592 -20586
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  7. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  9. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  10. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  11. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  12. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  13. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  14. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  15. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  16. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  17. package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
  18. package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
  19. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  20. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  21. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  22. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  23. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  24. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  25. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  26. package/lib/azure-subnet/lib/subnet.js +1 -1
  27. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  28. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  29. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  30. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +5 -0
  31. package/lib/azure-virtualnetworkmanager/lib/index.js +6 -1
  32. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.d.ts +24 -0
  33. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-schemas.js +169 -0
  34. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.d.ts +32 -0
  35. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr-schemas.js +206 -0
  36. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +170 -0
  37. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +214 -0
  38. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +175 -0
  39. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +206 -0
  40. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  41. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  42. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  43. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  44. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  45. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.d.ts +225 -0
  46. package/lib/azure-virtualnetworkmanager/lib/utils/cidr-validator.js +389 -0
  47. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +56 -0
  48. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +29 -2
  49. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.d.ts +6 -0
  50. package/lib/azure-virtualnetworkmanager/test/cidr-validator.spec.js +292 -0
  51. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.d.ts +6 -0
  52. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +430 -0
  53. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.d.ts +6 -0
  54. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +372 -0
  55. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +2 -1
  56. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +30 -3
  57. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +105 -1
  58. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  59. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  60. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  61. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  62. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  63. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  64. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  65. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  66. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  67. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  68. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  69. package/lib/testing/index.js +2 -2
  70. package/lib/testing/lib/cleanup.js +1 -1
  71. package/lib/testing/lib/metadata.js +1 -1
  72. package/package.json +1 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Azure Virtual Network Manager IPAM Pool implementation using AzapiResource framework
3
+ *
4
+ * This class provides a unified implementation for Azure Virtual Network Manager IPAM Pools
5
+ * that automatically handles version management, schema validation, and property transformation
6
+ * across all supported API versions.
7
+ *
8
+ * Supported API Versions:
9
+ * - 2024-05-01 (Active, Latest)
10
+ *
11
+ * Features:
12
+ * - Automatic latest version resolution when no version is specified
13
+ * - Explicit version pinning for stability requirements
14
+ * - Schema-driven validation and transformation
15
+ * - CIDR validation and overlap detection
16
+ * - Hierarchical pool support
17
+ * - JSII compliance for multi-language support
18
+ */
19
+ import * as cdktf from "cdktf";
20
+ import { Construct } from "constructs";
21
+ import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
22
+ import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
23
+ /**
24
+ * Properties for the Azure Virtual Network Manager IPAM Pool
25
+ *
26
+ * Extends AzapiResourceProps with IPAM Pool specific properties
27
+ */
28
+ export interface IpamPoolProps extends AzapiResourceProps {
29
+ /**
30
+ * Resource ID of the parent Network Manager
31
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.Network/networkManagers/vnm"
32
+ */
33
+ readonly networkManagerId: string;
34
+ /**
35
+ * IP address prefixes for the pool
36
+ * Must be valid CIDR notation (e.g., "10.0.0.0/8")
37
+ * Multiple prefixes must not overlap
38
+ * @example ["10.0.0.0/8", "172.16.0.0/12"]
39
+ */
40
+ readonly addressPrefixes: string[];
41
+ /**
42
+ * Optional description of the IPAM pool
43
+ * @example "Production IP address pool for East US region"
44
+ */
45
+ readonly description?: string;
46
+ /**
47
+ * Optional friendly display name
48
+ * @example "East US Production Pool"
49
+ */
50
+ readonly displayName?: string;
51
+ /**
52
+ * Name of parent pool for hierarchical pools
53
+ * Leave empty/undefined for root pools
54
+ * @example "root-pool"
55
+ */
56
+ readonly parentPoolName?: string;
57
+ /**
58
+ * The lifecycle rules to ignore changes
59
+ * @example ["tags"]
60
+ */
61
+ readonly ignoreChanges?: string[];
62
+ }
63
+ /**
64
+ * Properties for IPAM Pool body
65
+ */
66
+ export interface IpamPoolProperties {
67
+ readonly addressPrefixes: string[];
68
+ readonly description?: string;
69
+ readonly displayName?: string;
70
+ readonly parentPoolName?: string;
71
+ }
72
+ /**
73
+ * The resource body interface for Azure IPAM Pool API calls
74
+ */
75
+ export interface IpamPoolBody {
76
+ readonly location: string;
77
+ readonly tags?: Record<string, string>;
78
+ readonly properties: IpamPoolProperties;
79
+ }
80
+ /**
81
+ * Azure Virtual Network Manager IPAM Pool implementation
82
+ *
83
+ * IPAM Pools provide centralized IP address management for virtual networks,
84
+ * enabling automatic CIDR allocation, overlap prevention, and hierarchical
85
+ * address space organization. They are essential for managing IP addresses
86
+ * at scale across multiple virtual networks and subscriptions.
87
+ *
88
+ * @example
89
+ * // Basic IPAM pool for production workloads:
90
+ * const ipamPool = new IpamPool(this, "prod-pool", {
91
+ * name: "production-pool",
92
+ * location: "eastus",
93
+ * networkManagerId: networkManager.id,
94
+ * addressPrefixes: ["10.0.0.0/8"],
95
+ * description: "Root IP address pool for production",
96
+ * displayName: "Production Pool"
97
+ * });
98
+ *
99
+ * @example
100
+ * // Hierarchical pool with parent reference:
101
+ * const childPool = new IpamPool(this, "eastus-pool", {
102
+ * name: "eastus-pool",
103
+ * location: "eastus",
104
+ * networkManagerId: networkManager.id,
105
+ * addressPrefixes: ["10.1.0.0/16"],
106
+ * parentPoolName: "production-pool",
107
+ * description: "East US regional pool"
108
+ * });
109
+ *
110
+ * @stability stable
111
+ */
112
+ export declare class IpamPool extends AzapiResource {
113
+ /**
114
+ * Validates address prefixes for format and overlap
115
+ * Throws descriptive errors if validation fails
116
+ *
117
+ * @param prefixes - Array of CIDR blocks to validate
118
+ * @throws Error if validation fails
119
+ */
120
+ private static validateAddressPrefixes;
121
+ /**
122
+ * The input properties for this IPAM Pool instance
123
+ */
124
+ readonly props: IpamPoolProps;
125
+ readonly idOutput: cdktf.TerraformOutput;
126
+ readonly nameOutput: cdktf.TerraformOutput;
127
+ readonly locationOutput: cdktf.TerraformOutput;
128
+ readonly resourceName: string;
129
+ /**
130
+ * Creates a new Azure Virtual Network Manager IPAM Pool using the AzapiResource framework
131
+ *
132
+ * @param scope - The scope in which to define this construct
133
+ * @param id - The unique identifier for this instance
134
+ * @param props - Configuration properties for the IPAM Pool
135
+ */
136
+ constructor(scope: Construct, id: string, props: IpamPoolProps);
137
+ /**
138
+ * Resolves the parent resource ID for the IPAM Pool
139
+ * IPAM Pools are scoped to Network Managers
140
+ */
141
+ protected resolveParentId(props: any): string;
142
+ /**
143
+ * Gets the default API version to use when no explicit version is specified
144
+ */
145
+ protected defaultVersion(): string;
146
+ /**
147
+ * Gets the Azure resource type for IPAM Pools
148
+ */
149
+ protected resourceType(): string;
150
+ /**
151
+ * Gets the API schema for the resolved version
152
+ */
153
+ protected apiSchema(): ApiSchema;
154
+ /**
155
+ * Creates the resource body for the Azure API call
156
+ */
157
+ protected createResourceBody(props: any): any;
158
+ /**
159
+ * Calculate total number of IP addresses in this pool
160
+ * Sums up all addresses from all CIDR blocks
161
+ *
162
+ * @returns Total count of IP addresses across all prefixes
163
+ *
164
+ * @example
165
+ * const pool = new IpamPool(this, "pool", {
166
+ * addressPrefixes: ["10.0.0.0/24", "10.1.0.0/24"]
167
+ * });
168
+ * console.log(pool.totalAddressCount); // 512 (256 + 256)
169
+ */
170
+ get totalAddressCount(): number;
171
+ /**
172
+ * Applies ignore changes lifecycle rules if specified in props
173
+ */
174
+ private _applyIgnoreChanges;
175
+ }
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.IpamPool = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Azure Virtual Network Manager IPAM Pool implementation using AzapiResource framework
8
+ *
9
+ * This class provides a unified implementation for Azure Virtual Network Manager IPAM Pools
10
+ * that automatically handles version management, schema validation, and property transformation
11
+ * across all supported API versions.
12
+ *
13
+ * Supported API Versions:
14
+ * - 2024-05-01 (Active, Latest)
15
+ *
16
+ * Features:
17
+ * - Automatic latest version resolution when no version is specified
18
+ * - Explicit version pinning for stability requirements
19
+ * - Schema-driven validation and transformation
20
+ * - CIDR validation and overlap detection
21
+ * - Hierarchical pool support
22
+ * - JSII compliance for multi-language support
23
+ */
24
+ const cdktf = require("cdktf");
25
+ const ipam_pool_schemas_1 = require("./ipam-pool-schemas");
26
+ const cidr_validator_1 = require("./utils/cidr-validator");
27
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
28
+ /**
29
+ * Azure Virtual Network Manager IPAM Pool implementation
30
+ *
31
+ * IPAM Pools provide centralized IP address management for virtual networks,
32
+ * enabling automatic CIDR allocation, overlap prevention, and hierarchical
33
+ * address space organization. They are essential for managing IP addresses
34
+ * at scale across multiple virtual networks and subscriptions.
35
+ *
36
+ * @example
37
+ * // Basic IPAM pool for production workloads:
38
+ * const ipamPool = new IpamPool(this, "prod-pool", {
39
+ * name: "production-pool",
40
+ * location: "eastus",
41
+ * networkManagerId: networkManager.id,
42
+ * addressPrefixes: ["10.0.0.0/8"],
43
+ * description: "Root IP address pool for production",
44
+ * displayName: "Production Pool"
45
+ * });
46
+ *
47
+ * @example
48
+ * // Hierarchical pool with parent reference:
49
+ * const childPool = new IpamPool(this, "eastus-pool", {
50
+ * name: "eastus-pool",
51
+ * location: "eastus",
52
+ * networkManagerId: networkManager.id,
53
+ * addressPrefixes: ["10.1.0.0/16"],
54
+ * parentPoolName: "production-pool",
55
+ * description: "East US regional pool"
56
+ * });
57
+ *
58
+ * @stability stable
59
+ */
60
+ class IpamPool extends azapi_resource_1.AzapiResource {
61
+ /**
62
+ * Validates address prefixes for format and overlap
63
+ * Throws descriptive errors if validation fails
64
+ *
65
+ * @param prefixes - Array of CIDR blocks to validate
66
+ * @throws Error if validation fails
67
+ */
68
+ static validateAddressPrefixes(prefixes) {
69
+ if (!prefixes || prefixes.length === 0) {
70
+ throw new Error("At least one address prefix is required");
71
+ }
72
+ // Validate each CIDR individually
73
+ prefixes.forEach((prefix, index) => {
74
+ if (!(0, cidr_validator_1.isValidCidr)(prefix)) {
75
+ throw new Error(`Invalid CIDR notation at index ${index}: ${prefix}. ` +
76
+ `Expected format: x.x.x.x/y where y is 0-32`);
77
+ }
78
+ });
79
+ // Check for overlaps within the same pool
80
+ for (let i = 0; i < prefixes.length; i++) {
81
+ for (let j = i + 1; j < prefixes.length; j++) {
82
+ if ((0, cidr_validator_1.cidrsOverlap)(prefixes[i], prefixes[j])) {
83
+ throw new Error(`Address prefixes overlap: ${prefixes[i]} and ${prefixes[j]}. ` +
84
+ `Each CIDR block within a pool must be non-overlapping.`);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * Creates a new Azure Virtual Network Manager IPAM Pool using the AzapiResource framework
91
+ *
92
+ * @param scope - The scope in which to define this construct
93
+ * @param id - The unique identifier for this instance
94
+ * @param props - Configuration properties for the IPAM Pool
95
+ */
96
+ constructor(scope, id, props) {
97
+ // Validate CIDR prefixes before construction
98
+ IpamPool.validateAddressPrefixes(props.addressPrefixes);
99
+ super(scope, id, props);
100
+ this.props = props;
101
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
102
+ this.resourceName = `\${${this.terraformResource.fqn}.name}`;
103
+ // Create Terraform outputs for easy access and referencing from other resources
104
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
105
+ value: this.id,
106
+ description: "The ID of the IPAM Pool",
107
+ });
108
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
109
+ value: this.resourceName,
110
+ description: "The name of the IPAM Pool",
111
+ });
112
+ this.locationOutput = new cdktf.TerraformOutput(this, "location", {
113
+ value: `\${${this.terraformResource.fqn}.location}`,
114
+ description: "The location of the IPAM Pool",
115
+ });
116
+ // Override logical IDs to match naming convention
117
+ this.idOutput.overrideLogicalId("id");
118
+ this.nameOutput.overrideLogicalId("name");
119
+ this.locationOutput.overrideLogicalId("location");
120
+ // Apply ignore changes if specified
121
+ this._applyIgnoreChanges();
122
+ }
123
+ // =============================================================================
124
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
125
+ // =============================================================================
126
+ /**
127
+ * Resolves the parent resource ID for the IPAM Pool
128
+ * IPAM Pools are scoped to Network Managers
129
+ */
130
+ resolveParentId(props) {
131
+ const typedProps = props;
132
+ return typedProps.networkManagerId;
133
+ }
134
+ /**
135
+ * Gets the default API version to use when no explicit version is specified
136
+ */
137
+ defaultVersion() {
138
+ return "2024-05-01";
139
+ }
140
+ /**
141
+ * Gets the Azure resource type for IPAM Pools
142
+ */
143
+ resourceType() {
144
+ return ipam_pool_schemas_1.IPAM_POOL_TYPE;
145
+ }
146
+ /**
147
+ * Gets the API schema for the resolved version
148
+ */
149
+ apiSchema() {
150
+ return this.resolveSchema();
151
+ }
152
+ /**
153
+ * Creates the resource body for the Azure API call
154
+ */
155
+ createResourceBody(props) {
156
+ const typedProps = props;
157
+ return {
158
+ location: typedProps.location,
159
+ tags: this.allTags(),
160
+ properties: {
161
+ addressPrefixes: typedProps.addressPrefixes,
162
+ description: typedProps.description,
163
+ displayName: typedProps.displayName,
164
+ parentPoolName: typedProps.parentPoolName,
165
+ },
166
+ };
167
+ }
168
+ // =============================================================================
169
+ // PUBLIC METHODS FOR IPAM POOL OPERATIONS
170
+ // =============================================================================
171
+ /**
172
+ * Calculate total number of IP addresses in this pool
173
+ * Sums up all addresses from all CIDR blocks
174
+ *
175
+ * @returns Total count of IP addresses across all prefixes
176
+ *
177
+ * @example
178
+ * const pool = new IpamPool(this, "pool", {
179
+ * addressPrefixes: ["10.0.0.0/24", "10.1.0.0/24"]
180
+ * });
181
+ * console.log(pool.totalAddressCount); // 512 (256 + 256)
182
+ */
183
+ get totalAddressCount() {
184
+ return this.props.addressPrefixes.reduce((sum, cidr) => sum + (0, cidr_validator_1.calculateAddressCount)(cidr), 0);
185
+ }
186
+ // =============================================================================
187
+ // PRIVATE HELPER METHODS
188
+ // =============================================================================
189
+ /**
190
+ * Applies ignore changes lifecycle rules if specified in props
191
+ */
192
+ _applyIgnoreChanges() {
193
+ if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
194
+ this.terraformResource.addOverride("lifecycle", {
195
+ ignore_changes: this.props.ignoreChanges,
196
+ });
197
+ }
198
+ }
199
+ }
200
+ exports.IpamPool = IpamPool;
201
+ _a = JSII_RTTI_SYMBOL_1;
202
+ IpamPool[_a] = { fqn: "@microsoft/terraform-cdk-constructs.IpamPool", version: "1.4.0" };
203
+ (() => {
204
+ azapi_resource_1.AzapiResource.registerSchemas(ipam_pool_schemas_1.IPAM_POOL_TYPE, ipam_pool_schemas_1.ALL_IPAM_POOL_VERSIONS);
205
+ })();
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXZpcnR1YWxuZXR3b3JrbWFuYWdlci9saWIvaXBhbS1wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsK0JBQStCO0FBRS9CLDJEQUE2RTtBQUM3RSwyREFJZ0M7QUFDaEMsOEVBR21EO0FBb0VuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILE1BQWEsUUFBUyxTQUFRLDhCQUFhO0lBS3pDOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFrQjtRQUN2RCxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBQSw0QkFBVyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLEtBQUssS0FBSyxNQUFNLElBQUk7b0JBQ3BELDRDQUE0QyxDQUMvQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsMENBQTBDO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzdDLElBQUksSUFB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QUMxQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLDBDQUEwQztJQUMxQyxnRkFBZ0Y7SUFFaEY7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDdEMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBQSxzQ0FBcUIsRUFBQyxJQUFJLENBQUMsRUFDaEQsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBdkxILDRCQXdMQzs7O0FBdkxDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQUMsa0NBQWMsRUFBRSwwQ0FBc0IsQ0FBQyxDQUFDO0FBQ3hFLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgaW1wbGVtZW50YXRpb24gdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pZmllZCBpbXBsZW1lbnRhdGlvbiBmb3IgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgSVBBTSBQb29sc1xuICogdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiBtYW5hZ2VtZW50LCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uXG4gKiBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBBUEkgdmVyc2lvbnMuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyNC0wNS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gQ0lEUiB2YWxpZGF0aW9uIGFuZCBvdmVybGFwIGRldGVjdGlvblxuICogLSBIaWVyYXJjaGljYWwgcG9vbCBzdXBwb3J0XG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFMTF9JUEFNX1BPT0xfVkVSU0lPTlMsIElQQU1fUE9PTF9UWVBFIH0gZnJvbSBcIi4vaXBhbS1wb29sLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIGlzVmFsaWRDaWRyLFxuICBjaWRyc092ZXJsYXAsXG4gIGNhbGN1bGF0ZUFkZHJlc3NDb3VudCxcbn0gZnJvbSBcIi4vdXRpbHMvY2lkci12YWxpZGF0b3JcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggSVBBTSBQb29sIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIElEIG9mIHRoZSBwYXJlbnQgTmV0d29yayBNYW5hZ2VyXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvdm5tXCJcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtNYW5hZ2VySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSVAgYWRkcmVzcyBwcmVmaXhlcyBmb3IgdGhlIHBvb2xcbiAgICogTXVzdCBiZSB2YWxpZCBDSURSIG5vdGF0aW9uIChlLmcuLCBcIjEwLjAuMC4wLzhcIilcbiAgICogTXVsdGlwbGUgcHJlZml4ZXMgbXVzdCBub3Qgb3ZlcmxhcFxuICAgKiBAZXhhbXBsZSBbXCIxMC4wLjAuMC84XCIsIFwiMTcyLjE2LjAuMC8xMlwiXVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeGVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIElQQU0gcG9vbFxuICAgKiBAZXhhbXBsZSBcIlByb2R1Y3Rpb24gSVAgYWRkcmVzcyBwb29sIGZvciBFYXN0IFVTIHJlZ2lvblwiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZnJpZW5kbHkgZGlzcGxheSBuYW1lXG4gICAqIEBleGFtcGxlIFwiRWFzdCBVUyBQcm9kdWN0aW9uIFBvb2xcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgcGFyZW50IHBvb2wgZm9yIGhpZXJhcmNoaWNhbCBwb29sc1xuICAgKiBMZWF2ZSBlbXB0eS91bmRlZmluZWQgZm9yIHJvb3QgcG9vbHNcbiAgICogQGV4YW1wbGUgXCJyb290LXBvb2xcIlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UG9vbE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1widGFnc1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIElQQU0gUG9vbCBib2R5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgYWRkcmVzc1ByZWZpeGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBwYXJlbnRQb29sTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIElQQU0gUG9vbCBBUEkgY2FsbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbEJvZHkge1xuICByZWFkb25seSBsb2NhdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVhZG9ubHkgcHJvcGVydGllczogSXBhbVBvb2xQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIEF6dXJlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIElQQU0gUG9vbCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIElQQU0gUG9vbHMgcHJvdmlkZSBjZW50cmFsaXplZCBJUCBhZGRyZXNzIG1hbmFnZW1lbnQgZm9yIHZpcnR1YWwgbmV0d29ya3MsXG4gKiBlbmFibGluZyBhdXRvbWF0aWMgQ0lEUiBhbGxvY2F0aW9uLCBvdmVybGFwIHByZXZlbnRpb24sIGFuZCBoaWVyYXJjaGljYWxcbiAqIGFkZHJlc3Mgc3BhY2Ugb3JnYW5pemF0aW9uLiBUaGV5IGFyZSBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIElQIGFkZHJlc3Nlc1xuICogYXQgc2NhbGUgYWNyb3NzIG11bHRpcGxlIHZpcnR1YWwgbmV0d29ya3MgYW5kIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIElQQU0gcG9vbCBmb3IgcHJvZHVjdGlvbiB3b3JrbG9hZHM6XG4gKiBjb25zdCBpcGFtUG9vbCA9IG5ldyBJcGFtUG9vbCh0aGlzLCBcInByb2QtcG9vbFwiLCB7XG4gKiAgIG5hbWU6IFwicHJvZHVjdGlvbi1wb29sXCIsXG4gKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICogICBuZXR3b3JrTWFuYWdlcklkOiBuZXR3b3JrTWFuYWdlci5pZCxcbiAqICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC84XCJdLFxuICogICBkZXNjcmlwdGlvbjogXCJSb290IElQIGFkZHJlc3MgcG9vbCBmb3IgcHJvZHVjdGlvblwiLFxuICogICBkaXNwbGF5TmFtZTogXCJQcm9kdWN0aW9uIFBvb2xcIlxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhpZXJhcmNoaWNhbCBwb29sIHdpdGggcGFyZW50IHJlZmVyZW5jZTpcbiAqIGNvbnN0IGNoaWxkUG9vbCA9IG5ldyBJcGFtUG9vbCh0aGlzLCBcImVhc3R1cy1wb29sXCIsIHtcbiAqICAgbmFtZTogXCJlYXN0dXMtcG9vbFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgbmV0d29ya01hbmFnZXJJZDogbmV0d29ya01hbmFnZXIuaWQsXG4gKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMS4wLjAvMTZcIl0sXG4gKiAgIHBhcmVudFBvb2xOYW1lOiBcInByb2R1Y3Rpb24tcG9vbFwiLFxuICogICBkZXNjcmlwdGlvbjogXCJFYXN0IFVTIHJlZ2lvbmFsIHBvb2xcIlxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIElwYW1Qb29sIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoSVBBTV9QT09MX1RZUEUsIEFMTF9JUEFNX1BPT0xfVkVSU0lPTlMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhZGRyZXNzIHByZWZpeGVzIGZvciBmb3JtYXQgYW5kIG92ZXJsYXBcbiAgICogVGhyb3dzIGRlc2NyaXB0aXZlIGVycm9ycyBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqXG4gICAqIEBwYXJhbSBwcmVmaXhlcyAtIEFycmF5IG9mIENJRFIgYmxvY2tzIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVBZGRyZXNzUHJlZml4ZXMocHJlZml4ZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCFwcmVmaXhlcyB8fCBwcmVmaXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IG9uZSBhZGRyZXNzIHByZWZpeCBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIENJRFIgaW5kaXZpZHVhbGx5XG4gICAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFpc1ZhbGlkQ2lkcihwcmVmaXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBDSURSIG5vdGF0aW9uIGF0IGluZGV4ICR7aW5kZXh9OiAke3ByZWZpeH0uIGAgK1xuICAgICAgICAgICAgYEV4cGVjdGVkIGZvcm1hdDogeC54LngueC95IHdoZXJlIHkgaXMgMC0zMmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDaGVjayBmb3Igb3ZlcmxhcHMgd2l0aGluIHRoZSBzYW1lIHBvb2xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBwcmVmaXhlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoY2lkcnNPdmVybGFwKHByZWZpeGVzW2ldLCBwcmVmaXhlc1tqXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWRkcmVzcyBwcmVmaXhlcyBvdmVybGFwOiAke3ByZWZpeGVzW2ldfSBhbmQgJHtwcmVmaXhlc1tqXX0uIGAgK1xuICAgICAgICAgICAgICBgRWFjaCBDSURSIGJsb2NrIHdpdGhpbiBhIHBvb2wgbXVzdCBiZSBub24tb3ZlcmxhcHBpbmcuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIElQQU0gUG9vbCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBJcGFtUG9vbFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBJUEFNIFBvb2wgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIElQQU0gUG9vbFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sUHJvcHMpIHtcbiAgICAvLyBWYWxpZGF0ZSBDSURSIHByZWZpeGVzIGJlZm9yZSBjb25zdHJ1Y3Rpb25cbiAgICBJcGFtUG9vbC52YWxpZGF0ZUFkZHJlc3NQcmVmaXhlcyhwcm9wcy5hZGRyZXNzUHJlZml4ZXMpO1xuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuICAgIHRoaXMucmVzb3VyY2VOYW1lID0gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWA7XG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIElQQU0gUG9vbFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IHRoaXMucmVzb3VyY2VOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIElQQU0gUG9vbFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJsb2NhdGlvblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBJUEFNIFBvb2xcIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImxvY2F0aW9uXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcGFyZW50IHJlc291cmNlIElEIGZvciB0aGUgSVBBTSBQb29sXG4gICAqIElQQU0gUG9vbHMgYXJlIHNjb3BlZCB0byBOZXR3b3JrIE1hbmFnZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBJcGFtUG9vbFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLm5ldHdvcmtNYW5hZ2VySWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKi9cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyNC0wNS0wMVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEF6dXJlIHJlc291cmNlIHR5cGUgZm9yIElQQU0gUG9vbHNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSVBBTV9QT09MX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBJcGFtUG9vbFByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbjogdHlwZWRQcm9wcy5sb2NhdGlvbixcbiAgICAgIHRhZ3M6IHRoaXMuYWxsVGFncygpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IHR5cGVkUHJvcHMuYWRkcmVzc1ByZWZpeGVzLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZGlzcGxheU5hbWU6IHR5cGVkUHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICAgIHBhcmVudFBvb2xOYW1lOiB0eXBlZFByb3BzLnBhcmVudFBvb2xOYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIElQQU0gUE9PTCBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0b3RhbCBudW1iZXIgb2YgSVAgYWRkcmVzc2VzIGluIHRoaXMgcG9vbFxuICAgKiBTdW1zIHVwIGFsbCBhZGRyZXNzZXMgZnJvbSBhbGwgQ0lEUiBibG9ja3NcbiAgICpcbiAgICogQHJldHVybnMgVG90YWwgY291bnQgb2YgSVAgYWRkcmVzc2VzIGFjcm9zcyBhbGwgcHJlZml4ZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgcG9vbCA9IG5ldyBJcGFtUG9vbCh0aGlzLCBcInBvb2xcIiwge1xuICAgKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvMjRcIiwgXCIxMC4xLjAuMC8yNFwiXVxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2cocG9vbC50b3RhbEFkZHJlc3NDb3VudCk7IC8vIDUxMiAoMjU2ICsgMjU2KVxuICAgKi9cbiAgcHVibGljIGdldCB0b3RhbEFkZHJlc3NDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmFkZHJlc3NQcmVmaXhlcy5yZWR1Y2UoXG4gICAgICAoc3VtLCBjaWRyKSA9PiBzdW0gKyBjYWxjdWxhdGVBZGRyZXNzQ291bnQoY2lkciksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwge1xuICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -156,7 +156,7 @@ class NetworkGroupStaticMember extends azapi_resource_1.AzapiResource {
156
156
  }
157
157
  exports.NetworkGroupStaticMember = NetworkGroupStaticMember;
158
158
  _a = JSII_RTTI_SYMBOL_1;
159
- NetworkGroupStaticMember[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkGroupStaticMember", version: "1.3.1" };
159
+ NetworkGroupStaticMember[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkGroupStaticMember", version: "1.4.0" };
160
160
  (() => {
161
161
  azapi_resource_1.AzapiResource.registerSchemas(network_group_static_member_schemas_1.STATIC_MEMBER_TYPE, network_group_static_member_schemas_1.ALL_STATIC_MEMBER_VERSIONS);
162
162
  })();
@@ -151,7 +151,7 @@ class NetworkGroup extends azapi_resource_1.AzapiResource {
151
151
  }
152
152
  exports.NetworkGroup = NetworkGroup;
153
153
  _a = JSII_RTTI_SYMBOL_1;
154
- NetworkGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkGroup", version: "1.3.1" };
154
+ NetworkGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkGroup", version: "1.4.0" };
155
155
  (() => {
156
156
  azapi_resource_1.AzapiResource.registerSchemas(network_group_schemas_1.NETWORK_GROUP_TYPE, network_group_schemas_1.ALL_NETWORK_GROUP_VERSIONS);
157
157
  })();
@@ -157,7 +157,7 @@ class SecurityAdminConfiguration extends azapi_resource_1.AzapiResource {
157
157
  }
158
158
  exports.SecurityAdminConfiguration = SecurityAdminConfiguration;
159
159
  _a = JSII_RTTI_SYMBOL_1;
160
- SecurityAdminConfiguration[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminConfiguration", version: "1.3.1" };
160
+ SecurityAdminConfiguration[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminConfiguration", version: "1.4.0" };
161
161
  (() => {
162
162
  azapi_resource_1.AzapiResource.registerSchemas(security_admin_configuration_schemas_1.SECURITY_ADMIN_CONFIGURATION_TYPE, security_admin_configuration_schemas_1.ALL_SECURITY_ADMIN_CONFIGURATION_VERSIONS);
163
163
  })();
@@ -155,7 +155,7 @@ class SecurityAdminRuleCollection extends azapi_resource_1.AzapiResource {
155
155
  }
156
156
  exports.SecurityAdminRuleCollection = SecurityAdminRuleCollection;
157
157
  _a = JSII_RTTI_SYMBOL_1;
158
- SecurityAdminRuleCollection[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminRuleCollection", version: "1.3.1" };
158
+ SecurityAdminRuleCollection[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminRuleCollection", version: "1.4.0" };
159
159
  (() => {
160
160
  azapi_resource_1.AzapiResource.registerSchemas(security_admin_rule_collection_schemas_1.RULE_COLLECTION_TYPE, security_admin_rule_collection_schemas_1.ALL_RULE_COLLECTION_VERSIONS);
161
161
  })();
@@ -197,7 +197,7 @@ class SecurityAdminRule extends azapi_resource_1.AzapiResource {
197
197
  }
198
198
  exports.SecurityAdminRule = SecurityAdminRule;
199
199
  _a = JSII_RTTI_SYMBOL_1;
200
- SecurityAdminRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminRule", version: "1.3.1" };
200
+ SecurityAdminRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.SecurityAdminRule", version: "1.4.0" };
201
201
  (() => {
202
202
  azapi_resource_1.AzapiResource.registerSchemas(security_admin_rule_schemas_1.SECURITY_ADMIN_RULE_TYPE, security_admin_rule_schemas_1.ALL_SECURITY_ADMIN_RULE_VERSIONS);
203
203
  })();