@jjrawlins/cdk-diff-pr-github-action 1.10.1 → 1.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -7,7 +7,7 @@
7
7
  ]
8
8
  },
9
9
  "bundled": {
10
- "@aws-sdk/client-cloudformation": "^3.1023.0",
10
+ "@aws-sdk/client-cloudformation": "^3.1024.0",
11
11
  "@types/crypto-js": "^4.2.2",
12
12
  "@types/js-yaml": "^4.0.9",
13
13
  "crypto-js": "^4.2.0",
@@ -5455,6 +5455,6 @@
5455
5455
  "symbolId": "src/CdkDiffIamTemplateStackSet:StackSetRoleSelection"
5456
5456
  }
5457
5457
  },
5458
- "version": "1.10.1",
5459
- "fingerprint": "elyT5GEhuIn8lrzjSvydv+Y3nlgIHDJ3eO6K0RR+P80="
5458
+ "version": "1.10.3",
5459
+ "fingerprint": "++ciQrpAaBTvwprSBna785nKvPTdHP36qC9ayF9ktCA="
5460
5460
  }
@@ -13,7 +13,7 @@ import (
13
13
  constructs "github.com/aws/constructs-go/constructs/v10/jsii"
14
14
  )
15
15
 
16
- //go:embed jjrawlins-cdk-diff-pr-github-action-1.10.0.tgz
16
+ //go:embed jjrawlins-cdk-diff-pr-github-action-1.10.2.tgz
17
17
  var tarball []byte
18
18
 
19
19
  // Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module.
@@ -24,5 +24,5 @@ func Initialize() {
24
24
  constructs.Initialize()
25
25
 
26
26
  // Load this library into the kernel
27
- _jsii_.Load("@jjrawlins/cdk-diff-pr-github-action", "1.10.0", tarball)
27
+ _jsii_.Load("@jjrawlins/cdk-diff-pr-github-action", "1.10.2", tarball)
28
28
  }
@@ -1 +1 @@
1
- 1.10.0
1
+ 1.10.2
@@ -397,7 +397,7 @@ class CdkDiffIamTemplateGenerator {
397
397
  }
398
398
  exports.CdkDiffIamTemplateGenerator = CdkDiffIamTemplateGenerator;
399
399
  _a = JSII_RTTI_SYMBOL_1;
400
- CdkDiffIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateGenerator", version: "1.10.1" };
400
+ CdkDiffIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateGenerator", version: "1.10.3" };
401
401
  /**
402
402
  * Projen construct that emits a CloudFormation template with minimal IAM permissions
403
403
  * for the CDK Diff Stack Workflow.
@@ -420,5 +420,5 @@ class CdkDiffIamTemplate {
420
420
  }
421
421
  exports.CdkDiffIamTemplate = CdkDiffIamTemplate;
422
422
  _b = JSII_RTTI_SYMBOL_1;
423
- CdkDiffIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplate", version: "1.10.1" };
423
+ CdkDiffIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplate", version: "1.10.3" };
424
424
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nka0RpZmZJYW1UZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQW1EbEM7OztHQUdHO0FBQ0gsTUFBYSwyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBdUM7UUFDN0QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUM7UUFFckQsaUJBQWlCO1FBQ2pCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsZUFBdUIscUNBQXFDO1FBQ3ZGLE9BQU8sNkNBQTZDLFlBQVksOEVBQThFLENBQUM7SUFDakosQ0FBQztJQUVEOztPQUVHO0lBQ0ss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QUM3QixZQUFZLEtBQThCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUkscUNBQXFDLENBQUM7UUFFN0Usd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSxrQkFBa0I7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7WUFDbkQsV0FBVyxFQUNULDRIQUE0SDtZQUM5SCxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBZkgsZ0RBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViT2lkY0NvbmZpZyB9IGZyb20gJy4vQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQnO1xuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIENESyBEaWZmIElBTSB0ZW1wbGF0ZXMgKG5vIFByb2plbiBkZXBlbmRlbmN5KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIE5hbWUgZm9yIHRoZSBjaGFuZ2VzZXQgSUFNIHJvbGUgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGNoYW5nZXNldCByb2xlLlxuICAgKiBSZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIGZhbHNlIG9yIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdpb24gZm9yIHRoZSBPSURDIHRydXN0IGNvbmRpdGlvbi5cbiAgICogT25seSB1c2VkIHdoZW4gb2lkY1JvbGVBcm4gaXMgcHJvdmlkZWQgKGV4dGVybmFsIE9JREMgcm9sZSkuXG4gICAqL1xuICByZWFkb25seSBvaWRjUmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBHaXRIdWIgT0lEQyByb2xlIHdpdGhpbiB0aGlzIHRlbXBsYXRlIGluc3RlYWQgb2YgdXNpbmcgYW4gZXhpc3Rpbmcgb25lLlxuICAgKiBXaGVuIHRydWUsIGdpdGh1Yk9pZGMgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBhbmQgb2lkY1JvbGVBcm4gaXMgaWdub3JlZC5cbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZU9pZGNSb2xlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2l0SHViIE9JREMgcm9sZSB0byBjcmVhdGUuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqIERlZmF1bHQ6ICdHaXRIdWJPSURDUm9sZSdcbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIE9JREMgY29uZmlndXJhdGlvbiBmb3IgcmVwby9icmFuY2ggcmVzdHJpY3Rpb25zLlxuICAgKiBSZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJPaWRjPzogR2l0SHViT2lkY0NvbmZpZztcblxuICAvKipcbiAgICogU2tpcCBjcmVhdGluZyB0aGUgT0lEQyBwcm92aWRlciAodXNlIGV4aXN0aW5nIG9uZSkuXG4gICAqIFNldCB0byB0cnVlIGlmIHRoZSBhY2NvdW50IGFscmVhZHkgaGFzIGEgR2l0SHViIE9JREMgcHJvdmlkZXIuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBDREsgRGlmZiBJQU0gdGVtcGxhdGVzLlxuICogTm8gUHJvamVuIGRlcGVuZGVuY3kgLSBjYW4gYmUgdXNlZCBpbiBhbnkgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQ2xvdWRGb3JtYXRpb24gSUFNIHRlbXBsYXRlIGFzIGEgWUFNTCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVUZW1wbGF0ZShwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNyZWF0ZU9pZGNSb2xlID0gcHJvcHMuY3JlYXRlT2lkY1JvbGUgPz8gZmFsc2U7XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm9wc1xuICAgIGlmIChjcmVhdGVPaWRjUm9sZSkge1xuICAgICAgaWYgKCFwcm9wcy5naXRodWJPaWRjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2l0aHViT2lkYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgdHJ1ZScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXByb3BzLm9pZGNSb2xlQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2lkY1JvbGVBcm4gaXMgcmVxdWlyZWQgd2hlbiBjcmVhdGVPaWRjUm9sZSBpcyBmYWxzZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9wcy5vaWRjUmVnaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2lkY1JlZ2lvbiBpcyByZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIGZhbHNlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZU9pZGNSb2xlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVRlbXBsYXRlV2l0aE9pZGNSb2xlKHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVdpdGhFeHRlcm5hbE9pZGNSb2xlKHByb3BzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIEFXUyBDTEkgZGVwbG95IGNvbW1hbmQgZm9yIHRoZSBJQU0gdGVtcGxhdGUuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVEZXBsb3lDb21tYW5kKHRlbXBsYXRlUGF0aDogc3RyaW5nID0gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95IC0tdGVtcGxhdGUtZmlsZSAke3RlbXBsYXRlUGF0aH0gLS1zdGFjay1uYW1lIGNkay1kaWZmLXdvcmtmbG93LWlhbS1yb2xlIC0tY2FwYWJpbGl0aWVzIENBUEFCSUxJVFlfTkFNRURfSUFNYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0ZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgT0lEQyBwcm92aWRlciBhbmQgcm9sZSAoc2VsZi1jb250YWluZWQpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlV2l0aE9pZGNSb2xlKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb2lkY1JvbGVOYW1lID0gcHJvcHMub2lkY1JvbGVOYW1lID8/ICdHaXRIdWJPSURDUm9sZSc7XG4gICAgY29uc3Qgc2tpcE9pZGNQcm92aWRlciA9IHByb3BzLnNraXBPaWRjUHJvdmlkZXJDcmVhdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBnaXRodWJPaWRjID0gcHJvcHMuZ2l0aHViT2lkYyE7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICBcIkFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogJzIwMTAtMDktMDknXCIsXG4gICAgICBcIkRlc2NyaXB0aW9uOiAnR2l0SHViIE9JREMgYW5kIElBTSByb2xlcyBmb3IgQ0RLIERpZmYgU3RhY2sgV29ya2Zsb3cgY29uc3RydWN0J1wiLFxuICAgICAgJycsXG4gICAgICAnUmVzb3VyY2VzOicsXG4gICAgXTtcblxuICAgIC8vIE9JREMgUHJvdmlkZXIgKG9ubHkgaWYgbm90IHNraXBwaW5nKVxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gT0lEQyBSb2xlIChuZWVkcyBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgY2hhbmdlc2V0IHJvbGUpXG4gICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1JvbGVMaW5lcyhvaWRjUm9sZU5hbWUsIGdpdGh1Yk9pZGMsIHNraXBPaWRjUHJvdmlkZXIsIHByb3BzLnJvbGVOYW1lKSk7XG5cbiAgICAvLyBDaGFuZ2VzZXQgUm9sZSAodHJ1c3RzIHRoZSBjcmVhdGVkIE9JREMgcm9sZSlcbiAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVDaGFuZ2VzZXRSb2xlV2l0aE9pZGNSZWYocHJvcHMucm9sZU5hbWUpKTtcblxuICAgIC8vIE91dHB1dHNcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCdPdXRwdXRzOicpO1xuXG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUHJvdmlkZXJPdXRwdXRMaW5lcygpKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUm9sZU91dHB1dExpbmVzKCkpO1xuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZUNoYW5nZXNldE91dHB1dExpbmVzKCkpO1xuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRlbXBsYXRlIHRoYXQgdXNlcyBhbiBleHRlcm5hbCBPSURDIHJvbGUgKG9yaWdpbmFsIGJlaGF2aW9yKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVUZW1wbGF0ZVdpdGhFeHRlcm5hbE9pZGNSb2xlKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBcIkFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogJzIwMTAtMDktMDknXCIsXG4gICAgICBcIkRlc2NyaXB0aW9uOiAnSUFNIHJvbGUgZm9yIENESyBEaWZmIFN0YWNrIFdvcmtmbG93IGNvbnN0cnVjdCdcIixcbiAgICAgICcnLFxuICAgICAgJ1BhcmFtZXRlcnM6JyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlQXJuOicsXG4gICAgICAnICAgIFR5cGU6IFN0cmluZycsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgZXhpc3RpbmcgR2l0SHViIE9JREMgcm9sZSB0aGF0IGNhbiBhc3N1bWUgdGhpcyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgIGAgICAgRGVmYXVsdDogJyR7cHJvcHMub2lkY1JvbGVBcm59J2AsXG4gICAgICAnJyxcbiAgICAgICdSZXNvdXJjZXM6JyxcbiAgICAgICcgICMgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IFJvbGUgLSBtaW5pbWFsIHBlcm1pc3Npb25zIGZvciBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcHJvcHMucm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhUmVmIEdpdEh1Yk9JRENSb2xlQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgYXdzOlJlcXVlc3RlZFJlZ2lvbjogJ1wiICsgcHJvcHMub2lkY1JlZ2lvbiArIFwiJ1wiLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0QWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgICAgICAjIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpMaXN0Q2hhbmdlU2V0cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246R2V0VGVtcGxhdGUnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIGJ1Y2tldCBhY2Nlc3MgKGZvciBjaGFuZ2VzZXQgY3JlYXRpb24pJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6R2V0T2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOlB1dE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpEZWxldGVPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6TGlzdEJ1Y2tldCcsXG4gICAgICAnICAgICAgICAgICAgICAgIFJlc291cmNlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay0ke0FXUzo6QWNjb3VudElkfS0ke0FXUzo6UmVnaW9ufS0qJ1wiLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKi8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIHBhcmFtZXRlciBhY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOnNzbToke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpwYXJhbWV0ZXIvY2RrLWJvb3RzdHJhcC8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBJQU0gUGFzc1JvbGUgZm9yIENESyBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gaWFtOlBhc3NSb2xlJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgICAgJ2lhbTpQYXNzZWRUb1NlcnZpY2UnOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbSdcIixcbiAgICAgICcnLFxuICAgICAgJ091dHB1dHM6JyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0NoYW5nZXNldFJvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrQ2hhbmdlc2V0Um9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlTmFtZSdcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUHJvdmlkZXJMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgICMgR2l0SHViIE9JREMgUHJvdmlkZXInLFxuICAgICAgJyAgR2l0SHViT0lEQ1Byb3ZpZGVyOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpPSURDUHJvdmlkZXInLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICAnICAgICAgVXJsOiBodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tJyxcbiAgICAgICcgICAgICBDbGllbnRJZExpc3Q6JyxcbiAgICAgICcgICAgICAgIC0gc3RzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgJyAgICAgIFRodW1icHJpbnRMaXN0OicsXG4gICAgICAnICAgICAgICAtIDY5MzhmZDRkOThiYWIwM2ZhYWRiOTdiMzQzOTY4MzFlMzc4MGFlYTEnLFxuICAgICAgJyAgICAgICAgLSAxYzU4YTNhODUxOGU4NzU5YmYwNzViNzZiNzUwZDRmMmRmMjY0ZmNkJyxcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNSb2xlTGluZXMoXG4gICAgcm9sZU5hbWU6IHN0cmluZyxcbiAgICBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnLFxuICAgIHNraXBPaWRjUHJvdmlkZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjaGFuZ2VzZXRSb2xlTmFtZT86IHN0cmluZyxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN1YmplY3RDbGFpbXMgPSB0aGlzLmJ1aWxkU3ViamVjdENsYWltcyhnaXRodWJPaWRjKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgJyAgIyBHaXRIdWIgT0lEQyBSb2xlIC0gYXV0aGVudGljYXRlcyBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3MnLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgIF07XG5cbiAgICAvLyBPbmx5IGFkZCBEZXBlbmRzT24gaWYgd2UncmUgY3JlYXRpbmcgdGhlIHByb3ZpZGVyXG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgRGVwZW5kc09uOiBHaXRIdWJPSURDUHJvdmlkZXInKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICBcIiAgICAgICAgICAgICAgRmVkZXJhdGVkOiAhU3ViICdhcm46YXdzOmlhbTo6JHtBV1M6OkFjY291bnRJZH06b2lkYy1wcm92aWRlci90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbSdcIixcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5JyxcbiAgICAgICcgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgJ3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tOmF1ZCc6ICdzdHMuYW1hem9uYXdzLmNvbSdcIixcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0xpa2U6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICd0b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTpzdWInOlwiLFxuICAgICk7XG5cbiAgICAvLyBBZGQgc3ViamVjdCBjbGFpbXNcbiAgICBmb3IgKGNvbnN0IGNsYWltIG9mIHN1YmplY3RDbGFpbXMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICAgICAgIC0gJyR7Y2xhaW19J2ApO1xuICAgIH1cblxuICAgIC8vIEFkZCBwb2xpY2llcyBmb3IgYXNzdW1pbmcgY2hhbmdlc2V0IHJvbGUgYW5kIENESyBib290c3RyYXAgcm9sZXMsIHBsdXMgQ0RLIGRpZmYgcGVybWlzc2lvbnNcbiAgICBsaW5lcy5wdXNoKCcgICAgICBQb2xpY2llczonKTtcblxuICAgIC8vIFBvbGljeSAxOiBBc3N1bWVDaGFuZ2VzZXRSb2xlIC0gYWxsb3dzIGFzc3VtaW5nIGNoYW5nZXNldCByb2xlIGFuZCBDREsgYm9vdHN0cmFwIHJvbGVzXG4gICAgbGluZXMucHVzaCgnICAgICAgICAtIFBvbGljeU5hbWU6IEFzc3VtZUNoYW5nZXNldFJvbGUnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6Jyk7XG4gICAgbGluZXMucHVzaChcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICBTdGF0ZW1lbnQ6Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZScpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonKTtcbiAgICBpZiAoY2hhbmdlc2V0Um9sZU5hbWUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czppYW06OlxcJHtBV1M6OkFjY291bnRJZH06cm9sZS8ke2NoYW5nZXNldFJvbGVOYW1lfSdgKTtcbiAgICB9XG4gICAgLy8gQ0RLIGJvb3RzdHJhcCByb2xlc1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCByb2xlcycpO1xuICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6aWFtOjoke0FXUzo6QWNjb3VudElkfTpyb2xlL2Nkay1obmI2NTlmZHMtZGVwbG95LXJvbGUtJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0nXCIpO1xuICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6aWFtOjoke0FXUzo6QWNjb3VudElkfTpyb2xlL2Nkay1obmI2NTlmZHMtZmlsZS1wdWJsaXNoaW5nLXJvbGUtJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0nXCIpO1xuICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6aWFtOjoke0FXUzo6QWNjb3VudElkfTpyb2xlL2Nkay1obmI2NTlmZHMtaW1hZ2UtcHVibGlzaGluZy1yb2xlLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259J1wiKTtcbiAgICBsaW5lcy5wdXNoKFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOmlhbTo6JHtBV1M6OkFjY291bnRJZH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259J1wiKTtcblxuICAgIC8vIFBvbGljeSAyOiBDZGtEaWZmUGVybWlzc2lvbnMgLSBkaXJlY3QgcGVybWlzc2lvbnMgZm9yIENESyBkaWZmIG9wZXJhdGlvbnNcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgIC0gUG9saWN5TmFtZTogQ2RrRGlmZlBlcm1pc3Npb25zJyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgIFBvbGljeURvY3VtZW50OicpO1xuICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIik7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgU3RhdGVtZW50OicpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIHBhcmFtZXRlciBhY2Nlc3MgKG5lZWRlZCBmb3IgY2RrIGRlcGxveS9kaWZmKScpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgIEFjdGlvbjonKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXInKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzJyk7XG4gICAgbGluZXMucHVzaChcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIik7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAjIENsb3VkRm9ybWF0aW9uIG9wZXJhdGlvbnMgZm9yIGNoYW5nZXNldCBjcmVhdGlvbicpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgIEFjdGlvbjonKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdENoYW5nZVNldHMnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkdldFRlbXBsYXRlJyk7XG4gICAgbGluZXMucHVzaChcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIGJ1Y2tldCBhY2Nlc3MnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBBY3Rpb246Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgLSBzMzpHZXRPYmplY3QnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgICAtIHMzOlB1dE9iamVjdCcpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICAgIC0gczM6TGlzdEJ1Y2tldCcpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICAgIC0gczM6R2V0QnVja2V0TG9jYXRpb24nKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgUmVzb3VyY2U6Jyk7XG4gICAgbGluZXMucHVzaChcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay1obmI2NTlmZHMtYXNzZXRzLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259J1wiKTtcbiAgICBsaW5lcy5wdXNoKFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLWhuYjY1OWZkcy1hc3NldHMtJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0vKidcIik7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAjIElBTSBQYXNzUm9sZSBmb3IgQ0RLIG9wZXJhdGlvbnMnKTtcbiAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBBY3Rpb246Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgLSBpYW06UGFzc1JvbGUnKTtcbiAgICBsaW5lcy5wdXNoKFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOmlhbTo6JHtBV1M6OkFjY291bnRJZH06cm9sZS9jZGstaG5iNjU5ZmRzLSonXCIpO1xuICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBDb25kaXRpb246Jyk7XG4gICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicpO1xuICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIpO1xuXG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTdWJqZWN0Q2xhaW1zKGdpdGh1Yk9pZGM6IEdpdEh1Yk9pZGNDb25maWcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhaW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gZ2l0aHViT2lkYy5icmFuY2hlcyA/PyBbJyonXTtcblxuICAgIGZvciAoY29uc3QgcmVwbyBvZiBnaXRodWJPaWRjLnJlcG9zaXRvcmllcykge1xuICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAvLyBXaWxkY2FyZCByZXBvIC0gYWxsb3cgYWxsIHJlcG9zIHdpdGggYnJhbmNoIHJlc3RyaWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgIGlmIChicmFuY2ggPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vKjpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNwZWNpZmljIHJlcG9cbiAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICBpZiAoYnJhbmNoID09PSAnKicpIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToqYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfTpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYW55IGFkZGl0aW9uYWwgY2xhaW1zXG4gICAgaWYgKGdpdGh1Yk9pZGMuYWRkaXRpb25hbENsYWltcykge1xuICAgICAgZm9yIChjb25zdCBjbGFpbSBvZiBnaXRodWJPaWRjLmFkZGl0aW9uYWxDbGFpbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXBvIG9mIGdpdGh1Yk9pZGMucmVwb3NpdG9yaWVzKSB7XG4gICAgICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qOiR7Y2xhaW19YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToke2NsYWltfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGFpbXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldFJvbGVXaXRoT2lkY1JlZihyb2xlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIENoYW5nZVNldCBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgICAnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1JvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFHZXRBdHQgR2l0SHViT0lEQ1JvbGUuQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgJyAgICAgICAgLSBQb2xpY3lOYW1lOiBDbG91ZEZvcm1hdGlvbkNoYW5nZVNldEFjY2VzcycsXG4gICAgICAnICAgICAgICAgIFBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdENoYW5nZVNldHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkdldFRlbXBsYXRlJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpQdXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6RGVsZXRlT2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKidcIixcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBwYXJhbWV0ZXIgYWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgSUFNIFBhc3NSb2xlIGZvciBDREsgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGlhbTpQYXNzUm9sZScsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUHJvdmlkZXJPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIEdpdEh1Yk9JRENQcm92aWRlckFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHByb3ZpZGVyJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBHaXRIdWJPSURDUHJvdmlkZXIuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENQcm92aWRlckFybidcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBHaXRIdWJPSURDUm9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IEdpdEh1Yk9JRENSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUm9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIEdpdEh1Yk9JRENSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENSb2xlTmFtZSdcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldE91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgQ2RrQ2hhbmdlc2V0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZU5hbWU6JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBDZGtDaGFuZ2VzZXRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVOYW1lJ1wiLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIENESyBEaWZmIElBTSB0ZW1wbGF0ZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVQcm9wcyBleHRlbmRzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJykgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9qZW4gY29uc3RydWN0IHRoYXQgZW1pdHMgYSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB3aXRoIG1pbmltYWwgSUFNIHBlcm1pc3Npb25zXG4gKiBmb3IgdGhlIENESyBEaWZmIFN0YWNrIFdvcmtmbG93LlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvcmAgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEaWZmSWFtVGVtcGxhdGUge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlUHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXRlbXBsYXRlLnlhbWwnO1xuXG4gICAgLy8gR2VuZXJhdGUgdGVtcGxhdGUgdXNpbmcgdGhlIGdlbmVyYXRvclxuICAgIGNvbnN0IHRlbXBsYXRlID0gQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yLmdlbmVyYXRlVGVtcGxhdGUocHJvcHMpO1xuICAgIG5ldyBUZXh0RmlsZShwcm9wcy5wcm9qZWN0LCBvdXRwdXRQYXRoLCB7IGxpbmVzOiB0ZW1wbGF0ZS5zcGxpdCgnXFxuJykgfSk7XG5cbiAgICAvLyBBZGQgZGVwbG95IHRhc2tcbiAgICBwcm9wcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveS1jZGtkaWZmLWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGVwbG95IHRoZSBDREsgRGlmZiBJQU0gdGVtcGxhdGUgdmlhIENsb3VkRm9ybWF0aW9uIChhY2NlcHRzIGV4dHJhIEFXUyBDTEkgYXJncywgZS5nLiwgLS1wYXJhbWV0ZXItb3ZlcnJpZGVzIEtleT1WYWx1ZS4uLiknLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICBleGVjOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVEZXBsb3lDb21tYW5kKG91dHB1dFBhdGgpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -344,7 +344,7 @@ class CdkDiffIamTemplateStackSetGenerator {
344
344
  }
345
345
  exports.CdkDiffIamTemplateStackSetGenerator = CdkDiffIamTemplateStackSetGenerator;
346
346
  _a = JSII_RTTI_SYMBOL_1;
347
- CdkDiffIamTemplateStackSetGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSetGenerator", version: "1.10.1" };
347
+ CdkDiffIamTemplateStackSetGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSetGenerator", version: "1.10.3" };
348
348
  /**
349
349
  * Projen construct that creates a CloudFormation StackSet template for org-wide deployment of
350
350
  * GitHub OIDC provider, OIDC role, and CDK Diff/Drift IAM roles.
@@ -389,5 +389,5 @@ class CdkDiffIamTemplateStackSet {
389
389
  }
390
390
  exports.CdkDiffIamTemplateStackSet = CdkDiffIamTemplateStackSet;
391
391
  _b = JSII_RTTI_SYMBOL_1;
392
- CdkDiffIamTemplateStackSet[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSet", version: "1.10.1" };
392
+ CdkDiffIamTemplateStackSet[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSet", version: "1.10.3" };
393
393
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxJQUFZLHFCQU9YO0FBUEQsV0FBWSxxQkFBcUI7SUFDL0IseURBQXlEO0lBQ3pELDBEQUFpQyxDQUFBO0lBQ2pDLGlEQUFpRDtJQUNqRCxrREFBeUIsQ0FBQTtJQUN6QixtQ0FBbUM7SUFDbkMsc0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxxQkFBcUIscUNBQXJCLHFCQUFxQixRQU9oQztBQWtHRDs7O0dBR0c7QUFDSCxNQUFhLG1DQUFtQztJQUM5Qzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUErQztRQUNyRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDO1FBQzVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDO1FBQzVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLEtBQUssQ0FBQztRQUVqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3RDLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGFBQWEsRUFDYixLQUFLLENBQUMsV0FBVyxFQUNqQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7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QUN6RSxpQkFBaUIsRUFBRSw4QkFBOEI7WUFDakQsMkJBQTJCLEVBQ3pCLHlIQUF5SDtZQUMzSCwyQkFBMkIsRUFBRSxvREFBb0Q7WUFDakYsaUJBQWlCLEVBQUUsa0VBQWtFO1lBQ3JGLG1CQUFtQixFQUFFLGdEQUFnRDtZQUNyRSx5QkFBeUIsRUFBRSw2Q0FBNkM7U0FDekUsQ0FBQztRQUVGLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUM5QixXQUFXLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN2QyxXQUFXLEVBQUUsUUFBUSxLQUFLLGlCQUFpQjtnQkFDM0MsSUFBSSxFQUFFLE9BQU87YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFyQ0gsZ0VBc0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG4vKipcbiAqIFdoaWNoIHJvbGVzIHRvIGluY2x1ZGUgaW4gdGhlIFN0YWNrU2V0XG4gKi9cbmV4cG9ydCBlbnVtIFN0YWNrU2V0Um9sZVNlbGVjdGlvbiB7XG4gIC8qKiBJbmNsdWRlIG9ubHkgdGhlIGNoYW5nZXNldCByb2xlIChDZGtDaGFuZ2VzZXRSb2xlKSAqL1xuICBDSEFOR0VTRVRfT05MWSA9ICdDSEFOR0VTRVRfT05MWScsXG4gIC8qKiBJbmNsdWRlIG9ubHkgdGhlIGRyaWZ0IHJvbGUgKENka0RyaWZ0Um9sZSkgKi9cbiAgRFJJRlRfT05MWSA9ICdEUklGVF9PTkxZJyxcbiAgLyoqIEluY2x1ZGUgYm90aCByb2xlcyAoZGVmYXVsdCkgKi9cbiAgQk9USCA9ICdCT1RIJyxcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBTdGFja1NldCBhdXRvLWRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFja1NldEF1dG9EZXBsb3ltZW50IHtcbiAgLyoqIEVuYWJsZSBhdXRvLWRlcGxveW1lbnQgdG8gbmV3IGFjY291bnRzIGluIHRhcmdldCBPVXMgKGRlZmF1bHQ6IHRydWUpICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogUmV0YWluIHN0YWNrcyB3aGVuIGFjY291bnQgbGVhdmVzIE9VIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgcmVhZG9ubHkgcmV0YWluU3RhY2tzT25BY2NvdW50UmVtb3ZhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR2l0SHViIHJlcG9zaXRvcnkgcmVzdHJpY3Rpb25zIGZvciBPSURDIGF1dGhlbnRpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViT2lkY0NvbmZpZyB7XG4gIC8qKlxuICAgKiBHaXRIdWIgb3JnYW5pemF0aW9uIG9yIHVzZXJuYW1lIChlLmcuLCAnbXktb3JnJyBvciAnbXktdXNlcm5hbWUnKVxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI6IHN0cmluZztcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBuYW1lcyBhbGxvd2VkIHRvIGFzc3VtZSB0aGUgcm9sZSAoZS5nLiwgWydyZXBvMScsICdyZXBvMiddKVxuICAgKiBVc2UgWycqJ10gdG8gYWxsb3cgYWxsIHJlcG9zIGluIHRoZSBvcmdhbml6YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcmllczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEJyYW5jaCBwYXR0ZXJucyBhbGxvd2VkIChlLmcuLCBbJ21haW4nLCAncmVsZWFzZS8qJ10pXG4gICAqIERlZmF1bHQ6IFsnKiddIChhbGwgYnJhbmNoZXMpXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHN1YmplY3QgY2xhaW1zIGZvciBmaW5lLWdyYWluZWQgYWNjZXNzXG4gICAqIGUuZy4sIFsncHVsbF9yZXF1ZXN0JywgJ2Vudmlyb25tZW50OnByb2R1Y3Rpb24nXVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENsYWltcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIFN0YWNrU2V0IHRlbXBsYXRlcyAobm8gUHJvamVuIGRlcGVuZGVuY3kpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRHZW5lcmF0b3JQcm9wcyB7XG4gIC8qKiBHaXRIdWIgT0lEQyBjb25maWd1cmF0aW9uIGZvciByZXBvL2JyYW5jaCByZXN0cmljdGlvbnMgKi9cbiAgcmVhZG9ubHkgZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZztcblxuICAvKiogTmFtZSBvZiB0aGUgR2l0SHViIE9JREMgcm9sZSAoZGVmYXVsdDogJ0dpdEh1Yk9JRENSb2xlJykgKi9cbiAgcmVhZG9ubHkgb2lkY1JvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBDZGtDaGFuZ2VzZXRSb2xlIChkZWZhdWx0OiAnQ2RrQ2hhbmdlc2V0Um9sZScpICovXG4gIHJlYWRvbmx5IGNoYW5nZXNldFJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBDZGtEcmlmdFJvbGUgKGRlZmF1bHQ6ICdDZGtEcmlmdFJvbGUnKSAqL1xuICByZWFkb25seSBkcmlmdFJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBXaGljaCByb2xlcyB0byBpbmNsdWRlIChkZWZhdWx0OiBCT1RIKSAqL1xuICByZWFkb25seSByb2xlU2VsZWN0aW9uPzogU3RhY2tTZXRSb2xlU2VsZWN0aW9uO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiBmb3IgdGhlIFN0YWNrU2V0ICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTa2lwIGNyZWF0aW5nIHRoZSBPSURDIHByb3ZpZGVyICh1c2UgZXhpc3Rpbmcgb25lKS5cbiAgICogU2V0IHRvIHRydWUgaWYgYWNjb3VudHMgYWxyZWFkeSBoYXZlIGEgR2l0SHViIE9JREMgcHJvdmlkZXIuXG4gICAqIFRoZSB0ZW1wbGF0ZSB3aWxsIHJlZmVyZW5jZSB0aGUgZXhpc3RpbmcgcHJvdmlkZXIgYnkgQVJOLlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcE9pZGNQcm92aWRlckNyZWF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgZ2VuZXJhdGluZyBTdGFja1NldCBDTEkgY29tbWFuZHMgKG5vIFByb2plbiBkZXBlbmRlbmN5KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0Q29tbWFuZHNQcm9wcyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBTdGFja1NldCAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS1zdGFja3NldCcpICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKiogUGF0aCB0byB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LXN0YWNrc2V0LXRlbXBsYXRlLnlhbWwnKSAqL1xuICByZWFkb25seSB0ZW1wbGF0ZVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqIFRhcmdldCBPVXMgZm9yIGRlcGxveW1lbnQgKGUuZy4sIFsnb3UteHh4eC14eHh4eHh4eCcsICdyLXh4eHgnXSkgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0T3JnYW5pemF0aW9uYWxVbml0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqIFRhcmdldCByZWdpb25zIGZvciBkZXBsb3ltZW50IChlLmcuLCBbJ3VzLWVhc3QtMScsICdldS13ZXN0LTEnXSkgKi9cbiAgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKiBBdXRvLWRlcGxveW1lbnQgY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBhdXRvRGVwbG95bWVudD86IFN0YWNrU2V0QXV0b0RlcGxveW1lbnQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGRlbGVnYXRlZCBhZG1pbiBtb2RlIGZvciBTdGFja1NldCBvcGVyYXRpb25zLlxuICAgKiBJZiB0cnVlLCBhZGRzIC0tY2FsbC1hcyBERUxFR0FURURfQURNSU4gdG8gY29tbWFuZHMuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlbGVnYXRlZEFkbWluPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQdXJlIGdlbmVyYXRvciBjbGFzcyBmb3IgU3RhY2tTZXQgdGVtcGxhdGVzIGFuZCBjb21tYW5kcy5cbiAqIE5vIFByb2plbiBkZXBlbmRlbmN5IC0gY2FuIGJlIHVzZWQgaW4gYW55IHByb2plY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQ2xvdWRGb3JtYXRpb24gU3RhY2tTZXQgdGVtcGxhdGUgYXMgYSBZQU1MIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvclByb3BzKTogc3RyaW5nIHtcbiAgICBjb25zdCBvaWRjUm9sZU5hbWUgPSBwcm9wcy5vaWRjUm9sZU5hbWUgPz8gJ0dpdEh1Yk9JRENSb2xlJztcbiAgICBjb25zdCBjaGFuZ2VzZXRSb2xlTmFtZSA9IHByb3BzLmNoYW5nZXNldFJvbGVOYW1lID8/ICdDZGtDaGFuZ2VzZXRSb2xlJztcbiAgICBjb25zdCBkcmlmdFJvbGVOYW1lID0gcHJvcHMuZHJpZnRSb2xlTmFtZSA/PyAnQ2RrRHJpZnRSb2xlJztcbiAgICBjb25zdCByb2xlU2VsZWN0aW9uID0gcHJvcHMucm9sZVNlbGVjdGlvbiA/PyBTdGFja1NldFJvbGVTZWxlY3Rpb24uQk9USDtcbiAgICBjb25zdCBza2lwT2lkY1Byb3ZpZGVyID0gcHJvcHMuc2tpcE9pZGNQcm92aWRlckNyZWF0aW9uID8/IGZhbHNlO1xuXG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVMaW5lcyhcbiAgICAgIHByb3BzLmdpdGh1Yk9pZGMsXG4gICAgICBvaWRjUm9sZU5hbWUsXG4gICAgICBjaGFuZ2VzZXRSb2xlTmFtZSxcbiAgICAgIGRyaWZ0Um9sZU5hbWUsXG4gICAgICByb2xlU2VsZWN0aW9uLFxuICAgICAgcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBza2lwT2lkY1Byb3ZpZGVyLFxuICAgICk7XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgQVdTIENMSSBjb21tYW5kcyBmb3IgU3RhY2tTZXQgb3BlcmF0aW9ucy5cbiAgICogUmV0dXJucyBhIG1hcCBvZiBjb21tYW5kIG5hbWVzIHRvIHNoZWxsIGNvbW1hbmRzLlxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlQ29tbWFuZHMocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0Q29tbWFuZHNQcm9wcyA9IHt9KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgc3RhY2tTZXROYW1lID0gcHJvcHMuc3RhY2tTZXROYW1lID8/ICdjZGstZGlmZi13b3JrZmxvdy1pYW0tc3RhY2tzZXQnO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHByb3BzLnRlbXBsYXRlUGF0aCA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctc3RhY2tzZXQtdGVtcGxhdGUueWFtbCc7XG4gICAgY29uc3QgcmVnaW9ucyA9IHByb3BzLnJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnXTtcbiAgICBjb25zdCB0YXJnZXRPVXMgPSBwcm9wcy50YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHMgPz8gW107XG4gICAgY29uc3QgYXV0b0RlcGxveUVuYWJsZWQgPSBwcm9wcy5hdXRvRGVwbG95bWVudD8uZW5hYmxlZCA/PyB0cnVlO1xuICAgIGNvbnN0IHJldGFpblN0YWNrcyA9IHByb3BzLmF1dG9EZXBsb3ltZW50Py5yZXRhaW5TdGFja3NPbkFjY291bnRSZW1vdmFsID8/IGZhbHNlO1xuICAgIGNvbnN0IGRlbGVnYXRlZEFkbWluID0gcHJvcHMuZGVsZWdhdGVkQWRtaW4gPz8gdHJ1ZTtcbiAgICBjb25zdCBjYWxsQXMgPSBkZWxlZ2F0ZWRBZG1pbiA/ICcgLS1jYWxsLWFzIERFTEVHQVRFRF9BRE1JTicgOiAnJztcblxuICAgIGNvbnN0IG91TGlzdCA9IHRhcmdldE9Vcy5sZW5ndGggPiAwID8gdGFyZ2V0T1VzLmpvaW4oJywnKSA6ICc8T1VfSURTPic7XG4gICAgY29uc3QgcmVnaW9uTGlzdCA9IHJlZ2lvbnMuam9pbignICcpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICdzdGFja3NldC1jcmVhdGUnOiBgYXdzIGNsb3VkZm9ybWF0aW9uIGNyZWF0ZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0gLS10ZW1wbGF0ZS1ib2R5IGZpbGU6Ly8ke3RlbXBsYXRlUGF0aH0gLS1jYXBhYmlsaXRpZXMgQ0FQQUJJTElUWV9OQU1FRF9JQU0gLS1wZXJtaXNzaW9uLW1vZGVsIFNFUlZJQ0VfTUFOQUdFRCAtLWF1dG8tZGVwbG95bWVudCBFbmFibGVkPSR7YXV0b0RlcGxveUVuYWJsZWR9LFJldGFpblN0YWNrc09uQWNjb3VudFJlbW92YWw9JHtyZXRhaW5TdGFja3N9JHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC11cGRhdGUnOiBgYXdzIGNsb3VkZm9ybWF0aW9uIHVwZGF0ZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0gLS10ZW1wbGF0ZS1ib2R5IGZpbGU6Ly8ke3RlbXBsYXRlUGF0aH0gLS1jYXBhYmlsaXRpZXMgQ0FQQUJJTElUWV9OQU1FRF9JQU0ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LWRlcGxveS1pbnN0YW5jZXMnOiBgYXdzIGNsb3VkZm9ybWF0aW9uIGNyZWF0ZS1zdGFjay1pbnN0YW5jZXMgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0gLS1kZXBsb3ltZW50LXRhcmdldHMgT3JnYW5pemF0aW9uYWxVbml0SWRzPSR7b3VMaXN0fSAtLXJlZ2lvbnMgJHtyZWdpb25MaXN0fSR7Y2FsbEFzfWAsXG4gICAgICAnc3RhY2tzZXQtZGVsZXRlLWluc3RhbmNlcyc6IGBhd3MgY2xvdWRmb3JtYXRpb24gZGVsZXRlLXN0YWNrLWluc3RhbmNlcyAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLWRlcGxveW1lbnQtdGFyZ2V0cyBPcmdhbml6YXRpb25hbFVuaXRJZHM9JHtvdUxpc3R9IC0tcmVnaW9ucyAke3JlZ2lvbkxpc3R9IC0tbm8tcmV0YWluLXN0YWNrcyR7Y2FsbEFzfWAsXG4gICAgICAnc3RhY2tzZXQtZGVsZXRlJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBkZWxldGUtc3RhY2stc2V0IC0tc3RhY2stc2V0LW5hbWUgJHtzdGFja1NldE5hbWV9JHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1kZXNjcmliZSc6IGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2stc2V0IC0tc3RhY2stc2V0LW5hbWUgJHtzdGFja1NldE5hbWV9JHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1saXN0LWluc3RhbmNlcyc6IGBhd3MgY2xvdWRmb3JtYXRpb24gbGlzdC1zdGFjay1pbnN0YW5jZXMgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0ke2NhbGxBc31gLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlTGluZXMoXG4gICAgZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZyxcbiAgICBvaWRjUm9sZU5hbWU6IHN0cmluZyxcbiAgICBjaGFuZ2VzZXRSb2xlTmFtZTogc3RyaW5nLFxuICAgIGRyaWZ0Um9sZU5hbWU6IHN0cmluZyxcbiAgICByb2xlU2VsZWN0aW9uOiBTdGFja1NldFJvbGVTZWxlY3Rpb24sXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgc2tpcE9pZGNQcm92aWRlcjogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZGVzYyA9IGRlc2NyaXB0aW9uID8/ICdHaXRIdWIgT0lEQyBhbmQgSUFNIHJvbGVzIGZvciBDREsgRGlmZi9EcmlmdCB3b3JrZmxvd3MgKFN0YWNrU2V0IGRlcGxveW1lbnQpJztcblxuICAgIGNvbnN0IGluY2x1ZGVDaGFuZ2VzZXQgPVxuICAgICAgcm9sZVNlbGVjdGlvbiA9PT0gU3RhY2tTZXRSb2xlU2VsZWN0aW9uLkJPVEggfHwgcm9sZVNlbGVjdGlvbiA9PT0gU3RhY2tTZXRSb2xlU2VsZWN0aW9uLkNIQU5HRVNFVF9PTkxZO1xuICAgIGNvbnN0IGluY2x1ZGVEcmlmdCA9XG4gICAgICByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uQk9USCB8fCByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uRFJJRlRfT05MWTtcblxuICAgIC8vIEhlYWRlclxuICAgIGxpbmVzLnB1c2goXCJBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICcyMDEwLTA5LTA5J1wiKTtcbiAgICBsaW5lcy5wdXNoKGBEZXNjcmlwdGlvbjogJyR7ZGVzY30nYCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICAvLyBSZXNvdXJjZXNcbiAgICBsaW5lcy5wdXNoKCdSZXNvdXJjZXM6Jyk7XG5cbiAgICAvLyBPSURDIFByb3ZpZGVyIChvbmx5IGlmIG5vdCBza2lwcGluZylcbiAgICBpZiAoIXNraXBPaWRjUHJvdmlkZXIpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNQcm92aWRlckxpbmVzKCkpO1xuICAgIH1cblxuICAgIC8vIE9JREMgUm9sZSAobmVlZHMgcGVybWlzc2lvbnMgdG8gYXNzdW1lIGNoYW5nZXNldC9kcmlmdCByb2xlcylcbiAgICBjb25zdCB0YXJnZXRSb2xlTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGluY2x1ZGVDaGFuZ2VzZXQpIHRhcmdldFJvbGVOYW1lcy5wdXNoKGNoYW5nZXNldFJvbGVOYW1lKTtcbiAgICBpZiAoaW5jbHVkZURyaWZ0KSB0YXJnZXRSb2xlTmFtZXMucHVzaChkcmlmdFJvbGVOYW1lKTtcbiAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUm9sZUxpbmVzKG9pZGNSb2xlTmFtZSwgZ2l0aHViT2lkYywgc2tpcE9pZGNQcm92aWRlciwgdGFyZ2V0Um9sZU5hbWVzKSk7XG5cbiAgICAvLyBDaGFuZ2VzZXQvRHJpZnQgcm9sZXNcbiAgICBpZiAoaW5jbHVkZUNoYW5nZXNldCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlQ2hhbmdlc2V0Um9sZUxpbmVzKGNoYW5nZXNldFJvbGVOYW1lKSk7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVEcmlmdCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlRHJpZnRSb2xlTGluZXMoZHJpZnRSb2xlTmFtZSkpO1xuICAgIH1cblxuICAgIC8vIE91dHB1dHNcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKCdPdXRwdXRzOicpO1xuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY091dHB1dExpbmVzKCkpO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBvdXRwdXQgdGhlIE9JREMgcm9sZSBBUk5cbiAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUm9sZU91dHB1dExpbmVzKCkpO1xuXG4gICAgaWYgKGluY2x1ZGVDaGFuZ2VzZXQpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZUNoYW5nZXNldE91dHB1dExpbmVzKCkpO1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlRHJpZnQpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZURyaWZ0T3V0cHV0TGluZXMoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUHJvdmlkZXJMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgICMgR2l0SHViIE9JREMgUHJvdmlkZXInLFxuICAgICAgJyAgR2l0SHViT0lEQ1Byb3ZpZGVyOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpPSURDUHJvdmlkZXInLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICAnICAgICAgVXJsOiBodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tJyxcbiAgICAgICcgICAgICBDbGllbnRJZExpc3Q6JyxcbiAgICAgICcgICAgICAgIC0gc3RzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgJyAgICAgIFRodW1icHJpbnRMaXN0OicsXG4gICAgICAnICAgICAgICAtIDY5MzhmZDRkOThiYWIwM2ZhYWRiOTdiMzQzOTY4MzFlMzc4MGFlYTEnLFxuICAgICAgJyAgICAgICAgLSAxYzU4YTNhODUxOGU4NzU5YmYwNzViNzZiNzUwZDRmMmRmMjY0ZmNkJyxcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNSb2xlTGluZXMoXG4gICAgcm9sZU5hbWU6IHN0cmluZyxcbiAgICBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnLFxuICAgIHNraXBPaWRjUHJvdmlkZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB0YXJnZXRSb2xlTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdWJqZWN0Q2xhaW1zID0gdGhpcy5idWlsZFN1YmplY3RDbGFpbXMoZ2l0aHViT2lkYyk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgICcgICMgR2l0SHViIE9JREMgUm9sZSAtIGF1dGhlbnRpY2F0ZXMgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzJyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICBdO1xuXG4gICAgLy8gT25seSBhZGQgRGVwZW5kc09uIGlmIHdlJ3JlIGNyZWF0aW5nIHRoZSBwcm92aWRlclxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCgnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1Byb3ZpZGVyJyk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgXCIgICAgICAgICAgICAgIEZlZGVyYXRlZDogIVN1YiAnYXJuOmF3czppYW06OiR7QVdTOjpBY2NvdW50SWR9Om9pZGMtcHJvdmlkZXIvdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsXG4gICAgICAnICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICd0b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTphdWQnOiAnc3RzLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdMaWtlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAndG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb206c3ViJzpcIixcbiAgICApO1xuXG4gICAgLy8gQWRkIHN1YmplY3QgY2xhaW1zXG4gICAgZm9yIChjb25zdCBjbGFpbSBvZiBzdWJqZWN0Q2xhaW1zKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAgICAgICAtICcke2NsYWltfSdgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcG9saWN5IHRvIGFsbG93IGFzc3VtaW5nIHRoZSB0YXJnZXQgcm9sZXMgKGNoYW5nZXNldC9kcmlmdClcbiAgICBpZiAodGFyZ2V0Um9sZU5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgIFBvbGljaWVzOicpO1xuICAgICAgbGluZXMucHVzaCgnICAgICAgICAtIFBvbGljeU5hbWU6IEFzc3VtZVRhcmdldFJvbGVzJyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6Jyk7XG4gICAgICBsaW5lcy5wdXNoKFwiICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIpO1xuICAgICAgbGluZXMucHVzaCgnICAgICAgICAgICAgU3RhdGVtZW50OicpO1xuICAgICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnKTtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgUmVzb3VyY2U6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldFJvbGVOYW1lIG9mIHRhcmdldFJvbGVOYW1lcykge1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6aWFtOjpcXCR7QVdTOjpBY2NvdW50SWR9OnJvbGUvJHt0YXJnZXRSb2xlTmFtZX0nYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTdWJqZWN0Q2xhaW1zKGdpdGh1Yk9pZGM6IEdpdEh1Yk9pZGNDb25maWcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhaW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gZ2l0aHViT2lkYy5icmFuY2hlcyA/PyBbJyonXTtcblxuICAgIGZvciAoY29uc3QgcmVwbyBvZiBnaXRodWJPaWRjLnJlcG9zaXRvcmllcykge1xuICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAvLyBXaWxkY2FyZCByZXBvIC0gYWxsb3cgYWxsIHJlcG9zIHdpdGggYnJhbmNoIHJlc3RyaWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgIGlmIChicmFuY2ggPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vKjpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNwZWNpZmljIHJlcG9cbiAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICBpZiAoYnJhbmNoID09PSAnKicpIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToqYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfTpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYW55IGFkZGl0aW9uYWwgY2xhaW1zXG4gICAgaWYgKGdpdGh1Yk9pZGMuYWRkaXRpb25hbENsYWltcykge1xuICAgICAgZm9yIChjb25zdCBjbGFpbSBvZiBnaXRodWJPaWRjLmFkZGl0aW9uYWxDbGFpbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXBvIG9mIGdpdGh1Yk9pZGMucmVwb3NpdG9yaWVzKSB7XG4gICAgICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qOiR7Y2xhaW19YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToke2NsYWltfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGFpbXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldFJvbGVMaW5lcyhyb2xlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIENoYW5nZVNldCBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgICAnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1JvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFHZXRBdHQgR2l0SHViT0lEQ1JvbGUuQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgJyAgICAgICAgLSBQb2xpY3lOYW1lOiBDbG91ZEZvcm1hdGlvbkNoYW5nZVNldEFjY2VzcycsXG4gICAgICAnICAgICAgICAgIFBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdENoYW5nZVNldHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpQdXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6RGVsZXRlT2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKidcIixcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBwYXJhbWV0ZXIgYWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgSUFNIFBhc3NSb2xlIGZvciBDREsgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGlhbTpQYXNzUm9sZScsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVEcmlmdFJvbGVMaW5lcyhyb2xlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIERyaWZ0IERldGVjdGlvbiBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrRHJpZnRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgRGVwZW5kc09uOiBHaXRIdWJPSURDUm9sZScsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgIFwiICAgICAgUm9sZU5hbWU6ICdcIiArIHJvbGVOYW1lICsgXCInXCIsXG4gICAgICAnICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgICcgICAgICAgICAgICAgIEFXUzogIUdldEF0dCBHaXRIdWJPSURDUm9sZS5Bcm4nLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uRHJpZnRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXRlY3RTdGFja0RyaWZ0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdFN0YWNrUmVzb3VyY2VzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjT3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBHaXRIdWJPSURDUHJvdmlkZXJBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBHaXRIdWIgT0lEQyBwcm92aWRlcidcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgR2l0SHViT0lEQ1Byb3ZpZGVyLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUHJvdmlkZXJBcm4nXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUm9sZU91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBHaXRIdWJPSURDUm9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tR2l0SHViT0lEQ1JvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBHaXRIdWJPSURDUm9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUm9sZU5hbWUnXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVDaGFuZ2VzZXRPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0NoYW5nZXNldFJvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrQ2hhbmdlc2V0Um9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlTmFtZSdcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZURyaWZ0T3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBDZGtEcmlmdFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgZHJpZnQgZGV0ZWN0aW9uIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0RyaWZ0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrRHJpZnRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtEcmlmdFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBkcmlmdCBkZXRlY3Rpb24gcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrRHJpZnRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0RyaWZ0Um9sZU5hbWUnXCIsXG4gICAgXTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUHJvamVuLWludGVncmF0ZWQgU3RhY2tTZXQgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRQcm9wcyBleHRlbmRzIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yUHJvcHMge1xuICAvKiogUHJvamVuIHByb2plY3QgaW5zdGFuY2UgKi9cbiAgcmVhZG9ubHkgcHJvamVjdDogYW55O1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBTdGFja1NldCAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS1zdGFja3NldCcpICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKiogT3V0cHV0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBmaWxlIChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctc3RhY2tzZXQtdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqIFRhcmdldCBPVXMgZm9yIGRlcGxveW1lbnQgKGUuZy4sIFsnb3UteHh4eC14eHh4eHh4eCcsICdyLXh4eHgnXSkgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0T3JnYW5pemF0aW9uYWxVbml0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqIFRhcmdldCByZWdpb25zIGZvciBkZXBsb3ltZW50IChlLmcuLCBbJ3VzLWVhc3QtMScsICdldS13ZXN0LTEnXSkgKi9cbiAgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKiBBdXRvLWRlcGxveW1lbnQgY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBhdXRvRGVwbG95bWVudD86IFN0YWNrU2V0QXV0b0RlcGxveW1lbnQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGRlbGVnYXRlZCBhZG1pbiBtb2RlIGZvciBTdGFja1NldCBvcGVyYXRpb25zLlxuICAgKiBJZiB0cnVlLCBhZGRzIC0tY2FsbC1hcyBERUxFR0FURURfQURNSU4gdG8gY29tbWFuZHMuXG4gICAqIElmIGZhbHNlLCBhc3N1bWVzIHJ1bm5pbmcgZnJvbSB0aGUgbWFuYWdlbWVudCBhY2NvdW50LlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWxlZ2F0ZWRBZG1pbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvamVuIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBDbG91ZEZvcm1hdGlvbiBTdGFja1NldCB0ZW1wbGF0ZSBmb3Igb3JnLXdpZGUgZGVwbG95bWVudCBvZlxuICogR2l0SHViIE9JREMgcHJvdmlkZXIsIE9JREMgcm9sZSwgYW5kIENESyBEaWZmL0RyaWZ0IElBTSByb2xlcy5cbiAqXG4gKiBUaGlzIHByb3ZpZGVzIGEgc2VsZi1jb250YWluZWQgcGVyLWFjY291bnQgZGVwbG95bWVudCB3aXRoIG5vIHJvbGUgY2hhaW5pbmcgcmVxdWlyZWQuXG4gKlxuICogRm9yIG5vbi1Qcm9qZW4gcHJvamVjdHMsIHVzZSBgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRHZW5lcmF0b3JgIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRQcm9wcykge1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwcm9wcy5vdXRwdXRQYXRoID8/ICdjZGstZGlmZi13b3JrZmxvdy1zdGFja3NldC10ZW1wbGF0ZS55YW1sJztcbiAgICBjb25zdCBzdGFja1NldE5hbWUgPSBwcm9wcy5zdGFja1NldE5hbWUgPz8gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS1zdGFja3NldCc7XG5cbiAgICAvLyBHZW5lcmF0ZSB0ZW1wbGF0ZSB1c2luZyB0aGUgZ2VuZXJhdG9yXG4gICAgY29uc3QgdGVtcGxhdGUgPSBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvci5nZW5lcmF0ZVRlbXBsYXRlKHByb3BzKTtcbiAgICBuZXcgVGV4dEZpbGUocHJvcHMucHJvamVjdCwgb3V0cHV0UGF0aCwgeyBsaW5lczogdGVtcGxhdGUuc3BsaXQoJ1xcbicpIH0pO1xuXG4gICAgLy8gR2VuZXJhdGUgY29tbWFuZHMgYW5kIGFkZCBhcyBQcm9qZW4gdGFza3NcbiAgICBjb25zdCBjb21tYW5kcyA9IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yLmdlbmVyYXRlQ29tbWFuZHMoe1xuICAgICAgc3RhY2tTZXROYW1lLFxuICAgICAgdGVtcGxhdGVQYXRoOiBvdXRwdXRQYXRoLFxuICAgICAgdGFyZ2V0T3JnYW5pemF0aW9uYWxVbml0SWRzOiBwcm9wcy50YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHMsXG4gICAgICByZWdpb25zOiBwcm9wcy5yZWdpb25zLFxuICAgICAgYXV0b0RlcGxveW1lbnQ6IHByb3BzLmF1dG9EZXBsb3ltZW50LFxuICAgICAgZGVsZWdhdGVkQWRtaW46IHByb3BzLmRlbGVnYXRlZEFkbWluLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGFza0Rlc2NyaXB0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdzdGFja3NldC1jcmVhdGUnOiAnQ3JlYXRlIHRoZSBTdGFja1NldCBmb3Igb3JnLXdpZGUgSUFNIHJvbGUgZGVwbG95bWVudCcsXG4gICAgICAnc3RhY2tzZXQtdXBkYXRlJzogJ1VwZGF0ZSB0aGUgU3RhY2tTZXQgdGVtcGxhdGUnLFxuICAgICAgJ3N0YWNrc2V0LWRlcGxveS1pbnN0YW5jZXMnOlxuICAgICAgICAnRGVwbG95IHN0YWNrIGluc3RhbmNlcyB0byB0YXJnZXQgT1VzIGFuZCByZWdpb25zIChwYXNzIC0tZGVwbG95bWVudC10YXJnZXRzIE9yZ2FuaXphdGlvbmFsVW5pdElkcz08b3UtaWRzPiB0byBvdmVycmlkZSknLFxuICAgICAgJ3N0YWNrc2V0LWRlbGV0ZS1pbnN0YW5jZXMnOiAnRGVsZXRlIHN0YWNrIGluc3RhbmNlcyBmcm9tIHRhcmdldCBPVXMgYW5kIHJlZ2lvbnMnLFxuICAgICAgJ3N0YWNrc2V0LWRlbGV0ZSc6ICdEZWxldGUgdGhlIFN0YWNrU2V0IChyZXF1aXJlcyBhbGwgaW5zdGFuY2VzIHRvIGJlIGRlbGV0ZWQgZmlyc3QpJyxcbiAgICAgICdzdGFja3NldC1kZXNjcmliZSc6ICdEZXNjcmliZSB0aGUgU3RhY2tTZXQgc3RhdHVzIGFuZCBjb25maWd1cmF0aW9uJyxcbiAgICAgICdzdGFja3NldC1saXN0LWluc3RhbmNlcyc6ICdMaXN0IGFsbCBzdGFjayBpbnN0YW5jZXMgYW5kIHRoZWlyIHN0YXR1c2VzJyxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBbdGFza05hbWUsIGNvbW1hbmRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbW1hbmRzKSkge1xuICAgICAgcHJvcHMucHJvamVjdC5hZGRUYXNrKHRhc2tOYW1lLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YXNrRGVzY3JpcHRpb25zW3Rhc2tOYW1lXSxcbiAgICAgICAgcmVjZWl2ZUFyZ3M6IHRhc2tOYW1lICE9PSAnc3RhY2tzZXQtZGVsZXRlJyxcbiAgICAgICAgZXhlYzogY29tbWFuZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -194,7 +194,7 @@ class CdkDiffStackWorkflow {
194
194
  }
195
195
  exports.CdkDiffStackWorkflow = CdkDiffStackWorkflow;
196
196
  _a = JSII_RTTI_SYMBOL_1;
197
- CdkDiffStackWorkflow[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffStackWorkflow", version: "1.10.1" };
197
+ CdkDiffStackWorkflow[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffStackWorkflow", version: "1.10.3" };
198
198
  CdkDiffStackWorkflow.scriptCreated = false;
199
199
  function sanitizeForFileName(name) {
200
200
  return name.replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-+|-+$/g, '').toLowerCase();
@@ -208,7 +208,7 @@ class CdkDriftDetectionWorkflow {
208
208
  }
209
209
  exports.CdkDriftDetectionWorkflow = CdkDriftDetectionWorkflow;
210
210
  _a = JSII_RTTI_SYMBOL_1;
211
- CdkDriftDetectionWorkflow[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftDetectionWorkflow", version: "1.10.1" };
211
+ CdkDriftDetectionWorkflow[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftDetectionWorkflow", version: "1.10.3" };
212
212
  CdkDriftDetectionWorkflow.scriptCreated = false;
213
213
  function issueScript(stack, region, resultsFile) {
214
214
  // Construct a plain JS script string (no template string nesting mishaps)
@@ -79,7 +79,7 @@ class CdkDriftIamTemplateGenerator {
79
79
  }
80
80
  exports.CdkDriftIamTemplateGenerator = CdkDriftIamTemplateGenerator;
81
81
  _a = JSII_RTTI_SYMBOL_1;
82
- CdkDriftIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplateGenerator", version: "1.10.1" };
82
+ CdkDriftIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplateGenerator", version: "1.10.3" };
83
83
  /**
84
84
  * Projen construct that emits a CloudFormation template with minimal IAM permissions
85
85
  * for the CDK Drift Detection Workflow.
@@ -102,5 +102,5 @@ class CdkDriftIamTemplate {
102
102
  }
103
103
  exports.CdkDriftIamTemplate = CdkDriftIamTemplate;
104
104
  _b = JSII_RTTI_SYMBOL_1;
105
- CdkDriftIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplate", version: "1.10.1" };
105
+ CdkDriftIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftIamTemplate", version: "1.10.3" };
106
106
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRHJpZnRJYW1UZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DZGtEcmlmdElhbVRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBY2xDOzs7R0FHRztBQUNILE1BQWEsNEJBQTRCO0lBQ3ZDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQXdDO1FBQzlELE1BQU0sS0FBSyxHQUFHO1lBQ1osd0NBQXdDO1lBQ3hDLDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YsYUFBYTtZQUNiLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIseUZBQXlGO1lBQ3pGLGlCQUFpQixLQUFLLENBQUMsV0FBVyxHQUFHO1lBQ3JDLEVBQUU7WUFDRixZQUFZO1lBQ1osOEZBQThGO1lBQzlGLGlCQUFpQjtZQUNqQiwwQkFBMEI7WUFDMUIsaUJBQWlCO1lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRztZQUMxQyxpQ0FBaUM7WUFDakMsK0JBQStCO1lBQy9CLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0Isd0JBQXdCO1lBQ3hCLDJDQUEyQztZQUMzQyxvQ0FBb0M7WUFDcEMsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3Qix3Q0FBd0MsR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUc7WUFDakUsaUJBQWlCO1lBQ2pCLGlEQUFpRDtZQUNqRCwyQkFBMkI7WUFDM0IsbUNBQW1DO1lBQ25DLHdCQUF3QjtZQUN4QiwyREFBMkQ7WUFDM0QsK0JBQStCO1lBQy9CLHlCQUF5QjtZQUN6QixxREFBcUQ7WUFDckQsc0VBQXNFO1lBQ3RFLGdFQUFnRTtZQUNoRSxtREFBbUQ7WUFDbkQsdURBQXVEO1lBQ3ZELDZEQUE2RDtZQUM3RCwrQkFBK0I7WUFDL0IsRUFBRTtZQUNGLFVBQVU7WUFDVixvQkFBb0I7WUFDcEIsd0RBQXdEO1lBQ3hELHFDQUFxQztZQUNyQyxhQUFhO1lBQ2Isc0RBQXNEO1lBQ3RELEVBQUU7WUFDRixxQkFBcUI7WUFDckIseURBQXlEO1lBQ3pELDhCQUE4QjtZQUM5QixhQUFhO1lBQ2IsdURBQXVEO1NBQ3hELENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGVBQXVCLHNDQUFzQztRQUN4RixPQUFPLDZDQUE2QyxZQUFZLCtFQUErRSxDQUFDO0lBQ2xKLENBQUM7O0FBckVILG9FQXNFQzs7O0FBWUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLEtBQStCO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksc0NBQXNDLENBQUM7UUFFOUUsd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSxrQkFBa0I7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUU7WUFDcEQsV0FBVyxFQUNULHVJQUF1STtZQUN6SSxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsNEJBQTRCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBZkgsa0RBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIENESyBEcmlmdCBJQU0gdGVtcGxhdGVzIChubyBQcm9qZW4gZGVwZW5kZW5jeSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMge1xuICAvKiogTmFtZSBmb3IgdGhlIElBTSByb2xlICovXG4gIHJlYWRvbmx5IHJvbGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBBUk4gb2YgdGhlIGV4aXN0aW5nIEdpdEh1YiBPSURDIHJvbGUgdGhhdCBjYW4gYXNzdW1lIHRoaXMgZHJpZnQgcm9sZSAqL1xuICByZWFkb25seSBvaWRjUm9sZUFybjogc3RyaW5nO1xuICAvKiogUmVnaW9uIGZvciB0aGUgT0lEQyB0cnVzdCBjb25kaXRpb24gKi9cbiAgcmVhZG9ubHkgb2lkY1JlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBDREsgRHJpZnQgSUFNIHRlbXBsYXRlcy5cbiAqIE5vIFByb2plbiBkZXBlbmRlbmN5IC0gY2FuIGJlIHVzZWQgaW4gYW55IHByb2plY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDbG91ZEZvcm1hdGlvbiBJQU0gdGVtcGxhdGUgYXMgYSBZQU1MIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlKHByb3BzOiBDZGtEcmlmdElhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgXCJBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICcyMDEwLTA5LTA5J1wiLFxuICAgICAgXCJEZXNjcmlwdGlvbjogJ0lBTSByb2xlIGZvciBDREsgRHJpZnQgRGV0ZWN0aW9uIFdvcmtmbG93J1wiLFxuICAgICAgJycsXG4gICAgICAnUGFyYW1ldGVyczonLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgICcgICAgVHlwZTogU3RyaW5nJyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGRyaWZ0IHJvbGUnXCIsXG4gICAgICBgICAgIERlZmF1bHQ6ICcke3Byb3BzLm9pZGNSb2xlQXJufSdgLFxuICAgICAgJycsXG4gICAgICAnUmVzb3VyY2VzOicsXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIERyaWZ0IERldGVjdGlvbiBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrRHJpZnRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcHJvcHMucm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhUmVmIEdpdEh1Yk9JRENSb2xlQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgYXdzOlJlcXVlc3RlZFJlZ2lvbjogJ1wiICsgcHJvcHMub2lkY1JlZ2lvbiArIFwiJ1wiLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uRHJpZnRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXRlY3RTdGFja0RyaWZ0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdFN0YWNrUmVzb3VyY2VzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnJyxcbiAgICAgICdPdXRwdXRzOicsXG4gICAgICAnICBDZGtEcmlmdFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgZHJpZnQgZGV0ZWN0aW9uIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0RyaWZ0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrRHJpZnRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtEcmlmdFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBkcmlmdCBkZXRlY3Rpb24gcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrRHJpZnRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0RyaWZ0Um9sZU5hbWUnXCIsXG4gICAgXTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQVdTIENMSSBkZXBsb3kgY29tbWFuZCBmb3IgdGhlIElBTSB0ZW1wbGF0ZS5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZURlcGxveUNvbW1hbmQodGVtcGxhdGVQYXRoOiBzdHJpbmcgPSAnY2RrLWRyaWZ0LXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95IC0tdGVtcGxhdGUtZmlsZSAke3RlbXBsYXRlUGF0aH0gLS1zdGFjay1uYW1lIGNkay1kcmlmdC13b3JrZmxvdy1pYW0tcm9sZSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTWA7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIENESyBEcmlmdCBJQU0gdGVtcGxhdGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRHJpZnRJYW1UZW1wbGF0ZVByb3BzIGV4dGVuZHMgQ2RrRHJpZnRJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kcmlmdC13b3JrZmxvdy1pYW0tdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvamVuIGNvbnN0cnVjdCB0aGF0IGVtaXRzIGEgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgd2l0aCBtaW5pbWFsIElBTSBwZXJtaXNzaW9uc1xuICogZm9yIHRoZSBDREsgRHJpZnQgRGV0ZWN0aW9uIFdvcmtmbG93LlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3JgIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRHJpZnRJYW1UZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZGtEcmlmdElhbVRlbXBsYXRlUHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRyaWZ0LXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJztcblxuICAgIC8vIEdlbmVyYXRlIHRlbXBsYXRlIHVzaW5nIHRoZSBnZW5lcmF0b3JcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVUZW1wbGF0ZShwcm9wcyk7XG4gICAgbmV3IFRleHRGaWxlKHByb3BzLnByb2plY3QsIG91dHB1dFBhdGgsIHsgbGluZXM6IHRlbXBsYXRlLnNwbGl0KCdcXG4nKSB9KTtcblxuICAgIC8vIEFkZCBkZXBsb3kgdGFza1xuICAgIHByb3BzLnByb2plY3QuYWRkVGFzaygnZGVwbG95LWNka2RyaWZ0LWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGVwbG95IHRoZSBDREsgRHJpZnQgRGV0ZWN0aW9uIElBTSB0ZW1wbGF0ZSB2aWEgQ2xvdWRGb3JtYXRpb24gKGFjY2VwdHMgZXh0cmEgQVdTIENMSSBhcmdzLCBlLmcuLCAtLXBhcmFtZXRlci1vdmVycmlkZXMgS2V5PVZhbHVlLi4uKScsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgIGV4ZWM6IENka0RyaWZ0SWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVEZXBsb3lDb21tYW5kKG91dHB1dFBhdGgpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-cloudformation",
3
3
  "description": "AWS SDK for JavaScript Cloudformation Client for Node.js, Browser and React Native",
4
- "version": "3.1023.0",
4
+ "version": "3.1024.0",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs",
7
7
  "build:cjs": "node ../../scripts/compilation/inline client-cloudformation",
@@ -1 +1 @@
1
- (()=>{"use strict";var t={d:(e,s)=>{for(var n in s)t.o(s,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:s[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Expression:()=>s,Matcher:()=>i,default:()=>r});class s{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let s=0,n="";for(;s<t.length;)t[s]===this.separator?s+1<t.length&&t[s+1]===this.separator?(n.trim()&&(e.push(this._parseSegment(n.trim())),n=""),e.push({type:"deep-wildcard"}),s+=2):(n.trim()&&e.push(this._parseSegment(n.trim())),n="",s++):(n+=t[s],s++);return n.trim()&&e.push(this._parseSegment(n.trim())),e}_parseSegment(t){const e={type:"tag"};let s=null,n=t;const i=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(i&&(n=i[1]+i[3],i[2])){const t=i[2].slice(1,-1);t&&(s=t)}let r,a,h=n;if(n.includes("::")){const e=n.indexOf("::");if(r=n.substring(0,e).trim(),h=n.substring(e+2).trim(),!r)throw new Error(`Invalid namespace in pattern: ${t}`)}let o=null;if(h.includes(":")){const t=h.lastIndexOf(":"),e=h.substring(0,t).trim(),s=h.substring(t+1).trim();["first","last","odd","even"].includes(s)||/^nth\(\d+\)$/.test(s)?(a=e,o=s):a=h}else a=h;if(!a)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=a,r&&(e.namespace=r),s)if(s.includes("=")){const t=s.indexOf("=");e.attrName=s.substring(0,t).trim(),e.attrValue=s.substring(t+1).trim()}else e.attrName=s.trim();if(o){const t=o.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=o}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}const n=new Set(["push","pop","reset","updateCurrent","restore"]);class i{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,s=null){this.path.length>0&&(this.path[this.path.length-1].values=void 0);const n=this.path.length;this.siblingStacks[n]||(this.siblingStacks[n]=new Map);const i=this.siblingStacks[n],r=s?`${s}:${t}`:t,a=i.get(r)||0;let h=0;for(const t of i.values())h+=t;i.set(r,a+1);const o={tag:t,position:h,counter:a};null!=s&&(o.namespace=s),null!=e&&(o.values=e),this.path.push(o)}pop(){if(0===this.path.length)return;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const s=t||this.separator;return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s)}toArray(){return this.path.map(t=>t.tag)}reset(){this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const s=t[e],n=this.path[e],i=e===this.path.length-1;if(!this._matchSegment(s,n,i))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,s=t.length-1;for(;s>=0&&e>=0;){const n=t[s];if("deep-wildcard"===n.type){if(s--,s<0)return!0;const n=t[s];let i=!1;for(let t=e;t>=0;t--){const r=t===this.path.length-1;if(this._matchSegment(n,this.path[t],r)){e=t-1,s--,i=!0;break}}if(!i)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(n,this.path[e],t))return!1;e--,s--}}return s<0}_matchSegment(t,e,s){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!s)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const s=e.values[t.attrName];if(String(s)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!s)return!1;const n=e.counter??0;if("first"===t.position&&0!==n)return!1;if("odd"===t.position&&n%2!=1)return!1;if("even"===t.position&&n%2!=0)return!1;if("nth"===t.position&&n!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return new Proxy(this,{get(t,e,s){if(n.has(e))return()=>{throw new TypeError(`Cannot call '${e}' on a read-only Matcher. Obtain a writable instance to mutate state.`)};const i=Reflect.get(t,e,s);return"path"===e||"siblingStacks"===e?Object.freeze(Array.isArray(i)?i.map(t=>t instanceof Map?Object.freeze(new Map(t)):Object.freeze({...t})):i):"function"==typeof i?i.bind(t):i},set(t,e){throw new TypeError(`Cannot set property '${String(e)}' on a read-only Matcher.`)},deleteProperty(t,e){throw new TypeError(`Cannot delete property '${String(e)}' from a read-only Matcher.`)}})}}const r={Expression:s,Matcher:i};module.exports=e})();
1
+ (()=>{"use strict";var t={d:(e,s)=>{for(var i in s)t.o(s,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Expression:()=>s,Matcher:()=>n,default:()=>r});class s{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let s=0,i="";for(;s<t.length;)t[s]===this.separator?s+1<t.length&&t[s+1]===this.separator?(i.trim()&&(e.push(this._parseSegment(i.trim())),i=""),e.push({type:"deep-wildcard"}),s+=2):(i.trim()&&e.push(this._parseSegment(i.trim())),i="",s++):(i+=t[s],s++);return i.trim()&&e.push(this._parseSegment(i.trim())),e}_parseSegment(t){const e={type:"tag"};let s=null,i=t;const n=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(n&&(i=n[1]+n[3],n[2])){const t=n[2].slice(1,-1);t&&(s=t)}let r,a,h=i;if(i.includes("::")){const e=i.indexOf("::");if(r=i.substring(0,e).trim(),h=i.substring(e+2).trim(),!r)throw new Error(`Invalid namespace in pattern: ${t}`)}let o=null;if(h.includes(":")){const t=h.lastIndexOf(":"),e=h.substring(0,t).trim(),s=h.substring(t+1).trim();["first","last","odd","even"].includes(s)||/^nth\(\d+\)$/.test(s)?(a=e,o=s):a=h}else a=h;if(!a)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=a,r&&(e.namespace=r),s)if(s.includes("=")){const t=s.indexOf("=");e.attrName=s.substring(0,t).trim(),e.attrValue=s.substring(t+1).trim()}else e.attrName=s.trim();if(o){const t=o.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=o}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}const i=new Set(["push","pop","reset","updateCurrent","restore"]);class n{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,s=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const i=this.path.length;this.siblingStacks[i]||(this.siblingStacks[i]=new Map);const n=this.siblingStacks[i],r=s?`${s}:${t}`:t,a=n.get(r)||0;let h=0;for(const t of n.values())h+=t;n.set(r,a+1);const o={tag:t,position:h,counter:a};null!=s&&(o.namespace=s),null!=e&&(o.values=e),this.path.push(o)}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const s=t||this.separator;if(s===this.separator&&!0===e){if(null!==this._pathStringCache&&void 0!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const s=t[e],i=this.path[e],n=e===this.path.length-1;if(!this._matchSegment(s,i,n))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,s=t.length-1;for(;s>=0&&e>=0;){const i=t[s];if("deep-wildcard"===i.type){if(s--,s<0)return!0;const i=t[s];let n=!1;for(let t=e;t>=0;t--){const r=t===this.path.length-1;if(this._matchSegment(i,this.path[t],r)){e=t-1,s--,n=!0;break}}if(!n)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(i,this.path[e],t))return!1;e--,s--}}return s<0}_matchSegment(t,e,s){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!s)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const s=e.values[t.attrName];if(String(s)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!s)return!1;const i=e.counter??0;if("first"===t.position&&0!==i)return!1;if("odd"===t.position&&i%2!=1)return!1;if("even"===t.position&&i%2!=0)return!1;if("nth"===t.position&&i!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return new Proxy(this,{get(t,e,s){if(i.has(e))return()=>{throw new TypeError(`Cannot call '${e}' on a read-only Matcher. Obtain a writable instance to mutate state.`)};const n=Reflect.get(t,e,s);return"path"===e||"siblingStacks"===e?Object.freeze(Array.isArray(n)?n.map(t=>t instanceof Map?Object.freeze(new Map(t)):Object.freeze({...t})):n):"function"==typeof n?n.bind(t):n},set(t,e){throw new TypeError(`Cannot set property '${String(e)}' on a read-only Matcher.`)},deleteProperty(t,e){throw new TypeError(`Cannot delete property '${String(e)}' from a read-only Matcher.`)}})}}const r={Expression:s,Matcher:n};module.exports=e})();
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.pem=e():t.pem=e()}(this,()=>(()=>{"use strict";var t={d:(e,s)=>{for(var n in s)t.o(s,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:s[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Expression:()=>s,Matcher:()=>i,default:()=>r});class s{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let s=0,n="";for(;s<t.length;)t[s]===this.separator?s+1<t.length&&t[s+1]===this.separator?(n.trim()&&(e.push(this._parseSegment(n.trim())),n=""),e.push({type:"deep-wildcard"}),s+=2):(n.trim()&&e.push(this._parseSegment(n.trim())),n="",s++):(n+=t[s],s++);return n.trim()&&e.push(this._parseSegment(n.trim())),e}_parseSegment(t){const e={type:"tag"};let s=null,n=t;const i=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(i&&(n=i[1]+i[3],i[2])){const t=i[2].slice(1,-1);t&&(s=t)}let r,a,h=n;if(n.includes("::")){const e=n.indexOf("::");if(r=n.substring(0,e).trim(),h=n.substring(e+2).trim(),!r)throw new Error(`Invalid namespace in pattern: ${t}`)}let o=null;if(h.includes(":")){const t=h.lastIndexOf(":"),e=h.substring(0,t).trim(),s=h.substring(t+1).trim();["first","last","odd","even"].includes(s)||/^nth\(\d+\)$/.test(s)?(a=e,o=s):a=h}else a=h;if(!a)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=a,r&&(e.namespace=r),s)if(s.includes("=")){const t=s.indexOf("=");e.attrName=s.substring(0,t).trim(),e.attrValue=s.substring(t+1).trim()}else e.attrName=s.trim();if(o){const t=o.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=o}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}const n=new Set(["push","pop","reset","updateCurrent","restore"]);class i{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,s=null){this.path.length>0&&(this.path[this.path.length-1].values=void 0);const n=this.path.length;this.siblingStacks[n]||(this.siblingStacks[n]=new Map);const i=this.siblingStacks[n],r=s?`${s}:${t}`:t,a=i.get(r)||0;let h=0;for(const t of i.values())h+=t;i.set(r,a+1);const o={tag:t,position:h,counter:a};null!=s&&(o.namespace=s),null!=e&&(o.values=e),this.path.push(o)}pop(){if(0===this.path.length)return;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const s=t||this.separator;return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s)}toArray(){return this.path.map(t=>t.tag)}reset(){this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const s=t[e],n=this.path[e],i=e===this.path.length-1;if(!this._matchSegment(s,n,i))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,s=t.length-1;for(;s>=0&&e>=0;){const n=t[s];if("deep-wildcard"===n.type){if(s--,s<0)return!0;const n=t[s];let i=!1;for(let t=e;t>=0;t--){const r=t===this.path.length-1;if(this._matchSegment(n,this.path[t],r)){e=t-1,s--,i=!0;break}}if(!i)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(n,this.path[e],t))return!1;e--,s--}}return s<0}_matchSegment(t,e,s){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!s)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const s=e.values[t.attrName];if(String(s)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!s)return!1;const n=e.counter??0;if("first"===t.position&&0!==n)return!1;if("odd"===t.position&&n%2!=1)return!1;if("even"===t.position&&n%2!=0)return!1;if("nth"===t.position&&n!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return new Proxy(this,{get(t,e,s){if(n.has(e))return()=>{throw new TypeError(`Cannot call '${e}' on a read-only Matcher. Obtain a writable instance to mutate state.`)};const i=Reflect.get(t,e,s);return"path"===e||"siblingStacks"===e?Object.freeze(Array.isArray(i)?i.map(t=>t instanceof Map?Object.freeze(new Map(t)):Object.freeze({...t})):i):"function"==typeof i?i.bind(t):i},set(t,e){throw new TypeError(`Cannot set property '${String(e)}' on a read-only Matcher.`)},deleteProperty(t,e){throw new TypeError(`Cannot delete property '${String(e)}' from a read-only Matcher.`)}})}}const r={Expression:s,Matcher:i};return e})());
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.pem=e():t.pem=e()}(this,()=>(()=>{"use strict";var t={d:(e,s)=>{for(var n in s)t.o(s,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:s[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{Expression:()=>s,Matcher:()=>i,default:()=>r});class s{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let s=0,n="";for(;s<t.length;)t[s]===this.separator?s+1<t.length&&t[s+1]===this.separator?(n.trim()&&(e.push(this._parseSegment(n.trim())),n=""),e.push({type:"deep-wildcard"}),s+=2):(n.trim()&&e.push(this._parseSegment(n.trim())),n="",s++):(n+=t[s],s++);return n.trim()&&e.push(this._parseSegment(n.trim())),e}_parseSegment(t){const e={type:"tag"};let s=null,n=t;const i=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(i&&(n=i[1]+i[3],i[2])){const t=i[2].slice(1,-1);t&&(s=t)}let r,a,h=n;if(n.includes("::")){const e=n.indexOf("::");if(r=n.substring(0,e).trim(),h=n.substring(e+2).trim(),!r)throw new Error(`Invalid namespace in pattern: ${t}`)}let o=null;if(h.includes(":")){const t=h.lastIndexOf(":"),e=h.substring(0,t).trim(),s=h.substring(t+1).trim();["first","last","odd","even"].includes(s)||/^nth\(\d+\)$/.test(s)?(a=e,o=s):a=h}else a=h;if(!a)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=a,r&&(e.namespace=r),s)if(s.includes("=")){const t=s.indexOf("=");e.attrName=s.substring(0,t).trim(),e.attrValue=s.substring(t+1).trim()}else e.attrName=s.trim();if(o){const t=o.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=o}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}const n=new Set(["push","pop","reset","updateCurrent","restore"]);class i{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,s=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const n=this.path.length;this.siblingStacks[n]||(this.siblingStacks[n]=new Map);const i=this.siblingStacks[n],r=s?`${s}:${t}`:t,a=i.get(r)||0;let h=0;for(const t of i.values())h+=t;i.set(r,a+1);const o={tag:t,position:h,counter:a};null!=s&&(o.namespace=s),null!=e&&(o.values=e),this.path.push(o)}pop(){if(0===this.path.length)return;this._pathStringCache=null;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const s=t||this.separator;if(s===this.separator&&!0===e){if(null!==this._pathStringCache&&void 0!==this._pathStringCache)return this._pathStringCache;const t=this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s);return this._pathStringCache=t,t}return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(s)}toArray(){return this.path.map(t=>t.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const s=t[e],n=this.path[e],i=e===this.path.length-1;if(!this._matchSegment(s,n,i))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,s=t.length-1;for(;s>=0&&e>=0;){const n=t[s];if("deep-wildcard"===n.type){if(s--,s<0)return!0;const n=t[s];let i=!1;for(let t=e;t>=0;t--){const r=t===this.path.length-1;if(this._matchSegment(n,this.path[t],r)){e=t-1,s--,i=!0;break}}if(!i)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(n,this.path[e],t))return!1;e--,s--}}return s<0}_matchSegment(t,e,s){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!s)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const s=e.values[t.attrName];if(String(s)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!s)return!1;const n=e.counter??0;if("first"===t.position&&0!==n)return!1;if("odd"===t.position&&n%2!=1)return!1;if("even"===t.position&&n%2!=0)return!1;if("nth"===t.position&&n!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this._pathStringCache=null,this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}readOnly(){return new Proxy(this,{get(t,e,s){if(n.has(e))return()=>{throw new TypeError(`Cannot call '${e}' on a read-only Matcher. Obtain a writable instance to mutate state.`)};const i=Reflect.get(t,e,s);return"path"===e||"siblingStacks"===e?Object.freeze(Array.isArray(i)?i.map(t=>t instanceof Map?Object.freeze(new Map(t)):Object.freeze({...t})):i):"function"==typeof i?i.bind(t):i},set(t,e){throw new TypeError(`Cannot set property '${String(e)}' on a read-only Matcher.`)},deleteProperty(t,e){throw new TypeError(`Cannot delete property '${String(e)}' from a read-only Matcher.`)}})}}const r={Expression:s,Matcher:i};return e})());
2
2
  //# sourceMappingURL=pem.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"./lib/pem.min.js","mappings":"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","sources":["webpack://pem/webpack/universalModuleDefinition","webpack://pem/webpack/bootstrap","webpack://pem/webpack/runtime/define property getters","webpack://pem/webpack/runtime/hasOwnProperty shorthand","webpack://pem/webpack/runtime/make namespace object","webpack://pem/./src/Expression.js","webpack://pem/./src/Matcher.js","webpack://pem/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pem\"] = factory();\n\telse\n\t\troot[\"pem\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Expression - Parses and stores a tag pattern expression\n * \n * Patterns are parsed once and stored in an optimized structure for fast matching.\n * \n * @example\n * const expr = new Expression(\"root.users.user\");\n * const expr2 = new Expression(\"..user[id]:first\");\n * const expr3 = new Expression(\"root/users/user\", { separator: '/' });\n */\nexport default class Expression {\n /**\n * Create a new Expression\n * @param {string} pattern - Pattern string (e.g., \"root.users.user\", \"..user[id]\")\n * @param {Object} options - Configuration options\n * @param {string} options.separator - Path separator (default: '.')\n */\n constructor(pattern, options = {}) {\n this.pattern = pattern;\n this.separator = options.separator || '.';\n this.segments = this._parse(pattern);\n\n // Cache expensive checks for performance (O(1) instead of O(n))\n this._hasDeepWildcard = this.segments.some(seg => seg.type === 'deep-wildcard');\n this._hasAttributeCondition = this.segments.some(seg => seg.attrName !== undefined);\n this._hasPositionSelector = this.segments.some(seg => seg.position !== undefined);\n }\n\n /**\n * Parse pattern string into segments\n * @private\n * @param {string} pattern - Pattern to parse\n * @returns {Array} Array of segment objects\n */\n _parse(pattern) {\n const segments = [];\n\n // Split by separator but handle \"..\" specially\n let i = 0;\n let currentPart = '';\n\n while (i < pattern.length) {\n if (pattern[i] === this.separator) {\n // Check if next char is also separator (deep wildcard)\n if (i + 1 < pattern.length && pattern[i + 1] === this.separator) {\n // Flush current part if any\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n currentPart = '';\n }\n // Add deep wildcard\n segments.push({ type: 'deep-wildcard' });\n i += 2; // Skip both separators\n } else {\n // Regular separator\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n currentPart = '';\n i++;\n }\n } else {\n currentPart += pattern[i];\n i++;\n }\n }\n\n // Flush remaining part\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n\n return segments;\n }\n\n /**\n * Parse a single segment\n * @private\n * @param {string} part - Segment string (e.g., \"user\", \"ns::user\", \"user[id]\", \"ns::user:first\")\n * @returns {Object} Segment object\n */\n _parseSegment(part) {\n const segment = { type: 'tag' };\n\n // NEW NAMESPACE SYNTAX (v2.0):\n // ============================\n // Namespace uses DOUBLE colon (::)\n // Position uses SINGLE colon (:)\n // \n // Examples:\n // \"user\" → tag\n // \"user:first\" → tag + position\n // \"user[id]\" → tag + attribute\n // \"user[id]:first\" → tag + attribute + position\n // \"ns::user\" → namespace + tag\n // \"ns::user:first\" → namespace + tag + position\n // \"ns::user[id]\" → namespace + tag + attribute\n // \"ns::user[id]:first\" → namespace + tag + attribute + position\n // \"ns::first\" → namespace + tag named \"first\" (NO ambiguity!)\n //\n // This eliminates all ambiguity:\n // :: = namespace separator\n // : = position selector\n // [] = attributes\n\n // Step 1: Extract brackets [attr] or [attr=value]\n let bracketContent = null;\n let withoutBrackets = part;\n\n const bracketMatch = part.match(/^([^\\[]+)(\\[[^\\]]*\\])(.*)$/);\n if (bracketMatch) {\n withoutBrackets = bracketMatch[1] + bracketMatch[3];\n if (bracketMatch[2]) {\n const content = bracketMatch[2].slice(1, -1);\n if (content) {\n bracketContent = content;\n }\n }\n }\n\n // Step 2: Check for namespace (double colon ::)\n let namespace = undefined;\n let tagAndPosition = withoutBrackets;\n\n if (withoutBrackets.includes('::')) {\n const nsIndex = withoutBrackets.indexOf('::');\n namespace = withoutBrackets.substring(0, nsIndex).trim();\n tagAndPosition = withoutBrackets.substring(nsIndex + 2).trim(); // Skip ::\n\n if (!namespace) {\n throw new Error(`Invalid namespace in pattern: ${part}`);\n }\n }\n\n // Step 3: Parse tag and position (single colon :)\n let tag = undefined;\n let positionMatch = null;\n\n if (tagAndPosition.includes(':')) {\n const colonIndex = tagAndPosition.lastIndexOf(':'); // Use last colon for position\n const tagPart = tagAndPosition.substring(0, colonIndex).trim();\n const posPart = tagAndPosition.substring(colonIndex + 1).trim();\n\n // Verify position is a valid keyword\n const isPositionKeyword = ['first', 'last', 'odd', 'even'].includes(posPart) ||\n /^nth\\(\\d+\\)$/.test(posPart);\n\n if (isPositionKeyword) {\n tag = tagPart;\n positionMatch = posPart;\n } else {\n // Not a valid position keyword, treat whole thing as tag\n tag = tagAndPosition;\n }\n } else {\n tag = tagAndPosition;\n }\n\n if (!tag) {\n throw new Error(`Invalid segment pattern: ${part}`);\n }\n\n segment.tag = tag;\n if (namespace) {\n segment.namespace = namespace;\n }\n\n // Step 4: Parse attributes\n if (bracketContent) {\n if (bracketContent.includes('=')) {\n const eqIndex = bracketContent.indexOf('=');\n segment.attrName = bracketContent.substring(0, eqIndex).trim();\n segment.attrValue = bracketContent.substring(eqIndex + 1).trim();\n } else {\n segment.attrName = bracketContent.trim();\n }\n }\n\n // Step 5: Parse position selector\n if (positionMatch) {\n const nthMatch = positionMatch.match(/^nth\\((\\d+)\\)$/);\n if (nthMatch) {\n segment.position = 'nth';\n segment.positionValue = parseInt(nthMatch[1], 10);\n } else {\n segment.position = positionMatch;\n }\n }\n\n return segment;\n }\n\n /**\n * Get the number of segments\n * @returns {number}\n */\n get length() {\n return this.segments.length;\n }\n\n /**\n * Check if expression contains deep wildcard\n * @returns {boolean}\n */\n hasDeepWildcard() {\n return this._hasDeepWildcard;\n }\n\n /**\n * Check if expression has attribute conditions\n * @returns {boolean}\n */\n hasAttributeCondition() {\n return this._hasAttributeCondition;\n }\n\n /**\n * Check if expression has position selectors\n * @returns {boolean}\n */\n hasPositionSelector() {\n return this._hasPositionSelector;\n }\n\n /**\n * Get string representation\n * @returns {string}\n */\n toString() {\n return this.pattern;\n }\n}","/**\n * Matcher - Tracks current path in XML/JSON tree and matches against Expressions\n * \n * The matcher maintains a stack of nodes representing the current path from root to\n * current tag. It only stores attribute values for the current (top) node to minimize\n * memory usage. Sibling tracking is used to auto-calculate position and counter.\n * \n * @example\n * const matcher = new Matcher();\n * matcher.push(\"root\", {});\n * matcher.push(\"users\", {});\n * matcher.push(\"user\", { id: \"123\", type: \"admin\" });\n * \n * const expr = new Expression(\"root.users.user\");\n * matcher.matches(expr); // true\n */\n\n/**\n * Names of methods that mutate Matcher state.\n * Any attempt to call these on a read-only view throws a TypeError.\n * @type {Set<string>}\n */\nconst MUTATING_METHODS = new Set(['push', 'pop', 'reset', 'updateCurrent', 'restore']);\n\nexport default class Matcher {\n /**\n * Create a new Matcher\n * @param {Object} options - Configuration options\n * @param {string} options.separator - Default path separator (default: '.')\n */\n constructor(options = {}) {\n this.separator = options.separator || '.';\n this.path = [];\n this.siblingStacks = [];\n // Each path node: { tag: string, values: object, position: number, counter: number }\n // values only present for current (last) node\n // Each siblingStacks entry: Map<tagName, count> tracking occurrences at each level\n }\n\n /**\n * Push a new tag onto the path\n * @param {string} tagName - Name of the tag\n * @param {Object} attrValues - Attribute key-value pairs for current node (optional)\n * @param {string} namespace - Namespace for the tag (optional)\n */\n push(tagName, attrValues = null, namespace = null) {\n // Remove values from previous current node (now becoming ancestor)\n if (this.path.length > 0) {\n const prev = this.path[this.path.length - 1];\n prev.values = undefined;\n }\n\n // Get or create sibling tracking for current level\n const currentLevel = this.path.length;\n if (!this.siblingStacks[currentLevel]) {\n this.siblingStacks[currentLevel] = new Map();\n }\n\n const siblings = this.siblingStacks[currentLevel];\n\n // Create a unique key for sibling tracking that includes namespace\n const siblingKey = namespace ? `${namespace}:${tagName}` : tagName;\n\n // Calculate counter (how many times this tag appeared at this level)\n const counter = siblings.get(siblingKey) || 0;\n\n // Calculate position (total children at this level so far)\n let position = 0;\n for (const count of siblings.values()) {\n position += count;\n }\n\n // Update sibling count for this tag\n siblings.set(siblingKey, counter + 1);\n\n // Create new node\n const node = {\n tag: tagName,\n position: position,\n counter: counter\n };\n\n // Store namespace if provided\n if (namespace !== null && namespace !== undefined) {\n node.namespace = namespace;\n }\n\n // Store values only for current node\n if (attrValues !== null && attrValues !== undefined) {\n node.values = attrValues;\n }\n\n this.path.push(node);\n }\n\n /**\n * Pop the last tag from the path\n * @returns {Object|undefined} The popped node\n */\n pop() {\n if (this.path.length === 0) {\n return undefined;\n }\n\n const node = this.path.pop();\n\n // Clean up sibling tracking for levels deeper than current\n // After pop, path.length is the new depth\n // We need to clean up siblingStacks[path.length + 1] and beyond\n if (this.siblingStacks.length > this.path.length + 1) {\n this.siblingStacks.length = this.path.length + 1;\n }\n\n return node;\n }\n\n /**\n * Update current node's attribute values\n * Useful when attributes are parsed after push\n * @param {Object} attrValues - Attribute values\n */\n updateCurrent(attrValues) {\n if (this.path.length > 0) {\n const current = this.path[this.path.length - 1];\n if (attrValues !== null && attrValues !== undefined) {\n current.values = attrValues;\n }\n }\n }\n\n /**\n * Get current tag name\n * @returns {string|undefined}\n */\n getCurrentTag() {\n return this.path.length > 0 ? this.path[this.path.length - 1].tag : undefined;\n }\n\n /**\n * Get current namespace\n * @returns {string|undefined}\n */\n getCurrentNamespace() {\n return this.path.length > 0 ? this.path[this.path.length - 1].namespace : undefined;\n }\n\n /**\n * Get current node's attribute value\n * @param {string} attrName - Attribute name\n * @returns {*} Attribute value or undefined\n */\n getAttrValue(attrName) {\n if (this.path.length === 0) return undefined;\n const current = this.path[this.path.length - 1];\n return current.values?.[attrName];\n }\n\n /**\n * Check if current node has an attribute\n * @param {string} attrName - Attribute name\n * @returns {boolean}\n */\n hasAttr(attrName) {\n if (this.path.length === 0) return false;\n const current = this.path[this.path.length - 1];\n return current.values !== undefined && attrName in current.values;\n }\n\n /**\n * Get current node's sibling position (child index in parent)\n * @returns {number}\n */\n getPosition() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].position ?? 0;\n }\n\n /**\n * Get current node's repeat counter (occurrence count of this tag name)\n * @returns {number}\n */\n getCounter() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].counter ?? 0;\n }\n\n /**\n * Get current node's sibling index (alias for getPosition for backward compatibility)\n * @returns {number}\n * @deprecated Use getPosition() or getCounter() instead\n */\n getIndex() {\n return this.getPosition();\n }\n\n /**\n * Get current path depth\n * @returns {number}\n */\n getDepth() {\n return this.path.length;\n }\n\n /**\n * Get path as string\n * @param {string} separator - Optional separator (uses default if not provided)\n * @param {boolean} includeNamespace - Whether to include namespace in output (default: true)\n * @returns {string}\n */\n toString(separator, includeNamespace = true) {\n const sep = separator || this.separator;\n return this.path.map(n => {\n if (includeNamespace && n.namespace) {\n return `${n.namespace}:${n.tag}`;\n }\n return n.tag;\n }).join(sep);\n }\n\n /**\n * Get path as array of tag names\n * @returns {string[]}\n */\n toArray() {\n return this.path.map(n => n.tag);\n }\n\n /**\n * Reset the path to empty\n */\n reset() {\n this.path = [];\n this.siblingStacks = [];\n }\n\n /**\n * Match current path against an Expression\n * @param {Expression} expression - The expression to match against\n * @returns {boolean} True if current path matches the expression\n */\n matches(expression) {\n const segments = expression.segments;\n\n if (segments.length === 0) {\n return false;\n }\n\n // Handle deep wildcard patterns\n if (expression.hasDeepWildcard()) {\n return this._matchWithDeepWildcard(segments);\n }\n\n // Simple path matching (no deep wildcards)\n return this._matchSimple(segments);\n }\n\n /**\n * Match simple path (no deep wildcards)\n * @private\n */\n _matchSimple(segments) {\n // Path must be same length as segments\n if (this.path.length !== segments.length) {\n return false;\n }\n\n // Match each segment bottom-to-top\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const node = this.path[i];\n const isCurrentNode = (i === this.path.length - 1);\n\n if (!this._matchSegment(segment, node, isCurrentNode)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Match path with deep wildcards\n * @private\n */\n _matchWithDeepWildcard(segments) {\n let pathIdx = this.path.length - 1; // Start from current node (bottom)\n let segIdx = segments.length - 1; // Start from last segment\n\n while (segIdx >= 0 && pathIdx >= 0) {\n const segment = segments[segIdx];\n\n if (segment.type === 'deep-wildcard') {\n // \"..\" matches zero or more levels\n segIdx--;\n\n if (segIdx < 0) {\n // Pattern ends with \"..\", always matches\n return true;\n }\n\n // Find where next segment matches in the path\n const nextSeg = segments[segIdx];\n let found = false;\n\n for (let i = pathIdx; i >= 0; i--) {\n const isCurrentNode = (i === this.path.length - 1);\n if (this._matchSegment(nextSeg, this.path[i], isCurrentNode)) {\n pathIdx = i - 1;\n segIdx--;\n found = true;\n break;\n }\n }\n\n if (!found) {\n return false;\n }\n } else {\n // Regular segment\n const isCurrentNode = (pathIdx === this.path.length - 1);\n if (!this._matchSegment(segment, this.path[pathIdx], isCurrentNode)) {\n return false;\n }\n pathIdx--;\n segIdx--;\n }\n }\n\n // All segments must be consumed\n return segIdx < 0;\n }\n\n /**\n * Match a single segment against a node\n * @private\n * @param {Object} segment - Segment from Expression\n * @param {Object} node - Node from path\n * @param {boolean} isCurrentNode - Whether this is the current (last) node\n * @returns {boolean}\n */\n _matchSegment(segment, node, isCurrentNode) {\n // Match tag name (* is wildcard)\n if (segment.tag !== '*' && segment.tag !== node.tag) {\n return false;\n }\n\n // Match namespace if specified in segment\n if (segment.namespace !== undefined) {\n // Segment has namespace - node must match it\n if (segment.namespace !== '*' && segment.namespace !== node.namespace) {\n return false;\n }\n }\n // If segment has no namespace, it matches nodes with or without namespace\n\n // Match attribute name (check if node has this attribute)\n // Can only check for current node since ancestors don't have values\n if (segment.attrName !== undefined) {\n if (!isCurrentNode) {\n // Can't check attributes for ancestor nodes (values not stored)\n return false;\n }\n\n if (!node.values || !(segment.attrName in node.values)) {\n return false;\n }\n\n // Match attribute value (only possible for current node)\n if (segment.attrValue !== undefined) {\n const actualValue = node.values[segment.attrName];\n // Both should be strings\n if (String(actualValue) !== String(segment.attrValue)) {\n return false;\n }\n }\n }\n\n // Match position (only for current node)\n if (segment.position !== undefined) {\n if (!isCurrentNode) {\n // Can't check position for ancestor nodes\n return false;\n }\n\n const counter = node.counter ?? 0;\n\n if (segment.position === 'first' && counter !== 0) {\n return false;\n } else if (segment.position === 'odd' && counter % 2 !== 1) {\n return false;\n } else if (segment.position === 'even' && counter % 2 !== 0) {\n return false;\n } else if (segment.position === 'nth') {\n if (counter !== segment.positionValue) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Create a snapshot of current state\n * @returns {Object} State snapshot\n */\n snapshot() {\n return {\n path: this.path.map(node => ({ ...node })),\n siblingStacks: this.siblingStacks.map(map => new Map(map))\n };\n }\n\n /**\n * Restore state from snapshot\n * @param {Object} snapshot - State snapshot\n */\n restore(snapshot) {\n this.path = snapshot.path.map(node => ({ ...node }));\n this.siblingStacks = snapshot.siblingStacks.map(map => new Map(map));\n }\n\n /**\n * Return a read-only view of this matcher.\n *\n * The returned object exposes all query/inspection methods but throws a\n * TypeError if any state-mutating method is called (`push`, `pop`, `reset`,\n * `updateCurrent`, `restore`). Property reads (e.g. `.path`, `.separator`)\n * are allowed but the returned arrays/objects are frozen so callers cannot\n * mutate internal state through them either.\n *\n * @returns {ReadOnlyMatcher} A proxy that forwards read operations and blocks writes.\n *\n * @example\n * const matcher = new Matcher();\n * matcher.push(\"root\", {});\n *\n * const ro = matcher.readOnly();\n * ro.matches(expr); // ✓ works\n * ro.getCurrentTag(); // ✓ works\n * ro.push(\"child\", {}); // ✗ throws TypeError\n * ro.reset(); // ✗ throws TypeError\n */\n readOnly() {\n const self = this;\n\n return new Proxy(self, {\n get(target, prop, receiver) {\n // Block mutating methods\n if (MUTATING_METHODS.has(prop)) {\n return () => {\n throw new TypeError(\n `Cannot call '${prop}' on a read-only Matcher. ` +\n `Obtain a writable instance to mutate state.`\n );\n };\n }\n\n const value = Reflect.get(target, prop, receiver);\n\n // Freeze array/object properties so callers can't mutate internal\n // state through direct property access (e.g. matcher.path.push(...))\n if (prop === 'path' || prop === 'siblingStacks') {\n return Object.freeze(\n Array.isArray(value)\n ? value.map(item =>\n item instanceof Map\n ? Object.freeze(new Map(item)) // freeze a copy of each Map\n : Object.freeze({ ...item }) // freeze a copy of each node\n )\n : value\n );\n }\n\n // Bind methods so `this` inside them still refers to the real Matcher\n if (typeof value === 'function') {\n return value.bind(target);\n }\n\n return value;\n },\n\n // Prevent any property assignment on the read-only view\n set(_target, prop) {\n throw new TypeError(\n `Cannot set property '${String(prop)}' on a read-only Matcher.`\n );\n },\n\n // Prevent property deletion\n deleteProperty(_target, prop) {\n throw new TypeError(\n `Cannot delete property '${String(prop)}' from a read-only Matcher.`\n );\n }\n });\n }\n}","/**\n * fast-xml-tagger - XML/JSON path matching library\n * \n * Provides efficient path tracking and pattern matching for XML/JSON parsers.\n * \n * @example\n * import { Expression, Matcher } from 'fast-xml-tagger';\n * \n * // Create expression (parse once)\n * const expr = new Expression(\"root.users.user[id]\");\n * \n * // Create matcher (track path)\n * const matcher = new Matcher();\n * matcher.push(\"root\", [], {}, 0);\n * matcher.push(\"users\", [], {}, 0);\n * matcher.push(\"user\", [\"id\", \"type\"], { id: \"123\", type: \"admin\" }, 0);\n * \n * // Match\n * if (matcher.matches(expr)) {\n * console.log(\"Match found!\");\n * }\n */\n\nimport Expression from './Expression.js';\nimport Matcher from './Matcher.js';\n\nexport { Expression, Matcher };\nexport default { Expression, Matcher };\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Expression","constructor","pattern","options","separator","segments","_parse","_hasDeepWildcard","some","seg","type","_hasAttributeCondition","undefined","attrName","_hasPositionSelector","position","i","currentPart","length","trim","push","_parseSegment","part","segment","bracketContent","withoutBrackets","bracketMatch","match","content","slice","namespace","tag","tagAndPosition","includes","nsIndex","indexOf","substring","Error","positionMatch","colonIndex","lastIndexOf","tagPart","posPart","test","eqIndex","attrValue","nthMatch","positionValue","parseInt","hasDeepWildcard","hasAttributeCondition","hasPositionSelector","toString","MUTATING_METHODS","Set","Matcher","path","siblingStacks","tagName","attrValues","values","currentLevel","Map","siblings","siblingKey","counter","count","set","node","pop","updateCurrent","current","getCurrentTag","getCurrentNamespace","getAttrValue","hasAttr","getPosition","getCounter","getIndex","getDepth","includeNamespace","sep","map","n","join","toArray","reset","matches","expression","_matchWithDeepWildcard","_matchSimple","isCurrentNode","_matchSegment","pathIdx","segIdx","nextSeg","found","actualValue","String","snapshot","restore","readOnly","Proxy","target","receiver","has","TypeError","Reflect","freeze","Array","isArray","item","bind","_target","deleteProperty"],"sourceRoot":""}
1
+ {"version":3,"file":"./lib/pem.min.js","mappings":"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","sources":["webpack://pem/webpack/universalModuleDefinition","webpack://pem/webpack/bootstrap","webpack://pem/webpack/runtime/define property getters","webpack://pem/webpack/runtime/hasOwnProperty shorthand","webpack://pem/webpack/runtime/make namespace object","webpack://pem/./src/Expression.js","webpack://pem/./src/Matcher.js","webpack://pem/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pem\"] = factory();\n\telse\n\t\troot[\"pem\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Expression - Parses and stores a tag pattern expression\n * \n * Patterns are parsed once and stored in an optimized structure for fast matching.\n * \n * @example\n * const expr = new Expression(\"root.users.user\");\n * const expr2 = new Expression(\"..user[id]:first\");\n * const expr3 = new Expression(\"root/users/user\", { separator: '/' });\n */\nexport default class Expression {\n /**\n * Create a new Expression\n * @param {string} pattern - Pattern string (e.g., \"root.users.user\", \"..user[id]\")\n * @param {Object} options - Configuration options\n * @param {string} options.separator - Path separator (default: '.')\n */\n constructor(pattern, options = {}) {\n this.pattern = pattern;\n this.separator = options.separator || '.';\n this.segments = this._parse(pattern);\n\n // Cache expensive checks for performance (O(1) instead of O(n))\n this._hasDeepWildcard = this.segments.some(seg => seg.type === 'deep-wildcard');\n this._hasAttributeCondition = this.segments.some(seg => seg.attrName !== undefined);\n this._hasPositionSelector = this.segments.some(seg => seg.position !== undefined);\n }\n\n /**\n * Parse pattern string into segments\n * @private\n * @param {string} pattern - Pattern to parse\n * @returns {Array} Array of segment objects\n */\n _parse(pattern) {\n const segments = [];\n\n // Split by separator but handle \"..\" specially\n let i = 0;\n let currentPart = '';\n\n while (i < pattern.length) {\n if (pattern[i] === this.separator) {\n // Check if next char is also separator (deep wildcard)\n if (i + 1 < pattern.length && pattern[i + 1] === this.separator) {\n // Flush current part if any\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n currentPart = '';\n }\n // Add deep wildcard\n segments.push({ type: 'deep-wildcard' });\n i += 2; // Skip both separators\n } else {\n // Regular separator\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n currentPart = '';\n i++;\n }\n } else {\n currentPart += pattern[i];\n i++;\n }\n }\n\n // Flush remaining part\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n\n return segments;\n }\n\n /**\n * Parse a single segment\n * @private\n * @param {string} part - Segment string (e.g., \"user\", \"ns::user\", \"user[id]\", \"ns::user:first\")\n * @returns {Object} Segment object\n */\n _parseSegment(part) {\n const segment = { type: 'tag' };\n\n // NEW NAMESPACE SYNTAX (v2.0):\n // ============================\n // Namespace uses DOUBLE colon (::)\n // Position uses SINGLE colon (:)\n // \n // Examples:\n // \"user\" → tag\n // \"user:first\" → tag + position\n // \"user[id]\" → tag + attribute\n // \"user[id]:first\" → tag + attribute + position\n // \"ns::user\" → namespace + tag\n // \"ns::user:first\" → namespace + tag + position\n // \"ns::user[id]\" → namespace + tag + attribute\n // \"ns::user[id]:first\" → namespace + tag + attribute + position\n // \"ns::first\" → namespace + tag named \"first\" (NO ambiguity!)\n //\n // This eliminates all ambiguity:\n // :: = namespace separator\n // : = position selector\n // [] = attributes\n\n // Step 1: Extract brackets [attr] or [attr=value]\n let bracketContent = null;\n let withoutBrackets = part;\n\n const bracketMatch = part.match(/^([^\\[]+)(\\[[^\\]]*\\])(.*)$/);\n if (bracketMatch) {\n withoutBrackets = bracketMatch[1] + bracketMatch[3];\n if (bracketMatch[2]) {\n const content = bracketMatch[2].slice(1, -1);\n if (content) {\n bracketContent = content;\n }\n }\n }\n\n // Step 2: Check for namespace (double colon ::)\n let namespace = undefined;\n let tagAndPosition = withoutBrackets;\n\n if (withoutBrackets.includes('::')) {\n const nsIndex = withoutBrackets.indexOf('::');\n namespace = withoutBrackets.substring(0, nsIndex).trim();\n tagAndPosition = withoutBrackets.substring(nsIndex + 2).trim(); // Skip ::\n\n if (!namespace) {\n throw new Error(`Invalid namespace in pattern: ${part}`);\n }\n }\n\n // Step 3: Parse tag and position (single colon :)\n let tag = undefined;\n let positionMatch = null;\n\n if (tagAndPosition.includes(':')) {\n const colonIndex = tagAndPosition.lastIndexOf(':'); // Use last colon for position\n const tagPart = tagAndPosition.substring(0, colonIndex).trim();\n const posPart = tagAndPosition.substring(colonIndex + 1).trim();\n\n // Verify position is a valid keyword\n const isPositionKeyword = ['first', 'last', 'odd', 'even'].includes(posPart) ||\n /^nth\\(\\d+\\)$/.test(posPart);\n\n if (isPositionKeyword) {\n tag = tagPart;\n positionMatch = posPart;\n } else {\n // Not a valid position keyword, treat whole thing as tag\n tag = tagAndPosition;\n }\n } else {\n tag = tagAndPosition;\n }\n\n if (!tag) {\n throw new Error(`Invalid segment pattern: ${part}`);\n }\n\n segment.tag = tag;\n if (namespace) {\n segment.namespace = namespace;\n }\n\n // Step 4: Parse attributes\n if (bracketContent) {\n if (bracketContent.includes('=')) {\n const eqIndex = bracketContent.indexOf('=');\n segment.attrName = bracketContent.substring(0, eqIndex).trim();\n segment.attrValue = bracketContent.substring(eqIndex + 1).trim();\n } else {\n segment.attrName = bracketContent.trim();\n }\n }\n\n // Step 5: Parse position selector\n if (positionMatch) {\n const nthMatch = positionMatch.match(/^nth\\((\\d+)\\)$/);\n if (nthMatch) {\n segment.position = 'nth';\n segment.positionValue = parseInt(nthMatch[1], 10);\n } else {\n segment.position = positionMatch;\n }\n }\n\n return segment;\n }\n\n /**\n * Get the number of segments\n * @returns {number}\n */\n get length() {\n return this.segments.length;\n }\n\n /**\n * Check if expression contains deep wildcard\n * @returns {boolean}\n */\n hasDeepWildcard() {\n return this._hasDeepWildcard;\n }\n\n /**\n * Check if expression has attribute conditions\n * @returns {boolean}\n */\n hasAttributeCondition() {\n return this._hasAttributeCondition;\n }\n\n /**\n * Check if expression has position selectors\n * @returns {boolean}\n */\n hasPositionSelector() {\n return this._hasPositionSelector;\n }\n\n /**\n * Get string representation\n * @returns {string}\n */\n toString() {\n return this.pattern;\n }\n}","/**\n * Matcher - Tracks current path in XML/JSON tree and matches against Expressions\n * \n * The matcher maintains a stack of nodes representing the current path from root to\n * current tag. It only stores attribute values for the current (top) node to minimize\n * memory usage. Sibling tracking is used to auto-calculate position and counter.\n * \n * @example\n * const matcher = new Matcher();\n * matcher.push(\"root\", {});\n * matcher.push(\"users\", {});\n * matcher.push(\"user\", { id: \"123\", type: \"admin\" });\n * \n * const expr = new Expression(\"root.users.user\");\n * matcher.matches(expr); // true\n */\n\n/**\n * Names of methods that mutate Matcher state.\n * Any attempt to call these on a read-only view throws a TypeError.\n * @type {Set<string>}\n */\nconst MUTATING_METHODS = new Set(['push', 'pop', 'reset', 'updateCurrent', 'restore']);\n\nexport default class Matcher {\n /**\n * Create a new Matcher\n * @param {Object} options - Configuration options\n * @param {string} options.separator - Default path separator (default: '.')\n */\n constructor(options = {}) {\n this.separator = options.separator || '.';\n this.path = [];\n this.siblingStacks = [];\n // Each path node: { tag: string, values: object, position: number, counter: number }\n // values only present for current (last) node\n // Each siblingStacks entry: Map<tagName, count> tracking occurrences at each level\n }\n\n /**\n * Push a new tag onto the path\n * @param {string} tagName - Name of the tag\n * @param {Object} attrValues - Attribute key-value pairs for current node (optional)\n * @param {string} namespace - Namespace for the tag (optional)\n */\n push(tagName, attrValues = null, namespace = null) {\n this._pathStringCache = null; // invalidate\n // Remove values from previous current node (now becoming ancestor)\n if (this.path.length > 0) {\n const prev = this.path[this.path.length - 1];\n prev.values = undefined;\n }\n\n // Get or create sibling tracking for current level\n const currentLevel = this.path.length;\n if (!this.siblingStacks[currentLevel]) {\n this.siblingStacks[currentLevel] = new Map();\n }\n\n const siblings = this.siblingStacks[currentLevel];\n\n // Create a unique key for sibling tracking that includes namespace\n const siblingKey = namespace ? `${namespace}:${tagName}` : tagName;\n\n // Calculate counter (how many times this tag appeared at this level)\n const counter = siblings.get(siblingKey) || 0;\n\n // Calculate position (total children at this level so far)\n let position = 0;\n for (const count of siblings.values()) {\n position += count;\n }\n\n // Update sibling count for this tag\n siblings.set(siblingKey, counter + 1);\n\n // Create new node\n const node = {\n tag: tagName,\n position: position,\n counter: counter\n };\n\n // Store namespace if provided\n if (namespace !== null && namespace !== undefined) {\n node.namespace = namespace;\n }\n\n // Store values only for current node\n if (attrValues !== null && attrValues !== undefined) {\n node.values = attrValues;\n }\n\n this.path.push(node);\n }\n\n /**\n * Pop the last tag from the path\n * @returns {Object|undefined} The popped node\n */\n pop() {\n if (this.path.length === 0) {\n return undefined;\n }\n this._pathStringCache = null; // invalidate\n const node = this.path.pop();\n\n // Clean up sibling tracking for levels deeper than current\n // After pop, path.length is the new depth\n // We need to clean up siblingStacks[path.length + 1] and beyond\n if (this.siblingStacks.length > this.path.length + 1) {\n this.siblingStacks.length = this.path.length + 1;\n }\n\n return node;\n }\n\n /**\n * Update current node's attribute values\n * Useful when attributes are parsed after push\n * @param {Object} attrValues - Attribute values\n */\n updateCurrent(attrValues) {\n if (this.path.length > 0) {\n const current = this.path[this.path.length - 1];\n if (attrValues !== null && attrValues !== undefined) {\n current.values = attrValues;\n }\n }\n }\n\n /**\n * Get current tag name\n * @returns {string|undefined}\n */\n getCurrentTag() {\n return this.path.length > 0 ? this.path[this.path.length - 1].tag : undefined;\n }\n\n /**\n * Get current namespace\n * @returns {string|undefined}\n */\n getCurrentNamespace() {\n return this.path.length > 0 ? this.path[this.path.length - 1].namespace : undefined;\n }\n\n /**\n * Get current node's attribute value\n * @param {string} attrName - Attribute name\n * @returns {*} Attribute value or undefined\n */\n getAttrValue(attrName) {\n if (this.path.length === 0) return undefined;\n const current = this.path[this.path.length - 1];\n return current.values?.[attrName];\n }\n\n /**\n * Check if current node has an attribute\n * @param {string} attrName - Attribute name\n * @returns {boolean}\n */\n hasAttr(attrName) {\n if (this.path.length === 0) return false;\n const current = this.path[this.path.length - 1];\n return current.values !== undefined && attrName in current.values;\n }\n\n /**\n * Get current node's sibling position (child index in parent)\n * @returns {number}\n */\n getPosition() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].position ?? 0;\n }\n\n /**\n * Get current node's repeat counter (occurrence count of this tag name)\n * @returns {number}\n */\n getCounter() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].counter ?? 0;\n }\n\n /**\n * Get current node's sibling index (alias for getPosition for backward compatibility)\n * @returns {number}\n * @deprecated Use getPosition() or getCounter() instead\n */\n getIndex() {\n return this.getPosition();\n }\n\n /**\n * Get current path depth\n * @returns {number}\n */\n getDepth() {\n return this.path.length;\n }\n\n /**\n * Get path as string\n * @param {string} separator - Optional separator (uses default if not provided)\n * @param {boolean} includeNamespace - Whether to include namespace in output (default: true)\n * @returns {string}\n */\n toString(separator, includeNamespace = true) {\n const sep = separator || this.separator;\n const isDefault = (sep === this.separator && includeNamespace === true);\n\n if (isDefault) {\n if (this._pathStringCache !== null && this._pathStringCache !== undefined) {\n return this._pathStringCache;\n }\n const result = this.path.map(n =>\n (includeNamespace && n.namespace) ? `${n.namespace}:${n.tag}` : n.tag\n ).join(sep);\n this._pathStringCache = result;\n return result;\n }\n\n // Non-default separator or includeNamespace=false: don't cache (rare case)\n return this.path.map(n =>\n (includeNamespace && n.namespace) ? `${n.namespace}:${n.tag}` : n.tag\n ).join(sep);\n }\n\n /**\n * Get path as array of tag names\n * @returns {string[]}\n */\n toArray() {\n return this.path.map(n => n.tag);\n }\n\n /**\n * Reset the path to empty\n */\n reset() {\n this._pathStringCache = null; // invalidate\n this.path = [];\n this.siblingStacks = [];\n }\n\n /**\n * Match current path against an Expression\n * @param {Expression} expression - The expression to match against\n * @returns {boolean} True if current path matches the expression\n */\n matches(expression) {\n const segments = expression.segments;\n\n if (segments.length === 0) {\n return false;\n }\n\n // Handle deep wildcard patterns\n if (expression.hasDeepWildcard()) {\n return this._matchWithDeepWildcard(segments);\n }\n\n // Simple path matching (no deep wildcards)\n return this._matchSimple(segments);\n }\n\n /**\n * Match simple path (no deep wildcards)\n * @private\n */\n _matchSimple(segments) {\n // Path must be same length as segments\n if (this.path.length !== segments.length) {\n return false;\n }\n\n // Match each segment bottom-to-top\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const node = this.path[i];\n const isCurrentNode = (i === this.path.length - 1);\n\n if (!this._matchSegment(segment, node, isCurrentNode)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Match path with deep wildcards\n * @private\n */\n _matchWithDeepWildcard(segments) {\n let pathIdx = this.path.length - 1; // Start from current node (bottom)\n let segIdx = segments.length - 1; // Start from last segment\n\n while (segIdx >= 0 && pathIdx >= 0) {\n const segment = segments[segIdx];\n\n if (segment.type === 'deep-wildcard') {\n // \"..\" matches zero or more levels\n segIdx--;\n\n if (segIdx < 0) {\n // Pattern ends with \"..\", always matches\n return true;\n }\n\n // Find where next segment matches in the path\n const nextSeg = segments[segIdx];\n let found = false;\n\n for (let i = pathIdx; i >= 0; i--) {\n const isCurrentNode = (i === this.path.length - 1);\n if (this._matchSegment(nextSeg, this.path[i], isCurrentNode)) {\n pathIdx = i - 1;\n segIdx--;\n found = true;\n break;\n }\n }\n\n if (!found) {\n return false;\n }\n } else {\n // Regular segment\n const isCurrentNode = (pathIdx === this.path.length - 1);\n if (!this._matchSegment(segment, this.path[pathIdx], isCurrentNode)) {\n return false;\n }\n pathIdx--;\n segIdx--;\n }\n }\n\n // All segments must be consumed\n return segIdx < 0;\n }\n\n /**\n * Match a single segment against a node\n * @private\n * @param {Object} segment - Segment from Expression\n * @param {Object} node - Node from path\n * @param {boolean} isCurrentNode - Whether this is the current (last) node\n * @returns {boolean}\n */\n _matchSegment(segment, node, isCurrentNode) {\n // Match tag name (* is wildcard)\n if (segment.tag !== '*' && segment.tag !== node.tag) {\n return false;\n }\n\n // Match namespace if specified in segment\n if (segment.namespace !== undefined) {\n // Segment has namespace - node must match it\n if (segment.namespace !== '*' && segment.namespace !== node.namespace) {\n return false;\n }\n }\n // If segment has no namespace, it matches nodes with or without namespace\n\n // Match attribute name (check if node has this attribute)\n // Can only check for current node since ancestors don't have values\n if (segment.attrName !== undefined) {\n if (!isCurrentNode) {\n // Can't check attributes for ancestor nodes (values not stored)\n return false;\n }\n\n if (!node.values || !(segment.attrName in node.values)) {\n return false;\n }\n\n // Match attribute value (only possible for current node)\n if (segment.attrValue !== undefined) {\n const actualValue = node.values[segment.attrName];\n // Both should be strings\n if (String(actualValue) !== String(segment.attrValue)) {\n return false;\n }\n }\n }\n\n // Match position (only for current node)\n if (segment.position !== undefined) {\n if (!isCurrentNode) {\n // Can't check position for ancestor nodes\n return false;\n }\n\n const counter = node.counter ?? 0;\n\n if (segment.position === 'first' && counter !== 0) {\n return false;\n } else if (segment.position === 'odd' && counter % 2 !== 1) {\n return false;\n } else if (segment.position === 'even' && counter % 2 !== 0) {\n return false;\n } else if (segment.position === 'nth') {\n if (counter !== segment.positionValue) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Create a snapshot of current state\n * @returns {Object} State snapshot\n */\n snapshot() {\n return {\n path: this.path.map(node => ({ ...node })),\n siblingStacks: this.siblingStacks.map(map => new Map(map))\n };\n }\n\n /**\n * Restore state from snapshot\n * @param {Object} snapshot - State snapshot\n */\n restore(snapshot) {\n this._pathStringCache = null; // invalidate\n this.path = snapshot.path.map(node => ({ ...node }));\n this.siblingStacks = snapshot.siblingStacks.map(map => new Map(map));\n }\n\n /**\n * Return a read-only view of this matcher.\n *\n * The returned object exposes all query/inspection methods but throws a\n * TypeError if any state-mutating method is called (`push`, `pop`, `reset`,\n * `updateCurrent`, `restore`). Property reads (e.g. `.path`, `.separator`)\n * are allowed but the returned arrays/objects are frozen so callers cannot\n * mutate internal state through them either.\n *\n * @returns {ReadOnlyMatcher} A proxy that forwards read operations and blocks writes.\n *\n * @example\n * const matcher = new Matcher();\n * matcher.push(\"root\", {});\n *\n * const ro = matcher.readOnly();\n * ro.matches(expr); // ✓ works\n * ro.getCurrentTag(); // ✓ works\n * ro.push(\"child\", {}); // ✗ throws TypeError\n * ro.reset(); // ✗ throws TypeError\n */\n readOnly() {\n const self = this;\n\n return new Proxy(self, {\n get(target, prop, receiver) {\n // Block mutating methods\n if (MUTATING_METHODS.has(prop)) {\n return () => {\n throw new TypeError(\n `Cannot call '${prop}' on a read-only Matcher. ` +\n `Obtain a writable instance to mutate state.`\n );\n };\n }\n\n const value = Reflect.get(target, prop, receiver);\n\n // Freeze array/object properties so callers can't mutate internal\n // state through direct property access (e.g. matcher.path.push(...))\n if (prop === 'path' || prop === 'siblingStacks') {\n return Object.freeze(\n Array.isArray(value)\n ? value.map(item =>\n item instanceof Map\n ? Object.freeze(new Map(item)) // freeze a copy of each Map\n : Object.freeze({ ...item }) // freeze a copy of each node\n )\n : value\n );\n }\n\n // Bind methods so `this` inside them still refers to the real Matcher\n if (typeof value === 'function') {\n return value.bind(target);\n }\n\n return value;\n },\n\n // Prevent any property assignment on the read-only view\n set(_target, prop) {\n throw new TypeError(\n `Cannot set property '${String(prop)}' on a read-only Matcher.`\n );\n },\n\n // Prevent property deletion\n deleteProperty(_target, prop) {\n throw new TypeError(\n `Cannot delete property '${String(prop)}' from a read-only Matcher.`\n );\n }\n });\n }\n}","/**\n * fast-xml-tagger - XML/JSON path matching library\n * \n * Provides efficient path tracking and pattern matching for XML/JSON parsers.\n * \n * @example\n * import { Expression, Matcher } from 'fast-xml-tagger';\n * \n * // Create expression (parse once)\n * const expr = new Expression(\"root.users.user[id]\");\n * \n * // Create matcher (track path)\n * const matcher = new Matcher();\n * matcher.push(\"root\", [], {}, 0);\n * matcher.push(\"users\", [], {}, 0);\n * matcher.push(\"user\", [\"id\", \"type\"], { id: \"123\", type: \"admin\" }, 0);\n * \n * // Match\n * if (matcher.matches(expr)) {\n * console.log(\"Match found!\");\n * }\n */\n\nimport Expression from './Expression.js';\nimport Matcher from './Matcher.js';\n\nexport { Expression, Matcher };\nexport default { Expression, Matcher };\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Expression","constructor","pattern","options","separator","segments","_parse","_hasDeepWildcard","some","seg","type","_hasAttributeCondition","undefined","attrName","_hasPositionSelector","position","i","currentPart","length","trim","push","_parseSegment","part","segment","bracketContent","withoutBrackets","bracketMatch","match","content","slice","namespace","tag","tagAndPosition","includes","nsIndex","indexOf","substring","Error","positionMatch","colonIndex","lastIndexOf","tagPart","posPart","test","eqIndex","attrValue","nthMatch","positionValue","parseInt","hasDeepWildcard","hasAttributeCondition","hasPositionSelector","toString","MUTATING_METHODS","Set","Matcher","path","siblingStacks","tagName","attrValues","_pathStringCache","values","currentLevel","Map","siblings","siblingKey","counter","count","set","node","pop","updateCurrent","current","getCurrentTag","getCurrentNamespace","getAttrValue","hasAttr","getPosition","getCounter","getIndex","getDepth","includeNamespace","sep","result","map","n","join","toArray","reset","matches","expression","_matchWithDeepWildcard","_matchSimple","isCurrentNode","_matchSegment","pathIdx","segIdx","nextSeg","found","actualValue","String","snapshot","restore","readOnly","Proxy","target","receiver","has","TypeError","Reflect","freeze","Array","isArray","item","bind","_target","deleteProperty"],"sourceRoot":""}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "path-expression-matcher",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Efficient path tracking and pattern matching for XML/JSON parsers",
5
5
  "main": "./lib/pem.cjs",
6
6
  "type": "module",
@@ -44,6 +44,7 @@ export default class Matcher {
44
44
  * @param {string} namespace - Namespace for the tag (optional)
45
45
  */
46
46
  push(tagName, attrValues = null, namespace = null) {
47
+ this._pathStringCache = null; // invalidate
47
48
  // Remove values from previous current node (now becoming ancestor)
48
49
  if (this.path.length > 0) {
49
50
  const prev = this.path[this.path.length - 1];
@@ -101,7 +102,7 @@ export default class Matcher {
101
102
  if (this.path.length === 0) {
102
103
  return undefined;
103
104
  }
104
-
105
+ this._pathStringCache = null; // invalidate
105
106
  const node = this.path.pop();
106
107
 
107
108
  // Clean up sibling tracking for levels deeper than current
@@ -209,12 +210,23 @@ export default class Matcher {
209
210
  */
210
211
  toString(separator, includeNamespace = true) {
211
212
  const sep = separator || this.separator;
212
- return this.path.map(n => {
213
- if (includeNamespace && n.namespace) {
214
- return `${n.namespace}:${n.tag}`;
213
+ const isDefault = (sep === this.separator && includeNamespace === true);
214
+
215
+ if (isDefault) {
216
+ if (this._pathStringCache !== null && this._pathStringCache !== undefined) {
217
+ return this._pathStringCache;
215
218
  }
216
- return n.tag;
217
- }).join(sep);
219
+ const result = this.path.map(n =>
220
+ (includeNamespace && n.namespace) ? `${n.namespace}:${n.tag}` : n.tag
221
+ ).join(sep);
222
+ this._pathStringCache = result;
223
+ return result;
224
+ }
225
+
226
+ // Non-default separator or includeNamespace=false: don't cache (rare case)
227
+ return this.path.map(n =>
228
+ (includeNamespace && n.namespace) ? `${n.namespace}:${n.tag}` : n.tag
229
+ ).join(sep);
218
230
  }
219
231
 
220
232
  /**
@@ -229,6 +241,7 @@ export default class Matcher {
229
241
  * Reset the path to empty
230
242
  */
231
243
  reset() {
244
+ this._pathStringCache = null; // invalidate
232
245
  this.path = [];
233
246
  this.siblingStacks = [];
234
247
  }
@@ -416,6 +429,7 @@ export default class Matcher {
416
429
  * @param {Object} snapshot - State snapshot
417
430
  */
418
431
  restore(snapshot) {
432
+ this._pathStringCache = null; // invalidate
419
433
  this.path = snapshot.path.map(node => ({ ...node }));
420
434
  this.siblingStacks = snapshot.siblingStacks.map(map => new Map(map));
421
435
  }
package/package.json CHANGED
@@ -42,7 +42,7 @@
42
42
  "@stylistic/eslint-plugin": "^2",
43
43
  "@types/jest": "^30.0.0",
44
44
  "@types/lodash": "^4.17.24",
45
- "@types/node": "^24.12.0",
45
+ "@types/node": "^24.12.2",
46
46
  "@typescript-eslint/eslint-plugin": "^8",
47
47
  "@typescript-eslint/parser": "^8",
48
48
  "aws-cdk": "2.1029.2",
@@ -69,7 +69,7 @@
69
69
  "constructs": ">=10.0.5 <11.0.0"
70
70
  },
71
71
  "dependencies": {
72
- "@aws-sdk/client-cloudformation": "^3.1023.0",
72
+ "@aws-sdk/client-cloudformation": "^3.1024.0",
73
73
  "@types/crypto-js": "^4.2.2",
74
74
  "@types/js-yaml": "^4.0.9",
75
75
  "crypto-js": "^4.2.0",
@@ -110,7 +110,7 @@
110
110
  "publishConfig": {
111
111
  "access": "public"
112
112
  },
113
- "version": "1.10.1",
113
+ "version": "1.10.3",
114
114
  "jest": {
115
115
  "coverageProvider": "v8",
116
116
  "testMatch": [