tedious 19.1.1 → 19.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/eslint.config.mjs +314 -0
- package/lib/bulk-load-payload.d.ts +1 -1
- package/lib/bulk-load.d.ts +2 -2
- package/lib/bulk-load.js +2 -3
- package/lib/bulk-load.js.map +1 -1
- package/lib/connection.d.ts +1 -1
- package/lib/data-type.d.ts +100 -1
- package/lib/login7-payload.d.ts +3 -3
- package/lib/login7-payload.js +1 -1
- package/lib/login7-payload.js.map +1 -1
- package/lib/ntlm-payload.d.ts +8 -8
- package/lib/ntlm.d.ts +1 -1
- package/lib/packet.d.ts +1 -1
- package/lib/packet.js +1 -1
- package/lib/packet.js.map +1 -1
- package/lib/prelogin-payload.d.ts +7 -7
- package/lib/prelogin-payload.js +1 -1
- package/lib/prelogin-payload.js.map +1 -1
- package/lib/rpcrequest-payload.d.ts +3 -3
- package/lib/sender.d.ts +2 -2
- package/lib/sqlbatch-payload.d.ts +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.d.ts +1 -1
- package/lib/transaction.d.ts +4 -4
- package/package.json +9 -8
- package/tsconfig.json +2 -1
- package/types/js-md4.d.ts +1 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from 'eslint/config';
|
|
2
|
+
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
3
|
+
import stylistic from '@stylistic/eslint-plugin';
|
|
4
|
+
import globals from 'globals';
|
|
5
|
+
import tsParser from '@typescript-eslint/parser';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import js from '@eslint/js';
|
|
9
|
+
import { FlatCompat } from '@eslint/eslintrc';
|
|
10
|
+
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
const compat = new FlatCompat({
|
|
14
|
+
baseDirectory: __dirname,
|
|
15
|
+
recommendedConfig: js.configs.recommended,
|
|
16
|
+
allConfig: js.configs.all
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['src/**/*.d.ts']),
|
|
21
|
+
{
|
|
22
|
+
extends: compat.extends('plugin:@typescript-eslint/eslint-recommended'),
|
|
23
|
+
|
|
24
|
+
plugins: {
|
|
25
|
+
'@typescript-eslint': typescriptEslint,
|
|
26
|
+
'@stylelistic': stylistic,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
languageOptions: {
|
|
30
|
+
globals: {
|
|
31
|
+
...globals.node,
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
parser: tsParser,
|
|
35
|
+
ecmaVersion: 5,
|
|
36
|
+
sourceType: 'module',
|
|
37
|
+
|
|
38
|
+
parserOptions: {
|
|
39
|
+
project: './tsconfig.json',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
rules: {
|
|
44
|
+
'accessor-pairs': 'error',
|
|
45
|
+
'array-callback-return': 'error',
|
|
46
|
+
'arrow-parens': ['error', 'always'],
|
|
47
|
+
|
|
48
|
+
'arrow-spacing': ['error', {
|
|
49
|
+
before: true,
|
|
50
|
+
after: true,
|
|
51
|
+
}],
|
|
52
|
+
|
|
53
|
+
'block-spacing': 'error',
|
|
54
|
+
|
|
55
|
+
'brace-style': ['error', '1tbs', {
|
|
56
|
+
allowSingleLine: true,
|
|
57
|
+
}],
|
|
58
|
+
|
|
59
|
+
'comma-dangle': ['error', 'only-multiline'],
|
|
60
|
+
'comma-spacing': 'error',
|
|
61
|
+
'comma-style': 'error',
|
|
62
|
+
'computed-property-spacing': 'error',
|
|
63
|
+
'constructor-super': 'error',
|
|
64
|
+
'dot-location': ['error', 'property'],
|
|
65
|
+
'dot-notation': 'error',
|
|
66
|
+
'eol-last': 'error',
|
|
67
|
+
'eqeqeq': ['error', 'smart'],
|
|
68
|
+
'for-direction': 'error',
|
|
69
|
+
'func-call-spacing': 'error',
|
|
70
|
+
'func-name-matching': 'error',
|
|
71
|
+
|
|
72
|
+
'func-style': ['error', 'declaration', {
|
|
73
|
+
allowArrowFunctions: true,
|
|
74
|
+
}],
|
|
75
|
+
|
|
76
|
+
'indent': ['error', 2, {
|
|
77
|
+
ArrayExpression: 'first',
|
|
78
|
+
|
|
79
|
+
CallExpression: {
|
|
80
|
+
arguments: 'first',
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
FunctionDeclaration: {
|
|
84
|
+
parameters: 'first',
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
FunctionExpression: {
|
|
88
|
+
parameters: 'first',
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
MemberExpression: 'off',
|
|
92
|
+
ObjectExpression: 'first',
|
|
93
|
+
SwitchCase: 1,
|
|
94
|
+
}],
|
|
95
|
+
|
|
96
|
+
'key-spacing': ['error', {
|
|
97
|
+
mode: 'strict',
|
|
98
|
+
}],
|
|
99
|
+
|
|
100
|
+
'keyword-spacing': 'error',
|
|
101
|
+
'linebreak-style': ['error', 'unix'],
|
|
102
|
+
'new-parens': 'error',
|
|
103
|
+
'no-class-assign': 'error',
|
|
104
|
+
'no-confusing-arrow': 'error',
|
|
105
|
+
'no-const-assign': 'error',
|
|
106
|
+
'no-control-regex': 'error',
|
|
107
|
+
'no-debugger': 'error',
|
|
108
|
+
'no-delete-var': 'error',
|
|
109
|
+
'no-dupe-args': 'error',
|
|
110
|
+
'no-dupe-keys': 'error',
|
|
111
|
+
'no-duplicate-case': 'error',
|
|
112
|
+
'no-duplicate-imports': 'error',
|
|
113
|
+
'no-empty-character-class': 'error',
|
|
114
|
+
'no-ex-assign': 'error',
|
|
115
|
+
'no-extra-boolean-cast': 'error',
|
|
116
|
+
'no-extra-parens': ['error', 'functions'],
|
|
117
|
+
'no-extra-semi': 'error',
|
|
118
|
+
'no-fallthrough': 'error',
|
|
119
|
+
'no-func-assign': 'error',
|
|
120
|
+
'no-global-assign': 'error',
|
|
121
|
+
'no-invalid-regexp': 'error',
|
|
122
|
+
'no-irregular-whitespace': 'error',
|
|
123
|
+
'no-lonely-if': 'error',
|
|
124
|
+
'no-misleading-character-class': 'error',
|
|
125
|
+
'no-mixed-requires': 'error',
|
|
126
|
+
'no-mixed-spaces-and-tabs': 'error',
|
|
127
|
+
|
|
128
|
+
'no-multi-spaces': ['error', {
|
|
129
|
+
ignoreEOLComments: true,
|
|
130
|
+
}],
|
|
131
|
+
|
|
132
|
+
'no-multiple-empty-lines': ['error', {
|
|
133
|
+
max: 2,
|
|
134
|
+
maxEOF: 0,
|
|
135
|
+
maxBOF: 0,
|
|
136
|
+
}],
|
|
137
|
+
|
|
138
|
+
'no-negated-in-lhs': 'error',
|
|
139
|
+
'no-new-require': 'error',
|
|
140
|
+
'no-new-symbol': 'error',
|
|
141
|
+
'no-obj-calls': 'error',
|
|
142
|
+
'no-octal': 'error',
|
|
143
|
+
'no-path-concat': 'error',
|
|
144
|
+
'no-proto': 'error',
|
|
145
|
+
'no-redeclare': 'error',
|
|
146
|
+
'no-restricted-modules': ['error', 'sys'],
|
|
147
|
+
|
|
148
|
+
'no-restricted-syntax': ['error', {
|
|
149
|
+
selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]",
|
|
150
|
+
message: '`setTimeout()` must be invoked with at least two arguments.',
|
|
151
|
+
}, {
|
|
152
|
+
selector: "CallExpression[callee.name='setInterval'][arguments.length<2]",
|
|
153
|
+
message: '`setInterval()` must be invoked with at least two arguments.',
|
|
154
|
+
}, {
|
|
155
|
+
selector: 'ThrowStatement > CallExpression[callee.name=/Error$/]',
|
|
156
|
+
message: 'Use `new` keyword when throwing an `Error`.',
|
|
157
|
+
}],
|
|
158
|
+
|
|
159
|
+
'no-return-await': 'off',
|
|
160
|
+
'no-self-assign': 'error',
|
|
161
|
+
'no-self-compare': 'error',
|
|
162
|
+
'no-tabs': 'error',
|
|
163
|
+
'no-template-curly-in-string': 'error',
|
|
164
|
+
'no-this-before-super': 'error',
|
|
165
|
+
'no-throw-literal': 'error',
|
|
166
|
+
'no-trailing-spaces': 2,
|
|
167
|
+
'no-undef-init': 'error',
|
|
168
|
+
'no-unexpected-multiline': 2,
|
|
169
|
+
'no-unreachable': 'error',
|
|
170
|
+
'no-unsafe-finally': 'error',
|
|
171
|
+
'no-unsafe-negation': 'error',
|
|
172
|
+
'no-unused-labels': 'error',
|
|
173
|
+
|
|
174
|
+
'no-unused-vars': ['error', {
|
|
175
|
+
args: 'none',
|
|
176
|
+
caughtErrors: 'all',
|
|
177
|
+
}],
|
|
178
|
+
|
|
179
|
+
'no-use-before-define': ['error', {
|
|
180
|
+
classes: true,
|
|
181
|
+
functions: false,
|
|
182
|
+
variables: false,
|
|
183
|
+
}],
|
|
184
|
+
|
|
185
|
+
'no-useless-call': 'error',
|
|
186
|
+
'no-useless-catch': 'error',
|
|
187
|
+
'no-useless-concat': 'error',
|
|
188
|
+
'no-useless-constructor': 'error',
|
|
189
|
+
'no-useless-escape': 'error',
|
|
190
|
+
'no-useless-return': 'error',
|
|
191
|
+
'no-void': 'error',
|
|
192
|
+
'no-whitespace-before-property': 'error',
|
|
193
|
+
'no-with': 'error',
|
|
194
|
+
'object-curly-spacing': ['error', 'always'],
|
|
195
|
+
|
|
196
|
+
'one-var': ['error', {
|
|
197
|
+
initialized: 'never',
|
|
198
|
+
}],
|
|
199
|
+
|
|
200
|
+
'one-var-declaration-per-line': 'error',
|
|
201
|
+
'operator-linebreak': ['error', 'after'],
|
|
202
|
+
|
|
203
|
+
'prefer-const': ['error', {
|
|
204
|
+
ignoreReadBeforeAssign: true,
|
|
205
|
+
}],
|
|
206
|
+
|
|
207
|
+
'quotes': ['error', 'single', {
|
|
208
|
+
avoidEscape: true,
|
|
209
|
+
}],
|
|
210
|
+
|
|
211
|
+
'quote-props': ['error', 'consistent'],
|
|
212
|
+
'rest-spread-spacing': 'error',
|
|
213
|
+
'semi': 'error',
|
|
214
|
+
'semi-spacing': 'error',
|
|
215
|
+
'space-before-blocks': ['error', 'always'],
|
|
216
|
+
|
|
217
|
+
'space-before-function-paren': ['error', {
|
|
218
|
+
anonymous: 'never',
|
|
219
|
+
named: 'never',
|
|
220
|
+
asyncArrow: 'always',
|
|
221
|
+
}],
|
|
222
|
+
|
|
223
|
+
'space-in-parens': ['error', 'never'],
|
|
224
|
+
'space-infix-ops': 'error',
|
|
225
|
+
'space-unary-ops': 'error',
|
|
226
|
+
|
|
227
|
+
'spaced-comment': ['error', 'always', {
|
|
228
|
+
block: {
|
|
229
|
+
balanced: true,
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
exceptions: ['-'],
|
|
233
|
+
}],
|
|
234
|
+
|
|
235
|
+
'symbol-description': 'error',
|
|
236
|
+
'template-curly-spacing': 'error',
|
|
237
|
+
'unicode-bom': 'error',
|
|
238
|
+
'use-isnan': 'error',
|
|
239
|
+
'valid-typeof': 'error',
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
files: ['**/*.ts'],
|
|
244
|
+
|
|
245
|
+
rules: {
|
|
246
|
+
'@typescript-eslint/adjacent-overload-signatures': 'error',
|
|
247
|
+
'@typescript-eslint/ban-ts-comment': 'error',
|
|
248
|
+
|
|
249
|
+
'@typescript-eslint/no-empty-object-type': 'error',
|
|
250
|
+
'@typescript-eslint/no-unsafe-function-type': 'error',
|
|
251
|
+
'@typescript-eslint/no-wrapper-object-types': 'error',
|
|
252
|
+
|
|
253
|
+
'@typescript-eslint/consistent-type-assertions': 'error',
|
|
254
|
+
|
|
255
|
+
'@stylelistic/member-delimiter-style': ['error', {
|
|
256
|
+
multiline: {
|
|
257
|
+
delimiter: 'semi',
|
|
258
|
+
requireLast: true,
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
singleline: {
|
|
262
|
+
delimiter: 'comma',
|
|
263
|
+
requireLast: false,
|
|
264
|
+
},
|
|
265
|
+
}],
|
|
266
|
+
|
|
267
|
+
'no-array-constructor': 'off',
|
|
268
|
+
'@typescript-eslint/no-array-constructor': 'error',
|
|
269
|
+
'@typescript-eslint/no-empty-interface': 'error',
|
|
270
|
+
'@typescript-eslint/no-extra-non-null-assertion': 'error',
|
|
271
|
+
'@typescript-eslint/no-inferrable-types': 'error',
|
|
272
|
+
'@typescript-eslint/no-misused-new': 'error',
|
|
273
|
+
'@typescript-eslint/no-namespace': 'error',
|
|
274
|
+
|
|
275
|
+
'@typescript-eslint/no-this-alias': ['error', {
|
|
276
|
+
allowDestructuring: true,
|
|
277
|
+
allowedNames: ['self'],
|
|
278
|
+
}],
|
|
279
|
+
|
|
280
|
+
'no-unused-vars': 'off',
|
|
281
|
+
|
|
282
|
+
'@typescript-eslint/no-unused-vars': ['error', {
|
|
283
|
+
args: 'none',
|
|
284
|
+
caughtErrors: 'all',
|
|
285
|
+
}],
|
|
286
|
+
|
|
287
|
+
'no-use-before-define': 'off',
|
|
288
|
+
|
|
289
|
+
'@typescript-eslint/no-use-before-define': ['error', {
|
|
290
|
+
classes: true,
|
|
291
|
+
functions: false,
|
|
292
|
+
variables: false,
|
|
293
|
+
}],
|
|
294
|
+
|
|
295
|
+
'@typescript-eslint/no-var-requires': 'error',
|
|
296
|
+
'@typescript-eslint/prefer-namespace-keyword': 'error',
|
|
297
|
+
'@typescript-eslint/triple-slash-reference': 'error',
|
|
298
|
+
'@stylelistic/type-annotation-spacing': 'error',
|
|
299
|
+
'@typescript-eslint/return-await': ['error', 'always'],
|
|
300
|
+
'no-var': 'error',
|
|
301
|
+
'prefer-const': 'error',
|
|
302
|
+
'prefer-rest-params': 'error',
|
|
303
|
+
'prefer-spread': 'error',
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
files: ['test/**/*'],
|
|
308
|
+
languageOptions: {
|
|
309
|
+
globals: {
|
|
310
|
+
...globals.mocha,
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
}
|
|
314
|
+
]);
|
|
@@ -3,6 +3,6 @@ export declare class BulkLoadPayload implements AsyncIterable<Buffer> {
|
|
|
3
3
|
bulkLoad: BulkLoad;
|
|
4
4
|
iterator: AsyncIterableIterator<Buffer>;
|
|
5
5
|
constructor(bulkLoad: BulkLoad);
|
|
6
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<Buffer
|
|
6
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<Buffer<ArrayBufferLike>>;
|
|
7
7
|
toString(indent?: string): string;
|
|
8
8
|
}
|
package/lib/bulk-load.d.ts
CHANGED
|
@@ -251,7 +251,7 @@ declare class BulkLoad extends EventEmitter {
|
|
|
251
251
|
/**
|
|
252
252
|
* @private
|
|
253
253
|
*/
|
|
254
|
-
getColMetaData(): Buffer
|
|
254
|
+
getColMetaData(): Buffer<ArrayBufferLike>;
|
|
255
255
|
/**
|
|
256
256
|
* Sets a timeout for this bulk load.
|
|
257
257
|
*
|
|
@@ -266,7 +266,7 @@ declare class BulkLoad extends EventEmitter {
|
|
|
266
266
|
/**
|
|
267
267
|
* @private
|
|
268
268
|
*/
|
|
269
|
-
createDoneToken(): Buffer
|
|
269
|
+
createDoneToken(): Buffer<ArrayBufferLike>;
|
|
270
270
|
/**
|
|
271
271
|
* @private
|
|
272
272
|
*/
|
package/lib/bulk-load.js
CHANGED
|
@@ -280,8 +280,7 @@ class BulkLoad extends _events.EventEmitter {
|
|
|
280
280
|
this.columnsByName = {};
|
|
281
281
|
this.firstRowWritten = false;
|
|
282
282
|
this.streamingMode = false;
|
|
283
|
-
this.rowToPacketTransform = new RowTransform(this);
|
|
284
|
-
|
|
283
|
+
this.rowToPacketTransform = new RowTransform(this);
|
|
285
284
|
this.bulkOptions = {
|
|
286
285
|
checkConstraints,
|
|
287
286
|
fireTriggers,
|
|
@@ -513,4 +512,4 @@ class BulkLoad extends _events.EventEmitter {
|
|
|
513
512
|
}
|
|
514
513
|
var _default = exports.default = BulkLoad;
|
|
515
514
|
module.exports = BulkLoad;
|
|
516
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJGTEFHUyIsIm51bGxhYmxlIiwiY2FzZVNlbiIsInVwZGF0ZWFibGVSZWFkV3JpdGUiLCJ1cGRhdGVhYmxlVW5rbm93biIsImlkZW50aXR5IiwiY29tcHV0ZWQiLCJmaXhlZExlbkNMUlR5cGUiLCJzcGFyc2VDb2x1bW5TZXQiLCJoaWRkZW4iLCJrZXkiLCJudWxsYWJsZVVua25vd24iLCJET05FX1NUQVRVUyIsIkZJTkFMIiwiTU9SRSIsIkVSUk9SIiwiSU5YQUNUIiwiQ09VTlQiLCJBVFROIiwiU1JWRVJST1IiLCJyb3dUb2tlbkJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJUT0tFTl9UWVBFIiwiUk9XIiwidGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIiLCJ0ZXh0UG9pbnRlck51bGxCdWZmZXIiLCJSb3dUcmFuc2Zvcm0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsImJ1bGtMb2FkIiwid3JpdGFibGVPYmplY3RNb2RlIiwibWFpbk9wdGlvbnMiLCJvcHRpb25zIiwiY29sdW1ucyIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsIl90cmFuc2Zvcm0iLCJyb3ciLCJfZW5jb2RpbmciLCJjYWxsYmFjayIsInB1c2giLCJnZXRDb2xNZXRhRGF0YSIsImkiLCJsZW5ndGgiLCJjIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJvYmpOYW1lIiwiZmlyc3RSb3dXcml0dGVuIiwidHlwZSIsInZhbGlkYXRlIiwiY29sbGF0aW9uIiwiZXJyb3IiLCJwYXJhbWV0ZXIiLCJzY2FsZSIsInByZWNpc2lvbiIsIm5hbWUiLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsImNodW5rIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiX2ZsdXNoIiwiY3JlYXRlRG9uZVRva2VuIiwiQnVsa0xvYWQiLCJFdmVudEVtaXR0ZXIiLCJ0YWJsZSIsImNvbm5lY3Rpb25PcHRpb25zIiwiY2hlY2tDb25zdHJhaW50cyIsImZpcmVUcmlnZ2VycyIsImtlZXBOdWxscyIsImxvY2tUYWJsZSIsIm9yZGVyIiwiVHlwZUVycm9yIiwiY29sdW1uIiwiZGlyZWN0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImNhbmNlbGVkIiwiZXhlY3V0aW9uU3RhcnRlZCIsImNvbHVtbnNCeU5hbWUiLCJzdHJlYW1pbmdNb2RlIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJidWxrT3B0aW9ucyIsImFkZENvbHVtbiIsIm91dHB1dCIsIkVycm9yIiwiaWQiLCJyZXNvbHZlTGVuZ3RoIiwicmVzb2x2ZVByZWNpc2lvbiIsInJlc29sdmVTY2FsZSIsImdldE9wdGlvbnNTcWwiLCJhZGRPcHRpb25zIiwib3JkZXJDb2x1bW5zIiwiam9pbiIsImdldEJ1bGtJbnNlcnRTcWwiLCJzcWwiLCJsZW4iLCJkZWNsYXJhdGlvbiIsImdldFRhYmxlQ3JlYXRpb25TcWwiLCJ0QnVmIiwiV3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIndyaXRlVUludDgiLCJDT0xNRVRBREFUQSIsIndyaXRlVUludDE2TEUiLCJqIiwidGRzVmVyc2lvbiIsIndyaXRlVUludDMyTEUiLCJmbGFncyIsIndyaXRlQnVmZmVyIiwiZ2VuZXJhdGVUeXBlSW5mbyIsImhhc1RhYmxlTmFtZSIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVCVmFyY2hhciIsImRhdGEiLCJzZXRUaW1lb3V0IiwidGltZW91dCIsIkRPTkUiLCJzdGF0dXMiLCJjYW5jZWwiLCJlbWl0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2J1bGstbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCBDb25uZWN0aW9uLCB7IHR5cGUgSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBUWVBFIGFzIFRPS0VOX1RZUEUgfSBmcm9tICcuL3Rva2VuL3Rva2VuJztcblxuaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSwgdHlwZSBQYXJhbWV0ZXIgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRkxBR1MgPSB7XG4gIG51bGxhYmxlOiAxIDw8IDAsXG4gIGNhc2VTZW46IDEgPDwgMSxcbiAgdXBkYXRlYWJsZVJlYWRXcml0ZTogMSA8PCAyLFxuICB1cGRhdGVhYmxlVW5rbm93bjogMSA8PCAzLFxuICBpZGVudGl0eTogMSA8PCA0LFxuICBjb21wdXRlZDogMSA8PCA1LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgZml4ZWRMZW5DTFJUeXBlOiAxIDw8IDgsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBzcGFyc2VDb2x1bW5TZXQ6IDEgPDwgMTAsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMy5CXG4gIGhpZGRlbjogMSA8PCAxMywgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGtleTogMSA8PCAxNCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIG51bGxhYmxlVW5rbm93bjogMSA8PCAxNSAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRE9ORV9TVEFUVVMgPSB7XG4gIEZJTkFMOiAweDAwLFxuICBNT1JFOiAweDEsXG4gIEVSUk9SOiAweDIsXG4gIElOWEFDVDogMHg0LFxuICBDT1VOVDogMHgxMCxcbiAgQVRUTjogMHgyMCxcbiAgU1JWRVJST1I6IDB4MTAwXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbE9wdGlvbnMge1xuICBjaGVja0NvbnN0cmFpbnRzOiBib29sZWFuO1xuICBmaXJlVHJpZ2dlcnM6IGJvb2xlYW47XG4gIGtlZXBOdWxsczogYm9vbGVhbjtcbiAgbG9ja1RhYmxlOiBib29sZWFuO1xuICBvcmRlcjogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogJ0FTQycgfCAnREVTQycgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvbm9ycyBjb25zdHJhaW50cyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTFxuICAgKiBbQ0hFQ0tfQ09OU1RSQUlOVFNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODYyNDcodj1zcWwuMTA1KS5hc3B4KS5cbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBjaGVja0NvbnN0cmFpbnRzPzogSW50ZXJuYWxPcHRpb25zWydjaGVja0NvbnN0cmFpbnRzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBpbnNlcnQgdHJpZ2dlcnMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgdGhlIFQtU1FMIFtGSVJFX1RSSUdHRVJTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3NjQwKHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmlyZVRyaWdnZXJzPzogSW50ZXJuYWxPcHRpb25zWydmaXJlVHJpZ2dlcnMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIG51bGwgdmFsdWUgcGFzc2VkLCBpZ25vcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgb24gdGFibGUsIHVzaW5nIFQtU1FMIFtLRUVQX05VTExTXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3ODg3KHY9c3FsLjEyMCkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAga2VlcE51bGxzPzogSW50ZXJuYWxPcHRpb25zWydrZWVwTnVsbHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGxhY2VzIGEgYnVsayB1cGRhdGUoQlUpIGxvY2sgb24gdGFibGUgd2hpbGUgcGVyZm9ybWluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMIFtUQUJMT0NLXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTgwODc2KHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbG9ja1RhYmxlPzogSW50ZXJuYWxPcHRpb25zWydsb2NrVGFibGUnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmRlcmluZyBvZiB0aGUgZGF0YSB0byBwb3NzaWJseSBpbmNyZWFzZSBidWxrIGluc2VydCBwZXJmb3JtYW5jZSwgdXNpbmcgVC1TUUwgW09SREVSXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy9zcWwvc3FsLXNlcnZlci0yMDA4LXIyL21zMTc3NDY4KHY9c3FsLjEwNSkpLiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIG9yZGVyPzogSW50ZXJuYWxPcHRpb25zWydvcmRlciddIHwgdW5kZWZpbmVkO1xufVxuXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFtbQnVsa0xvYWRdXSBmaW5pc2hlcyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3dDb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWRcbiAgICovXG4gIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkIHwgbnVsbCwgcm93Q291bnQ/OiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBDb2x1bW4gZXh0ZW5kcyBQYXJhbWV0ZXIge1xuICBvYmpOYW1lOiBzdHJpbmc7XG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uT3B0aW9ucyB7XG4gIG91dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqL1xuICBsZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIG9iak5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICovXG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn1cblxuY29uc3Qgcm93VG9rZW5CdWZmZXIgPSBCdWZmZXIuZnJvbShbIFRPS0VOX1RZUEUuUk9XIF0pO1xuY29uc3QgdGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIgPSBCdWZmZXIuZnJvbShbXG4gIC8vIFRleHRQb2ludGVyIGxlbmd0aFxuICAweDEwLFxuXG4gIC8vIFRleHRQb2ludGVyXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsXG5cbiAgLy8gVGltZXN0YW1wXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbl0pO1xuY29uc3QgdGV4dFBvaW50ZXJOdWxsQnVmZmVyID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuLy8gQSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyByb3dzIHRvIHBhY2tldHMuXG5jbGFzcyBSb3dUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uTWV0YWRhdGFXcml0dGVuOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgYnVsa0xvYWQ6IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgbWFpbk9wdGlvbnM6IEJ1bGtMb2FkWydvcHRpb25zJ107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBCdWxrTG9hZFsnY29sdW1ucyddO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVsa0xvYWQ6IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoeyB3cml0YWJsZU9iamVjdE1vZGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG4gICAgdGhpcy5tYWluT3B0aW9ucyA9IGJ1bGtMb2FkLm9wdGlvbnM7XG4gICAgdGhpcy5jb2x1bW5zID0gYnVsa0xvYWQuY29sdW1ucztcblxuICAgIHRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2Zvcm0ocm93OiBBcnJheTx1bmtub3duPiB8IHsgW2NvbE5hbWU6IHN0cmluZ106IHVua25vd24gfSwgX2VuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4pIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmdldENvbE1ldGFEYXRhKCkpO1xuICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChyb3dUb2tlbkJ1ZmZlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocm93KSA/IHJvd1tpXSA6IHJvd1tjLm9iak5hbWVdO1xuXG4gICAgICBpZiAoIXRoaXMuYnVsa0xvYWQuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBjLnR5cGUudmFsaWRhdGUodmFsdWUsIGMuY29sbGF0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyYW1ldGVyID0ge1xuICAgICAgICBsZW5ndGg6IGMubGVuZ3RoLFxuICAgICAgICBzY2FsZTogYy5zY2FsZSxcbiAgICAgICAgcHJlY2lzaW9uOiBjLnByZWNpc2lvbixcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoYy50eXBlLm5hbWUgPT09ICdUZXh0JyB8fCBjLnR5cGUubmFtZSA9PT0gJ0ltYWdlJyB8fCBjLnR5cGUubmFtZSA9PT0gJ05UZXh0Jykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHVzaCh0ZXh0UG9pbnRlck51bGxCdWZmZXIpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbWV0ZXIsIHRoaXMubWFpbk9wdGlvbnMpKTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpIHtcbiAgICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mbHVzaChjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmNyZWF0ZURvbmVUb2tlbigpKTtcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG59XG5cbi8qKlxuICogQSBCdWxrTG9hZCBpbnN0YW5jZSBpcyB1c2VkIHRvIHBlcmZvcm0gYSBidWxrIGluc2VydC5cbiAqXG4gKiBVc2UgW1tDb25uZWN0aW9uLm5ld0J1bGtMb2FkXV0gdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlLCBhbmQgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dIHRvIGV4ZWN1dGUgaXQuXG4gKlxuICogRXhhbXBsZSBvZiBCdWxrTG9hZCBVc2FnZXM6XG4gKlxuICogYGBganNcbiAqIC8vIG9wdGlvbmFsIEJ1bGtMb2FkIG9wdGlvbnNcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IGtlZXBOdWxsczogdHJ1ZSB9O1xuICpcbiAqIC8vIGluc3RhbnRpYXRlIC0gcHJvdmlkZSB0aGUgdGFibGUgd2hlcmUgeW91J2xsIGJlIGluc2VydGluZyB0bywgb3B0aW9ucyBhbmQgYSBjYWxsYmFja1xuICogY29uc3QgYnVsa0xvYWQgPSBjb25uZWN0aW9uLm5ld0J1bGtMb2FkKCdNeVRhYmxlJywgb3B0aW9ucywgKGVycm9yLCByb3dDb3VudCkgPT4ge1xuICogICBjb25zb2xlLmxvZygnaW5zZXJ0ZWQgJWQgcm93cycsIHJvd0NvdW50KTtcbiAqIH0pO1xuICpcbiAqIC8vIHNldHVwIHlvdXIgY29sdW1ucyAtIGFsd2F5cyBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgbnVsbGFibGVcbiAqIGJ1bGtMb2FkLmFkZENvbHVtbignbXlJbnQnLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteVN0cmluZycsIFRZUEVTLk5WYXJDaGFyLCB7IGxlbmd0aDogNTAsIG51bGxhYmxlOiB0cnVlIH0pO1xuICpcbiAqIC8vIGV4ZWN1dGVcbiAqIGNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkKGJ1bGtMb2FkLCBbXG4gKiAgIHsgbXlJbnQ6IDcsIG15U3RyaW5nOiAnaGVsbG8nIH0sXG4gKiAgIHsgbXlJbnQ6IDIzLCBteVN0cmluZzogJ3dvcmxkJyB9XG4gKiBdKTtcbiAqIGBgYFxuICovXG5jbGFzcyBCdWxrTG9hZCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGV4ZWN1dGlvblN0YXJ0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzdHJlYW1pbmdNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGFibGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbGxiYWNrOiBDYWxsYmFjaztcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uczogQXJyYXk8Q29sdW1uPjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnNCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IENvbHVtbiB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBmaXJzdFJvd1dyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dUb1BhY2tldFRyYW5zZm9ybTogUm93VHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrT3B0aW9uczogSW50ZXJuYWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93czogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdDogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRhYmxlOiBzdHJpbmcsIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBjb25uZWN0aW9uT3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywge1xuICAgIGNoZWNrQ29uc3RyYWludHMgPSBmYWxzZSxcbiAgICBmaXJlVHJpZ2dlcnMgPSBmYWxzZSxcbiAgICBrZWVwTnVsbHMgPSBmYWxzZSxcbiAgICBsb2NrVGFibGUgPSBmYWxzZSxcbiAgICBvcmRlciA9IHt9LFxuICB9OiBPcHRpb25zLCBjYWxsYmFjazogQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrQ29uc3RyYWludHMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaXJlVHJpZ2dlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5maXJlVHJpZ2dlcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGtlZXBOdWxscyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmtlZXBOdWxsc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbG9ja1RhYmxlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMubG9ja1RhYmxlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ29iamVjdCcgfHwgb3JkZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMub3JkZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcmRlcikpIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gIT09ICdBU0MnICYmIGRpcmVjdGlvbiAhPT0gJ0RFU0MnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBvZiB0aGUgXCInICsgY29sdW1uICsgJ1wiIGtleSBpbiB0aGUgXCJvcHRpb25zLm9yZGVyXCIgb2JqZWN0IG11c3QgYmUgZWl0aGVyIFwiQVNDXCIgb3IgXCJERVNDXCIuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXhlY3V0aW9uU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb2xsYXRpb24gPSBjb2xsYXRpb247XG5cbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgdGhpcy5vcHRpb25zID0gY29ubmVjdGlvbk9wdGlvbnM7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgIHRoaXMuY29sdW1uc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMuZmlyc3RSb3dXcml0dGVuID0gZmFsc2U7XG4gICAgdGhpcy5zdHJlYW1pbmdNb2RlID0gZmFsc2U7XG5cbiAgICB0aGlzLnJvd1RvUGFja2V0VHJhbnNmb3JtID0gbmV3IFJvd1RyYW5zZm9ybSh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuXG4gICAgdGhpcy5idWxrT3B0aW9ucyA9IHsgY2hlY2tDb25zdHJhaW50cywgZmlyZVRyaWdnZXJzLCBrZWVwTnVsbHMsIGxvY2tUYWJsZSwgb3JkZXIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBidWxrIGxvYWQuXG4gICAqXG4gICAqIFRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgc2hvdWxkIG1hdGNoIHRoZSB0YWJsZSB5b3UgYXJlIHRyeWluZyB0byBpbnNlcnQgaW50by5cbiAgICogQXR0ZW1wdGluZyB0byBjYWxsIGFkZENvbHVtbiBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIGFkZGVkIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oJ015SW50Q29sdW1uJywgVFlQRVMuSW50LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uXG4gICAqIEBwYXJhbSB0eXBlIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGBkYXRhIHR5cGVzYC5cbiAgICogQHBhcmFtIF9fbmFtZWRQYXJhbWV0ZXJzIEFkZGl0aW9uYWwgY29sdW1uIHR5cGUgaW5mb3JtYXRpb24uIEF0IGEgbWluaW11bSwgYG51bGxhYmxlYCBtdXN0IGJlIHNldCB0byB0cnVlIG9yIGZhbHNlLlxuICAgKiBAcGFyYW0gbGVuZ3RoIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqIEBwYXJhbSBudWxsYWJsZSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGFjY2VwdHMgTlVMTCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBvYmpOYW1lIElmIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaXMgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvdW5kIG9uIGByb3dPYmpgIGFyZ3VtZW50cyBwYXNzZWQgdG8gW1thZGRSb3ddXSBvciBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHByZWNpc2lvbiBGb3IgTnVtZXJpYywgRGVjaW1hbC5cbiAgICogQHBhcmFtIHNjYWxlIEZvciBOdW1lcmljLCBEZWNpbWFsLCBUaW1lLCBEYXRlVGltZTIsIERhdGVUaW1lT2Zmc2V0LlxuICAqL1xuICBhZGRDb2x1bW4obmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgeyBvdXRwdXQgPSBmYWxzZSwgbGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlLCBvYmpOYW1lID0gbmFtZSwgbnVsbGFibGUgPSB0cnVlIH06IENvbHVtbk9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgdGhlIGZpcnN0IHJvdyBoYXMgYmVlbiB3cml0dGVuLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5leGVjdXRpb25TdGFydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlIGFkZGVkIHRvIGJ1bGsgaW5zZXJ0IGFmdGVyIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW46IENvbHVtbiA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24sXG4gICAgICBzY2FsZTogc2NhbGUsXG4gICAgICBvYmpOYW1lOiBvYmpOYW1lLFxuICAgICAgbnVsbGFibGU6IG51bGxhYmxlLFxuICAgICAgY29sbGF0aW9uOiB0aGlzLmNvbGxhdGlvblxuICAgIH07XG5cbiAgICBpZiAoKHR5cGUuaWQgJiAweDMwKSA9PT0gMHgyMCkge1xuICAgICAgaWYgKGNvbHVtbi5sZW5ndGggPT0gbnVsbCAmJiB0eXBlLnJlc29sdmVMZW5ndGgpIHtcbiAgICAgICAgY29sdW1uLmxlbmd0aCA9IHR5cGUucmVzb2x2ZUxlbmd0aChjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlLnJlc29sdmVQcmVjaXNpb24gJiYgY29sdW1uLnByZWNpc2lvbiA9PSBudWxsKSB7XG4gICAgICBjb2x1bW4ucHJlY2lzaW9uID0gdHlwZS5yZXNvbHZlUHJlY2lzaW9uKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVNjYWxlICYmIGNvbHVtbi5zY2FsZSA9PSBudWxsKSB7XG4gICAgICBjb2x1bW4uc2NhbGUgPSB0eXBlLnJlc29sdmVTY2FsZShjb2x1bW4pO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG5cbiAgICB0aGlzLmNvbHVtbnNCeU5hbWVbbmFtZV0gPSBjb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldE9wdGlvbnNTcWwoKSB7XG4gICAgY29uc3QgYWRkT3B0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuY2hlY2tDb25zdHJhaW50cykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdDSEVDS19DT05TVFJBSU5UUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmZpcmVUcmlnZ2Vycykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdGSVJFX1RSSUdHRVJTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMua2VlcE51bGxzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0tFRVBfTlVMTFMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5sb2NrVGFibGUpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnVEFCTE9DSycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLm9yZGVyKSB7XG4gICAgICBjb25zdCBvcmRlckNvbHVtbnMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpKSB7XG4gICAgICAgIG9yZGVyQ29sdW1ucy5wdXNoKGAke2NvbHVtbn0gJHtkaXJlY3Rpb259YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmRlckNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGFkZE9wdGlvbnMucHVzaChgT1JERVIgKCR7b3JkZXJDb2x1bW5zLmpvaW4oJywgJyl9KWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBgIFdJVEggKCR7YWRkT3B0aW9ucy5qb2luKCcsJyl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEJ1bGtJbnNlcnRTcWwoKSB7XG4gICAgbGV0IHNxbCA9ICdpbnNlcnQgYnVsayAnICsgdGhpcy50YWJsZSArICcoJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgc3FsICs9ICcsICc7XG4gICAgICB9XG4gICAgICBzcWwgKz0gJ1snICsgYy5uYW1lICsgJ10gJyArIChjLnR5cGUuZGVjbGFyYXRpb24oYykpO1xuICAgIH1cbiAgICBzcWwgKz0gJyknO1xuXG4gICAgc3FsICs9IHRoaXMuZ2V0T3B0aW9uc1NxbCgpO1xuICAgIHJldHVybiBzcWw7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBzaW1wbHkgYSBoZWxwZXIgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgYENSRUFURSBUQUJMRSBTUUxgIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgY29sdW1ucyBhZGRlZCB0byB0aGUgYnVsa0xvYWQgb2JqZWN0LlxuICAgKiBUaGlzIG1heSBiZSBwYXJ0aWN1bGFybHkgaGFuZHkgd2hlbiB5b3Ugd2FudCB0byBpbnNlcnQgaW50byBhIHRlbXBvcmFyeSB0YWJsZSAoYSB0YWJsZSB3aGljaCBzdGFydHMgd2l0aCBgI2ApLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgc3FsID0gYnVsa0xvYWQuZ2V0VGFibGVDcmVhdGlvblNxbCgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQSBzaWRlIG5vdGUgb24gYnVsayBpbnNlcnRpbmcgaW50byB0ZW1wb3JhcnkgdGFibGVzOiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgYSBsb2NhbCB0ZW1wb3JhcnkgdGFibGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBidWxrIGxvYWQsXG4gICAqIHlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgc2FtZSBjb25uZWN0aW9uIGFuZCBleGVjdXRlIHlvdXIgcmVxdWVzdHMgdXNpbmcgW1tDb25uZWN0aW9uLmV4ZWNTcWxCYXRjaF1dIGluc3RlYWQgb2YgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXVxuICAgKi9cbiAgZ2V0VGFibGVDcmVhdGlvblNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ0NSRUFURSBUQUJMRSAnICsgdGhpcy50YWJsZSArICcoXFxuJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgc3FsICs9ICcsXFxuJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgICBpZiAoYy5udWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNxbCArPSAnICcgKyAoYy5udWxsYWJsZSA/ICdOVUxMJyA6ICdOT1QgTlVMTCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBzcWwgKz0gJ1xcbiknO1xuICAgIHJldHVybiBzcWw7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENvbE1ldGFEYXRhKCkge1xuICAgIGNvbnN0IHRCdWYgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcigxMDAsIG51bGwsIHRydWUpO1xuICAgIC8vIFRva2VuVHlwZVxuICAgIHRCdWYud3JpdGVVSW50OChUT0tFTl9UWVBFLkNPTE1FVEFEQVRBKTtcbiAgICAvLyBDb3VudFxuICAgIHRCdWYud3JpdGVVSW50MTZMRSh0aGlzLmNvbHVtbnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbal07XG4gICAgICAvLyBVc2VyVHlwZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApO1xuICAgICAgfVxuXG4gICAgICAvLyBGbGFnc1xuICAgICAgbGV0IGZsYWdzID0gRkxBR1MudXBkYXRlYWJsZVJlYWRXcml0ZTtcbiAgICAgIGlmIChjLm51bGxhYmxlKSB7XG4gICAgICAgIGZsYWdzIHw9IEZMQUdTLm51bGxhYmxlO1xuICAgICAgfSBlbHNlIGlmIChjLm51bGxhYmxlID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGVVbmtub3duO1xuICAgICAgfVxuICAgICAgdEJ1Zi53cml0ZVVJbnQxNkxFKGZsYWdzKTtcblxuICAgICAgLy8gVFlQRV9JTkZPXG4gICAgICB0QnVmLndyaXRlQnVmZmVyKGMudHlwZS5nZW5lcmF0ZVR5cGVJbmZvKGMsIHRoaXMub3B0aW9ucykpO1xuXG4gICAgICAvLyBUYWJsZU5hbWVcbiAgICAgIGlmIChjLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgICAgIHRCdWYud3JpdGVVc1ZhcmNoYXIodGhpcy50YWJsZSwgJ3VjczInKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29sTmFtZVxuICAgICAgdEJ1Zi53cml0ZUJWYXJjaGFyKGMubmFtZSwgJ3VjczInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRCdWYuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyBidWxrIGxvYWQuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLnNldFRpbWVvdXQodGltZW91dCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGJ1bGsgbG9hZCBpcyBjb25zaWRlcmVkIGZhaWxlZCwgb3IgMCBmb3Igbm8gdGltZW91dC5cbiAgICogICBXaGVuIG5vIHRpbWVvdXQgaXMgc2V0IGZvciB0aGUgYnVsayBsb2FkLCB0aGUgW1tDb25uZWN0aW9uT3B0aW9ucy5yZXF1ZXN0VGltZW91dF1dIG9mIHRoZSBDb25uZWN0aW9uIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVEb25lVG9rZW4oKSB7XG4gICAgLy8gSXQgbWlnaHQgYmUgbmljZSB0byBtYWtlIERvbmVUb2tlbiBhIGNsYXNzIGlmIGFueXRoaW5nIG5lZWRzIHRvIGNyZWF0ZSB0aGVtLCBidXQgZm9yIG5vdywganVzdCBkbyBpdCBoZXJlXG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicgPyA5IDogMTMpO1xuICAgIHRCdWYud3JpdGVVSW50OChUT0tFTl9UWVBFLkRPTkUpO1xuICAgIGNvbnN0IHN0YXR1cyA9IERPTkVfU1RBVFVTLkZJTkFMO1xuICAgIHRCdWYud3JpdGVVSW50MTZMRShzdGF0dXMpO1xuICAgIHRCdWYud3JpdGVVSW50MTZMRSgwKTsgLy8gQ3VyQ21kIChURFMgaWdub3JlcyB0aGlzKVxuICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IC0gZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7IC8vIHJvdyBjb3VudCBpcyA2NCBiaXRzIGluID49IFREUyA3LjJcbiAgICB9XG4gICAgcmV0dXJuIHRCdWYuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWxrTG9hZDtcbm1vZHVsZS5leHBvcnRzID0gQnVsa0xvYWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFBbUQsU0FBQUUsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFLbkQ7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsS0FBSyxHQUFHO0VBQ1pDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUNoQkMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2ZDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQztFQUN6QkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2hCQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFBRTtFQUNsQkMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQUU7RUFDekJDLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQzFCQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUNqQkMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDZEMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxNQUFNQyxXQUFXLEdBQUc7RUFDbEJDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLElBQUksRUFBRSxHQUFHO0VBQ1RDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLE1BQU0sRUFBRSxHQUFHO0VBQ1hDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLFFBQVEsRUFBRTtBQUNaLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQWlGQSxNQUFNQyxjQUFjLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUVDLFdBQVUsQ0FBQ0MsR0FBRyxDQUFFLENBQUM7QUFDdEQsTUFBTUMsNkJBQTZCLEdBQUdKLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDO0FBQ2hEO0FBQ0EsSUFBSTtBQUVKO0FBQ0EsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUU5RjtBQUNBLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQy9DLENBQUM7QUFDRixNQUFNSSxxQkFBcUIsR0FBR0wsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFakQ7QUFDQSxNQUFNSyxZQUFZLFNBQVNDLGlCQUFTLENBQUM7RUFDbkM7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUdFO0FBQ0Y7QUFDQTtFQUNFQyxXQUFXQSxDQUFDQyxRQUFrQixFQUFFO0lBQzlCLEtBQUssQ0FBQztNQUFFQyxrQkFBa0IsRUFBRTtJQUFLLENBQUMsQ0FBQztJQUVuQyxJQUFJLENBQUNELFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNFLFdBQVcsR0FBR0YsUUFBUSxDQUFDRyxPQUFPO0lBQ25DLElBQUksQ0FBQ0MsT0FBTyxHQUFHSixRQUFRLENBQUNJLE9BQU87SUFFL0IsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxLQUFLO0VBQ3BDOztFQUVBO0FBQ0Y7QUFDQTtFQUNFQyxVQUFVQSxDQUFDQyxHQUFvRCxFQUFFQyxTQUFpQixFQUFFQyxRQUFpQyxFQUFFO0lBQ3JILElBQUksQ0FBQyxJQUFJLENBQUNKLHFCQUFxQixFQUFFO01BQy9CLElBQUksQ0FBQ0ssSUFBSSxDQUFDLElBQUksQ0FBQ1YsUUFBUSxDQUFDVyxjQUFjLENBQUMsQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQ04scUJBQXFCLEdBQUcsSUFBSTtJQUNuQztJQUVBLElBQUksQ0FBQ0ssSUFBSSxDQUFDcEIsY0FBYyxDQUFDO0lBRXpCLEtBQUssSUFBSXNCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUNSLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtNQUM1QyxNQUFNRSxDQUFDLEdBQUcsSUFBSSxDQUFDVixPQUFPLENBQUNRLENBQUMsQ0FBQztNQUN6QixJQUFJRyxLQUFLLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDVixHQUFHLENBQUMsR0FBR0EsR0FBRyxDQUFDSyxDQUFDLENBQUMsR0FBR0wsR0FBRyxDQUFDTyxDQUFDLENBQUNJLE9BQU8sQ0FBQztNQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDbEIsUUFBUSxDQUFDbUIsZUFBZSxFQUFFO1FBQ2xDLElBQUk7VUFDRkosS0FBSyxHQUFHRCxDQUFDLENBQUNNLElBQUksQ0FBQ0MsUUFBUSxDQUFDTixLQUFLLEVBQUVELENBQUMsQ0FBQ1EsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxPQUFPQyxLQUFVLEVBQUU7VUFDbkIsT0FBT2QsUUFBUSxDQUFDYyxLQUFLLENBQUM7UUFDeEI7TUFDRjtNQUVBLE1BQU1DLFNBQVMsR0FBRztRQUNoQlgsTUFBTSxFQUFFQyxDQUFDLENBQUNELE1BQU07UUFDaEJZLEtBQUssRUFBRVgsQ0FBQyxDQUFDVyxLQUFLO1FBQ2RDLFNBQVMsRUFBRVosQ0FBQyxDQUFDWSxTQUFTO1FBQ3RCWCxLQUFLLEVBQUVBO01BQ1QsQ0FBQztNQUVELElBQUlELENBQUMsQ0FBQ00sSUFBSSxDQUFDTyxJQUFJLEtBQUssTUFBTSxJQUFJYixDQUFDLENBQUNNLElBQUksQ0FBQ08sSUFBSSxLQUFLLE9BQU8sSUFBSWIsQ0FBQyxDQUFDTSxJQUFJLENBQUNPLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDaEYsSUFBSVosS0FBSyxJQUFJLElBQUksRUFBRTtVQUNqQixJQUFJLENBQUNMLElBQUksQ0FBQ2QscUJBQXFCLENBQUM7VUFDaEM7UUFDRjtRQUVBLElBQUksQ0FBQ2MsSUFBSSxDQUFDZiw2QkFBNkIsQ0FBQztNQUMxQztNQUVBLElBQUk7UUFDRixJQUFJLENBQUNlLElBQUksQ0FBQ0ksQ0FBQyxDQUFDTSxJQUFJLENBQUNRLHVCQUF1QixDQUFDSixTQUFTLEVBQUUsSUFBSSxDQUFDdEIsV0FBVyxDQUFDLENBQUM7UUFDdEUsS0FBSyxNQUFNMkIsS0FBSyxJQUFJZixDQUFDLENBQUNNLElBQUksQ0FBQ1UscUJBQXFCLENBQUNOLFNBQVMsRUFBRSxJQUFJLENBQUN0QixXQUFXLENBQUMsRUFBRTtVQUM3RSxJQUFJLENBQUNRLElBQUksQ0FBQ21CLEtBQUssQ0FBQztRQUNsQjtNQUNGLENBQUMsQ0FBQyxPQUFPTixLQUFVLEVBQUU7UUFDbkIsT0FBT2QsUUFBUSxDQUFDYyxLQUFLLENBQUM7TUFDeEI7SUFDRjtJQUVBUSxPQUFPLENBQUNDLFFBQVEsQ0FBQ3ZCLFFBQVEsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7RUFDRXdCLE1BQU1BLENBQUN4QixRQUFvQixFQUFFO0lBQzNCLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ1YsUUFBUSxDQUFDa0MsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUUxQ0gsT0FBTyxDQUFDQyxRQUFRLENBQUN2QixRQUFRLENBQUM7RUFDNUI7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNMEIsUUFBUSxTQUFTQyxvQkFBWSxDQUFDO0VBQ2xDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUdFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUdFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBS0U7QUFDRjtBQUNBO0VBQ0VyQyxXQUFXQSxDQUFDc0MsS0FBYSxFQUFFZixTQUFnQyxFQUFFZ0IsaUJBQTRDLEVBQUU7SUFDekdDLGdCQUFnQixHQUFHLEtBQUs7SUFDeEJDLFlBQVksR0FBRyxLQUFLO0lBQ3BCQyxTQUFTLEdBQUcsS0FBSztJQUNqQkMsU0FBUyxHQUFHLEtBQUs7SUFDakJDLEtBQUssR0FBRyxDQUFDO0VBQ0YsQ0FBQyxFQUFFbEMsUUFBa0IsRUFBRTtJQUM5QixJQUFJLE9BQU84QixnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7TUFDekMsTUFBTSxJQUFJSyxTQUFTLENBQUMsa0VBQWtFLENBQUM7SUFDekY7SUFFQSxJQUFJLE9BQU9KLFlBQVksS0FBSyxTQUFTLEVBQUU7TUFDckMsTUFBTSxJQUFJSSxTQUFTLENBQUMsOERBQThELENBQUM7SUFDckY7SUFFQSxJQUFJLE9BQU9ILFNBQVMsS0FBSyxTQUFTLEVBQUU7TUFDbEMsTUFBTSxJQUFJRyxTQUFTLENBQUMsMkRBQTJELENBQUM7SUFDbEY7SUFFQSxJQUFJLE9BQU9GLFNBQVMsS0FBSyxTQUFTLEVBQUU7TUFDbEMsTUFBTSxJQUFJRSxTQUFTLENBQUMsMkRBQTJELENBQUM7SUFDbEY7SUFFQSxJQUFJLE9BQU9ELEtBQUssS0FBSyxRQUFRLElBQUlBLEtBQUssS0FBSyxJQUFJLEVBQUU7TUFDL0MsTUFBTSxJQUFJQyxTQUFTLENBQUMsc0RBQXNELENBQUM7SUFDN0U7SUFFQSxLQUFLLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFQyxTQUFTLENBQUMsSUFBSUMsTUFBTSxDQUFDQyxPQUFPLENBQUNMLEtBQUssQ0FBQyxFQUFFO01BQ3ZELElBQUlHLFNBQVMsS0FBSyxLQUFLLElBQUlBLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDL0MsTUFBTSxJQUFJRixTQUFTLENBQUMsb0JBQW9CLEdBQUdDLE1BQU0sR0FBRyxxRUFBcUUsQ0FBQztNQUM1SDtJQUNGO0lBRUEsS0FBSyxDQUFDLENBQUM7SUFFUCxJQUFJLENBQUN0QixLQUFLLEdBQUcwQixTQUFTO0lBQ3RCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLEtBQUs7SUFDckIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxLQUFLO0lBRTdCLElBQUksQ0FBQzdCLFNBQVMsR0FBR0EsU0FBUztJQUUxQixJQUFJLENBQUNlLEtBQUssR0FBR0EsS0FBSztJQUNsQixJQUFJLENBQUNsQyxPQUFPLEdBQUdtQyxpQkFBaUI7SUFDaEMsSUFBSSxDQUFDN0IsUUFBUSxHQUFHQSxRQUFRO0lBQ3hCLElBQUksQ0FBQ0wsT0FBTyxHQUFHLEVBQUU7SUFDakIsSUFBSSxDQUFDZ0QsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUNqQyxlQUFlLEdBQUcsS0FBSztJQUM1QixJQUFJLENBQUNrQyxhQUFhLEdBQUcsS0FBSztJQUUxQixJQUFJLENBQUNDLG9CQUFvQixHQUFHLElBQUl6RCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7SUFFcEQsSUFBSSxDQUFDMEQsV0FBVyxHQUFHO01BQUVoQixnQkFBZ0I7TUFBRUMsWUFBWTtNQUFFQyxTQUFTO01BQUVDLFNBQVM7TUFBRUM7SUFBTSxDQUFDO0VBQ3BGOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VhLFNBQVNBLENBQUM3QixJQUFZLEVBQUVQLElBQWMsRUFBRTtJQUFFcUMsTUFBTSxHQUFHLEtBQUs7SUFBRTVDLE1BQU07SUFBRWEsU0FBUztJQUFFRCxLQUFLO0lBQUVQLE9BQU8sR0FBR1MsSUFBSTtJQUFFeEQsUUFBUSxHQUFHO0VBQW9CLENBQUMsRUFBRTtJQUNwSSxJQUFJLElBQUksQ0FBQ2dELGVBQWUsRUFBRTtNQUN4QixNQUFNLElBQUl1QyxLQUFLLENBQUMsOEVBQThFLENBQUM7SUFDakc7SUFDQSxJQUFJLElBQUksQ0FBQ1AsZ0JBQWdCLEVBQUU7TUFDekIsTUFBTSxJQUFJTyxLQUFLLENBQUMscUVBQXFFLENBQUM7SUFDeEY7SUFFQSxNQUFNYixNQUFjLEdBQUc7TUFDckJ6QixJQUFJLEVBQUVBLElBQUk7TUFDVk8sSUFBSSxFQUFFQSxJQUFJO01BQ1ZaLEtBQUssRUFBRSxJQUFJO01BQ1gwQyxNQUFNLEVBQUVBLE1BQU07TUFDZDVDLE1BQU0sRUFBRUEsTUFBTTtNQUNkYSxTQUFTLEVBQUVBLFNBQVM7TUFDcEJELEtBQUssRUFBRUEsS0FBSztNQUNaUCxPQUFPLEVBQUVBLE9BQU87TUFDaEIvQyxRQUFRLEVBQUVBLFFBQVE7TUFDbEJtRCxTQUFTLEVBQUUsSUFBSSxDQUFDQTtJQUNsQixDQUFDO0lBRUQsSUFBSSxDQUFDRixJQUFJLENBQUN1QyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksRUFBRTtNQUM3QixJQUFJZCxNQUFNLENBQUNoQyxNQUFNLElBQUksSUFBSSxJQUFJTyxJQUFJLENBQUN3QyxhQUFhLEVBQUU7UUFDL0NmLE1BQU0sQ0FBQ2hDLE1BQU0sR0FBR08sSUFBSSxDQUFDd0MsYUFBYSxDQUFDZixNQUFNLENBQUM7TUFDNUM7SUFDRjtJQUVBLElBQUl6QixJQUFJLENBQUN5QyxnQkFBZ0IsSUFBSWhCLE1BQU0sQ0FBQ25CLFNBQVMsSUFBSSxJQUFJLEVBQUU7TUFDckRtQixNQUFNLENBQUNuQixTQUFTLEdBQUdOLElBQUksQ0FBQ3lDLGdCQUFnQixDQUFDaEIsTUFBTSxDQUFDO0lBQ2xEO0lBRUEsSUFBSXpCLElBQUksQ0FBQzBDLFlBQVksSUFBSWpCLE1BQU0sQ0FBQ3BCLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDN0NvQixNQUFNLENBQUNwQixLQUFLLEdBQUdMLElBQUksQ0FBQzBDLFlBQVksQ0FBQ2pCLE1BQU0sQ0FBQztJQUMxQztJQUVBLElBQUksQ0FBQ3pDLE9BQU8sQ0FBQ00sSUFBSSxDQUFDbUMsTUFBTSxDQUFDO0lBRXpCLElBQUksQ0FBQ08sYUFBYSxDQUFDekIsSUFBSSxDQUFDLEdBQUdrQixNQUFNO0VBQ25DOztFQUVBO0FBQ0Y7QUFDQTtFQUNFa0IsYUFBYUEsQ0FBQSxFQUFHO0lBQ2QsTUFBTUMsVUFBVSxHQUFHLEVBQUU7SUFFckIsSUFBSSxJQUFJLENBQUNULFdBQVcsQ0FBQ2hCLGdCQUFnQixFQUFFO01BQ3JDeUIsVUFBVSxDQUFDdEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3RDO0lBRUEsSUFBSSxJQUFJLENBQUM2QyxXQUFXLENBQUNmLFlBQVksRUFBRTtNQUNqQ3dCLFVBQVUsQ0FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUM7SUFDbEM7SUFFQSxJQUFJLElBQUksQ0FBQzZDLFdBQVcsQ0FBQ2QsU0FBUyxFQUFFO01BQzlCdUIsVUFBVSxDQUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMvQjtJQUVBLElBQUksSUFBSSxDQUFDNkMsV0FBVyxDQUFDYixTQUFTLEVBQUU7TUFDOUJzQixVQUFVLENBQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzVCO0lBRUEsSUFBSSxJQUFJLENBQUM2QyxXQUFXLENBQUNaLEtBQUssRUFBRTtNQUMxQixNQUFNc0IsWUFBWSxHQUFHLEVBQUU7TUFFdkIsS0FBSyxNQUFNLENBQUNwQixNQUFNLEVBQUVDLFNBQVMsQ0FBQyxJQUFJQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNPLFdBQVcsQ0FBQ1osS0FBSyxDQUFDLEVBQUU7UUFDeEVzQixZQUFZLENBQUN2RCxJQUFJLENBQUMsR0FBR21DLE1BQU0sSUFBSUMsU0FBUyxFQUFFLENBQUM7TUFDN0M7TUFFQSxJQUFJbUIsWUFBWSxDQUFDcEQsTUFBTSxFQUFFO1FBQ3ZCbUQsVUFBVSxDQUFDdEQsSUFBSSxDQUFDLFVBQVV1RCxZQUFZLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQ3ZEO0lBQ0Y7SUFFQSxJQUFJRixVQUFVLENBQUNuRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3pCLE9BQU8sVUFBVW1ELFVBQVUsQ0FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQzFDLENBQUMsTUFBTTtNQUNMLE9BQU8sRUFBRTtJQUNYO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0VBQ0VDLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2pCLElBQUlDLEdBQUcsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDL0IsS0FBSyxHQUFHLEdBQUc7SUFDM0MsS0FBSyxJQUFJekIsQ0FBQyxHQUFHLENBQUMsRUFBRXlELEdBQUcsR0FBRyxJQUFJLENBQUNqRSxPQUFPLENBQUNTLE1BQU0sRUFBRUQsQ0FBQyxHQUFHeUQsR0FBRyxFQUFFekQsQ0FBQyxFQUFFLEVBQUU7TUFDdkQsTUFBTUUsQ0FBQyxHQUFHLElBQUksQ0FBQ1YsT0FBTyxDQUFDUSxDQUFDLENBQUM7TUFDekIsSUFBSUEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYd0QsR0FBRyxJQUFJLElBQUk7TUFDYjtNQUNBQSxHQUFHLElBQUksR0FBRyxHQUFHdEQsQ0FBQyxDQUFDYSxJQUFJLEdBQUcsSUFBSSxHQUFJYixDQUFDLENBQUNNLElBQUksQ0FBQ2tELFdBQVcsQ0FBQ3hELENBQUMsQ0FBRTtJQUN0RDtJQUNBc0QsR0FBRyxJQUFJLEdBQUc7SUFFVkEsR0FBRyxJQUFJLElBQUksQ0FBQ0wsYUFBYSxDQUFDLENBQUM7SUFDM0IsT0FBT0ssR0FBRztFQUNaOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUcsbUJBQW1CQSxDQUFBLEVBQUc7SUFDcEIsSUFBSUgsR0FBRyxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMvQixLQUFLLEdBQUcsS0FBSztJQUM5QyxLQUFLLElBQUl6QixDQUFDLEdBQUcsQ0FBQyxFQUFFeUQsR0FBRyxHQUFHLElBQUksQ0FBQ2pFLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFRCxDQUFDLEdBQUd5RCxHQUFHLEVBQUV6RCxDQUFDLEVBQUUsRUFBRTtNQUN2RCxNQUFNRSxDQUFDLEdBQUcsSUFBSSxDQUFDVixPQUFPLENBQUNRLENBQUMsQ0FBQztNQUN6QixJQUFJQSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1h3RCxHQUFHLElBQUksS0FBSztNQUNkO01BQ0FBLEdBQUcsSUFBSSxHQUFHLEdBQUd0RCxDQUFDLENBQUNhLElBQUksR0FBRyxJQUFJLEdBQUliLENBQUMsQ0FBQ00sSUFBSSxDQUFDa0QsV0FBVyxDQUFDeEQsQ0FBQyxDQUFFO01BQ3BELElBQUlBLENBQUMsQ0FBQzNDLFFBQVEsS0FBSzhFLFNBQVMsRUFBRTtRQUM1Qm1CLEdBQUcsSUFBSSxHQUFHLElBQUl0RCxDQUFDLENBQUMzQyxRQUFRLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQztNQUNqRDtJQUNGO0lBQ0FpRyxHQUFHLElBQUksS0FBSztJQUNaLE9BQU9BLEdBQUc7RUFDWjs7RUFFQTtBQUNGO0FBQ0E7RUFDRXpELGNBQWNBLENBQUEsRUFBRztJQUNmLE1BQU02RCxJQUFJLEdBQUcsSUFBSUMsK0JBQXNCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7SUFDeEQ7SUFDQUQsSUFBSSxDQUFDRSxVQUFVLENBQUNqRixXQUFVLENBQUNrRixXQUFXLENBQUM7SUFDdkM7SUFDQUgsSUFBSSxDQUFDSSxhQUFhLENBQUMsSUFBSSxDQUFDeEUsT0FBTyxDQUFDUyxNQUFNLENBQUM7SUFFdkMsS0FBSyxJQUFJZ0UsQ0FBQyxHQUFHLENBQUMsRUFBRVIsR0FBRyxHQUFHLElBQUksQ0FBQ2pFLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFZ0UsQ0FBQyxHQUFHUixHQUFHLEVBQUVRLENBQUMsRUFBRSxFQUFFO01BQ3ZELE1BQU0vRCxDQUFDLEdBQUcsSUFBSSxDQUFDVixPQUFPLENBQUN5RSxDQUFDLENBQUM7TUFDekI7TUFDQSxJQUFJLElBQUksQ0FBQzFFLE9BQU8sQ0FBQzJFLFVBQVUsR0FBRyxLQUFLLEVBQUU7UUFDbkNOLElBQUksQ0FBQ0ksYUFBYSxDQUFDLENBQUMsQ0FBQztNQUN2QixDQUFDLE1BQU07UUFDTEosSUFBSSxDQUFDTyxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ3ZCOztNQUVBO01BQ0EsSUFBSUMsS0FBSyxHQUFHOUcsS0FBSyxDQUFDRyxtQkFBbUI7TUFDckMsSUFBSXlDLENBQUMsQ0FBQzNDLFFBQVEsRUFBRTtRQUNkNkcsS0FBSyxJQUFJOUcsS0FBSyxDQUFDQyxRQUFRO01BQ3pCLENBQUMsTUFBTSxJQUFJMkMsQ0FBQyxDQUFDM0MsUUFBUSxLQUFLOEUsU0FBUyxJQUFJLElBQUksQ0FBQzlDLE9BQU8sQ0FBQzJFLFVBQVUsSUFBSSxLQUFLLEVBQUU7UUFDdkVFLEtBQUssSUFBSTlHLEtBQUssQ0FBQ1csZUFBZTtNQUNoQztNQUNBMkYsSUFBSSxDQUFDSSxhQUFhLENBQUNJLEtBQUssQ0FBQzs7TUFFekI7TUFDQVIsSUFBSSxDQUFDUyxXQUFXLENBQUNuRSxDQUFDLENBQUNNLElBQUksQ0FBQzhELGdCQUFnQixDQUFDcEUsQ0FBQyxFQUFFLElBQUksQ0FBQ1gsT0FBTyxDQUFDLENBQUM7O01BRTFEO01BQ0EsSUFBSVcsQ0FBQyxDQUFDTSxJQUFJLENBQUMrRCxZQUFZLEVBQUU7UUFDdkJYLElBQUksQ0FBQ1ksY0FBYyxDQUFDLElBQUksQ0FBQy9DLEtBQUssRUFBRSxNQUFNLENBQUM7TUFDekM7O01BRUE7TUFDQW1DLElBQUksQ0FBQ2EsYUFBYSxDQUFDdkUsQ0FBQyxDQUFDYSxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ3BDO0lBQ0EsT0FBTzZDLElBQUksQ0FBQ2MsSUFBSTtFQUNsQjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxVQUFVQSxDQUFDQyxPQUFnQixFQUFFO0lBQzNCLElBQUksQ0FBQ0EsT0FBTyxHQUFHQSxPQUFPO0VBQ3hCOztFQUVBO0FBQ0Y7QUFDQTtFQUNFdEQsZUFBZUEsQ0FBQSxFQUFHO0lBQ2hCO0lBQ0EsTUFBTXNDLElBQUksR0FBRyxJQUFJQywrQkFBc0IsQ0FBQyxJQUFJLENBQUN0RSxPQUFPLENBQUMyRSxVQUFVLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakZOLElBQUksQ0FBQ0UsVUFBVSxDQUFDakYsV0FBVSxDQUFDZ0csSUFBSSxDQUFDO0lBQ2hDLE1BQU1DLE1BQU0sR0FBRzVHLFdBQVcsQ0FBQ0MsS0FBSztJQUNoQ3lGLElBQUksQ0FBQ0ksYUFBYSxDQUFDYyxNQUFNLENBQUM7SUFDMUJsQixJQUFJLENBQUNJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCSixJQUFJLENBQUNPLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksSUFBSSxDQUFDNUUsT0FBTyxDQUFDMkUsVUFBVSxJQUFJLEtBQUssRUFBRTtNQUNwQ04sSUFBSSxDQUFDTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QjtJQUNBLE9BQU9QLElBQUksQ0FBQ2MsSUFBSTtFQUNsQjs7RUFFQTtBQUNGO0FBQ0E7RUFDRUssTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxJQUFJLENBQUN6QyxRQUFRLEVBQUU7TUFDakI7SUFDRjtJQUVBLElBQUksQ0FBQ0EsUUFBUSxHQUFHLElBQUk7SUFDcEIsSUFBSSxDQUFDMEMsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUNyQjtBQUNGO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLENBQUE3SCxPQUFBLEdBRWNrRSxRQUFRO0FBQ3ZCNEQsTUFBTSxDQUFDRCxPQUFPLEdBQUczRCxRQUFRIiwiaWdub3JlTGlzdCI6W119
|
|
515
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJGTEFHUyIsIm51bGxhYmxlIiwiY2FzZVNlbiIsInVwZGF0ZWFibGVSZWFkV3JpdGUiLCJ1cGRhdGVhYmxlVW5rbm93biIsImlkZW50aXR5IiwiY29tcHV0ZWQiLCJmaXhlZExlbkNMUlR5cGUiLCJzcGFyc2VDb2x1bW5TZXQiLCJoaWRkZW4iLCJrZXkiLCJudWxsYWJsZVVua25vd24iLCJET05FX1NUQVRVUyIsIkZJTkFMIiwiTU9SRSIsIkVSUk9SIiwiSU5YQUNUIiwiQ09VTlQiLCJBVFROIiwiU1JWRVJST1IiLCJyb3dUb2tlbkJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJUT0tFTl9UWVBFIiwiUk9XIiwidGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIiLCJ0ZXh0UG9pbnRlck51bGxCdWZmZXIiLCJSb3dUcmFuc2Zvcm0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsImJ1bGtMb2FkIiwid3JpdGFibGVPYmplY3RNb2RlIiwibWFpbk9wdGlvbnMiLCJvcHRpb25zIiwiY29sdW1ucyIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsIl90cmFuc2Zvcm0iLCJyb3ciLCJfZW5jb2RpbmciLCJjYWxsYmFjayIsInB1c2giLCJnZXRDb2xNZXRhRGF0YSIsImkiLCJsZW5ndGgiLCJjIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJvYmpOYW1lIiwiZmlyc3RSb3dXcml0dGVuIiwidHlwZSIsInZhbGlkYXRlIiwiY29sbGF0aW9uIiwiZXJyb3IiLCJwYXJhbWV0ZXIiLCJzY2FsZSIsInByZWNpc2lvbiIsIm5hbWUiLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsImNodW5rIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiX2ZsdXNoIiwiY3JlYXRlRG9uZVRva2VuIiwiQnVsa0xvYWQiLCJFdmVudEVtaXR0ZXIiLCJ0YWJsZSIsImNvbm5lY3Rpb25PcHRpb25zIiwiY2hlY2tDb25zdHJhaW50cyIsImZpcmVUcmlnZ2VycyIsImtlZXBOdWxscyIsImxvY2tUYWJsZSIsIm9yZGVyIiwiVHlwZUVycm9yIiwiY29sdW1uIiwiZGlyZWN0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImNhbmNlbGVkIiwiZXhlY3V0aW9uU3RhcnRlZCIsImNvbHVtbnNCeU5hbWUiLCJzdHJlYW1pbmdNb2RlIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJidWxrT3B0aW9ucyIsImFkZENvbHVtbiIsIm91dHB1dCIsIkVycm9yIiwiaWQiLCJyZXNvbHZlTGVuZ3RoIiwicmVzb2x2ZVByZWNpc2lvbiIsInJlc29sdmVTY2FsZSIsImdldE9wdGlvbnNTcWwiLCJhZGRPcHRpb25zIiwib3JkZXJDb2x1bW5zIiwiam9pbiIsImdldEJ1bGtJbnNlcnRTcWwiLCJzcWwiLCJsZW4iLCJkZWNsYXJhdGlvbiIsImdldFRhYmxlQ3JlYXRpb25TcWwiLCJ0QnVmIiwiV3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIndyaXRlVUludDgiLCJDT0xNRVRBREFUQSIsIndyaXRlVUludDE2TEUiLCJqIiwidGRzVmVyc2lvbiIsIndyaXRlVUludDMyTEUiLCJmbGFncyIsIndyaXRlQnVmZmVyIiwiZ2VuZXJhdGVUeXBlSW5mbyIsImhhc1RhYmxlTmFtZSIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVCVmFyY2hhciIsImRhdGEiLCJzZXRUaW1lb3V0IiwidGltZW91dCIsIkRPTkUiLCJzdGF0dXMiLCJjYW5jZWwiLCJlbWl0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2J1bGstbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCBDb25uZWN0aW9uLCB7IHR5cGUgSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBUWVBFIGFzIFRPS0VOX1RZUEUgfSBmcm9tICcuL3Rva2VuL3Rva2VuJztcblxuaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSwgdHlwZSBQYXJhbWV0ZXIgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRkxBR1MgPSB7XG4gIG51bGxhYmxlOiAxIDw8IDAsXG4gIGNhc2VTZW46IDEgPDwgMSxcbiAgdXBkYXRlYWJsZVJlYWRXcml0ZTogMSA8PCAyLFxuICB1cGRhdGVhYmxlVW5rbm93bjogMSA8PCAzLFxuICBpZGVudGl0eTogMSA8PCA0LFxuICBjb21wdXRlZDogMSA8PCA1LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgZml4ZWRMZW5DTFJUeXBlOiAxIDw8IDgsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBzcGFyc2VDb2x1bW5TZXQ6IDEgPDwgMTAsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMy5CXG4gIGhpZGRlbjogMSA8PCAxMywgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGtleTogMSA8PCAxNCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIG51bGxhYmxlVW5rbm93bjogMSA8PCAxNSAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRE9ORV9TVEFUVVMgPSB7XG4gIEZJTkFMOiAweDAwLFxuICBNT1JFOiAweDEsXG4gIEVSUk9SOiAweDIsXG4gIElOWEFDVDogMHg0LFxuICBDT1VOVDogMHgxMCxcbiAgQVRUTjogMHgyMCxcbiAgU1JWRVJST1I6IDB4MTAwXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbE9wdGlvbnMge1xuICBjaGVja0NvbnN0cmFpbnRzOiBib29sZWFuO1xuICBmaXJlVHJpZ2dlcnM6IGJvb2xlYW47XG4gIGtlZXBOdWxsczogYm9vbGVhbjtcbiAgbG9ja1RhYmxlOiBib29sZWFuO1xuICBvcmRlcjogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogJ0FTQycgfCAnREVTQycgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvbm9ycyBjb25zdHJhaW50cyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTFxuICAgKiBbQ0hFQ0tfQ09OU1RSQUlOVFNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODYyNDcodj1zcWwuMTA1KS5hc3B4KS5cbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBjaGVja0NvbnN0cmFpbnRzPzogSW50ZXJuYWxPcHRpb25zWydjaGVja0NvbnN0cmFpbnRzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBpbnNlcnQgdHJpZ2dlcnMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgdGhlIFQtU1FMIFtGSVJFX1RSSUdHRVJTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3NjQwKHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmlyZVRyaWdnZXJzPzogSW50ZXJuYWxPcHRpb25zWydmaXJlVHJpZ2dlcnMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIG51bGwgdmFsdWUgcGFzc2VkLCBpZ25vcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgb24gdGFibGUsIHVzaW5nIFQtU1FMIFtLRUVQX05VTExTXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3ODg3KHY9c3FsLjEyMCkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAga2VlcE51bGxzPzogSW50ZXJuYWxPcHRpb25zWydrZWVwTnVsbHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGxhY2VzIGEgYnVsayB1cGRhdGUoQlUpIGxvY2sgb24gdGFibGUgd2hpbGUgcGVyZm9ybWluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMIFtUQUJMT0NLXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTgwODc2KHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbG9ja1RhYmxlPzogSW50ZXJuYWxPcHRpb25zWydsb2NrVGFibGUnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmRlcmluZyBvZiB0aGUgZGF0YSB0byBwb3NzaWJseSBpbmNyZWFzZSBidWxrIGluc2VydCBwZXJmb3JtYW5jZSwgdXNpbmcgVC1TUUwgW09SREVSXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy9zcWwvc3FsLXNlcnZlci0yMDA4LXIyL21zMTc3NDY4KHY9c3FsLjEwNSkpLiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIG9yZGVyPzogSW50ZXJuYWxPcHRpb25zWydvcmRlciddIHwgdW5kZWZpbmVkO1xufVxuXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFtbQnVsa0xvYWRdXSBmaW5pc2hlcyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3dDb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWRcbiAgICovXG4gIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkIHwgbnVsbCwgcm93Q291bnQ/OiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBDb2x1bW4gZXh0ZW5kcyBQYXJhbWV0ZXIge1xuICBvYmpOYW1lOiBzdHJpbmc7XG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uT3B0aW9ucyB7XG4gIG91dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqL1xuICBsZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIG9iak5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICovXG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn1cblxuY29uc3Qgcm93VG9rZW5CdWZmZXIgPSBCdWZmZXIuZnJvbShbIFRPS0VOX1RZUEUuUk9XIF0pO1xuY29uc3QgdGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIgPSBCdWZmZXIuZnJvbShbXG4gIC8vIFRleHRQb2ludGVyIGxlbmd0aFxuICAweDEwLFxuXG4gIC8vIFRleHRQb2ludGVyXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsXG5cbiAgLy8gVGltZXN0YW1wXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbl0pO1xuY29uc3QgdGV4dFBvaW50ZXJOdWxsQnVmZmVyID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuLy8gQSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyByb3dzIHRvIHBhY2tldHMuXG5jbGFzcyBSb3dUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uTWV0YWRhdGFXcml0dGVuOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgYnVsa0xvYWQ6IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgbWFpbk9wdGlvbnM6IEJ1bGtMb2FkWydvcHRpb25zJ107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBCdWxrTG9hZFsnY29sdW1ucyddO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVsa0xvYWQ6IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoeyB3cml0YWJsZU9iamVjdE1vZGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG4gICAgdGhpcy5tYWluT3B0aW9ucyA9IGJ1bGtMb2FkLm9wdGlvbnM7XG4gICAgdGhpcy5jb2x1bW5zID0gYnVsa0xvYWQuY29sdW1ucztcblxuICAgIHRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2Zvcm0ocm93OiBBcnJheTx1bmtub3duPiB8IHsgW2NvbE5hbWU6IHN0cmluZ106IHVua25vd24gfSwgX2VuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4pIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmdldENvbE1ldGFEYXRhKCkpO1xuICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChyb3dUb2tlbkJ1ZmZlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocm93KSA/IHJvd1tpXSA6IHJvd1tjLm9iak5hbWVdO1xuXG4gICAgICBpZiAoIXRoaXMuYnVsa0xvYWQuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBjLnR5cGUudmFsaWRhdGUodmFsdWUsIGMuY29sbGF0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyYW1ldGVyID0ge1xuICAgICAgICBsZW5ndGg6IGMubGVuZ3RoLFxuICAgICAgICBzY2FsZTogYy5zY2FsZSxcbiAgICAgICAgcHJlY2lzaW9uOiBjLnByZWNpc2lvbixcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoYy50eXBlLm5hbWUgPT09ICdUZXh0JyB8fCBjLnR5cGUubmFtZSA9PT0gJ0ltYWdlJyB8fCBjLnR5cGUubmFtZSA9PT0gJ05UZXh0Jykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHVzaCh0ZXh0UG9pbnRlck51bGxCdWZmZXIpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbWV0ZXIsIHRoaXMubWFpbk9wdGlvbnMpKTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpIHtcbiAgICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mbHVzaChjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmNyZWF0ZURvbmVUb2tlbigpKTtcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG59XG5cbi8qKlxuICogQSBCdWxrTG9hZCBpbnN0YW5jZSBpcyB1c2VkIHRvIHBlcmZvcm0gYSBidWxrIGluc2VydC5cbiAqXG4gKiBVc2UgW1tDb25uZWN0aW9uLm5ld0J1bGtMb2FkXV0gdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlLCBhbmQgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dIHRvIGV4ZWN1dGUgaXQuXG4gKlxuICogRXhhbXBsZSBvZiBCdWxrTG9hZCBVc2FnZXM6XG4gKlxuICogYGBganNcbiAqIC8vIG9wdGlvbmFsIEJ1bGtMb2FkIG9wdGlvbnNcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IGtlZXBOdWxsczogdHJ1ZSB9O1xuICpcbiAqIC8vIGluc3RhbnRpYXRlIC0gcHJvdmlkZSB0aGUgdGFibGUgd2hlcmUgeW91J2xsIGJlIGluc2VydGluZyB0bywgb3B0aW9ucyBhbmQgYSBjYWxsYmFja1xuICogY29uc3QgYnVsa0xvYWQgPSBjb25uZWN0aW9uLm5ld0J1bGtMb2FkKCdNeVRhYmxlJywgb3B0aW9ucywgKGVycm9yLCByb3dDb3VudCkgPT4ge1xuICogICBjb25zb2xlLmxvZygnaW5zZXJ0ZWQgJWQgcm93cycsIHJvd0NvdW50KTtcbiAqIH0pO1xuICpcbiAqIC8vIHNldHVwIHlvdXIgY29sdW1ucyAtIGFsd2F5cyBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgbnVsbGFibGVcbiAqIGJ1bGtMb2FkLmFkZENvbHVtbignbXlJbnQnLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteVN0cmluZycsIFRZUEVTLk5WYXJDaGFyLCB7IGxlbmd0aDogNTAsIG51bGxhYmxlOiB0cnVlIH0pO1xuICpcbiAqIC8vIGV4ZWN1dGVcbiAqIGNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkKGJ1bGtMb2FkLCBbXG4gKiAgIHsgbXlJbnQ6IDcsIG15U3RyaW5nOiAnaGVsbG8nIH0sXG4gKiAgIHsgbXlJbnQ6IDIzLCBteVN0cmluZzogJ3dvcmxkJyB9XG4gKiBdKTtcbiAqIGBgYFxuICovXG5jbGFzcyBCdWxrTG9hZCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGV4ZWN1dGlvblN0YXJ0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzdHJlYW1pbmdNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGFibGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbGxiYWNrOiBDYWxsYmFjaztcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uczogQXJyYXk8Q29sdW1uPjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnNCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IENvbHVtbiB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBmaXJzdFJvd1dyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dUb1BhY2tldFRyYW5zZm9ybTogUm93VHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrT3B0aW9uczogSW50ZXJuYWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93czogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdDogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRhYmxlOiBzdHJpbmcsIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBjb25uZWN0aW9uT3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywge1xuICAgIGNoZWNrQ29uc3RyYWludHMgPSBmYWxzZSxcbiAgICBmaXJlVHJpZ2dlcnMgPSBmYWxzZSxcbiAgICBrZWVwTnVsbHMgPSBmYWxzZSxcbiAgICBsb2NrVGFibGUgPSBmYWxzZSxcbiAgICBvcmRlciA9IHt9LFxuICB9OiBPcHRpb25zLCBjYWxsYmFjazogQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrQ29uc3RyYWludHMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaXJlVHJpZ2dlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5maXJlVHJpZ2dlcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGtlZXBOdWxscyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmtlZXBOdWxsc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbG9ja1RhYmxlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMubG9ja1RhYmxlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ29iamVjdCcgfHwgb3JkZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMub3JkZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcmRlcikpIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gIT09ICdBU0MnICYmIGRpcmVjdGlvbiAhPT0gJ0RFU0MnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBvZiB0aGUgXCInICsgY29sdW1uICsgJ1wiIGtleSBpbiB0aGUgXCJvcHRpb25zLm9yZGVyXCIgb2JqZWN0IG11c3QgYmUgZWl0aGVyIFwiQVNDXCIgb3IgXCJERVNDXCIuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXhlY3V0aW9uU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb2xsYXRpb24gPSBjb2xsYXRpb247XG5cbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgdGhpcy5vcHRpb25zID0gY29ubmVjdGlvbk9wdGlvbnM7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgIHRoaXMuY29sdW1uc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMuZmlyc3RSb3dXcml0dGVuID0gZmFsc2U7XG4gICAgdGhpcy5zdHJlYW1pbmdNb2RlID0gZmFsc2U7XG5cbiAgICB0aGlzLnJvd1RvUGFja2V0VHJhbnNmb3JtID0gbmV3IFJvd1RyYW5zZm9ybSh0aGlzKTtcblxuICAgIHRoaXMuYnVsa09wdGlvbnMgPSB7IGNoZWNrQ29uc3RyYWludHMsIGZpcmVUcmlnZ2Vycywga2VlcE51bGxzLCBsb2NrVGFibGUsIG9yZGVyIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgYnVsayBsb2FkLlxuICAgKlxuICAgKiBUaGUgY29sdW1uIGRlZmluaXRpb25zIHNob3VsZCBtYXRjaCB0aGUgdGFibGUgeW91IGFyZSB0cnlpbmcgdG8gaW5zZXJ0IGludG8uXG4gICAqIEF0dGVtcHRpbmcgdG8gY2FsbCBhZGRDb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHJvdyBoYXMgYmVlbiBhZGRlZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdNeUludENvbHVtbicsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29sdW1uLlxuICAgKiBAcGFyYW0gdHlwZSBPbmUgb2YgdGhlIHN1cHBvcnRlZCBgZGF0YSB0eXBlc2AuXG4gICAqIEBwYXJhbSBfX25hbWVkUGFyYW1ldGVycyBBZGRpdGlvbmFsIGNvbHVtbiB0eXBlIGluZm9ybWF0aW9uLiBBdCBhIG1pbmltdW0sIGBudWxsYWJsZWAgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvciBmYWxzZS5cbiAgICogQHBhcmFtIGxlbmd0aCBGb3IgVmFyQ2hhciwgTlZhckNoYXIsIFZhckJpbmFyeS4gVXNlIGxlbmd0aCBhcyBgSW5maW5pdHlgIGZvciBWYXJDaGFyKG1heCksIE5WYXJDaGFyKG1heCkgYW5kIFZhckJpbmFyeShtYXgpLlxuICAgKiBAcGFyYW0gbnVsbGFibGUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKiBAcGFyYW0gb2JqTmFtZSBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0gb3IgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dLCB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSBwcmVjaXNpb24gRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqIEBwYXJhbSBzY2FsZSBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgKi9cbiAgYWRkQ29sdW1uKG5hbWU6IHN0cmluZywgdHlwZTogRGF0YVR5cGUsIHsgb3V0cHV0ID0gZmFsc2UsIGxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSwgb2JqTmFtZSA9IG5hbWUsIG51bGxhYmxlID0gdHJ1ZSB9OiBDb2x1bW5PcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlIGFkZGVkIHRvIGJ1bGsgaW5zZXJ0IGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gd3JpdHRlbi4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uU3RhcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciBleGVjdXRpb24gaGFzIHN0YXJ0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uOiBDb2x1bW4gPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgb2JqTmFtZTogb2JqTmFtZSxcbiAgICAgIG51bGxhYmxlOiBudWxsYWJsZSxcbiAgICAgIGNvbGxhdGlvbjogdGhpcy5jb2xsYXRpb25cbiAgICB9O1xuXG4gICAgaWYgKCh0eXBlLmlkICYgMHgzMCkgPT09IDB4MjApIHtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoID09IG51bGwgJiYgdHlwZS5yZXNvbHZlTGVuZ3RoKSB7XG4gICAgICAgIGNvbHVtbi5sZW5ndGggPSB0eXBlLnJlc29sdmVMZW5ndGgoY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlUHJlY2lzaW9uICYmIGNvbHVtbi5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnByZWNpc2lvbiA9IHR5cGUucmVzb2x2ZVByZWNpc2lvbihjb2x1bW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlLnJlc29sdmVTY2FsZSAmJiBjb2x1bW4uc2NhbGUgPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnNjYWxlID0gdHlwZS5yZXNvbHZlU2NhbGUoY29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lW25hbWVdID0gY29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRPcHRpb25zU3FsKCkge1xuICAgIGNvbnN0IGFkZE9wdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmNoZWNrQ29uc3RyYWludHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnQ0hFQ0tfQ09OU1RSQUlOVFMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5maXJlVHJpZ2dlcnMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnRklSRV9UUklHR0VSUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmtlZXBOdWxscykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdLRUVQX05VTExTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMubG9ja1RhYmxlKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ1RBQkxPQ0snKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXJDb2x1bW5zID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJ1bGtPcHRpb25zLm9yZGVyKSkge1xuICAgICAgICBvcmRlckNvbHVtbnMucHVzaChgJHtjb2x1bW59ICR7ZGlyZWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3JkZXJDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBhZGRPcHRpb25zLnB1c2goYE9SREVSICgke29yZGVyQ29sdW1ucy5qb2luKCcsICcpfSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYCBXSVRIICgke2FkZE9wdGlvbnMuam9pbignLCcpfSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRCdWxrSW5zZXJ0U3FsKCkge1xuICAgIGxldCBzcWwgPSAnaW5zZXJ0IGJ1bGsgJyArIHRoaXMudGFibGUgKyAnKCc7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLCAnO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICB9XG4gICAgc3FsICs9ICcpJztcblxuICAgIHNxbCArPSB0aGlzLmdldE9wdGlvbnNTcWwoKTtcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgc2ltcGx5IGEgaGVscGVyIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIGBDUkVBVEUgVEFCTEUgU1FMYCBzdGF0ZW1lbnQgYmFzZWQgb24gdGhlIGNvbHVtbnMgYWRkZWQgdG8gdGhlIGJ1bGtMb2FkIG9iamVjdC5cbiAgICogVGhpcyBtYXkgYmUgcGFydGljdWxhcmx5IGhhbmR5IHdoZW4geW91IHdhbnQgdG8gaW5zZXJ0IGludG8gYSB0ZW1wb3JhcnkgdGFibGUgKGEgdGFibGUgd2hpY2ggc3RhcnRzIHdpdGggYCNgKS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIHNxbCA9IGJ1bGtMb2FkLmdldFRhYmxlQ3JlYXRpb25TcWwoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEEgc2lkZSBub3RlIG9uIGJ1bGsgaW5zZXJ0aW5nIGludG8gdGVtcG9yYXJ5IHRhYmxlczogaWYgeW91IHdhbnQgdG8gYWNjZXNzIGEgbG9jYWwgdGVtcG9yYXJ5IHRhYmxlIGFmdGVyIGV4ZWN1dGluZyB0aGUgYnVsayBsb2FkLFxuICAgKiB5b3UnbGwgbmVlZCB0byB1c2UgdGhlIHNhbWUgY29ubmVjdGlvbiBhbmQgZXhlY3V0ZSB5b3VyIHJlcXVlc3RzIHVzaW5nIFtbQ29ubmVjdGlvbi5leGVjU3FsQmF0Y2hdXSBpbnN0ZWFkIG9mIFtbQ29ubmVjdGlvbi5leGVjU3FsXV1cbiAgICovXG4gIGdldFRhYmxlQ3JlYXRpb25TcWwoKSB7XG4gICAgbGV0IHNxbCA9ICdDUkVBVEUgVEFCTEUgJyArIHRoaXMudGFibGUgKyAnKFxcbic7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLFxcbic7XG4gICAgICB9XG4gICAgICBzcWwgKz0gJ1snICsgYy5uYW1lICsgJ10gJyArIChjLnR5cGUuZGVjbGFyYXRpb24oYykpO1xuICAgICAgaWYgKGMubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzcWwgKz0gJyAnICsgKGMubnVsbGFibGUgPyAnTlVMTCcgOiAnTk9UIE5VTEwnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3FsICs9ICdcXG4pJztcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRDb2xNZXRhRGF0YSgpIHtcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoMTAwLCBudWxsLCB0cnVlKTtcbiAgICAvLyBUb2tlblR5cGVcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5DT0xNRVRBREFUQSk7XG4gICAgLy8gQ291bnRcbiAgICB0QnVmLndyaXRlVUludDE2TEUodGhpcy5jb2x1bW5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2pdO1xuICAgICAgLy8gVXNlclR5cGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MTZMRSgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmxhZ3NcbiAgICAgIGxldCBmbGFncyA9IEZMQUdTLnVwZGF0ZWFibGVSZWFkV3JpdGU7XG4gICAgICBpZiAoYy5udWxsYWJsZSkge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZTtcbiAgICAgIH0gZWxzZSBpZiAoYy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICAgIGZsYWdzIHw9IEZMQUdTLm51bGxhYmxlVW5rbm93bjtcbiAgICAgIH1cbiAgICAgIHRCdWYud3JpdGVVSW50MTZMRShmbGFncyk7XG5cbiAgICAgIC8vIFRZUEVfSU5GT1xuICAgICAgdEJ1Zi53cml0ZUJ1ZmZlcihjLnR5cGUuZ2VuZXJhdGVUeXBlSW5mbyhjLCB0aGlzLm9wdGlvbnMpKTtcblxuICAgICAgLy8gVGFibGVOYW1lXG4gICAgICBpZiAoYy50eXBlLmhhc1RhYmxlTmFtZSkge1xuICAgICAgICB0QnVmLndyaXRlVXNWYXJjaGFyKHRoaXMudGFibGUsICd1Y3MyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbE5hbWVcbiAgICAgIHRCdWYud3JpdGVCVmFyY2hhcihjLm5hbWUsICd1Y3MyJyk7XG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoaXMgYnVsayBsb2FkLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5zZXRUaW1lb3V0KHRpbWVvdXQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBidWxrIGxvYWQgaXMgY29uc2lkZXJlZCBmYWlsZWQsIG9yIDAgZm9yIG5vIHRpbWVvdXQuXG4gICAqICAgV2hlbiBubyB0aW1lb3V0IGlzIHNldCBmb3IgdGhlIGJ1bGsgbG9hZCwgdGhlIFtbQ29ubmVjdGlvbk9wdGlvbnMucmVxdWVzdFRpbWVvdXRdXSBvZiB0aGUgQ29ubmVjdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lb3V0PzogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlRG9uZVRva2VuKCkge1xuICAgIC8vIEl0IG1pZ2h0IGJlIG5pY2UgdG8gbWFrZSBEb25lVG9rZW4gYSBjbGFzcyBpZiBhbnl0aGluZyBuZWVkcyB0byBjcmVhdGUgdGhlbSwgYnV0IGZvciBub3csIGp1c3QgZG8gaXQgaGVyZVxuICAgIGNvbnN0IHRCdWYgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcih0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInID8gOSA6IDEzKTtcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5ET05FKTtcbiAgICBjb25zdCBzdGF0dXMgPSBET05FX1NUQVRVUy5GSU5BTDtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoc3RhdHVzKTtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7IC8vIEN1ckNtZCAoVERTIGlnbm9yZXMgdGhpcylcbiAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7IC8vIHJvdyBjb3VudCAtIGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgaXMgNjQgYml0cyBpbiA+PSBURFMgNy4yXG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVsa0xvYWQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1bGtMb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQW1ELFNBQUFFLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBS25EO0FBQ0E7QUFDQTtBQUNBLE1BQU1HLEtBQUssR0FBRztFQUNaQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDaEJDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztFQUNmQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQztFQUMzQkMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDekJDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUNoQkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQUU7RUFDbEJDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQztFQUFFO0VBQ3pCQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUMxQkMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDakJDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQ2RDLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsTUFBTUMsV0FBVyxHQUFHO0VBQ2xCQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxJQUFJLEVBQUUsR0FBRztFQUNUQyxLQUFLLEVBQUUsR0FBRztFQUNWQyxNQUFNLEVBQUUsR0FBRztFQUNYQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxJQUFJLEVBQUUsSUFBSTtFQUNWQyxRQUFRLEVBQUU7QUFDWixDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFpRkEsTUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFFQyxXQUFVLENBQUNDLEdBQUcsQ0FBRSxDQUFDO0FBQ3RELE1BQU1DLDZCQUE2QixHQUFHSixNQUFNLENBQUNDLElBQUksQ0FBQztBQUNoRDtBQUNBLElBQUk7QUFFSjtBQUNBLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFFOUY7QUFDQSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUMvQyxDQUFDO0FBQ0YsTUFBTUkscUJBQXFCLEdBQUdMLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpEO0FBQ0EsTUFBTUssWUFBWSxTQUFTQyxpQkFBUyxDQUFDO0VBQ25DO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7RUFDRUMsV0FBV0EsQ0FBQ0MsUUFBa0IsRUFBRTtJQUM5QixLQUFLLENBQUM7TUFBRUMsa0JBQWtCLEVBQUU7SUFBSyxDQUFDLENBQUM7SUFFbkMsSUFBSSxDQUFDRCxRQUFRLEdBQUdBLFFBQVE7SUFDeEIsSUFBSSxDQUFDRSxXQUFXLEdBQUdGLFFBQVEsQ0FBQ0csT0FBTztJQUNuQyxJQUFJLENBQUNDLE9BQU8sR0FBR0osUUFBUSxDQUFDSSxPQUFPO0lBRS9CLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsS0FBSztFQUNwQzs7RUFFQTtBQUNGO0FBQ0E7RUFDRUMsVUFBVUEsQ0FBQ0MsR0FBb0QsRUFBRUMsU0FBaUIsRUFBRUMsUUFBaUMsRUFBRTtJQUNySCxJQUFJLENBQUMsSUFBSSxDQUFDSixxQkFBcUIsRUFBRTtNQUMvQixJQUFJLENBQUNLLElBQUksQ0FBQyxJQUFJLENBQUNWLFFBQVEsQ0FBQ1csY0FBYyxDQUFDLENBQUMsQ0FBQztNQUN6QyxJQUFJLENBQUNOLHFCQUFxQixHQUFHLElBQUk7SUFDbkM7SUFFQSxJQUFJLENBQUNLLElBQUksQ0FBQ3BCLGNBQWMsQ0FBQztJQUV6QixLQUFLLElBQUlzQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDUixPQUFPLENBQUNTLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7TUFDNUMsTUFBTUUsQ0FBQyxHQUFHLElBQUksQ0FBQ1YsT0FBTyxDQUFDUSxDQUFDLENBQUM7TUFDekIsSUFBSUcsS0FBSyxHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ1YsR0FBRyxDQUFDLEdBQUdBLEdBQUcsQ0FBQ0ssQ0FBQyxDQUFDLEdBQUdMLEdBQUcsQ0FBQ08sQ0FBQyxDQUFDSSxPQUFPLENBQUM7TUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQ2xCLFFBQVEsQ0FBQ21CLGVBQWUsRUFBRTtRQUNsQyxJQUFJO1VBQ0ZKLEtBQUssR0FBR0QsQ0FBQyxDQUFDTSxJQUFJLENBQUNDLFFBQVEsQ0FBQ04sS0FBSyxFQUFFRCxDQUFDLENBQUNRLFNBQVMsQ0FBQztRQUM3QyxDQUFDLENBQUMsT0FBT0MsS0FBVSxFQUFFO1VBQ25CLE9BQU9kLFFBQVEsQ0FBQ2MsS0FBSyxDQUFDO1FBQ3hCO01BQ0Y7TUFFQSxNQUFNQyxTQUFTLEdBQUc7UUFDaEJYLE1BQU0sRUFBRUMsQ0FBQyxDQUFDRCxNQUFNO1FBQ2hCWSxLQUFLLEVBQUVYLENBQUMsQ0FBQ1csS0FBSztRQUNkQyxTQUFTLEVBQUVaLENBQUMsQ0FBQ1ksU0FBUztRQUN0QlgsS0FBSyxFQUFFQTtNQUNULENBQUM7TUFFRCxJQUFJRCxDQUFDLENBQUNNLElBQUksQ0FBQ08sSUFBSSxLQUFLLE1BQU0sSUFBSWIsQ0FBQyxDQUFDTSxJQUFJLENBQUNPLElBQUksS0FBSyxPQUFPLElBQUliLENBQUMsQ0FBQ00sSUFBSSxDQUFDTyxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ2hGLElBQUlaLEtBQUssSUFBSSxJQUFJLEVBQUU7VUFDakIsSUFBSSxDQUFDTCxJQUFJLENBQUNkLHFCQUFxQixDQUFDO1VBQ2hDO1FBQ0Y7UUFFQSxJQUFJLENBQUNjLElBQUksQ0FBQ2YsNkJBQTZCLENBQUM7TUFDMUM7TUFFQSxJQUFJO1FBQ0YsSUFBSSxDQUFDZSxJQUFJLENBQUNJLENBQUMsQ0FBQ00sSUFBSSxDQUFDUSx1QkFBdUIsQ0FBQ0osU0FBUyxFQUFFLElBQUksQ0FBQ3RCLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssTUFBTTJCLEtBQUssSUFBSWYsQ0FBQyxDQUFDTSxJQUFJLENBQUNVLHFCQUFxQixDQUFDTixTQUFTLEVBQUUsSUFBSSxDQUFDdEIsV0FBVyxDQUFDLEVBQUU7VUFDN0UsSUFBSSxDQUFDUSxJQUFJLENBQUNtQixLQUFLLENBQUM7UUFDbEI7TUFDRixDQUFDLENBQUMsT0FBT04sS0FBVSxFQUFFO1FBQ25CLE9BQU9kLFFBQVEsQ0FBQ2MsS0FBSyxDQUFDO01BQ3hCO0lBQ0Y7SUFFQVEsT0FBTyxDQUFDQyxRQUFRLENBQUN2QixRQUFRLENBQUM7RUFDNUI7O0VBRUE7QUFDRjtBQUNBO0VBQ0V3QixNQUFNQSxDQUFDeEIsUUFBb0IsRUFBRTtJQUMzQixJQUFJLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNWLFFBQVEsQ0FBQ2tDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFMUNILE9BQU8sQ0FBQ0MsUUFBUSxDQUFDdkIsUUFBUSxDQUFDO0VBQzVCO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTBCLFFBQVEsU0FBU0Msb0JBQVksQ0FBQztFQUNsQztBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUdFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUtFO0FBQ0Y7QUFDQTtFQUNFckMsV0FBV0EsQ0FBQ3NDLEtBQWEsRUFBRWYsU0FBZ0MsRUFBRWdCLGlCQUE0QyxFQUFFO0lBQ3pHQyxnQkFBZ0IsR0FBRyxLQUFLO0lBQ3hCQyxZQUFZLEdBQUcsS0FBSztJQUNwQkMsU0FBUyxHQUFHLEtBQUs7SUFDakJDLFNBQVMsR0FBRyxLQUFLO0lBQ2pCQyxLQUFLLEdBQUcsQ0FBQztFQUNGLENBQUMsRUFBRWxDLFFBQWtCLEVBQUU7SUFDOUIsSUFBSSxPQUFPOEIsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO01BQ3pDLE1BQU0sSUFBSUssU0FBUyxDQUFDLGtFQUFrRSxDQUFDO0lBQ3pGO0lBRUEsSUFBSSxPQUFPSixZQUFZLEtBQUssU0FBUyxFQUFFO01BQ3JDLE1BQU0sSUFBSUksU0FBUyxDQUFDLDhEQUE4RCxDQUFDO0lBQ3JGO0lBRUEsSUFBSSxPQUFPSCxTQUFTLEtBQUssU0FBUyxFQUFFO01BQ2xDLE1BQU0sSUFBSUcsU0FBUyxDQUFDLDJEQUEyRCxDQUFDO0lBQ2xGO0lBRUEsSUFBSSxPQUFPRixTQUFTLEtBQUssU0FBUyxFQUFFO01BQ2xDLE1BQU0sSUFBSUUsU0FBUyxDQUFDLDJEQUEyRCxDQUFDO0lBQ2xGO0lBRUEsSUFBSSxPQUFPRCxLQUFLLEtBQUssUUFBUSxJQUFJQSxLQUFLLEtBQUssSUFBSSxFQUFFO01BQy9DLE1BQU0sSUFBSUMsU0FBUyxDQUFDLHNEQUFzRCxDQUFDO0lBQzdFO0lBRUEsS0FBSyxNQUFNLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDTCxLQUFLLENBQUMsRUFBRTtNQUN2RCxJQUFJRyxTQUFTLEtBQUssS0FBSyxJQUFJQSxTQUFTLEtBQUssTUFBTSxFQUFFO1FBQy9DLE1BQU0sSUFBSUYsU0FBUyxDQUFDLG9CQUFvQixHQUFHQyxNQUFNLEdBQUcscUVBQXFFLENBQUM7TUFDNUg7SUFDRjtJQUVBLEtBQUssQ0FBQyxDQUFDO0lBRVAsSUFBSSxDQUFDdEIsS0FBSyxHQUFHMEIsU0FBUztJQUN0QixJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0lBQ3JCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsS0FBSztJQUU3QixJQUFJLENBQUM3QixTQUFTLEdBQUdBLFNBQVM7SUFFMUIsSUFBSSxDQUFDZSxLQUFLLEdBQUdBLEtBQUs7SUFDbEIsSUFBSSxDQUFDbEMsT0FBTyxHQUFHbUMsaUJBQWlCO0lBQ2hDLElBQUksQ0FBQzdCLFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNMLE9BQU8sR0FBRyxFQUFFO0lBQ2pCLElBQUksQ0FBQ2dELGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxDQUFDakMsZUFBZSxHQUFHLEtBQUs7SUFDNUIsSUFBSSxDQUFDa0MsYUFBYSxHQUFHLEtBQUs7SUFFMUIsSUFBSSxDQUFDQyxvQkFBb0IsR0FBRyxJQUFJekQsWUFBWSxDQUFDLElBQUksQ0FBQztJQUVsRCxJQUFJLENBQUMwRCxXQUFXLEdBQUc7TUFBRWhCLGdCQUFnQjtNQUFFQyxZQUFZO01BQUVDLFNBQVM7TUFBRUMsU0FBUztNQUFFQztJQUFNLENBQUM7RUFDcEY7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRWEsU0FBU0EsQ0FBQzdCLElBQVksRUFBRVAsSUFBYyxFQUFFO0lBQUVxQyxNQUFNLEdBQUcsS0FBSztJQUFFNUMsTUFBTTtJQUFFYSxTQUFTO0lBQUVELEtBQUs7SUFBRVAsT0FBTyxHQUFHUyxJQUFJO0lBQUV4RCxRQUFRLEdBQUc7RUFBb0IsQ0FBQyxFQUFFO0lBQ3BJLElBQUksSUFBSSxDQUFDZ0QsZUFBZSxFQUFFO01BQ3hCLE1BQU0sSUFBSXVDLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQztJQUNqRztJQUNBLElBQUksSUFBSSxDQUFDUCxnQkFBZ0IsRUFBRTtNQUN6QixNQUFNLElBQUlPLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQztJQUN4RjtJQUVBLE1BQU1iLE1BQWMsR0FBRztNQUNyQnpCLElBQUksRUFBRUEsSUFBSTtNQUNWTyxJQUFJLEVBQUVBLElBQUk7TUFDVlosS0FBSyxFQUFFLElBQUk7TUFDWDBDLE1BQU0sRUFBRUEsTUFBTTtNQUNkNUMsTUFBTSxFQUFFQSxNQUFNO01BQ2RhLFNBQVMsRUFBRUEsU0FBUztNQUNwQkQsS0FBSyxFQUFFQSxLQUFLO01BQ1pQLE9BQU8sRUFBRUEsT0FBTztNQUNoQi9DLFFBQVEsRUFBRUEsUUFBUTtNQUNsQm1ELFNBQVMsRUFBRSxJQUFJLENBQUNBO0lBQ2xCLENBQUM7SUFFRCxJQUFJLENBQUNGLElBQUksQ0FBQ3VDLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSSxFQUFFO01BQzdCLElBQUlkLE1BQU0sQ0FBQ2hDLE1BQU0sSUFBSSxJQUFJLElBQUlPLElBQUksQ0FBQ3dDLGFBQWEsRUFBRTtRQUMvQ2YsTUFBTSxDQUFDaEMsTUFBTSxHQUFHTyxJQUFJLENBQUN3QyxhQUFhLENBQUNmLE1BQU0sQ0FBQztNQUM1QztJQUNGO0lBRUEsSUFBSXpCLElBQUksQ0FBQ3lDLGdCQUFnQixJQUFJaEIsTUFBTSxDQUFDbkIsU0FBUyxJQUFJLElBQUksRUFBRTtNQUNyRG1CLE1BQU0sQ0FBQ25CLFNBQVMsR0FBR04sSUFBSSxDQUFDeUMsZ0JBQWdCLENBQUNoQixNQUFNLENBQUM7SUFDbEQ7SUFFQSxJQUFJekIsSUFBSSxDQUFDMEMsWUFBWSxJQUFJakIsTUFBTSxDQUFDcEIsS0FBSyxJQUFJLElBQUksRUFBRTtNQUM3Q29CLE1BQU0sQ0FBQ3BCLEtBQUssR0FBR0wsSUFBSSxDQUFDMEMsWUFBWSxDQUFDakIsTUFBTSxDQUFDO0lBQzFDO0lBRUEsSUFBSSxDQUFDekMsT0FBTyxDQUFDTSxJQUFJLENBQUNtQyxNQUFNLENBQUM7SUFFekIsSUFBSSxDQUFDTyxhQUFhLENBQUN6QixJQUFJLENBQUMsR0FBR2tCLE1BQU07RUFDbkM7O0VBRUE7QUFDRjtBQUNBO0VBQ0VrQixhQUFhQSxDQUFBLEVBQUc7SUFDZCxNQUFNQyxVQUFVLEdBQUcsRUFBRTtJQUVyQixJQUFJLElBQUksQ0FBQ1QsV0FBVyxDQUFDaEIsZ0JBQWdCLEVBQUU7TUFDckN5QixVQUFVLENBQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDdEM7SUFFQSxJQUFJLElBQUksQ0FBQzZDLFdBQVcsQ0FBQ2YsWUFBWSxFQUFFO01BQ2pDd0IsVUFBVSxDQUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNsQztJQUVBLElBQUksSUFBSSxDQUFDNkMsV0FBVyxDQUFDZCxTQUFTLEVBQUU7TUFDOUJ1QixVQUFVLENBQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQy9CO0lBRUEsSUFBSSxJQUFJLENBQUM2QyxXQUFXLENBQUNiLFNBQVMsRUFBRTtNQUM5QnNCLFVBQVUsQ0FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUM7SUFDNUI7SUFFQSxJQUFJLElBQUksQ0FBQzZDLFdBQVcsQ0FBQ1osS0FBSyxFQUFFO01BQzFCLE1BQU1zQixZQUFZLEdBQUcsRUFBRTtNQUV2QixLQUFLLE1BQU0sQ0FBQ3BCLE1BQU0sRUFBRUMsU0FBUyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ08sV0FBVyxDQUFDWixLQUFLLENBQUMsRUFBRTtRQUN4RXNCLFlBQVksQ0FBQ3ZELElBQUksQ0FBQyxHQUFHbUMsTUFBTSxJQUFJQyxTQUFTLEVBQUUsQ0FBQztNQUM3QztNQUVBLElBQUltQixZQUFZLENBQUNwRCxNQUFNLEVBQUU7UUFDdkJtRCxVQUFVLENBQUN0RCxJQUFJLENBQUMsVUFBVXVELFlBQVksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDdkQ7SUFDRjtJQUVBLElBQUlGLFVBQVUsQ0FBQ25ELE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDekIsT0FBTyxVQUFVbUQsVUFBVSxDQUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7SUFDMUMsQ0FBQyxNQUFNO01BQ0wsT0FBTyxFQUFFO0lBQ1g7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7RUFDRUMsZ0JBQWdCQSxDQUFBLEVBQUc7SUFDakIsSUFBSUMsR0FBRyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMvQixLQUFLLEdBQUcsR0FBRztJQUMzQyxLQUFLLElBQUl6QixDQUFDLEdBQUcsQ0FBQyxFQUFFeUQsR0FBRyxHQUFHLElBQUksQ0FBQ2pFLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFRCxDQUFDLEdBQUd5RCxHQUFHLEVBQUV6RCxDQUFDLEVBQUUsRUFBRTtNQUN2RCxNQUFNRSxDQUFDLEdBQUcsSUFBSSxDQUFDVixPQUFPLENBQUNRLENBQUMsQ0FBQztNQUN6QixJQUFJQSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1h3RCxHQUFHLElBQUksSUFBSTtNQUNiO01BQ0FBLEdBQUcsSUFBSSxHQUFHLEdBQUd0RCxDQUFDLENBQUNhLElBQUksR0FBRyxJQUFJLEdBQUliLENBQUMsQ0FBQ00sSUFBSSxDQUFDa0QsV0FBVyxDQUFDeEQsQ0FBQyxDQUFFO0lBQ3REO0lBQ0FzRCxHQUFHLElBQUksR0FBRztJQUVWQSxHQUFHLElBQUksSUFBSSxDQUFDTCxhQUFhLENBQUMsQ0FBQztJQUMzQixPQUFPSyxHQUFHO0VBQ1o7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFRyxtQkFBbUJBLENBQUEsRUFBRztJQUNwQixJQUFJSCxHQUFHLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQy9CLEtBQUssR0FBRyxLQUFLO0lBQzlDLEtBQUssSUFBSXpCLENBQUMsR0FBRyxDQUFDLEVBQUV5RCxHQUFHLEdBQUcsSUFBSSxDQUFDakUsT0FBTyxDQUFDUyxNQUFNLEVBQUVELENBQUMsR0FBR3lELEdBQUcsRUFBRXpELENBQUMsRUFBRSxFQUFFO01BQ3ZELE1BQU1FLENBQUMsR0FBRyxJQUFJLENBQUNWLE9BQU8sQ0FBQ1EsQ0FBQyxDQUFDO01BQ3pCLElBQUlBLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDWHdELEdBQUcsSUFBSSxLQUFLO01BQ2Q7TUFDQUEsR0FBRyxJQUFJLEdBQUcsR0FBR3RELENBQUMsQ0FBQ2EsSUFBSSxHQUFHLElBQUksR0FBSWIsQ0FBQyxDQUFDTSxJQUFJLENBQUNrRCxXQUFXLENBQUN4RCxDQUFDLENBQUU7TUFDcEQsSUFBSUEsQ0FBQyxDQUFDM0MsUUFBUSxLQUFLOEUsU0FBUyxFQUFFO1FBQzVCbUIsR0FBRyxJQUFJLEdBQUcsSUFBSXRELENBQUMsQ0FBQzNDLFFBQVEsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO01BQ2pEO0lBQ0Y7SUFDQWlHLEdBQUcsSUFBSSxLQUFLO0lBQ1osT0FBT0EsR0FBRztFQUNaOztFQUVBO0FBQ0Y7QUFDQTtFQUNFekQsY0FBY0EsQ0FBQSxFQUFHO0lBQ2YsTUFBTTZELElBQUksR0FBRyxJQUFJQywrQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4RDtJQUNBRCxJQUFJLENBQUNFLFVBQVUsQ0FBQ2pGLFdBQVUsQ0FBQ2tGLFdBQVcsQ0FBQztJQUN2QztJQUNBSCxJQUFJLENBQUNJLGFBQWEsQ0FBQyxJQUFJLENBQUN4RSxPQUFPLENBQUNTLE1BQU0sQ0FBQztJQUV2QyxLQUFLLElBQUlnRSxDQUFDLEdBQUcsQ0FBQyxFQUFFUixHQUFHLEdBQUcsSUFBSSxDQUFDakUsT0FBTyxDQUFDUyxNQUFNLEVBQUVnRSxDQUFDLEdBQUdSLEdBQUcsRUFBRVEsQ0FBQyxFQUFFLEVBQUU7TUFDdkQsTUFBTS9ELENBQUMsR0FBRyxJQUFJLENBQUNWLE9BQU8sQ0FBQ3lFLENBQUMsQ0FBQztNQUN6QjtNQUNBLElBQUksSUFBSSxDQUFDMUUsT0FBTyxDQUFDMkUsVUFBVSxHQUFHLEtBQUssRUFBRTtRQUNuQ04sSUFBSSxDQUFDSSxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ3ZCLENBQUMsTUFBTTtRQUNMSixJQUFJLENBQUNPLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDdkI7O01BRUE7TUFDQSxJQUFJQyxLQUFLLEdBQUc5RyxLQUFLLENBQUNHLG1CQUFtQjtNQUNyQyxJQUFJeUMsQ0FBQyxDQUFDM0MsUUFBUSxFQUFFO1FBQ2Q2RyxLQUFLLElBQUk5RyxLQUFLLENBQUNDLFFBQVE7TUFDekIsQ0FBQyxNQUFNLElBQUkyQyxDQUFDLENBQUMzQyxRQUFRLEtBQUs4RSxTQUFTLElBQUksSUFBSSxDQUFDOUMsT0FBTyxDQUFDMkUsVUFBVSxJQUFJLEtBQUssRUFBRTtRQUN2RUUsS0FBSyxJQUFJOUcsS0FBSyxDQUFDVyxlQUFlO01BQ2hDO01BQ0EyRixJQUFJLENBQUNJLGFBQWEsQ0FBQ0ksS0FBSyxDQUFDOztNQUV6QjtNQUNBUixJQUFJLENBQUNTLFdBQVcsQ0FBQ25FLENBQUMsQ0FBQ00sSUFBSSxDQUFDOEQsZ0JBQWdCLENBQUNwRSxDQUFDLEVBQUUsSUFBSSxDQUFDWCxPQUFPLENBQUMsQ0FBQzs7TUFFMUQ7TUFDQSxJQUFJVyxDQUFDLENBQUNNLElBQUksQ0FBQytELFlBQVksRUFBRTtRQUN2QlgsSUFBSSxDQUFDWSxjQUFjLENBQUMsSUFBSSxDQUFDL0MsS0FBSyxFQUFFLE1BQU0sQ0FBQztNQUN6Qzs7TUFFQTtNQUNBbUMsSUFBSSxDQUFDYSxhQUFhLENBQUN2RSxDQUFDLENBQUNhLElBQUksRUFBRSxNQUFNLENBQUM7SUFDcEM7SUFDQSxPQUFPNkMsSUFBSSxDQUFDYyxJQUFJO0VBQ2xCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLFVBQVVBLENBQUNDLE9BQWdCLEVBQUU7SUFDM0IsSUFBSSxDQUFDQSxPQUFPLEdBQUdBLE9BQU87RUFDeEI7O0VBRUE7QUFDRjtBQUNBO0VBQ0V0RCxlQUFlQSxDQUFBLEVBQUc7SUFDaEI7SUFDQSxNQUFNc0MsSUFBSSxHQUFHLElBQUlDLCtCQUFzQixDQUFDLElBQUksQ0FBQ3RFLE9BQU8sQ0FBQzJFLFVBQVUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqRk4sSUFBSSxDQUFDRSxVQUFVLENBQUNqRixXQUFVLENBQUNnRyxJQUFJLENBQUM7SUFDaEMsTUFBTUMsTUFBTSxHQUFHNUcsV0FBVyxDQUFDQyxLQUFLO0lBQ2hDeUYsSUFBSSxDQUFDSSxhQUFhLENBQUNjLE1BQU0sQ0FBQztJQUMxQmxCLElBQUksQ0FBQ0ksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkJKLElBQUksQ0FBQ08sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxJQUFJLENBQUM1RSxPQUFPLENBQUMyRSxVQUFVLElBQUksS0FBSyxFQUFFO01BQ3BDTixJQUFJLENBQUNPLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCO0lBQ0EsT0FBT1AsSUFBSSxDQUFDYyxJQUFJO0VBQ2xCOztFQUVBO0FBQ0Y7QUFDQTtFQUNFSyxNQUFNQSxDQUFBLEVBQUc7SUFDUCxJQUFJLElBQUksQ0FBQ3pDLFFBQVEsRUFBRTtNQUNqQjtJQUNGO0lBRUEsSUFBSSxDQUFDQSxRQUFRLEdBQUcsSUFBSTtJQUNwQixJQUFJLENBQUMwQyxJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3JCO0FBQ0Y7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQTdILE9BQUEsR0FFY2tFLFFBQVE7QUFDdkI0RCxNQUFNLENBQUNELE9BQU8sR0FBRzNELFFBQVEiLCJpZ25vcmVMaXN0IjpbXX0=
|