parse-server 5.3.0-alpha.9 → 5.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/lib/Adapters/Cache/LRUCache.js +2 -2
- package/lib/Auth.js +11 -1
- package/lib/Controllers/LiveQueryController.js +9 -1
- package/lib/Controllers/SchemaController.js +13 -6
- package/lib/GraphQL/ParseGraphQLSchema.js +30 -42
- package/lib/GraphQL/ParseGraphQLServer.js +37 -26
- package/lib/GraphQL/helpers/objectsQueries.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +12 -9
- package/lib/GraphQL/loaders/defaultRelaySchema.js +2 -2
- package/lib/GraphQL/loaders/filesMutations.js +9 -22
- package/lib/GraphQL/loaders/schemaDirectives.js +51 -42
- package/lib/GraphQL/loaders/schemaTypes.js +14 -14
- package/lib/GraphQL/parseGraphQLUtils.js +5 -3
- package/lib/LiveQuery/ParseCloudCodePublisher.js +7 -1
- package/lib/LiveQuery/ParseLiveQueryServer.js +38 -3
- package/lib/LiveQuery/ParseWebSocketServer.js +8 -2
- package/lib/LiveQuery/SessionTokenCache.js +2 -2
- package/lib/Options/Definitions.js +9 -2
- package/lib/Options/docs.js +7 -2
- package/lib/Options/index.js +1 -1
- package/lib/RestWrite.js +33 -3
- package/lib/Routers/FilesRouter.js +5 -5
- package/lib/cloud-code/Parse.Cloud.js +36 -16
- package/lib/triggers.js +7 -18
- package/package.json +19 -20
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
[![License][license-svg]][license-link]
|
|
21
21
|
[](https://community.parseplatform.org/c/parse-server)
|
|
22
22
|
[](https://twitter.com/intent/follow?screen_name=ParsePlatform)
|
|
23
|
+
[](https://chat.parseplatform.org)
|
|
23
24
|
|
|
24
25
|
---
|
|
25
26
|
|
|
@@ -110,6 +111,7 @@ Before you start make sure you have installed:
|
|
|
110
111
|
### Compatibility
|
|
111
112
|
|
|
112
113
|
#### Node.js
|
|
114
|
+
|
|
113
115
|
Parse Server is continuously tested with the most recent releases of Node.js to ensure compatibility. We follow the [Node.js Long Term Support plan](https://github.com/nodejs/Release) and only test against versions that are officially supported and have not reached their end-of-life date.
|
|
114
116
|
|
|
115
117
|
| Version | Latest Version | End-of-Life | Compatible |
|
|
@@ -121,6 +123,7 @@ Parse Server is continuously tested with the most recent releases of Node.js to
|
|
|
121
123
|
| Node.js 18 | 18.1.0 | April 2025 | ✅ Yes |
|
|
122
124
|
|
|
123
125
|
#### MongoDB
|
|
126
|
+
|
|
124
127
|
Parse Server is continuously tested with the most recent releases of MongoDB to ensure compatibility. We follow the [MongoDB support schedule](https://www.mongodb.com/support-policy) and only test against versions that are officially supported and have not reached their end-of-life date.
|
|
125
128
|
|
|
126
129
|
| Version | Latest Version | End-of-Life | Compatible |
|
|
@@ -133,6 +136,7 @@ Parse Server is continuously tested with the most recent releases of MongoDB to
|
|
|
133
136
|
| MongoDB 5.2 | 5.2.1 | TBD | ✅ Yes |
|
|
134
137
|
|
|
135
138
|
#### PostgreSQL
|
|
139
|
+
|
|
136
140
|
Parse Server is continuously tested with the most recent releases of PostgreSQL and PostGIS to ensure compatibility, using [PostGIS docker images](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&ordering=last_updated). We follow the [PostgreSQL support schedule](https://www.postgresql.org/support/versioning) and [PostGIS support schedule](https://www.postgis.net/eol_policy/) and only test against versions that are officially supported and have not reached their end-of-life date. Due to the extensive PostgreSQL support duration of 5 years, Parse Server drops support if a version is older than 3.5 years and a newer version has been available for at least 2.5 years.
|
|
137
141
|
|
|
138
142
|
| Version | PostGIS Version | End-of-Life | Parse Server Support End | Compatible |
|
|
@@ -143,6 +147,7 @@ Parse Server is continuously tested with the most recent releases of PostgreSQL
|
|
|
143
147
|
| Postgres 14 | 3.2 | November 2026 | April 2025 | ✅ Yes |
|
|
144
148
|
|
|
145
149
|
### Locally
|
|
150
|
+
|
|
146
151
|
```bash
|
|
147
152
|
$ npm install -g parse-server mongodb-runner
|
|
148
153
|
$ mongodb-runner start
|
|
@@ -235,7 +240,6 @@ $ curl -X GET \
|
|
|
235
240
|
}
|
|
236
241
|
]
|
|
237
242
|
}
|
|
238
|
-
|
|
239
243
|
```
|
|
240
244
|
|
|
241
245
|
To learn more about using saving and querying objects on Parse Server, check out the [Parse documentation](http://docs.parseplatform.org).
|
|
@@ -385,6 +389,7 @@ const server = ParseServer({
|
|
|
385
389
|
```
|
|
386
390
|
|
|
387
391
|
## Custom Routes
|
|
392
|
+
|
|
388
393
|
**Caution, this is an experimental feature that may not be appropriate for production.**
|
|
389
394
|
|
|
390
395
|
Custom routes allow to build user flows with webpages, similar to the existing password reset and email verification features. Custom routes are defined with the `pages` option in the Parse Server configuration:
|
|
@@ -417,6 +422,7 @@ The above route can be invoked by sending a `GET` request to:
|
|
|
417
422
|
The `handler` receives the `request` and returns a `custom_page.html` webpage from the `pages.pagesPath` directory as response. The advantage of building a custom route this way is that it automatically makes use of Parse Server's built-in capabilities, such as [page localization](#pages) and [dynamic placeholders](#dynamic-placeholders).
|
|
418
423
|
|
|
419
424
|
### Reserved Paths
|
|
425
|
+
|
|
420
426
|
The following paths are already used by Parse Server's built-in features and are therefore not available for custom routes. Custom routes with an identical combination of `path` and `method` are ignored.
|
|
421
427
|
|
|
422
428
|
| Path | HTTP Method | Feature |
|
|
@@ -512,6 +518,7 @@ Identical requests are identified by their request header `X-Parse-Request-Id`.
|
|
|
512
518
|
Deduplication is only done for object creation and update (`POST` and `PUT` requests). Deduplication is not done for object finding and deletion (`GET` and `DELETE` requests), as these operations are already idempotent by definition.
|
|
513
519
|
|
|
514
520
|
### Configuration example <!-- omit in toc -->
|
|
521
|
+
|
|
515
522
|
```
|
|
516
523
|
let api = new ParseServer({
|
|
517
524
|
idempotencyOptions: {
|
|
@@ -520,6 +527,7 @@ let api = new ParseServer({
|
|
|
520
527
|
}
|
|
521
528
|
}
|
|
522
529
|
```
|
|
530
|
+
|
|
523
531
|
### Parameters <!-- omit in toc -->
|
|
524
532
|
|
|
525
533
|
| Parameter | Optional | Type | Default value | Example values | Environment variable | Description |
|
|
@@ -552,6 +560,7 @@ Assuming the script above is named, `parse_idempotency_delete_expired_records.sh
|
|
|
552
560
|
## Localization
|
|
553
561
|
|
|
554
562
|
### Pages
|
|
563
|
+
|
|
555
564
|
**Caution, this is an experimental feature that may not be appropriate for production.**
|
|
556
565
|
|
|
557
566
|
Custom pages as well as feature pages (e.g. password reset, email verification) can be localized with the `pages` option in the Parse Server configuration:
|
|
@@ -18,7 +18,7 @@ class LRUCache {
|
|
|
18
18
|
}) {
|
|
19
19
|
this.cache = new _lruCache.default({
|
|
20
20
|
max: maxSize,
|
|
21
|
-
|
|
21
|
+
ttl
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -43,4 +43,4 @@ class LRUCache {
|
|
|
43
43
|
exports.LRUCache = LRUCache;
|
|
44
44
|
var _default = LRUCache;
|
|
45
45
|
exports.default = _default;
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9MUlVDYWNoZS5qcyJdLCJuYW1lcyI6WyJMUlVDYWNoZSIsImNvbnN0cnVjdG9yIiwidHRsIiwiZGVmYXVsdHMiLCJjYWNoZVRUTCIsIm1heFNpemUiLCJjYWNoZU1heFNpemUiLCJjYWNoZSIsIkxSVSIsIm1heCIsImdldCIsImtleSIsInB1dCIsInZhbHVlIiwic2V0IiwiZGVsIiwiY2xlYXIiLCJyZXNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7O0FBRU8sTUFBTUEsUUFBTixDQUFlO0FBQ3BCQyxFQUFBQSxXQUFXLENBQUM7QUFBRUMsSUFBQUEsR0FBRyxHQUFHQyxrQkFBU0MsUUFBakI7QUFBMkJDLElBQUFBLE9BQU8sR0FBR0Ysa0JBQVNHO0FBQTlDLEdBQUQsRUFBK0Q7QUFDeEUsU0FBS0MsS0FBTCxHQUFhLElBQUlDLGlCQUFKLENBQVE7QUFDbkJDLE1BQUFBLEdBQUcsRUFBRUosT0FEYztBQUVuQkgsTUFBQUE7QUFGbUIsS0FBUixDQUFiO0FBSUQ7O0FBRURRLEVBQUFBLEdBQUcsQ0FBQ0MsR0FBRCxFQUFNO0FBQ1AsV0FBTyxLQUFLSixLQUFMLENBQVdHLEdBQVgsQ0FBZUMsR0FBZixLQUF1QixJQUE5QjtBQUNEOztBQUVEQyxFQUFBQSxHQUFHLENBQUNELEdBQUQsRUFBTUUsS0FBTixFQUFhWCxHQUFHLEdBQUcsS0FBS0EsR0FBeEIsRUFBNkI7QUFDOUIsU0FBS0ssS0FBTCxDQUFXTyxHQUFYLENBQWVILEdBQWYsRUFBb0JFLEtBQXBCLEVBQTJCWCxHQUEzQjtBQUNEOztBQUVEYSxFQUFBQSxHQUFHLENBQUNKLEdBQUQsRUFBTTtBQUNQLFNBQUtKLEtBQUwsQ0FBV1EsR0FBWCxDQUFlSixHQUFmO0FBQ0Q7O0FBRURLLEVBQUFBLEtBQUssR0FBRztBQUNOLFNBQUtULEtBQUwsQ0FBV1UsS0FBWDtBQUNEOztBQXRCbUI7OztlQXlCUGpCLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuXG5leHBvcnQgY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3Rvcih7IHR0bCA9IGRlZmF1bHRzLmNhY2hlVFRMLCBtYXhTaXplID0gZGVmYXVsdHMuY2FjaGVNYXhTaXplIH0pIHtcbiAgICB0aGlzLmNhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IG1heFNpemUsXG4gICAgICB0dGwsXG4gICAgfSk7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSkgfHwgbnVsbDtcbiAgfVxuXG4gIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUsIHR0bCk7XG4gIH1cblxuICBkZWwoa2V5KSB7XG4gICAgdGhpcy5jYWNoZS5kZWwoa2V5KTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY2FjaGUucmVzZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMUlVDYWNoZTtcbiJdfQ==
|
package/lib/Auth.js
CHANGED
|
@@ -259,6 +259,16 @@ Auth.prototype.cacheRoles = function () {
|
|
|
259
259
|
return true;
|
|
260
260
|
};
|
|
261
261
|
|
|
262
|
+
Auth.prototype.clearRoleCache = function (sessionToken) {
|
|
263
|
+
if (!this.cacheController) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
this.cacheController.role.del(this.user.id);
|
|
268
|
+
this.cacheController.user.del(sessionToken);
|
|
269
|
+
return true;
|
|
270
|
+
};
|
|
271
|
+
|
|
262
272
|
Auth.prototype.getRolesByIds = async function (ins) {
|
|
263
273
|
const results = []; // Build an OR query across all parentRoles
|
|
264
274
|
|
|
@@ -333,4 +343,4 @@ module.exports = {
|
|
|
333
343
|
getAuthForSessionToken,
|
|
334
344
|
getAuthForLegacySessionToken
|
|
335
345
|
};
|
|
336
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BdXRoLmpzIl0sIm5hbWVzIjpbIlJlc3RRdWVyeSIsInJlcXVpcmUiLCJQYXJzZSIsIkF1dGgiLCJjb25maWciLCJjYWNoZUNvbnRyb2xsZXIiLCJ1bmRlZmluZWQiLCJpc01hc3RlciIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VyUm9sZXMiLCJmZXRjaGVkUm9sZXMiLCJyb2xlUHJvbWlzZSIsInByb3RvdHlwZSIsImlzVW5hdXRoZW50aWNhdGVkIiwibWFzdGVyIiwicmVhZE9ubHkiLCJub2JvZHkiLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwic2Vzc2lvblRva2VuIiwidXNlckpTT04iLCJnZXQiLCJjYWNoZWRVc2VyIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJyZXN0T3B0aW9ucyIsImxpbWl0IiwiaW5jbHVkZSIsInF1ZXJ5IiwiZXhlY3V0ZSIsIlF1ZXJ5IiwiU2Vzc2lvbiIsImVxdWFsVG8iLCJmaW5kIiwidXNlTWFzdGVyS2V5IiwibWFwIiwib2JqIiwidG9KU09OIiwibGVuZ3RoIiwiRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJub3ciLCJEYXRlIiwiZXhwaXJlc0F0IiwiaXNvIiwicGFzc3dvcmQiLCJwdXQiLCJ1c2VyT2JqZWN0IiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsInRoZW4iLCJyZXNwb25zZSIsImNsYXNzTmFtZSIsImdldFVzZXJSb2xlcyIsIl9sb2FkUm9sZXMiLCJnZXRSb2xlc0ZvclVzZXIiLCJyZXN0V2hlcmUiLCJ1c2VycyIsIl9fdHlwZSIsIm9iamVjdElkIiwiaWQiLCJlYWNoIiwicmVzdWx0IiwicHVzaCIsIlJvbGUiLCJjYWNoZWRSb2xlcyIsInJvbGUiLCJjYWNoZVJvbGVzIiwicm9sZXNNYXAiLCJyZWR1Y2UiLCJtIiwiciIsIm5hbWVzIiwibmFtZSIsImlkcyIsInJvbGVOYW1lcyIsIl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyIsIkFycmF5IiwiZ2V0Um9sZXNCeUlkcyIsImlucyIsImNvbnRhaW5lZEluIiwicm9sZXMiLCIkaW4iLCJyb2xlSURzIiwicXVlcmllZFJvbGVzIiwiZmlsdGVyIiwicm9sZUlEIiwid2FzUXVlcmllZCIsIlNldCIsInJlc3VsdE1hcCIsIm1lbW8iLCJjb25jYXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUFyQixDLENBRUE7QUFDQTtBQUNBOzs7QUFDQSxTQUFTRSxJQUFULENBQWM7QUFDWkMsRUFBQUEsTUFEWTtBQUVaQyxFQUFBQSxlQUFlLEdBQUdDLFNBRk47QUFHWkMsRUFBQUEsUUFBUSxHQUFHLEtBSEM7QUFJWkMsRUFBQUEsVUFBVSxHQUFHLEtBSkQ7QUFLWkMsRUFBQUEsSUFMWTtBQU1aQyxFQUFBQTtBQU5ZLENBQWQsRUFPRztBQUNELE9BQUtOLE1BQUwsR0FBY0EsTUFBZDtBQUNBLE9BQUtDLGVBQUwsR0FBdUJBLGVBQWUsSUFBS0QsTUFBTSxJQUFJQSxNQUFNLENBQUNDLGVBQTVEO0FBQ0EsT0FBS0ssY0FBTCxHQUFzQkEsY0FBdEI7QUFDQSxPQUFLSCxRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLE9BQUtFLElBQUwsR0FBWUEsSUFBWjtBQUNBLE9BQUtELFVBQUwsR0FBa0JBLFVBQWxCLENBTkMsQ0FRRDtBQUNBOztBQUNBLE9BQUtHLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxPQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsT0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUNELEMsQ0FFRDtBQUNBOzs7QUFDQVYsSUFBSSxDQUFDVyxTQUFMLENBQWVDLGlCQUFmLEdBQW1DLFlBQVk7QUFDN0MsTUFBSSxLQUFLUixRQUFULEVBQW1CO0FBQ2pCLFdBQU8sS0FBUDtBQUNEOztBQUNE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QUFDRCxHQW5CSSxFQW9CSmxDLElBcEJJLENBb0JDc0IsS0FBSyxJQUFJO0FBQ2IsV0FBT2pELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFDLEdBQUcsSUFBSWdFLEdBQUosQ0FBUWhCLEtBQVIsQ0FBSixDQUFoQixDQUFQO0FBQ0QsR0F0QkksQ0FBUDtBQXVCRCxDQW5DRDs7QUFxQ0FvQixNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZjdGLEVBQUFBLElBRGU7QUFFZmEsRUFBQUEsTUFGZTtBQUdmRSxFQUFBQSxNQUhlO0FBSWZELEVBQUFBLFFBSmU7QUFLZkUsRUFBQUEsc0JBTGU7QUFNZmlDLEVBQUFBO0FBTmUsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5cbi8vIEFuIEF1dGggb2JqZWN0IHRlbGxzIHlvdSB3aG8gaXMgcmVxdWVzdGluZyBzb21ldGhpbmcgYW5kIHdoZXRoZXJcbi8vIHRoZSBtYXN0ZXIga2V5IHdhcyB1c2VkLlxuLy8gdXNlck9iamVjdCBpcyBhIFBhcnNlLlVzZXIgYW5kIGNhbiBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gdXNlci5cbmZ1bmN0aW9uIEF1dGgoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlciA9IHVuZGVmaW5lZCxcbiAgaXNNYXN0ZXIgPSBmYWxzZSxcbiAgaXNSZWFkT25seSA9IGZhbHNlLFxuICB1c2VyLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIHRoaXMuaW5zdGFsbGF0aW9uSWQgPSBpbnN0YWxsYXRpb25JZDtcbiAgdGhpcy5pc01hc3RlciA9IGlzTWFzdGVyO1xuICB0aGlzLnVzZXIgPSB1c2VyO1xuICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXG4gIC8vIEFzc3VtaW5nIGEgdXNlcnMgcm9sZXMgd29uJ3QgY2hhbmdlIGR1cmluZyBhIHNpbmdsZSByZXF1ZXN0LCB3ZSdsbFxuICAvLyBvbmx5IGxvYWQgdGhlbSBvbmNlLlxuICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IGZhbHNlO1xuICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGlzIGF1dGggY291bGQgcG9zc2libHkgbW9kaWZ5IHRoZSBnaXZlbiB1c2VyIGlkLlxuLy8gSXQgc3RpbGwgY291bGQgYmUgZm9yYmlkZGVuIHZpYSBBQ0xzIGV2ZW4gaWYgdGhpcyByZXR1cm5zIHRydWUuXG5BdXRoLnByb3RvdHlwZS5pc1VuYXV0aGVudGljYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMudXNlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1hc3Rlci1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gbWFzdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBtYXN0ZXItbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIHJlYWRPbmx5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpc1JlYWRPbmx5OiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBub2JvZHktbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIG5vYm9keShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01hc3RlcjogZmFsc2UgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gQXV0aCBvYmplY3RcbmNvbnN0IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4gPSBhc3luYyBmdW5jdGlvbiAoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlcixcbiAgc2Vzc2lvblRva2VuLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCB1c2VySlNPTiA9IGF3YWl0IGNhY2hlQ29udHJvbGxlci51c2VyLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmICh1c2VySlNPTikge1xuICAgICAgY29uc3QgY2FjaGVkVXNlciA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTih1c2VySlNPTik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBuZXcgQXV0aCh7XG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICAgICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgdXNlcjogY2FjaGVkVXNlcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdHM7XG4gIGlmIChjb25maWcpIHtcbiAgICBjb25zdCByZXN0T3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAxLFxuICAgICAgaW5jbHVkZTogJ3VzZXInLFxuICAgIH07XG5cbiAgICBjb25zdCBxdWVyeSA9IG5ldyBSZXN0UXVlcnkoY29uZmlnLCBtYXN0ZXIoY29uZmlnKSwgJ19TZXNzaW9uJywgeyBzZXNzaW9uVG9rZW4gfSwgcmVzdE9wdGlvbnMpO1xuICAgIHJlc3VsdHMgPSAoYXdhaXQgcXVlcnkuZXhlY3V0ZSgpKS5yZXN1bHRzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSAoXG4gICAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuU2Vzc2lvbilcbiAgICAgICAgLmxpbWl0KDEpXG4gICAgICAgIC5pbmNsdWRlKCd1c2VyJylcbiAgICAgICAgLmVxdWFsVG8oJ3Nlc3Npb25Ub2tlbicsIHNlc3Npb25Ub2tlbilcbiAgICAgICAgLmZpbmQoeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSlcbiAgICApLm1hcChvYmogPT4gb2JqLnRvSlNPTigpKTtcbiAgfVxuXG4gIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMSB8fCAhcmVzdWx0c1swXVsndXNlciddKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCksXG4gICAgZXhwaXJlc0F0ID0gcmVzdWx0c1swXS5leHBpcmVzQXQgPyBuZXcgRGF0ZShyZXN1bHRzWzBdLmV4cGlyZXNBdC5pc28pIDogdW5kZWZpbmVkO1xuICBpZiAoZXhwaXJlc0F0IDwgbm93KSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ1Nlc3Npb24gdG9rZW4gaXMgZXhwaXJlZC4nKTtcbiAgfVxuICBjb25zdCBvYmogPSByZXN1bHRzWzBdWyd1c2VyJ107XG4gIGRlbGV0ZSBvYmoucGFzc3dvcmQ7XG4gIG9ialsnY2xhc3NOYW1lJ10gPSAnX1VzZXInO1xuICBvYmpbJ3Nlc3Npb25Ub2tlbiddID0gc2Vzc2lvblRva2VuO1xuICBpZiAoY2FjaGVDb250cm9sbGVyKSB7XG4gICAgY2FjaGVDb250cm9sbGVyLnVzZXIucHV0KHNlc3Npb25Ub2tlbiwgb2JqKTtcbiAgfVxuICBjb25zdCB1c2VyT2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKG9iaik7XG4gIHJldHVybiBuZXcgQXV0aCh7XG4gICAgY29uZmlnLFxuICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgdXNlcjogdXNlck9iamVjdCxcbiAgfSk7XG59O1xuXG52YXIgZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiA9IGZ1bmN0aW9uICh7IGNvbmZpZywgc2Vzc2lvblRva2VuLCBpbnN0YWxsYXRpb25JZCB9KSB7XG4gIHZhciByZXN0T3B0aW9ucyA9IHtcbiAgICBsaW1pdDogMSxcbiAgfTtcbiAgdmFyIHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShjb25maWcsIG1hc3Rlcihjb25maWcpLCAnX1VzZXInLCB7IHNlc3Npb25Ub2tlbiB9LCByZXN0T3B0aW9ucyk7XG4gIHJldHVybiBxdWVyeS5leGVjdXRlKCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgdmFyIHJlc3VsdHMgPSByZXNwb25zZS5yZXN1bHRzO1xuICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ2ludmFsaWQgbGVnYWN5IHNlc3Npb24gdG9rZW4nKTtcbiAgICB9XG4gICAgY29uc3Qgb2JqID0gcmVzdWx0c1swXTtcbiAgICBvYmouY2xhc3NOYW1lID0gJ19Vc2VyJztcbiAgICBjb25zdCB1c2VyT2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKG9iaik7XG4gICAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgdXNlcjogdXNlck9iamVjdCxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHJvbGUgbmFtZXNcbkF1dGgucHJvdG90eXBlLmdldFVzZXJSb2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIgfHwgIXRoaXMudXNlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGlmICh0aGlzLmZldGNoZWRSb2xlcykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy51c2VyUm9sZXMpO1xuICB9XG4gIGlmICh0aGlzLnJvbGVQcm9taXNlKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sZVByb21pc2U7XG4gIH1cbiAgdGhpcy5yb2xlUHJvbWlzZSA9IHRoaXMuX2xvYWRSb2xlcygpO1xuICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzRm9yVXNlciA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy9TdGFjayBhbGwgUGFyc2UuUm9sZVxuICBjb25zdCByZXN1bHRzID0gW107XG4gIGlmICh0aGlzLmNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RXaGVyZSA9IHtcbiAgICAgIHVzZXJzOiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICAgIG9iamVjdElkOiB0aGlzLnVzZXIuaWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgYXdhaXQgbmV3IFJlc3RRdWVyeSh0aGlzLmNvbmZpZywgbWFzdGVyKHRoaXMuY29uZmlnKSwgJ19Sb2xlJywgcmVzdFdoZXJlLCB7fSkuZWFjaChyZXN1bHQgPT5cbiAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuUm9sZSlcbiAgICAgIC5lcXVhbFRvKCd1c2VycycsIHRoaXMudXNlcilcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSByb2xlIHRyZWUgYW5kIGNvbXBpbGVzIGEgdXNlcidzIHJvbGVzXG5BdXRoLnByb3RvdHlwZS5fbG9hZFJvbGVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBjYWNoZWRSb2xlcyA9IGF3YWl0IHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUuZ2V0KHRoaXMudXNlci5pZCk7XG4gICAgaWYgKGNhY2hlZFJvbGVzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlclJvbGVzID0gY2FjaGVkUm9sZXM7XG4gICAgICByZXR1cm4gY2FjaGVkUm9sZXM7XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QgZ2V0IHRoZSByb2xlIGlkcyB0aGlzIHVzZXIgaXMgZGlyZWN0bHkgYSBtZW1iZXIgb2ZcbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0Um9sZXNGb3JVc2VyKCk7XG4gIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICAgIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcblxuICAgIHRoaXMuY2FjaGVSb2xlcygpO1xuICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcztcbiAgfVxuXG4gIGNvbnN0IHJvbGVzTWFwID0gcmVzdWx0cy5yZWR1Y2UoXG4gICAgKG0sIHIpID0+IHtcbiAgICAgIG0ubmFtZXMucHVzaChyLm5hbWUpO1xuICAgICAgbS5pZHMucHVzaChyLm9iamVjdElkKTtcbiAgICAgIHJldHVybiBtO1xuICAgIH0sXG4gICAgeyBpZHM6IFtdLCBuYW1lczogW10gfVxuICApO1xuXG4gIC8vIHJ1biB0aGUgcmVjdXJzaXZlIGZpbmRpbmdcbiAgY29uc3Qgcm9sZU5hbWVzID0gYXdhaXQgdGhpcy5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMocm9sZXNNYXAuaWRzLCByb2xlc01hcC5uYW1lcyk7XG4gIHRoaXMudXNlclJvbGVzID0gcm9sZU5hbWVzLm1hcChyID0+IHtcbiAgICByZXR1cm4gJ3JvbGU6JyArIHI7XG4gIH0pO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IHRydWU7XG4gIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuICB0aGlzLmNhY2hlUm9sZXMoKTtcbiAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xufTtcblxuQXV0aC5wcm90b3R5cGUuY2FjaGVSb2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLnB1dCh0aGlzLnVzZXIuaWQsIEFycmF5KC4uLnRoaXMudXNlclJvbGVzKSk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuQXV0aC5wcm90b3R5cGUuZ2V0Um9sZXNCeUlkcyA9IGFzeW5jIGZ1bmN0aW9uIChpbnMpIHtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAvLyBCdWlsZCBhbiBPUiBxdWVyeSBhY3Jvc3MgYWxsIHBhcmVudFJvbGVzXG4gIGlmICghdGhpcy5jb25maWcpIHtcbiAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuUm9sZSlcbiAgICAgIC5jb250YWluZWRJbihcbiAgICAgICAgJ3JvbGVzJyxcbiAgICAgICAgaW5zLm1hcChpZCA9PiB7XG4gICAgICAgICAgY29uc3Qgcm9sZSA9IG5ldyBQYXJzZS5PYmplY3QoUGFyc2UuUm9sZSk7XG4gICAgICAgICAgcm9sZS5pZCA9IGlkO1xuICAgICAgICAgIHJldHVybiByb2xlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByb2xlcyA9IGlucy5tYXAoaWQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogJ19Sb2xlJyxcbiAgICAgICAgb2JqZWN0SWQ6IGlkLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZXN0V2hlcmUgPSB7IHJvbGVzOiB7ICRpbjogcm9sZXMgfSB9O1xuICAgIGF3YWl0IG5ldyBSZXN0UXVlcnkodGhpcy5jb25maWcsIG1hc3Rlcih0aGlzLmNvbmZpZyksICdfUm9sZScsIHJlc3RXaGVyZSwge30pLmVhY2gocmVzdWx0ID0+XG4gICAgICByZXN1bHRzLnB1c2gocmVzdWx0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBHaXZlbiBhIGxpc3Qgb2Ygcm9sZUlkcywgZmluZCBhbGwgdGhlIHBhcmVudCByb2xlcywgcmV0dXJucyBhIHByb21pc2Ugd2l0aCBhbGwgbmFtZXNcbkF1dGgucHJvdG90eXBlLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyA9IGZ1bmN0aW9uIChyb2xlSURzLCBuYW1lcyA9IFtdLCBxdWVyaWVkUm9sZXMgPSB7fSkge1xuICBjb25zdCBpbnMgPSByb2xlSURzLmZpbHRlcihyb2xlSUQgPT4ge1xuICAgIGNvbnN0IHdhc1F1ZXJpZWQgPSBxdWVyaWVkUm9sZXNbcm9sZUlEXSAhPT0gdHJ1ZTtcbiAgICBxdWVyaWVkUm9sZXNbcm9sZUlEXSA9IHRydWU7XG4gICAgcmV0dXJuIHdhc1F1ZXJpZWQ7XG4gIH0pO1xuXG4gIC8vIGFsbCByb2xlcyBhcmUgYWNjb3VudGVkIGZvciwgcmV0dXJuIHRoZSBuYW1lc1xuICBpZiAoaW5zLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbLi4ubmV3IFNldChuYW1lcyldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmdldFJvbGVzQnlJZHMoaW5zKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgLy8gTm90aGluZyBmb3VuZFxuICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5hbWVzKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyB3aXRoIGFsbCBJZHMgYW5kIG5hbWVzXG4gICAgICBjb25zdCByZXN1bHRNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAgICAgKG1lbW8sIHJvbGUpID0+IHtcbiAgICAgICAgICBtZW1vLm5hbWVzLnB1c2gocm9sZS5uYW1lKTtcbiAgICAgICAgICBtZW1vLmlkcy5wdXNoKHJvbGUub2JqZWN0SWQpO1xuICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9LFxuICAgICAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICAgICApO1xuICAgICAgLy8gc3RvcmUgdGhlIG5ldyBmb3VuZCBuYW1lc1xuICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQocmVzdWx0TWFwLm5hbWVzKTtcbiAgICAgIC8vIGZpbmQgdGhlIG5leHQgb25lcywgY2lyY3VsYXIgcm9sZXMgd2lsbCBiZSBjdXRcbiAgICAgIHJldHVybiB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyZXN1bHRNYXAuaWRzLCBuYW1lcywgcXVlcmllZFJvbGVzKTtcbiAgICB9KVxuICAgIC50aGVuKG5hbWVzID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gICAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXV0aCxcbiAgbWFzdGVyLFxuICBub2JvZHksXG4gIHJlYWRPbmx5LFxuICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuLFxuICBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuLFxufTtcbiJdfQ==
|
|
346
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BdXRoLmpzIl0sIm5hbWVzIjpbIlJlc3RRdWVyeSIsInJlcXVpcmUiLCJQYXJzZSIsIkF1dGgiLCJjb25maWciLCJjYWNoZUNvbnRyb2xsZXIiLCJ1bmRlZmluZWQiLCJpc01hc3RlciIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VyUm9sZXMiLCJmZXRjaGVkUm9sZXMiLCJyb2xlUHJvbWlzZSIsInByb3RvdHlwZSIsImlzVW5hdXRoZW50aWNhdGVkIiwibWFzdGVyIiwicmVhZE9ubHkiLCJub2JvZHkiLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwic2Vzc2lvblRva2VuIiwidXNlckpTT04iLCJnZXQiLCJjYWNoZWRVc2VyIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJyZXN0T3B0aW9ucyIsImxpbWl0IiwiaW5jbHVkZSIsInF1ZXJ5IiwiZXhlY3V0ZSIsIlF1ZXJ5IiwiU2Vzc2lvbiIsImVxdWFsVG8iLCJmaW5kIiwidXNlTWFzdGVyS2V5IiwibWFwIiwib2JqIiwidG9KU09OIiwibGVuZ3RoIiwiRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJub3ciLCJEYXRlIiwiZXhwaXJlc0F0IiwiaXNvIiwicGFzc3dvcmQiLCJwdXQiLCJ1c2VyT2JqZWN0IiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsInRoZW4iLCJyZXNwb25zZSIsImNsYXNzTmFtZSIsImdldFVzZXJSb2xlcyIsIl9sb2FkUm9sZXMiLCJnZXRSb2xlc0ZvclVzZXIiLCJyZXN0V2hlcmUiLCJ1c2VycyIsIl9fdHlwZSIsIm9iamVjdElkIiwiaWQiLCJlYWNoIiwicmVzdWx0IiwicHVzaCIsIlJvbGUiLCJjYWNoZWRSb2xlcyIsInJvbGUiLCJjYWNoZVJvbGVzIiwicm9sZXNNYXAiLCJyZWR1Y2UiLCJtIiwiciIsIm5hbWVzIiwibmFtZSIsImlkcyIsInJvbGVOYW1lcyIsIl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyIsIkFycmF5IiwiY2xlYXJSb2xlQ2FjaGUiLCJkZWwiLCJnZXRSb2xlc0J5SWRzIiwiaW5zIiwiY29udGFpbmVkSW4iLCJyb2xlcyIsIiRpbiIsInJvbGVJRHMiLCJxdWVyaWVkUm9sZXMiLCJmaWx0ZXIiLCJyb2xlSUQiLCJ3YXNRdWVyaWVkIiwiU2V0IiwicmVzdWx0TWFwIiwibWVtbyIsImNvbmNhdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsYUFBRCxDQUF6Qjs7QUFDQSxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFELENBQXJCLEMsQ0FFQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNFLElBQVQsQ0FBYztBQUNaQyxFQUFBQSxNQURZO0FBRVpDLEVBQUFBLGVBQWUsR0FBR0MsU0FGTjtBQUdaQyxFQUFBQSxRQUFRLEdBQUcsS0FIQztBQUlaQyxFQUFBQSxVQUFVLEdBQUcsS0FKRDtBQUtaQyxFQUFBQSxJQUxZO0FBTVpDLEVBQUFBO0FBTlksQ0FBZCxFQU9HO0FBQ0QsT0FBS04sTUFBTCxHQUFjQSxNQUFkO0FBQ0EsT0FBS0MsZUFBTCxHQUF1QkEsZUFBZSxJQUFLRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0MsZUFBNUQ7QUFDQSxPQUFLSyxjQUFMLEdBQXNCQSxjQUF0QjtBQUNBLE9BQUtILFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsT0FBS0UsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsT0FBS0QsVUFBTCxHQUFrQkEsVUFBbEIsQ0FOQyxDQVFEO0FBQ0E7O0FBQ0EsT0FBS0csU0FBTCxHQUFpQixFQUFqQjtBQUNBLE9BQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxPQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0QsQyxDQUVEO0FBQ0E7OztBQUNBVixJQUFJLENBQUNXLFNBQUwsQ0FBZUMsaUJBQWYsR0FBbUMsWUFBWTtBQUM3QyxNQUFJLEtBQUtSLFFBQVQsRUFBbUI7QUFDakIsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxLQUFLRSxJQUFULEVBQWU7QUFDYixXQUFPLEtBQVA7QUFDRDs7QUFDRCxTQUFPLElBQVA7QUFDRCxDQVJELEMsQ0FVQTs7O0FBQ0EsU0FBU08sTUFBVCxDQUFnQlosTUFBaEIsRUFBd0I7QUFDdEIsU0FBTyxJQUFJRCxJQUFKLENBQVM7QUFBRUMsSUFBQUEsTUFBRjtBQUFVRyxJQUFBQSxRQUFRLEVBQUU7QUFBcEIsR0FBVCxDQUFQO0FBQ0QsQyxDQUVEOzs7QUFDQSxTQUFTVSxRQUFULENBQWtCYixNQUFsQixFQUEwQjtBQUN4QixTQUFPLElBQUlELElBQUosQ0FBUztBQUFFQyxJQUFBQSxNQUFGO0FBQVVHLElBQUFBLFFBQVEsRUFBRSxJQUFwQjtBQUEwQkMsSUFBQUEsVUFBVSxFQUFFO0FBQXRDLEdBQVQsQ0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU1UsTUFBVCxDQUFnQmQsTUFBaEIsRUFBd0I7QUFDdEIsU0FBTyxJQUFJRCxJQUFKLENBQVM7QUFBRUMsSUFBQUEsTUFBRjtBQUFVRyxJQUFBQSxRQUFRLEVBQUU7QUFBcEIsR0FBVCxDQUFQO0FBQ0QsQyxDQUVEOzs7QUFDQSxNQUFNWSxzQkFBc0IsR0FBRyxnQkFBZ0I7QUFDN0NmLEVBQUFBLE1BRDZDO0FBRTdDQyxFQUFBQSxlQUY2QztBQUc3Q2UsRUFBQUEsWUFINkM7QUFJN0NWLEVBQUFBO0FBSjZDLENBQWhCLEVBSzVCO0FBQ0RMLEVBQUFBLGVBQWUsR0FBR0EsZUFBZSxJQUFLRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0MsZUFBdkQ7O0FBQ0EsTUFBSUEsZUFBSixFQUFxQjtBQUNuQixVQUFNZ0IsUUFBUSxHQUFHLE1BQU1oQixlQUFlLENBQUNJLElBQWhCLENBQXFCYSxHQUFyQixDQUF5QkYsWUFBekIsQ0FBdkI7O0FBQ0EsUUFBSUMsUUFBSixFQUFjO0FBQ1osWUFBTUUsVUFBVSxHQUFHckIsS0FBSyxDQUFDc0IsTUFBTixDQUFhQyxRQUFiLENBQXNCSixRQUF0QixDQUFuQjtBQUNBLGFBQU9LLE9BQU8sQ0FBQ0MsT0FBUixDQUNMLElBQUl4QixJQUFKLENBQVM7QUFDUEMsUUFBQUEsTUFETztBQUVQQyxRQUFBQSxlQUZPO0FBR1BFLFFBQUFBLFFBQVEsRUFBRSxLQUhIO0FBSVBHLFFBQUFBLGNBSk87QUFLUEQsUUFBQUEsSUFBSSxFQUFFYztBQUxDLE9BQVQsQ0FESyxDQUFQO0FBU0Q7QUFDRjs7QUFFRCxNQUFJSyxPQUFKOztBQUNBLE1BQUl4QixNQUFKLEVBQVk7QUFDVixVQUFNeUIsV0FBVyxHQUFHO0FBQ2xCQyxNQUFBQSxLQUFLLEVBQUUsQ0FEVztBQUVsQkMsTUFBQUEsT0FBTyxFQUFFO0FBRlMsS0FBcEI7QUFLQSxVQUFNQyxLQUFLLEdBQUcsSUFBSWhDLFNBQUosQ0FBY0ksTUFBZCxFQUFzQlksTUFBTSxDQUFDWixNQUFELENBQTVCLEVBQXNDLFVBQXRDLEVBQWtEO0FBQUVnQixNQUFBQTtBQUFGLEtBQWxELEVBQW9FUyxXQUFwRSxDQUFkO0FBQ0FELElBQUFBLE9BQU8sR0FBRyxDQUFDLE1BQU1JLEtBQUssQ0FBQ0MsT0FBTixFQUFQLEVBQXdCTCxPQUFsQztBQUNELEdBUkQsTUFRTztBQUNMQSxJQUFBQSxPQUFPLEdBQUcsQ0FDUixNQUFNLElBQUkxQixLQUFLLENBQUNnQyxLQUFWLENBQWdCaEMsS0FBSyxDQUFDaUMsT0FBdEIsRUFDSEwsS0FERyxDQUNHLENBREgsRUFFSEMsT0FGRyxDQUVLLE1BRkwsRUFHSEssT0FIRyxDQUdLLGNBSEwsRUFHcUJoQixZQUhyQixFQUlIaUIsSUFKRyxDQUlFO0FBQUVDLE1BQUFBLFlBQVksRUFBRTtBQUFoQixLQUpGLENBREUsRUFNUkMsR0FOUSxDQU1KQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ0MsTUFBSixFQU5ILENBQVY7QUFPRDs7QUFFRCxNQUFJYixPQUFPLENBQUNjLE1BQVIsS0FBbUIsQ0FBbkIsSUFBd0IsQ0FBQ2QsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXLE1BQVgsQ0FBN0IsRUFBaUQ7QUFDL0MsVUFBTSxJQUFJMUIsS0FBSyxDQUFDeUMsS0FBVixDQUFnQnpDLEtBQUssQ0FBQ3lDLEtBQU4sQ0FBWUMscUJBQTVCLEVBQW1ELHVCQUFuRCxDQUFOO0FBQ0Q7O0FBQ0QsUUFBTUMsR0FBRyxHQUFHLElBQUlDLElBQUosRUFBWjtBQUFBLFFBQ0VDLFNBQVMsR0FBR25CLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV21CLFNBQVgsR0FBdUIsSUFBSUQsSUFBSixDQUFTbEIsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXbUIsU0FBWCxDQUFxQkMsR0FBOUIsQ0FBdkIsR0FBNEQxQyxTQUQxRTs7QUFFQSxNQUFJeUMsU0FBUyxHQUFHRixHQUFoQixFQUFxQjtBQUNuQixVQUFNLElBQUkzQyxLQUFLLENBQUN5QyxLQUFWLENBQWdCekMsS0FBSyxDQUFDeUMsS0FBTixDQUFZQyxxQkFBNUIsRUFBbUQsMkJBQW5ELENBQU47QUFDRDs7QUFDRCxRQUFNSixHQUFHLEdBQUdaLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBVyxNQUFYLENBQVo7QUFDQSxTQUFPWSxHQUFHLENBQUNTLFFBQVg7QUFDQVQsRUFBQUEsR0FBRyxDQUFDLFdBQUQsQ0FBSCxHQUFtQixPQUFuQjtBQUNBQSxFQUFBQSxHQUFHLENBQUMsY0FBRCxDQUFILEdBQXNCcEIsWUFBdEI7O0FBQ0EsTUFBSWYsZUFBSixFQUFxQjtBQUNuQkEsSUFBQUEsZUFBZSxDQUFDSSxJQUFoQixDQUFxQnlDLEdBQXJCLENBQXlCOUIsWUFBekIsRUFBdUNvQixHQUF2QztBQUNEOztBQUNELFFBQU1XLFVBQVUsR0FBR2pELEtBQUssQ0FBQ3NCLE1BQU4sQ0FBYUMsUUFBYixDQUFzQmUsR0FBdEIsQ0FBbkI7QUFDQSxTQUFPLElBQUlyQyxJQUFKLENBQVM7QUFDZEMsSUFBQUEsTUFEYztBQUVkQyxJQUFBQSxlQUZjO0FBR2RFLElBQUFBLFFBQVEsRUFBRSxLQUhJO0FBSWRHLElBQUFBLGNBSmM7QUFLZEQsSUFBQUEsSUFBSSxFQUFFMEM7QUFMUSxHQUFULENBQVA7QUFPRCxDQWpFRDs7QUFtRUEsSUFBSUMsNEJBQTRCLEdBQUcsVUFBVTtBQUFFaEQsRUFBQUEsTUFBRjtBQUFVZ0IsRUFBQUEsWUFBVjtBQUF3QlYsRUFBQUE7QUFBeEIsQ0FBVixFQUFvRDtBQUNyRixNQUFJbUIsV0FBVyxHQUFHO0FBQ2hCQyxJQUFBQSxLQUFLLEVBQUU7QUFEUyxHQUFsQjtBQUdBLE1BQUlFLEtBQUssR0FBRyxJQUFJaEMsU0FBSixDQUFjSSxNQUFkLEVBQXNCWSxNQUFNLENBQUNaLE1BQUQsQ0FBNUIsRUFBc0MsT0FBdEMsRUFBK0M7QUFBRWdCLElBQUFBO0FBQUYsR0FBL0MsRUFBaUVTLFdBQWpFLENBQVo7QUFDQSxTQUFPRyxLQUFLLENBQUNDLE9BQU4sR0FBZ0JvQixJQUFoQixDQUFxQkMsUUFBUSxJQUFJO0FBQ3RDLFFBQUkxQixPQUFPLEdBQUcwQixRQUFRLENBQUMxQixPQUF2Qjs7QUFDQSxRQUFJQSxPQUFPLENBQUNjLE1BQVIsS0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsWUFBTSxJQUFJeEMsS0FBSyxDQUFDeUMsS0FBVixDQUFnQnpDLEtBQUssQ0FBQ3lDLEtBQU4sQ0FBWUMscUJBQTVCLEVBQW1ELDhCQUFuRCxDQUFOO0FBQ0Q7O0FBQ0QsVUFBTUosR0FBRyxHQUFHWixPQUFPLENBQUMsQ0FBRCxDQUFuQjtBQUNBWSxJQUFBQSxHQUFHLENBQUNlLFNBQUosR0FBZ0IsT0FBaEI7QUFDQSxVQUFNSixVQUFVLEdBQUdqRCxLQUFLLENBQUNzQixNQUFOLENBQWFDLFFBQWIsQ0FBc0JlLEdBQXRCLENBQW5CO0FBQ0EsV0FBTyxJQUFJckMsSUFBSixDQUFTO0FBQ2RDLE1BQUFBLE1BRGM7QUFFZEcsTUFBQUEsUUFBUSxFQUFFLEtBRkk7QUFHZEcsTUFBQUEsY0FIYztBQUlkRCxNQUFBQSxJQUFJLEVBQUUwQztBQUpRLEtBQVQsQ0FBUDtBQU1ELEdBZE0sQ0FBUDtBQWVELENBcEJELEMsQ0FzQkE7OztBQUNBaEQsSUFBSSxDQUFDVyxTQUFMLENBQWUwQyxZQUFmLEdBQThCLFlBQVk7QUFDeEMsTUFBSSxLQUFLakQsUUFBTCxJQUFpQixDQUFDLEtBQUtFLElBQTNCLEVBQWlDO0FBQy9CLFdBQU9pQixPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNEOztBQUNELE1BQUksS0FBS2YsWUFBVCxFQUF1QjtBQUNyQixXQUFPYyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsS0FBS2hCLFNBQXJCLENBQVA7QUFDRDs7QUFDRCxNQUFJLEtBQUtFLFdBQVQsRUFBc0I7QUFDcEIsV0FBTyxLQUFLQSxXQUFaO0FBQ0Q7O0FBQ0QsT0FBS0EsV0FBTCxHQUFtQixLQUFLNEMsVUFBTCxFQUFuQjtBQUNBLFNBQU8sS0FBSzVDLFdBQVo7QUFDRCxDQVpEOztBQWNBVixJQUFJLENBQUNXLFNBQUwsQ0FBZTRDLGVBQWYsR0FBaUMsa0JBQWtCO0FBQ2pEO0FBQ0EsUUFBTTlCLE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxNQUFJLEtBQUt4QixNQUFULEVBQWlCO0FBQ2YsVUFBTXVELFNBQVMsR0FBRztBQUNoQkMsTUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFFBQUFBLE1BQU0sRUFBRSxTQURIO0FBRUxOLFFBQUFBLFNBQVMsRUFBRSxPQUZOO0FBR0xPLFFBQUFBLFFBQVEsRUFBRSxLQUFLckQsSUFBTCxDQUFVc0Q7QUFIZjtBQURTLEtBQWxCO0FBT0EsVUFBTSxJQUFJL0QsU0FBSixDQUFjLEtBQUtJLE1BQW5CLEVBQTJCWSxNQUFNLENBQUMsS0FBS1osTUFBTixDQUFqQyxFQUFnRCxPQUFoRCxFQUF5RHVELFNBQXpELEVBQW9FLEVBQXBFLEVBQXdFSyxJQUF4RSxDQUE2RUMsTUFBTSxJQUN2RnJDLE9BQU8sQ0FBQ3NDLElBQVIsQ0FBYUQsTUFBYixDQURJLENBQU47QUFHRCxHQVhELE1BV087QUFDTCxVQUFNLElBQUkvRCxLQUFLLENBQUNnQyxLQUFWLENBQWdCaEMsS0FBSyxDQUFDaUUsSUFBdEIsRUFDSC9CLE9BREcsQ0FDSyxPQURMLEVBQ2MsS0FBSzNCLElBRG5CLEVBRUh1RCxJQUZHLENBRUVDLE1BQU0sSUFBSXJDLE9BQU8sQ0FBQ3NDLElBQVIsQ0FBYUQsTUFBTSxDQUFDeEIsTUFBUCxFQUFiLENBRlosRUFFMkM7QUFBRUgsTUFBQUEsWUFBWSxFQUFFO0FBQWhCLEtBRjNDLENBQU47QUFHRDs7QUFDRCxTQUFPVixPQUFQO0FBQ0QsQ0FwQkQsQyxDQXNCQTs7O0FBQ0F6QixJQUFJLENBQUNXLFNBQUwsQ0FBZTJDLFVBQWYsR0FBNEIsa0JBQWtCO0FBQzVDLE1BQUksS0FBS3BELGVBQVQsRUFBMEI7QUFDeEIsVUFBTStELFdBQVcsR0FBRyxNQUFNLEtBQUsvRCxlQUFMLENBQXFCZ0UsSUFBckIsQ0FBMEIvQyxHQUExQixDQUE4QixLQUFLYixJQUFMLENBQVVzRCxFQUF4QyxDQUExQjs7QUFDQSxRQUFJSyxXQUFXLElBQUksSUFBbkIsRUFBeUI7QUFDdkIsV0FBS3hELFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxXQUFLRCxTQUFMLEdBQWlCeUQsV0FBakI7QUFDQSxhQUFPQSxXQUFQO0FBQ0Q7QUFDRixHQVIyQyxDQVU1Qzs7O0FBQ0EsUUFBTXhDLE9BQU8sR0FBRyxNQUFNLEtBQUs4QixlQUFMLEVBQXRCOztBQUNBLE1BQUksQ0FBQzlCLE9BQU8sQ0FBQ2MsTUFBYixFQUFxQjtBQUNuQixTQUFLL0IsU0FBTCxHQUFpQixFQUFqQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBRUEsU0FBS3lELFVBQUw7QUFDQSxXQUFPLEtBQUszRCxTQUFaO0FBQ0Q7O0FBRUQsUUFBTTRELFFBQVEsR0FBRzNDLE9BQU8sQ0FBQzRDLE1BQVIsQ0FDZixDQUFDQyxDQUFELEVBQUlDLENBQUosS0FBVTtBQUNSRCxJQUFBQSxDQUFDLENBQUNFLEtBQUYsQ0FBUVQsSUFBUixDQUFhUSxDQUFDLENBQUNFLElBQWY7QUFDQUgsSUFBQUEsQ0FBQyxDQUFDSSxHQUFGLENBQU1YLElBQU4sQ0FBV1EsQ0FBQyxDQUFDWixRQUFiO0FBQ0EsV0FBT1csQ0FBUDtBQUNELEdBTGMsRUFNZjtBQUFFSSxJQUFBQSxHQUFHLEVBQUUsRUFBUDtBQUFXRixJQUFBQSxLQUFLLEVBQUU7QUFBbEIsR0FOZSxDQUFqQixDQXJCNEMsQ0E4QjVDOztBQUNBLFFBQU1HLFNBQVMsR0FBRyxNQUFNLEtBQUtDLDJCQUFMLENBQWlDUixRQUFRLENBQUNNLEdBQTFDLEVBQStDTixRQUFRLENBQUNJLEtBQXhELENBQXhCO0FBQ0EsT0FBS2hFLFNBQUwsR0FBaUJtRSxTQUFTLENBQUN2QyxHQUFWLENBQWNtQyxDQUFDLElBQUk7QUFDbEMsV0FBTyxVQUFVQSxDQUFqQjtBQUNELEdBRmdCLENBQWpCO0FBR0EsT0FBSzlELFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxPQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsT0FBS3lELFVBQUw7QUFDQSxTQUFPLEtBQUszRCxTQUFaO0FBQ0QsQ0F2Q0Q7O0FBeUNBUixJQUFJLENBQUNXLFNBQUwsQ0FBZXdELFVBQWYsR0FBNEIsWUFBWTtBQUN0QyxNQUFJLENBQUMsS0FBS2pFLGVBQVYsRUFBMkI7QUFDekIsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsT0FBS0EsZUFBTCxDQUFxQmdFLElBQXJCLENBQTBCbkIsR0FBMUIsQ0FBOEIsS0FBS3pDLElBQUwsQ0FBVXNELEVBQXhDLEVBQTRDaUIsS0FBSyxDQUFDLEdBQUcsS0FBS3JFLFNBQVQsQ0FBakQ7QUFDQSxTQUFPLElBQVA7QUFDRCxDQU5EOztBQVFBUixJQUFJLENBQUNXLFNBQUwsQ0FBZW1FLGNBQWYsR0FBZ0MsVUFBVTdELFlBQVYsRUFBd0I7QUFDdEQsTUFBSSxDQUFDLEtBQUtmLGVBQVYsRUFBMkI7QUFDekIsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsT0FBS0EsZUFBTCxDQUFxQmdFLElBQXJCLENBQTBCYSxHQUExQixDQUE4QixLQUFLekUsSUFBTCxDQUFVc0QsRUFBeEM7QUFDQSxPQUFLMUQsZUFBTCxDQUFxQkksSUFBckIsQ0FBMEJ5RSxHQUExQixDQUE4QjlELFlBQTlCO0FBQ0EsU0FBTyxJQUFQO0FBQ0QsQ0FQRDs7QUFTQWpCLElBQUksQ0FBQ1csU0FBTCxDQUFlcUUsYUFBZixHQUErQixnQkFBZ0JDLEdBQWhCLEVBQXFCO0FBQ2xELFFBQU14RCxPQUFPLEdBQUcsRUFBaEIsQ0FEa0QsQ0FFbEQ7O0FBQ0EsTUFBSSxDQUFDLEtBQUt4QixNQUFWLEVBQWtCO0FBQ2hCLFVBQU0sSUFBSUYsS0FBSyxDQUFDZ0MsS0FBVixDQUFnQmhDLEtBQUssQ0FBQ2lFLElBQXRCLEVBQ0hrQixXQURHLENBRUYsT0FGRSxFQUdGRCxHQUFHLENBQUM3QyxHQUFKLENBQVF3QixFQUFFLElBQUk7QUFDWixZQUFNTSxJQUFJLEdBQUcsSUFBSW5FLEtBQUssQ0FBQ3NCLE1BQVYsQ0FBaUJ0QixLQUFLLENBQUNpRSxJQUF2QixDQUFiO0FBQ0FFLE1BQUFBLElBQUksQ0FBQ04sRUFBTCxHQUFVQSxFQUFWO0FBQ0EsYUFBT00sSUFBUDtBQUNELEtBSkQsQ0FIRSxFQVNITCxJQVRHLENBU0VDLE1BQU0sSUFBSXJDLE9BQU8sQ0FBQ3NDLElBQVIsQ0FBYUQsTUFBTSxDQUFDeEIsTUFBUCxFQUFiLENBVFosRUFTMkM7QUFBRUgsTUFBQUEsWUFBWSxFQUFFO0FBQWhCLEtBVDNDLENBQU47QUFVRCxHQVhELE1BV087QUFDTCxVQUFNZ0QsS0FBSyxHQUFHRixHQUFHLENBQUM3QyxHQUFKLENBQVF3QixFQUFFLElBQUk7QUFDMUIsYUFBTztBQUNMRixRQUFBQSxNQUFNLEVBQUUsU0FESDtBQUVMTixRQUFBQSxTQUFTLEVBQUUsT0FGTjtBQUdMTyxRQUFBQSxRQUFRLEVBQUVDO0FBSEwsT0FBUDtBQUtELEtBTmEsQ0FBZDtBQU9BLFVBQU1KLFNBQVMsR0FBRztBQUFFMkIsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLEdBQUcsRUFBRUQ7QUFBUDtBQUFULEtBQWxCO0FBQ0EsVUFBTSxJQUFJdEYsU0FBSixDQUFjLEtBQUtJLE1BQW5CLEVBQTJCWSxNQUFNLENBQUMsS0FBS1osTUFBTixDQUFqQyxFQUFnRCxPQUFoRCxFQUF5RHVELFNBQXpELEVBQW9FLEVBQXBFLEVBQXdFSyxJQUF4RSxDQUE2RUMsTUFBTSxJQUN2RnJDLE9BQU8sQ0FBQ3NDLElBQVIsQ0FBYUQsTUFBYixDQURJLENBQU47QUFHRDs7QUFDRCxTQUFPckMsT0FBUDtBQUNELENBNUJELEMsQ0E4QkE7OztBQUNBekIsSUFBSSxDQUFDVyxTQUFMLENBQWVpRSwyQkFBZixHQUE2QyxVQUFVUyxPQUFWLEVBQW1CYixLQUFLLEdBQUcsRUFBM0IsRUFBK0JjLFlBQVksR0FBRyxFQUE5QyxFQUFrRDtBQUM3RixRQUFNTCxHQUFHLEdBQUdJLE9BQU8sQ0FBQ0UsTUFBUixDQUFlQyxNQUFNLElBQUk7QUFDbkMsVUFBTUMsVUFBVSxHQUFHSCxZQUFZLENBQUNFLE1BQUQsQ0FBWixLQUF5QixJQUE1QztBQUNBRixJQUFBQSxZQUFZLENBQUNFLE1BQUQsQ0FBWixHQUF1QixJQUF2QjtBQUNBLFdBQU9DLFVBQVA7QUFDRCxHQUpXLENBQVosQ0FENkYsQ0FPN0Y7O0FBQ0EsTUFBSVIsR0FBRyxDQUFDMUMsTUFBSixJQUFjLENBQWxCLEVBQXFCO0FBQ25CLFdBQU9oQixPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsQ0FBQyxHQUFHLElBQUlrRSxHQUFKLENBQVFsQixLQUFSLENBQUosQ0FBaEIsQ0FBUDtBQUNEOztBQUVELFNBQU8sS0FBS1EsYUFBTCxDQUFtQkMsR0FBbkIsRUFDSi9CLElBREksQ0FDQ3pCLE9BQU8sSUFBSTtBQUNmO0FBQ0EsUUFBSSxDQUFDQSxPQUFPLENBQUNjLE1BQWIsRUFBcUI7QUFDbkIsYUFBT2hCLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQmdELEtBQWhCLENBQVA7QUFDRCxLQUpjLENBS2Y7OztBQUNBLFVBQU1tQixTQUFTLEdBQUdsRSxPQUFPLENBQUM0QyxNQUFSLENBQ2hCLENBQUN1QixJQUFELEVBQU8xQixJQUFQLEtBQWdCO0FBQ2QwQixNQUFBQSxJQUFJLENBQUNwQixLQUFMLENBQVdULElBQVgsQ0FBZ0JHLElBQUksQ0FBQ08sSUFBckI7QUFDQW1CLE1BQUFBLElBQUksQ0FBQ2xCLEdBQUwsQ0FBU1gsSUFBVCxDQUFjRyxJQUFJLENBQUNQLFFBQW5CO0FBQ0EsYUFBT2lDLElBQVA7QUFDRCxLQUxlLEVBTWhCO0FBQUVsQixNQUFBQSxHQUFHLEVBQUUsRUFBUDtBQUFXRixNQUFBQSxLQUFLLEVBQUU7QUFBbEIsS0FOZ0IsQ0FBbEIsQ0FOZSxDQWNmOztBQUNBQSxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3FCLE1BQU4sQ0FBYUYsU0FBUyxDQUFDbkIsS0FBdkIsQ0FBUixDQWZlLENBZ0JmOztBQUNBLFdBQU8sS0FBS0ksMkJBQUwsQ0FBaUNlLFNBQVMsQ0FBQ2pCLEdBQTNDLEVBQWdERixLQUFoRCxFQUF1RGMsWUFBdkQsQ0FBUDtBQUNELEdBbkJJLEVBb0JKcEMsSUFwQkksQ0FvQkNzQixLQUFLLElBQUk7QUFDYixXQUFPakQsT0FBTyxDQUFDQyxPQUFSLENBQWdCLENBQUMsR0FBRyxJQUFJa0UsR0FBSixDQUFRbEIsS0FBUixDQUFKLENBQWhCLENBQVA7QUFDRCxHQXRCSSxDQUFQO0FBdUJELENBbkNEOztBQXFDQXNCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmL0YsRUFBQUEsSUFEZTtBQUVmYSxFQUFBQSxNQUZlO0FBR2ZFLEVBQUFBLE1BSGU7QUFJZkQsRUFBQUEsUUFKZTtBQUtmRSxFQUFBQSxzQkFMZTtBQU1maUMsRUFBQUE7QUFOZSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKTtcblxuLy8gQW4gQXV0aCBvYmplY3QgdGVsbHMgeW91IHdobyBpcyByZXF1ZXN0aW5nIHNvbWV0aGluZyBhbmQgd2hldGhlclxuLy8gdGhlIG1hc3RlciBrZXkgd2FzIHVzZWQuXG4vLyB1c2VyT2JqZWN0IGlzIGEgUGFyc2UuVXNlciBhbmQgY2FuIGJlIG51bGwgaWYgdGhlcmUncyBubyB1c2VyLlxuZnVuY3Rpb24gQXV0aCh7XG4gIGNvbmZpZyxcbiAgY2FjaGVDb250cm9sbGVyID0gdW5kZWZpbmVkLFxuICBpc01hc3RlciA9IGZhbHNlLFxuICBpc1JlYWRPbmx5ID0gZmFsc2UsXG4gIHVzZXIsXG4gIGluc3RhbGxhdGlvbklkLFxufSkge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgdGhpcy5jYWNoZUNvbnRyb2xsZXIgPSBjYWNoZUNvbnRyb2xsZXIgfHwgKGNvbmZpZyAmJiBjb25maWcuY2FjaGVDb250cm9sbGVyKTtcbiAgdGhpcy5pbnN0YWxsYXRpb25JZCA9IGluc3RhbGxhdGlvbklkO1xuICB0aGlzLmlzTWFzdGVyID0gaXNNYXN0ZXI7XG4gIHRoaXMudXNlciA9IHVzZXI7XG4gIHRoaXMuaXNSZWFkT25seSA9IGlzUmVhZE9ubHk7XG5cbiAgLy8gQXNzdW1pbmcgYSB1c2VycyByb2xlcyB3b24ndCBjaGFuZ2UgZHVyaW5nIGEgc2luZ2xlIHJlcXVlc3QsIHdlJ2xsXG4gIC8vIG9ubHkgbG9hZCB0aGVtIG9uY2UuXG4gIHRoaXMudXNlclJvbGVzID0gW107XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gZmFsc2U7XG4gIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoaXMgYXV0aCBjb3VsZCBwb3NzaWJseSBtb2RpZnkgdGhlIGdpdmVuIHVzZXIgaWQuXG4vLyBJdCBzdGlsbCBjb3VsZCBiZSBmb3JiaWRkZW4gdmlhIEFDTHMgZXZlbiBpZiB0aGlzIHJldHVybnMgdHJ1ZS5cbkF1dGgucHJvdG90eXBlLmlzVW5hdXRoZW50aWNhdGVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3Rlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gQSBoZWxwZXIgdG8gZ2V0IGEgbWFzdGVyLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYXN0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1hc3Rlci1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gcmVhZE9ubHkoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUsIGlzUmVhZE9ubHk6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG5vYm9keS1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gbm9ib2R5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiBmYWxzZSB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBBdXRoIG9iamVjdFxuY29uc3QgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiA9IGFzeW5jIGZ1bmN0aW9uICh7XG4gIGNvbmZpZyxcbiAgY2FjaGVDb250cm9sbGVyLFxuICBzZXNzaW9uVG9rZW4sXG4gIGluc3RhbGxhdGlvbklkLFxufSkge1xuICBjYWNoZUNvbnRyb2xsZXIgPSBjYWNoZUNvbnRyb2xsZXIgfHwgKGNvbmZpZyAmJiBjb25maWcuY2FjaGVDb250cm9sbGVyKTtcbiAgaWYgKGNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IHVzZXJKU09OID0gYXdhaXQgY2FjaGVDb250cm9sbGVyLnVzZXIuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgaWYgKHVzZXJKU09OKSB7XG4gICAgICBjb25zdCBjYWNoZWRVc2VyID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHVzZXJKU09OKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIG5ldyBBdXRoKHtcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY2FjaGVDb250cm9sbGVyLFxuICAgICAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICB1c2VyOiBjYWNoZWRVc2VyLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0cztcbiAgaWYgKGNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RPcHRpb25zID0ge1xuICAgICAgbGltaXQ6IDEsXG4gICAgICBpbmNsdWRlOiAndXNlcicsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShjb25maWcsIG1hc3Rlcihjb25maWcpLCAnX1Nlc3Npb24nLCB7IHNlc3Npb25Ub2tlbiB9LCByZXN0T3B0aW9ucyk7XG4gICAgcmVzdWx0cyA9IChhd2FpdCBxdWVyeS5leGVjdXRlKCkpLnJlc3VsdHM7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0cyA9IChcbiAgICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5TZXNzaW9uKVxuICAgICAgICAubGltaXQoMSlcbiAgICAgICAgLmluY2x1ZGUoJ3VzZXInKVxuICAgICAgICAuZXF1YWxUbygnc2Vzc2lvblRva2VuJywgc2Vzc2lvblRva2VuKVxuICAgICAgICAuZmluZCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KVxuICAgICkubWFwKG9iaiA9PiBvYmoudG9KU09OKCkpO1xuICB9XG5cbiAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxIHx8ICFyZXN1bHRzWzBdWyd1c2VyJ10pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyk7XG4gIH1cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKSxcbiAgICBleHBpcmVzQXQgPSByZXN1bHRzWzBdLmV4cGlyZXNBdCA/IG5ldyBEYXRlKHJlc3VsdHNbMF0uZXhwaXJlc0F0LmlzbykgOiB1bmRlZmluZWQ7XG4gIGlmIChleHBpcmVzQXQgPCBub3cpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnU2Vzc2lvbiB0b2tlbiBpcyBleHBpcmVkLicpO1xuICB9XG4gIGNvbnN0IG9iaiA9IHJlc3VsdHNbMF1bJ3VzZXInXTtcbiAgZGVsZXRlIG9iai5wYXNzd29yZDtcbiAgb2JqWydjbGFzc05hbWUnXSA9ICdfVXNlcic7XG4gIG9ialsnc2Vzc2lvblRva2VuJ10gPSBzZXNzaW9uVG9rZW47XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjYWNoZUNvbnRyb2xsZXIudXNlci5wdXQoc2Vzc2lvblRva2VuLCBvYmopO1xuICB9XG4gIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICBjb25maWcsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICBpbnN0YWxsYXRpb25JZCxcbiAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICB9KTtcbn07XG5cbnZhciBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuID0gZnVuY3Rpb24gKHsgY29uZmlnLCBzZXNzaW9uVG9rZW4sIGluc3RhbGxhdGlvbklkIH0pIHtcbiAgdmFyIHJlc3RPcHRpb25zID0ge1xuICAgIGxpbWl0OiAxLFxuICB9O1xuICB2YXIgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KGNvbmZpZywgbWFzdGVyKGNvbmZpZyksICdfVXNlcicsIHsgc2Vzc2lvblRva2VuIH0sIHJlc3RPcHRpb25zKTtcbiAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB2YXIgcmVzdWx0cyA9IHJlc3BvbnNlLnJlc3VsdHM7XG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnaW52YWxpZCBsZWdhY3kgc2Vzc2lvbiB0b2tlbicpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSByZXN1bHRzWzBdO1xuICAgIG9iai5jbGFzc05hbWUgPSAnX1VzZXInO1xuICAgIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgICByZXR1cm4gbmV3IEF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Ygcm9sZSBuYW1lc1xuQXV0aC5wcm90b3R5cGUuZ2V0VXNlclJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3RlciB8fCAhdGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgaWYgKHRoaXMuZmV0Y2hlZFJvbGVzKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnVzZXJSb2xlcyk7XG4gIH1cbiAgaWYgKHRoaXMucm9sZVByb21pc2UpIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbiAgfVxuICB0aGlzLnJvbGVQcm9taXNlID0gdGhpcy5fbG9hZFJvbGVzKCk7XG4gIHJldHVybiB0aGlzLnJvbGVQcm9taXNlO1xufTtcblxuQXV0aC5wcm90b3R5cGUuZ2V0Um9sZXNGb3JVc2VyID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAvL1N0YWNrIGFsbCBQYXJzZS5Sb2xlXG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgY29uc3QgcmVzdFdoZXJlID0ge1xuICAgICAgdXNlcnM6IHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgICAgb2JqZWN0SWQ6IHRoaXMudXNlci5pZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBhd2FpdCBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYXN0ZXIodGhpcy5jb25maWcpLCAnX1JvbGUnLCByZXN0V2hlcmUsIHt9KS5lYWNoKHJlc3VsdCA9PlxuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5Sb2xlKVxuICAgICAgLmVxdWFsVG8oJ3VzZXJzJywgdGhpcy51c2VyKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHJvbGUgdHJlZSBhbmQgY29tcGlsZXMgYSB1c2VyJ3Mgcm9sZXNcbkF1dGgucHJvdG90eXBlLl9sb2FkUm9sZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IGNhY2hlZFJvbGVzID0gYXdhaXQgdGhpcy5jYWNoZUNvbnRyb2xsZXIucm9sZS5nZXQodGhpcy51c2VyLmlkKTtcbiAgICBpZiAoY2FjaGVkUm9sZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyUm9sZXMgPSBjYWNoZWRSb2xlcztcbiAgICAgIHJldHVybiBjYWNoZWRSb2xlcztcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBnZXQgdGhlIHJvbGUgaWRzIHRoaXMgdXNlciBpcyBkaXJlY3RseSBhIG1lbWJlciBvZlxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRSb2xlc0ZvclVzZXIoKTtcbiAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHRoaXMudXNlclJvbGVzID0gW107XG4gICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuXG4gICAgdGhpcy5jYWNoZVJvbGVzKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xuICB9XG5cbiAgY29uc3Qgcm9sZXNNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAobSwgcikgPT4ge1xuICAgICAgbS5uYW1lcy5wdXNoKHIubmFtZSk7XG4gICAgICBtLmlkcy5wdXNoKHIub2JqZWN0SWQpO1xuICAgICAgcmV0dXJuIG07XG4gICAgfSxcbiAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICk7XG5cbiAgLy8gcnVuIHRoZSByZWN1cnNpdmUgZmluZGluZ1xuICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyb2xlc01hcC5pZHMsIHJvbGVzTWFwLm5hbWVzKTtcbiAgdGhpcy51c2VyUm9sZXMgPSByb2xlTmFtZXMubWFwKHIgPT4ge1xuICAgIHJldHVybiAncm9sZTonICsgcjtcbiAgfSk7XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgdGhpcy5yb2xlUHJvbWlzZSA9IG51bGw7XG4gIHRoaXMuY2FjaGVSb2xlcygpO1xuICByZXR1cm4gdGhpcy51c2VyUm9sZXM7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jYWNoZVJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuY2FjaGVDb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUucHV0KHRoaXMudXNlci5pZCwgQXJyYXkoLi4udGhpcy51c2VyUm9sZXMpKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jbGVhclJvbGVDYWNoZSA9IGZ1bmN0aW9uIChzZXNzaW9uVG9rZW4pIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLmRlbCh0aGlzLnVzZXIuaWQpO1xuICB0aGlzLmNhY2hlQ29udHJvbGxlci51c2VyLmRlbChzZXNzaW9uVG9rZW4pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzQnlJZHMgPSBhc3luYyBmdW5jdGlvbiAoaW5zKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgLy8gQnVpbGQgYW4gT1IgcXVlcnkgYWNyb3NzIGFsbCBwYXJlbnRSb2xlc1xuICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpXG4gICAgICAuY29udGFpbmVkSW4oXG4gICAgICAgICdyb2xlcycsXG4gICAgICAgIGlucy5tYXAoaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUGFyc2UuT2JqZWN0KFBhcnNlLlJvbGUpO1xuICAgICAgICAgIHJvbGUuaWQgPSBpZDtcbiAgICAgICAgICByZXR1cm4gcm9sZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgcm9sZXMgPSBpbnMubWFwKGlkID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfUm9sZScsXG4gICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVzdFdoZXJlID0geyByb2xlczogeyAkaW46IHJvbGVzIH0gfTtcbiAgICBhd2FpdCBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYXN0ZXIodGhpcy5jb25maWcpLCAnX1JvbGUnLCByZXN0V2hlcmUsIHt9KS5lYWNoKHJlc3VsdCA9PlxuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgICApO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gR2l2ZW4gYSBsaXN0IG9mIHJvbGVJZHMsIGZpbmQgYWxsIHRoZSBwYXJlbnQgcm9sZXMsIHJldHVybnMgYSBwcm9taXNlIHdpdGggYWxsIG5hbWVzXG5BdXRoLnByb3RvdHlwZS5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMgPSBmdW5jdGlvbiAocm9sZUlEcywgbmFtZXMgPSBbXSwgcXVlcmllZFJvbGVzID0ge30pIHtcbiAgY29uc3QgaW5zID0gcm9sZUlEcy5maWx0ZXIocm9sZUlEID0+IHtcbiAgICBjb25zdCB3YXNRdWVyaWVkID0gcXVlcmllZFJvbGVzW3JvbGVJRF0gIT09IHRydWU7XG4gICAgcXVlcmllZFJvbGVzW3JvbGVJRF0gPSB0cnVlO1xuICAgIHJldHVybiB3YXNRdWVyaWVkO1xuICB9KTtcblxuICAvLyBhbGwgcm9sZXMgYXJlIGFjY291bnRlZCBmb3IsIHJldHVybiB0aGUgbmFtZXNcbiAgaWYgKGlucy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5nZXRSb2xlc0J5SWRzKGlucylcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIC8vIE5vdGhpbmcgZm91bmRcbiAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuYW1lcyk7XG4gICAgICB9XG4gICAgICAvLyBNYXAgdGhlIHJlc3VsdHMgd2l0aCBhbGwgSWRzIGFuZCBuYW1lc1xuICAgICAgY29uc3QgcmVzdWx0TWFwID0gcmVzdWx0cy5yZWR1Y2UoXG4gICAgICAgIChtZW1vLCByb2xlKSA9PiB7XG4gICAgICAgICAgbWVtby5uYW1lcy5wdXNoKHJvbGUubmFtZSk7XG4gICAgICAgICAgbWVtby5pZHMucHVzaChyb2xlLm9iamVjdElkKTtcbiAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgfSxcbiAgICAgICAgeyBpZHM6IFtdLCBuYW1lczogW10gfVxuICAgICAgKTtcbiAgICAgIC8vIHN0b3JlIHRoZSBuZXcgZm91bmQgbmFtZXNcbiAgICAgIG5hbWVzID0gbmFtZXMuY29uY2F0KHJlc3VsdE1hcC5uYW1lcyk7XG4gICAgICAvLyBmaW5kIHRoZSBuZXh0IG9uZXMsIGNpcmN1bGFyIHJvbGVzIHdpbGwgYmUgY3V0XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMocmVzdWx0TWFwLmlkcywgbmFtZXMsIHF1ZXJpZWRSb2xlcyk7XG4gICAgfSlcbiAgICAudGhlbihuYW1lcyA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFsuLi5uZXcgU2V0KG5hbWVzKV0pO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEF1dGgsXG4gIG1hc3RlcixcbiAgbm9ib2R5LFxuICByZWFkT25seSxcbiAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbixcbiAgZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbixcbn07XG4iXX0=
|
|
@@ -60,6 +60,14 @@ class LiveQueryController {
|
|
|
60
60
|
return false;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
clearCachedRoles(user) {
|
|
64
|
+
if (!user) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return this.liveQueryPublisher.onClearCachedRoles(user);
|
|
69
|
+
}
|
|
70
|
+
|
|
63
71
|
_makePublisherRequest(currentObject, originalObject, classLevelPermissions) {
|
|
64
72
|
const req = {
|
|
65
73
|
object: currentObject
|
|
@@ -81,4 +89,4 @@ class LiveQueryController {
|
|
|
81
89
|
exports.LiveQueryController = LiveQueryController;
|
|
82
90
|
var _default = LiveQueryController;
|
|
83
91
|
exports.default = _default;
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9MaXZlUXVlcnlDb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkxpdmVRdWVyeUNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImNsYXNzTmFtZXMiLCJTZXQiLCJBcnJheSIsIm1hcCIsIm5hbWUiLCJfbmFtZSIsIlJlZ0V4cCIsImxpdmVRdWVyeVB1Ymxpc2hlciIsIlBhcnNlQ2xvdWRDb2RlUHVibGlzaGVyIiwib25BZnRlclNhdmUiLCJjbGFzc05hbWUiLCJjdXJyZW50T2JqZWN0Iiwib3JpZ2luYWxPYmplY3QiLCJjbGFzc0xldmVsUGVybWlzc2lvbnMiLCJoYXNMaXZlUXVlcnkiLCJyZXEiLCJfbWFrZVB1Ymxpc2hlclJlcXVlc3QiLCJvbkNsb3VkQ29kZUFmdGVyU2F2ZSIsIm9uQWZ0ZXJEZWxldGUiLCJvbkNsb3VkQ29kZUFmdGVyRGVsZXRlIiwidGVzdCIsImNsZWFyQ2FjaGVkUm9sZXMiLCJ1c2VyIiwib25DbGVhckNhY2hlZFJvbGVzIiwib2JqZWN0Iiwib3JpZ2luYWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDTyxNQUFNQSxtQkFBTixDQUEwQjtBQUkvQkMsRUFBQUEsV0FBVyxDQUFDQyxNQUFELEVBQTRCO0FBQ3JDO0FBQ0EsUUFBSSxDQUFDQSxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxVQUF2QixFQUFtQztBQUNqQyxXQUFLQSxVQUFMLEdBQWtCLElBQUlDLEdBQUosRUFBbEI7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDQyxVQUFQLFlBQTZCRSxLQUFqQyxFQUF3QztBQUM3QyxZQUFNRixVQUFVLEdBQUdELE1BQU0sQ0FBQ0MsVUFBUCxDQUFrQkcsR0FBbEIsQ0FBc0JDLElBQUksSUFBSTtBQUMvQyxjQUFNQyxLQUFLLEdBQUcsNEJBQWFELElBQWIsQ0FBZDs7QUFDQSxlQUFPLElBQUlFLE1BQUosQ0FBWSxJQUFHRCxLQUFNLEdBQXJCLENBQVA7QUFDRCxPQUhrQixDQUFuQjtBQUlBLFdBQUtMLFVBQUwsR0FBa0IsSUFBSUMsR0FBSixDQUFRRCxVQUFSLENBQWxCO0FBQ0QsS0FOTSxNQU1BO0FBQ0wsWUFBTSxnREFBTjtBQUNEOztBQUNELFNBQUtPLGtCQUFMLEdBQTBCLElBQUlDLGdEQUFKLENBQTRCVCxNQUE1QixDQUExQjtBQUNEOztBQUVEVSxFQUFBQSxXQUFXLENBQ1RDLFNBRFMsRUFFVEMsYUFGUyxFQUdUQyxjQUhTLEVBSVRDLHFCQUpTLEVBS1Q7QUFDQSxRQUFJLENBQUMsS0FBS0MsWUFBTCxDQUFrQkosU0FBbEIsQ0FBTCxFQUFtQztBQUNqQztBQUNEOztBQUNELFVBQU1LLEdBQUcsR0FBRyxLQUFLQyxxQkFBTCxDQUEyQkwsYUFBM0IsRUFBMENDLGNBQTFDLEVBQTBEQyxxQkFBMUQsQ0FBWjs7QUFDQSxTQUFLTixrQkFBTCxDQUF3QlUsb0JBQXhCLENBQTZDRixHQUE3QztBQUNEOztBQUVERyxFQUFBQSxhQUFhLENBQ1hSLFNBRFcsRUFFWEMsYUFGVyxFQUdYQyxjQUhXLEVBSVhDLHFCQUpXLEVBS1g7QUFDQSxRQUFJLENBQUMsS0FBS0MsWUFBTCxDQUFrQkosU0FBbEIsQ0FBTCxFQUFtQztBQUNqQztBQUNEOztBQUNELFVBQU1LLEdBQUcsR0FBRyxLQUFLQyxxQkFBTCxDQUEyQkwsYUFBM0IsRUFBMENDLGNBQTFDLEVBQTBEQyxxQkFBMUQsQ0FBWjs7QUFDQSxTQUFLTixrQkFBTCxDQUF3Qlksc0JBQXhCLENBQStDSixHQUEvQztBQUNEOztBQUVERCxFQUFBQSxZQUFZLENBQUNKLFNBQUQsRUFBNkI7QUFDdkMsU0FBSyxNQUFNTixJQUFYLElBQW1CLEtBQUtKLFVBQXhCLEVBQW9DO0FBQ2xDLFVBQUlJLElBQUksQ0FBQ2dCLElBQUwsQ0FBVVYsU0FBVixDQUFKLEVBQTBCO0FBQ3hCLGVBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBRURXLEVBQUFBLGdCQUFnQixDQUFDQyxJQUFELEVBQVk7QUFDMUIsUUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVDtBQUNEOztBQUNELFdBQU8sS0FBS2Ysa0JBQUwsQ0FBd0JnQixrQkFBeEIsQ0FBMkNELElBQTNDLENBQVA7QUFDRDs7QUFFRE4sRUFBQUEscUJBQXFCLENBQUNMLGFBQUQsRUFBcUJDLGNBQXJCLEVBQTBDQyxxQkFBMUMsRUFBNEU7QUFDL0YsVUFBTUUsR0FBRyxHQUFHO0FBQ1ZTLE1BQUFBLE1BQU0sRUFBRWI7QUFERSxLQUFaOztBQUdBLFFBQUlBLGFBQUosRUFBbUI7QUFDakJJLE1BQUFBLEdBQUcsQ0FBQ1UsUUFBSixHQUFlYixjQUFmO0FBQ0Q7O0FBQ0QsUUFBSUMscUJBQUosRUFBMkI7QUFDekJFLE1BQUFBLEdBQUcsQ0FBQ0YscUJBQUosR0FBNEJBLHFCQUE1QjtBQUNEOztBQUNELFdBQU9FLEdBQVA7QUFDRDs7QUF6RThCOzs7ZUE0RWxCbEIsbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZUNsb3VkQ29kZVB1Ymxpc2hlciB9IGZyb20gJy4uL0xpdmVRdWVyeS9QYXJzZUNsb3VkQ29kZVB1Ymxpc2hlcic7XG5pbXBvcnQgeyBMaXZlUXVlcnlPcHRpb25zIH0gZnJvbSAnLi4vT3B0aW9ucyc7XG5pbXBvcnQgeyBnZXRDbGFzc05hbWUgfSBmcm9tICcuLy4uL3RyaWdnZXJzJztcbmV4cG9ydCBjbGFzcyBMaXZlUXVlcnlDb250cm9sbGVyIHtcbiAgY2xhc3NOYW1lczogYW55O1xuICBsaXZlUXVlcnlQdWJsaXNoZXI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6ID9MaXZlUXVlcnlPcHRpb25zKSB7XG4gICAgLy8gSWYgY29uZmlnIGlzIGVtcHR5LCB3ZSBqdXN0IGFzc3VtZSBubyBjbGFzc3MgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBhcyBMaXZlUXVlcnlcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmNsYXNzTmFtZXMpIHtcbiAgICAgIHRoaXMuY2xhc3NOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5jbGFzc05hbWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjb25maWcuY2xhc3NOYW1lcy5tYXAobmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IF9uYW1lID0gZ2V0Q2xhc3NOYW1lKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7X25hbWV9JGApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNsYXNzTmFtZXMgPSBuZXcgU2V0KGNsYXNzTmFtZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAnbGl2ZVF1ZXJ5LmNsYXNzZXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHN0cmluZyc7XG4gICAgfVxuICAgIHRoaXMubGl2ZVF1ZXJ5UHVibGlzaGVyID0gbmV3IFBhcnNlQ2xvdWRDb2RlUHVibGlzaGVyKGNvbmZpZyk7XG4gIH1cblxuICBvbkFmdGVyU2F2ZShcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50T2JqZWN0OiBhbnksXG4gICAgb3JpZ2luYWxPYmplY3Q6IGFueSxcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM6ID9hbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpdmVRdWVyeShjbGFzc05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlcSA9IHRoaXMuX21ha2VQdWJsaXNoZXJSZXF1ZXN0KGN1cnJlbnRPYmplY3QsIG9yaWdpbmFsT2JqZWN0LCBjbGFzc0xldmVsUGVybWlzc2lvbnMpO1xuICAgIHRoaXMubGl2ZVF1ZXJ5UHVibGlzaGVyLm9uQ2xvdWRDb2RlQWZ0ZXJTYXZlKHJlcSk7XG4gIH1cblxuICBvbkFmdGVyRGVsZXRlKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIGN1cnJlbnRPYmplY3Q6IGFueSxcbiAgICBvcmlnaW5hbE9iamVjdDogYW55LFxuICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9uczogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5oYXNMaXZlUXVlcnkoY2xhc3NOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXEgPSB0aGlzLl9tYWtlUHVibGlzaGVyUmVxdWVzdChjdXJyZW50T2JqZWN0LCBvcmlnaW5hbE9iamVjdCwgY2xhc3NMZXZlbFBlcm1pc3Npb25zKTtcbiAgICB0aGlzLmxpdmVRdWVyeVB1Ymxpc2hlci5vbkNsb3VkQ29kZUFmdGVyRGVsZXRlKHJlcSk7XG4gIH1cblxuICBoYXNMaXZlUXVlcnkoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5jbGFzc05hbWVzKSB7XG4gICAgICBpZiAobmFtZS50ZXN0KGNsYXNzTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyQ2FjaGVkUm9sZXModXNlcjogYW55KSB7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxpdmVRdWVyeVB1Ymxpc2hlci5vbkNsZWFyQ2FjaGVkUm9sZXModXNlcik7XG4gIH1cblxuICBfbWFrZVB1Ymxpc2hlclJlcXVlc3QoY3VycmVudE9iamVjdDogYW55LCBvcmlnaW5hbE9iamVjdDogYW55LCBjbGFzc0xldmVsUGVybWlzc2lvbnM6ID9hbnkpOiBhbnkge1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIG9iamVjdDogY3VycmVudE9iamVjdCxcbiAgICB9O1xuICAgIGlmIChjdXJyZW50T2JqZWN0KSB7XG4gICAgICByZXEub3JpZ2luYWwgPSBvcmlnaW5hbE9iamVjdDtcbiAgICB9XG4gICAgaWYgKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucykge1xuICAgICAgcmVxLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgcmV0dXJuIHJlcTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXZlUXVlcnlDb250cm9sbGVyO1xuIl19
|