@kaspernj/api-maker 1.0.2035 → 1.0.2036

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.
@@ -78,8 +78,23 @@ export default class ApiMakerCollection {
78
78
  groupBy: newGroupBy
79
79
  });
80
80
  }
81
+ async ensureLoaded() {
82
+ if (!this.isLoaded()) {
83
+ const models = await this.toArray();
84
+ this.set(models);
85
+ }
86
+ return this.loaded();
87
+ }
81
88
  isLoaded() {
82
- if (this.args.reflectionName in this.args.model.relationshipsCache) return true;
89
+ const {
90
+ model,
91
+ reflectionName
92
+ } = this.args;
93
+ if (reflectionName in model.relationshipsCache) {
94
+ return true;
95
+ } else if (reflectionName in model.relationships) {
96
+ return true;
97
+ }
83
98
  return false;
84
99
  }
85
100
  limit(amount) {
@@ -121,10 +136,16 @@ export default class ApiMakerCollection {
121
136
 
122
137
  // Pushes another model onto the given collection.
123
138
  push(newModel) {
124
- if (!(this.args.reflectionName in this.args.model.relationships)) {
125
- this.args.model.relationships[this.args.reflectionName] = [];
139
+ const {
140
+ model,
141
+ reflectionName
142
+ } = this.args;
143
+ if (!(reflectionName in model.relationships)) {
144
+ model.relationships[reflectionName] = [];
145
+ }
146
+ if (!model.relationships[reflectionName].includes(newModel)) {
147
+ model.relationships[reflectionName].push(newModel);
126
148
  }
127
- this.args.model.relationships[this.args.reflectionName].push(newModel);
128
149
  }
129
150
 
130
151
  // Array shortcuts
@@ -147,6 +168,15 @@ export default class ApiMakerCollection {
147
168
  pageKey
148
169
  });
149
170
  }
171
+ isFiltered() {
172
+ const {
173
+ queryArgs
174
+ } = this;
175
+ if (queryArgs.accessibleBy || queryArgs.count || queryArgs.limit || queryArgs.page || queryArgs.params || queryArgs.per || queryArgs.ransack || queryArgs.search) {
176
+ return true;
177
+ }
178
+ return false;
179
+ }
150
180
  params() {
151
181
  let params = {};
152
182
  if (this.queryArgs.params) params = incorporate(params, this.queryArgs.params);
@@ -277,4 +307,4 @@ export default class ApiMakerCollection {
277
307
  }, {});
278
308
  }
279
309
  }
280
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJDb21tYW5kc1Bvb2wiLCJkaWdnIiwiaW5mbGVjdGlvbiIsImluY29ycG9yYXRlIiwibW9kZWxDbGFzc1JlcXVpcmUiLCJSZXN1bHQiLCJ1bmlxdW5pemUiLCJBcGlNYWtlckNvbGxlY3Rpb24iLCJhcGlNYWtlclR5cGUiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJxdWVyeUFyZ3MiLCJhYmlsaXRpZXMiLCJvcmlnaW5hbEFiaWxpdGllcyIsIm5ld0FiaWxpdGllcyIsIm9yaWdpbmFsQWJpbGl0eU5hbWUiLCJuZXdNb2RlbE5hbWUiLCJ1bmRlcnNjb3JlIiwibmV3VmFsdWVzIiwib3JpZ2luYWxWYWx1ZXMiLCJuZXdBYmlsaXR5TmFtZSIsInB1c2giLCJfbWVyZ2UiLCJhY2Nlc3NpYmxlQnkiLCJhYmlsaXR5TmFtZSIsImNvdW50IiwicmVzcG9uc2UiLCJjbG9uZSIsIl9yZXNwb25zZSIsImRpc3RpbmN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJyYXkiLCJ0b0FycmF5IiwibW9kZWwiLCJjYWxsIiwiZXhjZXB0Iiwia2V5cyIsImtleSIsIkVycm9yIiwiZmlyc3QiLCJtb2RlbHMiLCJncm91cEJ5IiwiYXJyYXlPZlRhYmxlc0FuZENvbHVtbnMiLCJhcnJheU9mVGFibGVzQW5kQ29sdW1uc1dpdGhMb3dlcmNhc2VDb2x1bW5zIiwibWFwIiwidGFibGVBbmRDb2x1bW4iLCJBcnJheSIsImlzQXJyYXkiLCJ0b0xvd2VyQ2FzZSIsImN1cnJlbnRHcm91cEJ5IiwibmV3R3JvdXBCeSIsImNvbmNhdCIsImlzTG9hZGVkIiwicmVmbGVjdGlvbk5hbWUiLCJyZWxhdGlvbnNoaXBzQ2FjaGUiLCJsaW1pdCIsImFtb3VudCIsInByZWxvYWRlZCIsImxvYWRlZCIsInJlbGF0aW9uc2hpcHMiLCJpc05ld1JlY29yZCIsInJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSIsInNldCIsInJlbGF0aW9uc2hpcHNMb2FkZWQiLCJPYmplY3QiLCJtb2RlbENsYXNzRGF0YSIsIm5hbWUiLCJqb2luIiwibmV3Q29sbGVjdGlvbiIsIm5ld01vZGVsIiwiZmluZCIsImZvckVhY2giLCJwcmVsb2FkIiwicHJlbG9hZFZhbHVlIiwicGFnZSIsInBhZ2VLZXkiLCJwYXJhbXMiLCJhY2Nlc3NpYmxlX2J5IiwiZ3JvdXBfYnkiLCJyYW5zYWNrIiwicSIsInBlciIsInNlYXJjaCIsInNlbGVjdCIsInNlbGVjdENvbHVtbnMiLCJzZWxlY3RfY29sdW1ucyIsInBlcktleSIsInJlc3VsdCIsIl9hZGRRdWVyeVRvTW9kZWxzIiwiY29sbGVjdGlvbiIsInNlYXJjaEtleSIsIm9yaWdpbmFsU2VsZWN0IiwibmV3U2VsZWN0Iiwib3JpZ2luYWxNb2RlbE5hbWUiLCJvcmlnaW5hbEF0dHJpYnV0ZU5hbWUiLCJuZXdBdHRyaWJ1dGVOYW1lIiwic29ydCIsInNvcnRCeSIsInMiLCJtb2RlbENsYXNzIiwibW9kZWxOYW1lIiwiY2xvbmVkUXVlcnlBcmdzIiwibmV3UXVlcnlBcmdzIiwiYWRkQ29tbWFuZCIsImNvbW1hbmQiLCJjb2xsZWN0aW9uTmFtZSIsInR5cGUiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGVjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmVEZWVwIGZyb20gXCJjbG9uZS1kZWVwXCJcbmltcG9ydCBDb21tYW5kc1Bvb2wgZnJvbSBcIi4vY29tbWFuZHMtcG9vbFwiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBSZXN1bHQgZnJvbSBcIi4vcmVzdWx0XCJcbmltcG9ydCB1bmlxdW5pemUgZnJvbSBcInVuaXF1bml6ZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ29sbGVjdGlvbiB7XG4gIHN0YXRpYyBhcGlNYWtlclR5cGUgPSBcIkNvbGxlY3Rpb25cIlxuXG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHF1ZXJ5QXJncyA9IHt9KSB7XG4gICAgdGhpcy5xdWVyeUFyZ3MgPSBxdWVyeUFyZ3NcbiAgICB0aGlzLmFyZ3MgPSBhcmdzXG4gIH1cblxuICBhYmlsaXRpZXMob3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICBjb25zdCBuZXdBYmlsaXRpZXMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIGluIG9yaWdpbmFsQWJpbGl0aWVzKSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBYmlsaXR5TmFtZSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsQWJpbGl0aWVzW29yaWdpbmFsQWJpbGl0eU5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBYmlsaXR5TmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBYmlsaXR5TmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBYmlsaXR5TmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3QWJpbGl0aWVzW25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FiaWxpdGllczogbmV3QWJpbGl0aWVzfSlcbiAgfVxuXG4gIGFjY2Vzc2libGVCeShhYmlsaXR5TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7YWNjZXNzaWJsZUJ5OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eU5hbWUpfSlcbiAgfVxuXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbG9uZSgpLl9tZXJnZSh7Y291bnQ6IHRydWV9KS5fcmVzcG9uc2UoKVxuXG4gICAgcmV0dXJuIGRpZ2cocmVzcG9uc2UsIFwiY291bnRcIilcbiAgfVxuXG4gIGRpc3RpbmN0KCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7ZGlzdGluY3Q6IHRydWV9KVxuICB9XG5cbiAgYXN5bmMgZWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGFycmF5ID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgbW9kZWwgaW4gYXJyYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobW9kZWwpXG4gICAgfVxuICB9XG5cbiAgZXhjZXB0KC4uLmtleXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoa2V5ID09IFwicGFnZVwiKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJ5QXJnc1trZXldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBrZXk6ICR7a2V5fWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG4gICAgcmV0dXJuIG1vZGVsc1swXVxuICB9XG5cbiAgZ3JvdXBCeSguLi5hcnJheU9mVGFibGVzQW5kQ29sdW1ucykge1xuICAgIGNvbnN0IGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMgPSBhcnJheU9mVGFibGVzQW5kQ29sdW1ucy5tYXAoKHRhYmxlQW5kQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUFuZENvbHVtbikpIHtcbiAgICAgICAgcmV0dXJuIFt0YWJsZUFuZENvbHVtblswXSwgdGFibGVBbmRDb2x1bW5bMV0udG9Mb3dlckNhc2UoKV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0YWJsZUFuZENvbHVtbi50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBjdXJyZW50R3JvdXBCeSA9IHRoaXMucXVlcnlBcmdzLmdyb3VwQnkgfHwgW11cbiAgICBjb25zdCBuZXdHcm91cEJ5ID0gY3VycmVudEdyb3VwQnkuY29uY2F0KGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMpXG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe1xuICAgICAgZ3JvdXBCeTogbmV3R3JvdXBCeVxuICAgIH0pXG4gIH1cblxuICBpc0xvYWRlZCgpIHtcbiAgICBpZiAodGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lIGluIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsaW1pdChhbW91bnQpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2xpbWl0OiBhbW91bnR9KVxuICB9XG5cbiAgcHJlbG9hZGVkKCkge1xuICAgIGlmICghKHRoaXMuYXJncy5yZWZsZWN0aW9uTmFtZSBpbiB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZX0gaGFzbnQgYmVlbiBsb2FkZWQgeWV0YClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVt0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdXG4gIH1cblxuICBsb2FkZWQoKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICByZXR1cm4gbW9kZWwucmVsYXRpb25zaGlwc1tyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZVtyZWZsZWN0aW9uTmFtZV1cbiAgICB9IGVsc2UgaWYgKG1vZGVsLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGNvbnN0IHJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShyZWZsZWN0aW9uTmFtZSlcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhcyBlbXB0eSBhbmQgdHJ5IGFnYWluIHRvIHJldHVybiB0aGUgZW1wdHkgcmVzdWx0XG4gICAgICB0aGlzLnNldChbXSlcblxuICAgICAgcmV0dXJuIGRpZ2cobW9kZWwucmVsYXRpb25zaGlwcywgcmVmbGVjdGlvbk5hbWVVbmRlcnNjb3JlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzTG9hZGVkID0gdW5pcXVuaXplKE9iamVjdC5rZXlzKG1vZGVsLnJlbGF0aW9uc2hpcHMpLmNvbmNhdChPYmplY3Qua2V5cyhtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpKSlcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3JlZmxlY3Rpb25OYW1lfSBoYXNudCBiZWVuIGxvYWRlZCB5ZXQgb24gJHttb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWV9LiBMb2FkZWQgd2FzOiAke3JlbGF0aW9uc2hpcHNMb2FkZWQuam9pbihcIiwgXCIpfWApXG4gICAgfVxuICB9XG5cbiAgLy8gUmVwbGFjZXMgdGhlIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgZ2l2ZW4gbmV3IGNvbGxlY3Rpb24uXG4gIHNldChuZXdDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNbdGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lXSA9IG5ld0NvbGxlY3Rpb25cbiAgfVxuXG4gIC8vIFB1c2hlcyBhbm90aGVyIG1vZGVsIG9udG8gdGhlIGdpdmVuIGNvbGxlY3Rpb24uXG4gIHB1c2gobmV3TW9kZWwpIHtcbiAgICBpZiAoISh0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWUgaW4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc1t0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdID0gW11cbiAgICB9XG5cbiAgICB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc1t0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdLnB1c2gobmV3TW9kZWwpXG4gIH1cblxuICAvLyBBcnJheSBzaG9ydGN1dHNcbiAgZmluZCA9ICguLi5hcmdzKSA9PiB0aGlzLmxvYWRlZCgpLmZpbmQoLi4uYXJncylcbiAgZm9yRWFjaCA9ICguLi5hcmdzKSA9PiB0aGlzLmxvYWRlZCgpLmZvckVhY2goLi4uYXJncylcbiAgbWFwID0gKC4uLmFyZ3MpID0+IHRoaXMubG9hZGVkKCkubWFwKC4uLmFyZ3MpXG5cbiAgcHJlbG9hZChwcmVsb2FkVmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3ByZWxvYWQ6IHByZWxvYWRWYWx1ZX0pXG4gIH1cblxuICBwYWdlKHBhZ2UpIHtcbiAgICBpZiAoIXBhZ2UpXG4gICAgICBwYWdlID0gMVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlfSlcbiAgfVxuXG4gIHBhZ2VLZXkocGFnZUtleSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGFnZUtleX0pXG4gIH1cblxuICBwYXJhbXMoKSB7XG4gICAgbGV0IHBhcmFtcyA9IHt9XG5cbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGFyYW1zKSBwYXJhbXMgPSBpbmNvcnBvcmF0ZShwYXJhbXMsIHRoaXMucXVlcnlBcmdzLnBhcmFtcylcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuYWJpbGl0aWVzKSBwYXJhbXMuYWJpbGl0aWVzID0gdGhpcy5xdWVyeUFyZ3MuYWJpbGl0aWVzXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmFjY2Vzc2libGVCeSkgcGFyYW1zLmFjY2Vzc2libGVfYnkgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5xdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5KVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5jb3VudCkgcGFyYW1zLmNvdW50ID0gdGhpcy5xdWVyeUFyZ3MuY291bnRcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuZGlzdGluY3QpIHBhcmFtcy5kaXN0aW5jdCA9IHRoaXMucXVlcnlBcmdzLmRpc3RpbmN0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmdyb3VwQnkpIHBhcmFtcy5ncm91cF9ieSA9IHRoaXMucXVlcnlBcmdzLmdyb3VwQnlcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucmFuc2FjaykgcGFyYW1zLnEgPSB0aGlzLnF1ZXJ5QXJncy5yYW5zYWNrXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmxpbWl0KSBwYXJhbXMubGltaXQgPSB0aGlzLnF1ZXJ5QXJncy5saW1pdFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wcmVsb2FkKSBwYXJhbXMucHJlbG9hZCA9IHRoaXMucXVlcnlBcmdzLnByZWxvYWRcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGFnZSkgcGFyYW1zLnBhZ2UgPSB0aGlzLnF1ZXJ5QXJncy5wYWdlXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnBlcikgcGFyYW1zLnBlciA9IHRoaXMucXVlcnlBcmdzLnBlclxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWFyY2gpIHBhcmFtcy5zZWFyY2ggPSB0aGlzLnF1ZXJ5QXJncy5zZWFyY2hcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VsZWN0KSBwYXJhbXMuc2VsZWN0ID0gdGhpcy5xdWVyeUFyZ3Muc2VsZWN0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlbGVjdENvbHVtbnMpIHBhcmFtcy5zZWxlY3RfY29sdW1ucyA9IHRoaXMucXVlcnlBcmdzLnNlbGVjdENvbHVtbnNcblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuXG4gIHBlcihwZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3Blcn0pXG4gIH1cblxuICBwZXJLZXkocGVyS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwZXJLZXl9KVxuICB9XG5cbiAgcmFuc2FjayhwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zKSB0aGlzLl9tZXJnZSh7cmFuc2FjazogcGFyYW1zfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYXN5bmMgcmVzdWx0KCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fcmVzcG9uc2UoKVxuICAgIGNvbnN0IG1vZGVscyA9IGRpZ2cocmVzcG9uc2UsIFwiY29sbGVjdGlvblwiKVxuXG4gICAgdGhpcy5fYWRkUXVlcnlUb01vZGVscyhtb2RlbHMpXG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUmVzdWx0KHtjb2xsZWN0aW9uOiB0aGlzLCBtb2RlbHMsIHJlc3BvbnNlfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHNlYXJjaChwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zKSB0aGlzLl9tZXJnZSh7c2VhcmNoOiBwYXJhbXN9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzZWFyY2hLZXkoc2VhcmNoS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWFyY2hLZXl9KVxuICB9XG5cbiAgc2VsZWN0KG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgY29uc3QgbmV3U2VsZWN0ID0ge31cblxuICAgIGZvciAoY29uc3Qgb3JpZ2luYWxNb2RlbE5hbWUgaW4gb3JpZ2luYWxTZWxlY3QpIHtcbiAgICAgIGNvbnN0IG5ld01vZGVsTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbE1vZGVsTmFtZSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsU2VsZWN0W29yaWdpbmFsTW9kZWxOYW1lXVxuXG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQXR0cmlidXRlTmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQXR0cmlidXRlTmFtZSlcbiAgICAgICAgbmV3VmFsdWVzLnB1c2gobmV3QXR0cmlidXRlTmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3U2VsZWN0W25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlbGVjdDogbmV3U2VsZWN0fSlcbiAgfVxuXG4gIHNlbGVjdENvbHVtbnMob3JpZ2luYWxTZWxlY3QpIHtcbiAgICBjb25zdCBuZXdTZWxlY3QgPSB7fVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbE1vZGVsTmFtZSBpbiBvcmlnaW5hbFNlbGVjdCkge1xuICAgICAgY29uc3QgbmV3TW9kZWxOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbE1vZGVsTmFtZSkpXG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBbXVxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBvcmlnaW5hbFNlbGVjdFtvcmlnaW5hbE1vZGVsTmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEF0dHJpYnV0ZU5hbWUgb2Ygb3JpZ2luYWxWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEF0dHJpYnV0ZU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0F0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIG5ld1NlbGVjdFtuZXdNb2RlbE5hbWVdID0gbmV3VmFsdWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWxlY3RDb2x1bW5zOiBuZXdTZWxlY3R9KVxuICB9XG5cbiAgc29ydChzb3J0QnkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3JhbnNhY2s6IHtzOiBzb3J0Qnl9fSlcbiAgfVxuXG4gIGFzeW5jIHRvQXJyYXkoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIG1vZGVsQ2xhc3MoKSB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZGlnZyh0aGlzLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgIHJldHVybiBtb2RlbENsYXNzUmVxdWlyZShtb2RlbE5hbWUpXG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBjbG9uZWRRdWVyeUFyZ3MgPSBjbG9uZURlZXAodGhpcy5xdWVyeUFyZ3MpXG5cbiAgICByZXR1cm4gbmV3IEFwaU1ha2VyQ29sbGVjdGlvbih0aGlzLmFyZ3MsIGNsb25lZFF1ZXJ5QXJncylcbiAgfVxuXG4gIC8vIFRoaXMgaXMgbmVlZGVkIHdoZW4gcmVsb2FkaW5nIGEgdmVyc2lvbiBvZiB0aGUgbW9kZWwgd2l0aCB0aGUgc2FtZSBzZWxlY3RlZCBhdHRyaWJ1dGVzIGFuZCBwcmVsb2Fkc1xuICBfYWRkUXVlcnlUb01vZGVscyhtb2RlbHMpIHtcbiAgICBmb3IoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICBtb2RlbC5jb2xsZWN0aW9uID0gdGhpc1xuICAgIH1cbiAgfVxuXG4gIF9tZXJnZShuZXdRdWVyeUFyZ3MpIHtcbiAgICBpbmNvcnBvcmF0ZSh0aGlzLnF1ZXJ5QXJncywgbmV3UXVlcnlBcmdzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF9yZXNwb25zZSgpIHtcbiAgICBjb25zdCBtb2RlbENsYXNzRGF0YSA9IHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKClcblxuICAgIHJldHVybiBDb21tYW5kc1Bvb2wuYWRkQ29tbWFuZChcbiAgICAgIHtcbiAgICAgICAgYXJnczogdGhpcy5wYXJhbXMoKSxcbiAgICAgICAgY29tbWFuZDogYCR7bW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWV9LWluZGV4YCxcbiAgICAgICAgY29sbGVjdGlvbk5hbWU6IG1vZGVsQ2xhc3NEYXRhLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICB0eXBlOiBcImluZGV4XCJcbiAgICAgIH0sXG4gICAgICB7fVxuICAgIClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxTQUFTLE1BQU0sWUFBWTtBQUNsQyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLFNBQVFDLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsU0FBUUMsV0FBVyxRQUFPLGNBQWM7QUFDeEMsT0FBT0MsaUJBQWlCLE1BQU0sdUJBQXVCO0FBQ3JELE9BQU9DLE1BQU0sTUFBTSxVQUFVO0FBQzdCLE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBRWpDLGVBQWUsTUFBTUMsa0JBQWtCLENBQUM7RUFDdEMsT0FBT0MsWUFBWSxHQUFHLFlBQVk7RUFFbENDLFdBQVdBLENBQUNDLElBQUksRUFBRUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2hDLElBQUksQ0FBQ0EsU0FBUyxHQUFHQSxTQUFTO0lBQzFCLElBQUksQ0FBQ0QsSUFBSSxHQUFHQSxJQUFJO0VBQ2xCO0VBRUFFLFNBQVNBLENBQUNDLGlCQUFpQixFQUFFO0lBQzNCLE1BQU1DLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFdkIsS0FBSyxNQUFNQyxtQkFBbUIsSUFBSUYsaUJBQWlCLEVBQUU7TUFDbkQsTUFBTUcsWUFBWSxHQUFHZCxVQUFVLENBQUNlLFVBQVUsQ0FBQ0Ys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
310
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJDb21tYW5kc1Bvb2wiLCJkaWdnIiwiaW5mbGVjdGlvbiIsImluY29ycG9yYXRlIiwibW9kZWxDbGFzc1JlcXVpcmUiLCJSZXN1bHQiLCJ1bmlxdW5pemUiLCJBcGlNYWtlckNvbGxlY3Rpb24iLCJhcGlNYWtlclR5cGUiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJxdWVyeUFyZ3MiLCJhYmlsaXRpZXMiLCJvcmlnaW5hbEFiaWxpdGllcyIsIm5ld0FiaWxpdGllcyIsIm9yaWdpbmFsQWJpbGl0eU5hbWUiLCJuZXdNb2RlbE5hbWUiLCJ1bmRlcnNjb3JlIiwibmV3VmFsdWVzIiwib3JpZ2luYWxWYWx1ZXMiLCJuZXdBYmlsaXR5TmFtZSIsInB1c2giLCJfbWVyZ2UiLCJhY2Nlc3NpYmxlQnkiLCJhYmlsaXR5TmFtZSIsImNvdW50IiwicmVzcG9uc2UiLCJjbG9uZSIsIl9yZXNwb25zZSIsImRpc3RpbmN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJyYXkiLCJ0b0FycmF5IiwibW9kZWwiLCJjYWxsIiwiZXhjZXB0Iiwia2V5cyIsImtleSIsIkVycm9yIiwiZmlyc3QiLCJtb2RlbHMiLCJncm91cEJ5IiwiYXJyYXlPZlRhYmxlc0FuZENvbHVtbnMiLCJhcnJheU9mVGFibGVzQW5kQ29sdW1uc1dpdGhMb3dlcmNhc2VDb2x1bW5zIiwibWFwIiwidGFibGVBbmRDb2x1bW4iLCJBcnJheSIsImlzQXJyYXkiLCJ0b0xvd2VyQ2FzZSIsImN1cnJlbnRHcm91cEJ5IiwibmV3R3JvdXBCeSIsImNvbmNhdCIsImVuc3VyZUxvYWRlZCIsImlzTG9hZGVkIiwic2V0IiwibG9hZGVkIiwicmVmbGVjdGlvbk5hbWUiLCJyZWxhdGlvbnNoaXBzQ2FjaGUiLCJyZWxhdGlvbnNoaXBzIiwibGltaXQiLCJhbW91bnQiLCJwcmVsb2FkZWQiLCJpc05ld1JlY29yZCIsInJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSIsInJlbGF0aW9uc2hpcHNMb2FkZWQiLCJPYmplY3QiLCJtb2RlbENsYXNzRGF0YSIsIm5hbWUiLCJqb2luIiwibmV3Q29sbGVjdGlvbiIsIm5ld01vZGVsIiwiaW5jbHVkZXMiLCJmaW5kIiwiZm9yRWFjaCIsInByZWxvYWQiLCJwcmVsb2FkVmFsdWUiLCJwYWdlIiwicGFnZUtleSIsImlzRmlsdGVyZWQiLCJwYXJhbXMiLCJwZXIiLCJyYW5zYWNrIiwic2VhcmNoIiwiYWNjZXNzaWJsZV9ieSIsImdyb3VwX2J5IiwicSIsInNlbGVjdCIsInNlbGVjdENvbHVtbnMiLCJzZWxlY3RfY29sdW1ucyIsInBlcktleSIsInJlc3VsdCIsIl9hZGRRdWVyeVRvTW9kZWxzIiwiY29sbGVjdGlvbiIsInNlYXJjaEtleSIsIm9yaWdpbmFsU2VsZWN0IiwibmV3U2VsZWN0Iiwib3JpZ2luYWxNb2RlbE5hbWUiLCJvcmlnaW5hbEF0dHJpYnV0ZU5hbWUiLCJuZXdBdHRyaWJ1dGVOYW1lIiwic29ydCIsInNvcnRCeSIsInMiLCJtb2RlbENsYXNzIiwibW9kZWxOYW1lIiwiY2xvbmVkUXVlcnlBcmdzIiwibmV3UXVlcnlBcmdzIiwiYWRkQ29tbWFuZCIsImNvbW1hbmQiLCJjb2xsZWN0aW9uTmFtZSIsInR5cGUiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGVjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmVEZWVwIGZyb20gXCJjbG9uZS1kZWVwXCJcbmltcG9ydCBDb21tYW5kc1Bvb2wgZnJvbSBcIi4vY29tbWFuZHMtcG9vbFwiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBSZXN1bHQgZnJvbSBcIi4vcmVzdWx0XCJcbmltcG9ydCB1bmlxdW5pemUgZnJvbSBcInVuaXF1bml6ZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ29sbGVjdGlvbiB7XG4gIHN0YXRpYyBhcGlNYWtlclR5cGUgPSBcIkNvbGxlY3Rpb25cIlxuXG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHF1ZXJ5QXJncyA9IHt9KSB7XG4gICAgdGhpcy5xdWVyeUFyZ3MgPSBxdWVyeUFyZ3NcbiAgICB0aGlzLmFyZ3MgPSBhcmdzXG4gIH1cblxuICBhYmlsaXRpZXMob3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICBjb25zdCBuZXdBYmlsaXRpZXMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIGluIG9yaWdpbmFsQWJpbGl0aWVzKSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBYmlsaXR5TmFtZSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsQWJpbGl0aWVzW29yaWdpbmFsQWJpbGl0eU5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBYmlsaXR5TmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBYmlsaXR5TmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBYmlsaXR5TmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3QWJpbGl0aWVzW25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe2FiaWxpdGllczogbmV3QWJpbGl0aWVzfSlcbiAgfVxuXG4gIGFjY2Vzc2libGVCeShhYmlsaXR5TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7YWNjZXNzaWJsZUJ5OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eU5hbWUpfSlcbiAgfVxuXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbG9uZSgpLl9tZXJnZSh7Y291bnQ6IHRydWV9KS5fcmVzcG9uc2UoKVxuXG4gICAgcmV0dXJuIGRpZ2cocmVzcG9uc2UsIFwiY291bnRcIilcbiAgfVxuXG4gIGRpc3RpbmN0KCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7ZGlzdGluY3Q6IHRydWV9KVxuICB9XG5cbiAgYXN5bmMgZWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGFycmF5ID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgbW9kZWwgaW4gYXJyYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobW9kZWwpXG4gICAgfVxuICB9XG5cbiAgZXhjZXB0KC4uLmtleXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoa2V5ID09IFwicGFnZVwiKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJ5QXJnc1trZXldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBrZXk6ICR7a2V5fWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG4gICAgcmV0dXJuIG1vZGVsc1swXVxuICB9XG5cbiAgZ3JvdXBCeSguLi5hcnJheU9mVGFibGVzQW5kQ29sdW1ucykge1xuICAgIGNvbnN0IGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMgPSBhcnJheU9mVGFibGVzQW5kQ29sdW1ucy5tYXAoKHRhYmxlQW5kQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUFuZENvbHVtbikpIHtcbiAgICAgICAgcmV0dXJuIFt0YWJsZUFuZENvbHVtblswXSwgdGFibGVBbmRDb2x1bW5bMV0udG9Mb3dlckNhc2UoKV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0YWJsZUFuZENvbHVtbi50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBjdXJyZW50R3JvdXBCeSA9IHRoaXMucXVlcnlBcmdzLmdyb3VwQnkgfHwgW11cbiAgICBjb25zdCBuZXdHcm91cEJ5ID0gY3VycmVudEdyb3VwQnkuY29uY2F0KGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zV2l0aExvd2VyY2FzZUNvbHVtbnMpXG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe1xuICAgICAgZ3JvdXBCeTogbmV3R3JvdXBCeVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBlbnN1cmVMb2FkZWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICAgIHRoaXMuc2V0KG1vZGVscylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkZWQoKVxuICB9XG5cbiAgaXNMb2FkZWQoKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGltaXQoYW1vdW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtsaW1pdDogYW1vdW50fSlcbiAgfVxuXG4gIHByZWxvYWRlZCgpIHtcbiAgICBpZiAoISh0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWUgaW4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWV9IGhhc250IGJlZW4gbG9hZGVkIHlldGApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGVbdGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lXVxuICB9XG5cbiAgbG9hZGVkKCkge1xuICAgIGNvbnN0IHttb2RlbCwgcmVmbGVjdGlvbk5hbWV9ID0gdGhpcy5hcmdzXG5cbiAgICBpZiAocmVmbGVjdGlvbk5hbWUgaW4gbW9kZWwucmVsYXRpb25zaGlwcykge1xuICAgICAgcmV0dXJuIG1vZGVsLnJlbGF0aW9uc2hpcHNbcmVmbGVjdGlvbk5hbWVdXG4gICAgfSBlbHNlIGlmIChyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpIHtcbiAgICAgIHJldHVybiBtb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGVbcmVmbGVjdGlvbk5hbWVdXG4gICAgfSBlbHNlIGlmIChtb2RlbC5pc05ld1JlY29yZCgpKSB7XG4gICAgICBjb25zdCByZWZsZWN0aW9uTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmbGVjdGlvbk5hbWUpXG5cbiAgICAgIC8vIEluaXRpYWxpemUgYXMgZW1wdHkgYW5kIHRyeSBhZ2FpbiB0byByZXR1cm4gdGhlIGVtcHR5IHJlc3VsdFxuICAgICAgdGhpcy5zZXQoW10pXG5cbiAgICAgIHJldHVybiBkaWdnKG1vZGVsLnJlbGF0aW9uc2hpcHMsIHJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwc0xvYWRlZCA9IHVuaXF1bml6ZShPYmplY3Qua2V5cyhtb2RlbC5yZWxhdGlvbnNoaXBzKS5jb25jYXQoT2JqZWN0LmtleXMobW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSkpXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWZsZWN0aW9uTmFtZX0gaGFzbnQgYmVlbiBsb2FkZWQgeWV0IG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfS4gTG9hZGVkIHdhczogJHtyZWxhdGlvbnNoaXBzTG9hZGVkLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlcGxhY2VzIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggdGhlIGdpdmVuIG5ldyBjb2xsZWN0aW9uLlxuICBzZXQobmV3Q29sbGVjdGlvbikge1xuICAgIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV0gPSBuZXdDb2xsZWN0aW9uXG4gIH1cblxuICAvLyBQdXNoZXMgYW5vdGhlciBtb2RlbCBvbnRvIHRoZSBnaXZlbiBjb2xsZWN0aW9uLlxuICBwdXNoKG5ld01vZGVsKSB7XG4gICAgY29uc3Qge21vZGVsLCByZWZsZWN0aW9uTmFtZX0gPSB0aGlzLmFyZ3NcblxuICAgIGlmICghKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXSA9IFtdXG4gICAgfVxuXG4gICAgaWYgKCFtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXS5pbmNsdWRlcyhuZXdNb2RlbCkpIHtcbiAgICAgIG1vZGVsLnJlbGF0aW9uc2hpcHNbcmVmbGVjdGlvbk5hbWVdLnB1c2gobmV3TW9kZWwpXG4gICAgfVxuICB9XG5cbiAgLy8gQXJyYXkgc2hvcnRjdXRzXG4gIGZpbmQgPSAoLi4uYXJncykgPT4gdGhpcy5sb2FkZWQoKS5maW5kKC4uLmFyZ3MpXG4gIGZvckVhY2ggPSAoLi4uYXJncykgPT4gdGhpcy5sb2FkZWQoKS5mb3JFYWNoKC4uLmFyZ3MpXG4gIG1hcCA9ICguLi5hcmdzKSA9PiB0aGlzLmxvYWRlZCgpLm1hcCguLi5hcmdzKVxuXG4gIHByZWxvYWQocHJlbG9hZFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwcmVsb2FkOiBwcmVsb2FkVmFsdWV9KVxuICB9XG5cbiAgcGFnZShwYWdlKSB7XG4gICAgaWYgKCFwYWdlKSBwYWdlID0gMVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlfSlcbiAgfVxuXG4gIHBhZ2VLZXkocGFnZUtleSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGFnZUtleX0pXG4gIH1cblxuICBpc0ZpbHRlcmVkKCkge1xuICAgIGNvbnN0IHtxdWVyeUFyZ3N9ID0gdGhpc1xuXG4gICAgaWYgKFxuICAgICAgcXVlcnlBcmdzLmFjY2Vzc2libGVCeSB8fFxuICAgICAgcXVlcnlBcmdzLmNvdW50IHx8XG4gICAgICBxdWVyeUFyZ3MubGltaXQgfHxcbiAgICAgIHF1ZXJ5QXJncy5wYWdlIHx8XG4gICAgICBxdWVyeUFyZ3MucGFyYW1zIHx8XG4gICAgICBxdWVyeUFyZ3MucGVyIHx8XG4gICAgICBxdWVyeUFyZ3MucmFuc2FjayB8fFxuICAgICAgcXVlcnlBcmdzLnNlYXJjaFxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHBhcmFtcygpIHtcbiAgICBsZXQgcGFyYW1zID0ge31cblxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYXJhbXMpIHBhcmFtcyA9IGluY29ycG9yYXRlKHBhcmFtcywgdGhpcy5xdWVyeUFyZ3MucGFyYW1zKVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXMpIHBhcmFtcy5hYmlsaXRpZXMgPSB0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXNcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5KSBwYXJhbXMuYWNjZXNzaWJsZV9ieSA9IGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLnF1ZXJ5QXJncy5hY2Nlc3NpYmxlQnkpXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmNvdW50KSBwYXJhbXMuY291bnQgPSB0aGlzLnF1ZXJ5QXJncy5jb3VudFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5kaXN0aW5jdCkgcGFyYW1zLmRpc3RpbmN0ID0gdGhpcy5xdWVyeUFyZ3MuZGlzdGluY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSkgcGFyYW1zLmdyb3VwX2J5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5yYW5zYWNrKSBwYXJhbXMucSA9IHRoaXMucXVlcnlBcmdzLnJhbnNhY2tcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MubGltaXQpIHBhcmFtcy5saW1pdCA9IHRoaXMucXVlcnlBcmdzLmxpbWl0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnByZWxvYWQpIHBhcmFtcy5wcmVsb2FkID0gdGhpcy5xdWVyeUFyZ3MucHJlbG9hZFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYWdlKSBwYXJhbXMucGFnZSA9IHRoaXMucXVlcnlBcmdzLnBhZ2VcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGVyKSBwYXJhbXMucGVyID0gdGhpcy5xdWVyeUFyZ3MucGVyXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlYXJjaCkgcGFyYW1zLnNlYXJjaCA9IHRoaXMucXVlcnlBcmdzLnNlYXJjaFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWxlY3QpIHBhcmFtcy5zZWxlY3QgPSB0aGlzLnF1ZXJ5QXJncy5zZWxlY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1ucykgcGFyYW1zLnNlbGVjdF9jb2x1bW5zID0gdGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1uc1xuXG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgcGVyKHBlcikge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGVyfSlcbiAgfVxuXG4gIHBlcktleShwZXJLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3BlcktleX0pXG4gIH1cblxuICByYW5zYWNrKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtyYW5zYWNrOiBwYXJhbXN9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBhc3luYyByZXN1bHQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXN1bHQoe2NvbGxlY3Rpb246IHRoaXMsIG1vZGVscywgcmVzcG9uc2V9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgc2VhcmNoKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtzZWFyY2g6IHBhcmFtc30pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHNlYXJjaEtleShzZWFyY2hLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlYXJjaEtleX0pXG4gIH1cblxuICBzZWxlY3Qob3JpZ2luYWxTZWxlY3QpIHtcbiAgICBjb25zdCBuZXdTZWxlY3QgPSB7fVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbE1vZGVsTmFtZSBpbiBvcmlnaW5hbFNlbGVjdCkge1xuICAgICAgY29uc3QgbmV3TW9kZWxOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKVxuICAgICAgY29uc3QgbmV3VmFsdWVzID0gW11cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gb3JpZ2luYWxTZWxlY3Rbb3JpZ2luYWxNb2RlbE5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBdHRyaWJ1dGVOYW1lIG9mIG9yaWdpbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZU5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBdHRyaWJ1dGVOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBdHRyaWJ1dGVOYW1lKVxuICAgICAgfVxuXG4gICAgICBuZXdTZWxlY3RbbmV3TW9kZWxOYW1lXSA9IG5ld1ZhbHVlc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7c2VsZWN0OiBuZXdTZWxlY3R9KVxuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsU2VsZWN0W29yaWdpbmFsTW9kZWxOYW1lXVxuXG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQXR0cmlidXRlTmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQXR0cmlidXRlTmFtZSlcbiAgICAgICAgbmV3VmFsdWVzLnB1c2gobmV3QXR0cmlidXRlTmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3U2VsZWN0W25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlbGVjdENvbHVtbnM6IG5ld1NlbGVjdH0pXG4gIH1cblxuICBzb3J0KHNvcnRCeSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cmFuc2Fjazoge3M6IHNvcnRCeX19KVxuICB9XG5cbiAgYXN5bmMgdG9BcnJheSgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3Jlc3BvbnNlKClcbiAgICBjb25zdCBtb2RlbHMgPSBkaWdnKHJlc3BvbnNlLCBcImNvbGxlY3Rpb25cIilcblxuICAgIHRoaXMuX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKVxuXG4gICAgcmV0dXJuIG1vZGVsc1xuICB9XG5cbiAgbW9kZWxDbGFzcygpIHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBkaWdnKHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3NSZXF1aXJlKG1vZGVsTmFtZSlcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGNsb25lZFF1ZXJ5QXJncyA9IGNsb25lRGVlcCh0aGlzLnF1ZXJ5QXJncylcblxuICAgIHJldHVybiBuZXcgQXBpTWFrZXJDb2xsZWN0aW9uKHRoaXMuYXJncywgY2xvbmVkUXVlcnlBcmdzKVxuICB9XG5cbiAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiByZWxvYWRpbmcgYSB2ZXJzaW9uIG9mIHRoZSBtb2RlbCB3aXRoIHRoZSBzYW1lIHNlbGVjdGVkIGF0dHJpYnV0ZXMgYW5kIHByZWxvYWRzXG4gIF9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscykge1xuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICBtb2RlbC5jb2xsZWN0aW9uID0gdGhpc1xuICAgIH1cbiAgfVxuXG4gIF9tZXJnZShuZXdRdWVyeUFyZ3MpIHtcbiAgICBpbmNvcnBvcmF0ZSh0aGlzLnF1ZXJ5QXJncywgbmV3UXVlcnlBcmdzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF9yZXNwb25zZSgpIHtcbiAgICBjb25zdCBtb2RlbENsYXNzRGF0YSA9IHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKClcblxuICAgIHJldHVybiBDb21tYW5kc1Bvb2wuYWRkQ29tbWFuZChcbiAgICAgIHtcbiAgICAgICAgYXJnczogdGhpcy5wYXJhbXMoKSxcbiAgICAgICAgY29tbWFuZDogYCR7bW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWV9LWluZGV4YCxcbiAgICAgICAgY29sbGVjdGlvbk5hbWU6IG1vZGVsQ2xhc3NEYXRhLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICB0eXBlOiBcImluZGV4XCJcbiAgICAgIH0sXG4gICAgICB7fVxuICAgIClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxTQUFTLE1BQU0sWUFBWTtBQUNsQyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLFNBQVFDLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsU0FBUUMsV0FBVyxRQUFPLGNBQWM7QUFDeEMsT0FBT0MsaUJBQWlCLE1BQU0sdUJBQXVCO0FBQ3JELE9BQU9DLE1BQU0sTUFBTSxVQUFVO0FBQzdCLE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBRWpDLGVBQWUsTUFBTUMsa0JBQWtCLENBQUM7RUFDdEMsT0FBT0MsWUFBWSxHQUFHLFlBQVk7RUFFbENDLFdBQVdBLENBQUNDLElBQUksRUFBRUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2hDLElBQUksQ0FBQ0EsU0FBUyxHQUFHQSxTQUFTO0lBQzFCLElBQUksQ0FBQ0QsSUFBSSxHQUFHQSxJQUFJO0VBQ2xCO0VBRUFFLFNBQVNBLENBQUNDLGlCQUFpQixFQUFFO0lBQzNCLE1BQU1DLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFdkIsS0FBSyxNQUFNQyxtQkFBbUIsSUFBSUYsaUJBQWlCLEVBQUU7TUFDbkQsTUFBTUcsWUFBWSxHQUFHZCxVQUFVLENBQUNlLFVBQVUsQ0FBQ0YsbUJBQW1CLENBQUM7TUFDL0QsTUFBTUcsU0FBUyxHQUFHLEVBQUU7TUFDcEIsTUFBTUMsY0FBYyxHQUFHTixpQkFBaUIsQ0FBQ0UsbUJBQW1CLENBQUM7TUFFN0QsS0FBSyxNQUFNQSxtQkFBbUIsSUFBSUksY0FBYyxFQUFFO1FBQ2hELE1BQU1DLGNBQWMsR0FBR2xCLFVBQVUsQ0FBQ2UsVUFBVSxDQUFDRixtQkFBbUIsQ0FBQztRQUNqRUcsU0FBUyxDQUFDRyxJQUFJLENBQUNELGNBQWMsQ0FBQztNQUNoQztNQUVBTixZQUFZLENBQUNFLFlBQVksQ0FBQyxHQUFHRSxTQUFTO0lBQ3hDO0lBRUEsT0FBTyxJQUFJLENBQUNJLE1BQU0sQ0FBQztNQUFDVixTQUFTLEVBQUVFO0lBQVksQ0FBQyxDQUFDO0VBQy9DO0VBRUFTLFlBQVlBLENBQUNDLFdBQVcsRUFBRTtJQUN4QixPQUFPLElBQUksQ0FBQ0YsTUFBTSxDQUFDO01BQUNDLFlBQVksRUFBRXJCLFVBQVUsQ0FBQ2UsVUFBVSxDQUFDTyxXQUFXO0lBQUMsQ0FBQyxDQUFDO0VBQ3hFO0VBRUEsTUFBTUMsS0FBS0EsQ0FBQSxFQUFHO0lBQ1osTUFBTUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDTCxNQUFNLENBQUM7TUFBQ0csS0FBSyxFQUFFO0lBQUksQ0FBQyxDQUFDLENBQUNHLFNBQVMsQ0FBQyxDQUFDO0lBRXJFLE9BQU8zQixJQUFJLENBQUN5QixRQUFRLEVBQUUsT0FBTyxDQUFDO0VBQ2hDO0VBRUFHLFFBQVFBLENBQUEsRUFBRztJQUNULE9BQU8sSUFBSSxDQUFDUCxNQUFNLENBQUM7TUFBQ08sUUFBUSxFQUFFO0lBQUksQ0FBQyxDQUFDO0VBQ3RDO0VBRUEsTUFBTUMsSUFBSUEsQ0FBQ0MsUUFBUSxFQUFFO0lBQ25CLE1BQU1DLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFFbEMsS0FBSyxNQUFNQyxLQUFLLElBQUlGLEtBQUssRUFBRTtNQUN6QkQsUUFBUSxDQUFDSSxJQUFJLENBQUNELEtBQUssQ0FBQztJQUN0QjtFQUNGO0VBRUFFLE1BQU1BLENBQUMsR0FBR0MsSUFBSSxFQUFFO0lBQ2QsS0FBSyxNQUFNQyxHQUFHLElBQUlELElBQUksRUFBRTtNQUN0QixJQUFJQyxHQUFHLElBQUksTUFBTSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDM0IsU0FBUyxDQUFDMkIsR0FBRyxDQUFDO01BQzVCLENBQUMsTUFBTTtRQUNMLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGtCQUFrQkQsR0FBRyxFQUFFLENBQUM7TUFDMUM7SUFDRjtJQUVBLE9BQU8sSUFBSTtFQUNiO0VBRUEsTUFBTUUsS0FBS0EsQ0FBQSxFQUFHO0lBQ1osTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUixPQUFPLENBQUMsQ0FBQztJQUNuQyxPQUFPUSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2xCO0VBRUFDLE9BQU9BLENBQUMsR0FBR0MsdUJBQXVCLEVBQUU7SUFDbEMsTUFBTUMsMkNBQTJDLEdBQUdELHVCQUF1QixDQUFDRSxHQUFHLENBQUVDLGNBQWMsSUFBSztNQUNsRyxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsY0FBYyxDQUFDLEVBQUU7UUFDakMsT0FBTyxDQUFDQSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csV0FBVyxDQUFDLENBQUMsQ0FBQztNQUM3RCxDQUFDLE1BQU07UUFDTCxPQUFPSCxjQUFjLENBQUNHLFdBQVcsQ0FBQyxDQUFDO01BQ3JDO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsTUFBTUMsY0FBYyxHQUFHLElBQUksQ0FBQ3ZDLFNBQVMsQ0FBQytCLE9BQU8sSUFBSSxFQUFFO0lBQ25ELE1BQU1TLFVBQVUsR0FBR0QsY0FBYyxDQUFDRSxNQUFNLENBQUNSLDJDQUEyQyxDQUFDO0lBRXJGLE9BQU8sSUFBSSxDQUFDdEIsTUFBTSxDQUFDO01BQ2pCb0IsT0FBTyxFQUFFUztJQUNYLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTUUsWUFBWUEsQ0FBQSxFQUFHO0lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7TUFDcEIsTUFBTWIsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUixPQUFPLENBQUMsQ0FBQztNQUVuQyxJQUFJLENBQUNzQixHQUFHLENBQUNkLE1BQU0sQ0FBQztJQUNsQjtJQUVBLE9BQU8sSUFBSSxDQUFDZSxNQUFNLENBQUMsQ0FBQztFQUN0QjtFQUVBRixRQUFRQSxDQUFBLEVBQUc7SUFDVCxNQUFNO01BQUNwQixLQUFLO01BQUV1QjtJQUFjLENBQUMsR0FBRyxJQUFJLENBQUMvQyxJQUFJO0lBRXpDLElBQUkrQyxjQUFjLElBQUl2QixLQUFLLENBQUN3QixrQkFBa0IsRUFBRTtNQUM5QyxPQUFPLElBQUk7SUFDYixDQUFDLE1BQU0sSUFBSUQsY0FBYyxJQUFJdkIsS0FBSyxDQUFDeUIsYUFBYSxFQUFFO01BQ2hELE9BQU8sSUFBSTtJQUNiO0lBRUEsT0FBTyxLQUFLO0VBQ2Q7RUFFQUMsS0FBS0EsQ0FBQ0MsTUFBTSxFQUFFO0lBQ1osT0FBTyxJQUFJLENBQUN2QyxNQUFNLENBQUM7TUFBQ3NDLEtBQUssRUFBRUM7SUFBTSxDQUFDLENBQUM7RUFDckM7RUFFQUMsU0FBU0EsQ0FBQSxFQUFHO0lBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQ3BELElBQUksQ0FBQytDLGNBQWMsSUFBSSxJQUFJLENBQUMvQyxJQUFJLENBQUN3QixLQUFLLENBQUN3QixrQkFBa0IsQ0FBQyxFQUFFO01BQ3JFLE1BQU0sSUFBSW5CLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQzdCLElBQUksQ0FBQytDLGNBQWMsd0JBQXdCLENBQUM7SUFDdEU7SUFFQSxPQUFPLElBQUksQ0FBQy9DLElBQUksQ0FBQ3dCLEtBQUssQ0FBQ3dCLGtCQUFrQixDQUFDLElBQUksQ0FBQ2hELElBQUksQ0FBQytDLGNBQWMsQ0FBQztFQUNyRTtFQUVBRCxNQUFNQSxDQUFBLEVBQUc7SUFDUCxNQUFNO01BQUN0QixLQUFLO01BQUV1QjtJQUFjLENBQUMsR0FBRyxJQUFJLENBQUMvQyxJQUFJO0lBRXpDLElBQUkrQyxjQUFjLElBQUl2QixLQUFLLENBQUN5QixhQUFhLEVBQUU7TUFDekMsT0FBT3pCLEtBQUssQ0FBQ3lCLGFBQWEsQ0FBQ0YsY0FBYyxDQUFDO0lBQzVDLENBQUMsTUFBTSxJQUFJQSxjQUFjLElBQUl2QixLQUFLLENBQUN3QixrQkFBa0IsRUFBRTtNQUNyRCxPQUFPeEIsS0FBSyxDQUFDd0Isa0JBQWtCLENBQUNELGNBQWMsQ0FBQztJQUNqRCxDQUFDLE1BQU0sSUFBSXZCLEtBQUssQ0FBQzZCLFdBQVcsQ0FBQyxDQUFDLEVBQUU7TUFDOUIsTUFBTUMsd0JBQXdCLEdBQUc5RCxVQUFVLENBQUNlLFVBQVUsQ0FBQ3dDLGNBQWMsQ0FBQzs7TUFFdEU7TUFDQSxJQUFJLENBQUNGLEdBQUcsQ0FBQyxFQUFFLENBQUM7TUFFWixPQUFPdEQsSUFBSSxDQUFDaUMsS0FBSyxDQUFDeUIsYUFBYSxFQUFFSyx3QkFBd0IsQ0FBQztJQUM1RCxDQUFDLE1BQU07TUFDTCxNQUFNQyxtQkFBbUIsR0FBRzNELFNBQVMsQ0FBQzRELE1BQU0sQ0FBQzdCLElBQUksQ0FBQ0gsS0FBSyxDQUFDeUIsYUFBYSxDQUFDLENBQUNQLE1BQU0sQ0FBQ2MsTUFBTSxDQUFDN0IsSUFBSSxDQUFDSCxLQUFLLENBQUN3QixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFFckgsTUFBTSxJQUFJbkIsS0FBSyxDQUFDLEdBQUdrQixjQUFjLDZCQUE2QnZCLEtBQUssQ0FBQ2lDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLElBQUksaUJBQWlCSCxtQkFBbUIsQ0FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDN0k7RUFDRjs7RUFFQTtFQUNBZCxHQUFHQSxDQUFDZSxhQUFhLEVBQUU7SUFDakIsSUFBSSxDQUFDNUQsSUFBSSxDQUFDd0IsS0FBSyxDQUFDeUIsYUFBYSxDQUFDLElBQUksQ0FBQ2pELElBQUksQ0FBQytDLGNBQWMsQ0FBQyxHQUFHYSxhQUFhO0VBQ3pFOztFQUVBO0VBQ0FqRCxJQUFJQSxDQUFDa0QsUUFBUSxFQUFFO0lBQ2IsTUFBTTtNQUFDckMsS0FBSztNQUFFdUI7SUFBYyxDQUFDLEdBQUcsSUFBSSxDQUFDL0MsSUFBSTtJQUV6QyxJQUFJLEVBQUUrQyxjQUFjLElBQUl2QixLQUFLLENBQUN5QixhQUFhLENBQUMsRUFBRTtNQUM1Q3pCLEtBQUssQ0FBQ3lCLGFBQWEsQ0FBQ0YsY0FBYyxDQUFDLEdBQUcsRUFBRTtJQUMxQztJQUVBLElBQUksQ0FBQ3ZCLEtBQUssQ0FBQ3lCLGFBQWEsQ0FBQ0YsY0FBYyxDQUFDLENBQUNlLFFBQVEsQ0FBQ0QsUUFBUSxDQUFDLEVBQUU7TUFDM0RyQyxLQUFLLENBQUN5QixhQUFhLENBQUNGLGNBQWMsQ0FBQyxDQUFDcEMsSUFBSSxDQUFDa0QsUUFBUSxDQUFDO0lBQ3BEO0VBQ0Y7O0VBRUE7RUFDQUUsSUFBSSxHQUFHQSxDQUFDLEdBQUcvRCxJQUFJLEtBQUssSUFBSSxDQUFDOEMsTUFBTSxDQUFDLENBQUMsQ0FBQ2lCLElBQUksQ0FBQyxHQUFHL0QsSUFBSSxDQUFDO0VBQy9DZ0UsT0FBTyxHQUFHQSxDQUFDLEdBQUdoRSxJQUFJLEtBQUssSUFBSSxDQUFDOEMsTUFBTSxDQUFDLENBQUMsQ0FBQ2tCLE9BQU8sQ0FBQyxHQUFHaEUsSUFBSSxDQUFDO0VBQ3JEbUMsR0FBRyxHQUFHQSxDQUFDLEdBQUduQyxJQUFJLEtBQUssSUFBSSxDQUFDOEMsTUFBTSxDQUFDLENBQUMsQ0FBQ1gsR0FBRyxDQUFDLEdBQUduQyxJQUFJLENBQUM7RUFFN0NpRSxPQUFPQSxDQUFDQyxZQUFZLEVBQUU7SUFDcEIsT0FBTyxJQUFJLENBQUN0RCxNQUFNLENBQUM7TUFBQ3FELE9BQU8sRUFBRUM7SUFBWSxDQUFDLENBQUM7RUFDN0M7RUFFQUMsSUFBSUEsQ0FBQ0EsSUFBSSxFQUFFO0lBQ1QsSUFBSSxDQUFDQSxJQUFJLEVBQUVBLElBQUksR0FBRyxDQUFDO0lBRW5CLE9BQU8sSUFBSSxDQUFDdkQsTUFBTSxDQUFDO01BQUN1RDtJQUFJLENBQUMsQ0FBQztFQUM1QjtFQUVBQyxPQUFPQSxDQUFDQSxPQUFPLEVBQUU7SUFDZixPQUFPLElBQUksQ0FBQ3hELE1BQU0sQ0FBQztNQUFDd0Q7SUFBTyxDQUFDLENBQUM7RUFDL0I7RUFFQUMsVUFBVUEsQ0FBQSxFQUFHO0lBQ1gsTUFBTTtNQUFDcEU7SUFBUyxDQUFDLEdBQUcsSUFBSTtJQUV4QixJQUNFQSxTQUFTLENBQUNZLFlBQVksSUFDdEJaLFNBQVMsQ0FBQ2MsS0FBSyxJQUNmZCxTQUFTLENBQUNpRCxLQUFLLElBQ2ZqRCxTQUFTLENBQUNrRSxJQUFJLElBQ2RsRSxTQUFTLENBQUNxRSxNQUFNLElBQ2hCckUsU0FBUyxDQUFDc0UsR0FBRyxJQUNidEUsU0FBUyxDQUFDdUUsT0FBTyxJQUNqQnZFLFNBQVMsQ0FBQ3dFLE1BQU0sRUFDaEI7TUFDQSxPQUFPLElBQUk7SUFDYjtJQUVBLE9BQU8sS0FBSztFQUNkO0VBRUFILE1BQU1BLENBQUEsRUFBRztJQUNQLElBQUlBLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLElBQUksQ0FBQ3JFLFNBQVMsQ0FBQ3FFLE1BQU0sRUFBRUEsTUFBTSxHQUFHN0UsV0FBVyxDQUFDNkUsTUFBTSxFQUFFLElBQUksQ0FBQ3JFLFNBQVMsQ0FBQ3FFLE1BQU0sQ0FBQztJQUM5RSxJQUFJLElBQUksQ0FBQ3JFLFNBQVMsQ0FBQ0MsU0FBUyxFQUFFb0UsTUFBTSxDQUFDcEUsU0FBUyxHQUFHLElBQUksQ0FBQ0QsU0FBUyxDQUFDQyxTQUFTO0lBQ3pFLElBQUksSUFBSSxDQUFDRCxTQUFTLENBQUNZLFlBQVksRUFBRXlELE1BQU0sQ0FBQ0ksYUFBYSxHQUFHbEYsVUFBVSxDQUFDZSxVQUFVLENBQUMsSUFBSSxDQUFDTixTQUFTLENBQUNZLFlBQVksQ0FBQztJQUMxRyxJQUFJLElBQUksQ0FBQ1osU0FBUyxDQUFDYyxLQUFLLEVBQUV1RCxNQUFNLENBQUN2RCxLQUFLLEdBQUcsSUFBSSxDQUFDZCxTQUFTLENBQUNjLEtBQUs7SUFDN0QsSUFBSSxJQUFJLENBQUNkLFNBQVMsQ0FBQ2tCLFFBQVEsRUFBRW1ELE1BQU0sQ0FBQ25ELFFBQVEsR0FBRyxJQUFJLENBQUNsQixTQUFTLENBQUNrQixRQUFRO0lBQ3RFLElBQUksSUFBSSxDQUFDbEIsU0FBUyxDQUFDK0IsT0FBTyxFQUFFc0MsTUFBTSxDQUFDSyxRQUFRLEdBQUcsSUFBSSxDQUFDMUUsU0FBUyxDQUFDK0IsT0FBTztJQUNwRSxJQUFJLElBQUksQ0FBQy9CLFNBQVMsQ0FBQ3VFLE9BQU8sRUFBRUYsTUFBTSxDQUFDTSxDQUFDLEdBQUcsSUFBSSxDQUFDM0UsU0FBUyxDQUFDdUUsT0FBTztJQUM3RCxJQUFJLElBQUksQ0FBQ3ZFLFNBQVMsQ0FBQ2lELEtBQUssRUFBRW9CLE1BQU0sQ0FBQ3BCLEtBQUssR0FBRyxJQUFJLENBQUNqRCxTQUFTLENBQUNpRCxLQUFLO0lBQzdELElBQUksSUFBSSxDQUFDakQsU0FBUyxDQUFDZ0UsT0FBTyxFQUFFSyxNQUFNLENBQUNMLE9BQU8sR0FBRyxJQUFJLENBQUNoRSxTQUFTLENBQUNnRSxPQUFPO0lBQ25FLElBQUksSUFBSSxDQUFDaEUsU0FBUyxDQUFDa0UsSUFBSSxFQUFFRyxNQUFNLENBQUNILElBQUksR0FBRyxJQUFJLENBQUNsRSxTQUFTLENBQUNrRSxJQUFJO0lBQzFELElBQUksSUFBSSxDQUFDbEUsU0FBUyxDQUFDc0UsR0FBRyxFQUFFRCxNQUFNLENBQUNDLEdBQUcsR0FBRyxJQUFJLENBQUN0RSxTQUFTLENBQUNzRSxHQUFHO0lBQ3ZELElBQUksSUFBSSxDQUFDdEUsU0FBUyxDQUFDd0UsTUFBTSxFQUFFSCxNQUFNLENBQUNHLE1BQU0sR0FBRyxJQUFJLENBQUN4RSxTQUFTLENBQUN3RSxNQUFNO0lBQ2hFLElBQUksSUFBSSxDQUFDeEUsU0FBUyxDQUFDNEUsTUFBTSxFQUFFUCxNQUFNLENBQUNPLE1BQU0sR0FBRyxJQUFJLENBQUM1RSxTQUFTLENBQUM0RSxNQUFNO0lBQ2hFLElBQUksSUFBSSxDQUFDNUUsU0FBUyxDQUFDNkUsYUFBYSxFQUFFUixNQUFNLENBQUNTLGNBQWMsR0FBRyxJQUFJLENBQUM5RSxTQUFTLENBQUM2RSxhQUFhO0lBRXRGLE9BQU9SLE1BQU07RUFDZjtFQUVBQyxHQUFHQSxDQUFDQSxHQUFHLEVBQUU7SUFDUCxPQUFPLElBQUksQ0FBQzNELE1BQU0sQ0FBQztNQUFDMkQ7SUFBRyxDQUFDLENBQUM7RUFDM0I7RUFFQVMsTUFBTUEsQ0FBQ0EsTUFBTSxFQUFFO0lBQ2IsT0FBTyxJQUFJLENBQUNwRSxNQUFNLENBQUM7TUFBQ29FO0lBQU0sQ0FBQyxDQUFDO0VBQzlCO0VBRUFSLE9BQU9BLENBQUNGLE1BQU0sRUFBRTtJQUNkLElBQUlBLE1BQU0sRUFBRSxJQUFJLENBQUMxRCxNQUFNLENBQUM7TUFBQzRELE9BQU8sRUFBRUY7SUFBTSxDQUFDLENBQUM7SUFDMUMsT0FBTyxJQUFJO0VBQ2I7RUFFQSxNQUFNVyxNQUFNQSxDQUFBLEVBQUc7SUFDYixNQUFNakUsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDRSxTQUFTLENBQUMsQ0FBQztJQUN2QyxNQUFNYSxNQUFNLEdBQUd4QyxJQUFJLENBQUN5QixRQUFRLEVBQUUsWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQ2tFLGlCQUFpQixDQUFDbkQsTUFBTSxDQUFDO0lBRTlCLE1BQU1rRCxNQUFNLEdBQUcsSUFBSXRGLE1BQU0sQ0FBQztNQUFDd0YsVUFBVSxFQUFFLElBQUk7TUFBRXBELE1BQU07TUFBRWY7SUFBUSxDQUFDLENBQUM7SUFFL0QsT0FBT2lFLE1BQU07RUFDZjtFQUVBUixNQUFNQSxDQUFDSCxNQUFNLEVBQUU7SUFDYixJQUFJQSxNQUFNLEVBQUUsSUFBSSxDQUFDMUQsTUFBTSxDQUFDO01BQUM2RCxNQUFNLEVBQUVIO0lBQU0sQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sSUFBSTtFQUNiO0VBRUFjLFNBQVNBLENBQUNBLFNBQVMsRUFBRTtJQUNuQixPQUFPLElBQUksQ0FBQ3hFLE1BQU0sQ0FBQztNQUFDd0U7SUFBUyxDQUFDLENBQUM7RUFDakM7RUFFQVAsTUFBTUEsQ0FBQ1EsY0FBYyxFQUFFO0lBQ3JCLE1BQU1DLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsS0FBSyxNQUFNQyxpQkFBaUIsSUFBSUYsY0FBYyxFQUFFO01BQzlDLE1BQU0vRSxZQUFZLEdBQUdkLFVBQVUsQ0FBQ2UsVUFBVSxDQUFDZ0YsaUJBQWlCLENBQUM7TUFDN0QsTUFBTS9FLFNBQVMsR0FBRyxFQUFFO01BQ3BCLE1BQU1DLGNBQWMsR0FBRzRFLGNBQWMsQ0FBQ0UsaUJBQWlCLENBQUM7TUFFeEQsS0FBSyxNQUFNQyxxQkFBcUIsSUFBSS9FLGNBQWMsRUFBRTtRQUNsRCxNQUFNZ0YsZ0JBQWdCLEdBQUdqRyxVQUFVLENBQUNlLFVBQVUsQ0FBQ2lGLHFCQUFxQixDQUFDO1FBQ3JFaEYsU0FBUyxDQUFDRyxJQUFJLENBQUM4RSxnQkFBZ0IsQ0FBQztNQUNsQztNQUVBSCxTQUFTLENBQUNoRixZQUFZLENBQUMsR0FBR0UsU0FBUztJQUNyQztJQUVBLE9BQU8sSUFBSSxDQUFDSSxNQUFNLENBQUM7TUFBQ2lFLE1BQU0sRUFBRVM7SUFBUyxDQUFDLENBQUM7RUFDekM7RUFFQVIsYUFBYUEsQ0FBQ08sY0FBYyxFQUFFO0lBQzVCLE1BQU1DLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsS0FBSyxNQUFNQyxpQkFBaUIsSUFBSUYsY0FBYyxFQUFFO01BQzlDLE1BQU0vRSxZQUFZLEdBQUdkLFVBQVUsQ0FBQ2UsVUFBVSxDQUFDZixVQUFVLENBQUNlLFVBQVUsQ0FBQ2dGLGlCQUFpQixDQUFDLENBQUM7TUFDcEYsTUFBTS9FLFNBQVMsR0FBRyxFQUFFO01BQ3BCLE1BQU1DLGNBQWMsR0FBRzRFLGNBQWMsQ0FBQ0UsaUJBQWlCLENBQUM7TUFFeEQsS0FBSyxNQUFNQyxxQkFBcUIsSUFBSS9FLGNBQWMsRUFBRTtRQUNsRCxNQUFNZ0YsZ0JBQWdCLEdBQUdqRyxVQUFVLENBQUNlLFVBQVUsQ0FBQ2lGLHFCQUFxQixDQUFDO1FBQ3JFaEYsU0FBUyxDQUFDRyxJQUFJLENBQUM4RSxnQkFBZ0IsQ0FBQztNQUNsQztNQUVBSCxTQUFTLENBQUNoRixZQUFZLENBQUMsR0FBR0UsU0FBUztJQUNyQztJQUVBLE9BQU8sSUFBSSxDQUFDSSxNQUFNLENBQUM7TUFBQ2tFLGFBQWEsRUFBRVE7SUFBUyxDQUFDLENBQUM7RUFDaEQ7RUFFQUksSUFBSUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ1gsT0FBTyxJQUFJLENBQUMvRSxNQUFNLENBQUM7TUFBQzRELE9BQU8sRUFBRTtRQUFDb0IsQ0FBQyxFQUFFRDtNQUFNO0lBQUMsQ0FBQyxDQUFDO0VBQzVDO0VBRUEsTUFBTXBFLE9BQU9BLENBQUEsRUFBRztJQUNkLE1BQU1QLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ0UsU0FBUyxDQUFDLENBQUM7SUFDdkMsTUFBTWEsTUFBTSxHQUFHeEMsSUFBSSxDQUFDeUIsUUFBUSxFQUFFLFlBQVksQ0FBQztJQUUzQyxJQUFJLENBQUNrRSxpQkFBaUIsQ0FBQ25ELE1BQU0sQ0FBQztJQUU5QixPQUFPQSxNQUFNO0VBQ2Y7RUFFQThELFVBQVVBLENBQUEsRUFBRztJQUNYLE1BQU1DLFNBQVMsR0FBR3ZHLElBQUksQ0FBQyxJQUFJLENBQUNTLElBQUksQ0FBQzZGLFVBQVUsQ0FBQ3BDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRXJFLE9BQU8vRCxpQkFBaUIsQ0FBQ29HLFNBQVMsQ0FBQztFQUNyQztFQUVBN0UsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sTUFBTThFLGVBQWUsR0FBRzFHLFNBQVMsQ0FBQyxJQUFJLENBQUNZLFNBQVMsQ0FBQztJQUVqRCxPQUFPLElBQUlKLGtCQUFrQixDQUFDLElBQUksQ0FBQ0csSUFBSSxFQUFFK0YsZUFBZSxDQUFDO0VBQzNEOztFQUVBO0VBQ0FiLGlCQUFpQkEsQ0FBQ25ELE1BQU0sRUFBRTtJQUN4QixLQUFLLE1BQU1QLEtBQUssSUFBSU8sTUFBTSxFQUFFO01BQzFCUCxLQUFLLENBQUMyRCxVQUFVLEdBQUcsSUFBSTtJQUN6QjtFQUNGO0VBRUF2RSxNQUFNQSxDQUFDb0YsWUFBWSxFQUFFO0lBQ25CdkcsV0FBVyxDQUFDLElBQUksQ0FBQ1EsU0FBUyxFQUFFK0YsWUFBWSxDQUFDO0lBRXpDLE9BQU8sSUFBSTtFQUNiO0VBRUE5RSxTQUFTQSxDQUFBLEVBQUc7SUFDVixNQUFNdUMsY0FBYyxHQUFHLElBQUksQ0FBQ3pELElBQUksQ0FBQzZGLFVBQVUsQ0FBQ3BDLGNBQWMsQ0FBQyxDQUFDO0lBRTVELE9BQU9uRSxZQUFZLENBQUMyRyxVQUFVLENBQzVCO01BQ0VqRyxJQUFJLEVBQUUsSUFBSSxDQUFDc0UsTUFBTSxDQUFDLENBQUM7TUFDbkI0QixPQUFPLEVBQUUsR0FBR3pDLGNBQWMsQ0FBQzBDLGNBQWMsUUFBUTtNQUNqREEsY0FBYyxFQUFFMUMsY0FBYyxDQUFDMEMsY0FBYztNQUM3Q0MsSUFBSSxFQUFFO0lBQ1IsQ0FBQyxFQUNELENBQUMsQ0FDSCxDQUFDO0VBQ0g7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -8,16 +8,33 @@ import memo from "set-state-compare/src/memo";
8
8
  import React, { useMemo } from "react";
9
9
  import { shapeComponent } from "set-state-compare/src/shape-component";
10
10
  import { useMergedStyle } from "./default-style";
11
+ const FontAwesomeGlyphMap = FontAwesomeIcon.getRawGlyphMap();
12
+ const FontAwesome5GlyphMap = FontAwesome5Icon.getRawGlyphMap();
13
+ const FontAwesome6GlyphMap = FontAwesome6Icon.getRawGlyphMap();
14
+ const MaterialIconsGlyphMap = MaterialIconsIcon.getRawGlyphMap();
11
15
  export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent {
12
16
  render() {
13
17
  const {
18
+ name,
14
19
  style,
15
- version = "FontAwesome",
20
+ version,
16
21
  ...restProps
17
22
  } = this.props;
18
23
  const {
19
24
  stylesList
20
25
  } = useMergedStyle(style, "Text");
26
+ let actualVersion = version;
27
+ if (!actualVersion) {
28
+ if (name in FontAwesome6GlyphMap) {
29
+ actualVersion = "FontAwesome6";
30
+ } else if (name in FontAwesome5GlyphMap) {
31
+ actualVersion = "FontAwesome5";
32
+ } else if (name in FontAwesomeGlyphMap) {
33
+ actualVersion = "FontAwesome";
34
+ } else if (name in MaterialIconsGlyphMap) {
35
+ actualVersion = "MaterialIcons";
36
+ }
37
+ }
21
38
 
22
39
  // Only forward some styles like color
23
40
  const actualStylesList = useMemo(() => {
@@ -37,25 +54,29 @@ export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent
37
54
  }
38
55
  return actualStylesList;
39
56
  }, [stylesList, style]);
40
- if (version == "FontAwesome") {
57
+ if (actualVersion == "FontAwesome") {
41
58
  return /*#__PURE__*/React.createElement(FontAwesomeIcon, _extends({
59
+ name: name,
42
60
  style: actualStylesList
43
61
  }, restProps));
44
- } else if (version == "FontAwesome5") {
62
+ } else if (actualVersion == "FontAwesome5") {
45
63
  return /*#__PURE__*/React.createElement(FontAwesome5Icon, _extends({
64
+ name: name,
46
65
  style: actualStylesList
47
66
  }, restProps));
48
- } else if (version == "FontAwesome6") {
67
+ } else if (actualVersion == "FontAwesome6") {
49
68
  return /*#__PURE__*/React.createElement(FontAwesome6Icon, _extends({
69
+ name: name,
50
70
  style: actualStylesList
51
71
  }, restProps));
52
- } else if (version == "MaterialIcons") {
72
+ } else if (actualVersion == "MaterialIcons") {
53
73
  return /*#__PURE__*/React.createElement(MaterialIconsIcon, _extends({
74
+ name: name,
54
75
  style: actualStylesList
55
76
  }, restProps));
56
77
  } else {
57
- throw new Error(`Unknown version: ${version}`);
78
+ throw new Error(`Unknown version: ${actualVersion}`);
58
79
  }
59
80
  }
60
81
  }));
61
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiRm9udEF3ZXNvbWVJY29uIiwiRm9udEF3ZXNvbWU1SWNvbiIsIkZvbnRBd2Vzb21lNkljb24iLCJNYXRlcmlhbEljb25zSWNvbiIsIm1lbW8iLCJSZWFjdCIsInVzZU1lbW8iLCJzaGFwZUNvbXBvbmVudCIsInVzZU1lcmdlZFN0eWxlIiwiQXBpTWFrZXJVdGlsc0ljb24iLCJyZW5kZXIiLCJzdHlsZSIsInZlcnNpb24iLCJyZXN0UHJvcHMiLCJwcm9wcyIsInN0eWxlc0xpc3QiLCJhY3R1YWxTdHlsZXNMaXN0IiwibmV3U3R5bGUiLCJjb3VudCIsImtleSIsInB1c2giLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pY29uLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWU1SWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZTVcIlxuaW1wb3J0IEZvbnRBd2Vzb21lNkljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWU2XCJcbmltcG9ydCBNYXRlcmlhbEljb25zSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9NYXRlcmlhbEljb25zXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQgUmVhY3QsIHt1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IHt1c2VNZXJnZWRTdHlsZX0gZnJvbSBcIi4vZGVmYXVsdC1zdHlsZVwiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJVdGlsc0ljb24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtzdHlsZSwgdmVyc2lvbiA9IFwiRm9udEF3ZXNvbWVcIiwgLi4ucmVzdFByb3BzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7c3R5bGVzTGlzdH0gPSB1c2VNZXJnZWRTdHlsZShzdHlsZSwgXCJUZXh0XCIpXG5cbiAgICAvLyBPbmx5IGZvcndhcmQgc29tZSBzdHlsZXMgbGlrZSBjb2xvclxuICAgIGNvbnN0IGFjdHVhbFN0eWxlc0xpc3QgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbFN0eWxlc0xpc3QgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlc0xpc3QpIHtcbiAgICAgICAgY29uc3QgbmV3U3R5bGUgPSB7fVxuICAgICAgICBsZXQgY291bnQgPSAwXG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGUpIHtcbiAgICAgICAgICBpZiAoa2V5ID09IFwiY29sb3JcIikge1xuICAgICAgICAgICAgbmV3U3R5bGVba2V5XSA9IHN0eWxlW2tleV1cbiAgICAgICAgICAgIGNvdW50KytcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgYWN0dWFsU3R5bGVzTGlzdC5wdXNoKG5ld1N0eWxlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3R1YWxTdHlsZXNMaXN0XG4gICAgfSwgW3N0eWxlc0xpc3QsIHN0eWxlXSlcblxuICAgIGlmICh2ZXJzaW9uID09IFwiRm9udEF3ZXNvbWVcIikge1xuICAgICAgcmV0dXJuIDxGb250QXdlc29tZUljb24gc3R5bGU9e2FjdHVhbFN0eWxlc0xpc3R9IHsuLi5yZXN0UHJvcHN9IC8+XG4gICAgfSBlbHNlIGlmICh2ZXJzaW9uID09IFwiRm9udEF3ZXNvbWU1XCIpIHtcbiAgICAgIHJldHVybiA8Rm9udEF3ZXNvbWU1SWNvbiBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT0gXCJGb250QXdlc29tZTZcIikge1xuICAgICAgcmV0dXJuIDxGb250QXdlc29tZTZJY29uIHN0eWxlPXthY3R1YWxTdHlsZXNMaXN0fSB7Li4ucmVzdFByb3BzfSAvPlxuICAgIH0gZWxzZSBpZiAodmVyc2lvbiA9PSBcIk1hdGVyaWFsSWNvbnNcIikge1xuICAgICAgcmV0dXJuIDxNYXRlcmlhbEljb25zSWNvbiBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZlcnNpb246ICR7dmVyc2lvbn1gKVxuICAgIH1cbiAgfVxufSkpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxhQUFhLE1BQU0sbUJBQW1CO0FBQzdDLE9BQU9DLGVBQWUsTUFBTSx1Q0FBdUM7QUFDbkUsT0FBT0MsZ0JBQWdCLE1BQU0sd0NBQXdDO0FBQ3JFLE9BQU9DLGdCQUFnQixNQUFNLHdDQUF3QztBQUNyRSxPQUFPQyxpQkFBaUIsTUFBTSx5Q0FBeUM7QUFDdkUsT0FBT0MsSUFBSSxNQUFNLDRCQUE0QjtBQUM3QyxPQUFPQyxLQUFLLElBQUdDLE9BQU8sUUFBTyxPQUFPO0FBQ3BDLFNBQVFDLGNBQWMsUUFBTyx1Q0FBdUM7QUFDcEUsU0FBUUMsY0FBYyxRQUFPLGlCQUFpQjtBQUU5QyxlQUFlSixJQUFJLENBQUNHLGNBQWMsQ0FBQyxNQUFNRSxpQkFBaUIsU0FBU1YsYUFBYSxDQUFDO0VBQy9FVyxNQUFNQSxDQUFBLEVBQUc7SUFDUCxNQUFNO01BQUNDLEtBQUs7TUFBRUMsT0FBTyxHQUFHLGFBQWE7TUFBRSxHQUFHQztJQUFTLENBQUMsR0FBRyxJQUFJLENBQUNDLEtBQUs7SUFDakUsTUFBTTtNQUFDQztJQUFVLENBQUMsR0FBR1AsY0FBYyxDQUFDRyxLQUFLLEVBQUUsTUFBTSxDQUFDOztJQUVsRDtJQUNBLE1BQU1LLGdCQUFnQixHQUFHVixPQUFPLENBQUMsTUFBTTtNQUNyQyxNQUFNVSxnQkFBZ0IsR0FBRyxFQUFFO01BRTNCLEtBQUssTUFBTUwsS0FBSyxJQUFJSSxVQUFVLEVBQUU7UUFDOUIsTUFBTUUsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJQyxLQUFLLEdBQUcsQ0FBQztRQUViLEtBQUssTUFBTUMsR0FBRyxJQUFJUixLQUFLLEVBQUU7VUFDdkIsSUFBSVEsR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUNsQkYsUUFBUSxDQUFDRSxHQUFHLENBQUMsR0FBR1IsS0FBSyxDQUFDUSxHQUFHLENBQUM7WUFDMUJELEtBQUssRUFBRTtVQUNUO1FBQ0Y7UUFFQSxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1VBQ2JGLGdCQUFnQixDQUFDSSxJQUFJLENBQUNILFFBQVEsQ0FBQztRQUNqQztNQUNGO01BRUEsT0FBT0QsZ0JBQWdCO0lBQ3pCLENBQUMsRUFBRSxDQUFDRCxVQUFVLEVBQUVKLEtBQUssQ0FBQyxDQUFDO0lBRXZCLElBQUlDLE9BQU8sSUFBSSxhQUFhLEVBQUU7TUFDNUIsb0JBQU9QLEtBQUEsQ0FBQWdCLGFBQUEsQ0FBQ3JCLGVBQWUsRUFBQXNCLFFBQUE7UUFBQ1gsS0FBSyxFQUFFSztNQUFpQixHQUFLSCxTQUFTLENBQUcsQ0FBQztJQUNwRSxDQUFDLE1BQU0sSUFBSUQsT0FBTyxJQUFJLGNBQWMsRUFBRTtNQUNwQyxvQkFBT1AsS0FBQSxDQUFBZ0IsYUFBQSxDQUFDcEIsZ0JBQWdCLEVBQUFxQixRQUFBO1FBQUNYLEtBQUssRUFBRUs7TUFBaUIsR0FBS0gsU0FBUyxDQUFHLENBQUM7SUFDckUsQ0FBQyxNQUFNLElBQUlELE9BQU8sSUFBSSxjQUFjLEVBQUU7TUFDcEMsb0JBQU9QLEtBQUEsQ0FBQWdCLGFBQUEsQ0FBQ25CLGdCQUFnQixFQUFBb0IsUUFBQTtRQUFDWCxLQUFLLEVBQUVLO01BQWlCLEdBQUtILFNBQVMsQ0FBRyxDQUFDO0lBQ3JFLENBQUMsTUFBTSxJQUFJRCxPQUFPLElBQUksZUFBZSxFQUFFO01BQ3JDLG9CQUFPUCxLQUFBLENBQUFnQixhQUFBLENBQUNsQixpQkFBaUIsRUFBQW1CLFFBQUE7UUFBQ1gsS0FBSyxFQUFFSztNQUFpQixHQUFLSCxTQUFTLENBQUcsQ0FBQztJQUN0RSxDQUFDLE1BQU07TUFDTCxNQUFNLElBQUlVLEtBQUssQ0FBQyxvQkFBb0JYLE9BQU8sRUFBRSxDQUFDO0lBQ2hEO0VBQ0Y7QUFDRixDQUFDLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiRm9udEF3ZXNvbWVJY29uIiwiRm9udEF3ZXNvbWU1SWNvbiIsIkZvbnRBd2Vzb21lNkljb24iLCJNYXRlcmlhbEljb25zSWNvbiIsIm1lbW8iLCJSZWFjdCIsInVzZU1lbW8iLCJzaGFwZUNvbXBvbmVudCIsInVzZU1lcmdlZFN0eWxlIiwiRm9udEF3ZXNvbWVHbHlwaE1hcCIsImdldFJhd0dseXBoTWFwIiwiRm9udEF3ZXNvbWU1R2x5cGhNYXAiLCJGb250QXdlc29tZTZHbHlwaE1hcCIsIk1hdGVyaWFsSWNvbnNHbHlwaE1hcCIsIkFwaU1ha2VyVXRpbHNJY29uIiwicmVuZGVyIiwibmFtZSIsInN0eWxlIiwidmVyc2lvbiIsInJlc3RQcm9wcyIsInByb3BzIiwic3R5bGVzTGlzdCIsImFjdHVhbFZlcnNpb24iLCJhY3R1YWxTdHlsZXNMaXN0IiwibmV3U3R5bGUiLCJjb3VudCIsImtleSIsInB1c2giLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pY29uLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWU1SWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZTVcIlxuaW1wb3J0IEZvbnRBd2Vzb21lNkljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWU2XCJcbmltcG9ydCBNYXRlcmlhbEljb25zSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9NYXRlcmlhbEljb25zXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQgUmVhY3QsIHt1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IHt1c2VNZXJnZWRTdHlsZX0gZnJvbSBcIi4vZGVmYXVsdC1zdHlsZVwiXG5cbmNvbnN0IEZvbnRBd2Vzb21lR2x5cGhNYXAgPSBGb250QXdlc29tZUljb24uZ2V0UmF3R2x5cGhNYXAoKVxuY29uc3QgRm9udEF3ZXNvbWU1R2x5cGhNYXAgPSBGb250QXdlc29tZTVJY29uLmdldFJhd0dseXBoTWFwKClcbmNvbnN0IEZvbnRBd2Vzb21lNkdseXBoTWFwID0gRm9udEF3ZXNvbWU2SWNvbi5nZXRSYXdHbHlwaE1hcCgpXG5jb25zdCBNYXRlcmlhbEljb25zR2x5cGhNYXAgPSBNYXRlcmlhbEljb25zSWNvbi5nZXRSYXdHbHlwaE1hcCgpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJVdGlsc0ljb24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtuYW1lLCBzdHlsZSwgdmVyc2lvbiwgLi4ucmVzdFByb3BzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7c3R5bGVzTGlzdH0gPSB1c2VNZXJnZWRTdHlsZShzdHlsZSwgXCJUZXh0XCIpXG4gICAgbGV0IGFjdHVhbFZlcnNpb24gPSB2ZXJzaW9uXG5cbiAgICBpZiAoIWFjdHVhbFZlcnNpb24pIHtcbiAgICAgIGlmIChuYW1lIGluIEZvbnRBd2Vzb21lNkdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lNlwiXG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gRm9udEF3ZXNvbWU1R2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9IFwiRm9udEF3ZXNvbWU1XCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBGb250QXdlc29tZUdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lXCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBNYXRlcmlhbEljb25zR2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9ICBcIk1hdGVyaWFsSWNvbnNcIlxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgZm9yd2FyZCBzb21lIHN0eWxlcyBsaWtlIGNvbG9yXG4gICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2Ygc3R5bGVzTGlzdCkge1xuICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHt9XG4gICAgICAgIGxldCBjb3VudCA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgICAgICAgIGlmIChrZXkgPT0gXCJjb2xvclwiKSB7XG4gICAgICAgICAgICBuZXdTdHlsZVtrZXldID0gc3R5bGVba2V5XVxuICAgICAgICAgICAgY291bnQrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICBhY3R1YWxTdHlsZXNMaXN0LnB1c2gobmV3U3R5bGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdHVhbFN0eWxlc0xpc3RcbiAgICB9LCBbc3R5bGVzTGlzdCwgc3R5bGVdKVxuXG4gICAgaWYgKGFjdHVhbFZlcnNpb24gPT0gXCJGb250QXdlc29tZVwiKSB7XG4gICAgICByZXR1cm4gPEZvbnRBd2Vzb21lSWNvbiBuYW1lPXtuYW1lfSBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2UgaWYgKGFjdHVhbFZlcnNpb24gPT0gXCJGb250QXdlc29tZTVcIikge1xuICAgICAgcmV0dXJuIDxGb250QXdlc29tZTVJY29uIG5hbWU9e25hbWV9IHN0eWxlPXthY3R1YWxTdHlsZXNMaXN0fSB7Li4ucmVzdFByb3BzfSAvPlxuICAgIH0gZWxzZSBpZiAoYWN0dWFsVmVyc2lvbiA9PSBcIkZvbnRBd2Vzb21lNlwiKSB7XG4gICAgICByZXR1cm4gPEZvbnRBd2Vzb21lNkljb24gbmFtZT17bmFtZX0gc3R5bGU9e2FjdHVhbFN0eWxlc0xpc3R9IHsuLi5yZXN0UHJvcHN9IC8+XG4gICAgfSBlbHNlIGlmIChhY3R1YWxWZXJzaW9uID09IFwiTWF0ZXJpYWxJY29uc1wiKSB7XG4gICAgICByZXR1cm4gPE1hdGVyaWFsSWNvbnNJY29uIG5hbWU9e25hbWV9IHN0eWxlPXthY3R1YWxTdHlsZXNMaXN0fSB7Li4ucmVzdFByb3BzfSAvPlxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmVyc2lvbjogJHthY3R1YWxWZXJzaW9ufWApXG4gICAgfVxuICB9XG59KSlcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLGFBQWEsTUFBTSxtQkFBbUI7QUFDN0MsT0FBT0MsZUFBZSxNQUFNLHVDQUF1QztBQUNuRSxPQUFPQyxnQkFBZ0IsTUFBTSx3Q0FBd0M7QUFDckUsT0FBT0MsZ0JBQWdCLE1BQU0sd0NBQXdDO0FBQ3JFLE9BQU9DLGlCQUFpQixNQUFNLHlDQUF5QztBQUN2RSxPQUFPQyxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLEtBQUssSUFBR0MsT0FBTyxRQUFPLE9BQU87QUFDcEMsU0FBUUMsY0FBYyxRQUFPLHVDQUF1QztBQUNwRSxTQUFRQyxjQUFjLFFBQU8saUJBQWlCO0FBRTlDLE1BQU1DLG1CQUFtQixHQUFHVCxlQUFlLENBQUNVLGNBQWMsQ0FBQyxDQUFDO0FBQzVELE1BQU1DLG9CQUFvQixHQUFHVixnQkFBZ0IsQ0FBQ1MsY0FBYyxDQUFDLENBQUM7QUFDOUQsTUFBTUUsb0JBQW9CLEdBQUdWLGdC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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
- "version": "1.0.2035",
3
+ "version": "1.0.2036",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
package/src/collection.js CHANGED
@@ -89,9 +89,24 @@ export default class ApiMakerCollection {
89
89
  })
90
90
  }
91
91
 
92
+ async ensureLoaded() {
93
+ if (!this.isLoaded()) {
94
+ const models = await this.toArray()
95
+
96
+ this.set(models)
97
+ }
98
+
99
+ return this.loaded()
100
+ }
101
+
92
102
  isLoaded() {
93
- if (this.args.reflectionName in this.args.model.relationshipsCache)
103
+ const {model, reflectionName} = this.args
104
+
105
+ if (reflectionName in model.relationshipsCache) {
106
+ return true
107
+ } else if (reflectionName in model.relationships) {
94
108
  return true
109
+ }
95
110
 
96
111
  return false
97
112
  }
@@ -136,11 +151,15 @@ export default class ApiMakerCollection {
136
151
 
137
152
  // Pushes another model onto the given collection.
138
153
  push(newModel) {
139
- if (!(this.args.reflectionName in this.args.model.relationships)) {
140
- this.args.model.relationships[this.args.reflectionName] = []
154
+ const {model, reflectionName} = this.args
155
+
156
+ if (!(reflectionName in model.relationships)) {
157
+ model.relationships[reflectionName] = []
141
158
  }
142
159
 
143
- this.args.model.relationships[this.args.reflectionName].push(newModel)
160
+ if (!model.relationships[reflectionName].includes(newModel)) {
161
+ model.relationships[reflectionName].push(newModel)
162
+ }
144
163
  }
145
164
 
146
165
  // Array shortcuts
@@ -153,8 +172,7 @@ export default class ApiMakerCollection {
153
172
  }
154
173
 
155
174
  page(page) {
156
- if (!page)
157
- page = 1
175
+ if (!page) page = 1
158
176
 
159
177
  return this._merge({page})
160
178
  }
@@ -163,6 +181,25 @@ export default class ApiMakerCollection {
163
181
  return this._merge({pageKey})
164
182
  }
165
183
 
184
+ isFiltered() {
185
+ const {queryArgs} = this
186
+
187
+ if (
188
+ queryArgs.accessibleBy ||
189
+ queryArgs.count ||
190
+ queryArgs.limit ||
191
+ queryArgs.page ||
192
+ queryArgs.params ||
193
+ queryArgs.per ||
194
+ queryArgs.ransack ||
195
+ queryArgs.search
196
+ ) {
197
+ return true
198
+ }
199
+
200
+ return false
201
+ }
202
+
166
203
  params() {
167
204
  let params = {}
168
205
 
@@ -282,7 +319,7 @@ export default class ApiMakerCollection {
282
319
 
283
320
  // This is needed when reloading a version of the model with the same selected attributes and preloads
284
321
  _addQueryToModels(models) {
285
- for(const model of models) {
322
+ for (const model of models) {
286
323
  model.collection = this
287
324
  }
288
325
  }
@@ -8,10 +8,28 @@ import React, {useMemo} from "react"
8
8
  import {shapeComponent} from "set-state-compare/src/shape-component"
9
9
  import {useMergedStyle} from "./default-style"
10
10
 
11
+ const FontAwesomeGlyphMap = FontAwesomeIcon.getRawGlyphMap()
12
+ const FontAwesome5GlyphMap = FontAwesome5Icon.getRawGlyphMap()
13
+ const FontAwesome6GlyphMap = FontAwesome6Icon.getRawGlyphMap()
14
+ const MaterialIconsGlyphMap = MaterialIconsIcon.getRawGlyphMap()
15
+
11
16
  export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent {
12
17
  render() {
13
- const {style, version = "FontAwesome", ...restProps} = this.props
18
+ const {name, style, version, ...restProps} = this.props
14
19
  const {stylesList} = useMergedStyle(style, "Text")
20
+ let actualVersion = version
21
+
22
+ if (!actualVersion) {
23
+ if (name in FontAwesome6GlyphMap) {
24
+ actualVersion = "FontAwesome6"
25
+ } else if (name in FontAwesome5GlyphMap) {
26
+ actualVersion = "FontAwesome5"
27
+ } else if (name in FontAwesomeGlyphMap) {
28
+ actualVersion = "FontAwesome"
29
+ } else if (name in MaterialIconsGlyphMap) {
30
+ actualVersion = "MaterialIcons"
31
+ }
32
+ }
15
33
 
16
34
  // Only forward some styles like color
17
35
  const actualStylesList = useMemo(() => {
@@ -36,16 +54,16 @@ export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent
36
54
  return actualStylesList
37
55
  }, [stylesList, style])
38
56
 
39
- if (version == "FontAwesome") {
40
- return <FontAwesomeIcon style={actualStylesList} {...restProps} />
41
- } else if (version == "FontAwesome5") {
42
- return <FontAwesome5Icon style={actualStylesList} {...restProps} />
43
- } else if (version == "FontAwesome6") {
44
- return <FontAwesome6Icon style={actualStylesList} {...restProps} />
45
- } else if (version == "MaterialIcons") {
46
- return <MaterialIconsIcon style={actualStylesList} {...restProps} />
57
+ if (actualVersion == "FontAwesome") {
58
+ return <FontAwesomeIcon name={name} style={actualStylesList} {...restProps} />
59
+ } else if (actualVersion == "FontAwesome5") {
60
+ return <FontAwesome5Icon name={name} style={actualStylesList} {...restProps} />
61
+ } else if (actualVersion == "FontAwesome6") {
62
+ return <FontAwesome6Icon name={name} style={actualStylesList} {...restProps} />
63
+ } else if (actualVersion == "MaterialIcons") {
64
+ return <MaterialIconsIcon name={name} style={actualStylesList} {...restProps} />
47
65
  } else {
48
- throw new Error(`Unknown version: ${version}`)
66
+ throw new Error(`Unknown version: ${actualVersion}`)
49
67
  }
50
68
  }
51
69
  }))