Socket
Socket
Sign inDemoInstall

babel-plugin-ember-template-compilation

Package Overview
Dependencies
8
Maintainers
17
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.2.1 to 2.2.2

src/hbs-utils.d.ts

2

package.json
{
"name": "babel-plugin-ember-template-compilation",
"version": "2.2.1",
"version": "2.2.2",
"description": "Babel implementation of Ember's low-level template-compilation API",

@@ -5,0 +5,0 @@ "repository": "https://github.com/emberjs/babel-plugin-ember-template-compilation",

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

return res;
}, new scope_locals_1.ScopeLocals());
}, new scope_locals_1.ScopeLocals({ mode: 'explicit' }));
}

@@ -182,2 +182,2 @@ parseEval(invokedName, path) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9uLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxpREFBNkM7QUFFN0MsTUFBYSxnQkFBZ0I7SUFDM0IsWUFBb0IsS0FBbUI7UUFBbkIsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUFHLENBQUM7SUFFM0MsZUFBZSxDQUFDLFdBQW1CLEVBQUUsSUFBNEI7UUFDL0QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixLQUFLLGtCQUFrQjtnQkFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQW9DLENBQUMsQ0FBQztZQUN2RixLQUFLLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxJQUFtQyxDQUFDLENBQUM7YUFDcEY7WUFDRCxLQUFLLGVBQWUsQ0FBQztZQUNyQixLQUFLLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pCO2dCQUNFLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUM1QixHQUFHLFdBQVcsa0RBQWtELElBQUksQ0FBQyxTQUFTLENBQzVFLElBQUksQ0FBQyxJQUFJLENBQ1YsRUFBRSxDQUNKLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFtQixFQUFFLElBQWlDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxPQUFPLENBQUMsbUJBQW1CLENBQUMsb0NBQW9DLENBQUMsQ0FBQzthQUN6RTtpQkFBTSxJQUFJLE9BQU8s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QUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBWSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUF2T0QsNENBdU9DO0FBRUQsU0FBUyxJQUFJLENBQUMsSUFBb0M7SUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbkI7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztLQUNsQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5vZGVQYXRoIH0gZnJvbSAnQGJhYmVsL3RyYXZlcnNlJztcbmltcG9ydCB0eXBlICogYXMgQmFiZWwgZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyB0eXBlcyBhcyB0IH0gZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHsgU2NvcGVMb2NhbHMgfSBmcm9tICcuL3Njb3BlLWxvY2Fscyc7XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWJlbDogdHlwZW9mIEJhYmVsKSB7fVxuXG4gIHBhcnNlRXhwcmVzc2lvbihpbnZva2VkTmFtZTogc3RyaW5nLCBwYXRoOiBOb2RlUGF0aDx0LkV4cHJlc3Npb24+KTogdW5rbm93biB7XG4gICAgc3dpdGNoIChwYXRoLm5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT2JqZWN0RXhwcmVzc2lvbihpbnZva2VkTmFtZSwgcGF0aCBhcyBOb2RlUGF0aDx0Lk9iamVjdEV4cHJlc3Npb24+KTtcbiAgICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJheUV4cHJlc3Npb24oaW52b2tlZE5hbWUsIHBhdGggYXMgTm9kZVBhdGg8dC5BcnJheUV4cHJlc3Npb24+KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1N0cmluZ0xpdGVyYWwnOlxuICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgY2FzZSAnTnVtZXJpY0xpdGVyYWwnOlxuICAgICAgICByZXR1cm4gcGF0aC5ub2RlLnZhbHVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgcGF0aC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgIGAke2ludm9rZWROYW1lfSBjYW4gb25seSBhY2NlcHQgc3RhdGljIG9wdGlvbnMgYnV0IHlvdSBwYXNzZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGgubm9kZVxuICAgICAgICAgICl9YFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQXJyYXlFeHByZXNzaW9uKGludm9rZWROYW1lOiBzdHJpbmcsIHBhdGg6IE5vZGVQYXRoPHQuQXJyYXlFeHByZXNzaW9uPikge1xuICAgIHJldHVybiBwYXRoLmdldCgnZWxlbWVudHMnKS5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmlzU3ByZWFkRWxlbWVudCgpKSB7XG4gICAgICAgIHRocm93IGVsZW1lbnQuYnVpbGRDb2RlRnJhbWVFcnJvcihgc3ByZWFkIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQgaGVyZWApO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzRXhwcmVzc2lvbigpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvbihpbnZva2VkTmFtZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZVNjb3BlKGludm9rZWROYW1lOiBzdHJpbmcsIHBhdGg6IE5vZGVQYXRoPHQuT2JqZWN0UHJvcGVydHkgfCB0Lk9iamVjdE1ldGhvZD4pOiBTY29wZUxvY2FscyB7XG4gICAgbGV0IGJvZHk6IHQuQmxvY2tTdGF0ZW1lbnQgfCB0LkV4cHJlc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAocGF0aC5ub2RlLnR5cGUgPT09ICdPYmplY3RNZXRob2QnKSB7XG4gICAgICBib2R5ID0gcGF0aC5ub2RlLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHZhbHVlIH0gPSBwYXRoLm5vZGU7XG4gICAgICBpZiAodGhpcy50LmlzT2JqZWN0RXhwcmVzc2lvbih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgcGF0aC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgIGBQYXNzaW5nIGFuIG9iamVjdCBhcyB0aGUgXFxgc2NvcGVcXGAgcHJvcGVydHkgdG8gaW5saW5lIHRlbXBsYXRlcyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgcGFzcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBvYmplY3QgZXhwcmVzc2lvbiBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnQuaXNGdW5jdGlvbkV4cHJlc3Npb24odmFsdWUpIHx8IHRoaXMudC5pc0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKHZhbHVlKSkge1xuICAgICAgICBib2R5ID0gdmFsdWUuYm9keTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb2JqRXhwcmVzc2lvbjogdC5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHwgbnVsbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChib2R5Py50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgIG9iakV4cHJlc3Npb24gPSBib2R5O1xuICAgIH0gZWxzZSBpZiAoYm9keT8udHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgLy8gU0FGRVRZOiBXZSBrbm93IHRoYXQgdGhlIGJvZHkgaXMgYSBSZXR1cm5TdGF0ZW1lbnQgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyBpbnNpZGVcbiAgICAgIGxldCByZXR1cm5TdGF0ZW1lbnRzID0gYm9keS5ib2R5LmZpbHRlcihcbiAgICAgICAgKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LnR5cGUgPT09ICdSZXR1cm5TdGF0ZW1lbnQnXG4gICAgICApIGFzIEJhYmVsLnR5cGVzLlJldHVyblN0YXRlbWVudFtdO1xuXG4gICAgICBpZiAocmV0dXJuU3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTY29wZSBmdW5jdGlvbnMgbXVzdCBoYXZlIGEgc2luZ2xlIHJldHVybiBzdGF0ZW1lbnQgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgZXhwcmVzc2lvbiBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvYmpFeHByZXNzaW9uID0gcmV0dXJuU3RhdGVtZW50c1swXS5hcmd1bWVudDtcbiAgICB9XG5cbiAgICBpZiAob2JqRXhwcmVzc2lvbj8udHlwZSAhPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgIGBTY29wZSBvYmplY3RzIGZvciBcXGAke2ludm9rZWROYW1lfVxcYCBtdXN0IGJlIGFuIG9iamVjdCBleHByZXNzaW9uIGNvbnRhaW5pbmcgb25seSByZWZlcmVuY2VzIHRvIGluLXNjb3BlIHZhbHVlcywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gb2JqZWN0IGV4cHJlc3Npb24gY29udGFpbmluZyBvbmx5IHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqRXhwcmVzc2lvbi5wcm9wZXJ0aWVzLnJlZHVjZSgocmVzLCBwcm9wKSA9PiB7XG4gICAgICBpZiAodGhpcy50LmlzU3ByZWFkRWxlbWVudChwcm9wKSkge1xuICAgICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICAgYFNjb3BlIG9iamVjdHMgZm9yIFxcYCR7aW52b2tlZE5hbWV9XFxgIG1heSBub3QgY29udGFpbiBzcHJlYWQgZWxlbWVudHNgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50LmlzT2JqZWN0TWV0aG9kKHByb3ApKSB7XG4gICAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgICBgU2NvcGUgb2JqZWN0cyBmb3IgXFxgJHtpbnZva2VkTmFtZX1cXGAgbWF5IG5vdCBjb250YWluIG1ldGhvZHNgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHByb3A7XG4gICAgICBpZiAoIXRoaXMudC5pc1N0cmluZ0xpdGVyYWwoa2V5KSAmJiAhdGhpcy50LmlzSWRlbnRpZmllcihrZXkpKSB7XG4gICAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgICBgU2NvcGUgb2JqZWN0cyBmb3IgXFxgJHtpbnZva2VkTmFtZX1cXGAgbWF5IG9ubHkgY29udGFpbiBzdGF0aWMgcHJvcGVydHkgbmFtZXNgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcm9wTmFtZSA9IG5hbWUoa2V5KTtcblxuICAgICAgaWYgKHZhbHVlLnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICAgYFNjb3BlIG9iamVjdHMgZm9yIFxcYCR7aW52b2tlZE5hbWV9XFxgIG1heSBvbmx5IGNvbnRhaW4gZGlyZWN0IHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzLCBlLmcuIHsgJHtwcm9wTmFtZX0gfSBvciB7ICR7cHJvcE5hbWV9OiAke3Byb3BOYW1lfSB9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXMuYWRkKHByb3BOYW1lLCB2YWx1ZS5uYW1lKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgbmV3IFNjb3BlTG9jYWxzKCkpO1xuICB9XG5cbiAgcGFyc2VFdmFsKFxuICAgIGludm9rZWROYW1lOiBzdHJpbmcsXG4gICAgcGF0aDogTm9kZVBhdGg8dC5PYmplY3RQcm9wZXJ0eSB8IHQuT2JqZWN0TWV0aG9kPlxuICApOiB7IGlzRXZhbDogdHJ1ZSB9IHtcbiAgICBsZXQgYm9keTogTm9kZVBhdGg8dC5CbG9ja1N0YXRlbWVudD47XG5cbiAgICBpZiAocGF0aC5pc09iamVjdE1ldGhvZCgpKSB7XG4gICAgICBib2R5ID0gcGF0aC5nZXQoJ2JvZHknKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICBsZXQgdmFsdWUgPSBwYXRoLmdldCgndmFsdWUnKTtcbiAgICAgIGlmICh2YWx1ZS5pc0Z1bmN0aW9uRXhwcmVzc2lvbigpKSB7XG4gICAgICAgIGJvZHkgPSB2YWx1ZS5nZXQoJ2JvZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgICBgdW5zdXBwb3J0ZWQgc3ludGF4IGZvciBcXGBldmFsXFxgIHBhcmFtZXRlciB0byBcXGAke2ludm9rZWROYW1lfVxcYC4gSXQgbXVzdCBiZSBhbiBvYmplY3QgbWV0aG9kIG9yIGEgZnVuY3Rpb24uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgIGB1bnN1cHBvcnRlZCBzeW50YXggZm9yIFxcYGV2YWxcXGAgcGFyYW1ldGVyIHRvIFxcYCR7aW52b2tlZE5hbWV9XFxgLiBJdCBtdXN0IGJlIGFuIG9iamVjdCBtZXRob2Qgb3IgYSBmdW5jdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXR1cm5TdGF0ZW1lbnRzID0gYm9keVxuICAgICAgLmdldCgnYm9keScpXG4gICAgICAuZmlsdGVyKChzdGF0ZW1lbnQpID0+IHN0YXRlbWVudC5pc1JldHVyblN0YXRlbWVudCgpKSBhcyBOb2RlUGF0aDx0LlJldHVyblN0YXRlbWVudD5bXTtcblxuICAgIGlmIChyZXR1cm5TdGF0ZW1lbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgYm9keS5idWlsZENvZGVGcmFtZUVycm9yKCdldmFsIGZ1bmN0aW9uIG11c3QgaGF2ZSBhIHNpbmdsZSByZXR1cm4gc3RhdGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IHJldHVybkV4cHJlc3Npb24gPSByZXR1cm5TdGF0ZW1lbnRzWzBdLmdldCgnYXJndW1lbnQnKTtcblxuICAgIGlmICghcmV0dXJuRXhwcmVzc2lvbi5pc0NhbGxFeHByZXNzaW9uKCkpIHtcbiAgICAgIHRocm93IHJldHVyblN0YXRlbWVudHNbMF0uYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgJ2V2YWwgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGV2YWwoYXJndW1lbnRzWzBdKWAuIEZvdW5kIG5vbi1DYWxsRXhwcmVzc2lvbi4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBjYWxsZWUgPSByZXR1cm5FeHByZXNzaW9uLmdldCgnY2FsbGVlJyk7XG4gICAgaWYgKCFjYWxsZWUuaXNJZGVudGlmaWVyKCkgfHwgY2FsbGVlLm5vZGUubmFtZSAhPT0gJ2V2YWwnKSB7XG4gICAgICB0aHJvdyByZXR1cm5FeHByZXNzaW9uLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICdldmFsIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBldmFsKGFyZ3VtZW50c1swXSlgLiBGb3VuZCBjYWxsZWUgaXMgbm90IGV2YWwuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgYXJncyA9IHJldHVybkV4cHJlc3Npb24uZ2V0KCdhcmd1bWVudHMnKTtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IHJldHVybkV4cHJlc3Npb24uYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgJ2V2YWwgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGV2YWwoYXJndW1lbnRzWzBdKWAuIEZvdW5kIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBhcmcgPSBhcmdzWzBdO1xuICAgIGlmICghYXJnLmlzTWVtYmVyRXhwcmVzc2lvbigpKSB7XG4gICAgICB0aHJvdyBhcmcuYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgJ2V2YWwgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGV2YWwoYXJndW1lbnRzWzBdKWAuIEZvdW5kIGFyZ3VtZW50IGlzIG5vbi1NZW1iZXJFeHByZXNzaW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBvYmogPSBhcmcuZ2V0KCdvYmplY3QnKTtcbiAgICBpZiAoIW9iai5pc0lkZW50aWZpZXIoKSB8fCBvYmoubm9kZS5uYW1lICE9PSAnYXJndW1lbnRzJykge1xuICAgICAgdGhyb3cgb2JqLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICdldmFsIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBldmFsKGFyZ3VtZW50c1swXSlgLiBGb3VuZCB3cm9uZyBhcmd1bWVudCB0byBldmFsLidcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBwcm9wID0gYXJnLmdldCgncHJvcGVydHknKTtcbiAgICBpZiAoIXByb3AuaXNOdW1lcmljTGl0ZXJhbCgpIHx8IHByb3Aubm9kZS52YWx1ZSAhPT0gMCkge1xuICAgICAgdGhyb3cgcHJvcC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAnZXZhbCBmdW5jdGlvbiBtdXN0IHJldHVybiBgZXZhbChhcmd1bWVudHNbMF0pYC4gRm91bmQgd3JvbmcgcHJvcGVydHkuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaXNFdmFsOiB0cnVlIH07XG4gIH1cblxuICBwYXJzZU9iamVjdEV4cHJlc3Npb24oXG4gICAgaW52b2tlZE5hbWU6IHN0cmluZyxcbiAgICBwYXRoOiBOb2RlUGF0aDx0Lk9iamVjdEV4cHJlc3Npb24+LFxuICAgIHNob3VsZFBhcnNlU2NvcGUgPSBmYWxzZSxcbiAgICBzaG91bGRTdXBwb3J0UkZDOTMxID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIHBhdGguZ2V0KCdwcm9wZXJ0aWVzJykuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICAgIGxldCB7IG5vZGUgfSA9IHByb3BlcnR5O1xuICAgICAgaWYgKHRoaXMudC5pc1NwcmVhZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgdGhyb3cgcHJvcGVydHkuYnVpbGRDb2RlRnJhbWVFcnJvcihgJHtpbnZva2VkTmFtZX0gZG9lcyBub3QgYWxsb3cgc3ByZWFkIGVsZW1lbnRgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgICAgdGhyb3cgcHJvcGVydHkuYnVpbGRDb2RlRnJhbWVFcnJvcihgJHtpbnZva2VkTmFtZX0gY2FuIG9ubHkgYWNjZXB0IHN0YXRpYyBwcm9wZXJ0eSBuYW1lc2ApO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBrZXkgfSA9IG5vZGU7XG4gICAgICBpZiAoIXRoaXMudC5pc0lkZW50aWZpZXIoa2V5KSAmJiAhdGhpcy50LmlzU3RyaW5nTGl0ZXJhbChrZXkpKSB7XG4gICAgICAgIHRocm93IHByb3BlcnR5LmJ1aWxkQ29kZUZyYW1lRXJyb3IoYCR7aW52b2tlZE5hbWV9IGNhbiBvbmx5IGFjY2VwdCBzdGF0aWMgcHJvcGVydHkgbmFtZXNgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5hbWUoa2V5KTtcblxuICAgICAgaWYgKHNob3VsZFBhcnNlU2NvcGUgJiYgcHJvcGVydHlOYW1lID09PSAnc2NvcGUnKSB7XG4gICAgICAgIHJlc3VsdC5zY29wZSA9IHRoaXMucGFyc2VTY29wZShpbnZva2VkTmFtZSwgcHJvcGVydHkgYXMgTm9kZVBhdGg8dHlwZW9mIG5vZGU+KTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3VwcG9ydFJGQzkzMSAmJiBwcm9wZXJ0eU5hbWUgPT09ICdldmFsJykge1xuICAgICAgICByZXN1bHQuZXZhbCA9IHRoaXMucGFyc2VFdmFsKGludm9rZWROYW1lLCBwcm9wZXJ0eSBhcyBOb2RlUGF0aDx0eXBlb2Ygbm9kZT4pO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRTdXBwb3J0UkZDOTMxICYmIHByb3BlcnR5TmFtZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgcmVzdWx0LmNvbXBvbmVudCA9IChwcm9wZXJ0eSBhcyBOb2RlUGF0aDx0eXBlb2Ygbm9kZT4pLmdldCgndmFsdWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnQuaXNPYmplY3RNZXRob2Qobm9kZSkpIHtcbiAgICAgICAgICB0aHJvdyBwcm9wZXJ0eS5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgICAgYCR7aW52b2tlZE5hbWV9IGRvZXMgbm90IGFjY2VwdCBhIG1ldGhvZCBmb3IgJHtwcm9wZXJ0eU5hbWV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlUGF0aCA9IChwcm9wZXJ0eSBhcyBOb2RlUGF0aDx0eXBlb2Ygbm9kZT4pLmdldCgndmFsdWUnKTtcbiAgICAgICAgaWYgKCF2YWx1ZVBhdGguaXNFeHByZXNzaW9uKCkpIHtcbiAgICAgICAgICB0aHJvdyB2YWx1ZVBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihgbXVzdCBiZSBhbiBleHByZXNzaW9uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihpbnZva2VkTmFtZSwgdmFsdWVQYXRoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldCB0KCkge1xuICAgIHJldHVybiB0aGlzLmJhYmVsLnR5cGVzO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5hbWUobm9kZTogdC5TdHJpbmdMaXRlcmFsIHwgdC5JZGVudGlmaWVyKTogc3RyaW5nIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUubmFtZTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9uLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxpREFBNkM7QUFFN0MsTUFBYSxnQkFBZ0I7SUFDM0IsWUFBb0IsS0FBbUI7UUFBbkIsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUFHLENBQUM7SUFFM0MsZUFBZSxDQUFDLFdBQW1CLEVBQUUsSUFBNEI7UUFDL0QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixLQUFLLGtCQUFrQjtnQkFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQW9DLENBQUMsQ0FBQztZQUN2RixLQUFLLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxJQUFtQyxDQUFDLENBQUM7YUFDcEY7WUFDRCxLQUFLLGVBQWUsQ0FBQztZQUNyQixLQUFLLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pCO2dCQUNFLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUM1QixHQUFHLFdBQVcsa0RBQWtELElBQUksQ0FBQyxTQUFTLENBQzVFLElBQUksQ0FBQyxJQUFJLENBQ1YsRUFBRSxDQUNKLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFtQixFQUFFLElBQWlDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxPQUFPLENBQUMsbUJBQW1CLENBQUMsb0NBQW9DLENBQUMsQ0FBQzthQUN6RTtpQkFBTSxJQUFJLE9BQU8s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QyxDQUFDO2FBQ3JFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBWSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUF2T0QsNENBdU9DO0FBRUQsU0FBUyxJQUFJLENBQUMsSUFBb0M7SUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbkI7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztLQUNsQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5vZGVQYXRoIH0gZnJvbSAnQGJhYmVsL3RyYXZlcnNlJztcbmltcG9ydCB0eXBlICogYXMgQmFiZWwgZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyB0eXBlcyBhcyB0IH0gZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHsgU2NvcGVMb2NhbHMgfSBmcm9tICcuL3Njb3BlLWxvY2Fscyc7XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWJlbDogdHlwZW9mIEJhYmVsKSB7fVxuXG4gIHBhcnNlRXhwcmVzc2lvbihpbnZva2VkTmFtZTogc3RyaW5nLCBwYXRoOiBOb2RlUGF0aDx0LkV4cHJlc3Npb24+KTogdW5rbm93biB7XG4gICAgc3dpdGNoIChwYXRoLm5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT2JqZWN0RXhwcmVzc2lvbihpbnZva2VkTmFtZSwgcGF0aCBhcyBOb2RlUGF0aDx0Lk9iamVjdEV4cHJlc3Npb24+KTtcbiAgICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJheUV4cHJlc3Npb24oaW52b2tlZE5hbWUsIHBhdGggYXMgTm9kZVBhdGg8dC5BcnJheUV4cHJlc3Npb24+KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1N0cmluZ0xpdGVyYWwnOlxuICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgY2FzZSAnTnVtZXJpY0xpdGVyYWwnOlxuICAgICAgICByZXR1cm4gcGF0aC5ub2RlLnZhbHVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgcGF0aC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgIGAke2ludm9rZWROYW1lfSBjYW4gb25seSBhY2NlcHQgc3RhdGljIG9wdGlvbnMgYnV0IHlvdSBwYXNzZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGgubm9kZVxuICAgICAgICAgICl9YFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQXJyYXlFeHByZXNzaW9uKGludm9rZWROYW1lOiBzdHJpbmcsIHBhdGg6IE5vZGVQYXRoPHQuQXJyYXlFeHByZXNzaW9uPikge1xuICAgIHJldHVybiBwYXRoLmdldCgnZWxlbWVudHMnKS5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmlzU3ByZWFkRWxlbWVudCgpKSB7XG4gICAgICAgIHRocm93IGVsZW1lbnQuYnVpbGRDb2RlRnJhbWVFcnJvcihgc3ByZWFkIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQgaGVyZWApO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzRXhwcmVzc2lvbigpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvbihpbnZva2VkTmFtZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZVNjb3BlKGludm9rZWROYW1lOiBzdHJpbmcsIHBhdGg6IE5vZGVQYXRoPHQuT2JqZWN0UHJvcGVydHkgfCB0Lk9iamVjdE1ldGhvZD4pOiBTY29wZUxvY2FscyB7XG4gICAgbGV0IGJvZHk6IHQuQmxvY2tTdGF0ZW1lbnQgfCB0LkV4cHJlc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAocGF0aC5ub2RlLnR5cGUgPT09ICdPYmplY3RNZXRob2QnKSB7XG4gICAgICBib2R5ID0gcGF0aC5ub2RlLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB7IHZhbHVlIH0gPSBwYXRoLm5vZGU7XG4gICAgICBpZiAodGhpcy50LmlzT2JqZWN0RXhwcmVzc2lvbih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgcGF0aC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgIGBQYXNzaW5nIGFuIG9iamVjdCBhcyB0aGUgXFxgc2NvcGVcXGAgcHJvcGVydHkgdG8gaW5saW5lIHRlbXBsYXRlcyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgcGFzcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBvYmplY3QgZXhwcmVzc2lvbiBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnQuaXNGdW5jdGlvbkV4cHJlc3Npb24odmFsdWUpIHx8IHRoaXMudC5pc0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKHZhbHVlKSkge1xuICAgICAgICBib2R5ID0gdmFsdWUuYm9keTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb2JqRXhwcmVzc2lvbjogdC5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHwgbnVsbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChib2R5Py50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgIG9iakV4cHJlc3Npb24gPSBib2R5O1xuICAgIH0gZWxzZSBpZiAoYm9keT8udHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgLy8gU0FGRVRZOiBXZSBrbm93IHRoYXQgdGhlIGJvZHkgaXMgYSBSZXR1cm5TdGF0ZW1lbnQgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyBpbnNpZGVcbiAgICAgIGxldCByZXR1cm5TdGF0ZW1lbnRzID0gYm9keS5ib2R5LmZpbHRlcihcbiAgICAgICAgKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LnR5cGUgPT09ICdSZXR1cm5TdGF0ZW1lbnQnXG4gICAgICApIGFzIEJhYmVsLnR5cGVzLlJldHVyblN0YXRlbWVudFtdO1xuXG4gICAgICBpZiAocmV0dXJuU3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTY29wZSBmdW5jdGlvbnMgbXVzdCBoYXZlIGEgc2luZ2xlIHJldHVybiBzdGF0ZW1lbnQgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgZXhwcmVzc2lvbiBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvYmpFeHByZXNzaW9uID0gcmV0dXJuU3RhdGVtZW50c1swXS5hcmd1bWVudDtcbiAgICB9XG5cbiAgICBpZiAob2JqRXhwcmVzc2lvbj8udHlwZSAhPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgIGBTY29wZSBvYmplY3RzIGZvciBcXGAke2ludm9rZWROYW1lfVxcYCBtdXN0IGJlIGFuIG9iamVjdCBleHByZXNzaW9uIGNvbnRhaW5pbmcgb25seSByZWZlcmVuY2VzIHRvIGluLXNjb3BlIHZhbHVlcywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gb2JqZWN0IGV4cHJlc3Npb24gY29udGFpbmluZyBvbmx5IHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqRXhwcmVzc2lvbi5wcm9wZXJ0aWVzLnJlZHVjZSgocmVzLCBwcm9wKSA9PiB7XG4gICAgICBpZiAodGhpcy50LmlzU3ByZWFkRWxlbWVudChwcm9wKSkge1xuICAgICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICAgYFNjb3BlIG9iamVjdHMgZm9yIFxcYCR7aW52b2tlZE5hbWV9XFxgIG1heSBub3QgY29udGFpbiBzcHJlYWQgZWxlbWVudHNgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50LmlzT2JqZWN0TWV0aG9kKHByb3ApKSB7XG4gICAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgICBgU2NvcGUgb2JqZWN0cyBmb3IgXFxgJHtpbnZva2VkTmFtZX1cXGAgbWF5IG5vdCBjb250YWluIG1ldGhvZHNgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHByb3A7XG4gICAgICBpZiAoIXRoaXMudC5pc1N0cmluZ0xpdGVyYWwoa2V5KSAmJiAhdGhpcy50LmlzSWRlbnRpZmllcihrZXkpKSB7XG4gICAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgICBgU2NvcGUgb2JqZWN0cyBmb3IgXFxgJHtpbnZva2VkTmFtZX1cXGAgbWF5IG9ubHkgY29udGFpbiBzdGF0aWMgcHJvcGVydHkgbmFtZXNgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcm9wTmFtZSA9IG5hbWUoa2V5KTtcblxuICAgICAgaWYgKHZhbHVlLnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICB0aHJvdyBwYXRoLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICAgYFNjb3BlIG9iamVjdHMgZm9yIFxcYCR7aW52b2tlZE5hbWV9XFxgIG1heSBvbmx5IGNvbnRhaW4gZGlyZWN0IHJlZmVyZW5jZXMgdG8gaW4tc2NvcGUgdmFsdWVzLCBlLmcuIHsgJHtwcm9wTmFtZX0gfSBvciB7ICR7cHJvcE5hbWV9OiAke3Byb3BOYW1lfSB9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXMuYWRkKHByb3BOYW1lLCB2YWx1ZS5uYW1lKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgbmV3IFNjb3BlTG9jYWxzKHsgbW9kZTogJ2V4cGxpY2l0JyB9KSk7XG4gIH1cblxuICBwYXJzZUV2YWwoXG4gICAgaW52b2tlZE5hbWU6IHN0cmluZyxcbiAgICBwYXRoOiBOb2RlUGF0aDx0Lk9iamVjdFByb3BlcnR5IHwgdC5PYmplY3RNZXRob2Q+XG4gICk6IHsgaXNFdmFsOiB0cnVlIH0ge1xuICAgIGxldCBib2R5OiBOb2RlUGF0aDx0LkJsb2NrU3RhdGVtZW50PjtcblxuICAgIGlmIChwYXRoLmlzT2JqZWN0TWV0aG9kKCkpIHtcbiAgICAgIGJvZHkgPSBwYXRoLmdldCgnYm9keScpO1xuICAgIH0gZWxzZSBpZiAocGF0aC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHBhdGguZ2V0KCd2YWx1ZScpO1xuICAgICAgaWYgKHZhbHVlLmlzRnVuY3Rpb25FeHByZXNzaW9uKCkpIHtcbiAgICAgICAgYm9keSA9IHZhbHVlLmdldCgnYm9keScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgcGF0aC5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAgIGB1bnN1cHBvcnRlZCBzeW50YXggZm9yIFxcYGV2YWxcXGAgcGFyYW1ldGVyIHRvIFxcYCR7aW52b2tlZE5hbWV9XFxgLiBJdCBtdXN0IGJlIGFuIG9iamVjdCBtZXRob2Qgb3IgYSBmdW5jdGlvbi5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHBhdGguYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgYHVuc3VwcG9ydGVkIHN5bnRheCBmb3IgXFxgZXZhbFxcYCBwYXJhbWV0ZXIgdG8gXFxgJHtpbnZva2VkTmFtZX1cXGAuIEl0IG11c3QgYmUgYW4gb2JqZWN0IG1ldGhvZCBvciBhIGZ1bmN0aW9uLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJldHVyblN0YXRlbWVudHMgPSBib2R5XG4gICAgICAuZ2V0KCdib2R5JylcbiAgICAgIC5maWx0ZXIoKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LmlzUmV0dXJuU3RhdGVtZW50KCkpIGFzIE5vZGVQYXRoPHQuUmV0dXJuU3RhdGVtZW50PltdO1xuXG4gICAgaWYgKHJldHVyblN0YXRlbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBib2R5LmJ1aWxkQ29kZUZyYW1lRXJyb3IoJ2V2YWwgZnVuY3Rpb24gbXVzdCBoYXZlIGEgc2luZ2xlIHJldHVybiBzdGF0ZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgcmV0dXJuRXhwcmVzc2lvbiA9IHJldHVyblN0YXRlbWVudHNbMF0uZ2V0KCdhcmd1bWVudCcpO1xuXG4gICAgaWYgKCFyZXR1cm5FeHByZXNzaW9uLmlzQ2FsbEV4cHJlc3Npb24oKSkge1xuICAgICAgdGhyb3cgcmV0dXJuU3RhdGVtZW50c1swXS5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAnZXZhbCBmdW5jdGlvbiBtdXN0IHJldHVybiBgZXZhbChhcmd1bWVudHNbMF0pYC4gRm91bmQgbm9uLUNhbGxFeHByZXNzaW9uLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGNhbGxlZSA9IHJldHVybkV4cHJlc3Npb24uZ2V0KCdjYWxsZWUnKTtcbiAgICBpZiAoIWNhbGxlZS5pc0lkZW50aWZpZXIoKSB8fCBjYWxsZWUubm9kZS5uYW1lICE9PSAnZXZhbCcpIHtcbiAgICAgIHRocm93IHJldHVybkV4cHJlc3Npb24uYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgJ2V2YWwgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGV2YWwoYXJndW1lbnRzWzBdKWAuIEZvdW5kIGNhbGxlZSBpcyBub3QgZXZhbC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBhcmdzID0gcmV0dXJuRXhwcmVzc2lvbi5nZXQoJ2FyZ3VtZW50cycpO1xuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgcmV0dXJuRXhwcmVzc2lvbi5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAnZXZhbCBmdW5jdGlvbiBtdXN0IHJldHVybiBgZXZhbChhcmd1bWVudHNbMF0pYC4gRm91bmQgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IGFyZyA9IGFyZ3NbMF07XG4gICAgaWYgKCFhcmcuaXNNZW1iZXJFeHByZXNzaW9uKCkpIHtcbiAgICAgIHRocm93IGFyZy5idWlsZENvZGVGcmFtZUVycm9yKFxuICAgICAgICAnZXZhbCBmdW5jdGlvbiBtdXN0IHJldHVybiBgZXZhbChhcmd1bWVudHNbMF0pYC4gRm91bmQgYXJndW1lbnQgaXMgbm9uLU1lbWJlckV4cHJlc3Npb24uJ1xuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IG9iaiA9IGFyZy5nZXQoJ29iamVjdCcpO1xuICAgIGlmICghb2JqLmlzSWRlbnRpZmllcigpIHx8IG9iai5ub2RlLm5hbWUgIT09ICdhcmd1bWVudHMnKSB7XG4gICAgICB0aHJvdyBvYmouYnVpbGRDb2RlRnJhbWVFcnJvcihcbiAgICAgICAgJ2V2YWwgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGV2YWwoYXJndW1lbnRzWzBdKWAuIEZvdW5kIHdyb25nIGFyZ3VtZW50IHRvIGV2YWwuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHByb3AgPSBhcmcuZ2V0KCdwcm9wZXJ0eScpO1xuICAgIGlmICghcHJvcC5pc051bWVyaWNMaXRlcmFsKCkgfHwgcHJvcC5ub2RlLnZhbHVlICE9PSAwKSB7XG4gICAgICB0aHJvdyBwcm9wLmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICdldmFsIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBldmFsKGFyZ3VtZW50c1swXSlgLiBGb3VuZCB3cm9uZyBwcm9wZXJ0eS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4geyBpc0V2YWw6IHRydWUgfTtcbiAgfVxuXG4gIHBhcnNlT2JqZWN0RXhwcmVzc2lvbihcbiAgICBpbnZva2VkTmFtZTogc3RyaW5nLFxuICAgIHBhdGg6IE5vZGVQYXRoPHQuT2JqZWN0RXhwcmVzc2lvbj4sXG4gICAgc2hvdWxkUGFyc2VTY29wZSA9IGZhbHNlLFxuICAgIHNob3VsZFN1cHBvcnRSRkM5MzEgPSBmYWxzZVxuICApIHtcbiAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgcGF0aC5nZXQoJ3Byb3BlcnRpZXMnKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgbGV0IHsgbm9kZSB9ID0gcHJvcGVydHk7XG4gICAgICBpZiAodGhpcy50LmlzU3ByZWFkRWxlbWVudChub2RlKSkge1xuICAgICAgICB0aHJvdyBwcm9wZXJ0eS5idWlsZENvZGVGcmFtZUVycm9yKGAke2ludm9rZWROYW1lfSBkb2VzIG5vdCBhbGxvdyBzcHJlYWQgZWxlbWVudGApO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5jb21wdXRlZCkge1xuICAgICAgICB0aHJvdyBwcm9wZXJ0eS5idWlsZENvZGVGcmFtZUVycm9yKGAke2ludm9rZWROYW1lfSBjYW4gb25seSBhY2NlcHQgc3RhdGljIHByb3BlcnR5IG5hbWVzYCk7XG4gICAgICB9XG5cbiAgICAgIGxldCB7IGtleSB9ID0gbm9kZTtcbiAgICAgIGlmICghdGhpcy50LmlzSWRlbnRpZmllcihrZXkpICYmICF0aGlzLnQuaXNTdHJpbmdMaXRlcmFsKGtleSkpIHtcbiAgICAgICAgdGhyb3cgcHJvcGVydHkuYnVpbGRDb2RlRnJhbWVFcnJvcihgJHtpbnZva2VkTmFtZX0gY2FuIG9ubHkgYWNjZXB0IHN0YXRpYyBwcm9wZXJ0eSBuYW1lc2ApO1xuICAgICAgfVxuXG4gICAgICBsZXQgcHJvcGVydHlOYW1lID0gbmFtZShrZXkpO1xuXG4gICAgICBpZiAoc2hvdWxkUGFyc2VTY29wZSAmJiBwcm9wZXJ0eU5hbWUgPT09ICdzY29wZScpIHtcbiAgICAgICAgcmVzdWx0LnNjb3BlID0gdGhpcy5wYXJzZVNjb3BlKGludm9rZWROYW1lLCBwcm9wZXJ0eSBhcyBOb2RlUGF0aDx0eXBlb2Ygbm9kZT4pO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRTdXBwb3J0UkZDOTMxICYmIHByb3BlcnR5TmFtZSA9PT0gJ2V2YWwnKSB7XG4gICAgICAgIHJlc3VsdC5ldmFsID0gdGhpcy5wYXJzZUV2YWwoaW52b2tlZE5hbWUsIHByb3BlcnR5IGFzIE5vZGVQYXRoPHR5cGVvZiBub2RlPik7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZFN1cHBvcnRSRkM5MzEgJiYgcHJvcGVydHlOYW1lID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICByZXN1bHQuY29tcG9uZW50ID0gKHByb3BlcnR5IGFzIE5vZGVQYXRoPHR5cGVvZiBub2RlPikuZ2V0KCd2YWx1ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMudC5pc09iamVjdE1ldGhvZChub2RlKSkge1xuICAgICAgICAgIHRocm93IHByb3BlcnR5LmJ1aWxkQ29kZUZyYW1lRXJyb3IoXG4gICAgICAgICAgICBgJHtpbnZva2VkTmFtZX0gZG9lcyBub3QgYWNjZXB0IGEgbWV0aG9kIGZvciAke3Byb3BlcnR5TmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWVQYXRoID0gKHByb3BlcnR5IGFzIE5vZGVQYXRoPHR5cGVvZiBub2RlPikuZ2V0KCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlUGF0aC5pc0V4cHJlc3Npb24oKSkge1xuICAgICAgICAgIHRocm93IHZhbHVlUGF0aC5idWlsZENvZGVGcmFtZUVycm9yKGBtdXN0IGJlIGFuIGV4cHJlc3Npb25gKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcHJvcGVydHlOYW1lXSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGludm9rZWROYW1lLCB2YWx1ZVBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFiZWwudHlwZXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmFtZShub2RlOiB0LlN0cmluZ0xpdGVyYWwgfCB0LklkZW50aWZpZXIpOiBzdHJpbmcge1xuICBpZiAobm9kZS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZS5uYW1lO1xuICB9XG59XG4iXX0=

@@ -6,3 +6,2 @@ import type { types as t } from '@babel/core';

import type { ImportUtil } from 'babel-import-util';
import { ScopeLocals } from './scope-locals';
interface State {

@@ -14,3 +13,3 @@ program: NodePath<Babel.types.Program>;

#private;
constructor(babel: typeof Babel, state: State, template: NodePath<t.Expression>, scopeLocals: ScopeLocals, importer: ImportUtil);
constructor(babel: typeof Babel, state: State, template: NodePath<t.Expression>, addedBinding: (name: string) => void, importer: ImportUtil);
/**

@@ -17,0 +16,0 @@ * Create a new binding that you can use in your template, initialized with

@@ -13,13 +13,10 @@ "use strict";

};
var _JSUtils_instances, _JSUtils_babel, _JSUtils_state, _JSUtils_template, _JSUtils_scopeLocals, _JSUtils_importer, _JSUtils_emitStatement, _JSUtils_parseExpression, _ExpressionContext_importer, _ExpressionContext_target;
var _JSUtils_instances, _JSUtils_babel, _JSUtils_state, _JSUtils_template, _JSUtils_addedBinding, _JSUtils_importer, _JSUtils_emitStatement, _JSUtils_parseExpression, _ExpressionContext_importer, _ExpressionContext_target;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JSUtils = void 0;
const hbs_utils_1 = require("./hbs-utils");
// This exists to give AST plugins a controlled interface for influencing the
// surrounding Javascript scope
class JSUtils {
constructor(babel, state, template,
// mapping of handlebars identifiers to javascript identifiers, as appears
// in the `scope` argument to precompileTemplate. This is both read and
// write -- we might put more stuff into it.
scopeLocals, importer) {
constructor(babel, state, template, addedBinding, importer) {
_JSUtils_instances.add(this);

@@ -29,3 +26,3 @@ _JSUtils_babel.set(this, void 0);

_JSUtils_template.set(this, void 0);
_JSUtils_scopeLocals.set(this, void 0);
_JSUtils_addedBinding.set(this, void 0);
_JSUtils_importer.set(this, void 0);

@@ -35,3 +32,3 @@ __classPrivateFieldSet(this, _JSUtils_babel, babel, "f");

__classPrivateFieldSet(this, _JSUtils_template, template, "f");
__classPrivateFieldSet(this, _JSUtils_scopeLocals, scopeLocals, "f");
__classPrivateFieldSet(this, _JSUtils_addedBinding, addedBinding, "f");
__classPrivateFieldSet(this, _JSUtils_importer, importer, "f");

@@ -67,5 +64,3 @@ if (!__classPrivateFieldGet(this, _JSUtils_state, "f").lastInsertedPath) {

var _a;
let name = unusedNameLike((_a = opts === null || opts === void 0 ? void 0 : opts.nameHint) !== null && _a !== void 0 ? _a : 'a', (candidate) => __classPrivateFieldGet(this, _JSUtils_template, "f").scope.hasBinding(candidate) ||
__classPrivateFieldGet(this, _JSUtils_scopeLocals, "f").has(candidate) ||
astNodeHasBinding(target, candidate));
let name = unusedNameLike((_a = opts === null || opts === void 0 ? void 0 : opts.nameHint) !== null && _a !== void 0 ? _a : 'a', (candidate) => __classPrivateFieldGet(this, _JSUtils_template, "f").scope.hasBinding(candidate) || (0, hbs_utils_1.astNodeHasBinding)(target, candidate));
let t = __classPrivateFieldGet(this, _JSUtils_babel, "f").types;

@@ -75,4 +70,4 @@ let declaration = __classPrivateFieldGet(this, _JSUtils_instances, "m", _JSUtils_emitStatement).call(this, t.variableDeclaration('let', [

]));
declaration.scope.registerBinding('module', declaration.get('declarations.0'));
__classPrivateFieldGet(this, _JSUtils_scopeLocals, "f").add(name);
declaration.scope.registerBinding('let', declaration.get('declarations.0'));
__classPrivateFieldGet(this, _JSUtils_addedBinding, "f").call(this, name);
return name;

@@ -97,24 +92,22 @@ }

let importedIdentifier = __classPrivateFieldGet(this, _JSUtils_importer, "f").import(__classPrivateFieldGet(this, _JSUtils_template, "f"), moduleSpecifier, exportedName, opts === null || opts === void 0 ? void 0 : opts.nameHint);
// If we're already referencing the imported name from the outer scope and
// it's not shadowed at our target location in the template, we can reuse
// the existing import.
if (__classPrivateFieldGet(this, _JSUtils_scopeLocals, "f").has(importedIdentifier.name) &&
!astNodeHasBinding(target, importedIdentifier.name)) {
// Simple base case: the JS name that's available is also unused at our spot
// in HBS, so just use it.
if (!(0, hbs_utils_1.astNodeHasBinding)(target, importedIdentifier.name)) {
__classPrivateFieldGet(this, _JSUtils_addedBinding, "f").call(this, importedIdentifier.name);
return importedIdentifier.name;
}
let identifier = unusedNameLike(importedIdentifier.name, (candidate) => __classPrivateFieldGet(this, _JSUtils_scopeLocals, "f").has(candidate) || astNodeHasBinding(target, candidate));
if (identifier !== importedIdentifier.name) {
// The importedIdentifier that we have in Javascript is not usable within
// our HBS because it's shadowed by a block param. So we will introduce a
// second name via a variable declaration.
//
// The reason we don't force the import itself to have this name is that
// we might be re-using an existing import, and we don't want to go
// rewriting all of its callsites that are unrelated to us.
let t = __classPrivateFieldGet(this, _JSUtils_babel, "f").types;
__classPrivateFieldGet(this, _JSUtils_instances, "m", _JSUtils_emitStatement).call(this, t.variableDeclaration('let', [
t.variableDeclarator(t.identifier(identifier), importedIdentifier),
]));
}
__classPrivateFieldGet(this, _JSUtils_scopeLocals, "f").add(identifier);
// The importedIdentifier that we have in Javascript is not usable within
// our HBS because it's shadowed by a block param. So we will introduce a
// second name via a variable declaration.
//
// The reason we don't force the import itself to have this name is that
// we might be re-using an existing import, and we don't want to go
// rewriting all of its callsites that are unrelated to us.
let identifier = unusedNameLike(importedIdentifier.name, (candidate) => __classPrivateFieldGet(this, _JSUtils_template, "f").scope.hasBinding(candidate) || (0, hbs_utils_1.astNodeHasBinding)(target, candidate));
let t = __classPrivateFieldGet(this, _JSUtils_babel, "f").types;
let declaration = __classPrivateFieldGet(this, _JSUtils_instances, "m", _JSUtils_emitStatement).call(this, t.variableDeclaration('let', [
t.variableDeclarator(t.identifier(identifier), importedIdentifier),
]));
declaration.scope.registerBinding('let', declaration.get('declarations.0'));
__classPrivateFieldGet(this, _JSUtils_addedBinding, "f").call(this, identifier);
return identifier;

@@ -145,3 +138,3 @@ }

exports.JSUtils = JSUtils;
_JSUtils_babel = new WeakMap(), _JSUtils_state = new WeakMap(), _JSUtils_template = new WeakMap(), _JSUtils_scopeLocals = new WeakMap(), _JSUtils_importer = new WeakMap(), _JSUtils_instances = new WeakSet(), _JSUtils_emitStatement = function _JSUtils_emitStatement(statement) {
_JSUtils_babel = new WeakMap(), _JSUtils_state = new WeakMap(), _JSUtils_template = new WeakMap(), _JSUtils_addedBinding = new WeakMap(), _JSUtils_importer = new WeakMap(), _JSUtils_instances = new WeakSet(), _JSUtils_emitStatement = function _JSUtils_emitStatement(statement) {
if (__classPrivateFieldGet(this, _JSUtils_state, "f").lastInsertedPath) {

@@ -184,23 +177,2 @@ __classPrivateFieldGet(this, _JSUtils_state, "f").lastInsertedPath = __classPrivateFieldGet(this, _JSUtils_state, "f").lastInsertedPath.insertAfter(statement)[0];

}
function astNodeHasBinding(target, name) {
var _a;
let cursor = target;
while (cursor) {
let parentNode = (_a = cursor.parent) === null || _a === void 0 ? void 0 : _a.node;
if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) === 'ElementNode' &&
parentNode.blockParams.includes(name) &&
// an ElementNode's block params are valid only within its children
parentNode.children.includes(cursor.node)) {
return true;
}
if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) === 'Block' &&
parentNode.blockParams.includes(name) &&
// a Block's blockParams are valid only within its body
parentNode.body.includes(cursor.node)) {
return true;
}
cursor = cursor.parent;
}
return false;
}
function body(node) {

@@ -241,2 +213,2 @@ if (node.type === 'File') {

_ExpressionContext_importer = new WeakMap(), _ExpressionContext_target = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqcy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFZQSw2RUFBNkU7QUFDN0UsK0JBQStCO0FBQy9CLE1BQWEsT0FBTztJQU9sQixZQUNFLEtBQW1CLEVBQ25CLEtBQVksRUFDWixRQUFnQztJQUNoQywwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLDRDQUE0QztJQUM1QyxXQUF3QixFQUN4QixRQUFvQjs7UUFkdEIsaUNBQXFCO1FBQ3JCLGlDQUFjO1FBQ2Qsb0NBQWtDO1FBQ2xDLHVDQUEwQjtRQUMxQixvQ0FBc0I7UUFZcEIsdUJBQUEsSUFBSSxrQkFBVSxLQUFLLE1BQUEsQ0FBQztRQUNwQix1QkFBQSxJQUFJLGtCQUFVLEtBQUssTUFBQSxDQUFDO1FBQ3BCLHVCQUFBLElBQUkscUJBQWEsUUFBUSxNQUFBLENBQUM7UUFDMUIsdUJBQUEsSUFBSSx3QkFBZ0IsV0FBVyxNQUFBLENBQUM7UUFDaEMsdUJBQUEsSUFBSSxxQkFBYSxRQUFRLE1BQUEsQ0FBQztRQUUxQixJQUFJLENBQUMsdUJBQUEsSUFBSSxzQkFBTyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksTUFBeUMsQ0FBQztZQUM5QyxLQUFLLElBQUksU0FBUyxJQUFJLHVCQUFBLElBQUksc0JBQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7b0JBQ3BDLE1BQU07aUJBQ1A7Z0JBQ0QsTUFBTSxHQUFHLFNBQVMsQ0FBQzthQUNwQjtZQUNELElBQUksTUFBTSxFQUFFO2dCQUNWLHVCQUFBLElBQUksc0JBQU8sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsY0FBYyxDQUNaLFVBQXNCLEVBQ3RC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Ozs7Ozs7OztPQVdHO0lBQ0gsTUFBTSxDQUFDLGVBQXVCLEVBQUUsWUFBb0IsRUFBRSxRQUFpQjtRQUNyRSxPQUFPLHVCQUFBLElBQUksbUNBQVUsQ0FBQyxNQUFNLENBQUMsdUJBQUEsSUFBSSxpQ0FBUSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgdHlwZXMgYXMgdCB9IGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgQmFiZWwgZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOb2RlUGF0aCB9IGZyb20gJ0BiYWJlbC90cmF2ZXJzZSc7XG5pbXBvcnQgdHlwZSB7IEFTVFBsdWdpbkJ1aWxkZXIsIEFTVFBsdWdpbkVudmlyb25tZW50LCBBU1R2MSwgV2Fsa2VyUGF0aCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgdHlwZSB7IEltcG9ydFV0aWwgfSBmcm9tICdiYWJlbC1pbXBvcnQtdXRpbCc7XG5pbXBvcnQgeyBTY29wZUxvY2FscyB9IGZyb20gJy4vc2NvcGUtbG9jYWxzJztcblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgcHJvZ3JhbTogTm9kZVBhdGg8QmFiZWwudHlwZXMuUHJvZ3JhbT47XG4gIGxhc3RJbnNlcnRlZFBhdGg6IE5vZGVQYXRoPEJhYmVsLnR5cGVzLlN0YXRlbWVudD4gfCB1bmRlZmluZWQ7XG59XG5cbi8vIFRoaXMgZXhpc3RzIHRvIGdpdmUgQVNUIHBsdWdpbnMgYSBjb250cm9sbGVkIGludGVyZmFjZSBmb3IgaW5mbHVlbmNpbmcgdGhlXG4vLyBzdXJyb3VuZGluZyBKYXZhc2NyaXB0IHNjb3BlXG5leHBvcnQgY2xhc3MgSlNVdGlscyB7XG4gICNiYWJlbDogdHlwZW9mIEJhYmVsO1xuICAjc3RhdGU6IFN0YXRlO1xuICAjdGVtcGxhdGU6IE5vZGVQYXRoPHQuRXhwcmVzc2lvbj47XG4gICNzY29wZUxvY2FsczogU2NvcGVMb2NhbHM7XG4gICNpbXBvcnRlcjogSW1wb3J0VXRpbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWJlbDogdHlwZW9mIEJhYmVsLFxuICAgIHN0YXRlOiBTdGF0ZSxcbiAgICB0ZW1wbGF0ZTogTm9kZVBhdGg8dC5FeHByZXNzaW9uPixcbiAgICAvLyBtYXBwaW5nIG9mIGhhbmRsZWJhcnMgaWRlbnRpZmllcnMgdG8gamF2YXNjcmlwdCBpZGVudGlmaWVycywgYXMgYXBwZWFyc1xuICAgIC8vIGluIHRoZSBgc2NvcGVgIGFyZ3VtZW50IHRvIHByZWNvbXBpbGVUZW1wbGF0ZS4gVGhpcyBpcyBib3RoIHJlYWQgYW5kXG4gICAgLy8gd3JpdGUgLS0gd2UgbWlnaHQgcHV0IG1vcmUgc3R1ZmYgaW50byBpdC5cbiAgICBzY29wZUxvY2FsczogU2NvcGVMb2NhbHMsXG4gICAgaW1wb3J0ZXI6IEltcG9ydFV0aWxcbiAgKSB7XG4gICAgdGhpcy4jYmFiZWwgPSBiYWJlbDtcbiAgICB0aGlzLiNzdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuI3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy4jc2NvcGVMb2NhbHMgPSBzY29wZUxvY2FscztcbiAgICB0aGlzLiNpbXBvcnRlciA9IGltcG9ydGVyO1xuXG4gICAgaWYgKCF0aGlzLiNzdGF0ZS5sYXN0SW5zZXJ0ZWRQYXRoKSB7XG4gICAgICBsZXQgdGFyZ2V0OiBOb2RlUGF0aDx0LlN0YXRlbWVudD4gfCB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2YgdGhpcy4jc3RhdGUucHJvZ3JhbS5nZXQoJ2JvZHknKSkge1xuICAgICAgICBpZiAoIXN0YXRlbWVudC5pc0ltcG9ydERlY2xhcmF0aW9uKCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQgPSBzdGF0ZW1lbnQ7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuI3N0YXRlLmxhc3RJbnNlcnRlZFBhdGggPSB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nIHRoYXQgeW91IGNhbiB1c2UgaW4geW91ciB0ZW1wbGF0ZSwgaW5pdGlhbGl6ZWQgd2l0aFxuICAgKiB0aGUgZ2l2ZW4gSmF2YXNjcmlwdCBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyBFeHByZXNzaW9uIH0gZXhwcmVzc2lvbiBBIGphdmFzY3JpcHQgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSB3aWxsXG4gICAqIGluaXRpYWxpemUgeW91ciBuZXcgYmluZGluZy4gU2VlIGRvY3Mgb24gdGhlIEV4cHJlc3Npb24gdHlwZSBmb3IgZGV0YWlscy5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgbG9jYXRpb24gd2l0aGluIHlvdXIgdGVtcGxhdGUgd2hlcmUgdGhlIGJpbmRpbmcgd2lsbCBiZVxuICAgKiB1c2VkLiBUaGlzIG1hdHRlcnMgc28gd2UgY2FuIGF2b2lkIG5hbWluZyBjb2xsaXNpb25zLlxuICAgKiBAcGFyYW0gb3B0cy5uYW1lSGludCBPcHRpb25hbGx5LCBwcm92aWRlIGEgZGVzY3JpcHRpdmUgbmFtZSBmb3IgeW91ciBuZXdcbiAgICogYmluZGluZy4gV2Ugd2lsbCBtYW5nbGUgdGhpcyBuYW1lIGFzIG5lZWRlZCB0byBhdm9pZCBjb2xsaXNpb25zLCBidXRcbiAgICogcGlja2luZyBhIGdvb2QgbmFtZSBoZXJlIGNhbiBhaWQgaW4gZGVidWdnaW5nLlxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBuYW1lIHlvdSBjYW4gdXNlIGluIHlvdXIgdGVtcGxhdGUgdG8gYWNjZXNzIHRoZSBiaW5kaW5nLlxuICAgKi9cbiAgYmluZEV4cHJlc3Npb24oXG4gICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbixcbiAgICB0YXJnZXQ6IFdhbGtlclBhdGg8QVNUdjEuTm9kZT4sXG4gICAgb3B0cz86IHsgbmFtZUhpbnQ/OiBzdHJpbmcgfVxuICApOiBzdHJpbmcge1xuICAgIGxldCBuYW1lID0gdW51c2VkTmFtZUxpa2UoXG4gICAgICBvcHRzPy5uYW1lSGludCA/PyAnYScsXG4gICAgICAoY2FuZGlkYXRlKSA9PlxuICAgICAgICB0aGlzLiN0ZW1wbGF0ZS5zY29wZS5oYXNCaW5kaW5nKGNhbmRpZGF0ZSkgfHxcbiAgICAgICAgdGhpcy4jc2NvcGVMb2NhbHMuaGFzKGNhbmRpZGF0ZSkgfHxcbiAgICAgICAgYXN0Tm9kZUhhc0JpbmRpbmcodGFyZ2V0LCBjYW5kaWRhdGUpXG4gICAgKTtcbiAgICBsZXQgdCA9IHRoaXMuI2JhYmVsLnR5cGVzO1xuICAgIGxldCBkZWNsYXJhdGlvbjogTm9kZVBhdGg8dC5WYXJpYWJsZURlY2xhcmF0aW9uPiA9IHRoaXMuI2VtaXRTdGF0ZW1lbnQoXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRpb24oJ2xldCcsIFtcbiAgICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgICAgdC5pZGVudGlmaWVyKG5hbWUpLFxuICAgICAgICAgIHRoaXMuI3BhcnNlRXhwcmVzc2lvbih0aGlzLiNzdGF0ZS5wcm9ncmFtLCBleHByZXNzaW9uKVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApO1xuICAgIGRlY2xhcmF0aW9uLnNjb3BlLnJlZ2lzdGVyQmluZGluZygnbW9kdWxlJywgZGVjbGFyYXRpb24uZ2V0KCdkZWNsYXJhdGlvbnMuMCcpIGFzIE5vZGVQYXRoKTtcbiAgICB0aGlzLiNzY29wZUxvY2Fscy5hZGQobmFtZSk7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICAjZW1pdFN0YXRlbWVudDxUIGV4dGVuZHMgdC5TdGF0ZW1lbnQ+KHN0YXRlbWVudDogVCk6IE5vZGVQYXRoPFQ+IHtcbiAgICBpZiAodGhpcy4jc3RhdGUubGFzdEluc2VydGVkUGF0aCkge1xuICAgICAgdGhpcy4jc3RhdGUubGFzdEluc2VydGVkUGF0aCA9IHRoaXMuI3N0YXRlLmxhc3RJbnNlcnRlZFBhdGguaW5zZXJ0QWZ0ZXIoc3RhdGVtZW50KVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jc3RhdGUubGFzdEluc2VydGVkUGF0aCA9IHRoaXMuI3N0YXRlLnByb2dyYW0udW5zaGlmdENvbnRhaW5lcignYm9keScsIHN0YXRlbWVudClbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNzdGF0ZS5sYXN0SW5zZXJ0ZWRQYXRoIGFzIE5vZGVQYXRoPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIEdhaW4gYWNjZXNzIHRvIGFuIGltcG9ydGVkIHZhbHVlIHdpdGhpbiB5b3VyIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIFRoZSBwYXRoIHRvIGltcG9ydCBmcm9tLlxuICAgKiBAcGFyYW0gZXhwb3J0ZWROYW1lIFRoZSBuYW1lZCBleHBvcnQgeW91IHdpc2ggdG8gYWNjZXNzLCBvciBcImRlZmF1bHRcIiBmb3JcbiAgICogdGhlIGRlZmF1bHQgZXhwb3J0LCBvciBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZSBleHBvcnQuXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIGxvY2F0aW9uIHdpdGhpbiB5b3VyIHRlbXBsYXRlIHdoZXJlIHRoZSBiaW5kaW5nIHdpbGwgYmVcbiAgICogdXNlZC4gVGhpcyBtYXR0ZXJzIHNvIHdlIGNhbiBhdm9pZCBuYW1pbmcgY29sbGlzaW9ucy5cbiAgICogQHBhcmFtIG9wdHMubmFtZUhpbnQgT3B0aW9uYWxseSwgcHJvdmlkZSBhIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHlvdXIgbmV3XG4gICAqIGJpbmRpbmcuIFdlIHdpbGwgbWFuZ2xlIHRoaXMgbmFtZSBhcyBuZWVkZWQgdG8gYXZvaWQgY29sbGlzaW9ucywgYnV0XG4gICAqIHBpY2tpbmcgYSBnb29kIG5hbWUgaGVyZSBjYW4gYWlkIGluIGRlYnVnZ2luZy5cbiAgICpcbiAgICogQHJldHVybiBUaGUgbmFtZSB5b3UgY2FuIHVzZSBpbiB5b3VyIHRlbXBsYXRlIHRvIGFjY2VzcyB0aGUgaW1wb3J0ZWQgdmFsdWUuXG4gICAqL1xuICBiaW5kSW1wb3J0KFxuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLFxuICAgIGV4cG9ydGVkTmFtZTogc3RyaW5nLFxuICAgIHRhcmdldDogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPixcbiAgICBvcHRzPzogeyBuYW1lSGludD86IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgLy8gVGhpcyB3aWxsIGRpc2NvdmVyIG9yIGNyZWF0ZSB0aGUgbG9jYWwgbmFtZSBmb3IgYWNjZXNzaW5nIHRoZSBnaXZlbiBpbXBvcnQuXG4gICAgbGV0IGltcG9ydGVkSWRlbnRpZmllciA9IHRoaXMuI2ltcG9ydGVyLmltcG9ydChcbiAgICAgIHRoaXMuI3RlbXBsYXRlLFxuICAgICAgbW9kdWxlU3BlY2lmaWVyLFxuICAgICAgZXhwb3J0ZWROYW1lLFxuICAgICAgb3B0cz8ubmFtZUhpbnRcbiAgICApO1xuXG4gICAgLy8gSWYgd2UncmUgYWxyZWFkeSByZWZlcmVuY2luZyB0aGUgaW1wb3J0ZWQgbmFtZSBmcm9tIHRoZSBvdXRlciBzY29wZSBhbmRcbiAgICAvLyBpdCdzIG5vdCBzaGFkb3dlZCBhdCBvdXIgdGFyZ2V0IGxvY2F0aW9uIGluIHRoZSB0ZW1wbGF0ZSwgd2UgY2FuIHJldXNlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGltcG9ydC5cbiAgICBpZiAoXG4gICAgICB0aGlzLiNzY29wZUxvY2Fscy5oYXMoaW1wb3J0ZWRJZGVudGlmaWVyLm5hbWUpICYmXG4gICAgICAhYXN0Tm9kZUhhc0JpbmRpbmcodGFyZ2V0LCBpbXBvcnRlZElkZW50aWZpZXIubmFtZSlcbiAgICApIHtcbiAgICAgIHJldHVybiBpbXBvcnRlZElkZW50aWZpZXIubmFtZTtcbiAgICB9XG5cbiAgICBsZXQgaWRlbnRpZmllciA9IHVudXNlZE5hbWVMaWtlKFxuICAgICAgaW1wb3J0ZWRJZGVudGlmaWVyLm5hbWUsXG4gICAgICAoY2FuZGlkYXRlKSA9PiB0aGlzLiNzY29wZUxvY2Fscy5oYXMoY2FuZGlkYXRlKSB8fCBhc3ROb2RlSGFzQmluZGluZyh0YXJnZXQsIGNhbmRpZGF0ZSlcbiAgICApO1xuICAgIGlmIChpZGVudGlmaWVyICE9PSBpbXBvcnRlZElkZW50aWZpZXIubmFtZSkge1xuICAgICAgLy8gVGhlIGltcG9ydGVkSWRlbnRpZmllciB0aGF0IHdlIGhhdmUgaW4gSmF2YXNjcmlwdCBpcyBub3QgdXNhYmxlIHdpdGhpblxuICAgICAgLy8gb3VyIEhCUyBiZWNhdXNlIGl0J3Mgc2hhZG93ZWQgYnkgYSBibG9jayBwYXJhbS4gU28gd2Ugd2lsbCBpbnRyb2R1Y2UgYVxuICAgICAgLy8gc2Vjb25kIG5hbWUgdmlhIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHJlYXNvbiB3ZSBkb24ndCBmb3JjZSB0aGUgaW1wb3J0IGl0c2VsZiB0byBoYXZlIHRoaXMgbmFtZSBpcyB0aGF0XG4gICAgICAvLyB3ZSBtaWdodCBiZSByZS11c2luZyBhbiBleGlzdGluZyBpbXBvcnQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGdvXG4gICAgICAvLyByZXdyaXRpbmcgYWxsIG9mIGl0cyBjYWxsc2l0ZXMgdGhhdCBhcmUgdW5yZWxhdGVkIHRvIHVzLlxuICAgICAgbGV0IHQgPSB0aGlzLiNiYWJlbC50eXBlcztcbiAgICAgIHRoaXMuI2VtaXRTdGF0ZW1lbnQoXG4gICAgICAgIHQudmFyaWFibGVEZWNsYXJhdGlvbignbGV0JywgW1xuICAgICAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKHQuaWRlbnRpZmllcihpZGVudGlmaWVyKSwgaW1wb3J0ZWRJZGVudGlmaWVyKSxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3Njb3BlTG9jYWxzLmFkZChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW1wb3J0IHN0YXRlbWVudCBwdXJlbHkgZm9yIHNpZGUgZWZmZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIHRoZSBtb2R1bGUgdG8gaW1wb3J0XG4gICAqL1xuICBpbXBvcnRGb3JTaWRlRWZmZWN0KG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jaW1wb3J0ZXIuaW1wb3J0Rm9yU2lkZUVmZmVjdChtb2R1bGVTcGVjaWZpZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYSBqYXZhc2NyaXB0IGV4cHJlc2lzb24gZm9yIHNpZGUtZWZmZWN0LiBUaGlzIG9ubHkgYWNjZXB0c1xuICAgKiBleHByZXNzaW9ucywgbm90IHN0YXRlbWVudHMsIGJlY2F1c2UgeW91IHNob3VsZCBub3QgaW50cm9kdWNlIG5ldyBiaW5kaW5ncy5cbiAgICogVG8gaW50cm9kdWNlIGEgYmluZGluZyBzZWUgYmluZEV4cHJlc3Npb24gb3IgYmluZEltcG9ydCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0geyBFeHByZXNzaW9uIH0gZXhwcmVzc2lvbiBBIGphdmFzY3JpcHQgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSB3aWxsXG4gICAqIGluaXRpYWxpemUgeW91ciBuZXcgYmluZGluZy4gU2VlIGRvY3Mgb24gdGhlIEV4cHJlc3Npb24gdHlwZSBiZWxvdyBmb3JcbiAgICogZGV0YWlscy5cbiAgICovXG4gIGVtaXRFeHByZXNzaW9uKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiB2b2lkIHtcbiAgICBsZXQgdCA9IHRoaXMuI2JhYmVsLnR5cGVzO1xuICAgIHRoaXMuI2VtaXRTdGF0ZW1lbnQoXG4gICAgICB0LmV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcy4jcGFyc2VFeHByZXNzaW9uKHRoaXMuI3N0YXRlLnByb2dyYW0sIGV4cHJlc3Npb24pKVxuICAgICk7XG4gIH1cblxuICAjcGFyc2VFeHByZXNzaW9uKHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPiwgZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IHQuRXhwcmVzc2lvbiB7XG4gICAgbGV0IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZztcbiAgICBpZiAodHlwZW9mIGV4cHJlc3Npb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb24obmV3IEV4cHJlc3Npb25Db250ZXh0KHRoaXMuI2ltcG9ydGVyLCB0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkID0gdGhpcy4jYmFiZWwucGFyc2UoZXhwcmVzc2lvblN0cmluZyk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpTVXRpbHMuYmluZEV4cHJlc3Npb24gY291bGQgbm90IHVuZGVyc3RhbmQgdGhlIGV4cHJlc3Npb246ICR7ZXhwcmVzc2lvblN0cmluZ31gXG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgc3RhdGVtZW50cyA9IGJvZHkocGFyc2VkKTtcbiAgICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpTVXRpbHMuYmluZEV4cHJlc3Npb24gZXhwZWN0ZWQgdG8gZmluZCBleGFjdGx5IG9uZSBleHByZXNzaW9uIGJ1dCBmb3VuZCAke3N0YXRlbWVudHMubGVuZ3RofSBpbjogJHtleHByZXNzaW9uU3RyaW5nfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzWzBdO1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBKU1V0aWxzLmJpbmRFeHByZXNzaW9uIGV4cGVjdGVkIHRvIGZpbmQgYW4gZXhwcmVzc2lvbiBidXQgZm91bmQgJHtzdGF0ZW1lbnQudHlwZX0gaW46ICR7ZXhwcmVzc2lvblN0cmluZ31gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVtZW50LmV4cHJlc3Npb247XG4gIH1cbn1cblxuZnVuY3Rpb24gdW51c2VkTmFtZUxpa2UoZGVzaXJlZE5hbWU6IHN0cmluZywgaXNVc2VkOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogc3RyaW5nIHtcbiAgbGV0IGNhbmRpZGF0ZSA9IGRlc2lyZWROYW1lO1xuICBsZXQgY291bnRlciA9IDA7XG4gIHdoaWxlIChpc1VzZWQoY2FuZGlkYXRlKSkge1xuICAgIGNhbmRpZGF0ZSA9IGAke2Rlc2lyZWROYW1lfSR7Y291bnRlcisrfWA7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXN0Tm9kZUhhc0JpbmRpbmcodGFyZ2V0OiBXYWxrZXJQYXRoPEFTVHYxLk5vZGU+LCBuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGN1cnNvcjogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPiB8IG51bGwgPSB0YXJnZXQ7XG4gIHdoaWxlIChjdXJzb3IpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IGN1cnNvci5wYXJlbnQ/Lm5vZGU7XG4gICAgaWYgKFxuICAgICAgcGFyZW50Tm9kZT8udHlwZSA9PT0gJ0VsZW1lbnROb2RlJyAmJlxuICAgICAgcGFyZW50Tm9kZS5ibG9ja1BhcmFtcy5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgLy8gYW4gRWxlbWVudE5vZGUncyBibG9jayBwYXJhbXMgYXJlIHZhbGlkIG9ubHkgd2l0aGluIGl0cyBjaGlsZHJlblxuICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmNsdWRlcyhjdXJzb3Iubm9kZSBhcyBBU1R2MS5TdGF0ZW1lbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwYXJlbnROb2RlPy50eXBlID09PSAnQmxvY2snICYmXG4gICAgICBwYXJlbnROb2RlLmJsb2NrUGFyYW1zLmluY2x1ZGVzKG5hbWUpICYmXG4gICAgICAvLyBhIEJsb2NrJ3MgYmxvY2tQYXJhbXMgYXJlIHZhbGlkIG9ubHkgd2l0aGluIGl0cyBib2R5XG4gICAgICBwYXJlbnROb2RlLmJvZHkuaW5jbHVkZXMoY3Vyc29yLm5vZGUgYXMgQVNUdjEuU3RhdGVtZW50KVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVGhpcyBleHRlbmRzIEdsaW1tZXIncyBBU1RQbHVnaW5FbnZpcm9ubWVudCB0eXBlIHRvIHB1dCBvdXIganN1dGlscyBpbnRvIG1ldGFcbiAqL1xuZXhwb3J0IHR5cGUgV2l0aEpTVXRpbHM8VCBleHRlbmRzIHsgbWV0YT86IG9iamVjdCB9PiA9IHtcbiAgbWV0YTogVFsnbWV0YSddICYgeyBqc3V0aWxzOiBKU1V0aWxzIH07XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRXh0ZW5kZWRQbHVnaW5CdWlsZGVyID0gQVNUUGx1Z2luQnVpbGRlcjxXaXRoSlNVdGlsczxBU1RQbHVnaW5FbnZpcm9ubWVudD4+O1xuXG5mdW5jdGlvbiBib2R5KG5vZGU6IHQuUHJvZ3JhbSB8IHQuRmlsZSkge1xuICBpZiAobm9kZS50eXBlID09PSAnRmlsZScpIHtcbiAgICByZXR1cm4gbm9kZS5wcm9ncmFtLmJvZHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgfVxufVxuXG4vKipcbiAqIEFsbG93cyB5b3UgdG8gY29uc3RydWN0IGFuIGV4cHJlc3Npb24gdGhhdCByZWxpZXMgb24gaW1wb3J0ZWQgdmFsdWVzLlxuICovXG5jbGFzcyBFeHByZXNzaW9uQ29udGV4dCB7XG4gICNpbXBvcnRlcjogSW1wb3J0VXRpbDtcbiAgI3RhcmdldDogTm9kZVBhdGg8dC5Ob2RlPjtcblxuICBjb25zdHJ1Y3RvcihpbXBvcnRlcjogSW1wb3J0VXRpbCwgdGFyZ2V0OiBOb2RlUGF0aDx0Lk5vZGU+KSB7XG4gICAgdGhpcy4jaW1wb3J0ZXIgPSBpbXBvcnRlcjtcbiAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBvciBjcmVhdGUgYSBsb2NhbCBiaW5kaW5nIGZvciB0aGUgZ2l2ZW4gaW1wb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIFRoZSBwYXRoIHRvIGltcG9ydCBmcm9tLlxuICAgKiBAcGFyYW0gZXhwb3J0ZWROYW1lIFRoZSBuYW1lZCBleHBvcnQgeW91IHdpc2ggdG8gYWNjZXNzLCBvciBcImRlZmF1bHRcIiBmb3JcbiAgICogdGhlIGRlZmF1bHQgZXhwb3J0LCBvciBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZSBleHBvcnQuXG4gICAqIEBwYXJhbSBuYW1lSGludCBPcHRpb25hbGx5LCBwcm92aWRlIGEgZGVzY3JpcHRpdmUgbmFtZSBmb3IgeW91ciBuZXdcbiAgICogYmluZGluZy4gV2Ugd2lsbCBtYW5nbGUgdGhpcyBuYW1lIGFzIG5lZWRlZCB0byBhdm9pZCBjb2xsaXNpb25zLCBidXRcbiAgICogcGlja2luZyBhIGdvb2QgbmFtZSBoZXJlIGNhbiBhaWQgaW4gZGVidWdnaW5nLlxuXG4gICAqIEByZXR1cm4gdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZSBpbXBvcnRlZCB2YWx1ZVxuICAgKi9cbiAgaW1wb3J0KG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLCBleHBvcnRlZE5hbWU6IHN0cmluZywgbmFtZUhpbnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNpbXBvcnRlci5pbXBvcnQodGhpcy4jdGFyZ2V0LCBtb2R1bGVTcGVjaWZpZXIsIGV4cG9ydGVkTmFtZSwgbmFtZUhpbnQpLm5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIHBhc3MgYSBKYXZhc2NyaXB0IGV4cHJlc3Npb24gYXMgYSBzdHJpbmcgbGlrZTpcbiAqXG4gKiAgIFwibmV3IERhdGUoKVwiXG4gKlxuICogT3IgYXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzdHJpbmc6XG4gKlxuICogICAoKSA9PiBcIm5ldyBEYXRlKClcIlxuICpcbiAqIFdoZW4geW91IHVzZSBhIGZ1bmN0aW9uLCBpdCBjYW4gdXNlIGltcG9ydGVkIHZhbHVlczpcbiAqXG4gKiAgIChjb250ZXh0KSA9PiBgbmV3ICR7Y29udGV4dC5pbXBvcnQoXCJsdXhvblwiLCBcIkRhdGVUaW1lXCIpfSgpYFxuICpcbiAqL1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbiA9IHN0cmluZyB8ICgoY29udGV4dDogRXhwcmVzc2lvbkNvbnRleHQpID0+IHN0cmluZyk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqcy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFLQSwyQ0FBZ0Q7QUFPaEQsNkVBQTZFO0FBQzdFLCtCQUErQjtBQUMvQixNQUFhLE9BQU87SUFPbEIsWUFDRSxLQUFtQixFQUNuQixLQUFZLEVBQ1osUUFBZ0MsRUFDaEMsWUFBb0MsRUFDcEMsUUFBb0I7O1FBWHRCLGlDQUFxQjtRQUNyQixpQ0FBYztRQUNkLG9DQUFrQztRQUNsQyx3Q0FBc0M7UUFDdEMsb0NBQXNCO1FBU3BCLHVCQUFBLElBQUksa0JBQVUsS0FBSyxNQUFBLENBQUM7UUFDcEIsdUJBQUEsSUFBSSxrQkFBVSxLQUFLLE1BQUEsQ0FBQztRQUNwQix1QkFBQSxJQUFJLHFCQUFhLFFBQVEsTUFBQSxDQUFDO1FBQzFCLHVCQUFBLElBQUkseUJBQWlCLFlBQVksTUFBQSxDQUFDO1FBQ2xDLHVCQUFBLElBQUkscUJBQWEsUUFBUSxNQUFBLENBQUM7UUFFMUIsSUFBSSxDQUFDLHVCQUFBLElBQUksc0JBQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLE1BQXlDLENBQUM7WUFDOUMsS0FBSyxJQUFJLFNBQVMsSUFBSSx1QkFBQSxJQUFJLHNCQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO29CQUNwQyxNQUFNO2lCQUNQO2dCQUNELE1BQU0sR0FBRyxTQUFTLENBQUM7YUFDcEI7WUFDRCxJQUFJLE1BQU0sRUFBRTtnQkFDVix1QkFBQSxJQUFJLHNCQUFPLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO2FBQ3ZDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGNBQWMsQ0FDWixVQUFzQixFQUN0QixNQUE4QixFQUM5QixJQUE0Qjs7UUFFNUIs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LElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQzFCO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQjtJQUlyQixZQUFZLFFBQW9CLEVBQUUsTUFBd0I7UUFIMUQsOENBQXNCO1FBQ3RCLDRDQUEwQjtRQUd4Qix1QkFBQSxJQUFJLCtCQUFhLFFBQVEsTUFBQSxDQUFDO1FBQzFCLHVCQUFBLElBQUksNkJBQVcsTUFBTSxNQUFBLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsTUFBTSxDQUFDLGVBQXVCLEVBQUUsWUFBb0IsRUFBRSxRQUFpQjtRQUNyRSxPQUFPLHVCQUFBLElBQUksbUNBQVUsQ0FBQyxNQUFNLENBQUMsdUJBQUEsSUFBSSxpQ0FBUSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgdHlwZXMgYXMgdCB9IGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgQmFiZWwgZnJvbSAnQGJhYmVsL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOb2RlUGF0aCB9IGZyb20gJ0BiYWJlbC90cmF2ZXJzZSc7XG5pbXBvcnQgdHlwZSB7IEFTVFBsdWdpbkJ1aWxkZXIsIEFTVFBsdWdpbkVudmlyb25tZW50LCBBU1R2MSwgV2Fsa2VyUGF0aCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgdHlwZSB7IEltcG9ydFV0aWwgfSBmcm9tICdiYWJlbC1pbXBvcnQtdXRpbCc7XG5pbXBvcnQgeyBhc3ROb2RlSGFzQmluZGluZyB9IGZyb20gJy4vaGJzLXV0aWxzJztcblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgcHJvZ3JhbTogTm9kZVBhdGg8QmFiZWwudHlwZXMuUHJvZ3JhbT47XG4gIGxhc3RJbnNlcnRlZFBhdGg6IE5vZGVQYXRoPEJhYmVsLnR5cGVzLlN0YXRlbWVudD4gfCB1bmRlZmluZWQ7XG59XG5cbi8vIFRoaXMgZXhpc3RzIHRvIGdpdmUgQVNUIHBsdWdpbnMgYSBjb250cm9sbGVkIGludGVyZmFjZSBmb3IgaW5mbHVlbmNpbmcgdGhlXG4vLyBzdXJyb3VuZGluZyBKYXZhc2NyaXB0IHNjb3BlXG5leHBvcnQgY2xhc3MgSlNVdGlscyB7XG4gICNiYWJlbDogdHlwZW9mIEJhYmVsO1xuICAjc3RhdGU6IFN0YXRlO1xuICAjdGVtcGxhdGU6IE5vZGVQYXRoPHQuRXhwcmVzc2lvbj47XG4gICNhZGRlZEJpbmRpbmc6IChuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICNpbXBvcnRlcjogSW1wb3J0VXRpbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWJlbDogdHlwZW9mIEJhYmVsLFxuICAgIHN0YXRlOiBTdGF0ZSxcbiAgICB0ZW1wbGF0ZTogTm9kZVBhdGg8dC5FeHByZXNzaW9uPixcbiAgICBhZGRlZEJpbmRpbmc6IChuYW1lOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgaW1wb3J0ZXI6IEltcG9ydFV0aWxcbiAgKSB7XG4gICAgdGhpcy4jYmFiZWwgPSBiYWJlbDtcbiAgICB0aGlzLiNzdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuI3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy4jYWRkZWRCaW5kaW5nID0gYWRkZWRCaW5kaW5nO1xuICAgIHRoaXMuI2ltcG9ydGVyID0gaW1wb3J0ZXI7XG5cbiAgICBpZiAoIXRoaXMuI3N0YXRlLmxhc3RJbnNlcnRlZFBhdGgpIHtcbiAgICAgIGxldCB0YXJnZXQ6IE5vZGVQYXRoPHQuU3RhdGVtZW50PiB8IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiB0aGlzLiNzdGF0ZS5wcm9ncmFtLmdldCgnYm9keScpKSB7XG4gICAgICAgIGlmICghc3RhdGVtZW50LmlzSW1wb3J0RGVjbGFyYXRpb24oKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IHN0YXRlbWVudDtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy4jc3RhdGUubGFzdEluc2VydGVkUGF0aCA9IHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcgdGhhdCB5b3UgY2FuIHVzZSBpbiB5b3VyIHRlbXBsYXRlLCBpbml0aWFsaXplZCB3aXRoXG4gICAqIHRoZSBnaXZlbiBKYXZhc2NyaXB0IGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSB7IEV4cHJlc3Npb24gfSBleHByZXNzaW9uIEEgamF2YXNjcmlwdCBleHByZXNzaW9uIHdob3NlIHZhbHVlIHdpbGxcbiAgICogaW5pdGlhbGl6ZSB5b3VyIG5ldyBiaW5kaW5nLiBTZWUgZG9jcyBvbiB0aGUgRXhwcmVzc2lvbiB0eXBlIGZvciBkZXRhaWxzLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBsb2NhdGlvbiB3aXRoaW4geW91ciB0ZW1wbGF0ZSB3aGVyZSB0aGUgYmluZGluZyB3aWxsIGJlXG4gICAqIHVzZWQuIFRoaXMgbWF0dGVycyBzbyB3ZSBjYW4gYXZvaWQgbmFtaW5nIGNvbGxpc2lvbnMuXG4gICAqIEBwYXJhbSBvcHRzLm5hbWVIaW50IE9wdGlvbmFsbHksIHByb3ZpZGUgYSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB5b3VyIG5ld1xuICAgKiBiaW5kaW5nLiBXZSB3aWxsIG1hbmdsZSB0aGlzIG5hbWUgYXMgbmVlZGVkIHRvIGF2b2lkIGNvbGxpc2lvbnMsIGJ1dFxuICAgKiBwaWNraW5nIGEgZ29vZCBuYW1lIGhlcmUgY2FuIGFpZCBpbiBkZWJ1Z2dpbmcuXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIG5hbWUgeW91IGNhbiB1c2UgaW4geW91ciB0ZW1wbGF0ZSB0byBhY2Nlc3MgdGhlIGJpbmRpbmcuXG4gICAqL1xuICBiaW5kRXhwcmVzc2lvbihcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uLFxuICAgIHRhcmdldDogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPixcbiAgICBvcHRzPzogeyBuYW1lSGludD86IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IG5hbWUgPSB1bnVzZWROYW1lTGlrZShcbiAgICAgIG9wdHM/Lm5hbWVIaW50ID8/ICdhJyxcbiAgICAgIChjYW5kaWRhdGUpID0+XG4gICAgICAgIHRoaXMuI3RlbXBsYXRlLnNjb3BlLmhhc0JpbmRpbmcoY2FuZGlkYXRlKSB8fCBhc3ROb2RlSGFzQmluZGluZyh0YXJnZXQsIGNhbmRpZGF0ZSlcbiAgICApO1xuICAgIGxldCB0ID0gdGhpcy4jYmFiZWwudHlwZXM7XG4gICAgbGV0IGRlY2xhcmF0aW9uOiBOb2RlUGF0aDx0LlZhcmlhYmxlRGVjbGFyYXRpb24+ID0gdGhpcy4jZW1pdFN0YXRlbWVudChcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdGlvbignbGV0JywgW1xuICAgICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgICB0LmlkZW50aWZpZXIobmFtZSksXG4gICAgICAgICAgdGhpcy4jcGFyc2VFeHByZXNzaW9uKHRoaXMuI3N0YXRlLnByb2dyYW0sIGV4cHJlc3Npb24pXG4gICAgICAgICksXG4gICAgICBdKVxuICAgICk7XG4gICAgZGVjbGFyYXRpb24uc2NvcGUucmVnaXN0ZXJCaW5kaW5nKCdsZXQnLCBkZWNsYXJhdGlvbi5nZXQoJ2RlY2xhcmF0aW9ucy4wJykgYXMgTm9kZVBhdGgpO1xuICAgIHRoaXMuI2FkZGVkQmluZGluZyhuYW1lKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gICNlbWl0U3RhdGVtZW50PFQgZXh0ZW5kcyB0LlN0YXRlbWVudD4oc3RhdGVtZW50OiBUKTogTm9kZVBhdGg8VD4ge1xuICAgIGlmICh0aGlzLiNzdGF0ZS5sYXN0SW5zZXJ0ZWRQYXRoKSB7XG4gICAgICB0aGlzLiNzdGF0ZS5sYXN0SW5zZXJ0ZWRQYXRoID0gdGhpcy4jc3RhdGUubGFzdEluc2VydGVkUGF0aC5pbnNlcnRBZnRlcihzdGF0ZW1lbnQpWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNzdGF0ZS5sYXN0SW5zZXJ0ZWRQYXRoID0gdGhpcy4jc3RhdGUucHJvZ3JhbS51bnNoaWZ0Q29udGFpbmVyKCdib2R5Jywgc3RhdGVtZW50KVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI3N0YXRlLmxhc3RJbnNlcnRlZFBhdGggYXMgTm9kZVBhdGg8VD47XG4gIH1cblxuICAvKipcbiAgICogR2FpbiBhY2Nlc3MgdG8gYW4gaW1wb3J0ZWQgdmFsdWUgd2l0aGluIHlvdXIgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgVGhlIHBhdGggdG8gaW1wb3J0IGZyb20uXG4gICAqIEBwYXJhbSBleHBvcnRlZE5hbWUgVGhlIG5hbWVkIGV4cG9ydCB5b3Ugd2lzaCB0byBhY2Nlc3MsIG9yIFwiZGVmYXVsdFwiIGZvclxuICAgKiB0aGUgZGVmYXVsdCBleHBvcnQsIG9yIFwiKlwiIGZvciB0aGUgbmFtZXNwYWNlIGV4cG9ydC5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgbG9jYXRpb24gd2l0aGluIHlvdXIgdGVtcGxhdGUgd2hlcmUgdGhlIGJpbmRpbmcgd2lsbCBiZVxuICAgKiB1c2VkLiBUaGlzIG1hdHRlcnMgc28gd2UgY2FuIGF2b2lkIG5hbWluZyBjb2xsaXNpb25zLlxuICAgKiBAcGFyYW0gb3B0cy5uYW1lSGludCBPcHRpb25hbGx5LCBwcm92aWRlIGEgZGVzY3JpcHRpdmUgbmFtZSBmb3IgeW91ciBuZXdcbiAgICogYmluZGluZy4gV2Ugd2lsbCBtYW5nbGUgdGhpcyBuYW1lIGFzIG5lZWRlZCB0byBhdm9pZCBjb2xsaXNpb25zLCBidXRcbiAgICogcGlja2luZyBhIGdvb2QgbmFtZSBoZXJlIGNhbiBhaWQgaW4gZGVidWdnaW5nLlxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBuYW1lIHlvdSBjYW4gdXNlIGluIHlvdXIgdGVtcGxhdGUgdG8gYWNjZXNzIHRoZSBpbXBvcnRlZCB2YWx1ZS5cbiAgICovXG4gIGJpbmRJbXBvcnQoXG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG4gICAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG4gICAgdGFyZ2V0OiBXYWxrZXJQYXRoPEFTVHYxLk5vZGU+LFxuICAgIG9wdHM/OiB7IG5hbWVIaW50Pzogc3RyaW5nIH1cbiAgKTogc3RyaW5nIHtcbiAgICAvLyBUaGlzIHdpbGwgZGlzY292ZXIgb3IgY3JlYXRlIHRoZSBsb2NhbCBuYW1lIGZvciBhY2Nlc3NpbmcgdGhlIGdpdmVuIGltcG9ydC5cbiAgICBsZXQgaW1wb3J0ZWRJZGVudGlmaWVyID0gdGhpcy4jaW1wb3J0ZXIuaW1wb3J0KFxuICAgICAgdGhpcy4jdGVtcGxhdGUsXG4gICAgICBtb2R1bGVTcGVjaWZpZXIsXG4gICAgICBleHBvcnRlZE5hbWUsXG4gICAgICBvcHRzPy5uYW1lSGludFxuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgYmFzZSBjYXNlOiB0aGUgSlMgbmFtZSB0aGF0J3MgYXZhaWxhYmxlIGlzIGFsc28gdW51c2VkIGF0IG91ciBzcG90XG4gICAgLy8gaW4gSEJTLCBzbyBqdXN0IHVzZSBpdC5cbiAgICBpZiAoIWFzdE5vZGVIYXNCaW5kaW5nKHRhcmdldCwgaW1wb3J0ZWRJZGVudGlmaWVyLm5hbWUpKSB7XG4gICAgICB0aGlzLiNhZGRlZEJpbmRpbmcoaW1wb3J0ZWRJZGVudGlmaWVyLm5hbWUpO1xuICAgICAgcmV0dXJuIGltcG9ydGVkSWRlbnRpZmllci5uYW1lO1xuICAgIH1cblxuICAgIC8vIFRoZSBpbXBvcnRlZElkZW50aWZpZXIgdGhhdCB3ZSBoYXZlIGluIEphdmFzY3JpcHQgaXMgbm90IHVzYWJsZSB3aXRoaW5cbiAgICAvLyBvdXIgSEJTIGJlY2F1c2UgaXQncyBzaGFkb3dlZCBieSBhIGJsb2NrIHBhcmFtLiBTbyB3ZSB3aWxsIGludHJvZHVjZSBhXG4gICAgLy8gc2Vjb25kIG5hbWUgdmlhIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAgLy9cbiAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGZvcmNlIHRoZSBpbXBvcnQgaXRzZWxmIHRvIGhhdmUgdGhpcyBuYW1lIGlzIHRoYXRcbiAgICAvLyB3ZSBtaWdodCBiZSByZS11c2luZyBhbiBleGlzdGluZyBpbXBvcnQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGdvXG4gICAgLy8gcmV3cml0aW5nIGFsbCBvZiBpdHMgY2FsbHNpdGVzIHRoYXQgYXJlIHVucmVsYXRlZCB0byB1cy5cbiAgICBsZXQgaWRlbnRpZmllciA9IHVudXNlZE5hbWVMaWtlKFxuICAgICAgaW1wb3J0ZWRJZGVudGlmaWVyLm5hbWUsXG4gICAgICAoY2FuZGlkYXRlKSA9PlxuICAgICAgICB0aGlzLiN0ZW1wbGF0ZS5zY29wZS5oYXNCaW5kaW5nKGNhbmRpZGF0ZSkgfHwgYXN0Tm9kZUhhc0JpbmRpbmcodGFyZ2V0LCBjYW5kaWRhdGUpXG4gICAgKTtcbiAgICBsZXQgdCA9IHRoaXMuI2JhYmVsLnR5cGVzO1xuICAgIGxldCBkZWNsYXJhdGlvbiA9IHRoaXMuI2VtaXRTdGF0ZW1lbnQoXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRpb24oJ2xldCcsIFtcbiAgICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IodC5pZGVudGlmaWVyKGlkZW50aWZpZXIpLCBpbXBvcnRlZElkZW50aWZpZXIpLFxuICAgICAgXSlcbiAgICApO1xuICAgIGRlY2xhcmF0aW9uLnNjb3BlLnJlZ2lzdGVyQmluZGluZygnbGV0JywgZGVjbGFyYXRpb24uZ2V0KCdkZWNsYXJhdGlvbnMuMCcpIGFzIE5vZGVQYXRoKTtcblxuICAgIHRoaXMuI2FkZGVkQmluZGluZyhpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW1wb3J0IHN0YXRlbWVudCBwdXJlbHkgZm9yIHNpZGUgZWZmZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIHRoZSBtb2R1bGUgdG8gaW1wb3J0XG4gICAqL1xuICBpbXBvcnRGb3JTaWRlRWZmZWN0KG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jaW1wb3J0ZXIuaW1wb3J0Rm9yU2lkZUVmZmVjdChtb2R1bGVTcGVjaWZpZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYSBqYXZhc2NyaXB0IGV4cHJlc2lzb24gZm9yIHNpZGUtZWZmZWN0LiBUaGlzIG9ubHkgYWNjZXB0c1xuICAgKiBleHByZXNzaW9ucywgbm90IHN0YXRlbWVudHMsIGJlY2F1c2UgeW91IHNob3VsZCBub3QgaW50cm9kdWNlIG5ldyBiaW5kaW5ncy5cbiAgICogVG8gaW50cm9kdWNlIGEgYmluZGluZyBzZWUgYmluZEV4cHJlc3Npb24gb3IgYmluZEltcG9ydCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0geyBFeHByZXNzaW9uIH0gZXhwcmVzc2lvbiBBIGphdmFzY3JpcHQgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSB3aWxsXG4gICAqIGluaXRpYWxpemUgeW91ciBuZXcgYmluZGluZy4gU2VlIGRvY3Mgb24gdGhlIEV4cHJlc3Npb24gdHlwZSBiZWxvdyBmb3JcbiAgICogZGV0YWlscy5cbiAgICovXG4gIGVtaXRFeHByZXNzaW9uKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiB2b2lkIHtcbiAgICBsZXQgdCA9IHRoaXMuI2JhYmVsLnR5cGVzO1xuICAgIHRoaXMuI2VtaXRTdGF0ZW1lbnQoXG4gICAgICB0LmV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcy4jcGFyc2VFeHByZXNzaW9uKHRoaXMuI3N0YXRlLnByb2dyYW0sIGV4cHJlc3Npb24pKVxuICAgICk7XG4gIH1cblxuICAjcGFyc2VFeHByZXNzaW9uKHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPiwgZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IHQuRXhwcmVzc2lvbiB7XG4gICAgbGV0IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZztcbiAgICBpZiAodHlwZW9mIGV4cHJlc3Npb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb24obmV3IEV4cHJlc3Npb25Db250ZXh0KHRoaXMuI2ltcG9ydGVyLCB0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkID0gdGhpcy4jYmFiZWwucGFyc2UoZXhwcmVzc2lvblN0cmluZyk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpTVXRpbHMuYmluZEV4cHJlc3Npb24gY291bGQgbm90IHVuZGVyc3RhbmQgdGhlIGV4cHJlc3Npb246ICR7ZXhwcmVzc2lvblN0cmluZ31gXG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgc3RhdGVtZW50cyA9IGJvZHkocGFyc2VkKTtcbiAgICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpTVXRpbHMuYmluZEV4cHJlc3Npb24gZXhwZWN0ZWQgdG8gZmluZCBleGFjdGx5IG9uZSBleHByZXNzaW9uIGJ1dCBmb3VuZCAke3N0YXRlbWVudHMubGVuZ3RofSBpbjogJHtleHByZXNzaW9uU3RyaW5nfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzWzBdO1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBKU1V0aWxzLmJpbmRFeHByZXNzaW9uIGV4cGVjdGVkIHRvIGZpbmQgYW4gZXhwcmVzc2lvbiBidXQgZm91bmQgJHtzdGF0ZW1lbnQudHlwZX0gaW46ICR7ZXhwcmVzc2lvblN0cmluZ31gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVtZW50LmV4cHJlc3Npb247XG4gIH1cbn1cblxuZnVuY3Rpb24gdW51c2VkTmFtZUxpa2UoZGVzaXJlZE5hbWU6IHN0cmluZywgaXNVc2VkOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogc3RyaW5nIHtcbiAgbGV0IGNhbmRpZGF0ZSA9IGRlc2lyZWROYW1lO1xuICBsZXQgY291bnRlciA9IDA7XG4gIHdoaWxlIChpc1VzZWQoY2FuZGlkYXRlKSkge1xuICAgIGNhbmRpZGF0ZSA9IGAke2Rlc2lyZWROYW1lfSR7Y291bnRlcisrfWA7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZTtcbn1cblxuLyoqXG4gKiBUaGlzIGV4dGVuZHMgR2xpbW1lcidzIEFTVFBsdWdpbkVudmlyb25tZW50IHR5cGUgdG8gcHV0IG91ciBqc3V0aWxzIGludG8gbWV0YVxuICovXG5leHBvcnQgdHlwZSBXaXRoSlNVdGlsczxUIGV4dGVuZHMgeyBtZXRhPzogb2JqZWN0IH0+ID0ge1xuICBtZXRhOiBUWydtZXRhJ10gJiB7IGpzdXRpbHM6IEpTVXRpbHMgfTtcbn0gJiBUO1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZFBsdWdpbkJ1aWxkZXIgPSBBU1RQbHVnaW5CdWlsZGVyPFdpdGhKU1V0aWxzPEFTVFBsdWdpbkVudmlyb25tZW50Pj47XG5cbmZ1bmN0aW9uIGJvZHkobm9kZTogdC5Qcm9ncmFtIHwgdC5GaWxlKSB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdGaWxlJykge1xuICAgIHJldHVybiBub2RlLnByb2dyYW0uYm9keTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZS5ib2R5O1xuICB9XG59XG5cbi8qKlxuICogQWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgYW4gZXhwcmVzc2lvbiB0aGF0IHJlbGllcyBvbiBpbXBvcnRlZCB2YWx1ZXMuXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25Db250ZXh0IHtcbiAgI2ltcG9ydGVyOiBJbXBvcnRVdGlsO1xuICAjdGFyZ2V0OiBOb2RlUGF0aDx0Lk5vZGU+O1xuXG4gIGNvbnN0cnVjdG9yKGltcG9ydGVyOiBJbXBvcnRVdGlsLCB0YXJnZXQ6IE5vZGVQYXRoPHQuTm9kZT4pIHtcbiAgICB0aGlzLiNpbXBvcnRlciA9IGltcG9ydGVyO1xuICAgIHRoaXMuI3RhcmdldCA9IHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG9yIGNyZWF0ZSBhIGxvY2FsIGJpbmRpbmcgZm9yIHRoZSBnaXZlbiBpbXBvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgVGhlIHBhdGggdG8gaW1wb3J0IGZyb20uXG4gICAqIEBwYXJhbSBleHBvcnRlZE5hbWUgVGhlIG5hbWVkIGV4cG9ydCB5b3Ugd2lzaCB0byBhY2Nlc3MsIG9yIFwiZGVmYXVsdFwiIGZvclxuICAgKiB0aGUgZGVmYXVsdCBleHBvcnQsIG9yIFwiKlwiIGZvciB0aGUgbmFtZXNwYWNlIGV4cG9ydC5cbiAgICogQHBhcmFtIG5hbWVIaW50IE9wdGlvbmFsbHksIHByb3ZpZGUgYSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB5b3VyIG5ld1xuICAgKiBiaW5kaW5nLiBXZSB3aWxsIG1hbmdsZSB0aGlzIG5hbWUgYXMgbmVlZGVkIHRvIGF2b2lkIGNvbGxpc2lvbnMsIGJ1dFxuICAgKiBwaWNraW5nIGEgZ29vZCBuYW1lIGhlcmUgY2FuIGFpZCBpbiBkZWJ1Z2dpbmcuXG5cbiAgICogQHJldHVybiB0aGUgbG9jYWwgaWRlbnRpZmllciBmb3IgdGhlIGltcG9ydGVkIHZhbHVlXG4gICAqL1xuICBpbXBvcnQobW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGV4cG9ydGVkTmFtZTogc3RyaW5nLCBuYW1lSGludD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2ltcG9ydGVyLmltcG9ydCh0aGlzLiN0YXJnZXQsIG1vZHVsZVNwZWNpZmllciwgZXhwb3J0ZWROYW1lLCBuYW1lSGludCkubmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIFlvdSBjYW4gcGFzcyBhIEphdmFzY3JpcHQgZXhwcmVzc2lvbiBhcyBhIHN0cmluZyBsaWtlOlxuICpcbiAqICAgXCJuZXcgRGF0ZSgpXCJcbiAqXG4gKiBPciBhcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZzpcbiAqXG4gKiAgICgpID0+IFwibmV3IERhdGUoKVwiXG4gKlxuICogV2hlbiB5b3UgdXNlIGEgZnVuY3Rpb24sIGl0IGNhbiB1c2UgaW1wb3J0ZWQgdmFsdWVzOlxuICpcbiAqICAgKGNvbnRleHQpID0+IGBuZXcgJHtjb250ZXh0LmltcG9ydChcImx1eG9uXCIsIFwiRGF0ZVRpbWVcIil9KClgXG4gKlxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uID0gc3RyaW5nIHwgKChjb250ZXh0OiBFeHByZXNzaW9uQ29udGV4dCkgPT4gc3RyaW5nKTtcbiJdfQ==

@@ -0,3 +1,12 @@

import type { NodePath } from '@babel/traverse';
import { ASTPluginEnvironment, NodeVisitor } from '@glimmer/syntax';
type Params = {
mode: 'explicit';
} | {
mode: 'implicit';
jsPath: NodePath;
};
export declare class ScopeLocals {
#private;
constructor(params: Params);
get locals(): string[];

@@ -9,3 +18,8 @@ has(key: string): boolean;

entries(): [string, string][];
add(key: string, value?: string): void;
add(hbsName: string, jsName?: string): void;
crawl(): (_env: ASTPluginEnvironment) => {
name: string;
visitor: NodeVisitor;
};
}
export {};
"use strict";
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _ScopeLocals_mapping, _ScopeLocals_locals;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScopeLocals = void 0;
/*

@@ -18,9 +10,28 @@ This class exists because:

*/
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _ScopeLocals_instances, _ScopeLocals_mapping, _ScopeLocals_locals, _ScopeLocals_params, _ScopeLocals_isInJsScope;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScopeLocals = void 0;
const hbs_utils_1 = require("./hbs-utils");
const read_only_array_1 = require("./read-only-array");
class ScopeLocals {
constructor() {
constructor(params) {
_ScopeLocals_instances.add(this);
_ScopeLocals_mapping.set(this, {});
_ScopeLocals_locals.set(this, []);
_ScopeLocals_params.set(this, void 0);
__classPrivateFieldSet(this, _ScopeLocals_params, params, "f");
}
get locals() {
return __classPrivateFieldGet(this, _ScopeLocals_locals, "f");
return (0, read_only_array_1.readOnlyArray)(__classPrivateFieldGet(this, _ScopeLocals_locals, "f"), 'The only supported way to manipulate locals is via the jsutils API\nhttps://github.com/emberjs/babel-plugin-ember-template-compilation#jsutils-manipulating-javascript-from-within-ast-transforms');
}

@@ -42,11 +53,73 @@ has(key) {

}
add(key, value) {
__classPrivateFieldGet(this, _ScopeLocals_mapping, "f")[key] = value !== null && value !== void 0 ? value : key;
if (!__classPrivateFieldGet(this, _ScopeLocals_locals, "f").includes(key)) {
__classPrivateFieldGet(this, _ScopeLocals_locals, "f").push(key);
add(hbsName, jsName) {
__classPrivateFieldGet(this, _ScopeLocals_mapping, "f")[hbsName] = jsName !== null && jsName !== void 0 ? jsName : hbsName;
if (!__classPrivateFieldGet(this, _ScopeLocals_locals, "f").includes(hbsName)) {
__classPrivateFieldGet(this, _ScopeLocals_locals, "f").push(hbsName);
}
}
// this AST transform discovers all possible upvars in HBS that refer to valid
// bindings in JS, and then depending on the mode adjusts our actual scope bag
// contents.
crawl() {
return (_env) => {
let seen;
return {
name: 'scope-locals-crawl',
visitor: {
Template: {
enter: () => {
seen = new Set();
},
exit: (_node, _path) => {
if (__classPrivateFieldGet(this, _ScopeLocals_params, "f").mode === 'implicit') {
// all hbs upvars that have matching JS bindings go into the
// scope
for (let name of seen) {
if (__classPrivateFieldGet(this, _ScopeLocals_instances, "m", _ScopeLocals_isInJsScope).call(this, name, __classPrivateFieldGet(this, _ScopeLocals_params, "f").jsPath)) {
this.add(name);
}
}
}
else {
// in explicit form, we might prune back the preexising scope in
// the case where another AST transform has eliminated the use
// of the original binding. But we don't add anything new. The
// only way for new bindings to be introduced into scope is for
// another AST transform to explicitly call the jsutils, which
// calls our `add`.
for (let name of Object.keys(__classPrivateFieldGet(this, _ScopeLocals_mapping, "f"))) {
if (!seen.has(name)) {
__classPrivateFieldGet(this, _ScopeLocals_locals, "f").splice(__classPrivateFieldGet(this, _ScopeLocals_locals, "f").indexOf(name), 1);
delete __classPrivateFieldGet(this, _ScopeLocals_mapping, "f")[name];
}
}
}
},
},
PathExpression: (node, path) => {
if (node.head.type !== 'VarHead') {
return;
}
const name = node.head.name;
if (!(0, hbs_utils_1.astNodeHasBinding)(path, name)) {
seen.add(name);
}
},
ElementNode: (node, path) => {
const name = node.tag.split('.')[0];
if (!(0, hbs_utils_1.astNodeHasBinding)(path, name)) {
seen.add(name);
}
},
},
};
};
}
}
exports.ScopeLocals = ScopeLocals;
_ScopeLocals_mapping = new WeakMap(), _ScopeLocals_locals = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUtbG9jYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NvcGUtbG9jYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOzs7Ozs7O0VBT0U7QUFDRixNQUFhLFdBQVc7SUFBeEI7UUFDRSwrQkFBbUMsRUFBRSxFQUFDO1FBQ3RDLDhCQUFvQixFQUFFLEVBQUM7SUFnQ3pCLENBQUM7SUE5QkMsSUFBSSxNQUFNO1FBQ1IsT0FBTyx1QkFBQSxJQUFJLDJCQUFRLENBQUM7SUFDdEIsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxHQUFHLElBQUksdUJBQUEsSUFBSSw0QkFBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVztRQUNiLE9BQU8sdUJBQUEsSUFBSSw0QkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyx1QkFBQSxJQUFJLDJCQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLDRCQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksNEJBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWM7UUFDN0IsdUJBQUEsSUFBSSw0QkFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLEdBQUcsQ0FBQztRQUNsQyxJQUFJLENBQUMsdUJBQUEsSUFBSSwyQkFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQix1QkFBQSxJQUFJLDJCQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztDQUNGO0FBbENELGtDQWtDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIFRoaXMgY2xhc3MgZXhpc3RzIGJlY2F1c2U6XG4gICAtIGJlZm9yZSB0ZW1wbGF0ZSBjb21waWxhdGlvbiBzdGFydHMsIHdlIG5lZWQgdG8gcGFzcyBhIGBsb2NhbHNgIGFycmF5IHRvXG4gICAgIGVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyXG4gICAtIHRoZSBKU1V0aWxzIEFQSSBjYW4gbXV0YXRlIHRoZSBzY29wZSBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbiAgIC0gdGhvc2Ugc2NvcGUgbXV0YXRpb25zIG5lZWQgdG8gdXBkYXRlIGJvdGggdGhlIG9yaWdpbmFsIGBsb2NhbHNgIGFycmF5IGFuZFxuICAgICBvdXIgb3duIG5hbWUgbWFwcGluZywga2VlcGluZyB0aGVtIGluIHN5bmMuXG4qL1xuZXhwb3J0IGNsYXNzIFNjb3BlTG9jYWxzIHtcbiAgI21hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgI2xvY2Fsczogc3RyaW5nW10gPSBbXTtcblxuICBnZXQgbG9jYWxzKCkge1xuICAgIHJldHVybiB0aGlzLiNsb2NhbHM7XG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5IGluIHRoaXMuI21hcHBpbmc7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNtYXBwaW5nW2tleV07XG4gIH1cblxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNsb2NhbHMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgbmVlZHNSZW1hcHBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuI21hcHBpbmcpLnNvbWUoKFtrLCB2XSkgPT4gayAhPT0gdik7XG4gIH1cblxuICBlbnRyaWVzKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLiNtYXBwaW5nKTtcbiAgfVxuXG4gIGFkZChrZXk6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLiNtYXBwaW5nW2tleV0gPSB2YWx1ZSA/PyBrZXk7XG4gICAgaWYgKCF0aGlzLiNsb2NhbHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGhpcy4jbG9jYWxzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
_ScopeLocals_mapping = new WeakMap(), _ScopeLocals_locals = new WeakMap(), _ScopeLocals_params = new WeakMap(), _ScopeLocals_instances = new WeakSet(), _ScopeLocals_isInJsScope = function _ScopeLocals_isInJsScope(hbsName, jsPath) {
var _a;
let jsName = (_a = __classPrivateFieldGet(this, _ScopeLocals_mapping, "f")[hbsName]) !== null && _a !== void 0 ? _a : hbsName;
return ['this', 'globalThis'].includes(jsName) || jsPath.scope.getBinding(jsName);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUtbG9jYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NvcGUtbG9jYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztFQU9FOzs7Ozs7Ozs7Ozs7Ozs7QUFJRiwyQ0FBZ0Q7QUFDaEQsdURBQWtEO0FBcUJsRCxNQUFhLFdBQVc7SUFDdEIsWUFBWSxNQUFjOztRQUkxQiwrQkFBbUMsRUFBRSxFQUFDO1FBQ3RDLDhCQUFvQixFQUFFLEVBQUM7UUFDdkIsc0NBQWdCO1FBTGQsdUJBQUEsSUFBSSx1QkFBVyxNQUFNLE1BQUEsQ0FBQztJQUN4QixDQUFDO0lBTUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFBLCtCQUFhLEVBQ2xCLHVCQUFBLElBQUksMkJBQVEsRUFDWixtTUFBbU0sQ0FDcE0sQ0FBQztJQUNKLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVztRQUNiLE9BQU8sR0FBRyxJQUFJLHVCQUFBLElBQUksNEJBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLHVCQUFBLElBQUksNEJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sdUJBQUEsSUFBSSwyQkFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQUEsSUFBSSw0QkFBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLDRCQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsR0FBRyxDQUFDLE9BQWUsRUFBRSxNQUFlO1FBQ2xDLHVCQUFBLElBQUksNEJBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxPQUFPLENBQUM7UUFDM0MsSUFBSSxDQUFDLHVCQUFBLElBQUksMkJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsdUJBQUEsSUFBSSwyQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFPRCw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLFlBQVk7SUFDWixLQUFLO1FBQ0gsT0FBTyxDQUFDLElBQTBCLEVBQTBDLEVBQUU7WUFDNUUsSUFBSSxJQUFpQixDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRTt3QkFDUixLQUFLLEVBQUUsR0FBRyxFQUFFOzRCQUNWLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNuQixDQUFDO3dCQUNELElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDckIsSUFBSSx1QkFBQSxJQUFJLDJCQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtnQ0FDcEMsNERBQTREO2dDQUM1RCxRQUFRO2dDQUNSLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO29DQUNyQixJQUFJLHVCQUFBLElBQUksd0RBQWEsTUFBakIsSUFBSSxFQUFjLElBQUksRUFBRSx1QkFBQSxJQUFJLDJCQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7d0NBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQ2hCO2lDQUNGOzZCQUNGO2lDQUFNO2dDQUNMLGdFQUFnRTtnQ0FDaEUsOERBQThEO2dDQUM5RCw4REFBOEQ7Z0NBQzlELCtEQUErRDtnQ0FDL0QsOERBQThEO2dDQUM5RCxtQkFBbUI7Z0NBQ25CLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDRCQUFTLENBQUMsRUFBRTtvQ0FDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQ25CLHVCQUFBLElBQUksMkJBQVEsQ0FBQyxNQUFNLENBQUMsdUJBQUEsSUFBSSwyQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3Q0FDbkQsT0FBTyx1QkFBQSxJQUFJLDRCQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQzVCO2lDQUNGOzZCQUNGO3dCQUNILENBQUM7cUJBQ0Y7b0JBQ0QsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTs0QkFDaEMsT0FBTzt5QkFDUjt3QkFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLElBQUEsNkJBQWlCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFOzRCQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNoQjtvQkFDSCxDQUFDO29CQUNELFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTt3QkFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxJQUFBLDZCQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDaEI7b0JBQ0gsQ0FBQztpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF6R0Qsa0NBeUdDO3FOQTlEYyxPQUFlLEVBQUUsTUFBZ0I7O0lBQzVDLElBQUksTUFBTSxHQUFHLE1BQUEsdUJBQUEsSUFBSSw0QkFBUyxDQUFDLE9BQU8sQ0FBQyxtQ0FBSSxPQUFPLENBQUM7SUFDL0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIFRoaXMgY2xhc3MgZXhpc3RzIGJlY2F1c2U6XG4gICAtIGJlZm9yZSB0ZW1wbGF0ZSBjb21waWxhdGlvbiBzdGFydHMsIHdlIG5lZWQgdG8gcGFzcyBhIGBsb2NhbHNgIGFycmF5IHRvXG4gICAgIGVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyXG4gICAtIHRoZSBKU1V0aWxzIEFQSSBjYW4gbXV0YXRlIHRoZSBzY29wZSBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbiAgIC0gdGhvc2Ugc2NvcGUgbXV0YXRpb25zIG5lZWQgdG8gdXBkYXRlIGJvdGggdGhlIG9yaWdpbmFsIGBsb2NhbHNgIGFycmF5IGFuZFxuICAgICBvdXIgb3duIG5hbWUgbWFwcGluZywga2VlcGluZyB0aGVtIGluIHN5bmMuXG4qL1xuXG5pbXBvcnQgdHlwZSB7IE5vZGVQYXRoIH0gZnJvbSAnQGJhYmVsL3RyYXZlcnNlJztcbmltcG9ydCB7IEFTVFBsdWdpbkVudmlyb25tZW50LCBOb2RlVmlzaXRvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBhc3ROb2RlSGFzQmluZGluZyB9IGZyb20gJy4vaGJzLXV0aWxzJztcbmltcG9ydCB7IHJlYWRPbmx5QXJyYXkgfSBmcm9tICcuL3JlYWQtb25seS1hcnJheSc7XG5cbi8qXG4gICAgYG1vZGVgIHJlZmVycyB0byB0aGUgaW1wbGljaXQgYW5kIGV4cGxpY2l0IGZvcm1hdHMgZGVmaW5lZCBoZXJlOlxuXG4gICAgICBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9yZmNzL2Jsb2IvOWZkNmNlYWMyNTU5YmVlMWMzM2FjZjBkNzgzNGU2NzUxMjVhNGYxNi90ZXh0LzA5MzEtdGVtcGxhdGUtY29tcGlsZXItYXBpLm1kI2V4cGxpY2l0LWZvcm1cbiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlcmpzL3JmY3MvYmxvYi85ZmQ2Y2VhYzI1NTliZWUxYzMzYWNmMGQ3ODM0ZTY3NTEyNWE0ZjE2L3RleHQvMDkzMS10ZW1wbGF0ZS1jb21waWxlci1hcGkubWQjaW1wbGljaXQtZm9ybVxuXG4gICAgVGhpcyBjbGFzcyBuZWVkcyB0byBrbm93IHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gaW1wbGljaXQgZm9ybWF0LCB1cHZhcnNcbiAgICBpbiBoYnMgYXJlIGF1dG9tYWdpY2FsbHkgY29ubmVjdGVkIHdpdGggb3V0ZXIgSmF2YXNjcmlwdCBiaW5kaW5ncywgYW5kIGluXG4gICAgZXhwbGljaXQgZm9ybSB0aGV5IGFyZSBub3QuXG4qL1xudHlwZSBQYXJhbXMgPVxuICB8IHtcbiAgICAgIG1vZGU6ICdleHBsaWNpdCc7XG4gICAgfVxuICB8IHtcbiAgICAgIG1vZGU6ICdpbXBsaWNpdCc7XG4gICAgICBqc1BhdGg6IE5vZGVQYXRoO1xuICAgIH07XG5cbmV4cG9ydCBjbGFzcyBTY29wZUxvY2FscyB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtczogUGFyYW1zKSB7XG4gICAgdGhpcy4jcGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgI21hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgI2xvY2Fsczogc3RyaW5nW10gPSBbXTtcbiAgI3BhcmFtczogUGFyYW1zO1xuXG4gIGdldCBsb2NhbHMoKSB7XG4gICAgcmV0dXJuIHJlYWRPbmx5QXJyYXkoXG4gICAgICB0aGlzLiNsb2NhbHMsXG4gICAgICAnVGhlIG9ubHkgc3VwcG9ydGVkIHdheSB0byBtYW5pcHVsYXRlIGxvY2FscyBpcyB2aWEgdGhlIGpzdXRpbHMgQVBJXFxuaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvYmFiZWwtcGx1Z2luLWVtYmVyLXRlbXBsYXRlLWNvbXBpbGF0aW9uI2pzdXRpbHMtbWFuaXB1bGF0aW5nLWphdmFzY3JpcHQtZnJvbS13aXRoaW4tYXN0LXRyYW5zZm9ybXMnXG4gICAgKTtcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBrZXkgaW4gdGhpcy4jbWFwcGluZztcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI21hcHBpbmdba2V5XTtcbiAgfVxuXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2xvY2Fscy5sZW5ndGggPT09IDA7XG4gIH1cblxuICBuZWVkc1JlbWFwcGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy4jbWFwcGluZykuc29tZSgoW2ssIHZdKSA9PiBrICE9PSB2KTtcbiAgfVxuXG4gIGVudHJpZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuI21hcHBpbmcpO1xuICB9XG5cbiAgYWRkKGhic05hbWU6IHN0cmluZywganNOYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy4jbWFwcGluZ1toYnNOYW1lXSA9IGpzTmFtZSA/PyBoYnNOYW1lO1xuICAgIGlmICghdGhpcy4jbG9jYWxzLmluY2x1ZGVzKGhic05hbWUpKSB7XG4gICAgICB0aGlzLiNsb2NhbHMucHVzaChoYnNOYW1lKTtcbiAgICB9XG4gIH1cblxuICAjaXNJbkpzU2NvcGUoaGJzTmFtZTogc3RyaW5nLCBqc1BhdGg6IE5vZGVQYXRoKSB7XG4gICAgbGV0IGpzTmFtZSA9IHRoaXMuI21hcHBpbmdbaGJzTmFtZV0gPz8gaGJzTmFtZTtcbiAgICByZXR1cm4gWyd0aGlzJywgJ2dsb2JhbFRoaXMnXS5pbmNsdWRlcyhqc05hbWUpIHx8IGpzUGF0aC5zY29wZS5nZXRCaW5kaW5nKGpzTmFtZSk7XG4gIH1cblxuICAvLyB0aGlzIEFTVCB0cmFuc2Zvcm0gZGlzY292ZXJzIGFsbCBwb3NzaWJsZSB1cHZhcnMgaW4gSEJTIHRoYXQgcmVmZXIgdG8gdmFsaWRcbiAgLy8gYmluZGluZ3MgaW4gSlMsIGFuZCB0aGVuIGRlcGVuZGluZyBvbiB0aGUgbW9kZSBhZGp1c3RzIG91ciBhY3R1YWwgc2NvcGUgYmFnXG4gIC8vIGNvbnRlbnRzLlxuICBjcmF3bCgpIHtcbiAgICByZXR1cm4gKF9lbnY6IEFTVFBsdWdpbkVudmlyb25tZW50KTogeyBuYW1lOiBzdHJpbmc7IHZpc2l0b3I6IE5vZGVWaXNpdG9yIH0gPT4ge1xuICAgICAgbGV0IHNlZW46IFNldDxzdHJpbmc+O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ3Njb3BlLWxvY2Fscy1jcmF3bCcsXG4gICAgICAgIHZpc2l0b3I6IHtcbiAgICAgICAgICBUZW1wbGF0ZToge1xuICAgICAgICAgICAgZW50ZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGl0OiAoX25vZGUsIF9wYXRoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLiNwYXJhbXMubW9kZSA9PT0gJ2ltcGxpY2l0Jykge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBoYnMgdXB2YXJzIHRoYXQgaGF2ZSBtYXRjaGluZyBKUyBiaW5kaW5ncyBnbyBpbnRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNjb3BlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBzZWVuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaXNJbkpzU2NvcGUobmFtZSwgdGhpcy4jcGFyYW1zLmpzUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQobmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGluIGV4cGxpY2l0IGZvcm0sIHdlIG1pZ2h0IHBydW5lIGJhY2sgdGhlIHByZWV4aXNpbmcgc2NvcGUgaW5cbiAgICAgICAgICAgICAgICAvLyB0aGUgY2FzZSB3aGVyZSBhbm90aGVyIEFTVCB0cmFuc2Zvcm0gaGFzIGVsaW1pbmF0ZWQgdGhlIHVzZVxuICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBvcmlnaW5hbCBiaW5kaW5nLiBCdXQgd2UgZG9uJ3QgYWRkIGFueXRoaW5nIG5ldy4gVGhlXG4gICAgICAgICAgICAgICAgLy8gb25seSB3YXkgZm9yIG5ldyBiaW5kaW5ncyB0byBiZSBpbnRyb2R1Y2VkIGludG8gc2NvcGUgaXMgZm9yXG4gICAgICAgICAgICAgICAgLy8gYW5vdGhlciBBU1QgdHJhbnNmb3JtIHRvIGV4cGxpY2l0bHkgY2FsbCB0aGUganN1dGlscywgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBjYWxscyBvdXIgYGFkZGAuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLiNtYXBwaW5nKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFzZWVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2NhbHMuc3BsaWNlKHRoaXMuI2xvY2Fscy5pbmRleE9mKG5hbWUpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuI21hcHBpbmdbbmFtZV07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUGF0aEV4cHJlc3Npb246IChub2RlLCBwYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5oZWFkLnR5cGUgIT09ICdWYXJIZWFkJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5oZWFkLm5hbWU7XG4gICAgICAgICAgICBpZiAoIWFzdE5vZGVIYXNCaW5kaW5nKHBhdGgsIG5hbWUpKSB7XG4gICAgICAgICAgICAgIHNlZW4uYWRkKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgRWxlbWVudE5vZGU6IChub2RlLCBwYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS50YWcuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIGlmICghYXN0Tm9kZUhhc0JpbmRpbmcocGF0aCwgbmFtZSkpIHtcbiAgICAgICAgICAgICAgc2Vlbi5hZGQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuIl19

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc