@datagrok/peptides 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -8
- package/README.md +12 -7
- package/dist/209.js +2 -2
- package/dist/361.js +2 -2
- package/dist/381.js +2 -2
- package/dist/770.js +2 -0
- package/dist/831.js +2 -2
- package/dist/868.js +2 -2
- package/dist/931.js +3 -0
- package/dist/932.js +2 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +7 -7
- package/setup-unlink-clean.cmd +6 -0
- package/setup.cmd +2 -2
- package/src/model.ts +161 -113
- package/src/package.ts +13 -22
- package/src/tests/model.ts +1 -1
- package/src/tests/table-view.ts +1 -1
- package/src/utils/algorithms.ts +2 -2
- package/src/utils/cell-renderer.ts +54 -42
- package/src/utils/constants.ts +4 -0
- package/src/utils/misc.ts +49 -28
- package/src/utils/statistics.ts +1 -0
- package/src/utils/tooltips.ts +6 -10
- package/src/viewers/logo-summary.ts +14 -13
- package/src/viewers/peptide-space-viewer.ts +1 -1
- package/src/viewers/sar-viewer.ts +80 -37
- package/src/widgets/distribution.ts +52 -198
- package/src/widgets/mutation-cliffs.ts +2 -4
- package/src/widgets/peptides.ts +3 -3
- package/src/widgets/selection.ts +3 -3
- package/src/widgets/settings.ts +2 -2
- package/dist/196.js +0 -3
- package/dist/694.js +0 -2
- /package/dist/{196.js.LICENSE.txt → 931.js.LICENSE.txt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
# Peptides changelog
|
|
2
2
|
|
|
3
|
+
## 1.17.0 (2023-11-29)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* Renamed activity column to _Activity_ (previously: _Scaled activity_).
|
|
8
|
+
* Improved input tooltip in the Mutation Cliffs pairs panel.
|
|
9
|
+
* Autosize grids in the Mutation Cliffs pairs panel.
|
|
10
|
+
* Hid sequence space embedding columns and axes selectors.
|
|
11
|
+
* Saving context panels state.
|
|
12
|
+
* Selected cells now have an orange thick border.
|
|
13
|
+
* Distribution panel now shows distribution for (1) all activity values, (2) selected rows, (3) peptides selection from
|
|
14
|
+
viewers if mismatched with the total selection.
|
|
15
|
+
* Sequence space viewer now uses the Needleman-Wunsch algorithm to compute distances.
|
|
16
|
+
* Linearization of helm format macromolecules before sequence space computation.
|
|
17
|
+
* Improved rendering speed of invariant map (no lags).
|
|
18
|
+
* Improved rendering speed upon selection/filtering.
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* Fixed accordion wouldn't update after selection in table view.
|
|
23
|
+
* Filtering dataframe causing most potent residues viewer and context panel to crash.
|
|
24
|
+
* Filtering dataframe causing major lags.
|
|
25
|
+
* Most potent residues viewer crashing on some data.
|
|
26
|
+
* Weblogo viewer crashing or causing major lag on selection/filtering.
|
|
27
|
+
|
|
3
28
|
## 1.16.0 (2023-11-05)
|
|
4
29
|
|
|
5
30
|
### Features
|
|
6
31
|
|
|
7
|
-
* Added Select All and
|
|
32
|
+
* Added Select All and Deselect All functionality to all viewers.
|
|
8
33
|
* Added Mean activity column for the Most Potent Residues viewer.
|
|
9
34
|
* Added Mean activity to tooltips.
|
|
10
|
-
* Added WebLogo to Selection table.
|
|
35
|
+
* Added WebLogo to the Selection table.
|
|
11
36
|
|
|
12
37
|
### Bug Fixes
|
|
13
38
|
|
|
14
|
-
* Fixed Logo Summary Table tooltip wouldn't show if analysis table doesn't contain column
|
|
39
|
+
* Fixed Logo Summary Table tooltip wouldn't show if the analysis table doesn't contain column name 'Cluster'.
|
|
15
40
|
* Fixed tooltips would show irrelevant info.
|
|
16
41
|
|
|
17
42
|
## 1.15.3 (2023-10-26)
|
|
@@ -36,23 +61,23 @@
|
|
|
36
61
|
|
|
37
62
|
### Bug Fixes
|
|
38
63
|
|
|
39
|
-
* Fixed Invariant Map color coding wouldn't change when changing color column.
|
|
64
|
+
* Fixed Invariant Map color coding wouldn't change when changing the color column.
|
|
40
65
|
|
|
41
66
|
## 1.15.0 (2023-10-12)
|
|
42
67
|
|
|
43
68
|
### Features
|
|
44
69
|
|
|
45
70
|
* Added Sequence Space viewer.
|
|
46
|
-
* Selection panel columns now
|
|
47
|
-
*
|
|
71
|
+
* Selection panel columns now inherit width from the main table.
|
|
72
|
+
* Invariant Map cell values are now rendered with contrast color relative to the background.
|
|
48
73
|
|
|
49
74
|
### Bug Fixes
|
|
50
75
|
|
|
51
76
|
* Fixed WebLogo in header margin width.
|
|
52
77
|
* Widgets in Context panel will now fill all the available width.
|
|
53
|
-
* Fixed LST rows not resizable.
|
|
78
|
+
* Fixed LST rows are not resizable.
|
|
54
79
|
* Fixed selection inconsistency.
|
|
55
|
-
* Fixed Most Potent Residues
|
|
80
|
+
* Fixed Most Potent Residues keyboard navigation.
|
|
56
81
|
* Fixed analysis not starting when there are columns of the same name.
|
|
57
82
|
|
|
58
83
|
## 1.14.1 (2023-09-28)
|
package/README.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
# Peptides
|
|
2
2
|
|
|
3
|
-
Provides
|
|
4
|
-
|
|
5
|
-
Status: Beta
|
|
6
|
-
Owner: Leonid
|
|
3
|
+
Provides sequence-activity relationship analysis for peptides.
|
|
7
4
|
|
|
8
5
|
## Detection and usage
|
|
9
6
|
|
|
10
|
-
Once a dataframe is opened with Datagrok, the column(s) containing peptides are detected automatically.
|
|
7
|
+
Once a dataframe is opened with Datagrok, the column(s) containing peptides are detected automatically.
|
|
8
|
+
Each amino acid is rendered with a different color, which helps to visually identify patterns.
|
|
9
|
+
Clicking on the column header brings up the options to launch peptide-specific tools, such as [SAR](#sar)
|
|
10
|
+
and [Peptide space](#peptides-space).
|
|
11
11
|
|
|
12
12
|
## Sar
|
|
13
13
|
|
|
14
|
-
Wiki: _Structure-Activity Relationship (SAR) is an approach designed to find relationships between chemical structure
|
|
14
|
+
Wiki: _Structure-Activity Relationship (SAR) is an approach designed to find relationships between chemical structure
|
|
15
|
+
(or structural-related properties) and biological activity (or target property) of studied compounds._
|
|
15
16
|
|
|
16
|
-
Peptides SAR is an interactive analysis tool to help identify point mutations that cause large change in
|
|
17
|
+
Peptides SAR is an interactive analysis tool to help identify point mutations that cause large change in
|
|
18
|
+
activity. Given a `peptide` column with aligned sequences (max length N, number of unique amino acids A)
|
|
19
|
+
and `activity` column, it produces an N*A dataframe where (n, a) element contains a measure of the change
|
|
20
|
+
of activity caused by mutating the amino acid at position n to a.
|
|
17
21
|
|
|
18
22
|
[Issue tracker](https://github.com/datagrok-ai/public/issues/93)
|
|
19
23
|
|
|
@@ -22,3 +26,4 @@ Peptides SAR is an interactive analysis tool to help identify point mutations th
|
|
|
22
26
|
Visualizes a collection of peptides in 2-dimensional space, using [t-SNE](https://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding) with the [edit distance](https://en.wikipedia.org/wiki/Edit_distance) function.
|
|
23
27
|
|
|
24
28
|
[Issue tracker](https://github.com/datagrok-ai/public/issues/93)
|
|
29
|
+
[Datagrok community: Macromolecules](https://community.datagrok.ai/t/macromolecules-updates/661/1)
|
package/dist/209.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var peptides;(()=>{"use strict";var t,e,r={9209:(t,e,r)=>{var a=r(6814);class i{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const r=e*(e-1)/2;if(t){if(t.length!=r)throw new Error(`Invalid data length. Observations size ${e} requires data length ${r}.`);this._data=t}else this._data=new Float32Array(r)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,r){this._data[this._linearizeIJ(t,e)]=r}static calc(t,e){const r=t.length,n=new i(void 0,r);for(let i=0;i<r;i++)for(let s=i+1;s<r;s++)n.set(i,s,(0,a.k)(t[i])||(0,a.k)(t[s])?1:e(t[i],t[s]));return n}square(){for(let t=0;t<this._data.length;t++)this._data[t]=this._data[t]**2}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=0,e=this._data[0];for(let r=0;r<this._data.length;r++)this._data[r]<t&&(t=this._data[r]),this._data[r]>e&&(e=this._data[r]);const r=e-t;for(let a=0;a<this._data.length;a++)this._data[a]=0===r?this._data[a]-t:(this._data[a]-t)/(e-t)}}var n=r(1040),s=r(1811),o=r(3979),h=r(5697),l=r(850),c=r(708);const g={[n.CF.Euclidean]:l.dP},d={[n.W.Levenshtein]:s.T,[n.W.JaroWinkler]:o.H$,[n.W.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let r=0;for(let a=1;a<t.length;a++)r+=t[a]==e[a]?0:1;return r/t.length}}},u={[n.gk.Tanimoto]:h.KR,[n.gk.Dice]:h._h,[n.gk.Asymmetric]:h.yU,[n.gk.BraunBlanquet]:h.Dz,[n.gk.Cosine]:h.Zd,[n.gk.Kulczynski]:h.s,[n.gk.McConnaughey]:h.aW,[n.gk.RogotGoldberg]:h.MI,[n.gk.Russel]:h.fX,[n.gk.Sokal]:h.NB,[n.gk.Hamming]:h.UX,[n.gk.Euclidean]:h.WI},f={[n.gd.TanimotoIntArray]:h.FV},k={[n.Yc.NumericDistance]:h.bX},_={[n.Qe.Vector]:{[n.CF.Euclidean]:g[n.CF.Euclidean]},[n.Qe.String]:{[n.W.Levenshtein]:d[n.W.Levenshtein],[n.W.JaroWinkler]:d[n.W.JaroWinkler],[n.W.Manhattan]:d[n.W.Manhattan]},[n.Qe.BitArray]:{[n.gk.Tanimoto]:u[n.gk.Tanimoto],[n.gk.Dice]:u[n.gk.Dice],[n.gk.Asymmetric]:u[n.gk.Asymmetric],[n.gk.BraunBlanquet]:u[n.gk.BraunBlanquet],[n.gk.Cosine]:u[n.gk.Cosine],[n.gk.Kulczynski]:u[n.gk.Kulczynski],[n.gk.McConnaughey]:u[n.gk.McConnaughey],[n.gk.RogotGoldberg]:u[n.gk.RogotGoldberg],[n.gk.Russel]:u[n.gk.Russel],[n.gk.Sokal]:u[n.gk.Sokal]},[n.Qe.MacroMolecule]:{[c.U.HAMMING]:c.o[c.U.HAMMING],[c.U.LEVENSHTEIN]:c.o[c.U.LEVENSHTEIN],[c.U.NEEDLEMANN_WUNSCH]:c.o[c.U.NEEDLEMANN_WUNSCH],[c.U.MONOMER_CHEMICAL_DISTANCE]:c.o[c.U.MONOMER_CHEMICAL_DISTANCE]},[n.Qe.Number]:{[n.Yc.NumericDistance]:k[n.Yc.NumericDistance]},[n.Qe.IntArray]:{[n.gd.TanimotoIntArray]:f[n.gd.TanimotoIntArray]}};Object.keys(_).reduce(((t,e)=>{for(const r of Object.keys(_[e]))t[r]=e;return t}),{});self.addEventListener("message",(({data:{peptidesList:t,metric:e}})=>{return r=void 0,a=void 0,s=function*(){const r={};try{const a=i.calc(t,((t,r)=>d[e](t,r)));r.distances=a.data}catch(t){r.error=t}self.postMessage(r)},new((n=void 0)||(n=Promise))((function(t,e){function i(t){try{h(s.next(t))}catch(t){e(t)}}function o(t){try{h(s.throw(t))}catch(t){e(t)}}function h(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n((function(t){t(r)}))).then(i,o)}h((s=s.apply(r,a||[])).next())}));var r,a,n,s}))}},a={};function i(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={exports:{}};return r[t](n,n.exports,i),n.exports}i.m=r,i.x=()=>{var t=i.O(void 0,[
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBS25HLEdZSlQsSUFBSThHLEVBQXNCUixFQUFvQk8sSSIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9jaHVuayBsb2FkZWQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC9kaXN0YW5jZS1tYXRyaXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcy90eXBlZC1tZXRyaWNzLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vc3JjL3V0aWxzL2Rpc3RhbmNlLW1hdHJpeC53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoNjk0KSxcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoODMxKVxuXHRdKS50aGVuKG5leHQpO1xufTsiLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gJy4vdXRpbHMnO1xuLyoqIERpc3RhbmNlIG1hdHJpeCBjbGFzcyBjb21wYXRpYmxlIHdpdGggZGF0YSBzdHJ1Y3R1cmUgb2Ygc2NpcHkuc3BhdGlhbC5kaXN0YW5jZS5wZGlzdCAqL1xuZXhwb3J0IGNsYXNzIERpc3RhbmNlTWF0cml4IHtcbiAgICBnZXQgZGF0YSgpIHsgcmV0dXJuIHRoaXMuX2RhdGE7IH1cbiAgICBnZXQgc2l6ZSgpIHsgcmV0dXJuIHRoaXMuX3NpemU7IH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gZGF0YSBEaXN0YW5jZSBkYXRhXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgTnVtYmVyIG9mIG9yaWdpbmFsIG9ic2VydmF0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudHMgZXJyb3I6IGRhdGEgb3Igc2l6ZSBpcyByZXF1aXJlZC4nKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5fc2l6ZSA9ICgxICsgTWF0aC5zcXJ0KDEgKyA0ICogMiAqIHRoaXMuX2RhdGEubGVuZ3RoKSkgLyAyO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NpemUgIT0gTWF0aC5mbG9vcih0aGlzLl9zaXplKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSBsZW5ndGggJHt0aGlzLl9kYXRhLmxlbmd0aH0gbGVhZHMgdG8gbm9uIGludGVnZXIgc2l6ZSAke3RoaXMuX3NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBzaXplICogKHNpemUgLSAxKSAvIDI7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPSBkYXRhTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSBsZW5ndGguIE9ic2VydmF0aW9ucyBzaXplICR7c2l6ZX0gcmVxdWlyZXMgZGF0YSBsZW5ndGggJHtkYXRhTGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGFMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9saW5lYXJpemVJSihpLCBqKSB7XG4gICAgICAgIGlmICghKGkgPCBqKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaSBtdXN0IGJlIGxlc3MgdGhhbiBqJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplICogaSArIGogLSBNYXRoLmZsb29yKCgoaSArIDIpICogKGkgKyAxKSkgLyAyKTtcbiAgICB9XG4gICAgZ2V0KGksIGopIHtcbiAgICAgICAgaWYgKGkgPT0gailcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmIChpIDwgailcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhW3RoaXMuX2xpbmVhcml6ZUlKKGksIGopXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbdGhpcy5fbGluZWFyaXplSUooaiwgaSldO1xuICAgIH1cbiAgICBzZXQoaSwgaiwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGF0YVt0aGlzLl9saW5lYXJpemVJSihpLCBqKV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgc3RhdGljIGNhbGMobGlzdCwgbWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IERpc3RhbmNlTWF0cml4KHVuZGVmaW5lZCwgc2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBzaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIHZhbHVlcyBpcyBudWxsLCBzZXQgZGlzdGFuY2UgdG8gMVxuICAgICAgICAgICAgICAgIHJlcy5zZXQoaSwgaiwgIWlzTmlsKGxpc3RbaV0pICYmICFpc05pbChsaXN0W2pdKSA/IG1ldGhvZChsaXN0W2ldLCBsaXN0W2pdKSA6IDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8vIHNxdWFyZXMgZWFjaCB2YWx1ZSBpbiBtYXRyaXggaW4gcGxhY2VcbiAgICBzcXVhcmUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSB0aGlzLl9kYXRhW2ldICoqIDI7XG4gICAgfVxuICAgIC8vIGFkZHMgYW5vdGhlciBtYXRyaXggdG8gdGhpcyBvbmUgaW4gcGxhY2VcbiAgICBhZGQob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NpemUgIT09IG90aGVyLl9zaXplKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXRyaWNlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4gVGhpcyBzaXplOiAke3RoaXMuX3NpemV9LCBvdGhlciBzaXplOiAke290aGVyLl9zaXplfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldICs9IG90aGVyLl9kYXRhW2ldO1xuICAgIH1cbiAgICAvLyBzcXVhcmUgcm9vdCBlYWNoIHZhbHVlIGluIG1hdHJpeCBpbiBwbGFjZVxuICAgIHNxcnQoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSBNYXRoLnNxcnQodGhpcy5fZGF0YVtpXSk7XG4gICAgfVxuICAgIC8vbm9ybWlsemUgZGlzdGFuY2UgbWF0cml4IGluIHBsYWNlXG4gICAgbm9ybWFsaXplKCkge1xuICAgICAgICBsZXQgbWluID0gMDtcbiAgICAgICAgbGV0IG1heCA9IHRoaXMuX2RhdGFbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFbaV0gPCBtaW4pXG4gICAgICAgICAgICAgICAgbWluID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhW2ldID4gbWF4KVxuICAgICAgICAgICAgICAgIG1heCA9IHRoaXMuX2RhdGFbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSByYW5nZSA9PT0gMCA/IHRoaXMuX2RhdGFbaV0gLSBtaW4gOiAodGhpcy5fZGF0YVtpXSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x6ZEdGdVkyVXRiV0YwY21sNExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWkdsemRHRnVZMlV0YldGMGNtbDRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVkQkxFOUJRVThzUlVGQlF5eExRVUZMTEVWQlFVTXNUVUZCVFN4VFFVRlRMRU5CUVVNN1FVRkZPVUlzTWtaQlFUSkdPMEZCUXpOR0xFMUJRVTBzVDBGQlR5eGpRVUZqTzBsQlNYcENMRWxCUVVrc1NVRkJTU3hMUVVGdFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSUzlETEVsQlFVa3NTVUZCU1N4TFFVRmhMRTlCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGZWtNN096dFBRVWRITzBsQlEwZ3NXVUZCV1N4SlFVRnRRaXhGUVVGRkxFbEJRV0U3VVVGRE5VTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1UwRkJVeXhGUVVGRk8xbEJRM0pDTEVsQlFVa3NTVUZCU1N4SlFVRkpMRk5CUVZNN1owSkJRVVVzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MFEwRkJORU1zUTBGQlF5eERRVUZETzFsQlJYSkdMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlN5eERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJoRkxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUTNSRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN3NFFrRkJPRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNN1UwRkRka2M3WVVGQlRUdFpRVU5NTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMnhDTEUxQlFVMHNWVUZCVlN4SFFVRlhMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRha1FzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTFJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEZWQlFWVTdiMEpCUXpOQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNNRU5CUVRCRExFbEJRVWtzZVVKQlFYbENMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlEzaEhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETzJGQlEyNUNPMmxDUVVGTk8yZENRVU5NTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdZVUZETTBNN1UwRkRSanRKUVVOSUxFTkJRVU03U1VGRlR5eFpRVUZaTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNN1VVRkRka01zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVGRkxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU4yUkN4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOc1JTeERRVUZETzBsQlJVUXNSMEZCUnl4RFFVRkRMRU5CUVZNc1JVRkJSU3hEUVVGVE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRVaXhQUVVGUExFTkJRVU1zUTBGQlF6dGhRVU5PTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRXaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1dVRkZNME1zVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRMME1zUTBGQlF6dEpRVVZFTEVkQlFVY3NRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxFdEJRV0U3VVVGRGNrTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU01UXl4RFFVRkRPMGxCUlVRc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlR5eEpRVUZ4UWl4RlFVRkZMRTFCUVc5RE8xRkJRek5GTEUxQlFVMHNTVUZCU1N4SFFVRlhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGFrTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hqUVVGakxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETjBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTJwRExHdEVRVUZyUkR0blFrRkRiRVFzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5zUmp0VFFVTkdPMUZCUTBRc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeERRVUZETzBsQlJVUXNkME5CUVhkRE8wbEJRMnBETEUxQlFVMDdVVUZEV0N4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEzaERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEZGtNc1EwRkJRenRKUVVWRUxESkRRVUV5UXp0SlFVTndReXhIUVVGSExFTkJRVU1zUzBGQmNVSTdVVUZET1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eExRVUZMTEV0QlFVc3NRMEZCUXl4TFFVRkxPMWxCUXpWQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNaMFJCUVdkRUxFbEJRVWtzUTBGQlF5eExRVUZMTEdsQ1FVRnBRaXhMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTTFSeXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndReXhEUVVGRE8wbEJSVVFzTkVOQlFUUkRPMGxCUTNKRExFbEJRVWs3VVVGRFZDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETjBNc1EwRkJRenRKUVVWRUxHMURRVUZ0UXp0SlFVTTFRaXhUUVVGVE8xRkJRMlFzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTFvc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE1VTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVYzdaMEpCUTNKQ0xFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITzJkQ1FVTnlRaXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOMlFqdFJRVU5FTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRGVFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU40UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRE5VWXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdhWE5PYVd4OUlHWnliMjBnSnk0dmRYUnBiSE1uTzF4dVhHNHZLaW9nUkdsemRHRnVZMlVnYldGMGNtbDRJR05zWVhOeklHTnZiWEJoZEdsaWJHVWdkMmwwYUNCa1lYUmhJSE4wY25WamRIVnlaU0J2WmlCelkybHdlUzV6Y0dGMGFXRnNMbVJwYzNSaGJtTmxMbkJrYVhOMElDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1JHbHpkR0Z1WTJWTllYUnlhWGdnZTF4dUlDQmZaR0YwWVRvZ1JteHZZWFF6TWtGeWNtRjVPMXh1SUNCZmMybDZaVG9nYm5WdFltVnlPMXh1WEc0Z0lHZGxkQ0JrWVhSaEtDazZJRVpzYjJGME16SkJjbkpoZVNCN0lISmxkSFZ5YmlCMGFHbHpMbDlrWVhSaE95QjlYRzVjYmlBZ1oyVjBJSE5wZW1Vb0tUb2diblZ0WW1WeUlIc2djbVYwZFhKdUlIUm9hWE11WDNOcGVtVTdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdEdiRzloZERNeVFYSnlZWGw5SUdSaGRHRWdSR2x6ZEdGdVkyVWdaR0YwWVZ4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdjMmw2WlNCT2RXMWlaWElnYjJZZ2IzSnBaMmx1WVd3Z2IySnpaWEoyWVhScGIyNXpYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2loa1lYUmhQem9nUm14dllYUXpNa0Z5Y21GNUxDQnphWHBsUHpvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnYVdZZ0tITnBlbVVnUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvWkdGMFlTQTlQU0IxYm1SbFptbHVaV1FwSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUVhKbmRXMWxiblJ6SUdWeWNtOXlPaUJrWVhSaElHOXlJSE5wZW1VZ2FYTWdjbVZ4ZFdseVpXUXVKeWs3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFZ1BTQmtZWFJoSVR0Y2JpQWdJQ0FnSUhSb2FYTXVYM05wZW1VZ1BTQW9NU0FySUUxaGRHZ3VjM0Z5ZENneElDc2dOQ0FxSURJZ0tpQjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDa3BJQzhnTWp0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5emFYcGxJQ0U5SUUxaGRHZ3VabXh2YjNJb2RHaHBjeTVmYzJsNlpTa3BYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdTVzUyWVd4cFpDQmtZWFJoSUd4bGJtZDBhQ0FrZTNSb2FYTXVYMlJoZEdFdWJHVnVaM1JvZlNCc1pXRmtjeUIwYnlCdWIyNGdhVzUwWldkbGNpQnphWHBsSUNSN2RHaHBjeTVmYzJsNlpYMWdLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmYzJsNlpTQTlJSE5wZW1VN1hHNGdJQ0FnSUNCamIyNXpkQ0JrWVhSaFRHVnVaM1JvT2lCdWRXMWlaWElnUFNCemFYcGxJQ29nS0hOcGVtVWdMU0F4S1NBdklESTdYRzRnSUNBZ0lDQnBaaUFvWkdGMFlTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzVzWlc1bmRHZ2dJVDBnWkdGMFlVeGxibWQwYUNsY2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFbHVkbUZzYVdRZ1pHRjBZU0JzWlc1bmRHZ3VJRTlpYzJWeWRtRjBhVzl1Y3lCemFYcGxJQ1I3YzJsNlpYMGdjbVZ4ZFdseVpYTWdaR0YwWVNCc1pXNW5kR2dnSkh0a1lYUmhUR1Z1WjNSb2ZTNWdLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZaR0YwWVNBOUlHUmhkR0U3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxsOWtZWFJoSUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoa1lYUmhUR1Z1WjNSb0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElGOXNhVzVsWVhKcGVtVkpTaWhwT2lCdWRXMWlaWElzSUdvNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJQ0FnYVdZZ0tDRW9hU0E4SUdvcEtTQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oya2diWFZ6ZENCaVpTQnNaWE56SUhSb1lXNGdhaWNwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emFYcGxJQ29nYVNBcklHb2dMU0JOWVhSb0xtWnNiMjl5S0Nnb2FTQXJJRElwSUNvZ0tHa2dLeUF4S1NrZ0x5QXlLVHRjYmlBZ2ZWeHVYRzRnSUdkbGRDaHBPaUJ1ZFcxaVpYSXNJR282SUc1MWJXSmxjaWtnZTF4dUlDQWdJR2xtSUNocElEMDlJR29wWEc0Z0lDQWdJQ0J5WlhSMWNtNGdNRHRjYmlBZ0lDQmxiSE5sSUdsbUlDaHBJRHdnYWlsY2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWtZWFJoVzNSb2FYTXVYMnhwYm1WaGNtbDZaVWxLS0drc0lHb3BYVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZlpHRjBZVnQwYUdsekxsOXNhVzVsWVhKcGVtVkpTaWhxTENCcEtWMDdYRzRnSUgxY2JseHVJQ0J6WlhRb2FUb2diblZ0WW1WeUxDQnFPaUJ1ZFcxaVpYSXNJSFpoYkhWbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCMGFHbHpMbDlrWVhSaFczUm9hWE11WDJ4cGJtVmhjbWw2WlVsS0tHa3NJR29wWFNBOUlIWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdOaGJHTThWRTlpYWo0b2JHbHpkRG9nU1c1a1pYaGhZbXhsUEZSUFltbytMQ0J0WlhSb2IyUTZJQ2hoT2lCVVQySnFMQ0JpT2lCVVQySnFLU0E5UGlCdWRXMWlaWElwT2lCRWFYTjBZVzVqWlUxaGRISnBlQ0I3WEc0Z0lDQWdZMjl1YzNRZ2MybDZaVG9nYm5WdFltVnlJRDBnYkdsemRDNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ2JtVjNJRVJwYzNSaGJtTmxUV0YwY21sNEtIVnVaR1ZtYVc1bFpDd2djMmw2WlNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCemFYcGxPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwSUNzZ01Uc2dhaUE4SUhOcGVtVTdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJwWmlCaGJua2diMllnZEdobElIWmhiSFZsY3lCcGN5QnVkV3hzTENCelpYUWdaR2x6ZEdGdVkyVWdkRzhnTVZ4dUlDQWdJQ0FnSUNCeVpYTXVjMlYwS0drc0lHb3NJQ0ZwYzA1cGJDaHNhWE4wVzJsZEtTQW1KaUFoYVhOT2FXd29iR2x6ZEZ0cVhTa2dQeUJ0WlhSb2IyUW9iR2x6ZEZ0cFhTd2diR2x6ZEZ0cVhTa2dPaUF4S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxjenRjYmlBZ2ZWeHVYRzRnSUM4dklITnhkV0Z5WlhNZ1pXRmphQ0IyWVd4MVpTQnBiaUJ0WVhSeWFYZ2dhVzRnY0d4aFkyVmNiaUFnY0hWaWJHbGpJSE54ZFdGeVpTZ3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyUmhkR0V1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRDBnZEdocGN5NWZaR0YwWVZ0cFhTQXFLaUF5TzF4dUlDQjlYRzVjYmlBZ0x5OGdZV1JrY3lCaGJtOTBhR1Z5SUcxaGRISnBlQ0IwYnlCMGFHbHpJRzl1WlNCcGJpQndiR0ZqWlZ4dUlDQndkV0pzYVdNZ1lXUmtLRzkwYUdWeU9pQkVhWE4wWVc1alpVMWhkSEpwZUNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5emFYcGxJQ0U5UFNCdmRHaGxjaTVmYzJsNlpTbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1RXRjBjbWxqWlhNZ2JYVnpkQ0JvWVhabElIUm9aU0J6WVcxbElITnBlbVV1SUZSb2FYTWdjMmw2WlRvZ0pIdDBhR2x6TGw5emFYcGxmU3dnYjNSb1pYSWdjMmw2WlRvZ0pIdHZkR2hsY2k1ZmMybDZaWDFnS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVYMlJoZEdFdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMmxkSUNzOUlHOTBhR1Z5TGw5a1lYUmhXMmxkTzF4dUlDQjlYRzVjYmlBZ0x5OGdjM0YxWVhKbElISnZiM1FnWldGamFDQjJZV3gxWlNCcGJpQnRZWFJ5YVhnZ2FXNGdjR3hoWTJWY2JpQWdjSFZpYkdsaklITnhjblFvS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlrWVhSaExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlFMWhkR2d1YzNGeWRDaDBhR2x6TGw5a1lYUmhXMmxkS1R0Y2JpQWdmVnh1WEc0Z0lDOHZibTl5Yldsc2VtVWdaR2x6ZEdGdVkyVWdiV0YwY21sNElHbHVJSEJzWVdObFhHNGdJSEIxWW14cFl5QnViM0p0WVd4cGVtVW9LU0I3WEc0Z0lDQWdiR1YwSUcxcGJpQTlJREE3WEc0Z0lDQWdiR1YwSUcxaGVDQTlJSFJvYVhNdVgyUmhkR0ZiTUYwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlrWVhSaExteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVmWkdGMFlWdHBYU0E4SUcxcGJpbGNiaUFnSUNBZ0lDQWdiV2x1SUQwZ2RHaHBjeTVmWkdGMFlWdHBYVHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbDlrWVhSaFcybGRJRDRnYldGNEtWeHVJQ0FnSUNBZ0lDQnRZWGdnUFNCMGFHbHpMbDlrWVhSaFcybGRPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0J5WVc1blpTQTlJRzFoZUNBdElHMXBianRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyUmhkR0V1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRDBnY21GdVoyVWdQVDA5SURBZ1B5QjBhR2x6TGw5a1lYUmhXMmxkSUMwZ2JXbHVJRG9nS0hSb2FYTXVYMlJoZEdGYmFWMGdMU0J0YVc0cElDOGdLRzFoZUNBdElHMXBiaWs3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUmxlR0ZpYkdVOFZFOWlhajRnZTF4dUlDQmJhVzVrWlhnNklHNTFiV0psY2wwNklGUlBZbW83WEc0Z0lHZGxkQ0JzWlc1bmRHZ29LVG9nYm5WdFltVnlPMXh1ZlZ4dUlsMTkiLCJpbXBvcnQgKiBhcyBmbCBmcm9tICdmYXN0ZXN0LWxldmVuc2h0ZWluJztcbmltcG9ydCB7IGphcm9XaW5rbGVyIH0gZnJvbSAnamFyby13aW5rbGVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgYXN5bW1ldHJpY0Rpc3RhbmNlLCBicmF1bkJsYW5xdWV0RGlzdGFuY2UsIGNvc2luZURpc3RhbmNlLCBkaWNlRGlzdGFuY2UsIGV1Y2xpZGVhbkRpc3RhbmNlLCBoYW1taW5nRGlzdGFuY2UsIGt1bGN6eW5za2lEaXN0YW5jZSwgbWNDb25uYXVnaGV5RGlzdGFuY2UsIHJvZ290R29sZGJlcmdEaXN0YW5jZSwgcnVzc2VsRGlzdGFuY2UsIHNva2FsRGlzdGFuY2UsIHRhbmltb3RvRGlzdGFuY2UsIG51bWVyaWNEaXN0YW5jZSwgdGFuaW1vdG9EaXN0YW5jZUludEFycmF5LCB9IGZyb20gJy4uL2Rpc3RhbmNlLW1ldHJpY3MtbWV0aG9kcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7IG1tRGlzdGFuY2VGdW5jdGlvbnMsIE1tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcyB9IGZyb20gJy4uL21hY3JvbW9sZWN1bGUtZGlzdGFuY2UtZnVuY3Rpb25zJztcbmltcG9ydCB7IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLCBCaXRBcnJheU1ldHJpY3NOYW1lcywgU3RyaW5nTWV0cmljc05hbWVzLCBWZWN0b3JNZXRyaWNzTmFtZXMsIE51bWJlck1ldHJpY3NOYW1lcywgSW50QXJyYXlNZXRyaWNzTmFtZXMgfSBmcm9tICcuL2NvbnN0cyc7XG5leHBvcnQgY29uc3QgdmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dOiBmbC5kaXN0YW5jZSxcbiAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogamFyb1dpbmtsZXIsXG4gICAgW1N0cmluZ01ldHJpY3NOYW1lcy5NYW5oYXR0YW5dOiBtYW5oYXR0YW5EaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b106IHRhbmltb3RvRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdOiBkaWNlRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkFzeW1tZXRyaWNdOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdOiBicmF1bkJsYW5xdWV0RGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkNvc2luZV06IGNvc2luZURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5LdWxjenluc2tpXToga3VsY3p5bnNraURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ106IHJvZ290R29sZGJlcmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXTogcnVzc2VsRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXTogc29rYWxEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuSGFtbWluZ106IGhhbW1pbmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXTogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IGludEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbSW50QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9JbnRBcnJheV06IHRhbmltb3RvRGlzdGFuY2VJbnRBcnJheSxcbn07XG5leHBvcnQgY29uc3QgbnVtYmVyRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV06IG51bWVyaWNEaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuVmVjdG9yXToge1xuICAgICAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IHZlY3RvckRpc3RhbmNlTWV0cmljc01ldGhvZHNbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuU3RyaW5nXToge1xuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkxldmVuc2h0ZWluXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuSmFyb1dpbmtsZXJdLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl06IHN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHNbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuQml0QXJyYXldOiB7XG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b106IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b10sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5EaWNlXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuQXN5bW1ldHJpY106IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5Bc3ltbWV0cmljXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuQnJhdW5CbGFucXVldF0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Db3NpbmVdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuQ29zaW5lXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkt1bGN6eW5za2ldOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuS3VsY3p5bnNraV0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuTWNDb25uYXVnaGV5XSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlJvZ290R29sZGJlcmddOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ10sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5SdXNzZWxdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5NYWNyb01vbGVjdWxlXToge1xuICAgICAgICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkhBTU1JTkddOiBtbURpc3RhbmNlRnVuY3Rpb25zW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5IQU1NSU5HXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5MRVZFTlNIVEVJTl06IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkxFVkVOU0hURUlOXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5ORUVETEVNQU5OX1dVTlNDSF06IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLk5FRURMRU1BTk5fV1VOU0NIXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogbW1EaXN0YW5jZUZ1bmN0aW9uc1tNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuTnVtYmVyXToge1xuICAgICAgICBbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV06IG51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHNbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuSW50QXJyYXldOiB7XG4gICAgICAgIFtJbnRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b0ludEFycmF5XTogaW50QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0ludEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvSW50QXJyYXldLFxuICAgIH1cbn07XG5leHBvcnQgY29uc3QgTWV0cmljVG9EYXRhVHlwZSA9IE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpXG4gICAgLnJlZHVjZSgocmV0LCBrZXkpID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2tleV0pKVxuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICByZXR1cm4gcmV0O1xufSwge30pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnU3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpdEFycmF5TWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnQml0QXJyYXknO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnVmVjdG9yJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hY3JvTW9sZWN1bGVNZXRyaWMobmFtZSkge1xuICAgIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLk1hY3JvTW9sZWN1bGUudG9TdHJpbmcoKTtcbn1cbi8qKiBNYW5oYXR0YW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc2VxdWVuY2VzIChtYXRjaCAtIDAsIG1pc21hdGNoIC0gMSkgbm9ybWFsaXplZCBmb3IgbGVuZ3RoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbmhhdHRhbkRpc3RhbmNlKHMxLCBzMikge1xuICAgIGlmIChzMS5sZW5ndGggIT09IHMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBkaXN0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzMS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGRpc3QgKz0gczFbaV0gPT0gczJbaV0gPyAwIDogMTtcbiAgICAgICAgcmV0dXJuIGRpc3QgLyBzMS5sZW5ndGg7XG4gICAgfVxufVxuLyoqIFVuaWZpZWQgY2xhc3MgaW1wbGVtZW50aW5nIGRpZmZlcmVudCBzdHJpbmcgbWVhc3VyZXMuICovXG5leHBvcnQgY2xhc3MgTWVhc3VyZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBNZWFzdXJlIHdpdGggLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgTWV0aG9kIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSBiZXR3ZWVuIHN0cmluZ3MuXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWV0aG9kKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLmRhdGFUeXBlID0gTWV0cmljVG9EYXRhVHlwZVttZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgZnVuY3Rpb24gc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7b3B0c30gb3B0cyBPcHRpb25zIGZvciB0aGUgbWVhc3VyZS4gdXNlZCBmb3IgbWFjcm9tb2xlY3VsZSBkaXN0YW5jZXNcbiAgICAgKiBAcmV0dXJuIHtEaXN0YW5jZU1ldHJpY30gQ2FsbGJhY2sgb2YgdGhlIG1lYXN1cmUgY2hvc2VuLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGdldE1lYXN1cmUob3B0cykge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgaWYgKCFkaWN0Lmhhc093blByb3BlcnR5KHRoaXMuZGF0YVR5cGUpIHx8ICFkaWN0W3RoaXMuZGF0YVR5cGVdLmhhc093blByb3BlcnR5KHRoaXMubWV0aG9kKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtZWFzdXJlICR7dGhpcy5tZXRob2R9IGZvciBkYXRhIHR5cGUgJHt0aGlzLmRhdGFUeXBlfWApO1xuICAgICAgICByZXR1cm4gaXNNYWNyb01vbGVjdWxlTWV0cmljKHRoaXMubWV0aG9kKSA/XG4gICAgICAgICAgICBkaWN0W3RoaXMuZGF0YVR5cGVdW3RoaXMubWV0aG9kXShvcHRzKSA6XG4gICAgICAgICAgICBkaWN0W3RoaXMuZGF0YVR5cGVdW3RoaXMubWV0aG9kXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjdXN0b20gc3RyaW5nIGRpc3RhbmNlIGJ5IHRoZSBnaXZlbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHtBdmFpbGFibGVEYXRhVHlwZXN9IGRhdGFUeXBlIE1ldHJpYydzIGRhdGEgdHlwZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgc3RhdGljIGdldE1ldHJpY0J5RGF0YVR5cGUoZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbZGF0YVR5cGVdKTtcbiAgICB9XG4gICAgLyoqIFJldHVybnMgbWV0cmljIG5hbWVzIGF2YWlsYWJsZS5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1lYXN1cmVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljcyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pXUXRiV1YwY21samN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5SNWNHVmtMVzFsZEhKcFkzTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHhRa0ZCY1VJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkRMRTFCUVUwc2VVSkJRWGxDTEVOQlFVTTdRVUZGY0VRc1QwRkJUeXhGUVVOTUxHdENRVUZyUWl4RlFVTnNRaXh4UWtGQmNVSXNSVUZEY2tJc1kwRkJZeXhGUVVOa0xGbEJRVmtzUlVGRFdpeHBRa0ZCYVVJc1JVRkRha0lzWlVGQlpTeEZRVU5tTEd0Q1FVRnJRaXhGUVVOc1FpeHZRa0ZCYjBJc1JVRkRjRUlzY1VKQlFYRkNMRVZCUTNKQ0xHTkJRV01zUlVGRFpDeGhRVUZoTEVWQlEySXNaMEpCUVdkQ0xFVkJRMmhDTEdWQlFXVXNSVUZEWml4M1FrRkJkMElzUjBGRGVrSXNUVUZCVFN3MlFrRkJOa0lzUTBGQlF6dEJRVVZ5UXl4UFFVRlBMRVZCUVVNc01FSkJRVEJDTEVWQlFVTXNUVUZCVFN4cFJFRkJhVVFzUTBGQlF6dEJRVWN6Uml4UFFVRlBMRVZCUVVNc2JVSkJRVzFDTEVWQlFVVXNkMEpCUVhkQ0xFVkJRVU1zVFVGQlRTeHhRMEZCY1VNc1EwRkJRenRCUVVOc1J5eFBRVUZQTEVWQlFVTXNkVUpCUVhWQ0xFVkJRVVVzYjBKQlFXOUNMRVZCUTI1RUxHdENRVUZyUWl4RlFVRkZMR3RDUVVGclFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHOUNRVUZ2UWl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSM0JITEUxQlFVMHNRMEZCUXl4TlFVRk5MRFJDUVVFMFFpeEhRVUY1UkR0SlFVTm9SeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxEQkNRVUV3UWp0RFFVTXpSQ3hEUVVGRE8wRkJSVVlzVFVGQlRTeERRVUZETEUxQlFVMHNORUpCUVRSQ0xFZEJRWGxFTzBsQlEyaEhMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkU3U1VGRE4wTXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4WFFVRlhPMGxCUXpkRExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzYVVKQlFXbENPME5CUTJ4RUxFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN3NFFrRkJPRUlzUjBGQk5rUTdTVUZEZEVjc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSU3huUWtGQlowSTdTVUZEYWtRc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3haUVVGWk8wbEJRM3BETEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNhMEpCUVd0Q08wbEJRM0pFTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNjVUpCUVhGQ08wbEJRek5FTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNZMEZCWXp0SlFVTTNReXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGRkxHdENRVUZyUWp0SlFVTnlSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxHOUNRVUZ2UWp0SlFVTjZSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVGRkxIRkNRVUZ4UWp0SlFVTXpSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxHTkJRV003U1VGRE4wTXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4aFFVRmhPMGxCUXpORExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzWlVGQlpUdEpRVU12UXl4RFFVRkRMRzlDUVVGdlFpeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMR2xDUVVGcFFqdERRVU53UkN4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzT0VKQlFUaENMRWRCUVcxRk8wbEJRelZITEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1JVRkJSU3gzUWtGQmQwSTdRMEZEYkVVc1EwRkJRenRCUVVWR0xFMUJRVTBzUTBGQlF5eE5RVUZOTERSQ1FVRTBRaXhIUVVGNVJEdEpRVU5vUnl4RFFVRkRMR3RDUVVGclFpeERRVUZETEdWQlFXVXNRMEZCUXl4RlFVRkZMR1ZCUVdVN1EwRkRkRVFzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCUXl4TlFVRk5MR2RDUVVGblFpeEhRVUZITzBsQlF6bENMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVN1VVRkRhRU1zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTdzBRa0ZCTkVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4VFFVRlRMRU5CUVVNN1MwRkRNMFk3U1VGRFJDeERRVUZETEhWQ1FVRjFRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlEyaERMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlF6bEdMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlF6bEdMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVTBGQlV5eERRVUZETzB0QlF6TkdPMGxCUTBRc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOc1F5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVNNVJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOMFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOc1J5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVONFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVNeFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOc1J5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVOMFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVONFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVNeFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVONlJqdEpRVU5FTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVTdVVUZEZGtNc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4M1FrRkJkMElzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZEZWtZc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4M1FrRkJkMElzUTBGQlF5eFhRVUZYTEVOQlFVTTdVVUZEYWtjc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExIZENRVUYzUWl4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6ZEhMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUlVGQlJTeHRRa0ZCYlVJc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4NVFrRkJlVUlzUTBGQlF6dExRVU01U0R0SlFVTkVMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVN1VVRkRhRU1zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhsUVVGbExFTkJRVU1zUlVGQlJTdzBRa0ZCTkVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4bFFVRmxMRU5CUVVNN1MwRkRka2M3U1VGRFJDeERRVUZETEhWQ1FVRjFRaXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTzFGQlEyeERMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4blFrRkJaMElzUTBGQlF6dExRVU12Unp0RFFVTkdMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeG5Ra0ZCWjBJc1IwRkJjVUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF6dExRVU0xUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGeFFpeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZPMGxCUTNKRExFdEJRVXNzVFVGQlRTeEhRVUZITEVsQlFVa3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRjVRaXhEUVVGRExFTkJRVU03VVVGRGVFVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZGZGtNc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFlpeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRmxWQ3hOUVVGTkxGVkJRVlVzWTBGQll5eERRVUZETEVsQlFXdENPMGxCUXk5RExFOUJRVThzWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETzBGQlF6VkRMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1NVRkJhMEk3U1VGRGFrUXNUMEZCVHl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4VlFVRlZMRU5CUVVNN1FVRkRPVU1zUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4alFVRmpMRU5CUVVNc1NVRkJhMEk3U1VGREwwTXNUMEZCVHl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNN1FVRkROVU1zUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eEpRVUZyUWp0SlFVTjBSQ3hQUVVGUExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxIVkNRVUYxUWl4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dEJRVU53Uml4RFFVRkRPMEZCUlVRc1owZEJRV2RITzBGQlEyaEhMRTFCUVUwc1ZVRkJWU3hwUWtGQmFVSXNRMEZCUXl4RlFVRlZMRVZCUVVVc1JVRkJWVHRKUVVOMFJDeEpRVUZKTEVWQlFVVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJUdFJRVU16UWl4UFFVRlBMRU5CUVVNc1EwRkJRenRMUVVOV08xTkJRVTA3VVVGRFRDeEpRVUZKTEVsQlFVa3NSMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkRja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTJoRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5xUXl4UFFVRlBMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETzB0QlEzcENPMEZCUTBnc1EwRkJRenRCUVVWRUxEUkVRVUUwUkR0QlFVTTFSQ3hOUVVGTkxFOUJRVThzVDBGQlR6dEpRVWxzUWpzN096dFBRVWxITzBsQlEwZ3NXVUZCV1N4TlFVRnZRanRSUVVNNVFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVOeVFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCZFVJc1EwRkJRenRKUVVOcVJTeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU1N4VlFVRlZMRU5CUVVNc1NVRkJWVHRSUVVNeFFpeE5RVUZOTEVsQlFVa3NSMEZGVGl4blFrRkJaMElzUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzFsQlEzcEdMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1EwRkJReXhOUVVGTkxHdENRVUZyUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU51Uml4UFFVRlBMSEZDUVVGeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM2hETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCY1VNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJiVUlzUTBGQlF6dEpRVU4yUkN4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTU3hOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1VVRkJORUk3VVVGRE5VUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXp0SlFVVkVPenRQUVVWSE8wbEJRMGdzVFVGQlRTeExRVUZMTEdsQ1FVRnBRanRSUVVNeFFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0SlFVTjJReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm1iQ0JtY205dElDZG1ZWE4wWlhOMExXeGxkbVZ1YzJoMFpXbHVKenRjYm1sdGNHOXlkQ0I3YW1GeWIxZHBibXRzWlhKOUlHWnliMjBnSjJwaGNtOHRkMmx1YTJ4bGNpMTBlWEJsYzJOeWFYQjBKenRjYm1sdGNHOXlkQ0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1I1Y0dVdFpHVmpiR0Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3WEc0Z0lHRnplVzF0WlhSeWFXTkVhWE4wWVc1alpTeGNiaUFnWW5KaGRXNUNiR0Z1Y1hWbGRFUnBjM1JoYm1ObExGeHVJQ0JqYjNOcGJtVkVhWE4wWVc1alpTeGNiaUFnWkdsalpVUnBjM1JoYm1ObExGeHVJQ0JsZFdOc2FXUmxZVzVFYVhOMFlXNWpaU3hjYmlBZ2FHRnRiV2x1WjBScGMzUmhibU5sTEZ4dUlDQnJkV3hqZW5sdWMydHBSR2x6ZEdGdVkyVXNYRzRnSUcxalEyOXVibUYxWjJobGVVUnBjM1JoYm1ObExGeHVJQ0J5YjJkdmRFZHZiR1JpWlhKblJHbHpkR0Z1WTJVc1hHNGdJSEoxYzNObGJFUnBjM1JoYm1ObExGeHVJQ0J6YjJ0aGJFUnBjM1JoYm1ObExGeHVJQ0IwWVc1cGJXOTBiMFJwYzNSaGJtTmxMRnh1SUNCdWRXMWxjbWxqUkdsemRHRnVZMlVzWEc0Z0lIUmhibWx0YjNSdlJHbHpkR0Z1WTJWSmJuUkJjbkpoZVN4Y2JuMGdabkp2YlNBbkxpNHZaR2x6ZEdGdVkyVXRiV1YwY21samN5MXRaWFJvYjJSekp6dGNibHh1YVcxd2IzSjBJSHRqWVd4amRXeGhkR1ZGZFdOc2FXUmxZVzVFYVhOMFlXNWpaWDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZG1WamRHOXlMVzl3WlhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUVKcGRFRnljbUY1SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDJKcGRDMWhjbkpoZVNjN1hHNXBiWEJ2Y25RZ2UxWmxZM1J2Y2l3Z1UzUnlhVzVuUkdsamRHbHZibUZ5ZVgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdHRiVVJwYzNSaGJtTmxSblZ1WTNScGIyNXpMQ0JOYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTjlJR1p5YjIwZ0p5NHVMMjFoWTNKdmJXOXNaV04xYkdVdFpHbHpkR0Z1WTJVdFpuVnVZM1JwYjI1ekp6dGNibWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNc0lFSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMRnh1SUNCVGRISnBibWROWlhSeWFXTnpUbUZ0WlhNc0lGWmxZM1J2Y2sxbGRISnBZM05PWVcxbGN5d2dUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpMQ0JKYm5SQmNuSmhlVTFsZEhKcFkzTk9ZVzFsYzMwZ1puSnZiU0FuTGk5amIyNXpkSE1uTzF4dVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCMlpXTjBiM0pFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSek9pQjdJRnR1WVcxbE9pQnpkSEpwYm1kZE9pQW9lRG9nVm1WamRHOXlMQ0I1T2lCV1pXTjBiM0lwSUQwK0lHNTFiV0psY2lCOUlEMGdlMXh1SUNCYlZtVmpkRzl5VFdWMGNtbGpjMDVoYldWekxrVjFZMnhwWkdWaGJsMDZJR05oYkdOMWJHRjBaVVYxWTJ4cFpHVmhia1JwYzNSaGJtTmxMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhOMGNtbHVaMFJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhNNklIc2dXMjVoYldVNklITjBjbWx1WjEwNklDaDRPaUJ6ZEhKcGJtY3NJSGs2SUhOMGNtbHVaeWtnUFQ0Z2JuVnRZbVZ5SUgwZ1BTQjdYRzRnSUZ0VGRISnBibWROWlhSeWFXTnpUbUZ0WlhNdVRHVjJaVzV6YUhSbGFXNWRPaUJtYkM1a2FYTjBZVzVqWlN4Y2JpQWdXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVLWVhKdlYybHVhMnhsY2wwNklHcGhjbTlYYVc1cmJHVnlMRnh1SUNCYlUzUnlhVzVuVFdWMGNtbGpjMDVoYldWekxrMWhibWhoZEhSaGJsMDZJRzFoYm1oaGRIUmhia1JwYzNSaGJtTmxMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2N6b2dleUJiYm1GdFpUb2djM1J5YVc1blhUb2dLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTa2dQVDRnYm5WdFltVnlJSDBnUFNCN1hHNGdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjEwNklIUmhibWx0YjNSdlJHbHpkR0Z1WTJVc1hHNGdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1RWFXTmxYVG9nWkdsalpVUnBjM1JoYm1ObExGeHVJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVFYTjViVzFsZEhKcFkxMDZJR0Z6ZVcxdFpYUnlhV05FYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa0p5WVhWdVFteGhibkYxWlhSZE9pQmljbUYxYmtKc1lXNXhkV1YwUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVEYjNOcGJtVmRPaUJqYjNOcGJtVkVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrdDFiR042ZVc1emEybGRPaUJyZFd4amVubHVjMnRwUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVOWTBOdmJtNWhkV2RvWlhsZE9pQnRZME52Ym01aGRXZG9aWGxFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbEp2WjI5MFIyOXNaR0psY21kZE9pQnliMmR2ZEVkdmJHUmlaWEpuUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVTZFhOelpXeGRPaUJ5ZFhOelpXeEVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsTnZhMkZzWFRvZ2MyOXJZV3hFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa2hoYlcxcGJtZGRPaUJvWVcxdGFXNW5SR2x6ZEdGdVkyVXNYRzRnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NUZkV05zYVdSbFlXNWRPaUJsZFdOc2FXUmxZVzVFYVhOMFlXNWpaU3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCcGJuUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITTZJSHNnVzI1aGJXVTZJSE4wY21sdVoxMDZJQ2g0T2lCVmFXNTBNekpCY25KaGVTd2dlVG9nVldsdWRETXlRWEp5WVhrcElEMCtJRzUxYldKbGNpQjlJRDBnZTF4dUlDQmJTVzUwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VkdGdWFXMXZkRzlKYm5SQmNuSmhlVjA2SUhSaGJtbHRiM1J2UkdsemRHRnVZMlZKYm5SQmNuSmhlU3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCdWRXMWlaWEpFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSek9pQjdJRnR1WVcxbE9pQnpkSEpwYm1kZE9pQW9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lCOUlEMGdlMXh1SUNCYlRuVnRZbVZ5VFdWMGNtbGpjMDVoYldWekxrNTFiV1Z5YVdORWFYTjBZVzVqWlYwNklHNTFiV1Z5YVdORWFYTjBZVzVqWlN4Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11Vm1WamRHOXlYVG9nZTF4dUlDQWdJRnRXWldOMGIzSk5aWFJ5YVdOelRtRnRaWE11UlhWamJHbGtaV0Z1WFRvZ2RtVmpkRzl5UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFdaV04wYjNKTlpYUnlhV056VG1GdFpYTXVSWFZqYkdsa1pXRnVYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbE4wY21sdVoxMDZJSHRjYmlBZ0lDQmJVM1J5YVc1blRXVjBjbWxqYzA1aGJXVnpMa3hsZG1WdWMyaDBaV2x1WFRvZ2MzUnlhVzVuUkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVUR1YyWlc1emFIUmxhVzVkTEZ4dUlDQWdJRnRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11U21GeWIxZHBibXRzWlhKZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVLWVhKdlYybHVhMnhsY2wwc1hHNGdJQ0FnVzFOMGNtbHVaMDFsZEhKcFkzTk9ZVzFsY3k1TllXNW9ZWFIwWVc1ZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVOWVc1b1lYUjBZVzVkTEZ4dUlDQjlMRnh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11UW1sMFFYSnlZWGxkT2lCN1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsUmhibWx0YjNSdlhUb2dZbWwwUVhKeVlYbEVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6VzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsUmhibWx0YjNSdlhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVSR2xqWlYwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1RWFXTmxYU3hjYmlBZ0lDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UVhONWJXMWxkSEpwWTEwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1QmMzbHRiV1YwY21salhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVRbkpoZFc1Q2JHRnVjWFZsZEYwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1Q2NtRjFia0pzWVc1eGRXVjBYU3hjYmlBZ0lDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UTI5emFXNWxYVG9nWW1sMFFYSnlZWGxFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa052YzJsdVpWMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa3QxYkdONmVXNXphMmxkT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UzNWc1kzcDVibk5yYVYwc1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrMWpRMjl1Ym1GMVoyaGxlVjA2SUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVOWTBOdmJtNWhkV2RvWlhsZExGeHVJQ0FnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NVNiMmR2ZEVkdmJHUmlaWEpuWFRvZ1ltbDBRWEp5WVhsRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGxKdloyOTBSMjlzWkdKbGNtZGRMRnh1SUNBZ0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVTZFhOelpXeGRPaUJpYVhSQmNuSmhlVVJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhOYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVblZ6YzJWc1hTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVMjlyWVd4ZE9pQmlhWFJCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVUyOXJZV3hkTEZ4dUlDQjlMRnh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11VFdGamNtOU5iMnhsWTNWc1pWMDZJSHNnTHk4Z2IzQjBhVzl1WVd3Z1lYSm5jeUJ1WldWa1pXUWdabTl5SUcxaFkzSnZiVzlzWldOMWJHVWdablZ1WTNScGIyNXpJSGRvYVdOb0lHbHVhWFJwWVd4cGVtVWdkR2hsYlZ4dUlDQWdJRnROYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTXVTRUZOVFVsT1IxMDZJRzF0UkdsemRHRnVZMlZHZFc1amRHbHZibk5iVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMa2hCVFUxSlRrZGRMRnh1SUNBZ0lGdE5iVVJwYzNSaGJtTmxSblZ1WTNScGIyNXpUbUZ0WlhNdVRFVldSVTVUU0ZSRlNVNWRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVNUlZaRlRsTklWRVZKVGwwc1hHNGdJQ0FnVzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVPUlVWRVRFVk5RVTVPWDFkVlRsTkRTRjA2SUcxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OYlRXMUVhWE4wWVc1alpVWjFibU4wYVc5dWMwNWhiV1Z6TGs1RlJVUk1SVTFCVGs1ZlYxVk9VME5JWFN4Y2JpQWdJQ0JiVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMazFQVGs5TlJWSmZRMGhGVFVsRFFVeGZSRWxUVkVGT1EwVmRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVOVDA1UFRVVlNYME5JUlUxSlEwRk1YMFJKVTFSQlRrTkZYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMazUxYldKbGNsMDZJSHRjYmlBZ0lDQmJUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpMazUxYldWeWFXTkVhWE4wWVc1alpWMDZJRzUxYldKbGNrUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iVG5WdFltVnlUV1YwY21samMwNWhiV1Z6TGs1MWJXVnlhV05FYVhOMFlXNWpaVjBzWEc0Z0lIMHNYRzRnSUZ0RWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeTVKYm5SQmNuSmhlVjA2SUh0Y2JpQWdJQ0JiU1c1MFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVZHRnVhVzF2ZEc5SmJuUkJjbkpoZVYwNklHbHVkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRKYm5SQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjBsdWRFRnljbUY1WFN4Y2JpQWdmVnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxbGRISnBZMVJ2UkdGMFlWUjVjR1U2SUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektWeHVJQ0F1Y21Wa2RXTmxLQ2h5WlhRNklGTjBjbWx1WjBScFkzUnBiMjVoY25rc0lHdGxlU2tnUFQ0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RtRnNJRzltSUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYmEyVjVJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwcEtWeHVJQ0FnSUNBZ2NtVjBXM1poYkNCaGN5QkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTmRJRDBnYTJWNU8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhKbGREdGNiaUFnZlN3Z2UzMHBPMXh1WEc1bGVIQnZjblFnZEhsd1pTQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqY3p0Y2JtVjRjRzl5ZENCMGVYQmxJRlpsWTNSdmNrMWxkSEpwWTNNZ1BTQnJaWGx2WmlCMGVYQmxiMllnUVhaaGFXeGhZbXhsVFdWMGNtbGpjMXRFYVhOMFlXNWpaVTFsZEhKcFkzTlRkV0pxWldOMGN5NVdaV04wYjNKZE8xeHVaWGh3YjNKMElIUjVjR1VnVTNSeWFXNW5UV1YwY21samN5QTlJR3RsZVc5bUlIUjVjR1Z2WmlCQmRtRnBiR0ZpYkdWTlpYUnlhV056VzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbE4wY21sdVoxMDdYRzVsZUhCdmNuUWdkSGx3WlNCQ2FYUkJjbkpoZVUxbGRISnBZM01nUFNCclpYbHZaaUIwZVhCbGIyWWdRWFpoYVd4aFlteGxUV1YwY21samMxdEVhWE4wWVc1alpVMWxkSEpwWTNOVGRXSnFaV04wY3k1Q2FYUkJjbkpoZVYwN1hHNWxlSEJ2Y25RZ2RIbHdaU0JMYm05M2JrMWxkSEpwWTNNZ1BTQlRkSEpwYm1kTlpYUnlhV056SUh3Z1FtbDBRWEp5WVhsTlpYUnlhV056SUh3Z1ZtVmpkRzl5VFdWMGNtbGpjeUI4WEc0Z0lFMXRSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTk9ZVzFsY3lCOElFNTFiV0psY2sxbGRISnBZM05PWVcxbGN5QjhJRWx1ZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JXWVd4cFpGUjVjR1Z6SUQxY2JpQWdleUJrWVhSaE9pQnpkSEpwYm1kYlhTd2diV1YwY21sak9pQlRkSEpwYm1kTlpYUnlhV056SUh3Z1RXMUVhWE4wWVc1alpVWjFibU4wYVc5dWMwNWhiV1Z6SUgwZ2ZGeHVJQ0I3SUdSaGRHRTZJRlpsWTNSdmNsdGRMQ0J0WlhSeWFXTTZJRlpsWTNSdmNrMWxkSEpwWTNNZ2ZTQjhYRzRnSUhzZ1pHRjBZVG9nUW1sMFFYSnlZWGxiWFN3Z2JXVjBjbWxqT2lCQ2FYUkJjbkpoZVUxbGRISnBZM01nZlNCOFhHNGdJSHNnWkdGMFlUb2diblZ0WW1WeVcxMHNJRzFsZEhKcFl6b2dUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpJSDA3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMxTjBjbWx1WjAxbGRISnBZeWh1WVcxbE9pQkxibTkzYmsxbGRISnBZM01wSUh0Y2JpQWdjbVYwZFhKdUlFMWxkSEpwWTFSdlJHRjBZVlI1Y0dWYmJtRnRaVjBnUFQwZ0oxTjBjbWx1WnljN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzBKcGRFRnljbUY1VFdWMGNtbGpLRzVoYldVNklFdHViM2R1VFdWMGNtbGpjeWtnZTF4dUlDQnlaWFIxY200Z1RXVjBjbWxqVkc5RVlYUmhWSGx3WlZ0dVlXMWxYU0E5UFNBblFtbDBRWEp5WVhrbk8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOV1pXTjBiM0pOWlhSeWFXTW9ibUZ0WlRvZ1MyNXZkMjVOWlhSeWFXTnpLU0I3WEc0Z0lISmxkSFZ5YmlCTlpYUnlhV05VYjBSaGRHRlVlWEJsVzI1aGJXVmRJRDA5SUNkV1pXTjBiM0luTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5OWVdOeWIwMXZiR1ZqZFd4bFRXVjBjbWxqS0c1aGJXVTZJRXR1YjNkdVRXVjBjbWxqY3lrZ2UxeHVJQ0J5WlhSMWNtNGdUV1YwY21salZHOUVZWFJoVkhsd1pWdHVZVzFsWFNBOVBTQkVhWE4wWVc1alpVMWxkSEpwWTNOVGRXSnFaV04wY3k1TllXTnliMDF2YkdWamRXeGxMblJ2VTNSeWFXNW5LQ2s3WEc1OVhHNWNiaThxS2lCTllXNW9ZWFIwWVc0Z1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmlCMGQyOGdjMlZ4ZFdWdVkyVnpJQ2h0WVhSamFDQXRJREFzSUcxcGMyMWhkR05vSUMwZ01Ta2dibTl5YldGc2FYcGxaQ0JtYjNJZ2JHVnVaM1JvTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWhibWhoZEhSaGJrUnBjM1JoYm1ObEtITXhPaUJ6ZEhKcGJtY3NJSE15T2lCemRISnBibWNwT2lCdWRXMWlaWElnZTF4dUlDQnBaaUFvY3pFdWJHVnVaM1JvSUNFOVBTQnpNaTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z01UdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnNaWFFnWkdsemREb2diblZ0WW1WeUlEMGdNRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTVRzZ2FTQThJSE14TG14bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ1pHbHpkQ0FyUFNCek1WdHBYU0E5UFNCek1sdHBYU0EvSURBZ09pQXhPMXh1SUNBZ0lISmxkSFZ5YmlCa2FYTjBJQzhnY3pFdWJHVnVaM1JvTzF4dUlDQjlYRzU5WEc1Y2JpOHFLaUJWYm1sbWFXVmtJR05zWVhOeklHbHRjR3hsYldWdWRHbHVaeUJrYVdabVpYSmxiblFnYzNSeWFXNW5JRzFsWVhOMWNtVnpMaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRTFsWVhOMWNtVWdlMXh1SUNCd2NtOTBaV04wWldRZ2JXVjBhRzlrT2lCTGJtOTNiazFsZEhKcFkzTTdYRzRnSUhCeWIzUmxZM1JsWkNCa1lYUmhWSGx3WlRvZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWek8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRTFsWVhOMWNtVWdkMmwwYUNBdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WlhSb2IyUWdUV1YwYUc5a0lIUnZJR05oYkdOMWJHRjBaU0JrYVhOMFlXNWpaU0JpWlhSM1pXVnVJSE4wY21sdVozTXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYldWMGFHOWtPaUJMYm05M2JrMWxkSEpwWTNNcElIdGNiaUFnSUNCMGFHbHpMbTFsZEdodlpDQTlJRzFsZEdodlpEdGNiaUFnSUNCMGFHbHpMbVJoZEdGVWVYQmxJRDBnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR0WlhSb2IyUmRJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHTjFjM1J2YlNCemRISnBibWNnWkdsemRHRnVZMlVnWm5WdVkzUnBiMjRnYzNCbFkybG1hV1ZrTGx4dUlDQWdLaUJBY0dGeVlXMGdlMjl3ZEhOOUlHOXdkSE1nVDNCMGFXOXVjeUJtYjNJZ2RHaGxJRzFsWVhOMWNtVXVJSFZ6WldRZ1ptOXlJRzFoWTNKdmJXOXNaV04xYkdVZ1pHbHpkR0Z1WTJWelhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBScGMzUmhibU5sVFdWMGNtbGpmU0JEWVd4c1ltRmpheUJ2WmlCMGFHVWdiV1ZoYzNWeVpTQmphRzl6Wlc0dVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUdkbGRFMWxZWE4xY21Vb2IzQjBjejg2SUdGdWVTazZJRVJwYzNSaGJtTmxUV1YwY21saklIdGNiaUFnSUNCamIyNXpkQ0JrYVdOME9pQjdJRnRyWlhrNklITjBjbWx1WjEwNlhHNGdJQ0FnSUNCN1cydGxlVEk2SUhOMGNtbHVaMTA2SUVScGMzUmhibU5sVFdWMGNtbGpJSHdnS0NodmNIUnpPaUJoYm5rcElEMCtJRVJwYzNSaGJtTmxUV1YwY21saktYMWNiaUFnSUNCOUlEMGdRWFpoYVd4aFlteGxUV1YwY21samN6dGNiaUFnSUNCcFppQW9JV1JwWTNRdWFHRnpUM2R1VUhKdmNHVnlkSGtvZEdocGN5NWtZWFJoVkhsd1pTa2dmSHdnSVdScFkzUmJkR2hwY3k1a1lYUmhWSGx3WlYwdWFHRnpUM2R1VUhKdmNHVnlkSGtvZEdocGN5NXRaWFJvYjJRcEtWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCVmJtdHViM2R1SUcxbFlYTjFjbVVnSkh0MGFHbHpMbTFsZEdodlpIMGdabTl5SUdSaGRHRWdkSGx3WlNBa2UzUm9hWE11WkdGMFlWUjVjR1Y5WUNrN1hHNGdJQ0FnY21WMGRYSnVJR2x6VFdGamNtOU5iMnhsWTNWc1pVMWxkSEpwWXloMGFHbHpMbTFsZEdodlpDa2dQMXh1SUNBZ0lDQWdLR1JwWTNSYmRHaHBjeTVrWVhSaFZIbHdaVjFiZEdocGN5NXRaWFJvYjJSZElHRnpJQ2dvYjNCMGN6b2dZVzU1S1NBOVBpQkVhWE4wWVc1alpVMWxkSEpwWXlrcEtHOXdkSE1wSURwY2JpQWdJQ0FnSUdScFkzUmJkR2hwY3k1a1lYUmhWSGx3WlYxYmRHaHBjeTV0WlhSb2IyUmRJR0Z6SUVScGMzUmhibU5sVFdWMGNtbGpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWTNWemRHOXRJSE4wY21sdVp5QmthWE4wWVc1alpTQmllU0IwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlMEYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMzBnWkdGMFlWUjVjR1VnVFdWMGNtbGpKM01nWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVoxdGRmU0JOWlhSeWFXTWdibUZ0WlhNZ2QyaHBZMmdnWlhod1pXTjBjeUIwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJOWldGemRYSmxjbHh1SUNBZ0tpOWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJOWlhSeWFXTkNlVVJoZEdGVWVYQmxLR1JoZEdGVWVYQmxPaUJCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE1wT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM05iWkdGMFlWUjVjR1ZkS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJTWlhSMWNtNXpJRzFsZEhKcFl5QnVZVzFsY3lCaGRtRnBiR0ZpYkdVdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQmhkbUZwYkdGaWJHVk5aV0Z6ZFhKbGN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLRUYyWVdsc1lXSnNaVTFsZEhKcFkzTXBPMXh1SUNCOVhHNTlYRzRpWFgwPSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgRGlzdGFuY2VNYXRyaXggfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgnO1xuaW1wb3J0IHsgc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MnO1xuY29uc3QgY3R4ID0gc2VsZjtcbmN0eC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YTogeyBwZXB0aWRlc0xpc3QsIG1ldHJpYyB9IH0pID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkbSA9IERpc3RhbmNlTWF0cml4LmNhbGMocGVwdGlkZXNMaXN0LCAoYSwgYikgPT4gc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1ttZXRyaWNdKGEsIGIpKTtcbiAgICAgICAgZGF0YS5kaXN0YW5jZXMgPSBkbS5kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhLmVycm9yID0gZTtcbiAgICB9XG4gICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhKTtcbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHbHpkR0Z1WTJVdGJXRjBjbWw0TG5kdmNtdGxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltUnBjM1JoYm1ObExXMWhkSEpwZUM1M2IzSnJaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4RlFVRkRMR05CUVdNc1JVRkJReXhOUVVGTkxEUkRRVUUwUXl4RFFVRkRPMEZCUXpGRkxFOUJRVThzUlVGQlF5dzBRa0ZCTkVJc1JVRkJReXhOUVVGTkxEQkRRVUV3UXl4RFFVRkRPMEZCUlhSR0xFMUJRVTBzUjBGQlJ5eEhRVUZYTEVsQlFWY3NRMEZCUXp0QlFVVm9ReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUXl4WlFVRlpMRVZCUVVVc1RVRkJUU3hGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZGTzBsQlEzWkZMRTFCUVUwc1NVRkJTU3hIUVVFMFF5eEZRVUZGTEVOQlFVTTdTVUZEZWtRc1NVRkJTVHRSUVVOR0xFMUJRVTBzUlVGQlJTeEhRVUZITEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVONlF5eERRVUZETEVOQlFWTXNSVUZCUlN4RFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExEUkNRVUUwUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRMUVVNeFFqdEpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMUZCUTFZc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYUVJN1NVRkRSQ3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNwQ0xFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMFJwYzNSaGJtTmxUV0YwY21sNGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMXNMM055WXk5a2FYTjBZVzVqWlMxdFlYUnlhWGduTzF4dWFXMXdiM0owSUh0emRISnBibWRFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSemZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMXNMM055WXk5MGVYQmxaQzF0WlhSeWFXTnpKenRjYmx4dVkyOXVjM1FnWTNSNE9pQlhiM0pyWlhJZ1BTQnpaV3htSUdGeklHRnVlVHRjYmx4dVkzUjRMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMjFsYzNOaFoyVW5MQ0JoYzNsdVl5QW9lMlJoZEdFNklIdHdaWEIwYVdSbGMweHBjM1FzSUcxbGRISnBZMzE5S1NBOVBpQjdYRzRnSUdOdmJuTjBJR1JoZEdFNklIdGxjbkp2Y2o4NklHRnVlU3dnWkdsemRHRnVZMlZ6UHpvZ1JteHZZWFF6TWtGeWNtRjVmU0E5SUh0OU8xeHVJQ0IwY25rZ2UxeHVJQ0FnSUdOdmJuTjBJR1J0SUQwZ1JHbHpkR0Z1WTJWTllYUnlhWGd1WTJGc1l5aHdaWEIwYVdSbGMweHBjM1FzWEc0Z0lDQWdJQ0FvWVRvZ2MzUnlhVzVuTENCaU9pQnpkSEpwYm1jcElEMCtJSE4wY21sdVowUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iYldWMGNtbGpYU2hoTENCaUtTazdYRzRnSUNBZ1pHRjBZUzVrYVhOMFlXNWpaWE1nUFNCa2JTNWtZWFJoTzF4dUlDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdaR0YwWVM1bGNuSnZjaUE5SUdVN1hHNGdJSDFjYmlBZ2MyVnNaaTV3YjNOMFRXVnpjMkZuWlNoa1lYUmhLVHRjYm4wcE8xeHVJbDE5IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4vLyB0aGUgc3RhcnR1cCBmdW5jdGlvblxuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcblx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG5cdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzY5NCw4MzFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg5MjA5KSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQyMDk6IDFcbn07XG5cbi8vIGltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZ1xudmFyIGluc3RhbGxDaHVuayA9IChkYXRhKSA9PiB7XG5cdHZhciBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHR9XG5cdH1cblx0aWYocnVudGltZSkgcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0d2hpbGUoY2h1bmtJZHMubGVuZ3RoKVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkcy5wb3AoKV0gPSAxO1xuXHRwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaSA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHQvLyBcIjFcIiBpcyB0aGUgc2lnbmFsIGZvciBcImFscmVhZHkgbG9hZGVkXCJcblx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRpbXBvcnRTY3JpcHRzKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua3BlcHRpZGVzXCJdID0gc2VsZltcIndlYnBhY2tDaHVua3BlcHRpZGVzXCJdIHx8IFtdO1xudmFyIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uID0gY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSBpbnN0YWxsQ2h1bms7XG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiLCIvLyBydW4gc3RhcnR1cFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLngoKTtcbiJdLCJuYW1lcyI6WyJkZWZlcnJlZCIsIm5leHQiLCJEaXN0YW5jZU1hdHJpeCIsImRhdGEiLCJ0aGlzIiwiX2RhdGEiLCJzaXplIiwiX3NpemUiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsIkVycm9yIiwiTWF0aCIsInNxcnQiLCJsZW5ndGgiLCJmbG9vciIsImRhdGFMZW5ndGgiLCJGbG9hdDMyQXJyYXkiLCJfbGluZWFyaXplSUoiLCJpIiwiaiIsImdldCIsInNldCIsInZhbHVlIiwiY2FsYyIsImxpc3QiLCJtZXRob2QiLCJyZXMiLCJzcXVhcmUiLCJhZGQiLCJvdGhlciIsIm5vcm1hbGl6ZSIsIm1pbiIsIm1heCIsInJhbmdlIiwidmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyIsIkV1Y2xpZGVhbiIsInN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJMZXZlbnNodGVpbiIsIkphcm9XaW5rbGVyIiwiTWFuaGF0dGFuIiwiczEiLCJzMiIsImRpc3QiLCJiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJUYW5pbW90byIsIkRpY2UiLCJBc3ltbWV0cmljIiwiQnJhdW5CbGFucXVldCIsIkNvc2luZSIsIkt1bGN6eW5za2kiLCJNY0Nvbm5hdWdoZXkiLCJSb2dvdEdvbGRiZXJnIiwiUnVzc2VsIiwiU29rYWwiLCJIYW1taW5nIiwiaW50QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwiVGFuaW1vdG9JbnRBcnJheSIsIm51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJOdW1lcmljRGlzdGFuY2UiLCJBdmFpbGFibGVNZXRyaWNzIiwiVmVjdG9yIiwiU3RyaW5nIiwiQml0QXJyYXkiLCJNYWNyb01vbGVjdWxlIiwiSEFNTUlORyIsIkxFVkVOU0hURUlOIiwiTkVFRExFTUFOTl9XVU5TQ0giLCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFIiwiTnVtYmVyIiwiSW50QXJyYXkiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV0Iiwia2V5IiwidmFsIiwic2VsZiIsImFkZEV2ZW50TGlzdGVuZXIiLCJwZXB0aWRlc0xpc3QiLCJtZXRyaWMiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImRtIiwiYSIsImIiLCJkaXN0YW5jZXMiLCJlIiwiZXJyb3IiLCJwb3N0TWVzc2FnZSIsIlAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJleHBvcnRzIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJ4IiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIk8iLCJjaHVua0lkcyIsImZuIiwicHJpb3JpdHkiLCJub3RGdWxmaWxsZWQiLCJJbmZpbml0eSIsImV2ZXJ5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImYiLCJjaHVua0lkIiwiYWxsIiwicHJvbWlzZXMiLCJ1IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZXBsYWNlIiwicCIsImluc3RhbGxlZENodW5rcyIsImNodW5rTG9hZGluZ0dsb2JhbCIsInBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uIiwicHVzaCIsImJpbmQiLCJtb3JlTW9kdWxlcyIsInJ1bnRpbWUiLCJwb3AiXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
var peptides;(()=>{"use strict";var t,e,r={9209:(t,e,r)=>{var a=r(6814);class i{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const r=e*(e-1)/2;if(t){if(t.length!=r)throw new Error(`Invalid data length. Observations size ${e} requires data length ${r}.`);this._data=t}else this._data=new Float32Array(r)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,r){this._data[this._linearizeIJ(t,e)]=r}static calc(t,e){const r=t.length,n=new i(void 0,r);for(let i=0;i<r;i++)for(let s=i+1;s<r;s++)n.set(i,s,(0,a.k)(t[i])||(0,a.k)(t[s])?1:e(t[i],t[s]));return n}square(){for(let t=0;t<this._data.length;t++)this._data[t]=this._data[t]**2}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=0,e=this._data[0];for(let r=0;r<this._data.length;r++)this._data[r]<t&&(t=this._data[r]),this._data[r]>e&&(e=this._data[r]);const r=e-t;for(let a=0;a<this._data.length;a++)this._data[a]=0===r?this._data[a]-t:(this._data[a]-t)/(e-t)}}var n=r(1040),s=r(1811),o=r(3979),h=r(5697),l=r(850),c=r(708);const g={[n.CF.Euclidean]:l.dP},d={[n.W.Levenshtein]:s.T,[n.W.JaroWinkler]:o.H$,[n.W.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let r=0;for(let a=1;a<t.length;a++)r+=t[a]==e[a]?0:1;return r/t.length}}},u={[n.gk.Tanimoto]:h.KR,[n.gk.Dice]:h._h,[n.gk.Asymmetric]:h.yU,[n.gk.BraunBlanquet]:h.Dz,[n.gk.Cosine]:h.Zd,[n.gk.Kulczynski]:h.s,[n.gk.McConnaughey]:h.aW,[n.gk.RogotGoldberg]:h.MI,[n.gk.Russel]:h.fX,[n.gk.Sokal]:h.NB,[n.gk.Hamming]:h.UX,[n.gk.Euclidean]:h.WI},f={[n.gd.TanimotoIntArray]:h.FV},k={[n.Yc.NumericDistance]:h.bX},_={[n.Qe.Vector]:{[n.CF.Euclidean]:g[n.CF.Euclidean]},[n.Qe.String]:{[n.W.Levenshtein]:d[n.W.Levenshtein],[n.W.JaroWinkler]:d[n.W.JaroWinkler],[n.W.Manhattan]:d[n.W.Manhattan]},[n.Qe.BitArray]:{[n.gk.Tanimoto]:u[n.gk.Tanimoto],[n.gk.Dice]:u[n.gk.Dice],[n.gk.Asymmetric]:u[n.gk.Asymmetric],[n.gk.BraunBlanquet]:u[n.gk.BraunBlanquet],[n.gk.Cosine]:u[n.gk.Cosine],[n.gk.Kulczynski]:u[n.gk.Kulczynski],[n.gk.McConnaughey]:u[n.gk.McConnaughey],[n.gk.RogotGoldberg]:u[n.gk.RogotGoldberg],[n.gk.Russel]:u[n.gk.Russel],[n.gk.Sokal]:u[n.gk.Sokal]},[n.Qe.MacroMolecule]:{[c.U.HAMMING]:c.o[c.U.HAMMING],[c.U.LEVENSHTEIN]:c.o[c.U.LEVENSHTEIN],[c.U.NEEDLEMANN_WUNSCH]:c.o[c.U.NEEDLEMANN_WUNSCH],[c.U.MONOMER_CHEMICAL_DISTANCE]:c.o[c.U.MONOMER_CHEMICAL_DISTANCE]},[n.Qe.Number]:{[n.Yc.NumericDistance]:k[n.Yc.NumericDistance]},[n.Qe.IntArray]:{[n.gd.TanimotoIntArray]:f[n.gd.TanimotoIntArray]}};Object.keys(_).reduce(((t,e)=>{for(const r of Object.keys(_[e]))t[r]=e;return t}),{});self.addEventListener("message",(({data:{peptidesList:t,metric:e}})=>{return r=void 0,a=void 0,s=function*(){const r={};try{const a=i.calc(t,((t,r)=>d[e](t,r)));r.distances=a.data}catch(t){r.error=t}self.postMessage(r)},new((n=void 0)||(n=Promise))((function(t,e){function i(t){try{h(s.next(t))}catch(t){e(t)}}function o(t){try{h(s.throw(t))}catch(t){e(t)}}function h(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n((function(t){t(r)}))).then(i,o)}h((s=s.apply(r,a||[])).next())}));var r,a,n,s}))}},a={};function i(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={exports:{}};return r[t](n,n.exports,i),n.exports}i.m=r,i.x=()=>{var t=i.O(void 0,[932,831],(()=>i(9209)));return i.O(t)},t=[],i.O=(e,r,a,n)=>{if(!r){var s=1/0;for(c=0;c<t.length;c++){for(var[r,a,n]=t[c],o=!0,h=0;h<r.length;h++)(!1&n||s>=n)&&Object.keys(i.O).every((t=>i.O[t](r[h])))?r.splice(h--,1):(o=!1,n<s&&(s=n));if(o){t.splice(c--,1);var l=a();void 0!==l&&(e=l)}}return e}n=n||0;for(var c=t.length;c>0&&t[c-1][2]>n;c--)t[c]=t[c-1];t[c]=[r,a,n]},i.d=(t,e)=>{for(var r in e)i.o(e,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,r)=>(i.f[r](t,e),e)),[])),i.u=t=>t+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&!t;)t=r[a--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{var t={209:1};i.f.i=(e,r)=>{t[e]||importScripts(i.p+i.u(e))};var e=self.webpackChunkpeptides=self.webpackChunkpeptides||[],r=e.push.bind(e);e.push=e=>{var[a,n,s]=e;for(var o in n)i.o(n,o)&&(i.m[o]=n[o]);for(s&&s(i);a.length;)t[a.pop()]=1;r(e)}})(),e=i.x,i.x=()=>Promise.all([i.e(932),i.e(831)]).then(e);var n=i.x();peptides=n})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBS25HLEdZSlQsSUFBSThHLEVBQXNCUixFQUFvQk8sSSIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9jaHVuayBsb2FkZWQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC9kaXN0YW5jZS1tYXRyaXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcy90eXBlZC1tZXRyaWNzLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vc3JjL3V0aWxzL2Rpc3RhbmNlLW1hdHJpeC53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoOTMyKSxcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoODMxKVxuXHRdKS50aGVuKG5leHQpO1xufTsiLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gJy4vdXRpbHMnO1xuLyoqIERpc3RhbmNlIG1hdHJpeCBjbGFzcyBjb21wYXRpYmxlIHdpdGggZGF0YSBzdHJ1Y3R1cmUgb2Ygc2NpcHkuc3BhdGlhbC5kaXN0YW5jZS5wZGlzdCAqL1xuZXhwb3J0IGNsYXNzIERpc3RhbmNlTWF0cml4IHtcbiAgICBnZXQgZGF0YSgpIHsgcmV0dXJuIHRoaXMuX2RhdGE7IH1cbiAgICBnZXQgc2l6ZSgpIHsgcmV0dXJuIHRoaXMuX3NpemU7IH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gZGF0YSBEaXN0YW5jZSBkYXRhXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgTnVtYmVyIG9mIG9yaWdpbmFsIG9ic2VydmF0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudHMgZXJyb3I6IGRhdGEgb3Igc2l6ZSBpcyByZXF1aXJlZC4nKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5fc2l6ZSA9ICgxICsgTWF0aC5zcXJ0KDEgKyA0ICogMiAqIHRoaXMuX2RhdGEubGVuZ3RoKSkgLyAyO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NpemUgIT0gTWF0aC5mbG9vcih0aGlzLl9zaXplKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSBsZW5ndGggJHt0aGlzLl9kYXRhLmxlbmd0aH0gbGVhZHMgdG8gbm9uIGludGVnZXIgc2l6ZSAke3RoaXMuX3NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBzaXplICogKHNpemUgLSAxKSAvIDI7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPSBkYXRhTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSBsZW5ndGguIE9ic2VydmF0aW9ucyBzaXplICR7c2l6ZX0gcmVxdWlyZXMgZGF0YSBsZW5ndGggJHtkYXRhTGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGFMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9saW5lYXJpemVJSihpLCBqKSB7XG4gICAgICAgIGlmICghKGkgPCBqKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaSBtdXN0IGJlIGxlc3MgdGhhbiBqJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplICogaSArIGogLSBNYXRoLmZsb29yKCgoaSArIDIpICogKGkgKyAxKSkgLyAyKTtcbiAgICB9XG4gICAgZ2V0KGksIGopIHtcbiAgICAgICAgaWYgKGkgPT0gailcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmIChpIDwgailcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhW3RoaXMuX2xpbmVhcml6ZUlKKGksIGopXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbdGhpcy5fbGluZWFyaXplSUooaiwgaSldO1xuICAgIH1cbiAgICBzZXQoaSwgaiwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGF0YVt0aGlzLl9saW5lYXJpemVJSihpLCBqKV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgc3RhdGljIGNhbGMobGlzdCwgbWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IERpc3RhbmNlTWF0cml4KHVuZGVmaW5lZCwgc2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBzaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIHZhbHVlcyBpcyBudWxsLCBzZXQgZGlzdGFuY2UgdG8gMVxuICAgICAgICAgICAgICAgIHJlcy5zZXQoaSwgaiwgIWlzTmlsKGxpc3RbaV0pICYmICFpc05pbChsaXN0W2pdKSA/IG1ldGhvZChsaXN0W2ldLCBsaXN0W2pdKSA6IDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8vIHNxdWFyZXMgZWFjaCB2YWx1ZSBpbiBtYXRyaXggaW4gcGxhY2VcbiAgICBzcXVhcmUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSB0aGlzLl9kYXRhW2ldICoqIDI7XG4gICAgfVxuICAgIC8vIGFkZHMgYW5vdGhlciBtYXRyaXggdG8gdGhpcyBvbmUgaW4gcGxhY2VcbiAgICBhZGQob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NpemUgIT09IG90aGVyLl9zaXplKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXRyaWNlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4gVGhpcyBzaXplOiAke3RoaXMuX3NpemV9LCBvdGhlciBzaXplOiAke290aGVyLl9zaXplfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldICs9IG90aGVyLl9kYXRhW2ldO1xuICAgIH1cbiAgICAvLyBzcXVhcmUgcm9vdCBlYWNoIHZhbHVlIGluIG1hdHJpeCBpbiBwbGFjZVxuICAgIHNxcnQoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSBNYXRoLnNxcnQodGhpcy5fZGF0YVtpXSk7XG4gICAgfVxuICAgIC8vbm9ybWlsemUgZGlzdGFuY2UgbWF0cml4IGluIHBsYWNlXG4gICAgbm9ybWFsaXplKCkge1xuICAgICAgICBsZXQgbWluID0gMDtcbiAgICAgICAgbGV0IG1heCA9IHRoaXMuX2RhdGFbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFbaV0gPCBtaW4pXG4gICAgICAgICAgICAgICAgbWluID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhW2ldID4gbWF4KVxuICAgICAgICAgICAgICAgIG1heCA9IHRoaXMuX2RhdGFbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSByYW5nZSA9PT0gMCA/IHRoaXMuX2RhdGFbaV0gLSBtaW4gOiAodGhpcy5fZGF0YVtpXSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x6ZEdGdVkyVXRiV0YwY21sNExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWkdsemRHRnVZMlV0YldGMGNtbDRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVkQkxFOUJRVThzUlVGQlF5eExRVUZMTEVWQlFVTXNUVUZCVFN4VFFVRlRMRU5CUVVNN1FVRkZPVUlzTWtaQlFUSkdPMEZCUXpOR0xFMUJRVTBzVDBGQlR5eGpRVUZqTzBsQlNYcENMRWxCUVVrc1NVRkJTU3hMUVVGdFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSUzlETEVsQlFVa3NTVUZCU1N4TFFVRmhMRTlCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGZWtNN096dFBRVWRITzBsQlEwZ3NXVUZCV1N4SlFVRnRRaXhGUVVGRkxFbEJRV0U3VVVGRE5VTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1UwRkJVeXhGUVVGRk8xbEJRM0pDTEVsQlFVa3NTVUZCU1N4SlFVRkpMRk5CUVZNN1owSkJRVVVzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MFEwRkJORU1zUTBGQlF5eERRVUZETzFsQlJYSkdMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlN5eERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJoRkxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUTNSRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN3NFFrRkJPRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNN1UwRkRka2M3WVVGQlRUdFpRVU5NTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMnhDTEUxQlFVMHNWVUZCVlN4SFFVRlhMRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRha1FzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTFJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEZWQlFWVTdiMEpCUXpOQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNNRU5CUVRCRExFbEJRVWtzZVVKQlFYbENMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlEzaEhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETzJGQlEyNUNPMmxDUVVGTk8yZENRVU5NTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdZVUZETTBNN1UwRkRSanRKUVVOSUxFTkJRVU03U1VGRlR5eFpRVUZaTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNN1VVRkRka01zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVGRkxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU4yUkN4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOc1JTeERRVUZETzBsQlJVUXNSMEZCUnl4RFFVRkRMRU5CUVZNc1JVRkJSU3hEUVVGVE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRVaXhQUVVGUExFTkJRVU1zUTBGQlF6dGhRVU5PTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRXaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1dVRkZNME1zVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRMME1zUTBGQlF6dEpRVVZFTEVkQlFVY3NRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxFdEJRV0U3VVVGRGNrTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU01UXl4RFFVRkRPMGxCUlVRc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlR5eEpRVUZ4UWl4RlFVRkZMRTFCUVc5RE8xRkJRek5GTEUxQlFVMHNTVUZCU1N4SFFVRlhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGFrTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hqUVVGakxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETjBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTJwRExHdEVRVUZyUkR0blFrRkRiRVFzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5zUmp0VFFVTkdPMUZCUTBRc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeERRVUZETzBsQlJVUXNkME5CUVhkRE8wbEJRMnBETEUxQlFVMDdVVUZEV0N4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEzaERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEZGtNc1EwRkJRenRKUVVWRUxESkRRVUV5UXp0SlFVTndReXhIUVVGSExFTkJRVU1zUzBGQmNVSTdVVUZET1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eExRVUZMTEV0QlFVc3NRMEZCUXl4TFFVRkxPMWxCUXpWQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNaMFJCUVdkRUxFbEJRVWtzUTBGQlF5eExRVUZMTEdsQ1FVRnBRaXhMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTTFSeXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndReXhEUVVGRE8wbEJSVVFzTkVOQlFUUkRPMGxCUTNKRExFbEJRVWs3VVVGRFZDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETjBNc1EwRkJRenRKUVVWRUxHMURRVUZ0UXp0SlFVTTFRaXhUUVVGVE8xRkJRMlFzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTFvc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE1VTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVYzdaMEpCUTNKQ0xFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITzJkQ1FVTnlRaXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOMlFqdFJRVU5FTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRGVFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU40UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRE5VWXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdhWE5PYVd4OUlHWnliMjBnSnk0dmRYUnBiSE1uTzF4dVhHNHZLaW9nUkdsemRHRnVZMlVnYldGMGNtbDRJR05zWVhOeklHTnZiWEJoZEdsaWJHVWdkMmwwYUNCa1lYUmhJSE4wY25WamRIVnlaU0J2WmlCelkybHdlUzV6Y0dGMGFXRnNMbVJwYzNSaGJtTmxMbkJrYVhOMElDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1JHbHpkR0Z1WTJWTllYUnlhWGdnZTF4dUlDQmZaR0YwWVRvZ1JteHZZWFF6TWtGeWNtRjVPMXh1SUNCZmMybDZaVG9nYm5WdFltVnlPMXh1WEc0Z0lHZGxkQ0JrWVhSaEtDazZJRVpzYjJGME16SkJjbkpoZVNCN0lISmxkSFZ5YmlCMGFHbHpMbDlrWVhSaE95QjlYRzVjYmlBZ1oyVjBJSE5wZW1Vb0tUb2diblZ0WW1WeUlIc2djbVYwZFhKdUlIUm9hWE11WDNOcGVtVTdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdEdiRzloZERNeVFYSnlZWGw5SUdSaGRHRWdSR2x6ZEdGdVkyVWdaR0YwWVZ4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdjMmw2WlNCT2RXMWlaWElnYjJZZ2IzSnBaMmx1WVd3Z2IySnpaWEoyWVhScGIyNXpYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2loa1lYUmhQem9nUm14dllYUXpNa0Z5Y21GNUxDQnphWHBsUHpvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnYVdZZ0tITnBlbVVnUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvWkdGMFlTQTlQU0IxYm1SbFptbHVaV1FwSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUVhKbmRXMWxiblJ6SUdWeWNtOXlPaUJrWVhSaElHOXlJSE5wZW1VZ2FYTWdjbVZ4ZFdseVpXUXVKeWs3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFZ1BTQmtZWFJoSVR0Y2JpQWdJQ0FnSUhSb2FYTXVYM05wZW1VZ1BTQW9NU0FySUUxaGRHZ3VjM0Z5ZENneElDc2dOQ0FxSURJZ0tpQjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDa3BJQzhnTWp0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5emFYcGxJQ0U5SUUxaGRHZ3VabXh2YjNJb2RHaHBjeTVmYzJsNlpTa3BYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdTVzUyWVd4cFpDQmtZWFJoSUd4bGJtZDBhQ0FrZTNSb2FYTXVYMlJoZEdFdWJHVnVaM1JvZlNCc1pXRmtjeUIwYnlCdWIyNGdhVzUwWldkbGNpQnphWHBsSUNSN2RHaHBjeTVmYzJsNlpYMWdLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmYzJsNlpTQTlJSE5wZW1VN1hHNGdJQ0FnSUNCamIyNXpkQ0JrWVhSaFRHVnVaM1JvT2lCdWRXMWlaWElnUFNCemFYcGxJQ29nS0hOcGVtVWdMU0F4S1NBdklESTdYRzRnSUNBZ0lDQnBaaUFvWkdGMFlTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzVzWlc1bmRHZ2dJVDBnWkdGMFlVeGxibWQwYUNsY2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFbHVkbUZzYVdRZ1pHRjBZU0JzWlc1bmRHZ3VJRTlpYzJWeWRtRjBhVzl1Y3lCemFYcGxJQ1I3YzJsNlpYMGdjbVZ4ZFdseVpYTWdaR0YwWVNCc1pXNW5kR2dnSkh0a1lYUmhUR1Z1WjNSb2ZTNWdLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZaR0YwWVNBOUlHUmhkR0U3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxsOWtZWFJoSUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoa1lYUmhUR1Z1WjNSb0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElGOXNhVzVsWVhKcGVtVkpTaWhwT2lCdWRXMWlaWElzSUdvNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJQ0FnYVdZZ0tDRW9hU0E4SUdvcEtTQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oya2diWFZ6ZENCaVpTQnNaWE56SUhSb1lXNGdhaWNwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emFYcGxJQ29nYVNBcklHb2dMU0JOWVhSb0xtWnNiMjl5S0Nnb2FTQXJJRElwSUNvZ0tHa2dLeUF4S1NrZ0x5QXlLVHRjYmlBZ2ZWeHVYRzRnSUdkbGRDaHBPaUJ1ZFcxaVpYSXNJR282SUc1MWJXSmxjaWtnZTF4dUlDQWdJR2xtSUNocElEMDlJR29wWEc0Z0lDQWdJQ0J5WlhSMWNtNGdNRHRjYmlBZ0lDQmxiSE5sSUdsbUlDaHBJRHdnYWlsY2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWtZWFJoVzNSb2FYTXVYMnhwYm1WaGNtbDZaVWxLS0drc0lHb3BYVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZlpHRjBZVnQwYUdsekxsOXNhVzVsWVhKcGVtVkpTaWhxTENCcEtWMDdYRzRnSUgxY2JseHVJQ0J6WlhRb2FUb2diblZ0WW1WeUxDQnFPaUJ1ZFcxaVpYSXNJSFpoYkhWbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCMGFHbHpMbDlrWVhSaFczUm9hWE11WDJ4cGJtVmhjbWw2WlVsS0tHa3NJR29wWFNBOUlIWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdOaGJHTThWRTlpYWo0b2JHbHpkRG9nU1c1a1pYaGhZbXhsUEZSUFltbytMQ0J0WlhSb2IyUTZJQ2hoT2lCVVQySnFMQ0JpT2lCVVQySnFLU0E5UGlCdWRXMWlaWElwT2lCRWFYTjBZVzVqWlUxaGRISnBlQ0I3WEc0Z0lDQWdZMjl1YzNRZ2MybDZaVG9nYm5WdFltVnlJRDBnYkdsemRDNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ2JtVjNJRVJwYzNSaGJtTmxUV0YwY21sNEtIVnVaR1ZtYVc1bFpDd2djMmw2WlNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCemFYcGxPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwSUNzZ01Uc2dhaUE4SUhOcGVtVTdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJwWmlCaGJua2diMllnZEdobElIWmhiSFZsY3lCcGN5QnVkV3hzTENCelpYUWdaR2x6ZEdGdVkyVWdkRzhnTVZ4dUlDQWdJQ0FnSUNCeVpYTXVjMlYwS0drc0lHb3NJQ0ZwYzA1cGJDaHNhWE4wVzJsZEtTQW1KaUFoYVhOT2FXd29iR2x6ZEZ0cVhTa2dQeUJ0WlhSb2IyUW9iR2x6ZEZ0cFhTd2diR2x6ZEZ0cVhTa2dPaUF4S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxjenRjYmlBZ2ZWeHVYRzRnSUM4dklITnhkV0Z5WlhNZ1pXRmphQ0IyWVd4MVpTQnBiaUJ0WVhSeWFYZ2dhVzRnY0d4aFkyVmNiaUFnY0hWaWJHbGpJSE54ZFdGeVpTZ3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyUmhkR0V1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRDBnZEdocGN5NWZaR0YwWVZ0cFhTQXFLaUF5TzF4dUlDQjlYRzVjYmlBZ0x5OGdZV1JrY3lCaGJtOTBhR1Z5SUcxaGRISnBlQ0IwYnlCMGFHbHpJRzl1WlNCcGJpQndiR0ZqWlZ4dUlDQndkV0pzYVdNZ1lXUmtLRzkwYUdWeU9pQkVhWE4wWVc1alpVMWhkSEpwZUNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5emFYcGxJQ0U5UFNCdmRHaGxjaTVmYzJsNlpTbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1RXRjBjbWxqWlhNZ2JYVnpkQ0JvWVhabElIUm9aU0J6WVcxbElITnBlbVV1SUZSb2FYTWdjMmw2WlRvZ0pIdDBhR2x6TGw5emFYcGxmU3dnYjNSb1pYSWdjMmw2WlRvZ0pIdHZkR2hsY2k1ZmMybDZaWDFnS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVYMlJoZEdFdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMmxkSUNzOUlHOTBhR1Z5TGw5a1lYUmhXMmxkTzF4dUlDQjlYRzVjYmlBZ0x5OGdjM0YxWVhKbElISnZiM1FnWldGamFDQjJZV3gxWlNCcGJpQnRZWFJ5YVhnZ2FXNGdjR3hoWTJWY2JpQWdjSFZpYkdsaklITnhjblFvS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlrWVhSaExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlFMWhkR2d1YzNGeWRDaDBhR2x6TGw5a1lYUmhXMmxkS1R0Y2JpQWdmVnh1WEc0Z0lDOHZibTl5Yldsc2VtVWdaR2x6ZEdGdVkyVWdiV0YwY21sNElHbHVJSEJzWVdObFhHNGdJSEIxWW14cFl5QnViM0p0WVd4cGVtVW9LU0I3WEc0Z0lDQWdiR1YwSUcxcGJpQTlJREE3WEc0Z0lDQWdiR1YwSUcxaGVDQTlJSFJvYVhNdVgyUmhkR0ZiTUYwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlrWVhSaExteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVmWkdGMFlWdHBYU0E4SUcxcGJpbGNiaUFnSUNBZ0lDQWdiV2x1SUQwZ2RHaHBjeTVmWkdGMFlWdHBYVHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbDlrWVhSaFcybGRJRDRnYldGNEtWeHVJQ0FnSUNBZ0lDQnRZWGdnUFNCMGFHbHpMbDlrWVhSaFcybGRPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0J5WVc1blpTQTlJRzFoZUNBdElHMXBianRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyUmhkR0V1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRDBnY21GdVoyVWdQVDA5SURBZ1B5QjBhR2x6TGw5a1lYUmhXMmxkSUMwZ2JXbHVJRG9nS0hSb2FYTXVYMlJoZEdGYmFWMGdMU0J0YVc0cElDOGdLRzFoZUNBdElHMXBiaWs3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUmxlR0ZpYkdVOFZFOWlhajRnZTF4dUlDQmJhVzVrWlhnNklHNTFiV0psY2wwNklGUlBZbW83WEc0Z0lHZGxkQ0JzWlc1bmRHZ29LVG9nYm5WdFltVnlPMXh1ZlZ4dUlsMTkiLCJpbXBvcnQgKiBhcyBmbCBmcm9tICdmYXN0ZXN0LWxldmVuc2h0ZWluJztcbmltcG9ydCB7IGphcm9XaW5rbGVyIH0gZnJvbSAnamFyby13aW5rbGVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgYXN5bW1ldHJpY0Rpc3RhbmNlLCBicmF1bkJsYW5xdWV0RGlzdGFuY2UsIGNvc2luZURpc3RhbmNlLCBkaWNlRGlzdGFuY2UsIGV1Y2xpZGVhbkRpc3RhbmNlLCBoYW1taW5nRGlzdGFuY2UsIGt1bGN6eW5za2lEaXN0YW5jZSwgbWNDb25uYXVnaGV5RGlzdGFuY2UsIHJvZ290R29sZGJlcmdEaXN0YW5jZSwgcnVzc2VsRGlzdGFuY2UsIHNva2FsRGlzdGFuY2UsIHRhbmltb3RvRGlzdGFuY2UsIG51bWVyaWNEaXN0YW5jZSwgdGFuaW1vdG9EaXN0YW5jZUludEFycmF5LCB9IGZyb20gJy4uL2Rpc3RhbmNlLW1ldHJpY3MtbWV0aG9kcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7IG1tRGlzdGFuY2VGdW5jdGlvbnMsIE1tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcyB9IGZyb20gJy4uL21hY3JvbW9sZWN1bGUtZGlzdGFuY2UtZnVuY3Rpb25zJztcbmltcG9ydCB7IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLCBCaXRBcnJheU1ldHJpY3NOYW1lcywgU3RyaW5nTWV0cmljc05hbWVzLCBWZWN0b3JNZXRyaWNzTmFtZXMsIE51bWJlck1ldHJpY3NOYW1lcywgSW50QXJyYXlNZXRyaWNzTmFtZXMgfSBmcm9tICcuL2NvbnN0cyc7XG5leHBvcnQgY29uc3QgdmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dOiBmbC5kaXN0YW5jZSxcbiAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogamFyb1dpbmtsZXIsXG4gICAgW1N0cmluZ01ldHJpY3NOYW1lcy5NYW5oYXR0YW5dOiBtYW5oYXR0YW5EaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b106IHRhbmltb3RvRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdOiBkaWNlRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkFzeW1tZXRyaWNdOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdOiBicmF1bkJsYW5xdWV0RGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkNvc2luZV06IGNvc2luZURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5LdWxjenluc2tpXToga3VsY3p5bnNraURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ106IHJvZ290R29sZGJlcmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXTogcnVzc2VsRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXTogc29rYWxEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuSGFtbWluZ106IGhhbW1pbmdEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuRXVjbGlkZWFuXTogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IGludEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbSW50QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9JbnRBcnJheV06IHRhbmltb3RvRGlzdGFuY2VJbnRBcnJheSxcbn07XG5leHBvcnQgY29uc3QgbnVtYmVyRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV06IG51bWVyaWNEaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuVmVjdG9yXToge1xuICAgICAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IHZlY3RvckRpc3RhbmNlTWV0cmljc01ldGhvZHNbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuU3RyaW5nXToge1xuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkxldmVuc2h0ZWluXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuSmFyb1dpbmtsZXJdLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl06IHN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHNbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuQml0QXJyYXldOiB7XG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b106IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b10sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5EaWNlXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuQXN5bW1ldHJpY106IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5Bc3ltbWV0cmljXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkJyYXVuQmxhbnF1ZXRdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuQnJhdW5CbGFucXVldF0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Db3NpbmVdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuQ29zaW5lXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkt1bGN6eW5za2ldOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuS3VsY3p5bnNraV0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuTWNDb25uYXVnaGV5XSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlJvZ290R29sZGJlcmddOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ10sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5SdXNzZWxdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuUnVzc2VsXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLlNva2FsXSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5NYWNyb01vbGVjdWxlXToge1xuICAgICAgICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkhBTU1JTkddOiBtbURpc3RhbmNlRnVuY3Rpb25zW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5IQU1NSU5HXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5MRVZFTlNIVEVJTl06IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkxFVkVOU0hURUlOXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5ORUVETEVNQU5OX1dVTlNDSF06IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLk5FRURMRU1BTk5fV1VOU0NIXSxcbiAgICAgICAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogbW1EaXN0YW5jZUZ1bmN0aW9uc1tNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuTnVtYmVyXToge1xuICAgICAgICBbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV06IG51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHNbTnVtYmVyTWV0cmljc05hbWVzLk51bWVyaWNEaXN0YW5jZV0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuSW50QXJyYXldOiB7XG4gICAgICAgIFtJbnRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b0ludEFycmF5XTogaW50QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0ludEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvSW50QXJyYXldLFxuICAgIH1cbn07XG5leHBvcnQgY29uc3QgTWV0cmljVG9EYXRhVHlwZSA9IE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpXG4gICAgLnJlZHVjZSgocmV0LCBrZXkpID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2tleV0pKVxuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICByZXR1cm4gcmV0O1xufSwge30pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnU3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpdEFycmF5TWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnQml0QXJyYXknO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnVmVjdG9yJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hY3JvTW9sZWN1bGVNZXRyaWMobmFtZSkge1xuICAgIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09IERpc3RhbmNlTWV0cmljc1N1YmplY3RzLk1hY3JvTW9sZWN1bGUudG9TdHJpbmcoKTtcbn1cbi8qKiBNYW5oYXR0YW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc2VxdWVuY2VzIChtYXRjaCAtIDAsIG1pc21hdGNoIC0gMSkgbm9ybWFsaXplZCBmb3IgbGVuZ3RoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbmhhdHRhbkRpc3RhbmNlKHMxLCBzMikge1xuICAgIGlmIChzMS5sZW5ndGggIT09IHMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBkaXN0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzMS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGRpc3QgKz0gczFbaV0gPT0gczJbaV0gPyAwIDogMTtcbiAgICAgICAgcmV0dXJuIGRpc3QgLyBzMS5sZW5ndGg7XG4gICAgfVxufVxuLyoqIFVuaWZpZWQgY2xhc3MgaW1wbGVtZW50aW5nIGRpZmZlcmVudCBzdHJpbmcgbWVhc3VyZXMuICovXG5leHBvcnQgY2xhc3MgTWVhc3VyZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBNZWFzdXJlIHdpdGggLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgTWV0aG9kIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSBiZXR3ZWVuIHN0cmluZ3MuXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWV0aG9kKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLmRhdGFUeXBlID0gTWV0cmljVG9EYXRhVHlwZVttZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgZnVuY3Rpb24gc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7b3B0c30gb3B0cyBPcHRpb25zIGZvciB0aGUgbWVhc3VyZS4gdXNlZCBmb3IgbWFjcm9tb2xlY3VsZSBkaXN0YW5jZXNcbiAgICAgKiBAcmV0dXJuIHtEaXN0YW5jZU1ldHJpY30gQ2FsbGJhY2sgb2YgdGhlIG1lYXN1cmUgY2hvc2VuLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGdldE1lYXN1cmUob3B0cykge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgaWYgKCFkaWN0Lmhhc093blByb3BlcnR5KHRoaXMuZGF0YVR5cGUpIHx8ICFkaWN0W3RoaXMuZGF0YVR5cGVdLmhhc093blByb3BlcnR5KHRoaXMubWV0aG9kKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtZWFzdXJlICR7dGhpcy5tZXRob2R9IGZvciBkYXRhIHR5cGUgJHt0aGlzLmRhdGFUeXBlfWApO1xuICAgICAgICByZXR1cm4gaXNNYWNyb01vbGVjdWxlTWV0cmljKHRoaXMubWV0aG9kKSA/XG4gICAgICAgICAgICBkaWN0W3RoaXMuZGF0YVR5cGVdW3RoaXMubWV0aG9kXShvcHRzKSA6XG4gICAgICAgICAgICBkaWN0W3RoaXMuZGF0YVR5cGVdW3RoaXMubWV0aG9kXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjdXN0b20gc3RyaW5nIGRpc3RhbmNlIGJ5IHRoZSBnaXZlbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHtBdmFpbGFibGVEYXRhVHlwZXN9IGRhdGFUeXBlIE1ldHJpYydzIGRhdGEgdHlwZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgICovXG4gICAgc3RhdGljIGdldE1ldHJpY0J5RGF0YVR5cGUoZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbZGF0YVR5cGVdKTtcbiAgICB9XG4gICAgLyoqIFJldHVybnMgbWV0cmljIG5hbWVzIGF2YWlsYWJsZS5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1lYXN1cmVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljcyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pXUXRiV1YwY21samN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5SNWNHVmtMVzFsZEhKcFkzTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHhRa0ZCY1VJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkRMRTFCUVUwc2VVSkJRWGxDTEVOQlFVTTdRVUZGY0VRc1QwRkJUeXhGUVVOTUxHdENRVUZyUWl4RlFVTnNRaXh4UWtGQmNVSXNSVUZEY2tJc1kwRkJZeXhGUVVOa0xGbEJRVmtzUlVGRFdpeHBRa0ZCYVVJc1JVRkRha0lzWlVGQlpTeEZRVU5tTEd0Q1FVRnJRaXhGUVVOc1FpeHZRa0ZCYjBJc1JVRkRjRUlzY1VKQlFYRkNMRVZCUTNKQ0xHTkJRV01zUlVGRFpDeGhRVUZoTEVWQlEySXNaMEpCUVdkQ0xFVkJRMmhDTEdWQlFXVXNSVUZEWml4M1FrRkJkMElzUjBGRGVrSXNUVUZCVFN3MlFrRkJOa0lzUTBGQlF6dEJRVVZ5UXl4UFFVRlBMRVZCUVVNc01FSkJRVEJDTEVWQlFVTXNUVUZCVFN4cFJFRkJhVVFzUTBGQlF6dEJRVWN6Uml4UFFVRlBMRVZCUVVNc2JVSkJRVzFDTEVWQlFVVXNkMEpCUVhkQ0xFVkJRVU1zVFVGQlRTeHhRMEZCY1VNc1EwRkJRenRCUVVOc1J5eFBRVUZQTEVWQlFVTXNkVUpCUVhWQ0xFVkJRVVVzYjBKQlFXOUNMRVZCUTI1RUxHdENRVUZyUWl4RlFVRkZMR3RDUVVGclFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHOUNRVUZ2UWl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSM0JITEUxQlFVMHNRMEZCUXl4TlFVRk5MRFJDUVVFMFFpeEhRVUY1UkR0SlFVTm9SeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxEQkNRVUV3UWp0RFFVTXpSQ3hEUVVGRE8wRkJSVVlzVFVGQlRTeERRVUZETEUxQlFVMHNORUpCUVRSQ0xFZEJRWGxFTzBsQlEyaEhMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkU3U1VGRE4wTXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4WFFVRlhPMGxCUXpkRExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzYVVKQlFXbENPME5CUTJ4RUxFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN3NFFrRkJPRUlzUjBGQk5rUTdTVUZEZEVjc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSU3huUWtGQlowSTdTVUZEYWtRc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3haUVVGWk8wbEJRM3BETEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNhMEpCUVd0Q08wbEJRM0pFTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNjVUpCUVhGQ08wbEJRek5FTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNZMEZCWXp0SlFVTTNReXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGRkxHdENRVUZyUWp0SlFVTnlSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxHOUNRVUZ2UWp0SlFVTjZSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVGRkxIRkNRVUZ4UWp0SlFVTXpSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxHTkJRV003U1VGRE4wTXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4aFFVRmhPMGxCUXpORExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzWlVGQlpUdEpRVU12UXl4RFFVRkRMRzlDUVVGdlFpeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMR2xDUVVGcFFqdERRVU53UkN4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzT0VKQlFUaENMRWRCUVcxRk8wbEJRelZITEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1JVRkJSU3gzUWtGQmQwSTdRMEZEYkVVc1EwRkJRenRCUVVWR0xFMUJRVTBzUTBGQlF5eE5RVUZOTERSQ1FVRTBRaXhIUVVGNVJEdEpRVU5vUnl4RFFVRkRMR3RDUVVGclFpeERRVUZETEdWQlFXVXNRMEZCUXl4RlFVRkZMR1ZCUVdVN1EwRkRkRVFzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCUXl4TlFVRk5MR2RDUVVGblFpeEhRVUZITzBsQlF6bENMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVN1VVRkRhRU1zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTdzBRa0ZCTkVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4VFFVRlRMRU5CUVVNN1MwRkRNMFk3U1VGRFJDeERRVUZETEhWQ1FVRjFRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlEyaERMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlF6bEdMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlF6bEdMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVTBGQlV5eERRVUZETzB0QlF6TkdPMGxCUTBRc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOc1F5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVNNVJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOMFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOc1J5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVONFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVNeFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVOc1J5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVOMFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVONFJ5eERRVUZETEc5Q1FVRnZRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVNeFJpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVONlJqdEpRVU5FTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVTdVVUZEZGtNc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4M1FrRkJkMElzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZEZWtZc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4M1FrRkJkMElzUTBGQlF5eFhRVUZYTEVOQlFVTTdVVUZEYWtjc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExIZENRVUYzUWl4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6ZEhMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUlVGQlJTeHRRa0ZCYlVJc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4NVFrRkJlVUlzUTBGQlF6dExRVU01U0R0SlFVTkVMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVN1VVRkRhRU1zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhsUVVGbExFTkJRVU1zUlVGQlJTdzBRa0ZCTkVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4bFFVRmxMRU5CUVVNN1MwRkRka2M3U1VGRFJDeERRVUZETEhWQ1FVRjFRaXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTzFGQlEyeERMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4blFrRkJaMElzUTBGQlF6dExRVU12Unp0RFFVTkdMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeG5Ra0ZCWjBJc1IwRkJjVUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF6dExRVU0xUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGeFFpeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZPMGxCUTNKRExFdEJRVXNzVFVGQlRTeEhRVUZITEVsQlFVa3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRjVRaXhEUVVGRExFTkJRVU03VVVGRGVFVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZGZGtNc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFlpeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRmxWQ3hOUVVGTkxGVkJRVlVzWTBGQll5eERRVUZETEVsQlFXdENPMGxCUXk5RExFOUJRVThzWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETzBGQlF6VkRMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1NVRkJhMEk3U1VGRGFrUXNUMEZCVHl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4VlFVRlZMRU5CUVVNN1FVRkRPVU1zUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4alFVRmpMRU5CUVVNc1NVRkJhMEk3U1VGREwwTXNUMEZCVHl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNN1FVRkROVU1zUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eEpRVUZyUWp0SlFVTjBSQ3hQUVVGUExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxIVkNRVUYxUWl4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dEJRVU53Uml4RFFVRkRPMEZCUlVRc1owZEJRV2RITzBGQlEyaEhMRTFCUVUwc1ZVRkJWU3hwUWtGQmFVSXNRMEZCUXl4RlFVRlZMRVZCUVVVc1JVRkJWVHRKUVVOMFJDeEpRVUZKTEVWQlFVVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJUdFJRVU16UWl4UFFVRlBMRU5CUVVNc1EwRkJRenRMUVVOV08xTkJRVTA3VVVGRFRDeEpRVUZKTEVsQlFVa3NSMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkRja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTJoRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5xUXl4UFFVRlBMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETzB0QlEzcENPMEZCUTBnc1EwRkJRenRCUVVWRUxEUkVRVUUwUkR0QlFVTTFSQ3hOUVVGTkxFOUJRVThzVDBGQlR6dEpRVWxzUWpzN096dFBRVWxITzBsQlEwZ3NXVUZCV1N4TlFVRnZRanRSUVVNNVFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVOeVFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCZFVJc1EwRkJRenRKUVVOcVJTeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU1N4VlFVRlZMRU5CUVVNc1NVRkJWVHRSUVVNeFFpeE5RVUZOTEVsQlFVa3NSMEZGVGl4blFrRkJaMElzUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzFsQlEzcEdMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1EwRkJReXhOUVVGTkxHdENRVUZyUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU51Uml4UFFVRlBMSEZDUVVGeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM2hETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCY1VNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJiVUlzUTBGQlF6dEpRVU4yUkN4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTU3hOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1VVRkJORUk3VVVGRE5VUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXp0SlFVVkVPenRQUVVWSE8wbEJRMGdzVFVGQlRTeExRVUZMTEdsQ1FVRnBRanRSUVVNeFFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0SlFVTjJReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm1iQ0JtY205dElDZG1ZWE4wWlhOMExXeGxkbVZ1YzJoMFpXbHVKenRjYm1sdGNHOXlkQ0I3YW1GeWIxZHBibXRzWlhKOUlHWnliMjBnSjJwaGNtOHRkMmx1YTJ4bGNpMTBlWEJsYzJOeWFYQjBKenRjYm1sdGNHOXlkQ0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1I1Y0dVdFpHVmpiR0Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3WEc0Z0lHRnplVzF0WlhSeWFXTkVhWE4wWVc1alpTeGNiaUFnWW5KaGRXNUNiR0Z1Y1hWbGRFUnBjM1JoYm1ObExGeHVJQ0JqYjNOcGJtVkVhWE4wWVc1alpTeGNiaUFnWkdsalpVUnBjM1JoYm1ObExGeHVJQ0JsZFdOc2FXUmxZVzVFYVhOMFlXNWpaU3hjYmlBZ2FHRnRiV2x1WjBScGMzUmhibU5sTEZ4dUlDQnJkV3hqZW5sdWMydHBSR2x6ZEdGdVkyVXNYRzRnSUcxalEyOXVibUYxWjJobGVVUnBjM1JoYm1ObExGeHVJQ0J5YjJkdmRFZHZiR1JpWlhKblJHbHpkR0Z1WTJVc1hHNGdJSEoxYzNObGJFUnBjM1JoYm1ObExGeHVJQ0J6YjJ0aGJFUnBjM1JoYm1ObExGeHVJQ0IwWVc1cGJXOTBiMFJwYzNSaGJtTmxMRnh1SUNCdWRXMWxjbWxqUkdsemRHRnVZMlVzWEc0Z0lIUmhibWx0YjNSdlJHbHpkR0Z1WTJWSmJuUkJjbkpoZVN4Y2JuMGdabkp2YlNBbkxpNHZaR2x6ZEdGdVkyVXRiV1YwY21samN5MXRaWFJvYjJSekp6dGNibHh1YVcxd2IzSjBJSHRqWVd4amRXeGhkR1ZGZFdOc2FXUmxZVzVFYVhOMFlXNWpaWDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZG1WamRHOXlMVzl3WlhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUVKcGRFRnljbUY1SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDJKcGRDMWhjbkpoZVNjN1hHNXBiWEJ2Y25RZ2UxWmxZM1J2Y2l3Z1UzUnlhVzVuUkdsamRHbHZibUZ5ZVgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdHRiVVJwYzNSaGJtTmxSblZ1WTNScGIyNXpMQ0JOYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTjlJR1p5YjIwZ0p5NHVMMjFoWTNKdmJXOXNaV04xYkdVdFpHbHpkR0Z1WTJVdFpuVnVZM1JwYjI1ekp6dGNibWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNc0lFSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMRnh1SUNCVGRISnBibWROWlhSeWFXTnpUbUZ0WlhNc0lGWmxZM1J2Y2sxbGRISnBZM05PWVcxbGN5d2dUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpMQ0JKYm5SQmNuSmhlVTFsZEhKcFkzTk9ZVzFsYzMwZ1puSnZiU0FuTGk5amIyNXpkSE1uTzF4dVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCMlpXTjBiM0pFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSek9pQjdJRnR1WVcxbE9pQnpkSEpwYm1kZE9pQW9lRG9nVm1WamRHOXlMQ0I1T2lCV1pXTjBiM0lwSUQwK0lHNTFiV0psY2lCOUlEMGdlMXh1SUNCYlZtVmpkRzl5VFdWMGNtbGpjMDVoYldWekxrVjFZMnhwWkdWaGJsMDZJR05oYkdOMWJHRjBaVVYxWTJ4cFpHVmhia1JwYzNSaGJtTmxMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhOMGNtbHVaMFJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhNNklIc2dXMjVoYldVNklITjBjbWx1WjEwNklDaDRPaUJ6ZEhKcGJtY3NJSGs2SUhOMGNtbHVaeWtnUFQ0Z2JuVnRZbVZ5SUgwZ1BTQjdYRzRnSUZ0VGRISnBibWROWlhSeWFXTnpUbUZ0WlhNdVRHVjJaVzV6YUhSbGFXNWRPaUJtYkM1a2FYTjBZVzVqWlN4Y2JpQWdXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVLWVhKdlYybHVhMnhsY2wwNklHcGhjbTlYYVc1cmJHVnlMRnh1SUNCYlUzUnlhVzVuVFdWMGNtbGpjMDVoYldWekxrMWhibWhoZEhSaGJsMDZJRzFoYm1oaGRIUmhia1JwYzNSaGJtTmxMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2N6b2dleUJiYm1GdFpUb2djM1J5YVc1blhUb2dLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTa2dQVDRnYm5WdFltVnlJSDBnUFNCN1hHNGdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjEwNklIUmhibWx0YjNSdlJHbHpkR0Z1WTJVc1hHNGdJRnRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1RWFXTmxYVG9nWkdsalpVUnBjM1JoYm1ObExGeHVJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVFYTjViVzFsZEhKcFkxMDZJR0Z6ZVcxdFpYUnlhV05FYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa0p5WVhWdVFteGhibkYxWlhSZE9pQmljbUYxYmtKc1lXNXhkV1YwUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVEYjNOcGJtVmRPaUJqYjNOcGJtVkVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrdDFiR042ZVc1emEybGRPaUJyZFd4amVubHVjMnRwUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVOWTBOdmJtNWhkV2RvWlhsZE9pQnRZME52Ym01aGRXZG9aWGxFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbEp2WjI5MFIyOXNaR0psY21kZE9pQnliMmR2ZEVkdmJHUmlaWEpuUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVTZFhOelpXeGRPaUJ5ZFhOelpXeEVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsTnZhMkZzWFRvZ2MyOXJZV3hFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa2hoYlcxcGJtZGRPaUJvWVcxdGFXNW5SR2x6ZEdGdVkyVXNYRzRnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NUZkV05zYVdSbFlXNWRPaUJsZFdOc2FXUmxZVzVFYVhOMFlXNWpaU3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCcGJuUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITTZJSHNnVzI1aGJXVTZJSE4wY21sdVoxMDZJQ2g0T2lCVmFXNTBNekpCY25KaGVTd2dlVG9nVldsdWRETXlRWEp5WVhrcElEMCtJRzUxYldKbGNpQjlJRDBnZTF4dUlDQmJTVzUwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VkdGdWFXMXZkRzlKYm5SQmNuSmhlVjA2SUhSaGJtbHRiM1J2UkdsemRHRnVZMlZKYm5SQmNuSmhlU3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCdWRXMWlaWEpFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSek9pQjdJRnR1WVcxbE9pQnpkSEpwYm1kZE9pQW9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lCOUlEMGdlMXh1SUNCYlRuVnRZbVZ5VFdWMGNtbGpjMDVoYldWekxrNTFiV1Z5YVdORWFYTjBZVzVqWlYwNklHNTFiV1Z5YVdORWFYTjBZVzVqWlN4Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11Vm1WamRHOXlYVG9nZTF4dUlDQWdJRnRXWldOMGIzSk5aWFJ5YVdOelRtRnRaWE11UlhWamJHbGtaV0Z1WFRvZ2RtVmpkRzl5UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFdaV04wYjNKTlpYUnlhV056VG1GdFpYTXVSWFZqYkdsa1pXRnVYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbE4wY21sdVoxMDZJSHRjYmlBZ0lDQmJVM1J5YVc1blRXVjBjbWxqYzA1aGJXVnpMa3hsZG1WdWMyaDBaV2x1WFRvZ2MzUnlhVzVuUkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVUR1YyWlc1emFIUmxhVzVkTEZ4dUlDQWdJRnRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11U21GeWIxZHBibXRzWlhKZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVLWVhKdlYybHVhMnhsY2wwc1hHNGdJQ0FnVzFOMGNtbHVaMDFsZEhKcFkzTk9ZVzFsY3k1TllXNW9ZWFIwWVc1ZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVOWVc1b1lYUjBZVzVkTEZ4dUlDQjlMRnh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11UW1sMFFYSnlZWGxkT2lCN1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsUmhibWx0YjNSdlhUb2dZbWwwUVhKeVlYbEVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6VzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsUmhibWx0YjNSdlhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVSR2xqWlYwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1RWFXTmxYU3hjYmlBZ0lDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UVhONWJXMWxkSEpwWTEwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1QmMzbHRiV1YwY21salhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVRbkpoZFc1Q2JHRnVjWFZsZEYwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1Q2NtRjFia0pzWVc1eGRXVjBYU3hjYmlBZ0lDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UTI5emFXNWxYVG9nWW1sMFFYSnlZWGxFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa052YzJsdVpWMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa3QxYkdONmVXNXphMmxkT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UzNWc1kzcDVibk5yYVYwc1hHNGdJQ0FnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrMWpRMjl1Ym1GMVoyaGxlVjA2SUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVOWTBOdmJtNWhkV2RvWlhsZExGeHVJQ0FnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NVNiMmR2ZEVkdmJHUmlaWEpuWFRvZ1ltbDBRWEp5WVhsRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGxKdloyOTBSMjlzWkdKbGNtZGRMRnh1SUNBZ0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVTZFhOelpXeGRPaUJpYVhSQmNuSmhlVVJwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhOYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVblZ6YzJWc1hTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVMjlyWVd4ZE9pQmlhWFJCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVUyOXJZV3hkTEZ4dUlDQjlMRnh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11VFdGamNtOU5iMnhsWTNWc1pWMDZJSHNnTHk4Z2IzQjBhVzl1WVd3Z1lYSm5jeUJ1WldWa1pXUWdabTl5SUcxaFkzSnZiVzlzWldOMWJHVWdablZ1WTNScGIyNXpJSGRvYVdOb0lHbHVhWFJwWVd4cGVtVWdkR2hsYlZ4dUlDQWdJRnROYlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VG1GdFpYTXVTRUZOVFVsT1IxMDZJRzF0UkdsemRHRnVZMlZHZFc1amRHbHZibk5iVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMa2hCVFUxSlRrZGRMRnh1SUNBZ0lGdE5iVVJwYzNSaGJtTmxSblZ1WTNScGIyNXpUbUZ0WlhNdVRFVldSVTVUU0ZSRlNVNWRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVNUlZaRlRsTklWRVZKVGwwc1hHNGdJQ0FnVzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVPUlVWRVRFVk5RVTVPWDFkVlRsTkRTRjA2SUcxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OYlRXMUVhWE4wWVc1alpVWjFibU4wYVc5dWMwNWhiV1Z6TGs1RlJVUk1SVTFCVGs1ZlYxVk9VME5JWFN4Y2JpQWdJQ0JiVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMazFQVGs5TlJWSmZRMGhGVFVsRFFVeGZSRWxUVkVGT1EwVmRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVOVDA1UFRVVlNYME5JUlUxSlEwRk1YMFJKVTFSQlRrTkZYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMazUxYldKbGNsMDZJSHRjYmlBZ0lDQmJUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpMazUxYldWeWFXTkVhWE4wWVc1alpWMDZJRzUxYldKbGNrUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iVG5WdFltVnlUV1YwY21samMwNWhiV1Z6TGs1MWJXVnlhV05FYVhOMFlXNWpaVjBzWEc0Z0lIMHNYRzRnSUZ0RWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeTVKYm5SQmNuSmhlVjA2SUh0Y2JpQWdJQ0JiU1c1MFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVZHRnVhVzF2ZEc5SmJuUkJjbkpoZVYwNklHbHVkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRKYm5SQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1VVlXNXBiVzkwYjBsdWRFRnljbUY1WFN4Y2JpQWdmVnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxbGRISnBZMVJ2UkdGMFlWUjVjR1U2SUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektWeHVJQ0F1Y21Wa2RXTmxLQ2h5WlhRNklGTjBjbWx1WjBScFkzUnBiMjVoY25rc0lHdGxlU2tnUFQ0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RtRnNJRzltSUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYmEyVjVJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwcEtWeHVJQ0FnSUNBZ2NtVjBXM1poYkNCaGN5QkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTmRJRDBnYTJWNU8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhKbGREdGNiaUFnZlN3Z2UzMHBPMXh1WEc1bGVIQnZjblFnZEhsd1pTQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqY3p0Y2JtVjRjRzl5ZENCMGVYQmxJRlpsWTNSdmNrMWxkSEpwWTNNZ1BTQnJaWGx2WmlCMGVYQmxiMllnUVhaaGFXeGhZbXhsVFdWMGNtbGpjMXRFYVhOMFlXNWpaVTFsZEhKcFkzTlRkV0pxWldOMGN5NVdaV04wYjNKZE8xeHVaWGh3YjNKMElIUjVjR1VnVTNSeWFXNW5UV1YwY21samN5QTlJR3RsZVc5bUlIUjVjR1Z2WmlCQmRtRnBiR0ZpYkdWTlpYUnlhV056VzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbE4wY21sdVoxMDdYRzVsZUhCdmNuUWdkSGx3WlNCQ2FYUkJjbkpoZVUxbGRISnBZM01nUFNCclpYbHZaaUIwZVhCbGIyWWdRWFpoYVd4aFlteGxUV1YwY21samMxdEVhWE4wWVc1alpVMWxkSEpwWTNOVGRXSnFaV04wY3k1Q2FYUkJjbkpoZVYwN1hHNWxlSEJ2Y25RZ2RIbHdaU0JMYm05M2JrMWxkSEpwWTNNZ1BTQlRkSEpwYm1kTlpYUnlhV056SUh3Z1FtbDBRWEp5WVhsTlpYUnlhV056SUh3Z1ZtVmpkRzl5VFdWMGNtbGpjeUI4WEc0Z0lFMXRSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTk9ZVzFsY3lCOElFNTFiV0psY2sxbGRISnBZM05PWVcxbGN5QjhJRWx1ZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JXWVd4cFpGUjVjR1Z6SUQxY2JpQWdleUJrWVhSaE9pQnpkSEpwYm1kYlhTd2diV1YwY21sak9pQlRkSEpwYm1kTlpYUnlhV056SUh3Z1RXMUVhWE4wWVc1alpVWjFibU4wYVc5dWMwNWhiV1Z6SUgwZ2ZGeHVJQ0I3SUdSaGRHRTZJRlpsWTNSdmNsdGRMQ0J0WlhSeWFXTTZJRlpsWTNSdmNrMWxkSEpwWTNNZ2ZTQjhYRzRnSUhzZ1pHRjBZVG9nUW1sMFFYSnlZWGxiWFN3Z2JXVjBjbWxqT2lCQ2FYUkJjbkpoZVUxbGRISnBZM01nZlNCOFhHNGdJSHNnWkdGMFlUb2diblZ0WW1WeVcxMHNJRzFsZEhKcFl6b2dUblZ0WW1WeVRXVjBjbWxqYzA1aGJXVnpJSDA3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMxTjBjbWx1WjAxbGRISnBZeWh1WVcxbE9pQkxibTkzYmsxbGRISnBZM01wSUh0Y2JpQWdjbVYwZFhKdUlFMWxkSEpwWTFSdlJHRjBZVlI1Y0dWYmJtRnRaVjBnUFQwZ0oxTjBjbWx1WnljN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzBKcGRFRnljbUY1VFdWMGNtbGpLRzVoYldVNklFdHViM2R1VFdWMGNtbGpjeWtnZTF4dUlDQnlaWFIxY200Z1RXVjBjbWxqVkc5RVlYUmhWSGx3WlZ0dVlXMWxYU0E5UFNBblFtbDBRWEp5WVhrbk8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOV1pXTjBiM0pOWlhSeWFXTW9ibUZ0WlRvZ1MyNXZkMjVOWlhSeWFXTnpLU0I3WEc0Z0lISmxkSFZ5YmlCTlpYUnlhV05VYjBSaGRHRlVlWEJsVzI1aGJXVmRJRDA5SUNkV1pXTjBiM0luTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5OWVdOeWIwMXZiR1ZqZFd4bFRXVjBjbWxqS0c1aGJXVTZJRXR1YjNkdVRXVjBjbWxqY3lrZ2UxeHVJQ0J5WlhSMWNtNGdUV1YwY21salZHOUVZWFJoVkhsd1pWdHVZVzFsWFNBOVBTQkVhWE4wWVc1alpVMWxkSEpwWTNOVGRXSnFaV04wY3k1TllXTnliMDF2YkdWamRXeGxMblJ2VTNSeWFXNW5LQ2s3WEc1OVhHNWNiaThxS2lCTllXNW9ZWFIwWVc0Z1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmlCMGQyOGdjMlZ4ZFdWdVkyVnpJQ2h0WVhSamFDQXRJREFzSUcxcGMyMWhkR05vSUMwZ01Ta2dibTl5YldGc2FYcGxaQ0JtYjNJZ2JHVnVaM1JvTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWhibWhoZEhSaGJrUnBjM1JoYm1ObEtITXhPaUJ6ZEhKcGJtY3NJSE15T2lCemRISnBibWNwT2lCdWRXMWlaWElnZTF4dUlDQnBaaUFvY3pFdWJHVnVaM1JvSUNFOVBTQnpNaTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z01UdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnNaWFFnWkdsemREb2diblZ0WW1WeUlEMGdNRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTVRzZ2FTQThJSE14TG14bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ1pHbHpkQ0FyUFNCek1WdHBYU0E5UFNCek1sdHBYU0EvSURBZ09pQXhPMXh1SUNBZ0lISmxkSFZ5YmlCa2FYTjBJQzhnY3pFdWJHVnVaM1JvTzF4dUlDQjlYRzU5WEc1Y2JpOHFLaUJWYm1sbWFXVmtJR05zWVhOeklHbHRjR3hsYldWdWRHbHVaeUJrYVdabVpYSmxiblFnYzNSeWFXNW5JRzFsWVhOMWNtVnpMaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRTFsWVhOMWNtVWdlMXh1SUNCd2NtOTBaV04wWldRZ2JXVjBhRzlrT2lCTGJtOTNiazFsZEhKcFkzTTdYRzRnSUhCeWIzUmxZM1JsWkNCa1lYUmhWSGx3WlRvZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWek8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRTFsWVhOMWNtVWdkMmwwYUNBdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WlhSb2IyUWdUV1YwYUc5a0lIUnZJR05oYkdOMWJHRjBaU0JrYVhOMFlXNWpaU0JpWlhSM1pXVnVJSE4wY21sdVozTXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYldWMGFHOWtPaUJMYm05M2JrMWxkSEpwWTNNcElIdGNiaUFnSUNCMGFHbHpMbTFsZEdodlpDQTlJRzFsZEdodlpEdGNiaUFnSUNCMGFHbHpMbVJoZEdGVWVYQmxJRDBnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR0WlhSb2IyUmRJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHTjFjM1J2YlNCemRISnBibWNnWkdsemRHRnVZMlVnWm5WdVkzUnBiMjRnYzNCbFkybG1hV1ZrTGx4dUlDQWdLaUJBY0dGeVlXMGdlMjl3ZEhOOUlHOXdkSE1nVDNCMGFXOXVjeUJtYjNJZ2RHaGxJRzFsWVhOMWNtVXVJSFZ6WldRZ1ptOXlJRzFoWTNKdmJXOXNaV04xYkdVZ1pHbHpkR0Z1WTJWelhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBScGMzUmhibU5sVFdWMGNtbGpmU0JEWVd4c1ltRmpheUJ2WmlCMGFHVWdiV1ZoYzNWeVpTQmphRzl6Wlc0dVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUdkbGRFMWxZWE4xY21Vb2IzQjBjejg2SUdGdWVTazZJRVJwYzNSaGJtTmxUV1YwY21saklIdGNiaUFnSUNCamIyNXpkQ0JrYVdOME9pQjdJRnRyWlhrNklITjBjbWx1WjEwNlhHNGdJQ0FnSUNCN1cydGxlVEk2SUhOMGNtbHVaMTA2SUVScGMzUmhibU5sVFdWMGNtbGpJSHdnS0NodmNIUnpPaUJoYm5rcElEMCtJRVJwYzNSaGJtTmxUV1YwY21saktYMWNiaUFnSUNCOUlEMGdRWFpoYVd4aFlteGxUV1YwY21samN6dGNiaUFnSUNCcFppQW9JV1JwWTNRdWFHRnpUM2R1VUhKdmNHVnlkSGtvZEdocGN5NWtZWFJoVkhsd1pTa2dmSHdnSVdScFkzUmJkR2hwY3k1a1lYUmhWSGx3WlYwdWFHRnpUM2R1VUhKdmNHVnlkSGtvZEdocGN5NXRaWFJvYjJRcEtWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCVmJtdHViM2R1SUcxbFlYTjFjbVVnSkh0MGFHbHpMbTFsZEdodlpIMGdabTl5SUdSaGRHRWdkSGx3WlNBa2UzUm9hWE11WkdGMFlWUjVjR1Y5WUNrN1hHNGdJQ0FnY21WMGRYSnVJR2x6VFdGamNtOU5iMnhsWTNWc1pVMWxkSEpwWXloMGFHbHpMbTFsZEdodlpDa2dQMXh1SUNBZ0lDQWdLR1JwWTNSYmRHaHBjeTVrWVhSaFZIbHdaVjFiZEdocGN5NXRaWFJvYjJSZElHRnpJQ2dvYjNCMGN6b2dZVzU1S1NBOVBpQkVhWE4wWVc1alpVMWxkSEpwWXlrcEtHOXdkSE1wSURwY2JpQWdJQ0FnSUdScFkzUmJkR2hwY3k1a1lYUmhWSGx3WlYxYmRHaHBjeTV0WlhSb2IyUmRJR0Z6SUVScGMzUmhibU5sVFdWMGNtbGpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWTNWemRHOXRJSE4wY21sdVp5QmthWE4wWVc1alpTQmllU0IwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlMEYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMzBnWkdGMFlWUjVjR1VnVFdWMGNtbGpKM01nWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVoxdGRmU0JOWlhSeWFXTWdibUZ0WlhNZ2QyaHBZMmdnWlhod1pXTjBjeUIwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJOWldGemRYSmxjbHh1SUNBZ0tpOWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJOWlhSeWFXTkNlVVJoZEdGVWVYQmxLR1JoZEdGVWVYQmxPaUJCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE1wT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM05iWkdGMFlWUjVjR1ZkS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJTWlhSMWNtNXpJRzFsZEhKcFl5QnVZVzFsY3lCaGRtRnBiR0ZpYkdVdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQmhkbUZwYkdGaWJHVk5aV0Z6ZFhKbGN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLRUYyWVdsc1lXSnNaVTFsZEhKcFkzTXBPMXh1SUNCOVhHNTlYRzRpWFgwPSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgRGlzdGFuY2VNYXRyaXggfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgnO1xuaW1wb3J0IHsgc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MnO1xuY29uc3QgY3R4ID0gc2VsZjtcbmN0eC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YTogeyBwZXB0aWRlc0xpc3QsIG1ldHJpYyB9IH0pID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkbSA9IERpc3RhbmNlTWF0cml4LmNhbGMocGVwdGlkZXNMaXN0LCAoYSwgYikgPT4gc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1ttZXRyaWNdKGEsIGIpKTtcbiAgICAgICAgZGF0YS5kaXN0YW5jZXMgPSBkbS5kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhLmVycm9yID0gZTtcbiAgICB9XG4gICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhKTtcbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHbHpkR0Z1WTJVdGJXRjBjbWw0TG5kdmNtdGxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltUnBjM1JoYm1ObExXMWhkSEpwZUM1M2IzSnJaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4RlFVRkRMR05CUVdNc1JVRkJReXhOUVVGTkxEUkRRVUUwUXl4RFFVRkRPMEZCUXpGRkxFOUJRVThzUlVGQlF5dzBRa0ZCTkVJc1JVRkJReXhOUVVGTkxEQkRRVUV3UXl4RFFVRkRPMEZCUlhSR0xFMUJRVTBzUjBGQlJ5eEhRVUZYTEVsQlFWY3NRMEZCUXp0QlFVVm9ReXhIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUXl4WlFVRlpMRVZCUVVVc1RVRkJUU3hGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZGTzBsQlEzWkZMRTFCUVUwc1NVRkJTU3hIUVVFMFF5eEZRVUZGTEVOQlFVTTdTVUZEZWtRc1NVRkJTVHRSUVVOR0xFMUJRVTBzUlVGQlJTeEhRVUZITEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVONlF5eERRVUZETEVOQlFWTXNSVUZCUlN4RFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExEUkNRVUUwUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRMUVVNeFFqdEpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMUZCUTFZc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYUVJN1NVRkRSQ3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNwQ0xFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMFJwYzNSaGJtTmxUV0YwY21sNGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMXNMM055WXk5a2FYTjBZVzVqWlMxdFlYUnlhWGduTzF4dWFXMXdiM0owSUh0emRISnBibWRFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSemZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMXNMM055WXk5MGVYQmxaQzF0WlhSeWFXTnpKenRjYmx4dVkyOXVjM1FnWTNSNE9pQlhiM0pyWlhJZ1BTQnpaV3htSUdGeklHRnVlVHRjYmx4dVkzUjRMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMjFsYzNOaFoyVW5MQ0JoYzNsdVl5QW9lMlJoZEdFNklIdHdaWEIwYVdSbGMweHBjM1FzSUcxbGRISnBZMzE5S1NBOVBpQjdYRzRnSUdOdmJuTjBJR1JoZEdFNklIdGxjbkp2Y2o4NklHRnVlU3dnWkdsemRHRnVZMlZ6UHpvZ1JteHZZWFF6TWtGeWNtRjVmU0E5SUh0OU8xeHVJQ0IwY25rZ2UxeHVJQ0FnSUdOdmJuTjBJR1J0SUQwZ1JHbHpkR0Z1WTJWTllYUnlhWGd1WTJGc1l5aHdaWEIwYVdSbGMweHBjM1FzWEc0Z0lDQWdJQ0FvWVRvZ2MzUnlhVzVuTENCaU9pQnpkSEpwYm1jcElEMCtJSE4wY21sdVowUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iYldWMGNtbGpYU2hoTENCaUtTazdYRzRnSUNBZ1pHRjBZUzVrYVhOMFlXNWpaWE1nUFNCa2JTNWtZWFJoTzF4dUlDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdaR0YwWVM1bGNuSnZjaUE5SUdVN1hHNGdJSDFjYmlBZ2MyVnNaaTV3YjNOMFRXVnpjMkZuWlNoa1lYUmhLVHRjYm4wcE8xeHVJbDE5IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4vLyB0aGUgc3RhcnR1cCBmdW5jdGlvblxuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcblx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG5cdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzkzMiw4MzFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg5MjA5KSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQyMDk6IDFcbn07XG5cbi8vIGltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZ1xudmFyIGluc3RhbGxDaHVuayA9IChkYXRhKSA9PiB7XG5cdHZhciBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHR9XG5cdH1cblx0aWYocnVudGltZSkgcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0d2hpbGUoY2h1bmtJZHMubGVuZ3RoKVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkcy5wb3AoKV0gPSAxO1xuXHRwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaSA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHQvLyBcIjFcIiBpcyB0aGUgc2lnbmFsIGZvciBcImFscmVhZHkgbG9hZGVkXCJcblx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRpbXBvcnRTY3JpcHRzKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua3BlcHRpZGVzXCJdID0gc2VsZltcIndlYnBhY2tDaHVua3BlcHRpZGVzXCJdIHx8IFtdO1xudmFyIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uID0gY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSBpbnN0YWxsQ2h1bms7XG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiLCIvLyBydW4gc3RhcnR1cFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLngoKTtcbiJdLCJuYW1lcyI6WyJkZWZlcnJlZCIsIm5leHQiLCJEaXN0YW5jZU1hdHJpeCIsImRhdGEiLCJ0aGlzIiwiX2RhdGEiLCJzaXplIiwiX3NpemUiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsIkVycm9yIiwiTWF0aCIsInNxcnQiLCJsZW5ndGgiLCJmbG9vciIsImRhdGFMZW5ndGgiLCJGbG9hdDMyQXJyYXkiLCJfbGluZWFyaXplSUoiLCJpIiwiaiIsImdldCIsInNldCIsInZhbHVlIiwiY2FsYyIsImxpc3QiLCJtZXRob2QiLCJyZXMiLCJzcXVhcmUiLCJhZGQiLCJvdGhlciIsIm5vcm1hbGl6ZSIsIm1pbiIsIm1heCIsInJhbmdlIiwidmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyIsIkV1Y2xpZGVhbiIsInN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJMZXZlbnNodGVpbiIsIkphcm9XaW5rbGVyIiwiTWFuaGF0dGFuIiwiczEiLCJzMiIsImRpc3QiLCJiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJUYW5pbW90byIsIkRpY2UiLCJBc3ltbWV0cmljIiwiQnJhdW5CbGFucXVldCIsIkNvc2luZSIsIkt1bGN6eW5za2kiLCJNY0Nvbm5hdWdoZXkiLCJSb2dvdEdvbGRiZXJnIiwiUnVzc2VsIiwiU29rYWwiLCJIYW1taW5nIiwiaW50QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwiVGFuaW1vdG9JbnRBcnJheSIsIm51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJOdW1lcmljRGlzdGFuY2UiLCJBdmFpbGFibGVNZXRyaWNzIiwiVmVjdG9yIiwiU3RyaW5nIiwiQml0QXJyYXkiLCJNYWNyb01vbGVjdWxlIiwiSEFNTUlORyIsIkxFVkVOU0hURUlOIiwiTkVFRExFTUFOTl9XVU5TQ0giLCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFIiwiTnVtYmVyIiwiSW50QXJyYXkiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV0Iiwia2V5IiwidmFsIiwic2VsZiIsImFkZEV2ZW50TGlzdGVuZXIiLCJwZXB0aWRlc0xpc3QiLCJtZXRyaWMiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImRtIiwiYSIsImIiLCJkaXN0YW5jZXMiLCJlIiwiZXJyb3IiLCJwb3N0TWVzc2FnZSIsIlAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJleHBvcnRzIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJ4IiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIk8iLCJjaHVua0lkcyIsImZuIiwicHJpb3JpdHkiLCJub3RGdWxmaWxsZWQiLCJJbmZpbml0eSIsImV2ZXJ5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImYiLCJjaHVua0lkIiwiYWxsIiwicHJvbWlzZXMiLCJ1IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZXBsYWNlIiwicCIsImluc3RhbGxlZENodW5rcyIsImNodW5rTG9hZGluZ0dsb2JhbCIsInBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uIiwicHVzaCIsImJpbmQiLCJtb3JlTW9kdWxlcyIsInJ1bnRpbWUiLCJwb3AiXSwic291cmNlUm9vdCI6IiJ9
|