@pie-lib/math-input-mathlive 1.1.5-beta.10 → 1.1.5-beta.12

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.
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
7
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
8
+ var _input = _interopRequireDefault(require("../mf/input"));
9
+ var _selection = require("../selection");
10
+ /**
11
+ * The editable Input keeps its selection snapped to whole atoms (see
12
+ * selection.js). This checks the wiring: attached on mount, removed on unmount.
13
+ */
14
+ jest.mock('../mathlive-instance', function () {
15
+ var FakeMathfieldElement = /*#__PURE__*/(0, _createClass2["default"])(function FakeMathfieldElement() {
16
+ (0, _classCallCheck2["default"])(this, FakeMathfieldElement);
17
+ var el = global.document.createElement('math-field');
18
+ el.value = '';
19
+ el.getValue = function () {
20
+ return el.value;
21
+ };
22
+ return el;
23
+ });
24
+ return {
25
+ loadMathLive: function loadMathLive() {
26
+ return Promise.resolve({
27
+ MathfieldElement: FakeMathfieldElement
28
+ });
29
+ },
30
+ getMacros: function getMacros() {
31
+ return {};
32
+ },
33
+ MATH_MODE_SPACE: '\\ ',
34
+ applyShadowStyles: function applyShadowStyles() {},
35
+ trackPlaceholderCaret: function trackPlaceholderCaret() {
36
+ return function () {};
37
+ },
38
+ latexToMarkup: function latexToMarkup(l) {
39
+ return "<span>".concat(l, "</span>");
40
+ }
41
+ };
42
+ });
43
+ var mockUntrack = jest.fn();
44
+ jest.mock('../selection', function () {
45
+ return {
46
+ trackWholeAtomSelection: jest.fn(function () {
47
+ return mockUntrack;
48
+ })
49
+ };
50
+ });
51
+
52
+ // eslint-disable-next-line import/first
53
+
54
+ // eslint-disable-next-line import/first
55
+
56
+ describe('Input: whole-atom selection', function () {
57
+ beforeEach(function () {
58
+ _selection.trackWholeAtomSelection.mockClear();
59
+ mockUntrack.mockClear();
60
+ });
61
+ it('attaches the tracker to the mathfield on mount', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
62
+ var input;
63
+ return _regenerator["default"].wrap(function (_context) {
64
+ while (1) switch (_context.prev = _context.next) {
65
+ case 0:
66
+ input = new _input["default"]({});
67
+ input.holderRef = {
68
+ current: document.createElement('span')
69
+ };
70
+ _context.next = 1;
71
+ return input.componentDidMount();
72
+ case 1:
73
+ expect(_selection.trackWholeAtomSelection).toHaveBeenCalledTimes(1);
74
+ expect(_selection.trackWholeAtomSelection).toHaveBeenCalledWith(input.mathField);
75
+ case 2:
76
+ case "end":
77
+ return _context.stop();
78
+ }
79
+ }, _callee);
80
+ })));
81
+ it('removes it on unmount', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
82
+ var input;
83
+ return _regenerator["default"].wrap(function (_context2) {
84
+ while (1) switch (_context2.prev = _context2.next) {
85
+ case 0:
86
+ input = new _input["default"]({});
87
+ input.holderRef = {
88
+ current: document.createElement('span')
89
+ };
90
+ _context2.next = 1;
91
+ return input.componentDidMount();
92
+ case 1:
93
+ input.componentWillUnmount();
94
+ expect(mockUntrack).toHaveBeenCalledTimes(1);
95
+ expect(input.untrackSelection).toBeUndefined();
96
+ case 2:
97
+ case "end":
98
+ return _context2.stop();
99
+ }
100
+ }, _callee2);
101
+ })));
102
+ });
103
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5wdXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZWxlY3Rpb24iLCJqZXN0IiwibW9jayIsIkZha2VNYXRoZmllbGRFbGVtZW50IiwiX2NyZWF0ZUNsYXNzMiIsIl9jbGFzc0NhbGxDaGVjazIiLCJlbCIsImdsb2JhbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJsb2FkTWF0aExpdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1hdGhmaWVsZEVsZW1lbnQiLCJnZXRNYWNyb3MiLCJNQVRIX01PREVfU1BBQ0UiLCJhcHBseVNoYWRvd1N0eWxlcyIsInRyYWNrUGxhY2Vob2xkZXJDYXJldCIsImxhdGV4VG9NYXJrdXAiLCJsIiwiY29uY2F0IiwibW9ja1VudHJhY2siLCJmbiIsInRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uIiwiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImlucHV0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJJbnB1dCIsImhvbGRlclJlZiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwibWF0aEZpZWxkIiwic3RvcCIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bnRyYWNrU2VsZWN0aW9uIiwidG9CZVVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5wdXQtc2VsZWN0aW9uLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVkaXRhYmxlIElucHV0IGtlZXBzIGl0cyBzZWxlY3Rpb24gc25hcHBlZCB0byB3aG9sZSBhdG9tcyAoc2VlXG4gKiBzZWxlY3Rpb24uanMpLiBUaGlzIGNoZWNrcyB0aGUgd2lyaW5nOiBhdHRhY2hlZCBvbiBtb3VudCwgcmVtb3ZlZCBvbiB1bm1vdW50LlxuICovXG5qZXN0Lm1vY2soJy4uL21hdGhsaXZlLWluc3RhbmNlJywgKCkgPT4ge1xuICBjbGFzcyBGYWtlTWF0aGZpZWxkRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBjb25zdCBlbCA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtYXRoLWZpZWxkJyk7XG5cbiAgICAgIGVsLnZhbHVlID0gJyc7XG4gICAgICBlbC5nZXRWYWx1ZSA9ICgpID0+IGVsLnZhbHVlO1xuXG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2FkTWF0aExpdmU6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7IE1hdGhmaWVsZEVsZW1lbnQ6IEZha2VNYXRoZmllbGRFbGVtZW50IH0pLFxuICAgIGdldE1hY3JvczogKCkgPT4gKHt9KSxcbiAgICBNQVRIX01PREVfU1BBQ0U6ICdcXFxcICcsXG4gICAgYXBwbHlTaGFkb3dTdHlsZXM6ICgpID0+IHt9LFxuICAgIHRyYWNrUGxhY2Vob2xkZXJDYXJldDogKCkgPT4gKCkgPT4ge30sXG4gICAgbGF0ZXhUb01hcmt1cDogKGwpID0+IGA8c3Bhbj4ke2x9PC9zcGFuPmAsXG4gIH07XG59KTtcblxuY29uc3QgbW9ja1VudHJhY2sgPSBqZXN0LmZuKCk7XG5cbmplc3QubW9jaygnLi4vc2VsZWN0aW9uJywgKCkgPT4gKHtcbiAgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb246IGplc3QuZm4oKCkgPT4gbW9ja1VudHJhY2spLFxufSkpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2ZpcnN0XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vbWYvaW5wdXQnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9maXJzdFxuaW1wb3J0IHsgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb24gfSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5kZXNjcmliZSgnSW5wdXQ6IHdob2xlLWF0b20gc2VsZWN0aW9uJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0cmFja1dob2xlQXRvbVNlbGVjdGlvbi5tb2NrQ2xlYXIoKTtcbiAgICBtb2NrVW50cmFjay5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgaXQoJ2F0dGFjaGVzIHRoZSB0cmFja2VyIHRvIHRoZSBtYXRoZmllbGQgb24gbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBuZXcgSW5wdXQoe30pO1xuXG4gICAgaW5wdXQuaG9sZGVyUmVmID0geyBjdXJyZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykgfTtcbiAgICBhd2FpdCBpbnB1dC5jb21wb25lbnREaWRNb3VudCgpO1xuXG4gICAgZXhwZWN0KHRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChpbnB1dC5tYXRoRmllbGQpO1xuICB9KTtcblxuICBpdCgncmVtb3ZlcyBpdCBvbiB1bm1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbmV3IElucHV0KHt9KTtcblxuICAgIGlucHV0LmhvbGRlclJlZiA9IHsgY3VycmVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpIH07XG4gICAgYXdhaXQgaW5wdXQuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpbnB1dC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXG4gICAgZXhwZWN0KG1vY2tVbnRyYWNrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KGlucHV0LnVudHJhY2tTZWxlY3Rpb24pLnRvQmVVbmRlZmluZWQoKTtcbiAg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
@@ -28,6 +28,18 @@ describe('keypad label display normalisation', function () {
28
28
  expect(out.startsWith("\\left".concat(open))).toBe(true);
29
29
  expect(out.endsWith("\\right".concat(close))).toBe(true);
30
30
  });
31
+ it('aligns an empty segment with the ray and line keys: bar up to the shaft, box down', function () {
32
+ var out = (0, _latexBridge.withVisibleEmptySlots)('\\overline{}');
33
+
34
+ // strut inside the bar (bar up) and one before it (label down)
35
+ expect(out).toMatch(/^\\rule\{0em\}\{1\.3em\}\\overline\{\\rule\{0em\}\{0\.87em\}/);
36
+ expect(out).toContain('pie-empty');
37
+ // the ray and line keys are the reference, so they are left as they were
38
+ expect((0, _latexBridge.withVisibleEmptySlots)('\\overrightarrow{}')).not.toContain('\\rule{0em}');
39
+ expect((0, _latexBridge.withVisibleEmptySlots)('\\overleftrightarrow{}')).not.toContain('\\rule{0em}');
40
+ // a filled bar is untouched
41
+ expect((0, _latexBridge.withVisibleEmptySlots)('\\overline{AB}')).toEqual('\\overline{AB}');
42
+ });
31
43
  it('leaves a filled pair of fences alone', function () {
32
44
  expect((0, _latexBridge.withVisibleEmptySlots)((0, _latexBridge.toMathLive)('\\abs{x}'))).toEqual('\\left|x\\right|');
33
45
  expect((0, _latexBridge.withVisibleEmptySlots)('\\left(x\\right)')).toEqual('\\left(x\\right)');
@@ -228,4 +240,4 @@ describe('keypad label display normalisation', function () {
228
240
  expect((0, _latexBridge.keyToAction)(key).value).not.toContain('pie-empty');
229
241
  });
230
242
  });
231
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm91dCIsImxhdGV4Rm9yRGlzcGxheSIsImV4cGVjdCIsIm5vdCIsInRvRXF1YWwiLCJ0b0NvbnRhaW4iLCJlYWNoIiwiX25hbWUiLCJsYXRleCIsIm9wZW4iLCJjbG9zZSIsInRvTWF0aExpdmUiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwidG9CZSIsImVuZHNXaXRoIiwiZm9yRWFjaCIsImdlb21ldHJ5IiwiT2JqZWN0IiwidmFsdWVzIiwia2V5IiwidG9NYXRjaCIsIl9yZXF1aXJlIiwicGxhY2Vob2xkZXJTdHlsZXMiLCJwb3NpdGlvbiIsImxlZnQiLCJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJJTkRFWF9NQVJLVVAiLCJydWxlIiwiX3JlcXVpcmUyIiwicm9vdEluZGV4U3R5bGVzIiwic2VsZWN0b3JzIiwia2V5cyIsInRvSGF2ZUxlbmd0aCIsInNlbGVjdG9yIiwidmFsdWUiLCJmb250U2l6ZSIsImhvbGRlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIm1hdGNoZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVwbGFjZSIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImVsIiwiaWQiLCJfcnVsZSIsImNzIiwiX3J1bGUyIiwibmFtZSIsInRvQmVEZWZpbmVkIiwiUk9PVF9JTkRFWF9DU1MiLCJzdHlsZSIsIl90eXBlb2YyIiwiX3JlcXVpcmUzIiwicGVyY2VudGFnZSIsImtleVRvQWN0aW9uIiwiX3JlcXVpcmU0IiwiYmFzZVNldCIsIl9yZXF1aXJlNSIsImdyYWRlU2V0cyIsImV2ZXJ5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImciLCJzZXQiLCJ3YWxrIiwibm9kZSIsImlzQXJyYXkiLCJmaWVsZCIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18va2V5cGFkLWxhYmVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhWaXNpYmxlRW1wdHlTbG90cyBhcyBsYXRleEZvckRpc3BsYXkgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuaW1wb3J0IHsga2V5VG9BY3Rpb24sIHRvTWF0aExpdmUgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuXG4vKipcbiAqIEtleXMgdXNlIGVtcHR5IGdyb3VwcyB0byBzaG93IGEgY29tbWFuZCdzIHNoYXBlIChgXFxmcmFje317fWAsIGB4Xnt9YCkuXG4gKiBNYXRoTGl2ZSByZW5kZXJzIGB7fWAgYXMgbm90aGluZywgc28gbGFiZWxzIG5lZWQgYSB2aXNpYmxlIHN0YW5kLWluIC0gYnV0IHRoZVxuICogdmFsdWUgdGhhdCBnZXRzICppbnNlcnRlZCogbXVzdCBzdGF5IHVudG91Y2hlZC5cbiAqL1xuZGVzY3JpYmUoJ2tleXBhZCBsYWJlbCBkaXNwbGF5IG5vcm1hbGlzYXRpb24nLCAoKSA9PiB7XG4gIGl0KCdnaXZlcyBlbXB0eSBncm91cHMgYSB2aXNpYmxlIGdseXBoJywgKCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheSgnXFxcXGZyYWN7fXt9Jyk7XG5cbiAgICBleHBlY3Qob3V0KS5ub3QudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgLy8gYSBcXHJ1bGUsIG5vdCBhIGdseXBoOiBmb250IG1ldHJpY3MgZm9yIGEgc3Vic3RpdHV0ZWQgZ2x5cGggZG8gbm90IG1hdGNoXG4gICAgLy8gTWF0aExpdmUncywgd2hpY2ggbGVmdCBzdHJldGNoeSBhY2NlbnRzIG5hcnJvd2VyIHRoYW4gdGhlIGJveFxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbJ2Fic29sdXRlIHZhbHVlJywgJ1xcXFxhYnN7fScsICd8JywgJ3wnXSxcbiAgICBbJ3BhcmVudGhlc2lzJywgJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnKCcsICcpJ10sXG4gICAgWydicmFja2V0cycsICdcXFxcbGVmdFtcXFxccmlnaHRdJywgJ1snLCAnXSddLFxuICBdKSgnZ2l2ZXMgYW4gZW1wdHkgJXMgYSB0YWxsLCBmaWxsZWQgc2xvdCAodGhlIHNhbWUgbXV0ZWQgdGFnIGFzIG90aGVyIHNsb3RzKScsIChfbmFtZSwgbGF0ZXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gbGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUobGF0ZXgpKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5PTEnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlWy0wLjI1ZW1dezAuNTVlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQpLm5vdC50b0NvbnRhaW4oJ1xcXFxib3hlZCcpO1xuICAgIC8vIHRoZSBzdHJ1dCB0aGF0IGtlZXBzIHRoZSBmZW5jZXMgdGFsbCB3aGlsZSB0aGUgYm94IGlzIGNlbnRyZWQgb24gdGhlIGF4aXNcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlezBlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQuc3RhcnRzV2l0aChgXFxcXGxlZnQke29wZW59YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG91dC5lbmRzV2l0aChgXFxcXHJpZ2h0JHtjbG9zZX1gKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2xlYXZlcyBhIGZpbGxlZCBwYWlyIG9mIGZlbmNlcyBhbG9uZScsICgpID0+IHtcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUoJ1xcXFxhYnN7eH0nKSkpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnXFxcXGxlZnQoeFxcXFxyaWdodCknKSkudG9FcXVhbCgnXFxcXGxlZnQoeFxcXFxyaWdodCknKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgZXZlcnkgZW1wdHktZ3JvdXAga2V5IHNoYXBlJywgKCkgPT4ge1xuICAgIFtcbiAgICAgICdcXFxcZnJhY3t9e30nLFxuICAgICAgJ1xcXFxvdmVybGluZXt9JyxcbiAgICAgICd4Xnt9JyxcbiAgICAgICd4X3t9JyxcbiAgICAgICdcXFxcc3FydHt9JyxcbiAgICAgICdcXFxcc3FydFt7fV17fScsXG4gICAgICAnXFxcXGFic3t9JyxcbiAgICAgICdcXFxcbG9nX3t9JyxcbiAgICAgICdcXFxcbG9uZ2Rpdnt9JyxcbiAgICBdLmZvckVhY2goKGxhdGV4KSA9PiB7XG4gICAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KGxhdGV4KSkubm90LnRvQ29udGFpbigne30nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3RyZWF0cyBhIHdoaXRlc3BhY2Utb25seSBncm91cCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAvLyBlLmcuIFxcZnJhY3t4fXsgfVxuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkoJ1xcXFxmcmFje3h9eyB9JykpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gIH0pO1xuXG4gIC8vIE1hdGhRdWlsbCBuZWVkZWQgYSBuZXN0ZWQgXFxvdmVybGluZXt9IHRvIGRyYXcgdGhlIGVtcHR5IGJveC4gTWF0aExpdmVcbiAgLy8gcmVuZGVycyB0aGF0IGFzIGEgcmVhbCBsaW5lLCBzbyB0aG9zZSBsYWJlbHMgc2hvd2VkIGEgc3B1cmlvdXMgYmFyIChhIGxpbmVcbiAgLy8gdW5kZXIgdGhlIGFycm93cywgYW5kIGEgc3RyYWlnaHQgbGluZSBpbnN0ZWFkIG9mIHRoZSBhcmMpLlxuICBpdCgnYWNjZW50IGtleXMgZG8gbm90IGNhcnJ5IHRoZSBuZXN0ZWQtb3ZlcmxpbmUgYm94IGhhY2snLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgZ2VvbWV0cnkgPSByZXF1aXJlKCcuLi9rZXlzL2dlb21ldHJ5Jyk7XG5cbiAgICBPYmplY3QudmFsdWVzKGdlb21ldHJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleS5sYXRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhwZWN0KGtleS5sYXRleCkubm90LnRvQ29udGFpbignXFxcXG92ZXJsaW5le319Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhbiBhY2NlbnQgb3ZlciBhbiBlbXB0eSBzbG90IHN0aWxsIGdldHMgYSB2aXNpYmxlIGJveCcsICgpID0+IHtcbiAgICBbJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7fScsICdcXFxcb3ZlcmFyY3t9J10uZm9yRWFjaCgobGF0ZXgpID0+IHtcbiAgICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheShsYXRleCk7XG5cbiAgICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gICAgICBleHBlY3Qob3V0KS5ub3QudG9Db250YWluKCdcXFxcb3ZlcmxpbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBnbHlwaCdzIHdpZHRoIGNvbWVzIGZyb20gZm9udCBtZXRyaWNzOyBVKzI1QUIgaXMgbm90IGluIHRoZSBLYVRlWCBmb250cyxcbiAgLy8gc28gdGhlIGJyb3dzZXIgc3Vic3RpdHV0ZWQgYSB3aWRlciBvbmUgYW5kIHN0cmV0Y2h5IGFjY2VudHMgY2FtZSBvdXRcbiAgLy8gbmFycm93ZXIgdGhhbiB0aGUgYm94LiBBIHJ1bGUgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLlxuICBpdCgndGhlIGVtcHR5IHNsb3QgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLCBub3QgZm9udC1kZXBlbmRlbnQgbWV0cmljcycsICgpID0+IHtcbiAgICBjb25zdCBvdXQgPSBsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVyYXJje30nKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b01hdGNoKC9ydWxlXFx7W1xcZC5dK2VtXFx9XFx7W1xcZC5dK2VtXFx9Lyk7XG4gICAgZXhwZWN0KG91dCkubm90LnRvQ29udGFpbigndW5pY29kZScpO1xuICB9KTtcblxuICAvLyBNZWFzdXJlZCBpbiB0aGUgYnJvd3NlcjogdGhlIGFjY2VudCdzIGltbWVkaWF0ZSB3cmFwcGVyIGNvbXB1dGVzIHRvIDBweFxuICAvLyAoaXRzIC5NTF9fc3RyZXRjaHkgY2hpbGQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkKSwgc28gdGhlIHN2ZyB3aWR0aCBoYXMgdG9cbiAgLy8gcmVzb2x2ZSBhZ2FpbnN0IC5NTF9fYmFzZSAtIHdob3NlIHdpZHRoIGVxdWFscyB0aGUgY29udGVudC4gV2l0aG91dCBwaW5uaW5nXG4gIC8vIHRoYXQsIHRoZSBhcmMgY29sbGFwc2VkIHRvIGEgc3Bpa2UgYW5kIHNhdCByaWdodCBvZiB0aGUgYm94LlxuICBpdCgncGlucyB0aGUgYWNjZW50IGNvbnRhaW5pbmcgYmxvY2sgYW5kIGRyb3BzIHRoZSBjZW50ZXJpbmcgc2hpZnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwbGFjZWhvbGRlclN0eWxlcyB9ID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fYmFzZSddLnBvc2l0aW9uKS50b0VxdWFsKCdyZWxhdGl2ZScpO1xuICAgIGV4cGVjdChwbGFjZWhvbGRlclN0eWxlc1snJiAuTUxfX3N0cmV0Y2h5J10pLnRvRXF1YWwoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgd2lkdGg6ICcxMDAlJyB9KTtcbiAgICAvLyBtdXN0IGJlICFpbXBvcnRhbnQ6IE1hdGhMaXZlIHdyaXRlcyBtYXJnaW4tbGVmdCBhcyBhbiBpbmxpbmUgc3R5bGUsIGFuZCBhXG4gICAgLy8gY2xhc3MgY2Fubm90IG92ZXJyaWRlIHRoYXQuIExlYXZpbmcgaXQgdW4taW1wb3J0YW50IGFsc28gaGFsdmVkIHRoZSBhcmMnc1xuICAgIC8vIHdpZHRoLCBiZWNhdXNlIC5NTF9fY2VudGVyIGlzIHRoZSBzdHJldGNoeSdzIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fY2VudGVyOmhhcyguTUxfX3N0cmV0Y2h5KSddLm1hcmdpbkxlZnQpLnRvRXF1YWwoJzAgIWltcG9ydGFudCcpO1xuICB9KTtcblxuICAvLyBNYXRoTGl2ZSBzZXRzIHRoZSBpbmRleCBvZiBcXHNxcnRbbl17eH0gaW4gc2NyaXB0c2NyaXB0c3R5bGUgLSBhbiBpbmxpbmVcbiAgLy8gYGZvbnQtc2l6ZTogNTAlYCAtIHdoaWNoIGlzIHRvbyBzbWFsbCB0byByZWFkIG9uIHRoZSBudGgtcm9vdCBrZXkgYW5kIGluXG4gIC8vIGF1dGhvcmVkIHJhZGljYWxzLiBJdCBpcyBzY2FsZWQgdXAgdG8gODAlLlxuICBkZXNjcmliZSgncmFkaWNhbCBpbmRleCBzaXplJywgKCkgPT4ge1xuICAgIC8vIFJlYWwgTWF0aExpdmUgMC4xMTAgb3V0cHV0IGZvciBgXFxzcXJ0WzFdezJ9YCwgdHJpbW1lZCB0byB0aGUgaW5kZXguIFRoZVxuICAgIC8vIHNlbGVjdG9yIHdhbGtzIHRoaXMgZXhhY3QgY2hhaW4sIHNvIHRoaXMgZml4dHVyZSBpcyB3aGF0IHBpbnMgaXQgZG93bi5cbiAgICBjb25zdCBJTkRFWF9NQVJLVVAgPSBgXG4gICAgICA8c3BhbiBjbGFzcz1cIk1MX19iYXNlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtaW5kZXhcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIk1MX192bGlzdC10XCI+PHNwYW4gY2xhc3M9XCJNTF9fdmxpc3QtclwiPjxzcGFuIGNsYXNzPVwiTUxfX3ZsaXN0XCIgc3R5bGU9XCJoZWlnaHQ6MC43OGVtXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDotMy40NWVtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3BzdHJ1dFwiIHN0eWxlPVwiaGVpZ2h0OjNlbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJpbmRleC1zaXplXCIgc3R5bGU9XCJoZWlnaHQ6MC4zM2VtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTogNTAlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJNTF9fY21yXCI+MTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5lc3RlZC1zaXplXCIgc3R5bGU9XCJmb250LXNpemU6IDUwJVwiPm5lc3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtc2lnblwiPjxzcGFuIGNsYXNzPVwiTUxfX2RlbGltLXNpemUxXCI+JiM4NzMwOzwvc3Bhbj48L3NwYW4+XG4gICAgICA8L3NwYW4+YDtcblxuICAgIGNvbnN0IHJ1bGUgPSAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgcm9vdEluZGV4U3R5bGVzIH0gPSByZXF1aXJlKCcuLi9tZi9jb21tb24tc3R5bGVzJyk7XG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3Qua2V5cyhyb290SW5kZXhTdHlsZXMpO1xuXG4gICAgICBleHBlY3Qoc2VsZWN0b3JzKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdG9yOiBzZWxlY3RvcnNbMF0sIHZhbHVlOiByb290SW5kZXhTdHlsZXNbc2VsZWN0b3JzWzBdXS5mb250U2l6ZSB9O1xuICAgIH07XG5cbiAgICBpdChcInNjYWxlcyB0aGUgaW5kZXggZ2x5cGggdG8gODAlLCB1cCBmcm9tIE1hdGhMaXZlJ3MgNTAlXCIsICgpID0+IHtcbiAgICAgIC8vICFpbXBvcnRhbnQ6IHRoZSA1MCUgaXMgYW4gaW5saW5lIHN0eWxlLCB3aGljaCBhIGNsYXNzIGNhbm5vdCBvdmVycmlkZS5cbiAgICAgIGV4cGVjdChydWxlKCkudmFsdWUpLnRvRXF1YWwoJzgwJSAhaW1wb3J0YW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGFyZ2V0cyB0aGUgc3BhbiBNYXRoTGl2ZSBwdXRzIHRoZSBpbmxpbmUgZm9udC1zaXplIG9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGhvbGRlci5pbm5lckhUTUwgPSBJTkRFWF9NQVJLVVA7XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBob2xkZXIucXVlcnlTZWxlY3RvckFsbChydWxlKCkuc2VsZWN0b3IucmVwbGFjZSgvXiZcXHMqLywgJycpKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmZyb20obWF0Y2hlZCkubWFwKChlbCkgPT4gZWwuaWQpKS50b0VxdWFsKFsnaW5kZXgtc2l6ZSddKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgdGhlIHJhZGljYWwgaW5kZXggYm94IGl0c2VsZiB1bnNjYWxlZCcsICgpID0+IHtcbiAgICAgIC8vIFNjYWxpbmcgYC5NTF9fc3FydC1pbmRleGAgd291bGQgc2NhbGUgdGhlIGVtLWJhc2VkIHRvcC9oZWlnaHQgb2Zmc2V0c1xuICAgICAgLy8gdGhhdCB0dWNrIHRoZSBpbmRleCBpbnRvIHRoZSByYWRpY2FsLCBsaWZ0aW5nIGl0IGNsZWFyIG9mIHRoZSBjcm9vay5cbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgZXhwZWN0KHNlbGVjdG9yKS5ub3QudG9NYXRjaCgvXFwuTUxfX3NxcnQtaW5kZXhcXHMqXFx7PyQvKTtcbiAgICAgIGV4cGVjdChzZWxlY3Rvci5zdGFydHNXaXRoKCcmIC5NTF9fc3FydC1pbmRleCA+JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXBwbGllcyB3aGVyZXZlciBtYXRoIHJlbmRlcnMgLSBrZXlwYWQgbGFiZWxzLCBzdGF0aWMgbWF0aCwgbWF0aGZpZWxkJywgKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgWydjb21tb25LZXlib2FyZFN0eWxlcycsICdjb21tb25NYXRoTGl2ZVN0eWxlcycsICdzdXBzdWJTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdChjc1tuYW1lXVtzZWxlY3Rvcl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGxpdmUgbWF0aGZpZWxkIHJlbmRlcnMgaW4gYSBzaGFkb3cgcm9vdCwgd2hpY2ggaG9zdCBzdHlsZXMgY2Fubm90XG4gICAgICAvLyByZWFjaCwgc28gdGhlIHNhbWUgcnVsZSBzaGlwcyBhcyBwbGFpbiBDU1MgZm9yIGBhcHBseVNoYWRvd1N0eWxlc2AuXG4gICAgICBleHBlY3QoY3MuUk9PVF9JTkRFWF9DU1MpLnRvQ29udGFpbignLk1MX19zcXJ0LWluZGV4ID4nKTtcbiAgICAgIC8vIERlcml2ZWQsIHNvIHRoZSBzaXplIGxpdmVzIGluIG9uZSBwbGFjZTogdGhlIHR3byBjb3BpZXMgY2Fubm90IGRyaWZ0LlxuICAgICAgZXhwZWN0KGNzLlJPT1RfSU5ERVhfQ1NTKS50b0NvbnRhaW4oYGZvbnQtc2l6ZToke3J1bGUoKS52YWx1ZX1gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgdGhvc2UgcnVsZXMgd2hlcmV2ZXIgc3RhdGljIG1hdGggcmVuZGVycycsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcblxuICAgIFsnY29tbW9uS2V5Ym9hcmRTdHlsZXMnLCAnY29tbW9uTWF0aExpdmVTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoY3NbbmFtZV1bJyYgLk1MX19zdHJldGNoeSddKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNzW25hbWVdWycmIC5NTF9fYmFzZSddKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIGJhcmUgYCYgc3ZnYCBydWxlIHJlLXBhcmVudHMgZXZlcnkgc3ZnIGluIHRoZSBzdWJ0cmVlOyBNYXRoTGl2ZSdzIG93biBydWxlXG4gIC8vIGlzIGRlc2NlbmRhbnQtc2NvcGVkIHRvIC5NTF9fbGF0ZXggLk1MX19zdHJldGNoeSBzdmcuXG4gIGl0KCdkb2VzIG5vdCB1c2UgYSBibGFua2V0IHN2ZyBydWxlJywgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIGNvbnN0IGNzID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhzdHlsZSkpLm5vdC50b0NvbnRhaW4oJyYgc3ZnJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBQZXJjZW50IGtleSBzaG93ZWQgYXMgYSBibGFuayBidXR0b24gb24gdGhlIEFkdmFuY2VkIEFsZ2VicmEga2V5cGFkXG4gIC8vIChyb3cgMSwgcG9zaXRpb24gNikuIE1hdGhRdWlsbCBkZWZpbmVkIGBMYXRleENtZHNbJyUnXWAgYXMgYSBzeW1ib2wgdGhhdFxuICAvLyBzZXJpYWxpc2VkIHRvIGBcXFxcJWAsIHNvIGl0cyBiYXJlIGAlYCBsYWJlbCBwYXJzZWQgZmluZTsgTWF0aExpdmUgcGFyc2VzIHJlYWxcbiAgLy8gTGFUZVgsIHdoZXJlIGAlYCBvcGVucyBhIGNvbW1lbnQgLSB0aGUgbGFiZWwgcmVuZGVyZWQgbm90aGluZywgYW5kIHByZXNzaW5nXG4gIC8vIHRoZSBrZXkgaW5zZXJ0ZWQgYSBjb21tZW50IHRoYXQgc3dhbGxvd2VkIHRoZSByZXN0IG9mIHRoZSBleHByZXNzaW9uLlxuICBpdCgndGhlIHBlcmNlbnQga2V5IGlzIGVzY2FwZWQsIG5vdCBhIGxhdGV4IGNvbW1lbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwZXJjZW50YWdlIH0gPSByZXF1aXJlKCcuLi9rZXlzL21pc2MnKTtcblxuICAgIGV4cGVjdChwZXJjZW50YWdlLmxhdGV4KS50b0VxdWFsKCdcXFxcJScpO1xuICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJjZW50YWdlKS52YWx1ZSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgfSk7XG5cbiAgLy8gQW55IGJhcmUgYCVgIGluIGEga2V5IHdvdWxkIGZhaWwgdGhlIHNhbWUgd2F5LCBzaWxlbnRseS5cbiAgaXQoJ25vIGtleXBhZCBrZXkgY2FycmllcyBhbiB1bmVzY2FwZWQgJScsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGJhc2VTZXQgfSA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGdyYWRlU2V0cyB9ID0gcmVxdWlyZSgnLi4va2V5cy9ncmFkZXMnKTtcblxuICAgIGNvbnN0IGV2ZXJ5ID0gWy4uLmJhc2VTZXQsIC4uLmdyYWRlU2V0cy5tYXAoKGcpID0+IGcuc2V0KV07XG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIG5vZGUuZm9yRWFjaCh3YWxrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBbJ2xhdGV4JywgJ3dyaXRlJywgJ2NvbW1hbmQnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVbZmllbGRdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gYSBgJWAgaXMgb25seSBzYWZlIHdoZW4gcHJlY2VkZWQgYnkgYW4gb2RkIHJ1biBvZiBiYWNrc2xhc2hlc1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5yZXBsYWNlKC9cXFxcLi9nLCAnJykpLm5vdC50b0NvbnRhaW4oJyUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdhbGsoZXZlcnkpO1xuICB9KTtcblxuICBpdCgnbGVhdmVzIGxhdGV4IHdpdGhvdXQgZW1wdHkgZ3JvdXBzIGFsb25lJywgKCkgPT4ge1xuICAgIFsnXFxcXHBpJywgJ1xcXFxzaW4nLCAneF4yJywgJ1xcXFxvdmVybGluZXtBQn0nXS5mb3JFYWNoKChsYXRleCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheShsYXRleCkpLnRvRXF1YWwobGF0ZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBudWxsaXNoIGlucHV0JywgKCkgPT4ge1xuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkodW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnJykpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnZG9lcyBOT1QgYWZmZWN0IHdoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICAvLyB0aGUgYWN0aW9uIG11c3QgdXNlIHRoZSBrZXkncyBvd24gbGF0ZXgsIG5ldmVyIHRoZSBkaXNwbGF5IGZvcm1cbiAgICBjb25zdCBrZXkgPSB7IG5hbWU6ICdmcmFjJywgbGF0ZXg6ICdcXFxcZnJhY3t9e30nIH07XG5cbiAgICBleHBlY3Qoa2V5VG9BY3Rpb24oa2V5KS52YWx1ZSkudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgZXhwZWN0KGtleVRvQWN0aW9uKGtleSkudmFsdWUpLm5vdC50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07RUFDbkRDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDLElBQU1DLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLFlBQVksQ0FBQztJQUV6Q0MsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0csR0FBRyxDQUFDQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDO0lBQ0E7SUFDQUYsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQkgsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFdBQVcsQ0FBQztFQUNwQyxDQUFDLENBQUM7RUFFRk4sRUFBRSxDQUFDTyxJQUFJLENBQUMsQ0FDTixDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3ZDLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDNUMsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUMxQyxDQUFDLENBQUMsMkVBQTJFLEVBQUUsVUFBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFLO0lBQzdHLElBQU1WLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLElBQUFVLHVCQUFVLEVBQUNILEtBQUssQ0FBQyxDQUFDO0lBRTlDTixNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDSyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQ3BDSCxNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDSyxTQUFTLENBQUMsOEJBQThCLENBQUM7SUFDckRILE1BQU0sQ0FBQ0YsR0FBRyxDQUFDLENBQUNHLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUNwQztJQUNBSCxNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDSyxTQUFTLENBQUMsa0JBQWtCLENBQUM7SUFDekNILE1BQU0sQ0FBQ0YsR0FBRyxDQUFDWSxVQUFVLFVBQUFDLE1BQUEsQ0FBVUosSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDSyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xEWixNQUFNLENBQUNGLEdBQUcsQ0FBQ2UsUUFBUSxXQUFBRixNQUFBLENBQVdILEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQztFQUNwRCxDQUFDLENBQUM7RUFFRmYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFlBQU07SUFDL0NHLE1BQU0sQ0FBQyxJQUFBRCxrQ0FBZSxFQUFDLElBQUFVLHVCQUFVLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDM0VGLE1BQU0sQ0FBQyxJQUFBRCxrQ0FBZSxFQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0csT0FBTyxDQUFDLGtCQUFrQixDQUFDO0VBQ3pFLENBQUMsQ0FBQztFQUVGTCxFQUFFLENBQUMscUNBQXFDLEVBQUUsWUFBTTtJQUM5QyxDQUNFLFlBQVksRUFDWixjQUFjLEVBQ2QsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUNpQixPQUFPLENBQUMsVUFBQ1IsS0FBSyxFQUFLO01BQ25CTixNQUFNLENBQUMsSUFBQUQsa0NBQWUsRUFBQ08sS0FBSyxDQUFDLENBQUMsQ0FBQ0wsR0FBRyxDQUFDRSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3BELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGTixFQUFFLENBQUMseUNBQXlDLEVBQUUsWUFBTTtJQUNsRDtJQUNBRyxNQUFNLENBQUMsSUFBQUQsa0NBQWUsRUFBQyxjQUFjLENBQUMsQ0FBQyxDQUFDSSxTQUFTLENBQUMsV0FBVyxDQUFDO0VBQ2hFLENBQUMsQ0FBQzs7RUFFRjtFQUNBO0VBQ0E7RUFDQU4sRUFBRSxDQUFDLHVEQUF1RCxFQUFFLFlBQU07SUFDaEU7SUFDQSxJQUFNa0IsUUFBUSxHQUFHcEIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0lBRTVDcUIsTUFBTSxDQUFDQyxNQUFNLENBQUNGLFFBQVEsQ0FBQyxDQUFDRCxPQUFPLENBQUMsVUFBQ0ksR0FBRyxFQUFLO01BQ3ZDLElBQUlBLEdBQUcsSUFBSSxPQUFPQSxHQUFHLENBQUNaLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDeENOLE1BQU0sQ0FBQ2tCLEdBQUcsQ0FBQ1osS0FBSyxDQUFDLENBQUNMLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLGVBQWUsQ0FBQztNQUNsRDtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGTixFQUFFLENBQUMsdURBQXVELEVBQUUsWUFBTTtJQUNoRSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxDQUFDaUIsT0FBTyxDQUFDLFVBQUNSLEtBQUssRUFBSztNQUMzRCxJQUFNUixHQUFHLEdBQUcsSUFBQUMsa0NBQWUsRUFBQ08sS0FBSyxDQUFDO01BRWxDTixNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDSyxTQUFTLENBQUMsV0FBVyxDQUFDO01BQ2xDSCxNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDRyxHQUFHLENBQUNFLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDekMsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBTixFQUFFLENBQUMsa0VBQWtFLEVBQUUsWUFBTTtJQUMzRSxJQUFNQyxHQUFHLEdBQUcsSUFBQUMsa0NBQWUsRUFBQyxhQUFhLENBQUM7SUFFMUNDLE1BQU0sQ0FBQ0YsR0FBRyxDQUFDLENBQUNLLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDL0JILE1BQU0sQ0FBQ0YsR0FBRyxDQUFDLENBQUNxQixPQUFPLENBQUMsOEJBQThCLENBQUM7SUFDbkRuQixNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDRyxHQUFHLENBQUNFLFNBQVMsQ0FBQyxTQUFTLENBQUM7RUFDdEMsQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBO0VBQ0FOLEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxZQUFNO0lBQ3pFO0lBQ0EsSUFBQXVCLFFBQUEsR0FBOEJ6QixPQUFPLENBQUMscUJBQXFCLENBQUM7TUFBcEQwQixpQkFBaUIsR0FBQUQsUUFBQSxDQUFqQkMsaUJBQWlCO0lBRXpCckIsTUFBTSxDQUFDcUIsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDcEIsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNyRUYsTUFBTSxDQUFDcUIsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDbkIsT0FBTyxDQUFDO01BQUVvQixRQUFRLEVBQUUsVUFBVTtNQUFFQyxJQUFJLEVBQUUsQ0FBQztNQUFFQyxLQUFLLEVBQUU7SUFBTyxDQUFDLENBQUM7SUFDdEc7SUFDQTtJQUNBO0lBQ0F4QixNQUFNLENBQUNxQixpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDSSxVQUFVLENBQUMsQ0FBQ3ZCLE9BQU8sQ0FBQyxjQUFjLENBQUM7RUFDbEcsQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBTixRQUFRLENBQUMsb0JBQW9CLEVBQUUsWUFBTTtJQUNuQztJQUNBO0lBQ0EsSUFBTThCLFlBQVksdXVCQWNSO0lBRVYsSUFBTUMsSUFBSSxHQUFHLFNBQVBBLElBQUlBLENBQUEsRUFBUztNQUNqQjtNQUNBLElBQUFDLFNBQUEsR0FBNEJqQyxPQUFPLENBQUMscUJBQXFCLENBQUM7UUFBbERrQyxlQUFlLEdBQUFELFNBQUEsQ0FBZkMsZUFBZTtNQUN2QixJQUFNQyxTQUFTLEdBQUdkLE1BQU0sQ0FBQ2UsSUFBSSxDQUFDRixlQUFlLENBQUM7TUFFOUM3QixNQUFNLENBQUM4QixTQUFTLENBQUMsQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUVqQyxPQUFPO1FBQUVDLFFBQVEsRUFBRUgsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUFFSSxLQUFLLEVBQUVMLGVBQWUsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNLO01BQVMsQ0FBQztJQUNsRixDQUFDO0lBRUR0QyxFQUFFLENBQUMsdURBQXVELEVBQUUsWUFBTTtNQUNoRTtNQUNBRyxNQUFNLENBQUMyQixJQUFJLENBQUMsQ0FBQyxDQUFDTyxLQUFLLENBQUMsQ0FBQ2hDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNoRCxDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLFlBQU07TUFDakUsSUFBTXVDLE1BQU0sR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsS0FBSyxDQUFDO01BRTVDRixNQUFNLENBQUNHLFNBQVMsR0FBR2IsWUFBWTtNQUUvQixJQUFNYyxPQUFPLEdBQUdKLE1BQU0sQ0FBQ0ssZ0JBQWdCLENBQUNkLElBQUksQ0FBQyxDQUFDLENBQUNNLFFBQVEsQ0FBQ1MsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztNQUU3RTFDLE1BQU0sQ0FBQzJDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDSixPQUFPLENBQUMsQ0FBQ0ssR0FBRyxDQUFDLFVBQUNDLEVBQUU7UUFBQSxPQUFLQSxFQUFFLENBQUNDLEVBQUU7TUFBQSxFQUFDLENBQUMsQ0FBQzdDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQztJQUVGTCxFQUFFLENBQUMsOENBQThDLEVBQUUsWUFBTTtNQUN2RDtNQUNBO01BQ0EsSUFBQW1ELEtBQUEsR0FBcUJyQixJQUFJLENBQUMsQ0FBQztRQUFuQk0sUUFBUSxHQUFBZSxLQUFBLENBQVJmLFFBQVE7TUFFaEJqQyxNQUFNLENBQUNpQyxRQUFRLENBQUMsQ0FBQ2hDLEdBQUcsQ0FBQ2tCLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztNQUN2RG5CLE1BQU0sQ0FBQ2lDLFFBQVEsQ0FBQ3ZCLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0lBRUZmLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxZQUFNO01BQ2hGO01BQ0EsSUFBTW9ELEVBQUUsR0FBR3RELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztNQUN6QyxJQUFBdUQsTUFBQSxHQUFxQnZCLElBQUksQ0FBQyxDQUFDO1FBQW5CTSxRQUFRLEdBQUFpQixNQUFBLENBQVJqQixRQUFRO01BRWhCLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxDQUFDLENBQUNuQixPQUFPLENBQUMsVUFBQ3FDLElBQUksRUFBSztRQUNqRm5ELE1BQU0sQ0FBQ2lELEVBQUUsQ0FBQ0UsSUFBSSxDQUFDLENBQUNsQixRQUFRLENBQUMsQ0FBQyxDQUFDbUIsV0FBVyxDQUFDLENBQUM7TUFDMUMsQ0FBQyxDQUFDOztNQUVGO01BQ0E7TUFDQXBELE1BQU0sQ0FBQ2lELEVBQUUsQ0FBQ0ksY0FBYyxDQUFDLENBQUNsRCxTQUFTLENBQUMsbUJBQW1CLENBQUM7TUFDeEQ7TUFDQUgsTUFBTSxDQUFDaUQsRUFBRSxDQUFDSSxjQUFjLENBQUMsQ0FBQ2xELFNBQVMsY0FBQVEsTUFBQSxDQUFjZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQ08sS0FBSyxDQUFFLENBQUM7SUFDbEUsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZyQyxFQUFFLENBQUMsa0RBQWtELEVBQUUsWUFBTTtJQUMzRDtJQUNBLElBQU1vRCxFQUFFLEdBQUd0RCxPQUFPLENBQUMscUJBQXFCLENBQUM7SUFFekMsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDbUIsT0FBTyxDQUFDLFVBQUNxQyxJQUFJLEVBQUs7TUFDakVuRCxNQUFNLENBQUNpRCxFQUFFLENBQUNFLElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7TUFDakRwRCxNQUFNLENBQUNpRCxFQUFFLENBQUNFLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQzs7RUFFRjtFQUNBO0VBQ0F2RCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsWUFBTTtJQUMxQztJQUNBLElBQU1vRCxFQUFFLEdBQUd0RCxPQUFPLENBQUMscUJBQXFCLENBQUM7SUFFekNxQixNQUFNLENBQUNDLE1BQU0sQ0FBQ2dDLEVBQUUsQ0FBQyxDQUFDbkMsT0FBTyxDQUFDLFVBQUN3QyxLQUFLLEVBQUs7TUFDbkMsSUFBSUEsS0FBSyxJQUFJLElBQUFDLFFBQUEsYUFBT0QsS0FBSyxNQUFLLFFBQVEsRUFBRTtRQUN0Q3RELE1BQU0sQ0FBQ2dCLE1BQU0sQ0FBQ2UsSUFBSSxDQUFDdUIsS0FBSyxDQUFDLENBQUMsQ0FBQ3JELEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLE9BQU8sQ0FBQztNQUNuRDtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQzs7RUFFRjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0FOLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxZQUFNO0lBQzFEO0lBQ0EsSUFBQTJELFNBQUEsR0FBdUI3RCxPQUFPLENBQUMsY0FBYyxDQUFDO01BQXRDOEQsVUFBVSxHQUFBRCxTQUFBLENBQVZDLFVBQVU7SUFFbEJ6RCxNQUFNLENBQUN5RCxVQUFVLENBQUNuRCxLQUFLLENBQUMsQ0FBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN2Q0YsTUFBTSxDQUFDLElBQUEwRCx3QkFBVyxFQUFDRCxVQUFVLENBQUMsQ0FBQ3ZCLEtBQUssQ0FBQyxDQUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQztFQUN0RCxDQUFDLENBQUM7O0VBRUY7RUFDQUwsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFlBQU07SUFDL0M7SUFDQSxJQUFBOEQsU0FBQSxHQUFvQmhFLE9BQU8sQ0FBQyxTQUFTLENBQUM7TUFBOUJpRSxPQUFPLEdBQUFELFNBQUEsQ0FBUEMsT0FBTztJQUNmO0lBQ0EsSUFBQUMsU0FBQSxHQUFzQmxFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztNQUF2Q21FLFNBQVMsR0FBQUQsU0FBQSxDQUFUQyxTQUFTO0lBRWpCLElBQU1DLEtBQUssTUFBQXBELE1BQUEsS0FBQXFELG1CQUFBLGFBQU9KLE9BQU8sT0FBQUksbUJBQUEsYUFBS0YsU0FBUyxDQUFDakIsR0FBRyxDQUFDLFVBQUNvQixDQUFDO01BQUEsT0FBS0EsQ0FBQyxDQUFDQyxHQUFHO0lBQUEsRUFBQyxFQUFDO0lBRTFELElBQU1DLEtBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFJQyxJQUFJLEVBQUs7TUFDckIsSUFBSXpCLEtBQUssQ0FBQzBCLE9BQU8sQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7UUFDdkJBLElBQUksQ0FBQ3RELE9BQU8sQ0FBQ3FELEtBQUksQ0FBQztRQUNsQjtNQUNGO01BRUEsSUFBSSxDQUFDQyxJQUFJLEVBQUU7UUFDVDtNQUNGO01BRUEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDdEQsT0FBTyxDQUFDLFVBQUN3RCxLQUFLLEVBQUs7UUFDL0MsSUFBTXBDLEtBQUssR0FBR2tDLElBQUksQ0FBQ0UsS0FBSyxDQUFDO1FBRXpCLElBQUksT0FBT3BDLEtBQUssS0FBSyxRQUFRLEVBQUU7VUFDN0I7VUFDQWxDLE1BQU0sQ0FBQ2tDLEtBQUssQ0FBQ1EsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDekMsR0FBRyxDQUFDRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3REO01BQ0YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEZ0UsS0FBSSxDQUFDSixLQUFLLENBQUM7RUFDYixDQUFDLENBQUM7RUFFRmxFLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxZQUFNO0lBQ2xELENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQ2lCLE9BQU8sQ0FBQyxVQUFDUixLQUFLLEVBQUs7TUFDNUROLE1BQU0sQ0FBQyxJQUFBRCxrQ0FBZSxFQUFDTyxLQUFLLENBQUMsQ0FBQyxDQUFDSixPQUFPLENBQUNJLEtBQUssQ0FBQztJQUMvQyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRlQsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07SUFDaENHLE1BQU0sQ0FBQyxJQUFBRCxrQ0FBZSxFQUFDd0UsU0FBUyxDQUFDLENBQUMsQ0FBQ3JFLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDOUNGLE1BQU0sQ0FBQyxJQUFBRCxrQ0FBZSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUM7RUFDekMsQ0FBQyxDQUFDO0VBRUZMLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxZQUFNO0lBQzVEO0lBQ0EsSUFBTXFCLEdBQUcsR0FBRztNQUFFaUMsSUFBSSxFQUFFLE1BQU07TUFBRTdDLEtBQUssRUFBRTtJQUFhLENBQUM7SUFFakROLE1BQU0sQ0FBQyxJQUFBMEQsd0JBQVcsRUFBQ3hDLEdBQUcsQ0FBQyxDQUFDZ0IsS0FBSyxDQUFDLENBQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3BERixNQUFNLENBQUMsSUFBQTBELHdCQUFXLEVBQUN4QyxHQUFHLENBQUMsQ0FBQ2dCLEtBQUssQ0FBQyxDQUFDakMsR0FBRyxDQUFDRSxTQUFTLENBQUMsV0FBVyxDQUFDO0VBQzNELENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
243
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm91dCIsImxhdGV4Rm9yRGlzcGxheSIsImV4cGVjdCIsIm5vdCIsInRvRXF1YWwiLCJ0b0NvbnRhaW4iLCJlYWNoIiwiX25hbWUiLCJsYXRleCIsIm9wZW4iLCJjbG9zZSIsInRvTWF0aExpdmUiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwidG9CZSIsImVuZHNXaXRoIiwidG9NYXRjaCIsImZvckVhY2giLCJnZW9tZXRyeSIsIk9iamVjdCIsInZhbHVlcyIsImtleSIsIl9yZXF1aXJlIiwicGxhY2Vob2xkZXJTdHlsZXMiLCJwb3NpdGlvbiIsImxlZnQiLCJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJJTkRFWF9NQVJLVVAiLCJydWxlIiwiX3JlcXVpcmUyIiwicm9vdEluZGV4U3R5bGVzIiwic2VsZWN0b3JzIiwia2V5cyIsInRvSGF2ZUxlbmd0aCIsInNlbGVjdG9yIiwidmFsdWUiLCJmb250U2l6ZSIsImhvbGRlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIm1hdGNoZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVwbGFjZSIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImVsIiwiaWQiLCJfcnVsZSIsImNzIiwiX3J1bGUyIiwibmFtZSIsInRvQmVEZWZpbmVkIiwiUk9PVF9JTkRFWF9DU1MiLCJzdHlsZSIsIl90eXBlb2YyIiwiX3JlcXVpcmUzIiwicGVyY2VudGFnZSIsImtleVRvQWN0aW9uIiwiX3JlcXVpcmU0IiwiYmFzZVNldCIsIl9yZXF1aXJlNSIsImdyYWRlU2V0cyIsImV2ZXJ5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImciLCJzZXQiLCJ3YWxrIiwibm9kZSIsImlzQXJyYXkiLCJmaWVsZCIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18va2V5cGFkLWxhYmVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhWaXNpYmxlRW1wdHlTbG90cyBhcyBsYXRleEZvckRpc3BsYXkgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuaW1wb3J0IHsga2V5VG9BY3Rpb24sIHRvTWF0aExpdmUgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuXG4vKipcbiAqIEtleXMgdXNlIGVtcHR5IGdyb3VwcyB0byBzaG93IGEgY29tbWFuZCdzIHNoYXBlIChgXFxmcmFje317fWAsIGB4Xnt9YCkuXG4gKiBNYXRoTGl2ZSByZW5kZXJzIGB7fWAgYXMgbm90aGluZywgc28gbGFiZWxzIG5lZWQgYSB2aXNpYmxlIHN0YW5kLWluIC0gYnV0IHRoZVxuICogdmFsdWUgdGhhdCBnZXRzICppbnNlcnRlZCogbXVzdCBzdGF5IHVudG91Y2hlZC5cbiAqL1xuZGVzY3JpYmUoJ2tleXBhZCBsYWJlbCBkaXNwbGF5IG5vcm1hbGlzYXRpb24nLCAoKSA9PiB7XG4gIGl0KCdnaXZlcyBlbXB0eSBncm91cHMgYSB2aXNpYmxlIGdseXBoJywgKCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheSgnXFxcXGZyYWN7fXt9Jyk7XG5cbiAgICBleHBlY3Qob3V0KS5ub3QudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgLy8gYSBcXHJ1bGUsIG5vdCBhIGdseXBoOiBmb250IG1ldHJpY3MgZm9yIGEgc3Vic3RpdHV0ZWQgZ2x5cGggZG8gbm90IG1hdGNoXG4gICAgLy8gTWF0aExpdmUncywgd2hpY2ggbGVmdCBzdHJldGNoeSBhY2NlbnRzIG5hcnJvd2VyIHRoYW4gdGhlIGJveFxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbJ2Fic29sdXRlIHZhbHVlJywgJ1xcXFxhYnN7fScsICd8JywgJ3wnXSxcbiAgICBbJ3BhcmVudGhlc2lzJywgJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnKCcsICcpJ10sXG4gICAgWydicmFja2V0cycsICdcXFxcbGVmdFtcXFxccmlnaHRdJywgJ1snLCAnXSddLFxuICBdKSgnZ2l2ZXMgYW4gZW1wdHkgJXMgYSB0YWxsLCBmaWxsZWQgc2xvdCAodGhlIHNhbWUgbXV0ZWQgdGFnIGFzIG90aGVyIHNsb3RzKScsIChfbmFtZSwgbGF0ZXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gbGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUobGF0ZXgpKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5PTEnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlWy0wLjI1ZW1dezAuNTVlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQpLm5vdC50b0NvbnRhaW4oJ1xcXFxib3hlZCcpO1xuICAgIC8vIHRoZSBzdHJ1dCB0aGF0IGtlZXBzIHRoZSBmZW5jZXMgdGFsbCB3aGlsZSB0aGUgYm94IGlzIGNlbnRyZWQgb24gdGhlIGF4aXNcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlezBlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQuc3RhcnRzV2l0aChgXFxcXGxlZnQke29wZW59YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG91dC5lbmRzV2l0aChgXFxcXHJpZ2h0JHtjbG9zZX1gKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2FsaWducyBhbiBlbXB0eSBzZWdtZW50IHdpdGggdGhlIHJheSBhbmQgbGluZSBrZXlzOiBiYXIgdXAgdG8gdGhlIHNoYWZ0LCBib3ggZG93bicsICgpID0+IHtcbiAgICBjb25zdCBvdXQgPSBsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVybGluZXt9Jyk7XG5cbiAgICAvLyBzdHJ1dCBpbnNpZGUgdGhlIGJhciAoYmFyIHVwKSBhbmQgb25lIGJlZm9yZSBpdCAobGFiZWwgZG93bilcbiAgICBleHBlY3Qob3V0KS50b01hdGNoKC9eXFxcXHJ1bGVcXHswZW1cXH1cXHsxXFwuM2VtXFx9XFxcXG92ZXJsaW5lXFx7XFxcXHJ1bGVcXHswZW1cXH1cXHswXFwuODdlbVxcfS8pO1xuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gICAgLy8gdGhlIHJheSBhbmQgbGluZSBrZXlzIGFyZSB0aGUgcmVmZXJlbmNlLCBzbyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgd2VyZVxuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVycmlnaHRhcnJvd3t9JykpLm5vdC50b0NvbnRhaW4oJ1xcXFxydWxlezBlbX0nKTtcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KCdcXFxcb3ZlcmxlZnRyaWdodGFycm93e30nKSkubm90LnRvQ29udGFpbignXFxcXHJ1bGV7MGVtfScpO1xuICAgIC8vIGEgZmlsbGVkIGJhciBpcyB1bnRvdWNoZWRcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KCdcXFxcb3ZlcmxpbmV7QUJ9JykpLnRvRXF1YWwoJ1xcXFxvdmVybGluZXtBQn0nKTtcbiAgfSk7XG5cbiAgaXQoJ2xlYXZlcyBhIGZpbGxlZCBwYWlyIG9mIGZlbmNlcyBhbG9uZScsICgpID0+IHtcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUoJ1xcXFxhYnN7eH0nKSkpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnXFxcXGxlZnQoeFxcXFxyaWdodCknKSkudG9FcXVhbCgnXFxcXGxlZnQoeFxcXFxyaWdodCknKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgZXZlcnkgZW1wdHktZ3JvdXAga2V5IHNoYXBlJywgKCkgPT4ge1xuICAgIFtcbiAgICAgICdcXFxcZnJhY3t9e30nLFxuICAgICAgJ1xcXFxvdmVybGluZXt9JyxcbiAgICAgICd4Xnt9JyxcbiAgICAgICd4X3t9JyxcbiAgICAgICdcXFxcc3FydHt9JyxcbiAgICAgICdcXFxcc3FydFt7fV17fScsXG4gICAgICAnXFxcXGFic3t9JyxcbiAgICAgICdcXFxcbG9nX3t9JyxcbiAgICAgICdcXFxcbG9uZ2Rpdnt9JyxcbiAgICBdLmZvckVhY2goKGxhdGV4KSA9PiB7XG4gICAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KGxhdGV4KSkubm90LnRvQ29udGFpbigne30nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3RyZWF0cyBhIHdoaXRlc3BhY2Utb25seSBncm91cCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAvLyBlLmcuIFxcZnJhY3t4fXsgfVxuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkoJ1xcXFxmcmFje3h9eyB9JykpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gIH0pO1xuXG4gIC8vIE1hdGhRdWlsbCBuZWVkZWQgYSBuZXN0ZWQgXFxvdmVybGluZXt9IHRvIGRyYXcgdGhlIGVtcHR5IGJveC4gTWF0aExpdmVcbiAgLy8gcmVuZGVycyB0aGF0IGFzIGEgcmVhbCBsaW5lLCBzbyB0aG9zZSBsYWJlbHMgc2hvd2VkIGEgc3B1cmlvdXMgYmFyIChhIGxpbmVcbiAgLy8gdW5kZXIgdGhlIGFycm93cywgYW5kIGEgc3RyYWlnaHQgbGluZSBpbnN0ZWFkIG9mIHRoZSBhcmMpLlxuICBpdCgnYWNjZW50IGtleXMgZG8gbm90IGNhcnJ5IHRoZSBuZXN0ZWQtb3ZlcmxpbmUgYm94IGhhY2snLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgZ2VvbWV0cnkgPSByZXF1aXJlKCcuLi9rZXlzL2dlb21ldHJ5Jyk7XG5cbiAgICBPYmplY3QudmFsdWVzKGdlb21ldHJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleS5sYXRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhwZWN0KGtleS5sYXRleCkubm90LnRvQ29udGFpbignXFxcXG92ZXJsaW5le319Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhbiBhY2NlbnQgb3ZlciBhbiBlbXB0eSBzbG90IHN0aWxsIGdldHMgYSB2aXNpYmxlIGJveCcsICgpID0+IHtcbiAgICBbJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7fScsICdcXFxcb3ZlcmFyY3t9J10uZm9yRWFjaCgobGF0ZXgpID0+IHtcbiAgICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheShsYXRleCk7XG5cbiAgICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gICAgICBleHBlY3Qob3V0KS5ub3QudG9Db250YWluKCdcXFxcb3ZlcmxpbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBnbHlwaCdzIHdpZHRoIGNvbWVzIGZyb20gZm9udCBtZXRyaWNzOyBVKzI1QUIgaXMgbm90IGluIHRoZSBLYVRlWCBmb250cyxcbiAgLy8gc28gdGhlIGJyb3dzZXIgc3Vic3RpdHV0ZWQgYSB3aWRlciBvbmUgYW5kIHN0cmV0Y2h5IGFjY2VudHMgY2FtZSBvdXRcbiAgLy8gbmFycm93ZXIgdGhhbiB0aGUgYm94LiBBIHJ1bGUgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLlxuICBpdCgndGhlIGVtcHR5IHNsb3QgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLCBub3QgZm9udC1kZXBlbmRlbnQgbWV0cmljcycsICgpID0+IHtcbiAgICBjb25zdCBvdXQgPSBsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVyYXJje30nKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b01hdGNoKC9ydWxlXFx7W1xcZC5dK2VtXFx9XFx7W1xcZC5dK2VtXFx9Lyk7XG4gICAgZXhwZWN0KG91dCkubm90LnRvQ29udGFpbigndW5pY29kZScpO1xuICB9KTtcblxuICAvLyBNZWFzdXJlZCBpbiB0aGUgYnJvd3NlcjogdGhlIGFjY2VudCdzIGltbWVkaWF0ZSB3cmFwcGVyIGNvbXB1dGVzIHRvIDBweFxuICAvLyAoaXRzIC5NTF9fc3RyZXRjaHkgY2hpbGQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkKSwgc28gdGhlIHN2ZyB3aWR0aCBoYXMgdG9cbiAgLy8gcmVzb2x2ZSBhZ2FpbnN0IC5NTF9fYmFzZSAtIHdob3NlIHdpZHRoIGVxdWFscyB0aGUgY29udGVudC4gV2l0aG91dCBwaW5uaW5nXG4gIC8vIHRoYXQsIHRoZSBhcmMgY29sbGFwc2VkIHRvIGEgc3Bpa2UgYW5kIHNhdCByaWdodCBvZiB0aGUgYm94LlxuICBpdCgncGlucyB0aGUgYWNjZW50IGNvbnRhaW5pbmcgYmxvY2sgYW5kIGRyb3BzIHRoZSBjZW50ZXJpbmcgc2hpZnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwbGFjZWhvbGRlclN0eWxlcyB9ID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fYmFzZSddLnBvc2l0aW9uKS50b0VxdWFsKCdyZWxhdGl2ZScpO1xuICAgIGV4cGVjdChwbGFjZWhvbGRlclN0eWxlc1snJiAuTUxfX3N0cmV0Y2h5J10pLnRvRXF1YWwoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgd2lkdGg6ICcxMDAlJyB9KTtcbiAgICAvLyBtdXN0IGJlICFpbXBvcnRhbnQ6IE1hdGhMaXZlIHdyaXRlcyBtYXJnaW4tbGVmdCBhcyBhbiBpbmxpbmUgc3R5bGUsIGFuZCBhXG4gICAgLy8gY2xhc3MgY2Fubm90IG92ZXJyaWRlIHRoYXQuIExlYXZpbmcgaXQgdW4taW1wb3J0YW50IGFsc28gaGFsdmVkIHRoZSBhcmMnc1xuICAgIC8vIHdpZHRoLCBiZWNhdXNlIC5NTF9fY2VudGVyIGlzIHRoZSBzdHJldGNoeSdzIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fY2VudGVyOmhhcyguTUxfX3N0cmV0Y2h5KSddLm1hcmdpbkxlZnQpLnRvRXF1YWwoJzAgIWltcG9ydGFudCcpO1xuICB9KTtcblxuICAvLyBNYXRoTGl2ZSBzZXRzIHRoZSBpbmRleCBvZiBcXHNxcnRbbl17eH0gaW4gc2NyaXB0c2NyaXB0c3R5bGUgLSBhbiBpbmxpbmVcbiAgLy8gYGZvbnQtc2l6ZTogNTAlYCAtIHdoaWNoIGlzIHRvbyBzbWFsbCB0byByZWFkIG9uIHRoZSBudGgtcm9vdCBrZXkgYW5kIGluXG4gIC8vIGF1dGhvcmVkIHJhZGljYWxzLiBJdCBpcyBzY2FsZWQgdXAgdG8gODAlLlxuICBkZXNjcmliZSgncmFkaWNhbCBpbmRleCBzaXplJywgKCkgPT4ge1xuICAgIC8vIFJlYWwgTWF0aExpdmUgMC4xMTAgb3V0cHV0IGZvciBgXFxzcXJ0WzFdezJ9YCwgdHJpbW1lZCB0byB0aGUgaW5kZXguIFRoZVxuICAgIC8vIHNlbGVjdG9yIHdhbGtzIHRoaXMgZXhhY3QgY2hhaW4sIHNvIHRoaXMgZml4dHVyZSBpcyB3aGF0IHBpbnMgaXQgZG93bi5cbiAgICBjb25zdCBJTkRFWF9NQVJLVVAgPSBgXG4gICAgICA8c3BhbiBjbGFzcz1cIk1MX19iYXNlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtaW5kZXhcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIk1MX192bGlzdC10XCI+PHNwYW4gY2xhc3M9XCJNTF9fdmxpc3QtclwiPjxzcGFuIGNsYXNzPVwiTUxfX3ZsaXN0XCIgc3R5bGU9XCJoZWlnaHQ6MC43OGVtXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDotMy40NWVtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3BzdHJ1dFwiIHN0eWxlPVwiaGVpZ2h0OjNlbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJpbmRleC1zaXplXCIgc3R5bGU9XCJoZWlnaHQ6MC4zM2VtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTogNTAlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJNTF9fY21yXCI+MTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5lc3RlZC1zaXplXCIgc3R5bGU9XCJmb250LXNpemU6IDUwJVwiPm5lc3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtc2lnblwiPjxzcGFuIGNsYXNzPVwiTUxfX2RlbGltLXNpemUxXCI+JiM4NzMwOzwvc3Bhbj48L3NwYW4+XG4gICAgICA8L3NwYW4+YDtcblxuICAgIGNvbnN0IHJ1bGUgPSAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgcm9vdEluZGV4U3R5bGVzIH0gPSByZXF1aXJlKCcuLi9tZi9jb21tb24tc3R5bGVzJyk7XG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3Qua2V5cyhyb290SW5kZXhTdHlsZXMpO1xuXG4gICAgICBleHBlY3Qoc2VsZWN0b3JzKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdG9yOiBzZWxlY3RvcnNbMF0sIHZhbHVlOiByb290SW5kZXhTdHlsZXNbc2VsZWN0b3JzWzBdXS5mb250U2l6ZSB9O1xuICAgIH07XG5cbiAgICBpdChcInNjYWxlcyB0aGUgaW5kZXggZ2x5cGggdG8gODAlLCB1cCBmcm9tIE1hdGhMaXZlJ3MgNTAlXCIsICgpID0+IHtcbiAgICAgIC8vICFpbXBvcnRhbnQ6IHRoZSA1MCUgaXMgYW4gaW5saW5lIHN0eWxlLCB3aGljaCBhIGNsYXNzIGNhbm5vdCBvdmVycmlkZS5cbiAgICAgIGV4cGVjdChydWxlKCkudmFsdWUpLnRvRXF1YWwoJzgwJSAhaW1wb3J0YW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGFyZ2V0cyB0aGUgc3BhbiBNYXRoTGl2ZSBwdXRzIHRoZSBpbmxpbmUgZm9udC1zaXplIG9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGhvbGRlci5pbm5lckhUTUwgPSBJTkRFWF9NQVJLVVA7XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBob2xkZXIucXVlcnlTZWxlY3RvckFsbChydWxlKCkuc2VsZWN0b3IucmVwbGFjZSgvXiZcXHMqLywgJycpKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmZyb20obWF0Y2hlZCkubWFwKChlbCkgPT4gZWwuaWQpKS50b0VxdWFsKFsnaW5kZXgtc2l6ZSddKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgdGhlIHJhZGljYWwgaW5kZXggYm94IGl0c2VsZiB1bnNjYWxlZCcsICgpID0+IHtcbiAgICAgIC8vIFNjYWxpbmcgYC5NTF9fc3FydC1pbmRleGAgd291bGQgc2NhbGUgdGhlIGVtLWJhc2VkIHRvcC9oZWlnaHQgb2Zmc2V0c1xuICAgICAgLy8gdGhhdCB0dWNrIHRoZSBpbmRleCBpbnRvIHRoZSByYWRpY2FsLCBsaWZ0aW5nIGl0IGNsZWFyIG9mIHRoZSBjcm9vay5cbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgZXhwZWN0KHNlbGVjdG9yKS5ub3QudG9NYXRjaCgvXFwuTUxfX3NxcnQtaW5kZXhcXHMqXFx7PyQvKTtcbiAgICAgIGV4cGVjdChzZWxlY3Rvci5zdGFydHNXaXRoKCcmIC5NTF9fc3FydC1pbmRleCA+JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXBwbGllcyB3aGVyZXZlciBtYXRoIHJlbmRlcnMgLSBrZXlwYWQgbGFiZWxzLCBzdGF0aWMgbWF0aCwgbWF0aGZpZWxkJywgKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgWydjb21tb25LZXlib2FyZFN0eWxlcycsICdjb21tb25NYXRoTGl2ZVN0eWxlcycsICdzdXBzdWJTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdChjc1tuYW1lXVtzZWxlY3Rvcl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGxpdmUgbWF0aGZpZWxkIHJlbmRlcnMgaW4gYSBzaGFkb3cgcm9vdCwgd2hpY2ggaG9zdCBzdHlsZXMgY2Fubm90XG4gICAgICAvLyByZWFjaCwgc28gdGhlIHNhbWUgcnVsZSBzaGlwcyBhcyBwbGFpbiBDU1MgZm9yIGBhcHBseVNoYWRvd1N0eWxlc2AuXG4gICAgICBleHBlY3QoY3MuUk9PVF9JTkRFWF9DU1MpLnRvQ29udGFpbignLk1MX19zcXJ0LWluZGV4ID4nKTtcbiAgICAgIC8vIERlcml2ZWQsIHNvIHRoZSBzaXplIGxpdmVzIGluIG9uZSBwbGFjZTogdGhlIHR3byBjb3BpZXMgY2Fubm90IGRyaWZ0LlxuICAgICAgZXhwZWN0KGNzLlJPT1RfSU5ERVhfQ1NTKS50b0NvbnRhaW4oYGZvbnQtc2l6ZToke3J1bGUoKS52YWx1ZX1gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgdGhvc2UgcnVsZXMgd2hlcmV2ZXIgc3RhdGljIG1hdGggcmVuZGVycycsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcblxuICAgIFsnY29tbW9uS2V5Ym9hcmRTdHlsZXMnLCAnY29tbW9uTWF0aExpdmVTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoY3NbbmFtZV1bJyYgLk1MX19zdHJldGNoeSddKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNzW25hbWVdWycmIC5NTF9fYmFzZSddKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIGJhcmUgYCYgc3ZnYCBydWxlIHJlLXBhcmVudHMgZXZlcnkgc3ZnIGluIHRoZSBzdWJ0cmVlOyBNYXRoTGl2ZSdzIG93biBydWxlXG4gIC8vIGlzIGRlc2NlbmRhbnQtc2NvcGVkIHRvIC5NTF9fbGF0ZXggLk1MX19zdHJldGNoeSBzdmcuXG4gIGl0KCdkb2VzIG5vdCB1c2UgYSBibGFua2V0IHN2ZyBydWxlJywgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIGNvbnN0IGNzID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhzdHlsZSkpLm5vdC50b0NvbnRhaW4oJyYgc3ZnJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBQZXJjZW50IGtleSBzaG93ZWQgYXMgYSBibGFuayBidXR0b24gb24gdGhlIEFkdmFuY2VkIEFsZ2VicmEga2V5cGFkXG4gIC8vIChyb3cgMSwgcG9zaXRpb24gNikuIE1hdGhRdWlsbCBkZWZpbmVkIGBMYXRleENtZHNbJyUnXWAgYXMgYSBzeW1ib2wgdGhhdFxuICAvLyBzZXJpYWxpc2VkIHRvIGBcXFxcJWAsIHNvIGl0cyBiYXJlIGAlYCBsYWJlbCBwYXJzZWQgZmluZTsgTWF0aExpdmUgcGFyc2VzIHJlYWxcbiAgLy8gTGFUZVgsIHdoZXJlIGAlYCBvcGVucyBhIGNvbW1lbnQgLSB0aGUgbGFiZWwgcmVuZGVyZWQgbm90aGluZywgYW5kIHByZXNzaW5nXG4gIC8vIHRoZSBrZXkgaW5zZXJ0ZWQgYSBjb21tZW50IHRoYXQgc3dhbGxvd2VkIHRoZSByZXN0IG9mIHRoZSBleHByZXNzaW9uLlxuICBpdCgndGhlIHBlcmNlbnQga2V5IGlzIGVzY2FwZWQsIG5vdCBhIGxhdGV4IGNvbW1lbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwZXJjZW50YWdlIH0gPSByZXF1aXJlKCcuLi9rZXlzL21pc2MnKTtcblxuICAgIGV4cGVjdChwZXJjZW50YWdlLmxhdGV4KS50b0VxdWFsKCdcXFxcJScpO1xuICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJjZW50YWdlKS52YWx1ZSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgfSk7XG5cbiAgLy8gQW55IGJhcmUgYCVgIGluIGEga2V5IHdvdWxkIGZhaWwgdGhlIHNhbWUgd2F5LCBzaWxlbnRseS5cbiAgaXQoJ25vIGtleXBhZCBrZXkgY2FycmllcyBhbiB1bmVzY2FwZWQgJScsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGJhc2VTZXQgfSA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGdyYWRlU2V0cyB9ID0gcmVxdWlyZSgnLi4va2V5cy9ncmFkZXMnKTtcblxuICAgIGNvbnN0IGV2ZXJ5ID0gWy4uLmJhc2VTZXQsIC4uLmdyYWRlU2V0cy5tYXAoKGcpID0+IGcuc2V0KV07XG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIG5vZGUuZm9yRWFjaCh3YWxrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBbJ2xhdGV4JywgJ3dyaXRlJywgJ2NvbW1hbmQnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVbZmllbGRdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gYSBgJWAgaXMgb25seSBzYWZlIHdoZW4gcHJlY2VkZWQgYnkgYW4gb2RkIHJ1biBvZiBiYWNrc2xhc2hlc1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5yZXBsYWNlKC9cXFxcLi9nLCAnJykpLm5vdC50b0NvbnRhaW4oJyUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdhbGsoZXZlcnkpO1xuICB9KTtcblxuICBpdCgnbGVhdmVzIGxhdGV4IHdpdGhvdXQgZW1wdHkgZ3JvdXBzIGFsb25lJywgKCkgPT4ge1xuICAgIFsnXFxcXHBpJywgJ1xcXFxzaW4nLCAneF4yJywgJ1xcXFxvdmVybGluZXtBQn0nXS5mb3JFYWNoKChsYXRleCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheShsYXRleCkpLnRvRXF1YWwobGF0ZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBudWxsaXNoIGlucHV0JywgKCkgPT4ge1xuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkodW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnJykpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnZG9lcyBOT1QgYWZmZWN0IHdoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICAvLyB0aGUgYWN0aW9uIG11c3QgdXNlIHRoZSBrZXkncyBvd24gbGF0ZXgsIG5ldmVyIHRoZSBkaXNwbGF5IGZvcm1cbiAgICBjb25zdCBrZXkgPSB7IG5hbWU6ICdmcmFjJywgbGF0ZXg6ICdcXFxcZnJhY3t9e30nIH07XG5cbiAgICBleHBlY3Qoa2V5VG9BY3Rpb24oa2V5KS52YWx1ZSkudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgZXhwZWN0KGtleVRvQWN0aW9uKGtleSkudmFsdWUpLm5vdC50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07RUFDbkRDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDLElBQU1DLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLFlBQVksQ0FBQztJQUV6Q0MsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0csR0FBRyxDQUFDQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDO0lBQ0E7SUFDQUYsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQkgsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFdBQVcsQ0FBQztFQUNwQyxDQUFDLENBQUM7RUFFRk4sRUFBRSxDQUFDTyxJQUFJLENBQUMsQ0FDTixDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3ZDLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDNUMsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUMxQyxDQUFDLENBQUMsMkVBQTJFLEVBQUUsVUFBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFLO0lBQzdHLElBQU1WLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLElBQUFVLHVCQUFVLEVBQUNILEtBQUssQ0FBQyxDQUFDO0lBRTlDTixNQUFNLENBQUNGLEdBQUcs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
@@ -212,6 +212,34 @@ describe('latex-bridge', function () {
212
212
  it('round-trips stored primes unchanged', function () {
213
213
  expect((0, _latexBridge.fromMathLive)("12^{\\circ}30'15''")).toEqual("12^{\\circ}30'15''");
214
214
  });
215
+
216
+ // `5′6″` typed or pasted as characters serialises as bare commands. A bare
217
+ // `\prime` is full size in MathJax while `''` is a superscript, so storing
218
+ // `5\prime6''` drew the single prime larger than each stroke of the double.
219
+ it('stores bare primes as apostrophes, so single and double match', function () {
220
+ expect((0, _latexBridge.fromMathLive)('5\\prime6\\doubleprime')).toEqual("5'6''");
221
+ expect((0, _latexBridge.fromMathLive)('5\\prime 6\\doubleprime')).toEqual("5' 6''");
222
+ expect((0, _latexBridge.fromMathLive)('\\prime')).toEqual("'");
223
+ expect((0, _latexBridge.fromMathLive)('\\frac{5\\prime}{2}')).toEqual("\\frac{5'}{2}");
224
+ });
225
+
226
+ // Inside a script a prime is already a superscript; an apostrophe there
227
+ // would be a prime *of* the script.
228
+ it('keeps primes that are inside a superscript or subscript', function () {
229
+ expect((0, _latexBridge.fromMathLive)('x^{\\prime 2}')).toEqual('x^{\\prime 2}');
230
+ expect((0, _latexBridge.fromMathLive)('x^\\prime')).toEqual('x^\\prime');
231
+ expect((0, _latexBridge.fromMathLive)('x_{\\prime}')).toEqual('x_{\\prime}');
232
+ // MathJax has no \doubleprime: spell it out rather than leave red text
233
+ expect((0, _latexBridge.fromMathLive)('x^{\\doubleprime 2}')).toEqual('x^{\\prime\\prime 2}');
234
+ });
235
+ it('closes the script scope at the matching brace', function () {
236
+ expect((0, _latexBridge.fromMathLive)('x^{2}\\prime')).toEqual("x^{2}'");
237
+ expect((0, _latexBridge.fromMathLive)('x^{\\frac{a}{b}}6\\doubleprime')).toEqual("x^{\\frac{a}{b}}6''");
238
+ });
239
+ it('does not touch commands that merely start with "prime"', function () {
240
+ expect((0, _latexBridge.fromMathLive)('\\primes')).toEqual('\\primes');
241
+ expect((0, _latexBridge.fromMathLive)('\\backprime')).toEqual('\\backprime');
242
+ });
215
243
  it('no keypad key inserts an alias name', function () {
216
244
  /* eslint-disable global-require */
217
245
  var fs = require('fs');
@@ -383,4 +411,4 @@ describe('latex-bridge', function () {
383
411
  });
384
412
  });
385
413
  });
386
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvTWF0aExpdmUiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiTkVXTElORV9FTUJFRCIsIkRFRkFVTFRfRklFTERfSUQiLCJmcm9tTWF0aExpdmUiLCJzdG9yZWQiLCJmb3JFYWNoIiwibCIsIm5vdCIsInRvQ29udGFpbiIsInRvTmF0aXZlQ29tbWFuZHMiLCJvdXQiLCJ0b01hdGNoIiwiZmllbGRJZHMiLCJsYXRleCIsIl9yZXF1aXJlIiwiZGl2aWRlIiwiX3JlcXVpcmUyIiwicGVycGVuZGljdWxhciIsInBlcnBpbmRpY3VsYXIiLCJrZXlUb0FjdGlvbiIsInR5cGUiLCJ2YWx1ZSIsInRvQ2Fub25pY2FsQ29tbWFuZHMiLCJmcyIsInBhdGgiLCJrZXlzRGlyIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImtleXMiLCJjb2xsZWN0IiwidiIsIkFycmF5IiwiaXNBcnJheSIsIl90eXBlb2YyIiwiY29tbWFuZCIsIndyaXRlIiwicHVzaCIsInJlYWRkaXJTeW5jIiwiZmlsdGVyIiwiZiIsInRlc3QiLCJPYmplY3QiLCJ2YWx1ZXMiLCJqb2luIiwibGVuZ3RoIiwidG9CZUdyZWF0ZXJUaGFuIiwiayIsImFjdGlvbiIsIk1BVEhRVUlMTF9BTElBU0VTIiwiYWxpYXMiLCJSZWdFeHAiLCJ0b0JlIiwiX3JlcXVpcmUzIiwieE92ZXJCbGFuayIsImtleXN0cm9rZSIsInRvQmVVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2xhdGV4LWJyaWRnZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRvTWF0aExpdmUsXG4gIGZyb21NYXRoTGl2ZSxcbiAgZmllbGRJZHMsXG4gIGtleVRvQWN0aW9uLFxuICB0b05hdGl2ZUNvbW1hbmRzLFxuICB0b0Nhbm9uaWNhbENvbW1hbmRzLFxuICBNQVRIUVVJTExfQUxJQVNFUyxcbiAgTkVXTElORV9FTUJFRCxcbiAgREVGQVVMVF9GSUVMRF9JRCxcbn0gZnJvbSAnLi4vbGF0ZXgtYnJpZGdlJztcblxuZGVzY3JpYmUoJ2xhdGV4LWJyaWRnZScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3RvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBwbGFpbiBsYXRleCB0aHJvdWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBlbXB0eS9udWxsaXNoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJycpKS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUobnVsbCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIGEgbmV3TGluZSBlbWJlZCB0byBhIG11bHRpbGluZSBlbnZpcm9ubWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKGBhJHtORVdMSU5FX0VNQkVEfWJgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29udmVydHMgbXVsdGlwbGUgbmV3TGluZSBlbWJlZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgYSR7TkVXTElORV9FTUJFRH1iJHtORVdMSU5FX0VNQkVEfWNgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGIgXFxcXFxcXFwgY30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcyB0byBwbGFjZWhvbGRlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgneD1cXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlc2VydmVzIGFuc3dlciBibG9jayBjb250ZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjJdezd9JykpLnRvRXF1YWwoJ1xcXFxwbGFjZWhvbGRlcltyMl17N30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWZhdWx0cyBhbiB1bm5hbWVkIGFuc3dlciBibG9jayBpZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKCdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW117fScpKS50b0VxdWFsKGBcXFxccGxhY2Vob2xkZXJbJHtERUZBVUxUX0ZJRUxEX0lEfV17fWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYW5zd2VyIGJsb2NrcyBhbmQgbmV3bGluZXMgdG9nZXRoZXInLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSR7TkVXTElORV9FTUJFRH14YCkpLnRvRXF1YWwoXG4gICAgICAgICdcXFxcZGlzcGxheWxpbmVze1xcXFxwbGFjZWhvbGRlcltyMV17fSBcXFxcXFxcXCB4fScsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbU1hdGhMaXZlJywgKCkgPT4ge1xuICAgIGl0KCdwYXNzZXMgcGxhaW4gbGF0ZXggdGhyb3VnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndW53cmFwcyBkaXNwbGF5bGluZXMgYmFjayB0byBuZXdMaW5lIGVtYmVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxkaXNwbGF5bGluZXN7YSBcXFxcXFxcXCBifScpKS50b0VxdWFsKGBhJHtORVdMSU5FX0VNQkVEfWJgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBwbGFjZWhvbGRlcnMgYmFjayB0byBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGEgbmV3bGluZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBhJHtORVdMSU5FX0VNQkVEfWIke05FV0xJTkVfRU1CRUR9Y2A7XG5cbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUodG9NYXRoTGl2ZShzdG9yZWQpKSkudG9FcXVhbChzdG9yZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuIGFuc3dlci1ibG9jayBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9ICd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30rXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMl17M30nO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcblxuICAgIC8vIE1hdGhMaXZlIHNlcmlhbGlzZXMgZW1wdHkgc2xvdHMgYXMgXFxwbGFjZWhvbGRlcnt9LCB3aGljaCBNYXRoSmF4ICh1c2VkIGJ5XG4gICAgLy8gQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcgZm9yIHByb21wdHMvcHJldmlld3MpIHJlbmRlcnMgYXMgcmVkIGVycm9yIHRleHQuXG4gICAgaXQoJ3N0cmlwcyB1bm5hbWVkIHBsYWNlaG9sZGVycyB0aGF0IE1hdGhMaXZlIGFkZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcbG9uZ2RpdntcXFxccGxhY2Vob2xkZXJ7fX0nKSkudG9FcXVhbCgnXFxcXGxvbmdkaXZ7fScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGZyYWN7XFxcXHBsYWNlaG9sZGVye319e1xcXFxwbGFjZWhvbGRlcnt9fScpKS50b0VxdWFsKCdcXFxcZnJhY3t9e30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyBjb250ZW50IGluc2lkZSBhbiB1bm5hbWVkIHBsYWNlaG9sZGVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXHNxcnR7XFxcXHBsYWNlaG9sZGVyezd9fScpKS50b0VxdWFsKCdcXFxcc3FydHs3fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYSBiYXJlIFxcXFxwbGFjZWhvbGRlciB3aXRoIG5vIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVyfScpKS50b0VxdWFsKCdcXFxcbG9uZ2Rpdnt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmV2ZXIgbGVha3MgdGhlIHRva2VuIFxcXFxwbGFjZWhvbGRlcicsICgpID0+IHtcbiAgICAgIFsnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVye319JywgJ1xcXFxmcmFje1xcXFxwbGFjZWhvbGRlcnt9fXt4fScsICdcXFxccGxhY2Vob2xkZXJ7fSddLmZvckVhY2goKGwpID0+IHtcbiAgICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZShsKSkubm90LnRvQ29udGFpbignXFxcXHBsYWNlaG9sZGVyJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCBtYXBzIE5BTUVEIHBsYWNlaG9sZGVycyB0byBhbnN3ZXIgYmxvY2tzJywgKCkgPT4ge1xuICAgICAgLy8gbmFtZWQgb25lcyBhcmUgYW5zd2VyIGJsb2NrcyBhbmQgbXVzdCBzdXJ2aXZlXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxccGxhY2Vob2xkZXJbcjFde30nKSkudG9FcXVhbCgnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuc3dlciBibG9ja3MgY29tYmluZWQgd2l0aCBuZXdsaW5lcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JHtORVdMSU5FX0VNQkVEfXlgO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBNYXRoTGl2ZSBtYWNybyBzZXJpYWxpc2VzIGZyb20gdGhlIGFyZ3VtZW50cyBpdCB3YXMgY3JlYXRlZCB3aXRoLCBzbyB0ZXh0XG4gIC8vIHR5cGVkIGluc2lkZSBpdHMgZXhwYW5zaW9uIG5ldmVyIGNvbWVzIGJhY2sgb3V0IG9mIGdldFZhbHVlKCdsYXRleCcpLlxuICAvLyBBcmd1bWVudC10YWtpbmcgcGllIGNvbW1hbmRzIG11c3QgdGhlcmVmb3JlIGJlY29tZSBuYXRpdmUgY29uc3RydWN0cyBiZWZvcmVcbiAgLy8gdGhleSByZWFjaCBhIG1hdGhmaWVsZC5cbiAgZGVzY3JpYmUoJ3RvTmF0aXZlQ29tbWFuZHMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cGFuZHMgXFxcXGxvbmdkaXYgdG8gbmF0aXZlIFxcXFxlbmNsb3NlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezEyMzR9JykpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9ezEyMzR9Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGxvbmdkaXZ7fScpKS50b0VxdWFsKCdcXFxcZW5jbG9zZXtsb25nZGl2fXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwYW5kcyBcXFxcb3ZlcmFyYyB0byBuYXRpdmUgXFxcXG92ZXJwYXJlbicsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcb3ZlcmFyY3tBQn0nKSkudG9FcXVhbCgnXFxcXG92ZXJwYXJlbntBQn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBhbmRzIFxcXFxhYnMgdG8gbmF0aXZlIFxcXFxsZWZ0fC4uXFxcXHJpZ2h0fCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcYWJze3h9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3t9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fFxcXFxyaWdodHwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG5lc3RlZCBicmFjZXMgaW5zaWRlIFxcXFxhYnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3tcXFxcZnJhY3sxfXsyfX0nKSkudG9FcXVhbCgnXFxcXGxlZnR8XFxcXGZyYWN7MX17Mn1cXFxccmlnaHR8Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBzZXZlcmFsIG9jY3VycmVuY2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxhYnN7YX0rXFxcXGFic3tifScpKS50b0VxdWFsKCdcXFxcbGVmdHxhXFxcXHJpZ2h0fCtcXFxcbGVmdHxiXFxcXHJpZ2h0fCcpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezF9XFxcXGxvbmdkaXZ7Mn0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17MX1cXFxcZW5jbG9zZXtsb25nZGl2fXsyfScpO1xuICAgIH0pO1xuXG4gICAgLy8gYCVgIHN0YXJ0cyBhIGNvbW1lbnQgaW4gcmVhbCBMYVRlWCwgc28gTWF0aExpdmUgZHJvcHMgaXQgYW5kIGV2ZXJ5dGhpbmdcbiAgICAvLyBhZnRlciBpdC4gTWF0aFF1aWxsIGhhZCBubyBjb21tZW50cywgc28gbGF0ZXggYXV0aG9yZWQgdW5kZXIgaXQgLSBvciBieVxuICAgIC8vIGhhbmQgLSBjYW4gY2FycnkgYSBiYXJlIGAlYCB0aGF0IHdvdWxkIHNpbGVudGx5IHRydW5jYXRlIHRoZSBleHByZXNzaW9uLlxuICAgIGl0KCdlc2NhcGVzIGEgYmFyZSAlIHNvIGl0IGNhbm5vdCBjb21tZW50IG91dCB0aGUgcmVzdCBvZiB0aGUgbGluZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCclJykpLnRvRXF1YWwoJ1xcXFwlJyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnNTAlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCd4JXknKSkudG9FcXVhbCgneFxcXFwleScpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2ElYiVjJykpLnRvRXF1YWwoJ2FcXFxcJWJcXFxcJWMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgYW4gYWxyZWFkeS1lc2NhcGVkICUgYWxvbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXCUnKSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCc1MFxcXFwlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIC8vIGlkZW1wb3RlbnQ6IHRvTWF0aExpdmUgbWF5IHJ1biBvdmVyIGxhdGV4IHRoYXQgY2FtZSBiYWNrIG91dCBvZiBhIGZpZWxkXG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyh0b05hdGl2ZUNvbW1hbmRzKCc1MCUnKSkpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICB9KTtcblxuICAgIC8vIGBcXFxcYCBpcyBhIGxpbmUgYnJlYWssIG5vdCBhbiBlc2NhcGUsIHNvIHRoZSBgJWAgYWZ0ZXIgaXQgaXMgc3RpbGwgYmFyZS5cbiAgICBpdCgnY291bnRzIGJhY2tzbGFzaGVzIHRvIGRlY2lkZSB3aGV0aGVyIGEgJSBpcyBlc2NhcGVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2FcXFxcXFxcXCViJykpLnRvRXF1YWwoJ2FcXFxcXFxcXFxcXFwlYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xlYXZlcyBvdGhlciBsYXRleCB1bnRvdWNoZWQnLCAoKSA9PiB7XG4gICAgICBbJ1xcXFxmcmFjezF9ezJ9JywgJ1xcXFxwaScsICdcXFxcc3FydHt4fScsICdcXFxcb3ZlcmxpbmV7QUJ9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyhsKSkudG9FcXVhbChsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbnVsbGlzaCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJycpKS50b0VxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBhcHBsaWVkIGJ5IHRvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7NX0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17NX0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBsZWF2ZSBhIHBpZSBtYWNybyBpbiB3aGF0IHJlYWNoZXMgdGhlIGZpZWxkJywgKCkgPT4ge1xuICAgICAgWydcXFxcbG9uZ2Rpdns3fScsICdcXFxcYWJzezd9JywgJ1xcXFxvdmVyYXJjezd9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB0b01hdGhMaXZlKGwpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLm5vdC50b01hdGNoKC9cXFxcbG9uZ2RpdnxcXFxcYWJzfFxcXFxvdmVyYXJjLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpZWxkSWRzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGlkcyBpbiBkb2N1bWVudCBvcmRlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWVsZElkcygnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fStcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IyXXt9JykpLnRvRXF1YWwoWydyMScsICdyMiddKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFtdIHdoZW4gdGhlcmUgYXJlIG5vbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmllbGRJZHMoJ3greScpKS50b0VxdWFsKFtdKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyh1bmRlZmluZWQpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyByZXBlYXRhYmxlIChyZWdleCBsYXN0SW5kZXggaXMgcmVzZXQpJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXggPSAnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSc7XG5cbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWF0aFF1aWxsIHJlZ2lzdGVyZWQgc29tZSBrZXlwYWQgbmFtZXMgYXMgYWxpYXNlcyBvZiBhIGRpZmZlcmVudCBjb21tYW5kOlxuICAvLyB0aGUgZGl2aWRlIGtleSBzdG9yZWQgYFxcZGl2YCwgbm90IGBcXGRpdmlkZWAuIE1hdGhMaXZlIGtub3dzIGBcXGRpdmlkZWAgb25seSBhc1xuICAvLyBhIHBpZSBtYWNybyBhbmQgc2VyaWFsaXNlcyBpdCB1bmRlciB0aGF0IG5hbWUsIHNvIGl0IHJlYWNoZWQgc3RvcmFnZSBhbmRcbiAgLy8gTWF0aEpheCAod2hpY2ggaGFzIG5vIGBcXGRpdmlkZWApIHJlbmRlcmVkIGl0IGFzIHJlZCB0ZXh0LlxuICBkZXNjcmliZSgnTWF0aFF1aWxsIGNvbW1hbmQgYWxpYXNlcycsICgpID0+IHtcbiAgICBpdCgndGhlIGRpdmlkZSBhbmQgcGVycGVuZGljdWxhciBrZXlzIGluc2VydCB0aGUgY29tbWFuZCBNYXRoUXVpbGwgc3RvcmVkJywgKCkgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICAgIGNvbnN0IHsgZGl2aWRlIH0gPSByZXF1aXJlKCcuLi9rZXlzL2Jhc2ljLW9wZXJhdG9ycycpO1xuICAgICAgLy8gRXhwb3J0ZWQgdW5kZXIgYSBwcmUtZXhpc3RpbmcgbWlzc3BlbGxpbmcuXG4gICAgICBjb25zdCB7IHBlcnBpbmRpY3VsYXI6IHBlcnBlbmRpY3VsYXIgfSA9IHJlcXVpcmUoJy4uL2tleXMvZ2VvbWV0cnknKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgZ2xvYmFsLXJlcXVpcmUgKi9cblxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKGRpdmlkZSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZGl2JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJwZW5kaWN1bGFyKSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxwZXJwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdG9yZXMgdGhlIGNhbm9uaWNhbCBjb21tYW5kIGZvciBsYXRleCB0aGF0IHN0aWxsIGNhcnJpZXMgYW4gYWxpYXMnLCAoKSA9PiB7XG4gICAgICAvLyBUeXBlZCBpbnRvIHRoZSBmaWVsZCwgb3Igc2F2ZWQgYmVmb3JlIHRoZSBrZXlwYWQgcmVzb2x2ZWQgdGhlIGFsaWFzLlxuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnMVxcXFxkaXZpZGUgNicpKS50b0VxdWFsKCcxXFxcXGRpdiA2Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdhXFxcXHBlcnBlbmRpY3VsYXIgYicpKS50b0VxdWFsKCdhXFxcXHBlcnAgYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29ubHkgcmVwbGFjZXMgd2hvbGUgY29tbWFuZCBuYW1lcycsICgpID0+IHtcbiAgICAgIC8vIFxcZGl2aWRlb250aW1lcyBpcyBhIHJlYWwgQU1TIHN5bWJvbCBhbmQgbXVzdCBzdXJ2aXZlLlxuICAgICAgZXhwZWN0KHRvQ2Fub25pY2FsQ29tbWFuZHMoJ2FcXFxcZGl2aWRlb250aW1lcyBiJykpLnRvRXF1YWwoJ2FcXFxcZGl2aWRlb250aW1lcyBiJyk7XG4gICAgICBleHBlY3QodG9DYW5vbmljYWxDb21tYW5kcygnXFxcXGRpdmlkZVxcXFxkaXZpZGUnKSkudG9FcXVhbCgnXFxcXGRpdlxcXFxkaXYnKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkb3VibGUgcHJpbWUga2V5OiBNYXRoTGl2ZSBzZXJpYWxpc2VzIGA1JydgIGFzIGA1XntcXGRvdWJsZXByaW1lfWAsXG4gICAgLy8gd2hpY2ggTWF0aEpheCBjYW5ub3QgcmVuZGVyIChyZWQgYFxcZG91YmxlcHJpbWVgKS4gTWF0aFF1aWxsIHN0b3JlZCBgNScnYC5cbiAgICBpdCgnc3RvcmVzIHRoZSBkb3VibGUgcHJpbWUga2V5IGFzIGFwb3N0cm9waGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCdcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XntcXFxccHJpbWVcXFxccHJpbWVcXFxccHJpbWV9JykpLnRvRXF1YWwoXCJ4JycnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGRvdWJsZXByaW1lJykpLnRvRXF1YWwoXCInJ1wiKTtcbiAgICB9KTtcblxuICAgIC8vIFR5cGluZyBgJ2AgdHdpY2UgeWllbGRzIHR3byBzdXBlcnNjcmlwdCBncm91cHMgLSBhIE1hdGhKYXggZG91YmxlLWV4cG9uZW50XG4gICAgLy8gZXJyb3IgLSBzbyB0aGV5IGNvbGxhcHNlIGludG8gYXBvc3Ryb3BoZXMgdG9vLlxuICAgIGl0KCdjb2xsYXBzZXMgYWRqYWNlbnQgcHJpbWUgc3VwZXJzY3JpcHRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfV57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCcnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXHByaW1lfV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgc3VwZXJzY3JpcHRzIHRoYXQgaG9sZCBtb3JlIHRoYW4gcHJpbWVzIGFsb25lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lIDJ9JykpLnRvRXF1YWwoJ3hee1xcXFxwcmltZSAyfScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57Mn0nKSkudG9FcXVhbCgneF57Mn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBzdG9yZWQgcHJpbWVzIHVuY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoXCIxMl57XFxcXGNpcmN9MzAnMTUnJ1wiKSkudG9FcXVhbChcIjEyXntcXFxcY2lyY30zMCcxNScnXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ25vIGtleXBhZCBrZXkgaW5zZXJ0cyBhbiBhbGlhcyBuYW1lJywgKCkgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGdsb2JhbC1yZXF1aXJlICovXG4gICAgICBjb25zdCBrZXlzRGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2tleXMnKTtcbiAgICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgICAgY29uc3QgY29sbGVjdCA9ICh2KSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSByZXR1cm4gdi5mb3JFYWNoKGNvbGxlY3QpO1xuICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgKHYuY29tbWFuZCB8fCB2LmxhdGV4IHx8IHYud3JpdGUpKSBrZXlzLnB1c2godik7XG4gICAgICB9O1xuXG4gICAgICBmcy5yZWFkZGlyU3luYyhrZXlzRGlyKVxuICAgICAgICAuZmlsdGVyKChmKSA9PiAvXFwuanMkLy50ZXN0KGYpKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmUsIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICAgICAgLmZvckVhY2goKGYpID0+IE9iamVjdC52YWx1ZXMocmVxdWlyZShwYXRoLmpvaW4oa2V5c0RpciwgZikpKS5mb3JFYWNoKGNvbGxlY3QpKTtcblxuICAgICAgZXhwZWN0KGtleXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oNTApO1xuXG4gICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0ga2V5VG9BY3Rpb24oayk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGFjdGlvbiAmJiBhY3Rpb24udmFsdWUpIHx8ICcnO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKE1BVEhRVUlMTF9BTElBU0VTKS5mb3JFYWNoKChhbGlhcykgPT4ge1xuICAgICAgICAgIGV4cGVjdChuZXcgUmVnRXhwKGBcXFxcJHthbGlhc30oPyFbYS16QS1aXSlgKS50ZXN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdrZXlUb0FjdGlvbicsICgpID0+IHtcbiAgICBpdCgncHJlZmVycyBsYXRleCB3aGVuIHRoZXJlIGlzIG5vIGNvbW1hbmQnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBsYXRleDogJ1xcXFxwaScsIHdyaXRlOiAncCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxccGknIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgd3JpdGUnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyB3cml0ZTogJ3gnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAneCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwYW5kcyBjb21tYW5kcyB0aGF0IHRha2UgYXJndW1lbnRzIGludG8gcGxhY2Vob2xkZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ1xcXFxmcmFjJyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxmcmFjeyM/fXsjP30nIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ1xcXFxzcXJ0JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxzcXJ0eyM/fScgfSk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiAnXicgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdeeyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBNYXRoUXVpbGwncyBgL2AgdHVybmVkIHRoZSBwcmVjZWRpbmcgZXhwcmVzc2lvbiBpbnRvIHRoZSBudW1lcmF0b3I6IHR5cGVcbiAgICAvLyA1LCBwcmVzcyB0aGUga2V5LCBnZXQgNS9fIHdpdGggdGhlIGNhcmV0IGluIHRoZSBkZW5vbWluYXRvci4gYCNAYCBpc1xuICAgIC8vIE1hdGhMaXZlJ3MgXCJzZWxlY3Rpb24sIG9yIHRoZSBpdGVtIGJlZm9yZSB0aGUgY3Vyc29yXCIgdG9rZW4sIGFuZCBpcyB3aGF0XG4gICAgLy8gTWF0aExpdmUgYmluZHMgdG8gYC9gIGl0c2VsZi5cbiAgICBpdCgnZGl2aXNpb24gdGFrZXMgdGhlIHByZWNlZGluZyBpdGVtIGFzIHRoZSBudW1lcmF0b3InLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiAnLycgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZnJhY3sjQH17Iz99JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBleHBsaWNpdCBibGFuay1vdmVyLWJsYW5rIGZyYWN0aW9uIHN0YXlzIGVtcHR5JywgKCkgPT4ge1xuICAgICAgLy8gZGlzdGluY3QgZnJvbSBgL2A6IHRoaXMga2V5IGlzIG1lYW50IHRvIGluc2VydCB0d28gZW1wdHkgc2xvdHNcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcZnJhYycgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZnJhY3sjP317Iz99JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aGUgeC1vdmVyLWJsYW5rIGtleSByb3V0ZXMgdGhyb3VnaCBkaXZpc2lvbicsICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgICAgY29uc3QgeyB4T3ZlckJsYW5rIH0gPSByZXF1aXJlKCcuLi9rZXlzL2ZyYWN0aW9ucycpO1xuXG4gICAgICBleHBlY3QoeE92ZXJCbGFuay5jb21tYW5kKS50b0VxdWFsKCcvJyk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeE92ZXJCbGFuaykudmFsdWUpLnRvRXF1YWwoJ1xcXFxmcmFjeyNAfXsjP30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgYXJndW1lbnQtbGVzcyBjb21tYW5kcyB0aHJvdWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ1xcXFxwaScgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxccGknIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbmNhdGVuYXRlcyBhcnJheSBjb21tYW5kcyAoTWF0aFF1aWxsIGNtZCgpIGFwcGxpZWQgdGhlbSBpbiBzZXF1ZW5jZSknLCAoKSA9PiB7XG4gICAgICAvLyBNZWFzdXJlZCBBbmdsZVxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogWydtJywgJ1xcXFxhbmdsZSddIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnbVxcXFxhbmdsZScgfSk7XG4gICAgICAvLyBsb2cgYmFzZSBuIC0gdGhlIGBfYCBwYXJ0IG11c3Qgc3RpbGwgZXhwYW5kIHRvIGEgcGxhY2Vob2xkZXJcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6IFsnXFxcXGxvZycsICdfJ10gfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcbG9nX3sjP30nIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Fsd2F5cyByZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciBpbnNlcnQgYWN0aW9ucycsICgpID0+IHtcbiAgICAgIFt7IGNvbW1hbmQ6IFsnbScsICdcXFxcYW5nbGUnXSB9LCB7IGNvbW1hbmQ6ICdcXFxcZnJhYycgfSwgeyB3cml0ZTogJ3gnIH0sIHsgbGF0ZXg6ICdcXFxccGknIH1dLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgZXhwZWN0KHR5cGVvZiBrZXlUb0FjdGlvbihrKS52YWx1ZSkudG9CZSgnc3RyaW5nJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXBzIGtleXN0cm9rZXMgdG8gTWF0aExpdmUgc2VsZWN0b3JzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnTGVmdCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY29tbWFuZCcsIHZhbHVlOiAnbW92ZVRvUHJldmlvdXNDaGFyJyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGtleXN0cm9rZTogJ1JpZ2h0JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdjb21tYW5kJywgdmFsdWU6ICdtb3ZlVG9OZXh0Q2hhcicgfSk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBrZXlzdHJva2U6ICdCYWNrc3BhY2UnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2NvbW1hbmQnLCB2YWx1ZTogJ2RlbGV0ZUJhY2t3YXJkJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3IgdW5rbm93bi9lbXB0eSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oe30pKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBrZXlzdHJva2U6ICdOb3BlJyB9KSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xhdGV4IHdpbnMgb3ZlciBjb21tYW5kIG9ubHkgd2hlbiBjb21tYW5kIGlzIGFic2VudCcsICgpID0+IHtcbiAgICAgIC8vIGEga2V5IHdpdGggYm90aCBzaG91bGQgdXNlIHRoZSBjb21tYW5kIHBhdGggKG1hdGNoZXMgTWF0aElucHV0LmtleXBhZFByZXNzKVxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgbGF0ZXg6ICdcXFxcZnJhY3t9e30nLCBjb21tYW5kOiAnXFxcXGZyYWMnIH0pKS50b0VxdWFsKHtcbiAgICAgICAgdHlwZTogJ2luc2VydCcsXG4gICAgICAgIHZhbHVlOiAnXFxcXGZyYWN7Iz99eyM/fScsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQVlBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFlBQU07RUFDN0JBLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBTTtJQUMzQkMsRUFBRSxDQUFDLDRCQUE0QixFQUFFLFlBQU07TUFDckNDLE1BQU0sQ0FBQyxJQUFBQyx1QkFBVSxFQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxZQUFNO01BQ2hDQyxNQUFNLENBQUMsSUFBQUMsdUJBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO01BQ2xDRixNQUFNLENBQUMsSUFBQUMsdUJBQVUsRUFBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQztNQUN6Q0YsTUFBTSxDQUFDLElBQUFDLHVCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLFlBQU07TUFDOURDLE1BQU0sQ0FBQyxJQUFBQyx1QkFBVSxNQUFBRyxNQUFBLENBQUtDLDBCQUFhLE1BQUcsQ0FBQyxDQUFDLENBQUNILE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztJQUM5RSxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLFlBQU07TUFDM0NDLE1BQU0sQ0FBQyxJQUFBQyx1QkFBVSxNQUFBRyxNQUFBLENBQUtDLDBCQUFhLE9BQUFELE1BQUEsQ0FBSUMsMEJBQWEsTUFBRyxDQUFDLENBQUMsQ0FBQ0gsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3RHLENBQUMsQ0FBQztJQUVGSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsWUFBTTtNQUMzREMsTUFBTSxDQUFDLElBQUFDLHVCQUFVLEVBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7SUFDckYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxZQUFNO01BQ3pDQyxNQUFNLENBQUMsSUFBQUMsdUJBQVUsRUFBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztJQUNuRixDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLFlBQU07TUFDOUNDLE1BQU0sQ0FBQyxJQUFBQyx1QkFBVSxFQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxrQkFBQUUsTUFBQSxDQUFrQkUsNkJBQWdCLFFBQUssQ0FBQztJQUNoRyxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLFlBQU07TUFDdERDLE1BQU0sQ0FBQyxJQUFBQyx1QkFBVSwrQkFBQUcsTUFBQSxDQUE4QkMsMEJBQWEsTUFBRyxDQUFDLENBQUMsQ0FBQ0gsT0FBTyxDQUN2RSw0Q0FDRixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZKLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBTTtJQUM3QkMsRUFBRSxDQUFDLDRCQUE0QixFQUFFLFlBQU07TUFDckNDLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxZQUFNO01BQ3REQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNMLE9BQU8sS0FBQUUsTUFBQSxDQUFLQywwQkFBYSxNQUFHLENBQUM7SUFDaEYsQ0FBQyxDQUFDO0lBRUZOLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxZQUFNO01BQ2hFQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztJQUN2RixDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLFlBQU07TUFDekMsSUFBTVMsTUFBTSxPQUFBSixNQUFBLENBQU9DLDBCQUFhLE9BQUFELE1BQUEsQ0FBSUMsMEJBQWEsTUFBRztNQUVwREwsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMsSUFBQU4sdUJBQVUsRUFBQ08sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDTixPQUFPLENBQUNNLE1BQU0sQ0FBQztJQUMxRCxDQUFDLENBQUM7SUFFRlQsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFlBQU07TUFDL0MsSUFBTVMsTUFBTSxHQUFHLDBEQUEwRDtNQUV6RVIsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMsSUFBQU4sdUJBQVUsRUFBQ08sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDTixPQUFPLENBQUNNLE1BQU0sQ0FBQztJQUMxRCxDQUFDLENBQUM7O0lBRUY7SUFDQTtJQUNBVCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsWUFBTTtNQUN6REMsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDTCxPQUFPLENBQUMsYUFBYSxDQUFDO01BQ3pFRixNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDeEYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxZQUFNO01BQ3REQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxZQUFNO01BQ3hEQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxZQUFNO01BQzlDLENBQUMsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQ1UsT0FBTyxDQUFDLFVBQUNDLENBQUMsRUFBSztRQUM3RlYsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUNHLENBQUMsQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQ0MsU0FBUyxDQUFDLGVBQWUsQ0FBQztNQUN4RCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRmIsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07TUFDekQ7TUFDQUMsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDTCxPQUFPLENBQUMsNEJBQTRCLENBQUM7SUFDbkYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxZQUFNO01BQzNELElBQU1TLE1BQU0sZ0NBQUFKLE1BQUEsQ0FBZ0NDLDBCQUFhLE1BQUc7TUFFNURMLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLElBQUFOLHVCQUFVLEVBQUNPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ04sT0FBTyxDQUFDTSxNQUFNLENBQUM7SUFDMUQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBO0VBQ0FWLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxZQUFNO0lBQ2pDQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsWUFBTTtNQUNoREMsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLDBCQUEwQixDQUFDO01BQy9FRixNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0lBQ3pFLENBQUMsQ0FBQztJQUVGSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsWUFBTTtNQUNsREMsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RSxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLFlBQU07TUFDcERDLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsa0JBQWtCLENBQUM7TUFDaEVGLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO01BQzdDQyxNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsNkJBQTZCLENBQUM7SUFDeEYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxZQUFNO01BQ3RDQyxNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsbUNBQW1DLENBQUM7TUFDMUZGLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQztJQUM1RyxDQUFDLENBQUM7O0lBRUY7SUFDQTtJQUNBO0lBQ0FILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxZQUFNO01BQ3pFQyxNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUM1Q0YsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUM7TUFDaERGLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsT0FBTyxDQUFDO01BQ2hERixNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUN4RCxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLFlBQU07TUFDNUNDLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDO01BQzlDRixNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUNsRDtNQUNBRixNQUFNLENBQUMsSUFBQWEsNkJBQWdCLEVBQUMsSUFBQUEsNkJBQWdCLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDWCxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3BFLENBQUMsQ0FBQzs7SUFFRjtJQUNBSCxFQUFFLENBQUMscURBQXFELEVBQUUsWUFBTTtNQUM5REMsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDMUQsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxZQUFNO01BQ3ZDLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQ1UsT0FBTyxDQUFDLFVBQUNDLENBQUMsRUFBSztRQUNyRVYsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDUixPQUFPLENBQUNRLENBQUMsQ0FBQztNQUN4QyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRlgsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07TUFDaENDLE1BQU0sQ0FBQyxJQUFBYSw2QkFBZ0IsRUFBQ1YsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQztNQUMvQ0YsTUFBTSxDQUFDLElBQUFhLDZCQUFnQixFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNYLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFNO01BQ25DQyxNQUFNLENBQUMsSUFBQUMsdUJBQVUsRUFBQyxjQUFjLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7SUFDckUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxZQUFNO01BQy9ELENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQ1UsT0FBTyxDQUFDLFVBQUNDLENBQUMsRUFBSztRQUMxRCxJQUFNSSxHQUFHLEdBQUcsSUFBQWIsdUJBQVUsRUFBQ1MsQ0FBQyxDQUFDO1FBRXpCVixNQUFNLENBQUNjLEdBQUcsQ0FBQyxDQUFDSCxHQUFHLENBQUNJLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQztNQUN0RCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRmpCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBTTtJQUN6QkMsRUFBRSxDQUFDLCtCQUErQixFQUFFLFlBQU07TUFDeENDLE1BQU0sQ0FBQyxJQUFBZ0IscUJBQVEsRUFBQyx1REFBdUQsQ0FBQyxDQUFDLENBQUNkLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRyxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLFlBQU07TUFDekNDLE1BQU0sQ0FBQyxJQUFBZ0IscUJBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDZCxPQUFPLENBQUMsRUFBRSxDQUFDO01BQ25DRixNQUFNLENBQUMsSUFBQWdCLHFCQUFRLEVBQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUNELE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxZQUFNO01BQ25ELElBQU1rQixLQUFLLEdBQUcsNEJBQTRCO01BRTFDakIsTUFBTSxDQUFDLElBQUFnQixxQkFBUSxFQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2Q0YsTUFBTSxDQUFDLElBQUFnQixxQkFBUSxFQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7O0VBRUY7RUFDQTtFQUNBO0VBQ0E7RUFDQUosUUFBUSxDQUFDLDJCQUEyQixFQUFFLFlBQU07SUFDMUNDLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxZQUFNO01BQ2hGO01BQ0EsSUFBQW1CLFFBQUEsR0FBbUJyQixPQUFPLENBQUMseUJBQXlCLENBQUM7UUFBN0NzQixNQUFNLEdBQUFELFFBQUEsQ0FBTkMsTUFBTTtNQUNkO01BQ0EsSUFBQUMsU0FBQSxHQUF5Q3ZCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUE3Q3dCLGFBQWEsR0FBQUQsU0FBQSxDQUE1QkUsYUFBYTtNQUNyQjs7TUFFQXRCLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQ0osTUFBTSxDQUFDLENBQUMsQ0FBQ2pCLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQVEsQ0FBQyxDQUFDO01BQ3ZFekIsTUFBTSxDQUFDLElBQUF1Qix3QkFBVyxFQUFDRixhQUFhLENBQUMsQ0FBQyxDQUFDbkIsT0FBTyxDQUFDO1FBQUVzQixJQUFJLEVBQUUsUUFBUTtRQUFFQyxLQUFLLEVBQUU7TUFBUyxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDO0lBRUYxQixFQUFFLENBQUMsb0VBQW9FLEVBQUUsWUFBTTtNQUM3RTtNQUNBQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyxhQUFhLENBQUMsQ0FBQyxDQUFDTCxPQUFPLENBQUMsVUFBVSxDQUFDO01BQ3ZERixNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDakUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxZQUFNO01BQzVDO01BQ0FDLE1BQU0sQ0FBQyxJQUFBMEIsZ0NBQW1CLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDeEIsT0FBTyxDQUFDLG9CQUFvQixDQUFDO01BQy9FRixNQUFNLENBQUMsSUFBQTBCLGdDQUFtQixFQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ3hCLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDdkUsQ0FBQyxDQUFDOztJQUVGO0lBQ0E7SUFDQUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLFlBQU07TUFDckRDLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUN4REYsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQztNQUNqREYsTUFBTSxDQUFDLElBQUFPLHlCQUFZLEVBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDTCxPQUFPLENBQUMsTUFBTSxDQUFDO01BQ2pFRixNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyxlQUFlLENBQUMsQ0FBQyxDQUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUMsQ0FBQzs7SUFFRjtJQUNBO0lBQ0FILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxZQUFNO01BQ2hEQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUM7TUFDNURGLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNyRSxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLFlBQU07TUFDL0RDLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxlQUFlLENBQUM7TUFDOURGLE1BQU0sQ0FBQyxJQUFBTyx5QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxZQUFNO01BQzlDQyxNQUFNLENBQUMsSUFBQU8seUJBQVksRUFBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUNMLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztJQUMxRSxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLFlBQU07TUFDOUM7TUFDQSxJQUFNNEIsRUFBRSxHQUFHOUIsT0FBTyxDQUFDLElBQUksQ0FBQztNQUN4QixJQUFNK0IsSUFBSSxHQUFHL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQztNQUM1QjtNQUNBLElBQU1nQyxPQUFPLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDQyxTQUFTLEVBQUUsU0FBUyxDQUFDO01BQ2xELElBQU1DLElBQUksR0FBRyxFQUFFO01BRWYsSUFBTUMsUUFBTyxHQUFHLFNBQVZBLE9BQU9BLENBQUlDLENBQUMsRUFBSztRQUNyQixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDLEVBQUUsT0FBT0EsQ0FBQyxDQUFDekIsT0FBTyxDQUFDd0IsUUFBTyxDQUFDO1FBQy9DLElBQUlDLENBQUMsSUFBSSxJQUFBRyxRQUFBLGFBQU9ILENBQUMsTUFBSyxRQUFRLEtBQUtBLENBQUMsQ0FBQ0ksT0FBTyxJQUFJSixDQUFDLENBQUNqQixLQUFLLElBQUlpQixDQUFDLENBQUNLLEtBQUssQ0FBQyxFQUFFUCxJQUFJLENBQUNRLElBQUksQ0FBQ04sQ0FBQyxDQUFDO01BQ25GLENBQUM7TUFFRFAsRUFBRSxDQUFDYyxXQUFXLENBQUNaLE9BQU8sQ0FBQyxDQUNwQmEsTUFBTSxDQUFDLFVBQUNDLENBQUM7UUFBQSxPQUFLLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDRCxDQUFDLENBQUM7TUFBQTtNQUM5QjtNQUFBLENBQ0NsQyxPQUFPLENBQUMsVUFBQ2tDLENBQUM7UUFBQSxPQUFLRSxNQUFNLENBQUNDLE1BQU0sQ0FBQ2pELE9BQU8sQ0FBQytCLElBQUksQ0FBQ21CLElBQUksQ0FBQ2xCLE9BQU8sRUFBRWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbEMsT0FBTyxDQUFDd0IsUUFBTyxDQUFDO01BQUEsRUFBQztNQUVqRmpDLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ2dCLE1BQU0sQ0FBQyxDQUFDQyxlQUFlLENBQUMsRUFBRSxDQUFDO01BRXZDakIsSUFBSSxDQUFDdkIsT0FBTyxDQUFDLFVBQUN5QyxDQUFDLEVBQUs7UUFDbEIsSUFBTUMsTUFBTSxHQUFHLElBQUE1Qix3QkFBVyxFQUFDMkIsQ0FBQyxDQUFDO1FBQzdCLElBQU16QixLQUFLLEdBQUkwQixNQUFNLElBQUlBLE1BQU0sQ0FBQzFCLEtBQUssSUFBSyxFQUFFO1FBRTVDb0IsTUFBTSxDQUFDYixJQUFJLENBQUNvQiw4QkFBaUIsQ0FBQyxDQUFDM0MsT0FBTyxDQUFDLFVBQUM0QyxLQUFLLEVBQUs7VUFDaERyRCxNQUFNLENBQUMsSUFBSXNELE1BQU0sTUFBQWxELE1BQUEsQ0FBTWlELEtBQUssaUJBQWMsQ0FBQyxDQUFDVCxJQUFJLENBQUNuQixLQUFLLENBQUMsQ0FBQyxDQUFDOEIsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0RSxDQUFDLENBQUM7TUFDSixDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRnpELFFBQVEsQ0FBQyxhQUFhLEVBQUUsWUFBTTtJQUM1QkMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLFlBQU07TUFDakRDLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFTixLQUFLLEVBQUUsTUFBTTtRQUFFc0IsS0FBSyxFQUFFO01BQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3JDLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQU8sQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQztJQUVGMUIsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFNO01BQ3JCQyxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRWdCLEtBQUssRUFBRTtNQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNyQyxPQUFPLENBQUM7UUFBRXNCLElBQUksRUFBRSxRQUFRO1FBQUVDLEtBQUssRUFBRTtNQUFJLENBQUMsQ0FBQztJQUM3RSxDQUFDLENBQUM7SUFFRjFCLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxZQUFNO01BQ2pFQyxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRWUsT0FBTyxFQUFFO01BQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQWlCLENBQUMsQ0FBQztNQUMvRnpCLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFZSxPQUFPLEVBQUU7TUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDO1FBQUVzQixJQUFJLEVBQUUsUUFBUTtRQUFFQyxLQUFLLEVBQUU7TUFBYSxDQUFDLENBQUM7TUFDM0Z6QixNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRWUsT0FBTyxFQUFFO01BQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQVEsQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQzs7SUFFRjtJQUNBO0lBQ0E7SUFDQTtJQUNBMUIsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLFlBQU07TUFDN0RDLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFZSxPQUFPLEVBQUU7TUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDO1FBQUVzQixJQUFJLEVBQUUsUUFBUTtRQUFFQyxLQUFLLEVBQUU7TUFBaUIsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQztJQUVGMUIsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLFlBQU07TUFDNUQ7TUFDQUMsTUFBTSxDQUFDLElBQUF1Qix3QkFBVyxFQUFDO1FBQUVlLE9BQU8sRUFBRTtNQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNwQyxPQUFPLENBQUM7UUFBRXNCLElBQUksRUFBRSxRQUFRO1FBQUVDLEtBQUssRUFBRTtNQUFpQixDQUFDLENBQUM7SUFDakcsQ0FBQyxDQUFDO0lBRUYxQixFQUFFLENBQUMsOENBQThDLEVBQUUsWUFBTTtNQUN2RDtNQUNBLElBQUF5RCxTQUFBLEdBQXVCM0QsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQTNDNEQsVUFBVSxHQUFBRCxTQUFBLENBQVZDLFVBQVU7TUFFbEJ6RCxNQUFNLENBQUN5RCxVQUFVLENBQUNuQixPQUFPLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUM7TUFDdkNGLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQ2tDLFVBQVUsQ0FBQyxDQUFDaEMsS0FBSyxDQUFDLENBQUN2QixPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDakUsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxZQUFNO01BQ2hEQyxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRWUsT0FBTyxFQUFFO01BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQU8sQ0FBQyxDQUFDO0lBQ3JGLENBQUMsQ0FBQztJQUVGMUIsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLFlBQU07TUFDakY7TUFDQUMsTUFBTSxDQUFDLElBQUF1Qix3QkFBVyxFQUFDO1FBQUVlLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTO01BQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BDLE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFFBQVE7UUFBRUMsS0FBSyxFQUFFO01BQVcsQ0FBQyxDQUFDO01BQ2pHO01BQ0F6QixNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRWUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUc7TUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDO1FBQUVzQixJQUFJLEVBQUUsUUFBUTtRQUFFQyxLQUFLLEVBQUU7TUFBYSxDQUFDLENBQUM7SUFDbkcsQ0FBQyxDQUFDO0lBRUYxQixFQUFFLENBQUMsa0RBQWtELEVBQUUsWUFBTTtNQUMzRCxDQUFDO1FBQUV1QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUztNQUFFLENBQUMsRUFBRTtRQUFFQSxPQUFPLEVBQUU7TUFBUyxDQUFDLEVBQUU7UUFBRUMsS0FBSyxFQUFFO01BQUksQ0FBQyxFQUFFO1FBQUV0QixLQUFLLEVBQUU7TUFBTyxDQUFDLENBQUMsQ0FBQ1IsT0FBTyxDQUFDLFVBQUN5QyxDQUFDLEVBQUs7UUFDdkdsRCxNQUFNLEtBQUFxQyxRQUFBLGFBQVEsSUFBQWQsd0JBQVcsRUFBQzJCLENBQUMsQ0FBQyxDQUFDekIsS0FBSyxFQUFDLENBQUM4QixJQUFJLENBQUMsUUFBUSxDQUFDO01BQ3BELENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGeEQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaERDLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFbUMsU0FBUyxFQUFFO01BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3hELE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFNBQVM7UUFBRUMsS0FBSyxFQUFFO01BQXFCLENBQUMsQ0FBQztNQUNwR3pCLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFbUMsU0FBUyxFQUFFO01BQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hELE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFNBQVM7UUFBRUMsS0FBSyxFQUFFO01BQWlCLENBQUMsQ0FBQztNQUNqR3pCLE1BQU0sQ0FBQyxJQUFBdUIsd0JBQVcsRUFBQztRQUFFbUMsU0FBUyxFQUFFO01BQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ3hELE9BQU8sQ0FBQztRQUFFc0IsSUFBSSxFQUFFLFNBQVM7UUFBRUMsS0FBSyxFQUFFO01BQWlCLENBQUMsQ0FBQztJQUN2RyxDQUFDLENBQUM7SUFFRjFCLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxZQUFNO01BQ3BEQyxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDd0QsYUFBYSxDQUFDLENBQUM7TUFDOUMzRCxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDb0MsYUFBYSxDQUFDLENBQUM7TUFDdkMzRCxNQUFNLENBQUMsSUFBQXVCLHdCQUFXLEVBQUM7UUFBRW1DLFNBQVMsRUFBRTtNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGNUQsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLFlBQU07TUFDOUQ7TUFDQUMsTUFBTSxDQUFDLElBQUF1Qix3QkFBVyxFQUFDO1FBQUVOLEtBQUssRUFBRSxZQUFZO1FBQUVxQixPQUFPLEVBQUU7TUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDcEMsT0FBTyxDQUFDO1FBQ3RFc0IsSUFBSSxFQUFFLFFBQVE7UUFDZEMsS0FBSyxFQUFFO01BQ1QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvTWF0aExpdmUiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiTkVXTElORV9FTUJFRCIsIkRFRkFVTFRfRklFTERfSUQiLCJmcm9tTWF0aExpdmUiLCJzdG9yZWQiLCJmb3JFYWNoIiwibCIsIm5vdCIsInRvQ29udGFpbiIsInRvTmF0aXZlQ29tbWFuZHMiLCJvdXQiLCJ0b01hdGNoIiwiZmllbGRJZHMiLCJsYXRleCIsIl9yZXF1aXJlIiwiZGl2aWRlIiwiX3JlcXVpcmUyIiwicGVycGVuZGljdWxhciIsInBlcnBpbmRpY3VsYXIiLCJrZXlUb0FjdGlvbiIsInR5cGUiLCJ2YWx1ZSIsInRvQ2Fub25pY2FsQ29tbWFuZHMiLCJmcyIsInBhdGgiLCJrZXlzRGlyIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImtleXMiLCJjb2xsZWN0IiwidiIsIkFycmF5IiwiaXNBcnJheSIsIl90eXBlb2YyIiwiY29tbWFuZCIsIndyaXRlIiwicHVzaCIsInJlYWRkaXJTeW5jIiwiZmlsdGVyIiwiZiIsInRlc3QiLCJPYmplY3QiLCJ2YWx1ZXMiLCJqb2luIiwibGVuZ3RoIiwidG9CZUdyZWF0ZXJUaGFuIiwiayIsImFjdGlvbiIsIk1BVEhRVUlMTF9BTElBU0VTIiwiYWxpYXMiLCJSZWdFeHAiLCJ0b0JlIiwiX3JlcXVpcmUzIiwieE92ZXJCbGFuayIsImtleXN0cm9rZSIsInRvQmVVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2xhdGV4LWJyaWRnZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRvTWF0aExpdmUsXG4gIGZyb21NYXRoTGl2ZSxcbiAgZmllbGRJZHMsXG4gIGtleVRvQWN0aW9uLFxuICB0b05hdGl2ZUNvbW1hbmRzLFxuICB0b0Nhbm9uaWNhbENvbW1hbmRzLFxuICBNQVRIUVVJTExfQUxJQVNFUyxcbiAgTkVXTElORV9FTUJFRCxcbiAgREVGQVVMVF9GSUVMRF9JRCxcbn0gZnJvbSAnLi4vbGF0ZXgtYnJpZGdlJztcblxuZGVzY3JpYmUoJ2xhdGV4LWJyaWRnZScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3RvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBwbGFpbiBsYXRleCB0aHJvdWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBlbXB0eS9udWxsaXNoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJycpKS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUobnVsbCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIGEgbmV3TGluZSBlbWJlZCB0byBhIG11bHRpbGluZSBlbnZpcm9ubWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKGBhJHtORVdMSU5FX0VNQkVEfWJgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29udmVydHMgbXVsdGlwbGUgbmV3TGluZSBlbWJlZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgYSR7TkVXTElORV9FTUJFRH1iJHtORVdMSU5FX0VNQkVEfWNgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGIgXFxcXFxcXFwgY30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcyB0byBwbGFjZWhvbGRlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgneD1cXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlc2VydmVzIGFuc3dlciBibG9jayBjb250ZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjJdezd9JykpLnRvRXF1YWwoJ1xcXFxwbGFjZWhvbGRlcltyMl17N30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWZhdWx0cyBhbiB1bm5hbWVkIGFuc3dlciBibG9jayBpZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKCdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW117fScpKS50b0VxdWFsKGBcXFxccGxhY2Vob2xkZXJbJHtERUZBVUxUX0ZJRUxEX0lEfV17fWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYW5zd2VyIGJsb2NrcyBhbmQgbmV3bGluZXMgdG9nZXRoZXInLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSR7TkVXTElORV9FTUJFRH14YCkpLnRvRXF1YWwoXG4gICAgICAgICdcXFxcZGlzcGxheWxpbmVze1xcXFxwbGFjZWhvbGRlcltyMV17fSBcXFxcXFxcXCB4fScsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbU1hdGhMaXZlJywgKCkgPT4ge1xuICAgIGl0KCdwYXNzZXMgcGxhaW4gbGF0ZXggdGhyb3VnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndW53cmFwcyBkaXNwbGF5bGluZXMgYmFjayB0byBuZXdMaW5lIGVtYmVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxkaXNwbGF5bGluZXN7YSBcXFxcXFxcXCBifScpKS50b0VxdWFsKGBhJHtORVdMSU5FX0VNQkVEfWJgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBwbGFjZWhvbGRlcnMgYmFjayB0byBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGEgbmV3bGluZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBhJHtORVdMSU5FX0VNQkVEfWIke05FV0xJTkVfRU1CRUR9Y2A7XG5cbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUodG9NYXRoTGl2ZShzdG9yZWQpKSkudG9FcXVhbChzdG9yZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuIGFuc3dlci1ibG9jayBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9ICd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30rXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMl17M30nO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcblxuICAgIC8vIE1hdGhMaXZlIHNlcmlhbGlzZXMgZW1wdHkgc2xvdHMgYXMgXFxwbGFjZWhvbGRlcnt9LCB3aGljaCBNYXRoSmF4ICh1c2VkIGJ5XG4gICAgLy8gQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcgZm9yIHByb21wdHMvcHJldmlld3MpIHJlbmRlcnMgYXMgcmVkIGVycm9yIHRleHQuXG4gICAgaXQoJ3N0cmlwcyB1bm5hbWVkIHBsYWNlaG9sZGVycyB0aGF0IE1hdGhMaXZlIGFkZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcbG9uZ2RpdntcXFxccGxhY2Vob2xkZXJ7fX0nKSkudG9FcXVhbCgnXFxcXGxvbmdkaXZ7fScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGZyYWN7XFxcXHBsYWNlaG9sZGVye319e1xcXFxwbGFjZWhvbGRlcnt9fScpKS50b0VxdWFsKCdcXFxcZnJhY3t9e30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyBjb250ZW50IGluc2lkZSBhbiB1bm5hbWVkIHBsYWNlaG9sZGVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXHNxcnR7XFxcXHBsYWNlaG9sZGVyezd9fScpKS50b0VxdWFsKCdcXFxcc3FydHs3fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYSBiYXJlIFxcXFxwbGFjZWhvbGRlciB3aXRoIG5vIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVyfScpKS50b0VxdWFsKCdcXFxcbG9uZ2Rpdnt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmV2ZXIgbGVha3MgdGhlIHRva2VuIFxcXFxwbGFjZWhvbGRlcicsICgpID0+IHtcbiAgICAgIFsnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVye319JywgJ1xcXFxmcmFje1xcXFxwbGFjZWhvbGRlcnt9fXt4fScsICdcXFxccGxhY2Vob2xkZXJ7fSddLmZvckVhY2goKGwpID0+IHtcbiAgICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZShsKSkubm90LnRvQ29udGFpbignXFxcXHBsYWNlaG9sZGVyJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCBtYXBzIE5BTUVEIHBsYWNlaG9sZGVycyB0byBhbnN3ZXIgYmxvY2tzJywgKCkgPT4ge1xuICAgICAgLy8gbmFtZWQgb25lcyBhcmUgYW5zd2VyIGJsb2NrcyBhbmQgbXVzdCBzdXJ2aXZlXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxccGxhY2Vob2xkZXJbcjFde30nKSkudG9FcXVhbCgnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuc3dlciBibG9ja3MgY29tYmluZWQgd2l0aCBuZXdsaW5lcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JHtORVdMSU5FX0VNQkVEfXlgO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBNYXRoTGl2ZSBtYWNybyBzZXJpYWxpc2VzIGZyb20gdGhlIGFyZ3VtZW50cyBpdCB3YXMgY3JlYXRlZCB3aXRoLCBzbyB0ZXh0XG4gIC8vIHR5cGVkIGluc2lkZSBpdHMgZXhwYW5zaW9uIG5ldmVyIGNvbWVzIGJhY2sgb3V0IG9mIGdldFZhbHVlKCdsYXRleCcpLlxuICAvLyBBcmd1bWVudC10YWtpbmcgcGllIGNvbW1hbmRzIG11c3QgdGhlcmVmb3JlIGJlY29tZSBuYXRpdmUgY29uc3RydWN0cyBiZWZvcmVcbiAgLy8gdGhleSByZWFjaCBhIG1hdGhmaWVsZC5cbiAgZGVzY3JpYmUoJ3RvTmF0aXZlQ29tbWFuZHMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cGFuZHMgXFxcXGxvbmdkaXYgdG8gbmF0aXZlIFxcXFxlbmNsb3NlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezEyMzR9JykpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9ezEyMzR9Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGxvbmdkaXZ7fScpKS50b0VxdWFsKCdcXFxcZW5jbG9zZXtsb25nZGl2fXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwYW5kcyBcXFxcb3ZlcmFyYyB0byBuYXRpdmUgXFxcXG92ZXJwYXJlbicsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcb3ZlcmFyY3tBQn0nKSkudG9FcXVhbCgnXFxcXG92ZXJwYXJlbntBQn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBhbmRzIFxcXFxhYnMgdG8gbmF0aXZlIFxcXFxsZWZ0fC4uXFxcXHJpZ2h0fCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcYWJze3h9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3t9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fFxcXFxyaWdodHwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG5lc3RlZCBicmFjZXMgaW5zaWRlIFxcXFxhYnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3tcXFxcZnJhY3sxfXsyfX0nKSkudG9FcXVhbCgnXFxcXGxlZnR8XFxcXGZyYWN7MX17Mn1cXFxccmlnaHR8Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBzZXZlcmFsIG9jY3VycmVuY2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxhYnN7YX0rXFxcXGFic3tifScpKS50b0VxdWFsKCdcXFxcbGVmdHxhXFxcXHJpZ2h0fCtcXFxcbGVmdHxiXFxcXHJpZ2h0fCcpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezF9XFxcXGxvbmdkaXZ7Mn0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17MX1cXFxcZW5jbG9zZXtsb25nZGl2fXsyfScpO1xuICAgIH0pO1xuXG4gICAgLy8gYCVgIHN0YXJ0cyBhIGNvbW1lbnQgaW4gcmVhbCBMYVRlWCwgc28gTWF0aExpdmUgZHJvcHMgaXQgYW5kIGV2ZXJ5dGhpbmdcbiAgICAvLyBhZnRlciBpdC4gTWF0aFF1aWxsIGhhZCBubyBjb21tZW50cywgc28gbGF0ZXggYXV0aG9yZWQgdW5kZXIgaXQgLSBvciBieVxuICAgIC8vIGhhbmQgLSBjYW4gY2FycnkgYSBiYXJlIGAlYCB0aGF0IHdvdWxkIHNpbGVudGx5IHRydW5jYXRlIHRoZSBleHByZXNzaW9uLlxuICAgIGl0KCdlc2NhcGVzIGEgYmFyZSAlIHNvIGl0IGNhbm5vdCBjb21tZW50IG91dCB0aGUgcmVzdCBvZiB0aGUgbGluZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCclJykpLnRvRXF1YWwoJ1xcXFwlJyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnNTAlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCd4JXknKSkudG9FcXVhbCgneFxcXFwleScpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2ElYiVjJykpLnRvRXF1YWwoJ2FcXFxcJWJcXFxcJWMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgYW4gYWxyZWFkeS1lc2NhcGVkICUgYWxvbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXCUnKSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCc1MFxcXFwlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIC8vIGlkZW1wb3RlbnQ6IHRvTWF0aExpdmUgbWF5IHJ1biBvdmVyIGxhdGV4IHRoYXQgY2FtZSBiYWNrIG91dCBvZiBhIGZpZWxkXG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyh0b05hdGl2ZUNvbW1hbmRzKCc1MCUnKSkpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICB9KTtcblxuICAgIC8vIGBcXFxcYCBpcyBhIGxpbmUgYnJlYWssIG5vdCBhbiBlc2NhcGUsIHNvIHRoZSBgJWAgYWZ0ZXIgaXQgaXMgc3RpbGwgYmFyZS5cbiAgICBpdCgnY291bnRzIGJhY2tzbGFzaGVzIHRvIGRlY2lkZSB3aGV0aGVyIGEgJSBpcyBlc2NhcGVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2FcXFxcXFxcXCViJykpLnRvRXF1YWwoJ2FcXFxcXFxcXFxcXFwlYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xlYXZlcyBvdGhlciBsYXRleCB1bnRvdWNoZWQnLCAoKSA9PiB7XG4gICAgICBbJ1xcXFxmcmFjezF9ezJ9JywgJ1xcXFxwaScsICdcXFxcc3FydHt4fScsICdcXFxcb3ZlcmxpbmV7QUJ9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyhsKSkudG9FcXVhbChsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbnVsbGlzaCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJycpKS50b0VxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBhcHBsaWVkIGJ5IHRvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7NX0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17NX0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBsZWF2ZSBhIHBpZSBtYWNybyBpbiB3aGF0IHJlYWNoZXMgdGhlIGZpZWxkJywgKCkgPT4ge1xuICAgICAgWydcXFxcbG9uZ2Rpdns3fScsICdcXFxcYWJzezd9JywgJ1xcXFxvdmVyYXJjezd9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB0b01hdGhMaXZlKGwpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLm5vdC50b01hdGNoKC9cXFxcbG9uZ2RpdnxcXFxcYWJzfFxcXFxvdmVyYXJjLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpZWxkSWRzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGlkcyBpbiBkb2N1bWVudCBvcmRlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWVsZElkcygnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fStcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IyXXt9JykpLnRvRXF1YWwoWydyMScsICdyMiddKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFtdIHdoZW4gdGhlcmUgYXJlIG5vbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmllbGRJZHMoJ3greScpKS50b0VxdWFsKFtdKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyh1bmRlZmluZWQpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyByZXBlYXRhYmxlIChyZWdleCBsYXN0SW5kZXggaXMgcmVzZXQpJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXggPSAnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSc7XG5cbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWF0aFF1aWxsIHJlZ2lzdGVyZWQgc29tZSBrZXlwYWQgbmFtZXMgYXMgYWxpYXNlcyBvZiBhIGRpZmZlcmVudCBjb21tYW5kOlxuICAvLyB0aGUgZGl2aWRlIGtleSBzdG9yZWQgYFxcZGl2YCwgbm90IGBcXGRpdmlkZWAuIE1hdGhMaXZlIGtub3dzIGBcXGRpdmlkZWAgb25seSBhc1xuICAvLyBhIHBpZSBtYWNybyBhbmQgc2VyaWFsaXNlcyBpdCB1bmRlciB0aGF0IG5hbWUsIHNvIGl0IHJlYWNoZWQgc3RvcmFnZSBhbmRcbiAgLy8gTWF0aEpheCAod2hpY2ggaGFzIG5vIGBcXGRpdmlkZWApIHJlbmRlcmVkIGl0IGFzIHJlZCB0ZXh0LlxuICBkZXNjcmliZSgnTWF0aFF1aWxsIGNvbW1hbmQgYWxpYXNlcycsICgpID0+IHtcbiAgICBpdCgndGhlIGRpdmlkZSBhbmQgcGVycGVuZGljdWxhciBrZXlzIGluc2VydCB0aGUgY29tbWFuZCBNYXRoUXVpbGwgc3RvcmVkJywgKCkgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICAgIGNvbnN0IHsgZGl2aWRlIH0gPSByZXF1aXJlKCcuLi9rZXlzL2Jhc2ljLW9wZXJhdG9ycycpO1xuICAgICAgLy8gRXhwb3J0ZWQgdW5kZXIgYSBwcmUtZXhpc3RpbmcgbWlzc3BlbGxpbmcuXG4gICAgICBjb25zdCB7IHBlcnBpbmRpY3VsYXI6IHBlcnBlbmRpY3VsYXIgfSA9IHJlcXVpcmUoJy4uL2tleXMvZ2VvbWV0cnknKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgZ2xvYmFsLXJlcXVpcmUgKi9cblxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKGRpdmlkZSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZGl2JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJwZW5kaWN1bGFyKSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxwZXJwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdG9yZXMgdGhlIGNhbm9uaWNhbCBjb21tYW5kIGZvciBsYXRleCB0aGF0IHN0aWxsIGNhcnJpZXMgYW4gYWxpYXMnLCAoKSA9PiB7XG4gICAgICAvLyBUeXBlZCBpbnRvIHRoZSBmaWVsZCwgb3Igc2F2ZWQgYmVmb3JlIHRoZSBrZXlwYWQgcmVzb2x2ZWQgdGhlIGFsaWFzLlxuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnMVxcXFxkaXZpZGUgNicpKS50b0VxdWFsKCcxXFxcXGRpdiA2Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdhXFxcXHBlcnBlbmRpY3VsYXIgYicpKS50b0VxdWFsKCdhXFxcXHBlcnAgYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29ubHkgcmVwbGFjZXMgd2hvbGUgY29tbWFuZCBuYW1lcycsICgpID0+IHtcbiAgICAgIC8vIFxcZGl2aWRlb250aW1lcyBpcyBhIHJlYWwgQU1TIHN5bWJvbCBhbmQgbXVzdCBzdXJ2aXZlLlxuICAgICAgZXhwZWN0KHRvQ2Fub25pY2FsQ29tbWFuZHMoJ2FcXFxcZGl2aWRlb250aW1lcyBiJykpLnRvRXF1YWwoJ2FcXFxcZGl2aWRlb250aW1lcyBiJyk7XG4gICAgICBleHBlY3QodG9DYW5vbmljYWxDb21tYW5kcygnXFxcXGRpdmlkZVxcXFxkaXZpZGUnKSkudG9FcXVhbCgnXFxcXGRpdlxcXFxkaXYnKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkb3VibGUgcHJpbWUga2V5OiBNYXRoTGl2ZSBzZXJpYWxpc2VzIGA1JydgIGFzIGA1XntcXGRvdWJsZXByaW1lfWAsXG4gICAgLy8gd2hpY2ggTWF0aEpheCBjYW5ub3QgcmVuZGVyIChyZWQgYFxcZG91YmxlcHJpbWVgKS4gTWF0aFF1aWxsIHN0b3JlZCBgNScnYC5cbiAgICBpdCgnc3RvcmVzIHRoZSBkb3VibGUgcHJpbWUga2V5IGFzIGFwb3N0cm9waGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCdcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XntcXFxccHJpbWVcXFxccHJpbWVcXFxccHJpbWV9JykpLnRvRXF1YWwoXCJ4JycnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGRvdWJsZXByaW1lJykpLnRvRXF1YWwoXCInJ1wiKTtcbiAgICB9KTtcblxuICAgIC8vIFR5cGluZyBgJ2AgdHdpY2UgeWllbGRzIHR3byBzdXBlcnNjcmlwdCBncm91cHMgLSBhIE1hdGhKYXggZG91YmxlLWV4cG9uZW50XG4gICAgLy8gZXJyb3IgLSBzbyB0aGV5IGNvbGxhcHNlIGludG8gYXBvc3Ryb3BoZXMgdG9vLlxuICAgIGl0KCdjb2xsYXBzZXMgYWRqYWNlbnQgcHJpbWUgc3VwZXJzY3JpcHRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfV57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCcnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXHByaW1lfV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgc3VwZXJzY3JpcHRzIHRoYXQgaG9sZCBtb3JlIHRoYW4gcHJpbWVzIGFsb25lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lIDJ9JykpLnRvRXF1YWwoJ3hee1xcXFxwcmltZSAyfScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57Mn0nKSkudG9FcXVhbCgneF57Mn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBzdG9yZWQgcHJpbWVzIHVuY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoXCIxMl57XFxcXGNpcmN9MzAnMTUnJ1wiKSkudG9FcXVhbChcIjEyXntcXFxcY2lyY30zMCcxNScnXCIpO1xuICAgIH0pO1xuXG4gICAgLy8gYDXigLI24oCzYCB0eXBlZCBvciBwYXN0ZWQgYXMgY2hhcmFjdGVycyBzZXJpYWxpc2VzIGFzIGJhcmUgY29tbWFuZHMuIEEgYmFyZVxuICAgIC8vIGBcXHByaW1lYCBpcyBmdWxsIHNpemUgaW4gTWF0aEpheCB3aGlsZSBgJydgIGlzIGEgc3VwZXJzY3JpcHQsIHNvIHN0b3JpbmdcbiAgICAvLyBgNVxccHJpbWU2JydgIGRyZXcgdGhlIHNpbmdsZSBwcmltZSBsYXJnZXIgdGhhbiBlYWNoIHN0cm9rZSBvZiB0aGUgZG91YmxlLlxuICAgIGl0KCdzdG9yZXMgYmFyZSBwcmltZXMgYXMgYXBvc3Ryb3BoZXMsIHNvIHNpbmdsZSBhbmQgZG91YmxlIG1hdGNoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNVxcXFxwcmltZTZcXFxcZG91YmxlcHJpbWUnKSkudG9FcXVhbChcIjUnNicnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNVxcXFxwcmltZSA2XFxcXGRvdWJsZXByaW1lJykpLnRvRXF1YWwoXCI1JyA2JydcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxccHJpbWUnKSkudG9FcXVhbChcIidcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcZnJhY3s1XFxcXHByaW1lfXsyfScpKS50b0VxdWFsKFwiXFxcXGZyYWN7NSd9ezJ9XCIpO1xuICAgIH0pO1xuXG4gICAgLy8gSW5zaWRlIGEgc2NyaXB0IGEgcHJpbWUgaXMgYWxyZWFkeSBhIHN1cGVyc2NyaXB0OyBhbiBhcG9zdHJvcGhlIHRoZXJlXG4gICAgLy8gd291bGQgYmUgYSBwcmltZSAqb2YqIHRoZSBzY3JpcHQuXG4gICAgaXQoJ2tlZXBzIHByaW1lcyB0aGF0IGFyZSBpbnNpZGUgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XntcXFxccHJpbWUgMn0nKSkudG9FcXVhbCgneF57XFxcXHByaW1lIDJ9Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XlxcXFxwcmltZScpKS50b0VxdWFsKCd4XlxcXFxwcmltZScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF97XFxcXHByaW1lfScpKS50b0VxdWFsKCd4X3tcXFxccHJpbWV9Jyk7XG4gICAgICAvLyBNYXRoSmF4IGhhcyBubyBcXGRvdWJsZXByaW1lOiBzcGVsbCBpdCBvdXQgcmF0aGVyIHRoYW4gbGVhdmUgcmVkIHRleHRcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ3hee1xcXFxkb3VibGVwcmltZSAyfScpKS50b0VxdWFsKCd4XntcXFxccHJpbWVcXFxccHJpbWUgMn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjbG9zZXMgdGhlIHNjcmlwdCBzY29wZSBhdCB0aGUgbWF0Y2hpbmcgYnJhY2UnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XnsyfVxcXFxwcmltZScpKS50b0VxdWFsKFwieF57Mn0nXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXGZyYWN7YX17Yn19NlxcXFxkb3VibGVwcmltZScpKS50b0VxdWFsKFwieF57XFxcXGZyYWN7YX17Yn19NicnXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHRvdWNoIGNvbW1hbmRzIHRoYXQgbWVyZWx5IHN0YXJ0IHdpdGggXCJwcmltZVwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXHByaW1lcycpKS50b0VxdWFsKCdcXFxccHJpbWVzJyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcYmFja3ByaW1lJykpLnRvRXF1YWwoJ1xcXFxiYWNrcHJpbWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdubyBrZXlwYWQga2V5IGluc2VydHMgYW4gYWxpYXMgbmFtZScsICgpID0+IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGdsb2JhbC1yZXF1aXJlICovXG4gICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBnbG9iYWwtcmVxdWlyZSAqL1xuICAgICAgY29uc3Qga2V5c0RpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9rZXlzJyk7XG4gICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgIGNvbnN0IGNvbGxlY3QgPSAodikgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkgcmV0dXJuIHYuZm9yRWFjaChjb2xsZWN0KTtcbiAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmNvbW1hbmQgfHwgdi5sYXRleCB8fCB2LndyaXRlKSkga2V5cy5wdXNoKHYpO1xuICAgICAgfTtcblxuICAgICAgZnMucmVhZGRpclN5bmMoa2V5c0RpcilcbiAgICAgICAgLmZpbHRlcigoZikgPT4gL1xcLmpzJC8udGVzdChmKSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlLCBpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiBPYmplY3QudmFsdWVzKHJlcXVpcmUocGF0aC5qb2luKGtleXNEaXIsIGYpKSkuZm9yRWFjaChjb2xsZWN0KSk7XG5cbiAgICAgIGV4cGVjdChrZXlzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDUwKTtcblxuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGtleVRvQWN0aW9uKGspO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChhY3Rpb24gJiYgYWN0aW9uLnZhbHVlKSB8fCAnJztcblxuICAgICAgICBPYmplY3Qua2V5cyhNQVRIUVVJTExfQUxJQVNFUykuZm9yRWFjaCgoYWxpYXMpID0+IHtcbiAgICAgICAgICBleHBlY3QobmV3IFJlZ0V4cChgXFxcXCR7YWxpYXN9KD8hW2EtekEtWl0pYCkudGVzdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgna2V5VG9BY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3ByZWZlcnMgbGF0ZXggd2hlbiB0aGVyZSBpcyBubyBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgbGF0ZXg6ICdcXFxccGknLCB3cml0ZTogJ3AnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXHBpJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIHdyaXRlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgd3JpdGU6ICd4JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ3gnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cGFuZHMgY29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cyBpbnRvIHBsYWNlaG9sZGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcZnJhYycgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZnJhY3sjP317Iz99JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcc3FydCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcc3FydHsjP30nIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ14nIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXnsjP30nIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gTWF0aFF1aWxsJ3MgYC9gIHR1cm5lZCB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb24gaW50byB0aGUgbnVtZXJhdG9yOiB0eXBlXG4gICAgLy8gNSwgcHJlc3MgdGhlIGtleSwgZ2V0IDUvXyB3aXRoIHRoZSBjYXJldCBpbiB0aGUgZGVub21pbmF0b3IuIGAjQGAgaXNcbiAgICAvLyBNYXRoTGl2ZSdzIFwic2VsZWN0aW9uLCBvciB0aGUgaXRlbSBiZWZvcmUgdGhlIGN1cnNvclwiIHRva2VuLCBhbmQgaXMgd2hhdFxuICAgIC8vIE1hdGhMaXZlIGJpbmRzIHRvIGAvYCBpdHNlbGYuXG4gICAgaXQoJ2RpdmlzaW9uIHRha2VzIHRoZSBwcmVjZWRpbmcgaXRlbSBhcyB0aGUgbnVtZXJhdG9yJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJy8nIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGZyYWN7I0B9eyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gZXhwbGljaXQgYmxhbmstb3Zlci1ibGFuayBmcmFjdGlvbiBzdGF5cyBlbXB0eScsICgpID0+IHtcbiAgICAgIC8vIGRpc3RpbmN0IGZyb20gYC9gOiB0aGlzIGtleSBpcyBtZWFudCB0byBpbnNlcnQgdHdvIGVtcHR5IHNsb3RzXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGZyYWN7Iz99eyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhlIHgtb3Zlci1ibGFuayBrZXkgcm91dGVzIHRocm91Z2ggZGl2aXNpb24nLCAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgeE92ZXJCbGFuayB9ID0gcmVxdWlyZSgnLi4va2V5cy9mcmFjdGlvbnMnKTtcblxuICAgICAgZXhwZWN0KHhPdmVyQmxhbmsuY29tbWFuZCkudG9FcXVhbCgnLycpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHhPdmVyQmxhbmspLnZhbHVlKS50b0VxdWFsKCdcXFxcZnJhY3sjQH17Iz99Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGFyZ3VtZW50LWxlc3MgY29tbWFuZHMgdGhyb3VnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxccGknIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXHBpJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjb25jYXRlbmF0ZXMgYXJyYXkgY29tbWFuZHMgKE1hdGhRdWlsbCBjbWQoKSBhcHBsaWVkIHRoZW0gaW4gc2VxdWVuY2UpJywgKCkgPT4ge1xuICAgICAgLy8gTWVhc3VyZWQgQW5nbGVcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6IFsnbScsICdcXFxcYW5nbGUnXSB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ21cXFxcYW5nbGUnIH0pO1xuICAgICAgLy8gbG9nIGJhc2UgbiAtIHRoZSBgX2AgcGFydCBtdXN0IHN0aWxsIGV4cGFuZCB0byBhIHBsYWNlaG9sZGVyXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiBbJ1xcXFxsb2cnLCAnXyddIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGxvZ197Iz99JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhbHdheXMgcmV0dXJucyBhIHN0cmluZyB2YWx1ZSBmb3IgaW5zZXJ0IGFjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBbeyBjb21tYW5kOiBbJ20nLCAnXFxcXGFuZ2xlJ10gfSwgeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0sIHsgd3JpdGU6ICd4JyB9LCB7IGxhdGV4OiAnXFxcXHBpJyB9XS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2Yga2V5VG9BY3Rpb24oaykudmFsdWUpLnRvQmUoJ3N0cmluZycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFwcyBrZXlzdHJva2VzIHRvIE1hdGhMaXZlIHNlbGVjdG9ycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGtleXN0cm9rZTogJ0xlZnQnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2NvbW1hbmQnLCB2YWx1ZTogJ21vdmVUb1ByZXZpb3VzQ2hhcicgfSk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBrZXlzdHJva2U6ICdSaWdodCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY29tbWFuZCcsIHZhbHVlOiAnbW92ZVRvTmV4dENoYXInIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnQmFja3NwYWNlJyB9KSkudG9FcXVhbCh7IHR5cGU6ICdjb21tYW5kJywgdmFsdWU6ICdkZWxldGVCYWNrd2FyZCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIHVua25vd24vZW1wdHkgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24odW5kZWZpbmVkKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHt9KSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnTm9wZScgfSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdsYXRleCB3aW5zIG92ZXIgY29tbWFuZCBvbmx5IHdoZW4gY29tbWFuZCBpcyBhYnNlbnQnLCAoKSA9PiB7XG4gICAgICAvLyBhIGtleSB3aXRoIGJvdGggc2hvdWxkIHVzZSB0aGUgY29tbWFuZCBwYXRoIChtYXRjaGVzIE1hdGhJbnB1dC5rZXlwYWRQcmVzcylcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGxhdGV4OiAnXFxcXGZyYWN7fXt9JywgY29tbWFuZDogJ1xcXFxmcmFjJyB9KSkudG9FcXVhbCh7XG4gICAgICAgIHR5cGU6ICdpbnNlcnQnLFxuICAgICAgICB2YWx1ZTogJ1xcXFxmcmFjeyM/fXsjP30nLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFZQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZ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