single-scripture-rcl 3.4.2-beta → 3.4.2-beta.2

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.
@@ -1,6 +1,11 @@
1
1
  import "core-js/modules/es.array.concat.js";
2
+ import "core-js/modules/es.array.includes.js";
2
3
  import "core-js/modules/es.array.is-array.js";
3
4
  import "core-js/modules/es.array.map.js";
5
+ import "core-js/modules/es.function.name.js";
6
+ import "core-js/modules/es.regexp.exec.js";
7
+ import "core-js/modules/es.string.includes.js";
8
+ import "core-js/modules/es.string.split.js";
4
9
 
5
10
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
6
11
 
@@ -21,135 +26,352 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(
21
26
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
27
 
23
28
  // @ts-ignore
24
- import { useEffect, useMemo, useState } from 'react';
29
+ import { useEffect, useState } from 'react';
25
30
  import { core, useRsrc } from 'scripture-resources-rcl';
26
31
  import { CONTENT_NOT_FOUND_ERROR, ERROR_STATE, INITIALIZED_STATE, INVALID_MANIFEST_ERROR, LOADING_STATE, MANIFEST_NOT_LOADED_ERROR, SCRIPTURE_NOT_LOADED_ERROR } from 'translation-helps-rcl';
27
32
  import { getVerses } from 'bible-reference-range';
33
+ import * as isEqual from 'deep-equal';
28
34
  import { cleanupVerseObjects, getResourceLink } from '../utils/ScriptureSettings';
29
35
  import { ServerConfig, ScriptureResource, ScriptureReference } from '../types';
30
36
  import { parseResourceManifest } from './parseResourceManifest';
37
+
38
+ /**
39
+ * extract branch from resource link
40
+ * @param resourceLink
41
+ */
42
+ function getBranchName(resourceLink) {
43
+ var branch = null;
44
+ resourceLink = resourceLink || '';
45
+ var parts = resourceLink.split('?ref=');
46
+
47
+ if (parts.length > 1) {
48
+ // if ref parameter found, get branch name after
49
+ branch = parts === null || parts === void 0 ? void 0 : parts[1];
50
+ } else {
51
+ // fall back to using useRsrc format such as "unfoldingWord/en/ust/master"
52
+ var _parts = resourceLink.split('/');
53
+
54
+ branch = _parts === null || _parts === void 0 ? void 0 : _parts[3];
55
+ }
56
+
57
+ return branch;
58
+ }
59
+ /**
60
+ * get the verse objects for the reference string
61
+ * @param {string} refStr - in format <chapter>:<verse>
62
+ * @param {object} bookObjects - parsed usfm for book
63
+ * @param {string} languageId
64
+ * @return {array|null} - of verseObjects
65
+ */
66
+
67
+
68
+ export function getVersesForRefStr(refStr, bookObjects, languageId) {
69
+ if (bookObjects) {
70
+ var verses = getVerses(bookObjects.chapters, refStr);
71
+
72
+ if (languageId === 'el-x-koine' || languageId === 'hbo') {
73
+ verses = verses.map(function (verse) {
74
+ var _verse$verseData;
75
+
76
+ if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
77
+ var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
78
+ verseObjects_ = cleanupVerseObjects(verseObjects_);
79
+ verse.verseData.verseObjects = verseObjects_;
80
+ }
81
+
82
+ return verse;
83
+ });
84
+ }
85
+
86
+ return verses;
87
+ }
88
+
89
+ return null;
90
+ }
91
+ /**
92
+ * get the verse objects for the reference object
93
+ * @param {object} reference
94
+ * @param {object} bookObjects - parsed usfm for book
95
+ * @param {string} languageId
96
+ * @return {array|null} - of verseObjects
97
+ */
98
+
99
+ export function getVersesForRef(reference, bookObjects, languageId) {
100
+ var refStr = "".concat(reference.chapter, ":").concat(reference.verse);
101
+ return getVersesForRefStr(refStr, bookObjects, languageId);
102
+ }
31
103
  export function useScripture(_ref) {
32
- var _resourceStatus;
104
+ var _resourceStatus, _fetchParams$referenc;
33
105
 
34
106
  var config = _ref.config,
107
+ readyForFetch = _ref.readyForFetch,
35
108
  reference = _ref.reference,
36
109
  resource_ = _ref.resource,
37
110
  resourceLink_ = _ref.resourceLink,
38
111
  _ref$wholeBook = _ref.wholeBook,
39
112
  wholeBook = _ref$wholeBook === void 0 ? false : _ref$wholeBook;
40
113
 
41
- var _useState = useState(false),
114
+ var _useState = useState({
115
+ bookObjects: null,
116
+ fetchedBook: '',
117
+ fetchParams: {
118
+ resourceLink: '',
119
+ reference: {},
120
+ config: {}
121
+ },
122
+ ignoreSha: null,
123
+ initialized: false,
124
+ fetched: false,
125
+ resourceState: {
126
+ bibleJson: null,
127
+ matchedVerse: null,
128
+ resource: null,
129
+ content: null,
130
+ loadingResource: false,
131
+ loadingContent: false,
132
+ fetchResponse: null
133
+ },
134
+ versesForRef: []
135
+ }),
42
136
  _useState2 = _slicedToArray(_useState, 2),
43
- initialized = _useState2[0],
44
- setInitialized = _useState2[1];
45
-
46
- var _useState3 = useState(null),
47
- _useState4 = _slicedToArray(_useState3, 2),
48
- bookObjects = _useState4[0],
49
- setBookObjects = _useState4[1];
50
-
51
- var _useState5 = useState(null),
52
- _useState6 = _slicedToArray(_useState5, 2),
53
- versesForRef = _useState6[0],
54
- setVersesForRef = _useState6[1];
55
-
56
- var resourceLink = resourceLink_;
57
-
58
- if (!resourceLink_ && resource_) {
59
- var _ref2 = resource_ || {},
60
- owner = _ref2.owner,
61
- _languageId = _ref2.languageId,
62
- projectId = _ref2.projectId,
63
- _ref2$branch = _ref2.branch,
64
- branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
65
- _ref2$ref = _ref2.ref,
66
- ref = _ref2$ref === void 0 ? null : _ref2$ref;
67
-
68
- var ref_ = ref || branch;
69
- resourceLink = getResourceLink({
70
- owner: owner,
71
- languageId: _languageId,
72
- resourceId: projectId,
73
- ref: ref_
137
+ state = _useState2[0],
138
+ setState_ = _useState2[1];
139
+
140
+ var bookObjects = state.bookObjects,
141
+ fetchedBook = state.fetchedBook,
142
+ fetchParams = state.fetchParams,
143
+ fetched = state.fetched,
144
+ ignoreSha = state.ignoreSha,
145
+ initialized = state.initialized,
146
+ resourceState = state.resourceState,
147
+ versesForRef = state.versesForRef;
148
+
149
+ var _bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
150
+
151
+ function setState(newState) {
152
+ setState_(function (prevState) {
153
+ return _objectSpread(_objectSpread({}, prevState), newState);
74
154
  });
75
155
  }
76
156
 
157
+ useEffect(function () {
158
+ if (readyForFetch) {
159
+ console.log("useScripture - readyForFetch true, initializing");
160
+ var resourceLink = readyForFetch && resourceLink_;
161
+
162
+ if (!resourceLink_ && resource_) {
163
+ var _ref2 = resource_ || {},
164
+ owner = _ref2.owner,
165
+ _languageId = _ref2.languageId,
166
+ projectId = _ref2.projectId,
167
+ _ref2$branch = _ref2.branch,
168
+ branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
169
+ _ref2$ref = _ref2.ref,
170
+ ref = _ref2$ref === void 0 ? null : _ref2$ref;
171
+
172
+ var ref_ = ref || branch;
173
+ resourceLink = getResourceLink({
174
+ owner: owner,
175
+ languageId: _languageId,
176
+ resourceId: projectId,
177
+ ref: ref_
178
+ });
179
+ }
180
+
181
+ var bookRef = _objectSpread({}, reference);
182
+
183
+ if (wholeBook) {
184
+ delete bookRef.chapter; // remove the chapter and verse so the whole book is fetched
185
+
186
+ delete bookRef.verse;
187
+ }
188
+
189
+ if (resourceLink !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink)) {
190
+ console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_));
191
+ } else if (bookRef !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference)) {
192
+ console.log("useScripture - book changed to ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink));
193
+ }
194
+
195
+ var newFetchParams = {
196
+ resourceLink: resourceLink,
197
+ reference: bookRef,
198
+ config: config
199
+ };
200
+
201
+ if (!isEqual(newFetchParams, fetchParams)) {
202
+ console.log("useScripture - FETCHING new params ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_), newFetchParams);
203
+ setState({
204
+ fetchParams: newFetchParams,
205
+ fetched: false,
206
+ ignoreSha: null
207
+ });
208
+ }
209
+ }
210
+ }, [readyForFetch, _bookId, resourceLink_]);
211
+ useEffect(function () {
212
+ console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " readyForFetch is now ").concat(readyForFetch));
213
+ }, [readyForFetch]);
77
214
  var options = {
78
215
  getBibleJson: true
79
216
  };
80
- var bookRef = useMemo(function () {
81
- var bookRef = _objectSpread({}, reference);
82
217
 
83
- if (wholeBook) {
84
- delete bookRef.chapter; // remove the chapter so the whole book is fetched
85
- }
218
+ var _resourceResults = useRsrc({
219
+ config: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.config,
220
+ reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
221
+ resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
222
+ options: options
223
+ }); // only use the results if readyToFetch
86
224
 
87
- return bookRef;
88
- }, [reference, wholeBook]);
89
225
 
90
- var _useRsrc = useRsrc({
91
- config: config,
92
- reference: bookRef,
93
- resourceLink: resourceLink,
94
- options: options
95
- }),
96
- _useRsrc$state = _useRsrc.state,
97
- bibleJson = _useRsrc$state.bibleJson,
98
- matchedVerse = _useRsrc$state.matchedVerse,
99
- resource = _useRsrc$state.resource,
100
- content = _useRsrc$state.content,
101
- loadingResource = _useRsrc$state.loadingResource,
102
- loadingContent = _useRsrc$state.loadingContent,
103
- fetchResponse = _useRsrc$state.fetchResponse,
104
- reloadResource = _useRsrc.actions.reloadResource;
226
+ var bibleJson = resourceState.bibleJson,
227
+ content = resourceState.content,
228
+ fetchResponse = resourceState.fetchResponse,
229
+ loadingResource = resourceState.loadingResource,
230
+ loadingContent = resourceState.loadingContent,
231
+ matchedVerse = resourceState.matchedVerse,
232
+ resource = resourceState.resource;
233
+ useEffect(function () {
234
+ // validate response to make sure from latest request
235
+ if (readyForFetch) {
236
+ var currentResourceState = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state;
237
+
238
+ if (!fetched && !isEqual(currentResourceState, resourceState)) {
239
+ var _content = currentResourceState.content,
240
+ _fetchResponse = currentResourceState.fetchResponse,
241
+ _loadingContent = currentResourceState.loadingContent,
242
+ _loadingResource = currentResourceState.loadingResource; // console.log(`useScripture resources changed`, { content, fetchParams, fetchResponse })
243
+
244
+ if (!_loadingContent && !_loadingResource && _content && _fetchResponse) {
245
+ var _fetchResponse$data, _fetchResponse$data2;
246
+
247
+ var newState = {
248
+ resourceState: currentResourceState
249
+ };
250
+ console.log("useScripture content changed", {
251
+ content: _content,
252
+ fetchParams: fetchParams,
253
+ fetchResponse: _fetchResponse
254
+ }); // TRICKY - responses from server can come back from previous requests. So we make sure this response is for the current requested book
255
+
256
+ var sameBook = false; // @ts-ignore
257
+
258
+ var expectedBookId = _bookId || '';
259
+ var _fetchedBook = _content.name;
260
+
261
+ if (_fetchedBook && expectedBookId) {
262
+ var _fetchedBook$split = _fetchedBook.split('.'),
263
+ _fetchedBook$split2 = _slicedToArray(_fetchedBook$split, 2),
264
+ name = _fetchedBook$split2[0],
265
+ ext = _fetchedBook$split2[1];
266
+
267
+ if (ext.toLowerCase() === 'usfm') {
268
+ sameBook = name.toLowerCase().includes(expectedBookId.toLowerCase());
269
+ }
270
+ }
271
+
272
+ var sha = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data = _fetchResponse.data) === null || _fetchResponse$data === void 0 ? void 0 : _fetchResponse$data.sha) || null;
273
+ var url = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data2 = _fetchResponse.data) === null || _fetchResponse$data2 === void 0 ? void 0 : _fetchResponse$data2.url) || null;
274
+
275
+ if (sameBook) {
276
+ // also make sure it is the same branch
277
+ var fetchedBranch = getBranchName(url);
278
+ var fetchingBranch = getBranchName(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink);
279
+
280
+ if (fetchedBranch !== fetchingBranch) {
281
+ console.log("useScripture invalid branch, expected branch is ".concat(fetchingBranch, ", but fetchedBranch is ").concat(fetchedBranch), {
282
+ sha: sha,
283
+ url: url
284
+ });
285
+ sameBook = false;
286
+ }
287
+ }
288
+
289
+ if (ignoreSha === sha) {
290
+ console.log("useScripture - the sha is the same as the ignore sha ".concat(sha), {
291
+ sha: sha,
292
+ url: url
293
+ });
294
+ sameBook = false;
295
+ }
296
+
297
+ if (!sameBook) {
298
+ console.log("useScripture invalid book, expectedBookId is ".concat(expectedBookId, ", but received book name ").concat(_fetchedBook), {
299
+ sha: sha,
300
+ url: url
301
+ });
302
+ } else {
303
+ newState['bookObjects'] = _content;
304
+ newState['versesForRef'] = updateVersesForRef(_content);
305
+ newState['fetchedBook'] = expectedBookId;
306
+
307
+ if (!isEqual(newState, {
308
+ bookObjects: bookObjects,
309
+ versesForRef: versesForRef,
310
+ fetchedBook: expectedBookId,
311
+ resourceState: resourceState
312
+ })) {
313
+ console.log("useScripture correct book, expectedBookId is ".concat(expectedBookId), {
314
+ sha: sha,
315
+ url: url
316
+ });
317
+ newState['fetched'] = true;
318
+ newState['ignoreSha'] = null;
319
+ setState(newState);
320
+ }
321
+ }
322
+ } else {
323
+ if (!isEqual(currentResourceState, resourceState)) {
324
+ // console.log(`useScripture state changed, but no content`, currentResourceState)
325
+ setState({
326
+ resourceState: currentResourceState
327
+ });
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }, [readyForFetch, _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state]);
105
333
 
106
334
  var _parseResourceManifes = parseResourceManifest(resource),
107
335
  title = _parseResourceManifes.title,
108
336
  version = _parseResourceManifes.version;
109
337
 
110
- var _ref3 = bibleJson || {},
111
- verseObjects = _ref3.verseObjects;
112
-
113
- var _ref4 = resource_ || {},
114
- languageId = _ref4.languageId;
338
+ var _ref3 = resource_ || {},
339
+ languageId = _ref3.languageId;
115
340
 
116
- var loading = loadingResource || loadingContent;
341
+ var loading = loadingResource || loadingContent || !readyForFetch;
117
342
  var contentNotFoundError = !content;
118
343
  var scriptureNotLoadedError = !bibleJson;
119
344
  var manifestNotFoundError = !(resource !== null && resource !== void 0 && resource.manifest);
120
345
  var invalidManifestError = !title || !version || !languageId;
121
- var error = initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
346
+ var error = readyForFetch && initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
122
347
  var resourceStatus = (_resourceStatus = {}, _defineProperty(_resourceStatus, LOADING_STATE, loading), _defineProperty(_resourceStatus, CONTENT_NOT_FOUND_ERROR, contentNotFoundError), _defineProperty(_resourceStatus, SCRIPTURE_NOT_LOADED_ERROR, scriptureNotLoadedError), _defineProperty(_resourceStatus, MANIFEST_NOT_LOADED_ERROR, manifestNotFoundError), _defineProperty(_resourceStatus, INVALID_MANIFEST_ERROR, invalidManifestError), _defineProperty(_resourceStatus, ERROR_STATE, error), _defineProperty(_resourceStatus, INITIALIZED_STATE, initialized), _resourceStatus);
123
348
  useEffect(function () {
124
- if (!initialized) {
349
+ if (!readyForFetch) {
350
+ if (initialized) {
351
+ setState({
352
+ intialized: false
353
+ });
354
+ }
355
+ } else if (!initialized) {
125
356
  if (loading) {
126
357
  // once first load has begun, we are initialized
127
- setInitialized(true);
358
+ setState({
359
+ intialized: true
360
+ });
128
361
  }
129
362
  }
130
- }, [loading]);
131
-
132
- function getVersesForRef(ref) {
363
+ }, [loading, readyForFetch]);
364
+ /**
365
+ * get verses for ref
366
+ * @param refStr
367
+ * @param content_
368
+ */
369
+
370
+ function _getVersesForRef(refStr) {
133
371
  var content_ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : bookObjects;
134
372
 
135
373
  if (content_) {
136
- var verses = getVerses(content_.chapters, ref);
137
-
138
- if (languageId === 'el-x-koine' || languageId === 'hbo') {
139
- verses = verses.map(function (verse) {
140
- var _verse$verseData;
141
-
142
- if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
143
- var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
144
- verseObjects_ = cleanupVerseObjects(verseObjects_);
145
- verse.verseData.verseObjects = verseObjects_;
146
- }
147
-
148
- return verse;
149
- });
150
- }
151
-
152
- return verses;
374
+ return getVersesForRefStr(refStr, content_, languageId);
153
375
  }
154
376
 
155
377
  return null;
@@ -167,7 +389,9 @@ export function useScripture(_ref) {
167
389
  bookObjects_.chapters[chapter] = _objectSpread({}, bookObjects_.chapters[chapter]); // shallow copy verses
168
390
 
169
391
  bookObjects_.chapters[chapter][verse] = verseData;
170
- setBookObjects(bookObjects_);
392
+ setState({
393
+ bookObjects: bookObjects_
394
+ });
171
395
  return bookObjects_;
172
396
  }
173
397
  }
@@ -176,41 +400,95 @@ export function useScripture(_ref) {
176
400
  return null;
177
401
  }
178
402
 
179
- useEffect(function () {
180
- if (bookObjects) {
181
- var _ref5 = "".concat(reference.chapter, ":").concat(reference.verse);
403
+ function updateVersesForRef() {
404
+ var _bookObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bookObjects;
182
405
 
183
- var _versesForRef = getVersesForRef(_ref5, bookObjects);
406
+ var newVersesForRef = [];
184
407
 
185
- setVersesForRef(_versesForRef);
186
- } else {
187
- setVersesForRef(null);
408
+ if (_bookObjects) {
409
+ newVersesForRef = getVersesForRef(reference, _bookObjects, languageId);
410
+ return newVersesForRef;
188
411
  }
189
- }, [bookObjects]);
190
- useEffect(function () {
191
- setBookObjects(content);
192
- }, [content]);
193
412
 
194
- if (languageId === 'el-x-koine' || languageId === 'hbo') {
195
- verseObjects = core.occurrenceInjectVerseObjects(verseObjects);
196
- verseObjects = cleanupVerseObjects(verseObjects);
413
+ return null;
197
414
  }
415
+ /**
416
+ * force reload of current resource
417
+ * @param {string|undefined} ignoreSha - optional sha to ignore
418
+ */
419
+
420
+
421
+ function reloadResource() {
422
+ var ignoreSha = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
423
+
424
+ var _reloadResource = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.actions.reloadResource;
425
+
426
+ if (_reloadResource) {
427
+ var newState = {
428
+ fetched: false
429
+ };
430
+
431
+ if (ignoreSha) {
432
+ // TRICKY - if the response was for this sha (which was the previous sha) then we need to ignore it
433
+ newState['ignoreSha'] = ignoreSha;
434
+ }
198
435
 
436
+ setState(newState);
437
+
438
+ _reloadResource();
439
+ }
440
+ } // @ts-ignore
441
+
442
+
443
+ var currentBookRef = fetchParams === null || fetchParams === void 0 ? void 0 : (_fetchParams$referenc = fetchParams.reference) === null || _fetchParams$referenc === void 0 ? void 0 : _fetchParams$referenc.projectId;
444
+ useEffect(function () {
445
+ if (currentBookRef) {
446
+ console.log("useScripture fetched book changed to ".concat(currentBookRef, ", ").concat(resourceLink_), {
447
+ content: content,
448
+ fetchParams: fetchParams
449
+ });
450
+ setState({
451
+ bookObjects: null
452
+ });
453
+ } // @ts-ignore
454
+
455
+ }, [currentBookRef]);
456
+ useEffect(function () {
457
+ console.log("useScripture book ref changed to ".concat(_bookId, ", ").concat(resourceLink_)); // @ts-ignore
458
+ }, [_bookId]);
459
+ useEffect(function () {
460
+ var expectedBookId = _bookId || '';
461
+ var fetchedBookSame = fetchedBook && fetchedBook === expectedBookId;
462
+ var _versesForRef = [];
463
+
464
+ if (!fetchedBookSame) {// if (expectedBookId && fetchedBook) {
465
+ // console.log(`useScripture expected book ${expectedBookId} but fetched book was ${fetchedBook} - clearing`)
466
+ // }
467
+ } else {
468
+ var _bookObjects = fetchedBookSame ? bookObjects : null;
469
+
470
+ _versesForRef = updateVersesForRef(_bookObjects); // console.log(`useScripture _bookObjects is ${!!_bookObjects} and books are the same ${fetchedBook}`, { content, fetchParams })
471
+ }
472
+
473
+ if (!isEqual(_versesForRef, versesForRef)) {
474
+ setState({
475
+ versesForRef: _versesForRef
476
+ });
477
+ }
478
+ }, [reference]);
199
479
  return {
200
- title: title,
201
- version: version,
202
- reference: reference,
203
- resourceLink: resourceLink,
204
- matchedVerse: matchedVerse,
205
- verseObjects: verseObjects,
206
480
  bookObjects: bookObjects,
207
- resourceStatus: resourceStatus,
208
481
  fetchResponse: fetchResponse,
209
- setBookObjects: setBookObjects,
210
- getVersesForRef: getVersesForRef,
211
- versesForRef: versesForRef,
482
+ getVersesForRef: _getVersesForRef,
483
+ matchedVerse: matchedVerse,
484
+ reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
485
+ reloadResource: reloadResource,
486
+ resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
487
+ resourceStatus: resourceStatus,
488
+ title: title,
212
489
  updateVerse: updateVerse,
213
- reloadResource: reloadResource
490
+ version: version,
491
+ versesForRef: versesForRef
214
492
  };
215
493
  }
216
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImNvcmUiLCJ1c2VSc3JjIiwiQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IiLCJFUlJPUl9TVEFURSIsIklOSVRJQUxJWkVEX1NUQVRFIiwiSU5WQUxJRF9NQU5JRkVTVF9FUlJPUiIsIkxPQURJTkdfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IiLCJnZXRWZXJzZXMiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWZlcmVuY2UiLCJyZXNvdXJjZV8iLCJyZXNvdXJjZSIsInJlc291cmNlTGlua18iLCJyZXNvdXJjZUxpbmsiLCJ3aG9sZUJvb2siLCJpbml0aWFsaXplZCIsInNldEluaXRpYWxpemVkIiwiYm9va09iamVjdHMiLCJzZXRCb29rT2JqZWN0cyIsInZlcnNlc0ZvclJlZiIsInNldFZlcnNlc0ZvclJlZiIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInByb2plY3RJZCIsImJyYW5jaCIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsImJvb2tSZWYiLCJjaGFwdGVyIiwic3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwicmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwidGl0bGUiLCJ2ZXJzaW9uIiwidmVyc2VPYmplY3RzIiwibG9hZGluZyIsImNvbnRlbnROb3RGb3VuZEVycm9yIiwic2NyaXB0dXJlTm90TG9hZGVkRXJyb3IiLCJtYW5pZmVzdE5vdEZvdW5kRXJyb3IiLCJtYW5pZmVzdCIsImludmFsaWRNYW5pZmVzdEVycm9yIiwiZXJyb3IiLCJyZXNvdXJjZVN0YXR1cyIsImdldFZlcnNlc0ZvclJlZiIsImNvbnRlbnRfIiwidmVyc2VzIiwiY2hhcHRlcnMiLCJtYXAiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0c18iLCJvY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzIiwidXBkYXRlVmVyc2UiLCJib29rT2JqZWN0c18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQVNBLFNBQVQsRUFBb0JDLE9BQXBCLEVBQTZCQyxRQUE3QixRQUE2QyxPQUE3QztBQUNBLFNBQ0VDLElBREYsRUFFRUMsT0FGRixRQUdPLHlCQUhQO0FBSUEsU0FDRUMsdUJBREYsRUFFRUMsV0FGRixFQUdFQyxpQkFIRixFQUlFQyxzQkFKRixFQUtFQyxhQUxGLEVBTUVDLHlCQU5GLEVBT0VDLDBCQVBGLFFBUU8sdUJBUlA7QUFTQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLG1CQUFULEVBQThCQyxlQUE5QixRQUFxRCw0QkFBckQ7QUFDQSxTQUNFQyxZQURGLEVBRUVDLGlCQUZGLEVBR0VDLGtCQUhGLFFBSU8sVUFKUDtBQUtBLFNBQVNDLHFCQUFULFFBQXNDLHlCQUF0QztBQWVBLE9BQU8sU0FBU0MsWUFBVCxPQU1JO0FBQUE7O0FBQUEsTUFMVEMsTUFLUyxRQUxUQSxNQUtTO0FBQUEsTUFKVEMsU0FJUyxRQUpUQSxTQUlTO0FBQUEsTUFIQ0MsU0FHRCxRQUhUQyxRQUdTO0FBQUEsTUFGS0MsYUFFTCxRQUZUQyxZQUVTO0FBQUEsNEJBRFRDLFNBQ1M7QUFBQSxNQURUQSxTQUNTLCtCQURHLEtBQ0g7O0FBQUEsa0JBQzZCeEIsUUFBUSxDQUFDLEtBQUQsQ0FEckM7QUFBQTtBQUFBLE1BQ0Z5QixXQURFO0FBQUEsTUFD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SUFBQUEsV0FBVyxFQUFYQSxXQWJLO0FBY0x0QixJQUFBQSxjQUFjLEVBQWRBO0FBZEssR0FBUDtBQWdCRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvcmUsXG4gIHVzZVJzcmMsXG59IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHtcbiAgQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IsXG4gIEVSUk9SX1NUQVRFLFxuICBJTklUSUFMSVpFRF9TVEFURSxcbiAgSU5WQUxJRF9NQU5JRkVTVF9FUlJPUixcbiAgTE9BRElOR19TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IGNsZWFudXBWZXJzZU9iamVjdHMsIGdldFJlc291cmNlTGluayB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoe1xuICBjb25maWcsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYm9va09iamVjdHMsIHNldEJvb2tPYmplY3RzXSA9IHVzZVN0YXRlKG51bGwpXG4gIGNvbnN0IFt2ZXJzZXNGb3JSZWYsIHNldFZlcnNlc0ZvclJlZl0gPSB1c2VTdGF0ZShudWxsKVxuICBsZXQgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rX1xuXG4gIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lcixcbiAgICAgIGxhbmd1YWdlSWQsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICAgIHJlZiA9IG51bGwsXG4gICAgfSA9IHJlc291cmNlXyB8fCB7fVxuICAgIGNvbnN0IHJlZl8gPSByZWYgfHwgYnJhbmNoXG4gICAgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgIG93bmVyLFxuICAgICAgbGFuZ3VhZ2VJZCxcbiAgICAgIHJlc291cmNlSWQ6IHByb2plY3RJZCxcbiAgICAgIHJlZjogcmVmXyxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgZ2V0QmlibGVKc29uOiB0cnVlIH1cbiAgY29uc3QgYm9va1JlZiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tSZWYgPSB7IC4uLnJlZmVyZW5jZSB9XG5cbiAgICBpZiAod2hvbGVCb29rKSB7XG4gICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBzbyB0aGUgd2hvbGUgYm9vayBpcyBmZXRjaGVkXG4gICAgfVxuICAgIHJldHVybiBib29rUmVmXG4gIH0sIFtyZWZlcmVuY2UsIHdob2xlQm9va10pXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBiaWJsZUpzb24sXG4gICAgICBtYXRjaGVkVmVyc2UsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBsb2FkaW5nUmVzb3VyY2UsXG4gICAgICBsb2FkaW5nQ29udGVudCxcbiAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHJlbG9hZFJlc291cmNlIH0sXG4gIH0gPSB1c2VSc3JjKHtcbiAgICBjb25maWcsIHJlZmVyZW5jZTogYm9va1JlZiwgcmVzb3VyY2VMaW5rLCBvcHRpb25zLFxuICB9KVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgbGV0IHsgdmVyc2VPYmplY3RzIH0gPSBiaWJsZUpzb24gfHwge31cbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gaW5pdGlhbGl6ZWQgJiYgIWxvYWRpbmcgJiZcbiAgICAoY29udGVudE5vdEZvdW5kRXJyb3IgfHwgc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IgfHwgbWFuaWZlc3ROb3RGb3VuZEVycm9yIHx8IGludmFsaWRNYW5pZmVzdEVycm9yKVxuICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHtcbiAgICBbTE9BRElOR19TVEFURV06IGxvYWRpbmcsXG4gICAgW0NPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SXTogY29udGVudE5vdEZvdW5kRXJyb3IsXG4gICAgW1NDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SXTogc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IsXG4gICAgW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdOiBtYW5pZmVzdE5vdEZvdW5kRXJyb3IsXG4gICAgW0lOVkFMSURfTUFOSUZFU1RfRVJST1JdOiBpbnZhbGlkTWFuaWZlc3RFcnJvcixcbiAgICBbRVJST1JfU1RBVEVdOiBlcnJvcixcbiAgICBbSU5JVElBTElaRURfU1RBVEVdOiBpbml0aWFsaXplZCxcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHsgLy8gb25jZSBmaXJzdCBsb2FkIGhhcyBiZWd1biwgd2UgYXJlIGluaXRpYWxpemVkXG4gICAgICAgIHNldEluaXRpYWxpemVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbbG9hZGluZ10pXG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmKHJlZiwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhjb250ZW50Xy5jaGFwdGVycywgcmVmKVxuXG4gICAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICAgIHZlcnNlcyA9IHZlcnNlcy5tYXAodmVyc2UgPT4ge1xuICAgICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIHZlcnNlT2JqZWN0c18gPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0c18pXG4gICAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmVyc2VcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnNlc1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0Qm9va09iamVjdHMoYm9va09iamVjdHNfKVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IHJlZiA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBnZXRWZXJzZXNGb3JSZWYocmVmLCBib29rT2JqZWN0cylcbiAgICAgIHNldFZlcnNlc0ZvclJlZih2ZXJzZXNGb3JSZWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZlcnNlc0ZvclJlZihudWxsKVxuICAgIH1cbiAgfSwgW2Jvb2tPYmplY3RzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEJvb2tPYmplY3RzKGNvbnRlbnQpXG4gIH0sIFtjb250ZW50XSlcblxuICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgdmVyc2VPYmplY3RzID0gY29yZS5vY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGUsXG4gICAgdmVyc2lvbixcbiAgICByZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIG1hdGNoZWRWZXJzZSxcbiAgICB2ZXJzZU9iamVjdHMsXG4gICAgYm9va09iamVjdHMsXG4gICAgcmVzb3VyY2VTdGF0dXMsXG4gICAgZmV0Y2hSZXNwb25zZSxcbiAgICBzZXRCb29rT2JqZWN0cyxcbiAgICBnZXRWZXJzZXNGb3JSZWYsXG4gICAgdmVyc2VzRm9yUmVmLFxuICAgIHVwZGF0ZVZlcnNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICB9XG59XG4iXX0=
494
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZVJzcmMiLCJDT05URU5UX05PVF9GT1VORF9FUlJPUiIsIkVSUk9SX1NUQVRFIiwiSU5JVElBTElaRURfU1RBVEUiLCJJTlZBTElEX01BTklGRVNUX0VSUk9SIiwiTE9BRElOR19TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUiIsImdldFZlcnNlcyIsImlzRXF1YWwiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiZmV0Y2hlZEJvb2siLCJmZXRjaFBhcmFtcyIsImlnbm9yZVNoYSIsImluaXRpYWxpemVkIiwiZmV0Y2hlZCIsInJlc291cmNlU3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJfYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJvd25lciIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsIl9yZXNvdXJjZVJlc3VsdHMiLCJjdXJyZW50UmVzb3VyY2VTdGF0ZSIsInNhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJuYW1lIiwiZXh0IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNoYSIsImRhdGEiLCJ1cmwiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJ1cGRhdGVWZXJzZXNGb3JSZWYiLCJ0aXRsZSIsInZlcnNpb24iLCJsb2FkaW5nIiwiY29udGVudE5vdEZvdW5kRXJyb3IiLCJzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciIsIm1hbmlmZXN0Tm90Rm91bmRFcnJvciIsIm1hbmlmZXN0IiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJlcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3VyY2UiLCJfcmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwiY3VycmVudEJvb2tSZWYiLCJmZXRjaGVkQm9va1NhbWUiLCJfdmVyc2VzRm9yUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUNFQyxJQURGLEVBRUVDLE9BRkYsUUFHTyx5QkFI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QUEyQztBQUN6Q0ssTUFBQUEsUUFBUSxDQUFDO0FBQUVMLFFBQUFBLFlBQVksRUFBRXNEO0FBQWhCLE9BQUQsQ0FBUjtBQUNEO0FBQ0YsR0FsQlEsRUFrQk4sQ0FBQzNFLFNBQUQsQ0FsQk0sQ0FBVDtBQW9CQSxTQUFPO0FBQ0xYLElBQUFBLFdBQVcsRUFBWEEsV0FESztBQUVMK0IsSUFBQUEsYUFBYSxFQUFiQSxhQUZLO0FBR0xyQixJQUFBQSxlQUFlLEVBQUVpRSxnQkFIWjtBQUlMaEQsSUFBQUEsWUFBWSxFQUFaQSxZQUpLO0FBS0xoQixJQUFBQSxTQUFTLEVBQUVVLFdBQUYsYUFBRUEsV0FBRix1QkFBRUEsV0FBVyxDQUFFVixTQUxuQjtBQU1Mc0UsSUFBQUEsY0FBYyxFQUFkQSxjQU5LO0FBT0x6RixJQUFBQSxZQUFZLEVBQUU2QixXQUFGLGFBQUVBLFdBQUYsdUJBQUVBLFdBQVcsQ0FBRTdCLFlBUHRCO0FBUUxpRixJQUFBQSxjQUFjLEVBQWRBLGNBUks7QUFTTFQsSUFBQUEsS0FBSyxFQUFMQSxLQVRLO0FBVUxhLElBQUFBLFdBQVcsRUFBWEEsV0FWSztBQVdMWixJQUFBQSxPQUFPLEVBQVBBLE9BWEs7QUFZTGpDLElBQUFBLFlBQVksRUFBWkE7QUFaSyxHQUFQO0FBY0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQge1xuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvcmUsXG4gIHVzZVJzcmMsXG59IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHtcbiAgQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IsXG4gIEVSUk9SX1NUQVRFLFxuICBJTklUSUFMSVpFRF9TVEFURSxcbiAgSU5WQUxJRF9NQU5JRkVTVF9FUlJPUixcbiAgTE9BRElOR19TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGNsZWFudXBWZXJzZU9iamVjdHMsIGdldFJlc291cmNlTGluayB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG4gIC8qKiBpZiB0cnVlIHRoZW4gc2V0dGluZ3MgYXJlIHJlYWR5IGZvciBmZXRjaGluZyBkYXRhICovXG4gIHJlYWR5Rm9yRmV0Y2g6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZXh0cmFjdCBicmFuY2ggZnJvbSByZXNvdXJjZSBsaW5rXG4gKiBAcGFyYW0gcmVzb3VyY2VMaW5rXG4gKi9cbmZ1bmN0aW9uIGdldEJyYW5jaE5hbWUocmVzb3VyY2VMaW5rOiBzdHJpbmcpIHtcbiAgbGV0IGJyYW5jaCA9IG51bGxcbiAgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rIHx8ICcnXG4gIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCc/cmVmPScpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsgLy8gaWYgcmVmIHBhcmFtZXRlciBmb3VuZCwgZ2V0IGJyYW5jaCBuYW1lIGFmdGVyXG4gICAgYnJhbmNoID0gcGFydHM/LlsxXVxuICB9IGVsc2UgeyAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdXNlUnNyYyBmb3JtYXQgc3VjaCBhcyBcInVuZm9sZGluZ1dvcmQvZW4vdXN0L21hc3RlclwiXG4gICAgY29uc3QgX3BhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCcvJylcbiAgICBicmFuY2ggPSBfcGFydHM/LlszXVxuICB9XG4gIHJldHVybiBicmFuY2hcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyIC0gaW4gZm9ybWF0IDxjaGFwdGVyPjo8dmVyc2U+XG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBpZiAoYm9va09iamVjdHMpIHtcbiAgICBsZXQgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tPYmplY3RzLmNoYXB0ZXJzLCByZWZTdHIpXG5cbiAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICB2ZXJzZXMgPSB2ZXJzZXMubWFwKHZlcnNlID0+IHtcbiAgICAgICAgaWYgKCB2ZXJzZT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICB2ZXJzZU9iamVjdHNfID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHNfKVxuICAgICAgICAgIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHNfXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlcnNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJzZXNcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIGdldCB0aGUgdmVyc2Ugb2JqZWN0cyBmb3IgdGhlIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBib29rT2JqZWN0cyAtIHBhcnNlZCB1c2ZtIGZvciBib29rXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VJZFxuICogQHJldHVybiB7YXJyYXl8bnVsbH0gLSBvZiB2ZXJzZU9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIGJvb2tPYmplY3RzLCBsYW5ndWFnZUlkKSB7XG4gIGNvbnN0IHJlZlN0ciA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZSh7IC8vIGhvb2sgZm9yIGZldGNoaW5nIHNjcmlwdHVyZVxuICBjb25maWcsXG4gIHJlYWR5Rm9yRmV0Y2gsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSB1c2VTdGF0ZSh7XG4gICAgYm9va09iamVjdHM6IG51bGwsXG4gICAgZmV0Y2hlZEJvb2s6ICcnLFxuICAgIGZldGNoUGFyYW1zOiB7XG4gICAgICByZXNvdXJjZUxpbms6ICcnLFxuICAgICAgcmVmZXJlbmNlOiB7fSxcbiAgICAgIGNvbmZpZzoge30sXG4gICAgfSxcbiAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgIHJlc291cmNlU3RhdGU6IHtcbiAgICAgIGJpYmxlSnNvbjogbnVsbCxcbiAgICAgIG1hdGNoZWRWZXJzZTogbnVsbCxcbiAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgY29udGVudDogbnVsbCxcbiAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICBsb2FkaW5nQ29udGVudDogZmFsc2UsXG4gICAgICBmZXRjaFJlc3BvbnNlOiBudWxsLFxuICAgIH0sXG4gICAgdmVyc2VzRm9yUmVmOiBbXSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgYm9va09iamVjdHMsXG4gICAgZmV0Y2hlZEJvb2ssXG4gICAgZmV0Y2hQYXJhbXMsXG4gICAgZmV0Y2hlZCxcbiAgICBpZ25vcmVTaGEsXG4gICAgaW5pdGlhbGl6ZWQsXG4gICAgcmVzb3VyY2VTdGF0ZSxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuICBjb25zdCBfYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSByZWFkeUZvckZldGNoIHRydWUsIGluaXRpYWxpemluZ2ApXG4gICAgICBsZXQgcmVzb3VyY2VMaW5rID0gcmVhZHlGb3JGZXRjaCAmJiByZXNvdXJjZUxpbmtfXG5cbiAgICAgIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgIGJyYW5jaCA9ICdtYXN0ZXInLFxuICAgICAgICAgIHJlZiA9IG51bGwsXG4gICAgICAgIH0gPSByZXNvdXJjZV8gfHwge31cbiAgICAgICAgY29uc3QgcmVmXyA9IHJlZiB8fCBicmFuY2hcblxuICAgICAgICByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoe1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvamVjdElkLFxuICAgICAgICAgIHJlZjogcmVmXyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9va1JlZiA9IHsgLi4ucmVmZXJlbmNlIH1cblxuICAgICAgaWYgKHdob2xlQm9vaykge1xuICAgICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBhbmQgdmVyc2Ugc28gdGhlIHdob2xlIGJvb2sgaXMgZmV0Y2hlZFxuICAgICAgICBkZWxldGUgYm9va1JlZi52ZXJzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VMaW5rICE9PSBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBmb3IgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtyZXNvdXJjZUxpbmtffWApXG4gICAgICB9IGVsc2UgaWYgKGJvb2tSZWYgIT09IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGJvb2sgY2hhbmdlZCB0byAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0ZldGNoUGFyYW1zID0ge1xuICAgICAgICByZXNvdXJjZUxpbmssXG4gICAgICAgIHJlZmVyZW5jZTogYm9va1JlZixcbiAgICAgICAgY29uZmlnLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3RmV0Y2hQYXJhbXMsIGZldGNoUGFyYW1zKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gRkVUQ0hJTkcgbmV3IHBhcmFtcyAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke3Jlc291cmNlTGlua199YCwgbmV3RmV0Y2hQYXJhbXMpXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBmZXRjaFBhcmFtczogbmV3RmV0Y2hQYXJhbXMsXG4gICAgICAgICAgZmV0Y2hlZDogZmFsc2UsXG4gICAgICAgICAgaWdub3JlU2hhOiBudWxsLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlYWR5Rm9yRmV0Y2gsIF9ib29rSWQsIHJlc291cmNlTGlua19dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGZvciAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZWFkeUZvckZldGNoIGlzIG5vdyAke3JlYWR5Rm9yRmV0Y2h9YClcbiAgfSwgW3JlYWR5Rm9yRmV0Y2hdKVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGdldEJpYmxlSnNvbjogdHJ1ZSB9XG5cbiAgY29uc3QgX3Jlc291cmNlUmVzdWx0cyA9IHVzZVJzcmMoe1xuICAgIGNvbmZpZzogZmV0Y2hQYXJhbXM/LmNvbmZpZyxcbiAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rOiBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gb25seSB1c2UgdGhlIHJlc3VsdHMgaWYgcmVhZHlUb0ZldGNoXG4gIGNvbnN0IHtcbiAgICBiaWJsZUpzb24sXG4gICAgY29udGVudCxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGxvYWRpbmdSZXNvdXJjZSxcbiAgICBsb2FkaW5nQ29udGVudCxcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVzb3VyY2UsXG4gIH0gPSByZXNvdXJjZVN0YXRlXG5cbiAgdXNlRWZmZWN0KCgpID0+IHsgLy8gdmFsaWRhdGUgcmVzcG9uc2UgdG8gbWFrZSBzdXJlIGZyb20gbGF0ZXN0IHJlcXVlc3RcbiAgICBpZiAocmVhZHlGb3JGZXRjaCkge1xuICAgICAgY29uc3QgY3VycmVudFJlc291cmNlU3RhdGUgPSBfcmVzb3VyY2VSZXN1bHRzPy5zdGF0ZVxuXG4gICAgICBpZiAoIWZldGNoZWQgJiYgIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgICAgICAgbG9hZGluZ0NvbnRlbnQsXG4gICAgICAgICAgbG9hZGluZ1Jlc291cmNlLFxuICAgICAgICB9ID0gY3VycmVudFJlc291cmNlU3RhdGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSByZXNvdXJjZXMgY2hhbmdlZGAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMsIGZldGNoUmVzcG9uc2UgfSlcblxuICAgICAgICBpZiAoIWxvYWRpbmdDb250ZW50ICYmICFsb2FkaW5nUmVzb3VyY2UgJiYgY29udGVudCAmJiBmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgY29udGVudCBjaGFuZ2VkYCwge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLFxuICAgICAgICAgICAgZmV0Y2hSZXNwb25zZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gVFJJQ0tZIC0gcmVzcG9uc2VzIGZyb20gc2VydmVyIGNhbiBjb21lIGJhY2sgZnJvbSBwcmV2aW91cyByZXF1ZXN0cy4gIFNvIHdlIG1ha2Ugc3VyZSB0aGlzIHJlc3BvbnNlIGlzIGZvciB0aGUgY3VycmVudCByZXF1ZXN0ZWQgYm9va1xuICAgICAgICAgIGxldCBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGZldGNoZWRCb29rID0gY29udGVudC5uYW1lXG5cbiAgICAgICAgICBpZiAoZmV0Y2hlZEJvb2sgJiYgZXhwZWN0ZWRCb29rSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lLCBleHRdID0gZmV0Y2hlZEJvb2suc3BsaXQoJy4nKVxuXG4gICAgICAgICAgICBpZiAoZXh0LnRvTG93ZXJDYXNlKCkgPT09ICd1c2ZtJykge1xuICAgICAgICAgICAgICBzYW1lQm9vayA9IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleHBlY3RlZEJvb2tJZC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNoYSA9IGZldGNoUmVzcG9uc2U/LmRhdGE/LnNoYSB8fCBudWxsXG4gICAgICAgICAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZT8uZGF0YT8udXJsIHx8IG51bGxcblxuICAgICAgICAgIGlmIChzYW1lQm9vaykgeyAvLyBhbHNvIG1ha2Ugc3VyZSBpdCBpcyB0aGUgc2FtZSBicmFuY2hcbiAgICAgICAgICAgIGNvbnN0IGZldGNoZWRCcmFuY2ggPSBnZXRCcmFuY2hOYW1lKHVybClcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nQnJhbmNoID0gZ2V0QnJhbmNoTmFtZShmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKVxuXG4gICAgICAgICAgICBpZiAoZmV0Y2hlZEJyYW5jaCAhPT0gZmV0Y2hpbmdCcmFuY2gpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJyYW5jaCwgZXhwZWN0ZWQgYnJhbmNoIGlzICR7ZmV0Y2hpbmdCcmFuY2h9LCBidXQgZmV0Y2hlZEJyYW5jaCBpcyAke2ZldGNoZWRCcmFuY2h9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlnbm9yZVNoYSA9PT0gc2hhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gdGhlIHNoYSBpcyB0aGUgc2FtZSBhcyB0aGUgaWdub3JlIHNoYSAke3NoYX1gLCB7IHNoYSwgdXJsIH0pXG4gICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzYW1lQm9vaykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9LCBidXQgcmVjZWl2ZWQgYm9vayBuYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZVsnYm9va09iamVjdHMnXSA9IGNvbnRlbnRcbiAgICAgICAgICAgIG5ld1N0YXRlWyd2ZXJzZXNGb3JSZWYnXSA9IHVwZGF0ZVZlcnNlc0ZvclJlZihjb250ZW50KVxuICAgICAgICAgICAgbmV3U3RhdGVbJ2ZldGNoZWRCb29rJ10gPSBleHBlY3RlZEJvb2tJZFxuXG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwobmV3U3RhdGUsIHtcbiAgICAgICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgICAgIHZlcnNlc0ZvclJlZixcbiAgICAgICAgICAgICAgZmV0Y2hlZEJvb2s6IGV4cGVjdGVkQm9va0lkLFxuICAgICAgICAgICAgICByZXNvdXJjZVN0YXRlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBjb3JyZWN0IGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnZmV0Y2hlZCddID0gdHJ1ZVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnaWdub3JlU2hhJ10gPSBudWxsXG4gICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIHN0YXRlIGNoYW5nZWQsIGJ1dCBubyBjb250ZW50YCwgY3VycmVudFJlc291cmNlU3RhdGUpXG4gICAgICAgICAgICBzZXRTdGF0ZSh7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVhZHlGb3JGZXRjaCwgX3Jlc291cmNlUmVzdWx0cz8uc3RhdGVdKVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudCB8fCAhcmVhZHlGb3JGZXRjaFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gcmVhZHlGb3JGZXRjaCAmJiBpbml0aWFsaXplZCAmJiAhbG9hZGluZyAmJlxuICAgIChjb250ZW50Tm90Rm91bmRFcnJvciB8fCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciB8fCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgfHwgaW52YWxpZE1hbmlmZXN0RXJyb3IpXG4gIGNvbnN0IHJlc291cmNlU3RhdHVzID0ge1xuICAgIFtMT0FESU5HX1NUQVRFXTogbG9hZGluZyxcbiAgICBbQ09OVEVOVF9OT1RfRk9VTkRfRVJST1JdOiBjb250ZW50Tm90Rm91bmRFcnJvcixcbiAgICBbU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1JdOiBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvcixcbiAgICBbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl06IG1hbmlmZXN0Tm90Rm91bmRFcnJvcixcbiAgICBbSU5WQUxJRF9NQU5JRkVTVF9FUlJPUl06IGludmFsaWRNYW5pZmVzdEVycm9yLFxuICAgIFtFUlJPUl9TVEFURV06IGVycm9yLFxuICAgIFtJTklUSUFMSVpFRF9TVEFURV06IGluaXRpYWxpemVkLFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlmIChsb2FkaW5nKSB7IC8vIG9uY2UgZmlyc3QgbG9hZCBoYXMgYmVndW4sIHdlIGFyZSBpbml0aWFsaXplZFxuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtsb2FkaW5nLCByZWFkeUZvckZldGNoXSlcblxuICAvKipcbiAgICogZ2V0IHZlcnNlcyBmb3IgcmVmXG4gICAqIEBwYXJhbSByZWZTdHJcbiAgICogQHBhcmFtIGNvbnRlbnRfXG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0VmVyc2VzRm9yUmVmKHJlZlN0ciwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgcmV0dXJuIGdldFZlcnNlc0ZvclJlZlN0cihyZWZTdHIsIGNvbnRlbnRfLCBsYW5ndWFnZUlkKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0U3RhdGUoeyBib29rT2JqZWN0czogYm9va09iamVjdHNfIH0pXG4gICAgICAgICAgcmV0dXJuIGJvb2tPYmplY3RzX1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWZXJzZXNGb3JSZWYoX2Jvb2tPYmplY3RzID0gYm9va09iamVjdHMpIHtcbiAgICBsZXQgbmV3VmVyc2VzRm9yUmVmID0gW11cblxuICAgIGlmIChfYm9va09iamVjdHMpIHtcbiAgICAgIG5ld1ZlcnNlc0ZvclJlZiA9IGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIF9ib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbiAgICAgIHJldHVybiBuZXdWZXJzZXNGb3JSZWZcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGZvcmNlIHJlbG9hZCBvZiBjdXJyZW50IHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gaWdub3JlU2hhIC0gb3B0aW9uYWwgc2hhIHRvIGlnbm9yZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2UoaWdub3JlU2hhID0gbnVsbCkge1xuICAgIGNvbnN0IF9yZWxvYWRSZXNvdXJjZSA9IF9yZXNvdXJjZVJlc3VsdHM/LmFjdGlvbnMucmVsb2FkUmVzb3VyY2VcblxuICAgIGlmIChfcmVsb2FkUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmZXRjaGVkOiBmYWxzZSB9XG5cbiAgICAgIGlmIChpZ25vcmVTaGEpIHsgLy8gVFJJQ0tZIC0gaWYgdGhlIHJlc3BvbnNlIHdhcyBmb3IgdGhpcyBzaGEgKHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgc2hhKSB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIGl0XG4gICAgICAgIG5ld1N0YXRlWydpZ25vcmVTaGEnXSA9IGlnbm9yZVNoYVxuICAgICAgfVxuICAgICAgc2V0U3RhdGUoIG5ld1N0YXRlKVxuICAgICAgX3JlbG9hZFJlc291cmNlKClcbiAgICB9XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGN1cnJlbnRCb29rUmVmID0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VycmVudEJvb2tSZWYpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZmV0Y2hlZCBib29rIGNoYW5nZWQgdG8gJHtjdXJyZW50Qm9va1JlZn0sICR7cmVzb3VyY2VMaW5rX31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgICBzZXRTdGF0ZSh7IGJvb2tPYmplY3RzOiBudWxsIH0pXG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2N1cnJlbnRCb29rUmVmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgYm9vayByZWYgY2hhbmdlZCB0byAke19ib29rSWR9LCAke3Jlc291cmNlTGlua199YClcbiAgICAvLyBAdHMtaWdub3JlXG4gIH0sIFtfYm9va0lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgIGNvbnN0IGZldGNoZWRCb29rU2FtZSA9IGZldGNoZWRCb29rICYmIChmZXRjaGVkQm9vayA9PT0gZXhwZWN0ZWRCb29rSWQpXG4gICAgbGV0IF92ZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKCFmZXRjaGVkQm9va1NhbWUpIHtcbiAgICAgIC8vIGlmIChleHBlY3RlZEJvb2tJZCAmJiBmZXRjaGVkQm9vaykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGV4cGVjdGVkIGJvb2sgJHtleHBlY3RlZEJvb2tJZH0gYnV0IGZldGNoZWQgYm9vayB3YXMgJHtmZXRjaGVkQm9va30gLSBjbGVhcmluZ2ApXG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IF9ib29rT2JqZWN0cyA9IGZldGNoZWRCb29rU2FtZSA/IGJvb2tPYmplY3RzIDogbnVsbFxuICAgICAgX3ZlcnNlc0ZvclJlZiA9IHVwZGF0ZVZlcnNlc0ZvclJlZihfYm9va09iamVjdHMpXG4gICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIF9ib29rT2JqZWN0cyBpcyAkeyEhX2Jvb2tPYmplY3RzfSBhbmQgYm9va3MgYXJlIHRoZSBzYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdmVyc2VzRm9yUmVmLCB2ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlc0ZvclJlZjogX3ZlcnNlc0ZvclJlZiB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgcmV0dXJuIHtcbiAgICBib29rT2JqZWN0cyxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGdldFZlcnNlc0ZvclJlZjogX2dldFZlcnNlc0ZvclJlZixcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICByZXNvdXJjZVN0YXR1cyxcbiAgICB0aXRsZSxcbiAgICB1cGRhdGVWZXJzZSxcbiAgICB2ZXJzaW9uLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfVxufVxuIl19