New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@aws-cdk/assert

Package Overview
Dependencies
Maintainers
4
Versions
420
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/assert - npm Package Compare versions

Comparing version 0.22.0 to 0.23.0

4

lib/assertions/have-resource.d.ts

@@ -19,2 +19,6 @@ import { Assertion } from "../assertion";

export declare function haveResourceLike(resourceType: string, properties?: any, comparison?: ResourcePart): Assertion<StackInspector>;
export interface InspectionFailure {
resource: any;
failureReason: string;
}
/**

@@ -21,0 +25,0 @@ * Return whether `superObj` is a super-object of `obj`.

4

lib/assertions/have-resource.js

@@ -36,3 +36,3 @@ "use strict";

assertUsing(inspector) {
for (const logicalId of Object.keys(inspector.value.Resources)) {
for (const logicalId of Object.keys(inspector.value.Resources || {})) {
const resource = inspector.value.Resources[logicalId];

@@ -171,2 +171,2 @@ if (resource.Type === this.resourceType) {

})(ResourcePart = exports.ResourcePart || (exports.ResourcePart = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGF2ZS1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhdmUtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0Q0FBeUM7QUFHekM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFlBQVksQ0FBQyxZQUFvQixFQUNwQixVQUFnQixFQUNoQixVQUF5QixFQUN6QixzQkFBK0IsS0FBSztJQUMvRCxPQUFPLElBQUkscUJBQXFCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBTEQsb0NBS0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFlBQW9CLEVBQ3BCLFVBQWdCLEVBQ2hCLFVBQXlCO0lBQ3hELE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFKRCw0Q0FJQztBQUlELE1BQU0scUJBQXNCLFNBQVEscUJBQXlCO0lBSzNELFlBQTZCLFlBQW9CLEVBQ3BCLFVBQWdCLEVBQ2pDLElBQW1CLEVBQ25CLHNCQUErQixLQUFLO1FBQzlDLEtBQUssRUFBRSxDQUFDO1FBSm1CLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQU07UUFMckMsY0FBUyxHQUF3QixFQUFFLENBQUM7UUFVMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7SUFDbEUsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUF5QjtRQUMxQyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5RCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBRTVGLGtGQUFrRjtnQkFDbEYsOERBQThEO2dCQUM5RCxNQUFNLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztnQkFFakYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDNUMsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGFBQWEsQ0FBQyxTQUF5QjtRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxzQkFBc0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFFdEYsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLGFBQWEsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRTtZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQiwyQ0FBMkM7UUFDM0MsT0FBTyxhQUFhLElBQUksQ0FBQyxZQUFZLHFCQUFxQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUcsQ0FBQztDQUNGO0FBRUQsU0FBUyxNQUFNLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxHQUFRLEVBQUUsbUJBQTRCO0lBQ3RFLE9BQU8sQ0FBQyxhQUFrQixFQUFFLFVBQTZCLEVBQUUsRUFBRTtRQUMzRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0UsVUFBVSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU9EOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsUUFBYSxFQUFFLEdBQVEsRUFBRSxTQUFtQixFQUFFLEVBQUUsc0JBQStCLEtBQUs7SUFDaEgsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7S0FBRTtJQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsRCxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELHFEQUFxRDtRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDNUI7SUFDRCxJQUFJLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsRUFBRTtRQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDO2dCQUNwQyxTQUFTO2FBQ1Y7WUFFRCxNQUFNLFlBQVksR0FBRyxtQkFBbUI7Z0JBQ3JCLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0tBQzVCO0lBRUQsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUNqQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFM0IsU0FBUyxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQVU7UUFDNUMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRTtRQUNwQyxJQUFJLE9BQU8sSUFBSSxLQUFLLE9BQU8sS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUNuRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDekQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7YUFBRTtZQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO2dCQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBN0RELHNDQTZEQztBQUVEOztHQUVHO0FBQ0gsSUFBWSxZQVlYO0FBWkQsV0FBWSxZQUFZO0lBQ3RCOztPQUVHO0lBQ0gsMkRBQVUsQ0FBQTtJQUVWOzs7O09BSUc7SUFDSCwyRUFBa0IsQ0FBQTtBQUNwQixDQUFDLEVBWlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFZdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NlcnRpb24gfSBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5pbXBvcnQgeyBTdGFja0luc3BlY3RvciB9IGZyb20gXCIuLi9pbnNwZWN0b3JcIjtcblxuLyoqXG4gKiBBbiBhc3NlcnRpb24gdG8gY2hlY2sgd2hldGhlciBhIHJlc291cmNlIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgd2l0aCB0aGUgZ2l2ZW4gcHJvcGVydGllcyBleGlzdHMsIGRpc3JlZ2FyZGluZyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHJlc291cmNlVHlwZSB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50LlxuICogQHBhcmFtIHByb3BlcnRpZXMgICB0aGUgcHJvcGVydGllcyB0aGF0IHRoZSByZXNvdXJjZSBpcyBleHBlY3RlZCB0byBoYXZlLiBBIGZ1bmN0aW9uIG1heSBiZSBwcm92aWRlZCwgaW4gd2hpY2ggY2FzZVxuICogICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIGNhbmRpZGF0ZSByZXNvdXJjZXMgYW5kIGFuIGBgSW5zcGVjdGlvbkZhaWx1cmVgYFxuICogICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvbiB3aGljaCBlcnJvcnMgc2hvdWxkIGJlIGFwcGVuZGVkLCBhbmQgc2hvdWxkIHJldHVybiBhIHRydXRoeSB2YWx1ZSB0byBkZW5vdGUgYSBtYXRjaC5cbiAqIEBwYXJhbSBjb21wYXJpc29uICAgdGhlIGVudGl0eSB0aGF0IGlzIGJlaW5nIGFzc2VydGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYWxsb3dWYWx1ZUV4dGVuc2lvbiBpZiBwcm9wZXJ0aWVzIGlzIGFuIG9iamVjdCwgdGVsbHMgd2hldGhlciB2YWx1ZXMgbXVzdCBtYXRjaCBleGFjdGx5LCBvciBpZiB0aGV5IGFyZVxuICogICAgICAgICAgICAgICAgICAgICBhbGxvd2VkIHRvIGJlIHN1cGVyc2V0cyBvZiB0aGUgcmVmZXJlbmNlIHZhbHVlcy4gTWVhbmluZ2xlc3MgaWYgcHJvcGVydGllcyBpcyBhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGF2ZVJlc291cmNlKHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzPzogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uPzogUmVzb3VyY2VQYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ZhbHVlRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBBc3NlcnRpb248U3RhY2tJbnNwZWN0b3I+IHtcbiAgcmV0dXJuIG5ldyBIYXZlUmVzb3VyY2VBc3NlcnRpb24ocmVzb3VyY2VUeXBlLCBwcm9wZXJ0aWVzLCBjb21wYXJpc29uLCBhbGxvd1ZhbHVlRXh0ZW5zaW9uKTtcbn1cblxuLyoqXG4gKiBTdWdhciBmb3IgY2FsbGluZyBgYGhhdmVSZXNvdXJjZXNgYCB3aXRoIGBgYWxsb3dWYWx1ZUV4dGVuc2lvbmBgIHNldCB0byBgYHRydWVgYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhdmVSZXNvdXJjZUxpa2UocmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzPzogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbj86IFJlc291cmNlUGFydCkge1xuICByZXR1cm4gaGF2ZVJlc291cmNlKHJlc291cmNlVHlwZSwgcHJvcGVydGllcywgY29tcGFyaXNvbiwgdHJ1ZSk7XG59XG5cbnR5cGUgUHJvcGVydHlQcmVkaWNhdGUgPSAocHJvcHM6IGFueSwgaW5zcGVjdGlvbjogSW5zcGVjdGlvbkZhaWx1cmUpID0+IGJvb2xlYW47XG5cbmNsYXNzIEhhdmVSZXNvdXJjZUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbjxTdGFja0luc3BlY3Rvcj4ge1xuICBwcml2YXRlIGluc3BlY3RlZDogSW5zcGVjdGlvbkZhaWx1cmVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnQ6IFJlc291cmNlUGFydDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVkaWNhdGU6IFByb3BlcnR5UHJlZGljYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydGllcz86IGFueSxcbiAgICAgICAgICAgICAgcGFydD86IFJlc291cmNlUGFydCxcbiAgICAgICAgICAgICAgYWxsb3dWYWx1ZUV4dGVuc2lvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucHJlZGljYXRlID0gdHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicgPyBwcm9wZXJ0aWVzIDogbWFrZVN1cGVyT2JqZWN0UHJlZGljYXRlKHByb3BlcnRpZXMsIGFsbG93VmFsdWVFeHRlbnNpb24pO1xuICAgIHRoaXMucGFydCA9IHBhcnQgIT09IHVuZGVmaW5lZCA/IHBhcnQgOiBSZXNvdXJjZVBhcnQuUHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRVc2luZyhpbnNwZWN0b3I6IFN0YWNrSW5zcGVjdG9yKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMoaW5zcGVjdG9yLnZhbHVlLlJlc291cmNlcykpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gaW5zcGVjdG9yLnZhbHVlLlJlc291cmNlc1tsb2dpY2FsSWRdO1xuICAgICAgaWYgKHJlc291cmNlLlR5cGUgPT09IHRoaXMucmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIGNvbnN0IHByb3BzVG9DaGVjayA9IHRoaXMucGFydCA9PT0gUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMgPyByZXNvdXJjZS5Qcm9wZXJ0aWVzIDogcmVzb3VyY2U7XG5cbiAgICAgICAgLy8gUGFzcyBpbnNwZWN0aW9uIG9iamVjdCBhcyAybmQgYXJndW1lbnQsIGluaXRpYWxpemUgZmFpbHVyZSB3aXRoIGRlZmF1bHQgc3RyaW5nLFxuICAgICAgICAvLyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBwcmVkaWNhdGUgQVBJLlxuICAgICAgICBjb25zdCBpbnNwZWN0aW9uID0geyByZXNvdXJjZSwgZmFpbHVyZVJlYXNvbjogJ09iamVjdCBkaWQgbm90IG1hdGNoIHByZWRpY2F0ZScgfTtcblxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUocHJvcHNUb0NoZWNrLCBpbnNwZWN0aW9uKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNwZWN0ZWQucHVzaChpbnNwZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0T3JUaHJvdyhpbnNwZWN0b3I6IFN0YWNrSW5zcGVjdG9yKSB7XG4gICAgaWYgKCF0aGlzLmFzc2VydFVzaW5nKGluc3BlY3RvcikpIHtcbiAgICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGluZXMucHVzaChgTm9uZSBvZiAke3RoaXMuaW5zcGVjdGVkLmxlbmd0aH0gcmVzb3VyY2VzIG1hdGNoZXMgJHt0aGlzLmRlc2NyaXB0aW9ufS5gKTtcblxuICAgICAgZm9yIChjb25zdCBpbnNwZWN0ZWQgb2YgdGhpcy5pbnNwZWN0ZWQpIHtcbiAgICAgICAgbGluZXMucHVzaChgLSAke2luc3BlY3RlZC5mYWlsdXJlUmVhc29ufSBpbjpgKTtcbiAgICAgICAgbGluZXMucHVzaChpbmRlbnQoNCwgSlNPTi5zdHJpbmdpZnkoaW5zcGVjdGVkLnJlc291cmNlLCBudWxsLCAyKSkpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobGluZXMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgcmV0dXJuIGByZXNvdXJjZSAnJHt0aGlzLnJlc291cmNlVHlwZX0nIHdpdGggcHJvcGVydGllcyAke0pTT04uc3RyaW5naWZ5KHRoaXMucHJvcGVydGllcywgdW5kZWZpbmVkLCAyKX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGVudChuOiBudW1iZXIsIHM6IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSAnICcucmVwZWF0KG4pO1xuICByZXR1cm4gcHJlZml4ICsgcy5yZXBsYWNlKC9cXG4vZywgJ1xcbicgKyBwcmVmaXgpO1xufVxuXG4vKipcbiAqIE1ha2UgYSBwcmVkaWNhdGUgdGhhdCBjaGVja3MgcHJvcGVydHkgc3VwZXJzZXRcbiAqL1xuZnVuY3Rpb24gbWFrZVN1cGVyT2JqZWN0UHJlZGljYXRlKG9iajogYW55LCBhbGxvd1ZhbHVlRXh0ZW5zaW9uOiBib29sZWFuKSB7XG4gIHJldHVybiAocmVzb3VyY2VQcm9wczogYW55LCBpbnNwZWN0aW9uOiBJbnNwZWN0aW9uRmFpbHVyZSkgPT4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCByZXQgPSBpc1N1cGVyT2JqZWN0KHJlc291cmNlUHJvcHMsIG9iaiwgZXJyb3JzLCBhbGxvd1ZhbHVlRXh0ZW5zaW9uKTtcbiAgICBpbnNwZWN0aW9uLmZhaWx1cmVSZWFzb24gPSBlcnJvcnMuam9pbignLCcpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59XG5cbmludGVyZmFjZSBJbnNwZWN0aW9uRmFpbHVyZSB7XG4gIHJlc291cmNlOiBhbnk7XG4gIGZhaWx1cmVSZWFzb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBgc3VwZXJPYmpgIGlzIGEgc3VwZXItb2JqZWN0IG9mIGBvYmpgLlxuICpcbiAqIEEgc3VwZXItb2JqZWN0IGhhcyB0aGUgc2FtZSBvciBtb3JlIHByb3BlcnR5IHZhbHVlcywgcmVjdXJzaW5nIGludG8gc3ViIHByb3BlcnRpZXMgaWYgYGBhbGxvd1ZhbHVlRXh0ZW5zaW9uYGAgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwZXJPYmplY3Qoc3VwZXJPYmo6IGFueSwgb2JqOiBhbnksIGVycm9yczogc3RyaW5nW10gPSBbXSwgYWxsb3dWYWx1ZUV4dGVuc2lvbjogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gIGlmIChvYmogPT0gbnVsbCkgeyByZXR1cm4gdHJ1ZTsgfVxuICBpZiAoQXJyYXkuaXNBcnJheShzdXBlck9iaikgIT09IEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGVycm9ycy5wdXNoKCdBcnJheSB0eXBlIG1pc21hdGNoJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHN1cGVyT2JqKSkge1xuICAgIGlmIChvYmoubGVuZ3RoICE9PSBzdXBlck9iai5sZW5ndGgpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdBcnJheSBsZW5ndGggbWlzbWF0Y2gnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBEbyBpc1N1cGVyT2JqZWN0IGNvbXBhcmlzb24gZm9yIGluZGl2aWR1YWwgb2JqZWN0c1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWlzU3VwZXJPYmplY3Qoc3VwZXJPYmpbaV0sIG9ialtpXSwgW10sIGFsbG93VmFsdWVFeHRlbnNpb24pKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBBcnJheSBlbGVtZW50ICR7aX0gbWlzbWF0Y2hgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPT09IDA7XG4gIH1cbiAgaWYgKCh0eXBlb2Ygc3VwZXJPYmogPT09ICdvYmplY3QnKSAhPT0gKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSkge1xuICAgIGVycm9ycy5wdXNoKCdPYmplY3QgdHlwZSBtaXNtYXRjaCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICBpZiAoIShrZXkgaW4gc3VwZXJPYmopKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBGaWVsZCAke2tleX0gbWlzc2luZ2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVNYXRjaGVzID0gYWxsb3dWYWx1ZUV4dGVuc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgID8gaXNTdXBlck9iamVjdChzdXBlck9ialtrZXldLCBvYmpba2V5XSwgW10sIGFsbG93VmFsdWVFeHRlbnNpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1N0cmljdGx5RXF1YWwoc3VwZXJPYmpba2V5XSwgb2JqW2tleV0pO1xuICAgICAgaWYgKCF2YWx1ZU1hdGNoZXMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEZpZWxkICR7a2V5fSBtaXNtYXRjaGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGlmIChzdXBlck9iaiAhPT0gb2JqKSB7XG4gICAgZXJyb3JzLnB1c2goJ0RpZmZlcmVudCB2YWx1ZXMnKTtcbiAgfVxuICByZXR1cm4gZXJyb3JzLmxlbmd0aCA9PT0gMDtcblxuICBmdW5jdGlvbiBpc1N0cmljdGx5RXF1YWwobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGxlZnQgPT09IHJpZ2h0KSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHR5cGVvZiBsZWZ0ICE9PSB0eXBlb2YgcmlnaHQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcmlnaHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsZWZ0KSAhPT0gQXJyYXkuaXNBcnJheShyaWdodCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBjb25zdCBhbGxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyhsZWZ0KSwgLi4uT2JqZWN0LmtleXMocmlnaHQpXSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7XG4gICAgICAgIGlmICghaXNTdHJpY3RseUVxdWFsKGxlZnRba2V5XSwgcmlnaHRba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHBhcnQgb2YgdGhlIHJlc291cmNlIHRvIGNvbXBhcmVcbiAqL1xuZXhwb3J0IGVudW0gUmVzb3VyY2VQYXJ0IHtcbiAgLyoqXG4gICAqIE9ubHkgY29tcGFyZSB0aGUgcmVzb3VyY2UncyBwcm9wZXJ0aWVzXG4gICAqL1xuICBQcm9wZXJ0aWVzLFxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgZW50aXJlIENsb3VkRm9ybWF0aW9uIGNvbmZpZ1xuICAgKlxuICAgKiAoaW5jbHVkaW5nIFVwZGF0ZUNvbmZpZywgRGVwZW5kc09uLCBldGMuKVxuICAgKi9cbiAgQ29tcGxldGVEZWZpbml0aW9uXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGF2ZS1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhdmUtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0Q0FBeUM7QUFHekM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFlBQVksQ0FBQyxZQUFvQixFQUNwQixVQUFnQixFQUNoQixVQUF5QixFQUN6QixzQkFBK0IsS0FBSztJQUMvRCxPQUFPLElBQUkscUJBQXFCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBTEQsb0NBS0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFlBQW9CLEVBQ3BCLFVBQWdCLEVBQ2hCLFVBQXlCO0lBQ3hELE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFKRCw0Q0FJQztBQUlELE1BQU0scUJBQXNCLFNBQVEscUJBQXlCO0lBSzNELFlBQTZCLFlBQW9CLEVBQ3BCLFVBQWdCLEVBQ2pDLElBQW1CLEVBQ25CLHNCQUErQixLQUFLO1FBQzlDLEtBQUssRUFBRSxDQUFDO1FBSm1CLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQU07UUFMckMsY0FBUyxHQUF3QixFQUFFLENBQUM7UUFVMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7SUFDbEUsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUF5QjtR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TyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO2FBQUU7WUFDbkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtnQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzNDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQTdERCxzQ0E2REM7QUFFRDs7R0FFRztBQUNILElBQVksWUFZWDtBQVpELFdBQVksWUFBWTtJQUN0Qjs7T0FFRztJQUNILDJEQUFVLENBQUE7SUFFVjs7OztPQUlHO0lBQ0gsMkVBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQVpXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBWXZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuaW1wb3J0IHsgU3RhY2tJbnNwZWN0b3IgfSBmcm9tIFwiLi4vaW5zcGVjdG9yXCI7XG5cbi8qKlxuICogQW4gYXNzZXJ0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYSByZXNvdXJjZSBvZiBhIGdpdmVuIHR5cGUgYW5kIHdpdGggdGhlIGdpdmVuIHByb3BlcnRpZXMgZXhpc3RzLCBkaXNyZWdhcmRpbmcgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSByZXNvdXJjZVR5cGUgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzICAgdGhlIHByb3BlcnRpZXMgdGhhdCB0aGUgcmVzb3VyY2UgaXMgZXhwZWN0ZWQgdG8gaGF2ZS4gQSBmdW5jdGlvbiBtYXkgYmUgcHJvdmlkZWQsIGluIHdoaWNoIGNhc2VcbiAqICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBjYW5kaWRhdGUgcmVzb3VyY2VzIGFuZCBhbiBgYEluc3BlY3Rpb25GYWlsdXJlYGBcbiAqICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb24gd2hpY2ggZXJyb3JzIHNob3VsZCBiZSBhcHBlbmRlZCwgYW5kIHNob3VsZCByZXR1cm4gYSB0cnV0aHkgdmFsdWUgdG8gZGVub3RlIGEgbWF0Y2guXG4gKiBAcGFyYW0gY29tcGFyaXNvbiAgIHRoZSBlbnRpdHkgdGhhdCBpcyBiZWluZyBhc3NlcnRlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFsbG93VmFsdWVFeHRlbnNpb24gaWYgcHJvcGVydGllcyBpcyBhbiBvYmplY3QsIHRlbGxzIHdoZXRoZXIgdmFsdWVzIG11c3QgbWF0Y2ggZXhhY3RseSwgb3IgaWYgdGhleSBhcmVcbiAqICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCB0byBiZSBzdXBlcnNldHMgb2YgdGhlIHJlZmVyZW5jZSB2YWx1ZXMuIE1lYW5pbmdsZXNzIGlmIHByb3BlcnRpZXMgaXMgYSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhdmVSZXNvdXJjZShyZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcz86IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbj86IFJlc291cmNlUGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dWYWx1ZUV4dGVuc2lvbjogYm9vbGVhbiA9IGZhbHNlKTogQXNzZXJ0aW9uPFN0YWNrSW5zcGVjdG9yPiB7XG4gIHJldHVybiBuZXcgSGF2ZVJlc291cmNlQXNzZXJ0aW9uKHJlc291cmNlVHlwZSwgcHJvcGVydGllcywgY29tcGFyaXNvbiwgYWxsb3dWYWx1ZUV4dGVuc2lvbik7XG59XG5cbi8qKlxuICogU3VnYXIgZm9yIGNhbGxpbmcgYGBoYXZlUmVzb3VyY2VzYGAgd2l0aCBgYGFsbG93VmFsdWVFeHRlbnNpb25gYCBzZXQgdG8gYGB0cnVlYGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXZlUmVzb3VyY2VMaWtlKHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcz86IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24/OiBSZXNvdXJjZVBhcnQpIHtcbiAgcmV0dXJuIGhhdmVSZXNvdXJjZShyZXNvdXJjZVR5cGUsIHByb3BlcnRpZXMsIGNvbXBhcmlzb24sIHRydWUpO1xufVxuXG50eXBlIFByb3BlcnR5UHJlZGljYXRlID0gKHByb3BzOiBhbnksIGluc3BlY3Rpb246IEluc3BlY3Rpb25GYWlsdXJlKSA9PiBib29sZWFuO1xuXG5jbGFzcyBIYXZlUmVzb3VyY2VBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb248U3RhY2tJbnNwZWN0b3I+IHtcbiAgcHJpdmF0ZSBpbnNwZWN0ZWQ6IEluc3BlY3Rpb25GYWlsdXJlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJ0OiBSZXNvdXJjZVBhcnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZGljYXRlOiBQcm9wZXJ0eVByZWRpY2F0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM/OiBhbnksXG4gICAgICAgICAgICAgIHBhcnQ/OiBSZXNvdXJjZVBhcnQsXG4gICAgICAgICAgICAgIGFsbG93VmFsdWVFeHRlbnNpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnByZWRpY2F0ZSA9IHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nID8gcHJvcGVydGllcyA6IG1ha2VTdXBlck9iamVjdFByZWRpY2F0ZShwcm9wZXJ0aWVzLCBhbGxvd1ZhbHVlRXh0ZW5zaW9uKTtcbiAgICB0aGlzLnBhcnQgPSBwYXJ0ICE9PSB1bmRlZmluZWQgPyBwYXJ0IDogUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXM7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0VXNpbmcoaW5zcGVjdG9yOiBTdGFja0luc3BlY3Rvcik6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIE9iamVjdC5rZXlzKGluc3BlY3Rvci52YWx1ZS5SZXNvdXJjZXMgfHwge30pKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGluc3BlY3Rvci52YWx1ZS5SZXNvdXJjZXNbbG9naWNhbElkXTtcbiAgICAgIGlmIChyZXNvdXJjZS5UeXBlID09PSB0aGlzLnJlc291cmNlVHlwZSkge1xuICAgICAgICBjb25zdCBwcm9wc1RvQ2hlY2sgPSB0aGlzLnBhcnQgPT09IFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzID8gcmVzb3VyY2UuUHJvcGVydGllcyA6IHJlc291cmNlO1xuXG4gICAgICAgIC8vIFBhc3MgaW5zcGVjdGlvbiBvYmplY3QgYXMgMm5kIGFyZ3VtZW50LCBpbml0aWFsaXplIGZhaWx1cmUgd2l0aCBkZWZhdWx0IHN0cmluZyxcbiAgICAgICAgLy8gdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgcHJlZGljYXRlIEFQSS5cbiAgICAgICAgY29uc3QgaW5zcGVjdGlvbiA9IHsgcmVzb3VyY2UsIGZhaWx1cmVSZWFzb246ICdPYmplY3QgZGlkIG5vdCBtYXRjaCBwcmVkaWNhdGUnIH07XG5cbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlKHByb3BzVG9DaGVjaywgaW5zcGVjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zcGVjdGVkLnB1c2goaW5zcGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzc2VydE9yVGhyb3coaW5zcGVjdG9yOiBTdGFja0luc3BlY3Rvcikge1xuICAgIGlmICghdGhpcy5hc3NlcnRVc2luZyhpbnNwZWN0b3IpKSB7XG4gICAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxpbmVzLnB1c2goYE5vbmUgb2YgJHt0aGlzLmluc3BlY3RlZC5sZW5ndGh9IHJlc291cmNlcyBtYXRjaGVzICR7dGhpcy5kZXNjcmlwdGlvbn0uYCk7XG5cbiAgICAgIGZvciAoY29uc3QgaW5zcGVjdGVkIG9mIHRoaXMuaW5zcGVjdGVkKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gJHtpbnNwZWN0ZWQuZmFpbHVyZVJlYXNvbn0gaW46YCk7XG4gICAgICAgIGxpbmVzLnB1c2goaW5kZW50KDQsIEpTT04uc3RyaW5naWZ5KGluc3BlY3RlZC5yZXNvdXJjZSwgbnVsbCwgMikpKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGxpbmVzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIHJldHVybiBgcmVzb3VyY2UgJyR7dGhpcy5yZXNvdXJjZVR5cGV9JyB3aXRoIHByb3BlcnRpZXMgJHtKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BlcnRpZXMsIHVuZGVmaW5lZCwgMil9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRlbnQobjogbnVtYmVyLCBzOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gJyAnLnJlcGVhdChuKTtcbiAgcmV0dXJuIHByZWZpeCArIHMucmVwbGFjZSgvXFxuL2csICdcXG4nICsgcHJlZml4KTtcbn1cblxuLyoqXG4gKiBNYWtlIGEgcHJlZGljYXRlIHRoYXQgY2hlY2tzIHByb3BlcnR5IHN1cGVyc2V0XG4gKi9cbmZ1bmN0aW9uIG1ha2VTdXBlck9iamVjdFByZWRpY2F0ZShvYmo6IGFueSwgYWxsb3dWYWx1ZUV4dGVuc2lvbjogYm9vbGVhbikge1xuICByZXR1cm4gKHJlc291cmNlUHJvcHM6IGFueSwgaW5zcGVjdGlvbjogSW5zcGVjdGlvbkZhaWx1cmUpID0+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmV0ID0gaXNTdXBlck9iamVjdChyZXNvdXJjZVByb3BzLCBvYmosIGVycm9ycywgYWxsb3dWYWx1ZUV4dGVuc2lvbik7XG4gICAgaW5zcGVjdGlvbi5mYWlsdXJlUmVhc29uID0gZXJyb3JzLmpvaW4oJywnKTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3BlY3Rpb25GYWlsdXJlIHtcbiAgcmVzb3VyY2U6IGFueTtcbiAgZmFpbHVyZVJlYXNvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGBzdXBlck9iamAgaXMgYSBzdXBlci1vYmplY3Qgb2YgYG9iamAuXG4gKlxuICogQSBzdXBlci1vYmplY3QgaGFzIHRoZSBzYW1lIG9yIG1vcmUgcHJvcGVydHkgdmFsdWVzLCByZWN1cnNpbmcgaW50byBzdWIgcHJvcGVydGllcyBpZiBgYGFsbG93VmFsdWVFeHRlbnNpb25gYCBpcyB0cnVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBlck9iamVjdChzdXBlck9iajogYW55LCBvYmo6IGFueSwgZXJyb3JzOiBzdHJpbmdbXSA9IFtdLCBhbGxvd1ZhbHVlRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgaWYgKG9iaiA9PSBudWxsKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmIChBcnJheS5pc0FycmF5KHN1cGVyT2JqKSAhPT0gQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZXJyb3JzLnB1c2goJ0FycmF5IHR5cGUgbWlzbWF0Y2gnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3VwZXJPYmopKSB7XG4gICAgaWYgKG9iai5sZW5ndGggIT09IHN1cGVyT2JqLmxlbmd0aCkge1xuICAgICAgZXJyb3JzLnB1c2goJ0FycmF5IGxlbmd0aCBtaXNtYXRjaCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERvIGlzU3VwZXJPYmplY3QgY29tcGFyaXNvbiBmb3IgaW5kaXZpZHVhbCBvYmplY3RzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNTdXBlck9iamVjdChzdXBlck9ialtpXSwgb2JqW2ldLCBbXSwgYWxsb3dWYWx1ZUV4dGVuc2lvbikpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEFycmF5IGVsZW1lbnQgJHtpfSBtaXNtYXRjaGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBpZiAoKHR5cGVvZiBzdXBlck9iaiA9PT0gJ29iamVjdCcpICE9PSAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpKSB7XG4gICAgZXJyb3JzLnB1c2goJ09iamVjdCB0eXBlIG1pc21hdGNoJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgIGlmICghKGtleSBpbiBzdXBlck9iaikpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEZpZWxkICR7a2V5fSBtaXNzaW5nYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSBhbGxvd1ZhbHVlRXh0ZW5zaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgPyBpc1N1cGVyT2JqZWN0KHN1cGVyT2JqW2tleV0sIG9ialtrZXldLCBbXSwgYWxsb3dWYWx1ZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzU3RyaWN0bHlFcXVhbChzdXBlck9ialtrZXldLCBvYmpba2V5XSk7XG4gICAgICBpZiAoIXZhbHVlTWF0Y2hlcykge1xuICAgICAgICBlcnJvcnMucHVzaChgRmllbGQgJHtrZXl9IG1pc21hdGNoYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaWYgKHN1cGVyT2JqICE9PSBvYmopIHtcbiAgICBlcnJvcnMucHVzaCgnRGlmZmVyZW50IHZhbHVlcycpO1xuICB9XG4gIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwO1xuXG4gIGZ1bmN0aW9uIGlzU3RyaWN0bHlFcXVhbChsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBpZiAodHlwZW9mIGxlZnQgIT09IHR5cGVvZiByaWdodCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIGxlZnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiByaWdodCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxlZnQpICE9PSBBcnJheS5pc0FycmF5KHJpZ2h0KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGNvbnN0IGFsbEtleXMgPSBuZXcgU2V0PHN0cmluZz4oWy4uLk9iamVjdC5rZXlzKGxlZnQpLCAuLi5PYmplY3Qua2V5cyhyaWdodCldKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHtcbiAgICAgICAgaWYgKCFpc1N0cmljdGx5RXF1YWwobGVmdFtrZXldLCByaWdodFtrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgcGFydCBvZiB0aGUgcmVzb3VyY2UgdG8gY29tcGFyZVxuICovXG5leHBvcnQgZW51bSBSZXNvdXJjZVBhcnQge1xuICAvKipcbiAgICogT25seSBjb21wYXJlIHRoZSByZXNvdXJjZSdzIHByb3BlcnRpZXNcbiAgICovXG4gIFByb3BlcnRpZXMsXG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBlbnRpcmUgQ2xvdWRGb3JtYXRpb24gY29uZmlnXG4gICAqXG4gICAqIChpbmNsdWRpbmcgVXBkYXRlQ29uZmlnLCBEZXBlbmRzT24sIGV0Yy4pXG4gICAqL1xuICBDb21wbGV0ZURlZmluaXRpb25cbn1cbiJdfQ==

@@ -53,3 +53,3 @@ "use strict";

case MatchStyle.EXACT:
return diff.count === 0;
return diff.differenceCount === 0;
case MatchStyle.NO_REPLACES:

@@ -81,2 +81,2 @@ for (const key of Object.keys(diff.resources.changes)) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXRjaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdEQUF5RDtBQUN6RCw0Q0FBeUM7QUFHekMsSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLDhCQUE4QjtJQUM5QiwrQkFBaUIsQ0FBQTtJQUNqQixtRUFBbUU7SUFDbkUseUNBQTJCLENBQUE7SUFDM0IsdUNBQXVDO0lBQ3ZDLG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFQVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQU9yQjtBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0M7SUFDcEUsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRkQsc0RBRUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBZ0MsRUFDaEMsYUFBeUIsVUFBVSxDQUFDLEtBQUs7SUFDckUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBSEQsc0NBR0M7QUFFRCxNQUFNLDZCQUE4QixTQUFRLHFCQUF5QjtJQUNuRSxZQUE2QixRQUFnQyxFQUNoQyxVQUFzQjtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUZtQixhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRW5ELENBQUM7SUFFTSxhQUFhLENBQUMsU0FBeUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsZ0ZBQWdGO1lBQ2hGLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsU0FBeUI7UUFDMUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLGlCQUFpQjtZQUNqQixPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVoRCw0QkFBNEI7WUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEZBQTBGLENBQUMsQ0FBQztZQUNqSCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzVFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQTBCO1FBQ2pELFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixLQUFLLFVBQVUsQ0FBQyxLQUFLO2dCQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQzFCLEtBQUssVUFBVSxDQUFDLFdBQVc7Z0JBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUUsQ0FBQztvQkFDNUMsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqRixJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7d0JBQUUsT0FBTyxLQUFLLENBQUM7cUJBQUU7aUJBQ25GO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxVQUFVLENBQUMsUUFBUTtnQkFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxDQUFDO29CQUM1QyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7d0JBQUUsT0FBTyxLQUFLLENBQUM7cUJBQUU7aUJBQ2xGO2dCQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sYUFBYSxJQUFJLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2ZuRGlmZiA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnKTtcbmltcG9ydCB7IEFzc2VydGlvbiB9IGZyb20gJy4uL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBTdGFja0luc3BlY3RvciB9IGZyb20gJy4uL2luc3BlY3Rvcic7XG5cbmV4cG9ydCBlbnVtIE1hdGNoU3R5bGUge1xuICAvKiogUmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggKi9cbiAgRVhBQ1QgPSBcImV4YWN0bHlcIixcbiAgLyoqIEFsbG93cyBhbnkgY2hhbmdlIHRoYXQgZG9lcyBub3QgY2F1c2UgYSByZXNvdXJjZSByZXBsYWNlbWVudCAqL1xuICBOT19SRVBMQUNFUyA9IFwibm8gcmVwbGFjZXNcIixcbiAgLyoqIEFsbG93cyBhZGRpdGlvbnMsIGJ1dCBubyB1cGRhdGVzICovXG4gIFNVUEVSU0VUID0gXCJzdXBlcnNldFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdGx5TWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICByZXR1cm4gbWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZSwgTWF0Y2hTdHlsZS5FWEFDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZUFTdXBlcnNldE9mVGVtcGxhdGUodGVtcGxhdGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgcmV0dXJuIG1hdGNoVGVtcGxhdGUodGVtcGxhdGUsIE1hdGNoU3R5bGUuU1VQRVJTRVQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoU3R5bGU6IE1hdGNoU3R5bGUgPSBNYXRjaFN0eWxlLkVYQUNUKTogQXNzZXJ0aW9uPFN0YWNrSW5zcGVjdG9yPiB7XG4gIHJldHVybiBuZXcgU3RhY2tNYXRjaGVzVGVtcGxhdGVBc3NlcnRpb24odGVtcGxhdGUsIG1hdGNoU3R5bGUpO1xufVxuXG5jbGFzcyBTdGFja01hdGNoZXNUZW1wbGF0ZUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbjxTdGFja0luc3BlY3Rvcj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdGNoU3R5bGU6IE1hdGNoU3R5bGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGFzc2VydE9yVGhyb3coaW5zcGVjdG9yOiBTdGFja0luc3BlY3Rvcikge1xuICAgIGlmICghdGhpcy5hc3NlcnRVc2luZyhpbnNwZWN0b3IpKSB7XG4gICAgICAvLyBUaGUgZGV0YWlscyBoYXZlIGFscmVhZHkgYmVlbiBwcmludGVkLCBzbyBkb24ndCBnZW5lcmF0ZSBhIGh1Z2UgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSBjb21wYXJpc29uIHByb2R1Y2VkIHVuYWNjZXB0YWJsZSBtYXRjaGApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRVc2luZyhpbnNwZWN0b3I6IFN0YWNrSW5zcGVjdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGlmZiA9IGNmbkRpZmYuZGlmZlRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIGluc3BlY3Rvci52YWx1ZSk7XG4gICAgY29uc3QgYWNjZXB0YWJsZSA9IHRoaXMuaXNEaWZmQWNjZXB0YWJsZShkaWZmKTtcbiAgICBpZiAoIWFjY2VwdGFibGUpIHtcbiAgICAgIC8vIFByaW50IHRoZSBkaWZmXG4gICAgICBjZm5EaWZmLmZvcm1hdERpZmZlcmVuY2VzKHByb2Nlc3Muc3RkZXJyLCBkaWZmKTtcblxuICAgICAgLy8gUHJpbnQgdGhlIGFjdHVhbCB0ZW1wbGF0ZVxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShpbnNwZWN0b3IudmFsdWUsIHVuZGVmaW5lZCwgMikgKyAnXFxuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY2VwdGFibGU7XG4gIH1cblxuICBwcml2YXRlIGlzRGlmZkFjY2VwdGFibGUoZGlmZjogY2ZuRGlmZi5UZW1wbGF0ZURpZmYpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHRoaXMubWF0Y2hTdHlsZSkge1xuICAgIGNhc2UgTWF0Y2hTdHlsZS5FWEFDVDpcbiAgICAgIHJldHVybiBkaWZmLmNvdW50ID09PSAwO1xuICAgIGNhc2UgTWF0Y2hTdHlsZS5OT19SRVBMQUNFUzpcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRpZmYucmVzb3VyY2VzLmNoYW5nZXMpKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGRpZmYucmVzb3VyY2VzLmNoYW5nZXNba2V5XSE7XG4gICAgICAgIGlmIChjaGFuZ2UuY2hhbmdlSW1wYWN0ID09PSBjZm5EaWZmLlJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBpZiAoY2hhbmdlLmNoYW5nZUltcGFjdCA9PT0gY2ZuRGlmZi5SZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIE1hdGNoU3R5bGUuU1VQRVJTRVQ6XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkaWZmLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBkaWZmLnJlc291cmNlcy5jaGFuZ2VzW2tleV0hO1xuICAgICAgICBpZiAoY2hhbmdlLmNoYW5nZUltcGFjdCAhPT0gY2ZuRGlmZi5SZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG1hdGNoIHN0eWxlOiAke3RoaXMubWF0Y2hTdHlsZX1gKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHRlbXBsYXRlICgke3RoaXMubWF0Y2hTdHlsZX0pOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudGVtcGxhdGUsIG51bGwsIDIpfWA7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXRjaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdEQUF5RDtBQUN6RCw0Q0FBeUM7QUFHekMsSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLDhCQUE4QjtJQUM5QiwrQkFBaUIsQ0FBQTtJQUNqQixtRUFBbUU7SUFDbkUseUNBQTJCLENBQUE7SUFDM0IsdUNBQXVDO0lBQ3ZDLG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFQVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQU9yQjtBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0M7SUFDcEUsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRkQsc0RBRUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBZ0MsRUFDaEMsYUFBeUIsVUFBVSxDQUFDLEtBQUs7SUFDckUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBSEQsc0NBR0M7QUFFRCxNQUFNLDZCQUE4QixTQUFRLHFCQUF5QjtJQUNuRSxZQUE2QixRQUFnQyxFQUNoQyxVQUFzQjtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUZtQixhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRW5ELENBQUM7SUFFTSxhQUFhLENBQUMsU0FBeUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsZ0ZBQWdGO1lBQ2hGLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsU0FBeUI7UUFDMUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLGlCQUFpQjtZQUNqQixPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVoRCw0QkFBNEI7WUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEZBQTBGLENBQUMsQ0FBQztZQUNqSCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzVFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQTBCO1FBQ2pELFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixLQUFLLFVBQVUsQ0FBQyxLQUFLO2dCQUNuQixPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLEtBQUssVUFBVSxDQUFDLFdBQVc7Z0JBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUUsQ0FBQztvQkFDNUMsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqRixJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7d0JBQUUsT0FBTyxLQUFLLENBQUM7cUJBQUU7aUJBQ25GO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxVQUFVLENBQUMsUUFBUTtnQkFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxDQUFDO29CQUM1QyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7d0JBQUUsT0FBTyxLQUFLLENBQUM7cUJBQUU7aUJBQ2xGO2dCQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sYUFBYSxJQUFJLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2ZuRGlmZiA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnKTtcbmltcG9ydCB7IEFzc2VydGlvbiB9IGZyb20gJy4uL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBTdGFja0luc3BlY3RvciB9IGZyb20gJy4uL2luc3BlY3Rvcic7XG5cbmV4cG9ydCBlbnVtIE1hdGNoU3R5bGUge1xuICAvKiogUmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggKi9cbiAgRVhBQ1QgPSBcImV4YWN0bHlcIixcbiAgLyoqIEFsbG93cyBhbnkgY2hhbmdlIHRoYXQgZG9lcyBub3QgY2F1c2UgYSByZXNvdXJjZSByZXBsYWNlbWVudCAqL1xuICBOT19SRVBMQUNFUyA9IFwibm8gcmVwbGFjZXNcIixcbiAgLyoqIEFsbG93cyBhZGRpdGlvbnMsIGJ1dCBubyB1cGRhdGVzICovXG4gIFNVUEVSU0VUID0gXCJzdXBlcnNldFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdGx5TWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICByZXR1cm4gbWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZSwgTWF0Y2hTdHlsZS5FWEFDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZUFTdXBlcnNldE9mVGVtcGxhdGUodGVtcGxhdGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgcmV0dXJuIG1hdGNoVGVtcGxhdGUodGVtcGxhdGUsIE1hdGNoU3R5bGUuU1VQRVJTRVQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoU3R5bGU6IE1hdGNoU3R5bGUgPSBNYXRjaFN0eWxlLkVYQUNUKTogQXNzZXJ0aW9uPFN0YWNrSW5zcGVjdG9yPiB7XG4gIHJldHVybiBuZXcgU3RhY2tNYXRjaGVzVGVtcGxhdGVBc3NlcnRpb24odGVtcGxhdGUsIG1hdGNoU3R5bGUpO1xufVxuXG5jbGFzcyBTdGFja01hdGNoZXNUZW1wbGF0ZUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbjxTdGFja0luc3BlY3Rvcj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdGNoU3R5bGU6IE1hdGNoU3R5bGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGFzc2VydE9yVGhyb3coaW5zcGVjdG9yOiBTdGFja0luc3BlY3Rvcikge1xuICAgIGlmICghdGhpcy5hc3NlcnRVc2luZyhpbnNwZWN0b3IpKSB7XG4gICAgICAvLyBUaGUgZGV0YWlscyBoYXZlIGFscmVhZHkgYmVlbiBwcmludGVkLCBzbyBkb24ndCBnZW5lcmF0ZSBhIGh1Z2UgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSBjb21wYXJpc29uIHByb2R1Y2VkIHVuYWNjZXB0YWJsZSBtYXRjaGApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRVc2luZyhpbnNwZWN0b3I6IFN0YWNrSW5zcGVjdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGlmZiA9IGNmbkRpZmYuZGlmZlRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIGluc3BlY3Rvci52YWx1ZSk7XG4gICAgY29uc3QgYWNjZXB0YWJsZSA9IHRoaXMuaXNEaWZmQWNjZXB0YWJsZShkaWZmKTtcbiAgICBpZiAoIWFjY2VwdGFibGUpIHtcbiAgICAgIC8vIFByaW50IHRoZSBkaWZmXG4gICAgICBjZm5EaWZmLmZvcm1hdERpZmZlcmVuY2VzKHByb2Nlc3Muc3RkZXJyLCBkaWZmKTtcblxuICAgICAgLy8gUHJpbnQgdGhlIGFjdHVhbCB0ZW1wbGF0ZVxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShpbnNwZWN0b3IudmFsdWUsIHVuZGVmaW5lZCwgMikgKyAnXFxuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY2VwdGFibGU7XG4gIH1cblxuICBwcml2YXRlIGlzRGlmZkFjY2VwdGFibGUoZGlmZjogY2ZuRGlmZi5UZW1wbGF0ZURpZmYpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHRoaXMubWF0Y2hTdHlsZSkge1xuICAgIGNhc2UgTWF0Y2hTdHlsZS5FWEFDVDpcbiAgICAgIHJldHVybiBkaWZmLmRpZmZlcmVuY2VDb3VudCA9PT0gMDtcbiAgICBjYXNlIE1hdGNoU3R5bGUuTk9fUkVQTEFDRVM6XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkaWZmLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBkaWZmLnJlc291cmNlcy5jaGFuZ2VzW2tleV0hO1xuICAgICAgICBpZiAoY2hhbmdlLmNoYW5nZUltcGFjdCA9PT0gY2ZuRGlmZi5SZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgPT09IGNmbkRpZmYuUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSBNYXRjaFN0eWxlLlNVUEVSU0VUOlxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGlmZi5yZXNvdXJjZXMuY2hhbmdlcykpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gZGlmZi5yZXNvdXJjZXMuY2hhbmdlc1trZXldITtcbiAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgIT09IGNmbkRpZmYuUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBtYXRjaCBzdHlsZTogJHt0aGlzLm1hdGNoU3R5bGV9YCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB0ZW1wbGF0ZSAoJHt0aGlzLm1hdGNoU3R5bGV9KTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnRlbXBsYXRlLCBudWxsLCAyKX1gO1xuICB9XG59XG4iXX0=
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cdk = require("@aws-cdk/cdk");
const inspector_1 = require("./inspector");

@@ -18,5 +19,5 @@ function expect(stack, skipValidation = false) {

sstack = {
name: 'test',
name: stack.name,
template: stack.toCloudFormation(),
metadata: {},
metadata: collectStackMetadata(stack.node),
environment: {

@@ -38,2 +39,13 @@ name: 'test',

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsMkNBQTZDO0FBRTdDLFNBQWdCLE1BQU0sQ0FBQyxLQUF1QyxFQUFFLGNBQWMsR0FBRyxLQUFLO0lBQ3BGLHNFQUFzRTtJQUN0RSxtQkFBbUI7SUFDbkIsSUFBSSxNQUE0QixDQUFDO0lBRWpDLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixxREFBcUQ7WUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZIO1NBQ0Y7UUFFRCxNQUFNLEdBQUc7WUFDUCxJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLE1BQU07Z0JBQ2YsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxHQUFHLEtBQUssQ0FBQztLQUNoQjtJQUVELE9BQU8sSUFBSSwwQkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUEvQkQsd0JBK0JDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxDQUFtQztJQUMvRCxPQUFPLGtCQUFrQixJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgU3RhY2tJbnNwZWN0b3IgfSBmcm9tICcuL2luc3BlY3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3Qoc3RhY2s6IGFwaS5TeW50aGVzaXplZFN0YWNrIHwgY2RrLlN0YWNrLCBza2lwVmFsaWRhdGlvbiA9IGZhbHNlKTogU3RhY2tJbnNwZWN0b3Ige1xuICAvLyBDYW4ndCB1c2UgJ2luc3RhbmNlb2YnIGhlcmUsIHRoYXQgYnJlYWtzIGlmIHdlIGhhdmUgbXVsdGlwbGUgY29waWVzXG4gIC8vIG9mIHRoaXMgbGlicmFyeS5cbiAgbGV0IHNzdGFjazogYXBpLlN5bnRoZXNpemVkU3RhY2s7XG5cbiAgaWYgKGlzU3RhY2tDbGFzc0luc3RhbmNlKHN0YWNrKSkge1xuICAgIGlmICghc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIC8vIERvIGEgcHJlcGFyZS1hbmQtdmFsaWRhdGUgcnVuIG92ZXIgdGhlIGdpdmVuIHN0YWNrXG4gICAgICBzdGFjay5ub2RlLnByZXBhcmVUcmVlKCk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IHN0YWNrLm5vZGUudmFsaWRhdGVUcmVlKCk7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5tYXAoZSA9PiBgJHtlLm1lc3NhZ2V9IGF0OiAke2Uuc291cmNlLm5vZGUuc2NvcGV9YCkuam9pbignXFxuJyl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3N0YWNrID0ge1xuICAgICAgbmFtZTogJ3Rlc3QnLFxuICAgICAgdGVtcGxhdGU6IHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSxcbiAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5hbWU6ICd0ZXN0JyxcbiAgICAgICAgYWNjb3VudDogJ3Rlc3QnLFxuICAgICAgICByZWdpb246ICd0ZXN0J1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgc3N0YWNrID0gc3RhY2s7XG4gIH1cblxuICByZXR1cm4gbmV3IFN0YWNrSW5zcGVjdG9yKHNzdGFjayk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhY2tDbGFzc0luc3RhbmNlKHg6IGFwaS5TeW50aGVzaXplZFN0YWNrIHwgY2RrLlN0YWNrKTogeCBpcyBjZGsuU3RhY2sge1xuICByZXR1cm4gJ3RvQ2xvdWRGb3JtYXRpb24nIGluIHg7XG59Il19
function collectStackMetadata(root) {
const result = {};
for (const construct of root.findAll(cdk.ConstructOrder.DepthFirst)) {
const path = `/${root.id}/${construct.node.path}`;
for (const entry of construct.node.metadata) {
result[path] = result[path] || [];
result[path].push(root.resolve(entry));
}
}
return result;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQXFDO0FBRXJDLDJDQUE2QztBQUU3QyxTQUFnQixNQUFNLENBQUMsS0FBdUMsRUFBRSxjQUFjLEdBQUcsS0FBSztJQUNwRixzRUFBc0U7SUFDdEUsbUJBQW1CO0lBQ25CLElBQUksTUFBNEIsQ0FBQztJQUVqQyxJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFekIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2SDtTQUNGO1FBRUQsTUFBTSxHQUFHO1lBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDMUMsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxNQUFNO2dCQUNmLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRixDQUFDO0tBQ0g7U0FBTTtRQUNMLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLElBQUksMEJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBL0JELHdCQStCQztBQUVELFNBQVMsb0JBQW9CLENBQUMsQ0FBbUM7SUFDL0QsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsSUFBdUI7SUFDbkQsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IGFwaSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgU3RhY2tJbnNwZWN0b3IgfSBmcm9tICcuL2luc3BlY3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3Qoc3RhY2s6IGFwaS5TeW50aGVzaXplZFN0YWNrIHwgY2RrLlN0YWNrLCBza2lwVmFsaWRhdGlvbiA9IGZhbHNlKTogU3RhY2tJbnNwZWN0b3Ige1xuICAvLyBDYW4ndCB1c2UgJ2luc3RhbmNlb2YnIGhlcmUsIHRoYXQgYnJlYWtzIGlmIHdlIGhhdmUgbXVsdGlwbGUgY29waWVzXG4gIC8vIG9mIHRoaXMgbGlicmFyeS5cbiAgbGV0IHNzdGFjazogYXBpLlN5bnRoZXNpemVkU3RhY2s7XG5cbiAgaWYgKGlzU3RhY2tDbGFzc0luc3RhbmNlKHN0YWNrKSkge1xuICAgIGlmICghc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIC8vIERvIGEgcHJlcGFyZS1hbmQtdmFsaWRhdGUgcnVuIG92ZXIgdGhlIGdpdmVuIHN0YWNrXG4gICAgICBzdGFjay5ub2RlLnByZXBhcmVUcmVlKCk7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IHN0YWNrLm5vZGUudmFsaWRhdGVUcmVlKCk7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5tYXAoZSA9PiBgJHtlLm1lc3NhZ2V9IGF0OiAke2Uuc291cmNlLm5vZGUuc2NvcGV9YCkuam9pbignXFxuJyl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3N0YWNrID0ge1xuICAgICAgbmFtZTogc3RhY2submFtZSxcbiAgICAgIHRlbXBsYXRlOiBzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksXG4gICAgICBtZXRhZGF0YTogY29sbGVjdFN0YWNrTWV0YWRhdGEoc3RhY2subm9kZSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAndGVzdCcsXG4gICAgICAgIGFjY291bnQ6ICd0ZXN0JyxcbiAgICAgICAgcmVnaW9uOiAndGVzdCdcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNzdGFjayA9IHN0YWNrO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTdGFja0luc3BlY3Rvcihzc3RhY2spO1xufVxuXG5mdW5jdGlvbiBpc1N0YWNrQ2xhc3NJbnN0YW5jZSh4OiBhcGkuU3ludGhlc2l6ZWRTdGFjayB8IGNkay5TdGFjayk6IHggaXMgY2RrLlN0YWNrIHtcbiAgcmV0dXJuICd0b0Nsb3VkRm9ybWF0aW9uJyBpbiB4O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0U3RhY2tNZXRhZGF0YShyb290OiBjZGsuQ29uc3RydWN0Tm9kZSk6IGFwaS5TdGFja01ldGFkYXRhIHtcbiAgY29uc3QgcmVzdWx0OiBhcGkuU3RhY2tNZXRhZGF0YSA9IHt9O1xuICBmb3IgKGNvbnN0IGNvbnN0cnVjdCBvZiByb290LmZpbmRBbGwoY2RrLkNvbnN0cnVjdE9yZGVyLkRlcHRoRmlyc3QpKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvJHtyb290LmlkfS8ke2NvbnN0cnVjdC5ub2RlLnBhdGh9YDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnN0cnVjdC5ub2RlLm1ldGFkYXRhKSB7XG4gICAgICByZXN1bHRbcGF0aF0gPSByZXN1bHRbcGF0aF0gfHwgW107XG4gICAgICByZXN1bHRbcGF0aF0ucHVzaChyb290LnJlc29sdmUoZW50cnkpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
{
"name": "@aws-cdk/assert",
"version": "0.22.0",
"version": "0.23.0",
"description": "An assertion library for use with CDK Apps",

@@ -26,9 +26,9 @@ "main": "lib/index.js",

"devDependencies": {
"cdk-build-tools": "^0.22.0",
"pkglint": "^0.22.0"
"cdk-build-tools": "^0.23.0",
"pkglint": "^0.23.0"
},
"dependencies": {
"@aws-cdk/cdk": "^0.22.0",
"@aws-cdk/cloudformation-diff": "^0.22.0",
"@aws-cdk/cx-api": "^0.22.0",
"@aws-cdk/cdk": "^0.23.0",
"@aws-cdk/cloudformation-diff": "^0.23.0",
"@aws-cdk/cx-api": "^0.23.0",
"source-map-support": "^0.5.6"

@@ -35,0 +35,0 @@ },

@@ -7,3 +7,3 @@ "use strict";

const index_1 = require("../lib/index");
passingExample('expect <stack> at <some path> to have <some type>', () => {
passingExample('expect <synthStack> at <some path> to have <some type>', () => {
const resourceType = 'Test::Resource';

@@ -15,4 +15,10 @@ const synthStack = synthesizedStack(stack => {

});
passingExample('expect <stack> at <some path> *not* to have <some type>', () => {
passingExample('expect <synthStack> at <some path> to have <some type>', () => {
const resourceType = 'Test::Resource';
const stack = new cdk.Stack();
new TestResource(stack, 'TestResource', { type: resourceType });
index_1.expect(stack).at('/TestResource').to(index_1.haveType(resourceType));
});
passingExample('expect <synthStack> at <some path> *not* to have <some type>', () => {
const resourceType = 'Test::Resource';
const synthStack = synthesizedStack(stack => {

@@ -23,3 +29,3 @@ new TestResource(stack, 'TestResource', { type: resourceType });

});
passingExample('expect <stack> at <some path> to exist', () => {
passingExample('expect <synthStack> at <some path> to exist', () => {
const resourceType = 'Test::Resource';

@@ -31,3 +37,3 @@ const synthStack = synthesizedStack(stack => {

});
passingExample('expect <stack> to match (exactly) <template>', () => {
passingExample('expect <synthStack> to match (exactly) <template>', () => {
const resourceType = 'Test::Resource';

@@ -44,3 +50,3 @@ const synthStack = synthesizedStack(stack => {

});
passingExample('expect <stack> to match (no replaces) <template>', () => {
passingExample('expect <synthStack> to match (no replaces) <template>', () => {
const resourceType = 'Test::Resource';

@@ -53,3 +59,3 @@ const synthStack = synthesizedStack(stack => {

});
passingExample('expect <stack> to be a superset of <template>', () => {
passingExample('expect <synthStack> to be a superset of <template>', () => {
const resourceType = 'Test::Resource';

@@ -82,3 +88,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> at <some path> *not* to have <some type>', () => {
failingExample('expect <synthStack> at <some path> *not* to have <some type>', () => {
const resourceType = 'Test::Resource';

@@ -90,3 +96,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> at <some path> to have <some type>', () => {
failingExample('expect <synthStack> at <some path> to have <some type>', () => {
const resourceType = 'Test::Resource';

@@ -98,3 +104,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> at <some path> to exist', () => {
failingExample('expect <synthStack> at <some path> to exist', () => {
const resourceType = 'Test::Resource';

@@ -106,3 +112,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> to match (exactly) <template>', () => {
failingExample('expect <synthStack> to match (exactly) <template>', () => {
const resourceType = 'Test::Resource';

@@ -119,3 +125,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> to match (no replaces) <template>', () => {
failingExample('expect <synthStack> to match (no replaces) <template>', () => {
const resourceType = 'Test::Resource';

@@ -132,3 +138,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> to be a superset of <template>', () => {
failingExample('expect <synthStack> to be a superset of <template>', () => {
const resourceType = 'Test::Resource';

@@ -152,3 +158,3 @@ const synthStack = synthesizedStack(stack => {

// countResources
passingExample('expect <stack> to count resources - as expected', () => {
passingExample('expect <synthStack> to count resources - as expected', () => {
const synthStack = synthesizedStack(stack => {

@@ -167,3 +173,3 @@ new TestResource(stack, 'R1', { type: 'Bar' });

});
failingExample('expect <stack> to count resources - more than expected', () => {
failingExample('expect <synthStack> to count resources - more than expected', () => {
const resourceType = 'Test::Resource';

@@ -176,3 +182,3 @@ const synthStack = synthesizedStack(stack => {

});
failingExample('expect <stack> to count resources - less than expected', () => {
failingExample('expect <synthStack> to count resources - less than expected', () => {
const resourceType = 'Test::Resource';

@@ -216,2 +222,2 @@ const synthStack = synthesizedStack(stack => {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hc3NlcnRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQXFDO0FBRXJDLG9DQUFxQztBQUlyQyxzQ0FBcUM7QUFDckMsd0NBQWtHO0FBRWxHLGNBQWMsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7SUFDdkUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDO0FBQ0gsY0FBYyxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtJQUM3RSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMxQyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDSCxjQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFDLENBQUM7QUFDSCxjQUFjLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO0lBQzVELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFD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S0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYSxFQUFFLEVBQXdCO0lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQUUsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7S0FBRTtJQUMvQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUU7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDZixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEVBQThCO0lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ1YsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBTUQsTUFBTSxZQUFhLFNBQVEsR0FBRyxDQUFDLFFBQVE7SUFDckMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlcic7XG5cbmltcG9ydCBjZGsgPSByZXF1aXJlKCdAYXdzLWNkay9jZGsnKTtcbmltcG9ydCBjeCA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgY291bnRSZXNvdXJjZXMsIGV4aXN0LCBleHBlY3QsIGhhdmVUeXBlLCBNYXRjaFN0eWxlLCBtYXRjaFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2luZGV4JztcblxucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3RhY2s+IGF0IDxzb21lIHBhdGg+IHRvIGhhdmUgPHNvbWUgdHlwZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBleHBlY3Qoc3ludGhTdGFjaykuYXQoJy9UZXN0UmVzb3VyY2UnKS50byhoYXZlVHlwZShyZXNvdXJjZVR5cGUpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3RhY2s+IGF0IDxzb21lIHBhdGg+ICpub3QqIHRvIGhhdmUgPHNvbWUgdHlwZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBleHBlY3Qoc3ludGhTdGFjaykuYXQoJy9UZXN0UmVzb3VyY2UnKS5ub3RUbyhoYXZlVHlwZSgnRm9vOjpCYXInKSk7XG59KTtcbnBhc3NpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiBhdCA8c29tZSBwYXRoPiB0byBleGlzdCcsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGV4cGVjdChzeW50aFN0YWNrKS5hdCgnL1Rlc3RSZXNvdXJjZScpLnRvKGV4aXN0KCkpO1xufSk7XG5wYXNzaW5nRXhhbXBsZSgnZXhwZWN0IDxzdGFjaz4gdG8gbWF0Y2ggKGV4YWN0bHkpIDx0ZW1wbGF0ZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFRlc3RSZXNvdXJjZTogeyBUeXBlOiByZXNvdXJjZVR5cGUgfVxuICAgIH1cbiAgfTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKG1hdGNoVGVtcGxhdGUoZXhwZWN0ZWQsIE1hdGNoU3R5bGUuRVhBQ1QpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3RhY2s+IHRvIG1hdGNoIChubyByZXBsYWNlcykgPHRlbXBsYXRlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge307XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLk5PX1JFUExBQ0VTKSk7XG59KTtcbnBhc3NpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiB0byBiZSBhIHN1cGVyc2V0IG9mIDx0ZW1wbGF0ZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICAvLyBBZGRlZFxuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdOZXdSZXNvdXJjZScsIHsgdHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcgfSk7XG4gICAgLy8gRXhwZWN0ZWRcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlQScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2VCJywgeyB0eXBlOiByZXNvdXJjZVR5cGUsIHByb3BlcnRpZXM6IHsgRm9vOiAnQmFyJyB9IH0pO1xuICB9KTtcbiAgY29uc3QgZXhwZWN0ZWQgPSB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBUZXN0UmVzb3VyY2VBOiB7IFR5cGU6ICdUZXN0OjpSZXNvdXJjZScgfSxcbiAgICAgIFRlc3RSZXNvdXJjZUI6IHsgVHlwZTogJ1Rlc3Q6OlJlc291cmNlJywgUHJvcGVydGllczogeyBGb286ICdCYXInIH0gfVxuICAgIH1cbiAgfTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKG1hdGNoVGVtcGxhdGUoZXhwZWN0ZWQsIE1hdGNoU3R5bGUuU1VQRVJTRVQpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ3N1Z2FyIGZvciBtYXRjaGluZyBzdGFjayB0byBhIHRlbXBsYXRlJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiAnVGVzdDo6UmVzb3VyY2UnIH0pO1xuICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlOiB7XG4gICAgICAgIFR5cGU6ICdUZXN0OjpSZXNvdXJjZSdcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG5cbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiBhdCA8c29tZSBwYXRoPiAqbm90KiB0byBoYXZlIDxzb21lIHR5cGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLmF0KCcvVGVzdFJlc291cmNlJykubm90VG8oaGF2ZVR5cGUocmVzb3VyY2VUeXBlKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiBhdCA8c29tZSBwYXRoPiB0byBoYXZlIDxzb21lIHR5cGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLmF0KCcvVGVzdFJlc291cmNlJykudG8oaGF2ZVR5cGUoJ0Zvbzo6QmFyJykpO1xufSk7XG5mYWlsaW5nRXhhbXBsZSgnZXhwZWN0IDxzdGFjaz4gYXQgPHNvbWUgcGF0aD4gdG8gZXhpc3QnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBleHBlY3Qoc3ludGhTdGFjaykuYXQoJy9Gb28vQmFyJykudG8oZXhpc3QoKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiB0byBtYXRjaCAoZXhhY3RseSkgPHRlbXBsYXRlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlOiB7IFR5cGU6IHJlc291cmNlVHlwZSwgRGVwZW5kc09uOiBbJ1NvbWV0aGluZyddIH1cbiAgICB9XG4gIH07XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLkVYQUNUKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiB0byBtYXRjaCAobm8gcmVwbGFjZXMpIDx0ZW1wbGF0ZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFRlc3RSZXNvdXJjZTogeyBUeXBlOiAnQVdTOjpTMzo6QnVja2V0JyB9XG4gICAgfVxuICB9O1xuICBleHBlY3Qoc3ludGhTdGFjaykudG8obWF0Y2hUZW1wbGF0ZShleHBlY3RlZCwgTWF0Y2hTdHlsZS5OT19SRVBMQUNFUykpO1xufSk7XG5mYWlsaW5nRXhhbXBsZSgnZXhwZWN0IDxzdGFjaz4gdG8gYmUgYSBzdXBlcnNldCBvZiA8dGVtcGxhdGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgLy8gQWRkZWRcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnTmV3UmVzb3VyY2UnLCB7IHR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnIH0pO1xuICAgIC8vIEV4cGVjdGVkXG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZUEnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgICAvLyBFeHBlY3RlZCwgYnV0IGhhcyBkaWZmZXJlbnQgcHJvcGVydGllcyAtIHdpbGwgYnJlYWtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlQicsIHsgdHlwZTogcmVzb3VyY2VUeXBlLCBwcm9wZXJ0aWVzOiB7IEZvbzogJ0JhcicgfSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlQTogeyBUeXBlOiAnVGVzdDo6UmVzb3VyY2UnIH0sXG4gICAgICBUZXN0UmVzb3VyY2VCOiB7IFR5cGU6ICdUZXN0OjpSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgRm9vOiAnQmF6JyB9IH1cbiAgICB9XG4gIH07XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLlNVUEVSU0VUKSk7XG59KTtcblxuLy8gY291bnRSZXNvdXJjZXNcblxucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3RhY2s+IHRvIGNvdW50IHJlc291cmNlcyAtIGFzIGV4cGVjdGVkJywgKCkgPT4ge1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1IxJywgeyB0eXBlOiAnQmFyJyB9KTtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjInLCB7IHR5cGU6ICdCYXInIH0pO1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdSMycsIHsgdHlwZTogJ0ZvbycgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhjb3VudFJlc291cmNlcygnQmFyJywgMikpO1xuICBleHBlY3Qoc3ludGhTdGFjaykudG8oY291bnRSZXNvdXJjZXMoJ0ZvbycsIDEpKTtcbn0pO1xuXG5wYXNzaW5nRXhhbXBsZSgnZXhwZWN0IDxzdGFjaz4gdG8gY291bnQgcmVzb3VyY2VzIC0gZXhwZWN0ZWQgbm8gcmVzb3VyY2VzJywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBleHBlY3Qoc3RhY2spLnRvKGNvdW50UmVzb3VyY2VzKHJlc291cmNlVHlwZSwgMCkpO1xufSk7XG5cbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiB0byBjb3VudCByZXNvdXJjZXMgLSBtb3JlIHRoYW4gZXhwZWN0ZWQnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjEnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjInLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG5cbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKGNvdW50UmVzb3VyY2VzKHJlc291cmNlVHlwZSwgMSkpO1xufSk7XG5cbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN0YWNrPiB0byBjb3VudCByZXNvdXJjZXMgLSBsZXNzIHRoYW4gZXhwZWN0ZWQnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjEnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjInLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG5cbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKGNvdW50UmVzb3VyY2VzKHJlc291cmNlVHlwZSwgMCkpO1xufSk7XG5cbmZ1bmN0aW9uIHBhc3NpbmdFeGFtcGxlKHRpdGxlOiBzdHJpbmcsIGNiOiAodGVzdDogVGVzdCkgPT4gdm9pZCkge1xuICBpZiAoIWV4cG9ydHMucGFzc2luZykgeyBleHBvcnRzLnBhc3NpbmcgPSB7fTsgfVxuICBleHBvcnRzLnBhc3NpbmdbdGl0bGVdID0gKHRlc3Q6IFRlc3QpID0+IHtcbiAgICBjYih0ZXN0KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmFpbGluZ0V4YW1wbGUodGl0bGU6IHN0cmluZywgY2I6ICh0ZXN0OiBUZXN0KSA9PiB2b2lkKSB7XG4gIGlmICghZXhwb3J0cy5mYWlsaW5nKSB7IGV4cG9ydHMuZmFpbGluZyA9IHt9OyB9XG4gIGV4cG9ydHMuZmFpbGluZ1t0aXRsZV0gPSAodGVzdDogVGVzdCkgPT4ge1xuICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgIGNiKHRlc3QpO1xuICAgIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzeW50aGVzaXplZFN0YWNrKGZuOiAoc3RhY2s6IGNkay5TdGFjaykgPT4gdm9pZCk6IGN4LlN5bnRoZXNpemVkU3RhY2sge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gIGZuKHN0YWNrKTtcbiAgcmV0dXJuIGFwcC5zeW50aGVzaXplU3RhY2soc3RhY2submFtZSk7XG59XG5cbmludGVyZmFjZSBUZXN0UmVzb3VyY2VQcm9wcyBleHRlbmRzIGNkay5SZXNvdXJjZVByb3BzIHtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5jbGFzcyBUZXN0UmVzb3VyY2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRlc3RSZXNvdXJjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hc3NlcnRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQXFDO0FBRXJDLG9DQUFxQztBQUlyQyxzQ0FBcUM7QUFDckMsd0NBQWtHO0FBRWxHLGNBQWMsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7SUFDNUUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDO0FBQ0gsY0FBYyxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtJQUM1RSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFFaEUsY0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQyxDQUFDO0FBQ0gsY0FBYyxDQUFDLDhEQUE4RCxFQUFFLEdBQUcsRUFBRTtJQUNsRixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQUN0QyxNQUFNLFVBQVUs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SUFDOUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ1YsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBTUQsTUFBTSxZQUFhLFNBQVEsR0FBRyxDQUFDLFFBQVE7SUFDckMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlcic7XG5cbmltcG9ydCBjZGsgPSByZXF1aXJlKCdAYXdzLWNkay9jZGsnKTtcbmltcG9ydCBjeCA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2N4LWFwaScpO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgY291bnRSZXNvdXJjZXMsIGV4aXN0LCBleHBlY3QsIGhhdmVUeXBlLCBNYXRjaFN0eWxlLCBtYXRjaFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2luZGV4JztcblxucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gYXQgPHNvbWUgcGF0aD4gdG8gaGF2ZSA8c29tZSB0eXBlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGV4cGVjdChzeW50aFN0YWNrKS5hdCgnL1Rlc3RSZXNvdXJjZScpLnRvKGhhdmVUeXBlKHJlc291cmNlVHlwZSkpO1xufSk7XG5wYXNzaW5nRXhhbXBsZSgnZXhwZWN0IDxzeW50aFN0YWNrPiBhdCA8c29tZSBwYXRoPiB0byBoYXZlIDxzb21lIHR5cGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuXG4gIGV4cGVjdChzdGFjaykuYXQoJy9UZXN0UmVzb3VyY2UnKS50byhoYXZlVHlwZShyZXNvdXJjZVR5cGUpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gYXQgPHNvbWUgcGF0aD4gKm5vdCogdG8gaGF2ZSA8c29tZSB0eXBlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGV4cGVjdChzeW50aFN0YWNrKS5hdCgnL1Rlc3RSZXNvdXJjZScpLm5vdFRvKGhhdmVUeXBlKCdGb286OkJhcicpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gYXQgPHNvbWUgcGF0aD4gdG8gZXhpc3QnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBleHBlY3Qoc3ludGhTdGFjaykuYXQoJy9UZXN0UmVzb3VyY2UnKS50byhleGlzdCgpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gdG8gbWF0Y2ggKGV4YWN0bHkpIDx0ZW1wbGF0ZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFRlc3RSZXNvdXJjZTogeyBUeXBlOiByZXNvdXJjZVR5cGUgfVxuICAgIH1cbiAgfTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKG1hdGNoVGVtcGxhdGUoZXhwZWN0ZWQsIE1hdGNoU3R5bGUuRVhBQ1QpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gdG8gbWF0Y2ggKG5vIHJlcGxhY2VzKSA8dGVtcGxhdGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcbiAgY29uc3QgZXhwZWN0ZWQgPSB7fTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLnRvKG1hdGNoVGVtcGxhdGUoZXhwZWN0ZWQsIE1hdGNoU3R5bGUuTk9fUkVQTEFDRVMpKTtcbn0pO1xucGFzc2luZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gdG8gYmUgYSBzdXBlcnNldCBvZiA8dGVtcGxhdGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgLy8gQWRkZWRcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnTmV3UmVzb3VyY2UnLCB7IHR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnIH0pO1xuICAgIC8vIEV4cGVjdGVkXG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZUEnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlQicsIHsgdHlwZTogcmVzb3VyY2VUeXBlLCBwcm9wZXJ0aWVzOiB7IEZvbzogJ0JhcicgfSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlQTogeyBUeXBlOiAnVGVzdDo6UmVzb3VyY2UnIH0sXG4gICAgICBUZXN0UmVzb3VyY2VCOiB7IFR5cGU6ICdUZXN0OjpSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgRm9vOiAnQmFyJyB9IH1cbiAgICB9XG4gIH07XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLlNVUEVSU0VUKSk7XG59KTtcbnBhc3NpbmdFeGFtcGxlKCdzdWdhciBmb3IgbWF0Y2hpbmcgc3RhY2sgdG8gYSB0ZW1wbGF0ZScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogJ1Rlc3Q6OlJlc291cmNlJyB9KTtcbiAgZXhwZWN0KHN0YWNrKS50b01hdGNoKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFRlc3RSZXNvdXJjZToge1xuICAgICAgICBUeXBlOiAnVGVzdDo6UmVzb3VyY2UnXG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mYWlsaW5nRXhhbXBsZSgnZXhwZWN0IDxzeW50aFN0YWNrPiBhdCA8c29tZSBwYXRoPiAqbm90KiB0byBoYXZlIDxzb21lIHR5cGU+JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLmF0KCcvVGVzdFJlc291cmNlJykubm90VG8oaGF2ZVR5cGUocmVzb3VyY2VUeXBlKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IGF0IDxzb21lIHBhdGg+IHRvIGhhdmUgPHNvbWUgdHlwZT4nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9ICdUZXN0OjpSZXNvdXJjZSc7XG4gIGNvbnN0IHN5bnRoU3RhY2sgPSBzeW50aGVzaXplZFN0YWNrKHN0YWNrID0+IHtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnVGVzdFJlc291cmNlJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuICBleHBlY3Qoc3ludGhTdGFjaykuYXQoJy9UZXN0UmVzb3VyY2UnKS50byhoYXZlVHlwZSgnRm9vOjpCYXInKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IGF0IDxzb21lIHBhdGg+IHRvIGV4aXN0JywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcbiAgZXhwZWN0KHN5bnRoU3RhY2spLmF0KCcvRm9vL0JhcicpLnRvKGV4aXN0KCkpO1xufSk7XG5mYWlsaW5nRXhhbXBsZSgnZXhwZWN0IDxzeW50aFN0YWNrPiB0byBtYXRjaCAoZXhhY3RseSkgPHRlbXBsYXRlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlOiB7IFR5cGU6IHJlc291cmNlVHlwZSwgRGVwZW5kc09uOiBbJ1NvbWV0aGluZyddIH1cbiAgICB9XG4gIH07XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLkVYQUNUKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IHRvIG1hdGNoIChubyByZXBsYWNlcykgPHRlbXBsYXRlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2UnLCB7IHR5cGU6IHJlc291cmNlVHlwZSB9KTtcbiAgfSk7XG4gIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgIFJlc291cmNlczoge1xuICAgICAgVGVzdFJlc291cmNlOiB7IFR5cGU6ICdBV1M6OlMzOjpCdWNrZXQnIH1cbiAgICB9XG4gIH07XG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhtYXRjaFRlbXBsYXRlKGV4cGVjdGVkLCBNYXRjaFN0eWxlLk5PX1JFUExBQ0VTKSk7XG59KTtcbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IHRvIGJlIGEgc3VwZXJzZXQgb2YgPHRlbXBsYXRlPicsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIC8vIEFkZGVkXG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ05ld1Jlc291cmNlJywgeyB0eXBlOiAnQVdTOjpTMzo6QnVja2V0JyB9KTtcbiAgICAvLyBFeHBlY3RlZFxuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdUZXN0UmVzb3VyY2VBJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gICAgLy8gRXhwZWN0ZWQsIGJ1dCBoYXMgZGlmZmVyZW50IHByb3BlcnRpZXMgLSB3aWxsIGJyZWFrXG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1Rlc3RSZXNvdXJjZUInLCB7IHR5cGU6IHJlc291cmNlVHlwZSwgcHJvcGVydGllczogeyBGb286ICdCYXInIH0gfSk7XG4gIH0pO1xuICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFRlc3RSZXNvdXJjZUE6IHsgVHlwZTogJ1Rlc3Q6OlJlc291cmNlJyB9LFxuICAgICAgVGVzdFJlc291cmNlQjogeyBUeXBlOiAnVGVzdDo6UmVzb3VyY2UnLCBQcm9wZXJ0aWVzOiB7IEZvbzogJ0JheicgfSB9XG4gICAgfVxuICB9O1xuICBleHBlY3Qoc3ludGhTdGFjaykudG8obWF0Y2hUZW1wbGF0ZShleHBlY3RlZCwgTWF0Y2hTdHlsZS5TVVBFUlNFVCkpO1xufSk7XG5cbi8vIGNvdW50UmVzb3VyY2VzXG5cbnBhc3NpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IHRvIGNvdW50IHJlc291cmNlcyAtIGFzIGV4cGVjdGVkJywgKCkgPT4ge1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1IxJywgeyB0eXBlOiAnQmFyJyB9KTtcbiAgICBuZXcgVGVzdFJlc291cmNlKHN0YWNrLCAnUjInLCB7IHR5cGU6ICdCYXInIH0pO1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdSMycsIHsgdHlwZTogJ0ZvbycgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhjb3VudFJlc291cmNlcygnQmFyJywgMikpO1xuICBleHBlY3Qoc3ludGhTdGFjaykudG8oY291bnRSZXNvdXJjZXMoJ0ZvbycsIDEpKTtcbn0pO1xuXG5wYXNzaW5nRXhhbXBsZSgnZXhwZWN0IDxzdGFjaz4gdG8gY291bnQgcmVzb3VyY2VzIC0gZXhwZWN0ZWQgbm8gcmVzb3VyY2VzJywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBleHBlY3Qoc3RhY2spLnRvKGNvdW50UmVzb3VyY2VzKHJlc291cmNlVHlwZSwgMCkpO1xufSk7XG5cbmZhaWxpbmdFeGFtcGxlKCdleHBlY3QgPHN5bnRoU3RhY2s+IHRvIGNvdW50IHJlc291cmNlcyAtIG1vcmUgdGhhbiBleHBlY3RlZCcsICgpID0+IHtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gJ1Rlc3Q6OlJlc291cmNlJztcbiAgY29uc3Qgc3ludGhTdGFjayA9IHN5bnRoZXNpemVkU3RhY2soc3RhY2sgPT4ge1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdSMScsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICAgIG5ldyBUZXN0UmVzb3VyY2Uoc3RhY2ssICdSMicsIHsgdHlwZTogcmVzb3VyY2VUeXBlIH0pO1xuICB9KTtcblxuICBleHBlY3Qoc3ludGhTdGFjaykudG8oY291bnRSZXNvdXJjZXMocmVzb3VyY2VUeXBlLCAxKSk7XG59KTtcblxuZmFpbGluZ0V4YW1wbGUoJ2V4cGVjdCA8c3ludGhTdGFjaz4gdG8gY291bnQgcmVzb3VyY2VzIC0gbGVzcyB0aGFuIGV4cGVjdGVkJywgKCkgPT4ge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSAnVGVzdDo6UmVzb3VyY2UnO1xuICBjb25zdCBzeW50aFN0YWNrID0gc3ludGhlc2l6ZWRTdGFjayhzdGFjayA9PiB7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1IxJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gICAgbmV3IFRlc3RSZXNvdXJjZShzdGFjaywgJ1IyJywgeyB0eXBlOiByZXNvdXJjZVR5cGUgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChzeW50aFN0YWNrKS50byhjb3VudFJlc291cmNlcyhyZXNvdXJjZVR5cGUsIDApKTtcbn0pO1xuXG5mdW5jdGlvbiBwYXNzaW5nRXhhbXBsZSh0aXRsZTogc3RyaW5nLCBjYjogKHRlc3Q6IFRlc3QpID0+IHZvaWQpIHtcbiAgaWYgKCFleHBvcnRzLnBhc3NpbmcpIHsgZXhwb3J0cy5wYXNzaW5nID0ge307IH1cbiAgZXhwb3J0cy5wYXNzaW5nW3RpdGxlXSA9ICh0ZXN0OiBUZXN0KSA9PiB7XG4gICAgY2IodGVzdCk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxpbmdFeGFtcGxlKHRpdGxlOiBzdHJpbmcsIGNiOiAodGVzdDogVGVzdCkgPT4gdm9pZCkge1xuICBpZiAoIWV4cG9ydHMuZmFpbGluZykgeyBleHBvcnRzLmZhaWxpbmcgPSB7fTsgfVxuICBleHBvcnRzLmZhaWxpbmdbdGl0bGVdID0gKHRlc3Q6IFRlc3QpID0+IHtcbiAgICB0ZXN0LnRocm93cygoKSA9PiB7XG4gICAgICBjYih0ZXN0KTtcbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3ludGhlc2l6ZWRTdGFjayhmbjogKHN0YWNrOiBjZGsuU3RhY2spID0+IHZvaWQpOiBjeC5TeW50aGVzaXplZFN0YWNrIHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICBmbihzdGFjayk7XG4gIHJldHVybiBhcHAuc3ludGhlc2l6ZVN0YWNrKHN0YWNrLm5hbWUpO1xufVxuXG5pbnRlcmZhY2UgVGVzdFJlc291cmNlUHJvcHMgZXh0ZW5kcyBjZGsuUmVzb3VyY2VQcm9wcyB7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuY2xhc3MgVGVzdFJlc291cmNlIGV4dGVuZHMgY2RrLlJlc291cmNlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUZXN0UmVzb3VyY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG59XG4iXX0=
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc