@hailin-zheng/editor-core 1.0.50 → 1.0.53
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/index-cjs.js +37 -22
- package/index-cjs.js.map +1 -0
- package/index.js +37 -22
- package/index.js.map +1 -0
- package/med_editor/framework/element-define.d.ts +1 -0
- package/med_editor/framework/impl/document/doc-impl.d.ts +6 -0
- package/med_editor/framework/render-define.d.ts +1 -1
- package/package.json +1 -1
- package/med_editor/util/subject.d.ts +0 -34
- package/med_editor/util/table-bind.d.ts +0 -5
package/index-cjs.js
CHANGED
@@ -271,7 +271,7 @@ class RenderObject {
|
|
271
271
|
throw new Error('this.rect.maxWidth is null');
|
272
272
|
}
|
273
273
|
const { padding, margin } = this;
|
274
|
-
return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.
|
274
|
+
return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.right;
|
275
275
|
}
|
276
276
|
/**
|
277
277
|
* 根据内框内容高度,更新外框框体高度
|
@@ -307,33 +307,33 @@ class BranchRenderObject extends RenderObject {
|
|
307
307
|
constructor(element) {
|
308
308
|
super(element);
|
309
309
|
}
|
310
|
-
|
310
|
+
children = [];
|
311
311
|
getItems() {
|
312
|
-
return this.
|
312
|
+
return this.children;
|
313
313
|
}
|
314
314
|
addChild(...items) {
|
315
315
|
for (let i = 0; i < items.length; i++) {
|
316
316
|
const item = items[i];
|
317
317
|
item.parent = this;
|
318
|
-
this.
|
318
|
+
this.children.push(item);
|
319
319
|
}
|
320
320
|
}
|
321
321
|
insertChild(item, index) {
|
322
|
-
this.
|
322
|
+
this.children.splice(index, 0, item);
|
323
323
|
item.parent = this;
|
324
324
|
}
|
325
325
|
removeChild(child) {
|
326
|
-
const index = this.
|
326
|
+
const index = this.children.indexOf(child);
|
327
327
|
if (index < 0) {
|
328
328
|
throw new Error('为查找到当前元素');
|
329
329
|
}
|
330
330
|
if (child.parent === this) ;
|
331
|
-
this.
|
331
|
+
this.children.splice(index, 1);
|
332
332
|
}
|
333
333
|
removeChildByIndex(index) {
|
334
|
-
const child = this.
|
334
|
+
const child = this.children[index];
|
335
335
|
if (child) {
|
336
|
-
this.
|
336
|
+
this.children.splice(index, 1);
|
337
337
|
//child.parent = null;
|
338
338
|
}
|
339
339
|
else {
|
@@ -341,19 +341,19 @@ class BranchRenderObject extends RenderObject {
|
|
341
341
|
}
|
342
342
|
}
|
343
343
|
clear() {
|
344
|
-
const items = [...this.
|
344
|
+
const items = [...this.children];
|
345
345
|
for (let i = items.length - 1; i >= 0; i--) {
|
346
346
|
this.removeChildByIndex(i);
|
347
347
|
}
|
348
348
|
}
|
349
349
|
get length() {
|
350
|
-
return this.
|
350
|
+
return this.children.length;
|
351
351
|
}
|
352
352
|
getChild(index) {
|
353
|
-
return this.
|
353
|
+
return this.children[index];
|
354
354
|
}
|
355
355
|
getChildIndex(child) {
|
356
|
-
return this.
|
356
|
+
return this.children.indexOf(child);
|
357
357
|
}
|
358
358
|
destroy() {
|
359
359
|
super.destroy();
|
@@ -363,7 +363,7 @@ class BranchRenderObject extends RenderObject {
|
|
363
363
|
child.destroy();
|
364
364
|
//this.removeChild(child);
|
365
365
|
}
|
366
|
-
this.
|
366
|
+
this.children.length = 0;
|
367
367
|
//this.chilren = null;
|
368
368
|
}
|
369
369
|
}
|
@@ -1077,7 +1077,8 @@ class Element {
|
|
1077
1077
|
beginMeasure() {
|
1078
1078
|
this.paintRenders.length = 0;
|
1079
1079
|
}
|
1080
|
-
endMeasure() {
|
1080
|
+
endMeasure() {
|
1081
|
+
}
|
1081
1082
|
getIndex() {
|
1082
1083
|
if (this.parent) {
|
1083
1084
|
return this.parent.getChildIndex(this);
|
@@ -1531,6 +1532,8 @@ class ViewOptions {
|
|
1531
1532
|
//留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块
|
1532
1533
|
trackChangePeriod = 10;
|
1533
1534
|
onChange = new Subject();
|
1535
|
+
//打印模式,普通模式,续打模式
|
1536
|
+
printMode = 'normal';
|
1534
1537
|
constructor() {
|
1535
1538
|
}
|
1536
1539
|
}
|
@@ -2905,13 +2908,25 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
2905
2908
|
render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');
|
2906
2909
|
e.render.tran(() => {
|
2907
2910
|
e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;
|
2911
|
+
this.checkPrintMode(e);
|
2908
2912
|
e.nextRender();
|
2913
|
+
this.drawCopyRight(viewOptions, render, position);
|
2914
|
+
this.drawDocPageNum(render, viewOptions, position);
|
2915
|
+
//绘制文档边距线
|
2916
|
+
this.drawMarginLine(position, render, docWidth, docHeight);
|
2917
|
+
this.drawWatermark(render, viewOptions, position);
|
2909
2918
|
});
|
2910
|
-
|
2911
|
-
|
2912
|
-
|
2913
|
-
|
2914
|
-
|
2919
|
+
}
|
2920
|
+
/**
|
2921
|
+
* 打印模式检查
|
2922
|
+
* 如果是续打模式,需要进行裁剪打印范围,页眉页脚都不需要打印
|
2923
|
+
* @private
|
2924
|
+
*/
|
2925
|
+
checkPrintMode(e) {
|
2926
|
+
if (e.docCtx.viewOptions.printMode === 'continuation' && this.getIndex() === 0) {
|
2927
|
+
const { x, y, width, height } = this.getChild(1).rect;
|
2928
|
+
e.render.contentContext.clip(x, y, width, height);
|
2929
|
+
}
|
2915
2930
|
}
|
2916
2931
|
/**
|
2917
2932
|
* 绘制版权信息
|
@@ -2993,7 +3008,7 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
2993
3008
|
textProps.fontStyle = 'italic';
|
2994
3009
|
const size = ctx.contentContext.measureText(str, textProps);
|
2995
3010
|
const alignCenterX = position.x + Math.ceil(pageWidth / 2) - Math.ceil(size.width / 2);
|
2996
|
-
const paintY = position.y + this.rect.height -
|
3011
|
+
const paintY = position.y + this.rect.height - this.footerLine;
|
2997
3012
|
ctx.contentContext.drawText(str, textProps, alignCenterX, paintY, size.width, size.height);
|
2998
3013
|
}
|
2999
3014
|
clone() {
|
@@ -17083,4 +17098,4 @@ exports.validateDataEle = validateDataEle;
|
|
17083
17098
|
exports.validateDataEleRenderObj = validateDataEleRenderObj;
|
17084
17099
|
exports.validateInlineInputRenderObj = validateInlineInputRenderObj;
|
17085
17100
|
exports.watchChanged = watchChanged;
|
17086
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ub3RpZnkudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2NvbW1vbi11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLXRyYWNraW5nLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ldmVudC1zdWJqZWN0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wcm9wcy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1kZWNvcmF0ZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9wYXJhZ3JhcGgvcC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGV4dC90ZXh0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtc2VyaWFsaXplLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RleHQvdHJhY2stcnVuLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtY29udGFpbmVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvbi50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jaGVja2JveC9jaGVja2JveC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvdmFsaWRhdGUtbXNnLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtY2hlY2staW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWRhdGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWdyb3VwLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1pbWFnZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtbGlzdC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RlY29yYXRlL2ZpbGwtbnVsbC1zcGFjZS1pbXBsZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvbWVkaWEtZm9ybXVsYS9tZW5zdHJ1YWwtaGlzdG9yeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9waWN0dXJlL2ltYWdlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcmFkaW8vcmFkaW8taW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtc3BsaXQtY2VsbC1wYXRjaC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2RvYy1ydWxlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRleHRsaW5lLW1vZGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtbWVhc3VyZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmFuZ2UtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wYWludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZW5kZXItY3V0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXBhaW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BhcmFncmFwaC9wLWxpbmUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZWFkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWV2ZW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1pbnB1dC1jdXJzb3IudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNoYW5nZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRlbXBsYXRlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1ldmFsLWZ1bmMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWltYWdlcy1sb2FkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbW1lbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlZ21lbnRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS1tYW5hZ2UudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvdGV4dGVkaXRvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29tYmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQtb2Zmc2NyZWVuLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXR5cGUtaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQgeyBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgVHJhY2tSdW5UeXBlRW51bSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuXG5leHBvcnQgdHlwZSBFdmVudFN0YWdlID0gJ0FsbCcgfCAnQ2FwdHVyZScgfCAnQnViYmxpbmcnO1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlcyA9ICdFbGVtZW50TW91c2Vkb3duJyB8ICdFbGVtZW50TW91c2Vtb3ZlJyB8ICdFbGVtZW50Q2xpY2snIHwgJ0VsZW1lbnREYmxDbGljaycgfCAnRWxlbWVudE1vdXNlRW50ZXInXG4gICAgfCAnRWxlbWVudE1vdXNlTGVhdmUnIHwgJ0JhY2tzcGFjZUtleScgfCAnRGVsZXRlS2V5JyB8ICdFbGVtZW50U2hvd24nIHwgJ0VsZW1lbnRDb250ZXh0TWVudScgfCAnR290Q3Vyc29yJyB8ICdMb3N0Q3Vyc29yJyB8ICdFbGVtZW50S2V5RG93bicgfCAnRWxlbWVudERyb3AnIHxcbiAgICAnRWxlbWVudFRhYktleScgfCAnR2V0VHJhY2tUaXBzJztcblxuZXhwb3J0IHR5cGUgSGl0UmVnaW9uID0gJ2hlYWRlcicgfCAnYm9keScgfCAnZm9vdGVyJyB8ICdyZXZpZXcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpdEV2ZW50SW5mbyB7XG4gICAgcmVsYXRpdmVSZWN0OiBSZWN0LFxuICAgIGFic29sdXRlUmVjdDogUmVjdCxcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsXG4gICAgZWxlbWVudDogTGVhZkVsZW1lbnQsXG4gICAgc2hhZG93UmVuZGVySW5kZXg6IG51bWJlcixcbiAgICBoaXREb2NJbmRleDogbnVtYmVyLFxuICAgIHN0YXJ0UmVnaW9uPzogSGl0UmVnaW9uXG59XG5cbi8qKlxuICog5YWD57Sg5LqL5Lu2XG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50RXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjdHg6IEVkaXRvckNvbnRleHQpIHsgfVxuICAgIC8qKlxuICAgICAqIOS6i+S7tua6kOWktOWvueixoVxuICAgICAqL1xuICAgIHNvdXJjZSE6IEVsZW1lbnQ7XG4gICAgc291cmNlT2Zmc2V0ITogbnVtYmVyO1xuICAgIHNvdXJjZVJlbmRlciE6IFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAgKiDlvZPliY3miYDlnKjnmoTlr7nosaFcbiAgICAgKi9cbiAgICBjdXJyZW50RWxlbWVudCE6IEVsZW1lbnQ7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFghOiBudW1iZXI7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFkhOiBudW1iZXI7XG4gICAgLy/mmK/lkKblj5bmtojlkJHkuIrlhpLms6FcbiAgICBpc0NhbmNlbCE6IGJvb2xlYW47XG4gICAgZ2xvYmFsWCE6IG51bWJlcjtcbiAgICBnbG9iYWxZITogbnVtYmVyO1xuICAgIHBhZ2VYITogbnVtYmVyO1xuICAgIHBhZ2VZITogbnVtYmVyO1xuICAgIHNoaWZ0ITogYm9vbGVhbjtcbiAgICBjdHJsITogYm9vbGVhbjtcbiAgICBidXR0b25zITogbnVtYmVyO1xuICAgIGdldCBzZWxlY3Rpb25TdGF0ZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVMaXN0ZW5lciB7XG4gICAgW2xpc3RlbmVyOiBzdHJpbmddOiA8VCBleHRlbmRzIEV2ZW50PihldnQ6IFQpID0+IHZvaWQ7XG59XG5leHBvcnQgY2xhc3MgQ29udGVudE1lbnVJdGVtIHtcbiAgICBpY29uITogc3RyaW5nO1xuICAgIGNhcHRpb24hOiBzdHJpbmc7XG4gICAgZXZlbnRPYmohOiBNZW51TGlzdGVuZXI7XG4gICAgc3ViSXRlbXM/OiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG4vKipcbiAqIOm8oOagh+aTjeS9nOeahOS6i+S7tlxuICovXG5leHBvcnQgY2xhc3MgTW91c2VFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5cbmV4cG9ydCBjbGFzcyBNb3VzZWRvd25FbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgS2V5Ym9yYWRFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIGtleSE6IHN0cmluZztcbiAgICBzb3VyY2VFdmVudCE6IEtleWJvYXJkRXZlbnQ7XG59XG5leHBvcnQgY2xhc3MgR290Q3Vyc29yRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgTG9zdEN1cnNvckV2ZW50IGV4dGVuZHMgRWxlbWVudEV2ZW50IHsgfVxuZXhwb3J0IGludGVyZmFjZSBJVHJhY2tUaXBzIHtcbiAgICB0cmFja1J1blR5cGU6IFRyYWNrUnVuVHlwZUVudW07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgR2V0VHJhY2tUaXBzRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIHRyYWNrVGlwcyE6IElUcmFja1RpcHM7XG59XG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIG1lbnVzOiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG5leHBvcnQgY2xhc3MgRHJvcEVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgZHJhZ0VsZW1lbnQhOiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UHJvcHM8VCBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4geyBpZDogc3RyaW5nLCBldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldnQ6IFQpID0+IHZvaWQsIHVzZUNhcHR1cmU6IGJvb2xlYW4gfVxuZXhwb3J0IGNsYXNzIEV2ZW50TWFwIHtcbiAgICBwcml2YXRlIG1hcDogV2Vha01hcDxFbGVtZW50LCBBcnJheTxFdmVudFByb3BzPGFueT4+PiA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBhZGQ8VCBleHRlbmRzIEVsZW1lbnRFdmVudD4oZWxlbWVudDogRWxlbWVudCwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBsaXN0ZW5lcjogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMubWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXZlbnRJZCA9IG5hbm9pZCg4KTtcbiAgICAgICAgY29uc3QgZXZlbnRQcm9wczogRXZlbnRQcm9wczxUPiA9IHsgaWQ6IGV2ZW50SWQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUgfTtcbiAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldChlbGVtZW50LCBbZXZlbnRQcm9wc10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRzLnB1c2goZXZlbnRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVySW5kZXggPSBldmVudHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnRJZCk7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXJJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShsaXN0ZW5lckluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUJ5VHlwZShlbGVtZW50OiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudHMgPSBldmVudHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSk7XG4gICAgICAgICAgICBmaWx0ZXJFdmVudHMuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmUoZWxlbWVudCwgaXRlbS5pZCkgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcihlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0KGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCB1c2VDYXB0dXJlID0gZmFsc2UpOiBBcnJheTwoZXZ0OiBFbGVtZW50RXZlbnQpID0+IHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIGl0ZW0udXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSkubWFwKGl0ZW0gPT4gaXRlbS5saXN0ZW5lcik7XG4gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgfVxufSIsImNvbnN0IEVESVRPUl9SRUFDVElWRSA9ICdfX2VkaXRvcl9yZWFjdGl2ZSc7XG5jb25zdCBJVEVSQVRPUl9LRVkgPSBTeW1ib2woJ2l0ZXJhdG9yLWtleScpXG5leHBvcnQgY29uc3QgcmVhY3RpdmVNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdD4oKTtcbmV4cG9ydCBjb25zdCB0YXJnZXRNYXBzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBNYXA8cHJvcFR5cGUsIFNldDxub3RpZnlDYWxsYmFjaz4+PigpO1xudHlwZSBwcm9wVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbDtcbmludGVyZmFjZSBub3RpZnlDYWxsYmFjayB7XG4gICAgKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IHZvaWQ7XG59XG5cblxuY29uc3QgYWN0aXZlRm5zOiBBcnJheTxub3RpZnlDYWxsYmFjaz4gPSBbXTtcbmZ1bmN0aW9uIHRyYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSkge1xuICAgIGNvbnN0IGFjdGl2ZUZuID0gYWN0aXZlRm5zW2FjdGl2ZUZucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWFjdGl2ZUZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhcmdldE1hcCA9IHRhcmdldE1hcHMuZ2V0KHRhcmdldClcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICB0YXJnZXRNYXBzLnNldCh0YXJnZXQsICh0YXJnZXRNYXAgPSBuZXcgTWFwKCkpKVxuICAgIH1cbiAgICBsZXQgZWZmZWN0Rm5zID0gdGFyZ2V0TWFwLmdldChwKTtcbiAgICBpZiAoIWVmZmVjdEZucykge1xuICAgICAgICB0YXJnZXRNYXAuc2V0KHAsIChlZmZlY3RGbnMgPSBuZXcgU2V0KCkpKVxuICAgIH1cbiAgICBlZmZlY3RGbnMuYWRkKGFjdGl2ZUZuKVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8v5LiN6ZyA6KaB6Kem5Y+RXG4gICAgaWYgKHAudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdfXycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0TWFwID0gdGFyZ2V0TWFwcy5nZXQodGFyZ2V0KTtcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVmZmVjdEZucyA9IHRhcmdldE1hcC5nZXQocCk7XG4gICAgY29uc3QgaXRlcmF0b3JGbnMgPSB0YXJnZXRNYXAuZ2V0KElURVJBVE9SX0tFWSk7XG4gICAgY29uc3QgZm5zID0gbmV3IFNldDxub3RpZnlDYWxsYmFjaz4oKTtcbiAgICBlZmZlY3RGbnMgJiYgZWZmZWN0Rm5zLmZvckVhY2goaXRlbSA9PiBmbnMuYWRkKGl0ZW0pKTtcbiAgICBpdGVyYXRvckZucyAmJiBpdGVyYXRvckZucy5mb3JFYWNoKGl0ZW0gPT4gZm5zLmFkZChpdGVtKSk7XG4gICAgY29uc3QgYWN0aXZlRm4gPSBhY3RpdmVGbnNbYWN0aXZlRm5zLmxlbmd0aCAtIDFdO1xuICAgIC8v6Ziy5q2i5q275b6q546v77yM6L+H5ruk5q2j5Zyo6L+Q6KGM55qE5Ymv5L2c55SoXG4gICAgaWYgKGFjdGl2ZUZuKSB7XG4gICAgICAgIGZucy5kZWxldGUoYWN0aXZlRm4pXG4gICAgfVxuICAgIGZucy5mb3JFYWNoKGZuID0+IHtcbiAgICAgICAgZm4odGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaENoYW5nZWQ8VCBleHRlbmRzIG9iamVjdD4oc291cmNlOiBULCBjYjogbm90aWZ5Q2FsbGJhY2spOiBUIHtcbiAgICBpZiAoKDxhbnk+c291cmNlKVtFRElUT1JfUkVBQ1RJVkVdKSB7XG4gICAgICAgIGFkZFRvVHJhY2soKDxhbnk+c291cmNlKVsncmF3J10sIHNvdXJjZSwgY2IpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RQcm94eSA9IHJlYWN0aXZlTWFwLmdldChzb3VyY2UpO1xuICAgIGlmIChleGlzdFByb3h5KSB7XG4gICAgICAgIHJldHVybiBleGlzdFByb3h5IGFzIFQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNvdXJjZSwge1xuICAgICAgICBnZXQodGFyZ2V0LCBwLCByZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKHAgPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwID09PSBFRElUT1JfUkVBQ1RJVkUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdhdGNoQ2hhbmdlZChyZXMsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh0YXJnZXQsIHAsIG5ld1ZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6K6+572uJyArIHAudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gKDxhbnk+dGFyZ2V0KVtwXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3Quc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIGlmICgoPGFueT5yZWNlaXZlcikucmF3ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIChvbGRWYWx1ZSA9PT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgPT09IG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfSlcbiAgICBhZGRUb1RyYWNrKHNvdXJjZSwgcHJveHksIGNiKTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGFkZFRvVHJhY2soc291cmNlOiBvYmplY3QsIHByb3h5OiBvYmplY3QsIGNiOiBub3RpZnlDYWxsYmFjayk6IHZvaWQge1xuICAgIGFjdGl2ZUZucy5wdXNoKGNiKTtcbiAgICB0cmFjayhzb3VyY2UsIElURVJBVE9SX0tFWSk7XG4gICAgYWN0aXZlRm5zLnBvcCgpO1xuICAgIHJlYWN0aXZlTWFwLnNldChzb3VyY2UsIHByb3h5KTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Tm90aWZ5Q2hhbmdlZENhbGxiYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgY2I6IG5vdGlmeUNhbGxiYWNrKTogdm9pZCB7XG4gICAgbGV0IHRyYWNrVGFyZ2V0OiBhbnkgPSB0YXJnZXQ7XG4gICAgaWYgKCg8YW55PnRhcmdldClbRURJVE9SX1JFQUNUSVZFXSkge1xuICAgICAgICB0cmFja1RhcmdldCA9ICg8YW55PnRhcmdldClbJ3JhdyddO1xuICAgIH1cbiAgICBhY3RpdmVGbnMucHVzaChjYilcbiAgICB0cmFjayh0cmFja1RhcmdldCwgcCk7XG4gICAgYWN0aXZlRm5zLnBvcCgpXG59XG5cbmV4cG9ydCBjb25zdCBpc0RhdGUgPSAodmFsOiB1bmtub3duKTogdmFsIGlzIERhdGUgPT4gdmFsIGluc3RhbmNlb2YgRGF0ZVxuXG5leHBvcnQgY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5leHBvcnQgY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+XG4gICAgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSlcblxuZXhwb3J0IGNvbnN0IHRvUmF3VHlwZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIHRvVHlwZVN0cmluZyh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG4iLCJpbXBvcnQgeyBSZWN0LCBFbGVtZW50LCBNYXJnaW5Qcm9wcywgUGFkZGluZ1Byb3BzLCBQb3NpdGlvbiwgVmlld09wdGlvbnMgfSBmcm9tICcuL2VsZW1lbnQtZGVmaW5lJ1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tICcuL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbi8qKlxuICog5a6a5LmJ57uE5Lu255qEVUnlvaLlvI/nmoTmuLLmn5NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IHtcbiAgICBtYXJnaW4hOiBNYXJnaW5Qcm9wcztcbiAgICBwYWRkaW5nITogUGFkZGluZ1Byb3BzO1xuICAgIHJlY3Q6IFJlY3QgPSBuZXcgUmVjdCgpO1xuICAgIHBhcmVudCE6IEJyYW5jaFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAqIOWPr+eCueWHu+aAp++8jOS+i+Wmgu+8mm51bGwtdGV4dCDljaDkvY3nrKblhYPntKDkuI3lhbflpIflj6/ngrnlh7vog73liptcbiAgICAqL1xuICAgIGRpc2FibGVDbGljayE6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IFQpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygpO1xuICAgIH1cbiAgICBhYnN0cmFjdCBjbG9uZSgpOiBSZW5kZXJPYmplY3Q7XG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6IE9taXQ8SVJlbmRlckRhdGEsICduZXh0UmVuZGVyJz4pOiB2b2lkIHsgfVxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAvL3RoaXMubWFyZ2luID0gbnVsbDtcbiAgICAgICAgLy90aGlzLnBhZGRpbmcgPSBudWxsO1xuICAgICAgICAvL3RoaXMucmVjdCA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPluWGheWuueWMuuWfn+ahhuS9k1xuICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAqIEByZXR1cm5zIFxuICAgICovXG4gICAgZ2V0SW5uZXJSZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICByZWN0LnggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICAgIHJlY3QueSA9IHBhZGRpbmcudG9wO1xuICAgICAgICByZWN0Lm1heFdpZHRoID0gdGhpcy5yZWN0Lm1heFdpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlY3QubWF4SGVpZ2h0ID0gdGhpcy5yZWN0Lm1heEhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgZ2V0SW5uZXJNYXhXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucmVjdC5tYXhXaWR0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzLnJlY3QubWF4V2lkdGggaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0IC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4uYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWGheahhuWGheWuuemrmOW6pu+8jOabtOaWsOWkluahhuahhuS9k+mrmOW6plxuICAgICAqIEBwYXJhbSBpbm5lclJlY3RcbiAgICAgKi9cbiAgICB1cGRhdGVSZW5kZXJIZWlnaHQoaW5uZXJSZWN0OiBSZWN0IHwgbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gdHlwZW9mIGlubmVyUmVjdCA9PT0gJ251bWJlcicgPyBpbm5lclJlY3QgOiAoPFJlY3Q+aW5uZXJSZWN0KS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHsgcGFkZGluZywgbWFyZ2luIH0gPSB0aGlzO1xuICAgICAgICAvL+WkluWxguWuueWZqOmrmOW6puetieS6juWGheWuuemrmOW6pivlpJbovrnot50r5YaF6L656LedXG4gICAgICAgIHRoaXMucmVjdC5oZWlnaHQgPSBpbm5lckhlaWdodCArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b207XG4gICAgfVxuXG4gICAgZ2V0SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRJbmRleCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFic3RyYWN0IHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQ7XG59XG5cbi8qKlxuICog5Y+25a2Q6IqC54K55riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMZWFmUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQgYXMgVCk7XG4gICAgfVxufVxuXG4vKipcbiAqIOaeneW5suiKgueCuea4suafk+WFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJhbmNoUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQgYXMgVCk7XG4gICAgfVxuICAgIHByaXZhdGUgY2hpbHJlbjogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgIGdldEl0ZW1zKCk6IEFycmF5PFJlbmRlck9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuO1xuICAgIH1cblxuICAgIGFkZENoaWxkKC4uLml0ZW1zOiBBcnJheTxSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2hpbGQoaXRlbTogUmVuZGVyT2JqZWN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICBpdGVtLnBhcmVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQoY2hpbGQ6IFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAvL2NoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGRCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgLy9jaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRCeUluZGV4KGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ubGVuZ3RoO1xuICAgIH1cblxuXG4gICAgZ2V0Q2hpbGQ8VCBleHRlbmRzIFJlbmRlck9iamVjdCA9IFJlbmRlck9iamVjdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuW2luZGV4XSBhcyBUO1xuICAgIH1cblxuICAgIGdldENoaWxkSW5kZXgoY2hpbGQ6IFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgfVxuXG5cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2hpbGQuZGVzdHJveSgpO1xuICAgICAgICAgICAgLy90aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgLy90aGlzLmNoaWxyZW4gPSBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyRGF0YSB7XG4gICAgcmVuZGVyOiBSZW5kZXJDb250ZXh0VHlwZSxcbiAgICBwb3NpdGlvbjogUG9zaXRpb24sXG4gICAgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LFxuICAgIG5leHRSZW5kZXI6ICgpID0+IHZvaWRcbn1cbi8qKlxuICog5Z2X57qn5riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG4gICAgc2V0UmVuZGVyV2lkdGgobWF4V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3QubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gbWF4V2lkdGg7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG59XG5cbi8qKlxuICog5YyF5ZCr5Z2X57qn5riy5p+T5YWD57Sg55qE5a655Zmo5YWD57SgLOS+i+WmgmJvZHnjgIF0YWJsZS1jZWxs562JXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdC5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSBtYXhXaWR0aDtcbiAgICB9XG59XG5cbi8qKlxuICog5aSa57qnIOKAmEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3TigJkg5YyF6KO55YWD57Sg77yM5L6L5aaCIHDjgIF0YWJsZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDxUPiB7IH1cblxuLyoqXG4gKiDlrrnlmagt5a2Q5YaF5a655Li65aSa5Liq6KGM5YaF5Z2X57qn5YWD57Sg77yM5L6L5aaCdGFibGUtcm93XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVCbG9ja0NvbnRhaW5lciBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHsgfVxuXG4vKipcbiAqIOacjeWKoeS6jnRhYmxlLWNlbGxcbiAqIOWPr+iiq+Wkmue6p+aLhuWIhueahOWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7IH1cblxuLyoqXG4gKiDmnIDlsI/kuI3lj6/liIblibLljZXkvY3nmoTlnZfnuqfooYzmoYbvvIzkvovlpoIgcC1saW5lXG4gKiDkuIDooYzkuI3lj6/lrZjlnKjkuo7kuKTkuKrpobXpnaLkuK0s5Z2X57qn6KGM5qGG5LiN6IO95YiG5biD5Zyo5Lik5Liq6aG16Z2i5LitXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHsgfVxuXG5cbmV4cG9ydCB0eXBlIEJvcmRlclR5cGUgPSAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0LW1pZGRsZScgfCAncmlnaHQtbWlkZGxlJyB8ICd0b3AtbWlkZGxlJyB8ICdib3R0b20tbWlkZGxlJyB8ICdub25lJyB8ICdsZWZ0LXRvcCcgfCAnbGVmdC1ib3R0b20nIHwgJ3JpZ2h0LXRvcCcgfCAncmlnaHQtYm90dG9tJztcbmV4cG9ydCB0eXBlIEN1cnNvclR5cGUgPSAndGV4dCcgfCAncm93LXJlc2l6ZScgfCAnY29sLXJlc2l6ZScgfCAnbm9uZScgfCAnZGVmYXVsdCcgfCAnbW92ZScgfCAncG9pbnRlcicgfCAndy1yZXNpemUnIHwgJ3MtcmVzaXplJyB8ICdzZS1yZXNpemUnIHwgJ25lLXJlc2l6ZSc7XG5leHBvcnQgZW51bSBSZW5kZXJPYmplY3RUeXBlIHtcbiAgICBCcmFuY2ggPSAwLFxuICAgIExlYWYgPSAxXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lYXN1cmVSZW5kZXJTdHJ1Y3Q8VD4ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgcmVuZGVyOiBUXG59XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IFJlY3QgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQm9yZGVyVHlwZSB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vblV0aWwge1xuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i5qGG5YaFXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlY3Q6IE9taXQ8UmVjdCwgJ21heFdpZHRoJ3wnbWF4SGVpZ2h0Jz4sIHBvc2l0aW9uOiBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzSW5zaWRlUmVjdEJ5UmVjdChyZWN0OiBSZWN0LCBwb3NpdGlvbjogUmVjdCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ICsgcG9zaXRpb24uaGVpZ2h0IDw9IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueCArIHBvc2l0aW9uLndpZHRoIDw9IHJlY3QueCArIHJlY3Qud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i55qE6L655qGG5LiKXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIGJvcmRlcldpZHRoIFxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJblJlY3RCb3JkZXIocmVjdDogUmVjdCwgYm9yZGVyV2lkdGg6IG51bWJlciwgcG9zaXRpb246IFBvc2l0aW9uKTogeyBib3JkZXJUeXBlOiBCb3JkZXJUeXBlIH0ge1xuICAgICAgICBjb25zdCBsZWZ0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IGJvcmRlcldpZHRoLCBoZWlnaHQ6IHJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogcmVjdC53aWR0aCAtIGJvcmRlcldpZHRoLCB5OiAwLCB3aWR0aDogYm9yZGVyV2lkdGgsIGhlaWdodDogcmVjdC5oZWlnaHQsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgdG9wQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgYm90dG9tQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogcmVjdC5oZWlnaHQgLSBib3JkZXJXaWR0aCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgbGV0IGJvcmRlclR5cGU6IEJvcmRlclR5cGUgPSAnbm9uZSc7XG4gICAgICAgIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24obGVmdEJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmlnaHRCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbih0b3BCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAndG9wJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24oYm90dG9tQm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ2JvdHRvbSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYm9yZGVyVHlwZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWdkOagh+aYr+WQpuWcqOWbvueJh+eahOe8qeaUvuaTjeS9nOeCueS4ilxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luUGljdHVyZVJlc2l6ZVBvaW50KHJlY3Q6IFJlY3QsIHBvczogUG9zaXRpb24sIHI6IG51bWJlcik6IHsgYm9yZGVyVHlwZTogQm9yZGVyVHlwZSB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcbiAgICAgICAgY29uc3QgeCA9IDA7XG4gICAgICAgIGNvbnN0IHkgPSAwO1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHR5cGU6IEJvcmRlclR5cGUgfT4gPSBbeyB4LCB5LCB0eXBlOiAnbGVmdC10b3AnIH0sIHsgeDogeCArIHdpZHRoLCB5LCB0eXBlOiAncmlnaHQtdG9wJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSwgdHlwZTogJ3RvcC1taWRkbGUnIH0sIHsgeCwgeTogeSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdsZWZ0LW1pZGRsZScgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAnbGVmdC1ib3R0b20nIH0sIHsgeDogd2lkdGgsIHk6IE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdyaWdodC1taWRkbGUnIH0sIHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAncmlnaHQtYm90dG9tJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSArIGhlaWdodCwgdHlwZTogJ2JvdHRvbS1taWRkbGUnIH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCB7IHg6IHB4LCB5OiBweSB9ID0gcG9pbnQ7XG4gICAgICAgICAgICBpZiAoKChweCAtIHBvcy54KSAqIChweCAtIHBvcy54KSArIChweSAtIHBvcy55KSAqIChweSAtIHBvcy55KSkgPCByICogcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvcmRlclR5cGU6IHBvaW50LnR5cGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICog5pW05b2i56ym5ZCI6L+e57q/6KaB5rGCXG4gICAgKiBAcGFyYW0gcG9pbnRzIFxuICAgICogQHBhcmFtIHdpZHRoIFxuICAgICogQHBhcmFtIHN0cm9rZUNvbG9yIFxuICAgICovXG4gICAgc3RhdGljIHJlc2hhcnBQb2ludHMocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4pOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBsZXQgcHJldlBvaW50OiBQb3NpdGlvbiA9IHBvaW50c1swXTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICBhcnJheS5wdXNoKHByZXZQb2ludCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvL+S4jeWcqOWQjOS4gOawtOW5s+e6v1xuICAgICAgICAgICAgaWYgKGN1cnJQb2ludC55ICE9PSBwcmV2UG9pbnQueSAmJiBjdXJyUG9pbnQueCAhPT0gcHJldlBvaW50LngpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHsgeDogY3VyclBvaW50LngsIHk6IHByZXZQb2ludC55IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyYXkucHVzaChjdXJyUG9pbnQpO1xuICAgICAgICAgICAgcHJldlBvaW50ID0gY3VyclBvaW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T2Zmc2V0WChub2RlOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vZGUucGFyZW50RWxlbWVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgY3VyciA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIGN1cnIgLSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHJhbmRvbUNvbG9yKCkge1xuICAgICAgICBsZXQgc3RyID0gXCIjXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBzdHIgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreS4gOS4quaVsOWAvOaYr+WQpuWcqOWPpuS4gOS4quaVsOWAvOeahOWinuebiuWMuumXtOS4rVxuICAgICAqIEBwYXJhbSB2YWwgXG4gICAgICogQHBhcmFtIG9mZnNldCBcbiAgICAgKiBAcGFyYW0gY29tcGFyZVZhbHVlIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBBcHByb3htYXRlVmFsdWVJblJhbmdlKHZhbDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgY29tcGFyZVZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh2YWwgLSBvZmZzZXQpIDw9IGNvbXBhcmVWYWx1ZSAmJiAodmFsICsgb2Zmc2V0KSA+PSBjb21wYXJlVmFsdWU7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0RW1wdHlWYWx1ZTxUPih2YWw6IFQsIGVtcHR5VmFsOiBUKTogVCB7XG4gICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlubbpm4ZcbiAgICAgKiBAcGFyYW0gYXJyYXkgXG4gICAgICogQHBhcmFtIGRlbGV0ZUl0ZW1zIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVVbmlvblNldDxUPihhcnJheTogQXJyYXk8VD4sIGRlbGV0ZUl0ZW1zOiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXlTZXQgPSBuZXcgU2V0KGFycmF5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRlbGV0ZUl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGFycmF5U2V0LmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgIGFycmF5U2V0LmRlbGV0ZShpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFycmF5U2V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbnVsbFRvU3RyaW5nKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXROb3coZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCksIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlVGV4dCh0ZXh0OiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZyA9IC9cXHsoLio/KVxcfS9nO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGV4dDtcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZWcuZXhlYyh0ZXh0KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvL+iOt+WPluWSjOW9k+WJjeaXpeacn+ebuOW3rueahOenkuaVsFxuICAgIHN0YXRpYyBnZXROb3dEaWZmU2Vjb25kcyhkYXRlOiBEYXRlIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgZGF0ZSA9IHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgLyAxMDAwO1xuICAgIH1cblxuICAgIC8v6aqM6K+B5b2T5YmN5a2X56ym5Liy5piv5ZCm5Li65pel5pyf5qC85byPXG4gICAgc3RhdGljIGlzRGF0ZShzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZWcgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC87XG4gICAgICAgIHJldHVybiByZWcudGVzdChzdHIpO1xuICAgIH1cblxuXG5cbiAgICBzdGF0aWMgY2xvbmVWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgaXNDb25zdHJ1Y3RvcihmOmFueSk6Ym9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgZigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSBlcnIgaXMgdGhlIGV4cGVjdGVkIGVycm9yIGFuZCB0aGVuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuXG4vKipcbiAqIOWFg+e0oOeXlei/uei3n+i4qlxuICovXG50eXBlIERlbHRhVHlwZSA9ICdpbnNlcnQnIHwgJ2RlbGV0ZScgfCAnZm9ybWF0JyB8ICdkZWxUZXh0JyB8ICdpbnNUZXh0JztcblxuLyoqXG4gKiDmj5LlhaXlhYPntKBcbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0T3BzRGVsdGEgPSB7XG4gICAgaW5zZXJ0OiBFbGVtZW50XG59XG5cblxuLyoqXG4gKiDliKDpmaTlhYPntKBcbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlRWxlT3BzRGVsdGEgPSB7XG4gICAgZGVsZXRlOiBFbGVtZW50O1xufVxuLyoqXG4gKiDmlofmnKzovpPlhaVcbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0VGV4dE9wc0RlbHRhID0ge1xuICAgIGluc1RleHQ6IHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgfVxuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiDmlofmnKzliKDpmaRcbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlVGV4dE9wc0RlbHRhID0ge1xuICAgIGRlbFRleHQ6IHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgfSxcbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG4vKipcbiAqIOWxnuaAp+WPmOabtOiusOW9leWJjeWQjuWAvFxuICovXG5leHBvcnQgdHlwZSBkaWZmUHJvcFR5cGUgPSB7XG4gICAgW1Byb3BOYW1lOiBzdHJpbmddOiB7XG4gICAgICAgIG9sZFZhbHVlOiBhbnksXG4gICAgICAgIG5ld1ZhbHVlOiBhbnlcbiAgICB9XG59O1xuLyoqXG4gKiDorr7nva7lsZ7mgKdcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWF0T3BzRGVsdGEgPSB7XG4gICAgZm9ybWF0OiBkaWZmUHJvcFR5cGU7XG59XG5cblxudHlwZSBvcHNUeXBlcyA9IEluc2VydFRleHRPcHNEZWx0YSB8IEluc2VydE9wc0RlbHRhIHwgRGVsZXRlVGV4dE9wc0RlbHRhIHwgRm9ybWF0T3BzRGVsdGEgfCBEZWxldGVFbGVPcHNEZWx0YTtcbnR5cGUgb3BzTW9kZWw8VCA9IG9wc1R5cGVzPiA9IHsgaW5kZXg6IG51bWJlciwgcGFyZW50SW5kZXg6IG51bWJlcjsgcHJldkluZGV4OiBudW1iZXIsIGVsZTogRWxlbWVudCwgb3BzOiBUIH07XG5leHBvcnQgdHlwZSBvcHNUcmFja01vZGVsPFQgPSBvcHNUeXBlcz4gPSBPbWl0PG9wc01vZGVsPFQ+LCAnZWxlJz47XG5leHBvcnQgY29uc3QgZG9jT3BzTWFwOiBNYXA8RWxlbWVudCwgQXJyYXk8b3BzTW9kZWw+PiA9IG5ldyBNYXAoKTtcbmxldCB0cmFjZVRyYWNraW5nRmxhZzogYm9vbGVhbiA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUcmFjZVRyYWNraW5nRmxhZyhmbGFnOiBib29sZWFuKTogdm9pZCB7XG4gICAgdHJhY2VUcmFja2luZ0ZsYWcgPSBmbGFnO1xufVxuXG4vKipcbiAqIOaKkeWItuWPmOabtOeahOi/vei4quS/ruaUuVxuICog5Zyo5p+Q5Lqb5oOF5Ya15LiL5LiN6ZyA6KaB6L+b6KGM5L+u5pS555qE6Lef6Liq77yM5L6L5aaC77ya5Zyo5Yid5aeL5YyW5Yqg6L295paH5qGj5pe277yM5Li65LqG5o+Q6auY5pWI546H77yM5aKe5Yqg5bqV5bGC5byA5YWzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc1RyYWNraW5nPFQ+KGNiOiAoKSA9PiBUKTogVCB7XG4gICAgY29uc3QgdG1wID0gdHJhY2VUcmFja2luZ0ZsYWc7XG4gICAgdHJhY2VUcmFja2luZ0ZsYWcgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJhY2VUcmFja2luZ0ZsYWcgPSB0bXA7XG4gICAgfVxufVxuXG5cbmZ1bmN0aW9uIGdldERvY0N0eChlbGU6IEVsZW1lbnQpOiB7IGRvYzogRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMgfSB8IG51bGwge1xuICAgIGlmICghdHJhY2VUcmFja2luZ0ZsYWcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8v5b2T5YmN5YWD57Sg55qE5LiK57qn6L+Y5rKh5pyJ5re75Yqg5YiwZG9t5Lit77yM5q2k5pe25Y+q6ZyA6KaB5aSE55CG5LiK57qn5Y2z5Y+vXG4gICAgY29uc3QgZG9jID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGVsZSwgKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ2RvYycpIGFzIGFueTtcbiAgICBpZiAoIWRvYykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGRvY1sndmlld09wdGlvbnMnXSBhcyBWaWV3T3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZW5hYmxlVHJhY2tIaXN0b3J5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBkb2MsXG4gICAgICAgIG9wdGlvbnM6IGRvY1sndmlld09wdGlvbnMnXVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFbGUoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZS50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY29uc3Qgc2VyaWFsaXplT2JqID0gZ2V0RWxlU2VyaWFsaXplRnVuYyhlbGUsIG9wdGlvbnMpO1xuICAgIC8vIGlmICghc2VyaWFsaXplT2JqKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBpbnNlcnQ6IGVsZS5jbG9uZSh0cnVlKVxuICAgIH0pXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZWxlLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGRlbGV0ZTogZWxlLmNsb25lKHRydWUpLFxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFRvT3BzKGRvYzogRWxlbWVudCwgZWxlOiBFbGVtZW50LCBvcHM6IG9wc1R5cGVzKTogdm9pZCB7XG4gICAgbGV0IGFycmF5ID0gZG9jT3BzTWFwLmdldChkb2MpO1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgICAgZG9jT3BzTWFwLnNldChkb2MsIGFycmF5ID0gW10pXG4gICAgfVxuICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoZWxlKTtcbiAgICBhcnJheS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbGUsIHRydWUpLFxuICAgICAgICBwYXJlbnRJbmRleDogRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVsZS5wYXJlbnQsIHRydWUpLFxuICAgICAgICBwcmV2SW5kZXg6IHByZXZFbGUgPyBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocHJldkVsZSwgdHJ1ZSkgOiAtMSxcbiAgICAgICAgZWxlLFxuICAgICAgICBvcHNcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5wdXRUZXh0KGVsZTogRWxlbWVudCwgc3RhcnRJbmRleDogbnVtYmVyLCBpbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGluc1RleHQ6IHtcbiAgICAgICAgICAgIGluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgbGVuZ3RoOiBpbnB1dC5sZW5ndGhcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudDogaW5wdXRcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGV4dChlbGU6IEVsZW1lbnQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGRlbFRleHQ6IHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbGVuZ3RoXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnRcbiAgICB9KVxufVxuXG4vKipcbiAqIOiusOW9leWFg+e0oOagvOW8j+WMllxuICogQHBhcmFtIGVsZSB8XG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbGUoZWxlOiBFbGVtZW50LCBwcm9wczogb2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZUtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgaWYgKCF1cGRhdGVLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZm9ybWF0OiBnZXRFeGFjdERpZmZQcm9wcyhlbGUucHJvcHMsIHByb3BzKVxuICAgIH0pXG59XG5cbi8qKlxuICog6K6w5b2V5pu05paw5YWD57Sg5bGe5oCn77yM6YCa6L+H5Luj55CG6I635Y+WXG4gKiBAcGFyYW0gZWxlXG4gKiBAcGFyYW0gcFxuICogQHBhcmFtIG9sZFZhbHVlXG4gKiBAcGFyYW0gbmV3VmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1VwZGF0ZUVsZVByb3BzKGVsZTogRWxlbWVudCwgcDogc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICBbcF06IHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0RXhhY3REaWZmUHJvcHMob2xkUHJvcHM6IG9iamVjdCwgbmV3UHJvcHM6IG9iamVjdCk6IGRpZmZQcm9wVHlwZSB7XG4gICAgY29uc3Qgb2JqOiBkaWZmUHJvcFR5cGUgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhuZXdQcm9wcykuZm9yRWFjaChrZXkgPT4gb2JqW2tleV0gPSB7XG4gICAgICAgIG9sZFZhbHVlOiBDb21tb25VdGlsLmNsb25lVmFsdWUob2xkUHJvcHNba2V5XSksXG4gICAgICAgIG5ld1ZhbHVlOiBDb21tb25VdGlsLmNsb25lVmFsdWUobmV3UHJvcHNba2V5XSlcbiAgICB9KVxuICAgIHJldHVybiBvYmo7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2goZG9jOiBFbGVtZW50KTogQXJyYXk8b3BzVHJhY2tNb2RlbD4ge1xuICAgIGNvbnN0IGluc2VydE9wc01hcDogTWFwPEVsZW1lbnQsIG9wc01vZGVsPiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBmb3JtYXRPcHNNYXA6IE1hcDxFbGVtZW50LCBvcHNNb2RlbDxGb3JtYXRPcHNEZWx0YT4+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHBhdGNoczogQXJyYXk8b3BzVHJhY2tNb2RlbD4gPSBbXTtcbiAgICBjb25zdCBvcHMgPSBkb2NPcHNNYXAuZ2V0KGRvYyk7XG4gICAgaWYgKCFvcHMgfHwgIW9wcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBkZWxPcHNNYXAgPSBnZXREZWxldGVFbGVPcHMob3BzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvcCA9IG9wc1tpXVxuICAgICAgICBjb25zdCBlbGUgPSBvcC5lbGU7XG4gICAgICAgIC8v5L+u5pS55qC35byPXG4gICAgICAgIGlmICgnZm9ybWF0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgIC8v5L+u5pS55o+S5YWl5oiW6ICF5Yig6Zmk55qE5LiN5YGa5aSE55CGXG4gICAgICAgICAgICBpZiAoaW5zZXJ0T3BzTWFwLmhhcyhlbGUpIHx8IGRlbE9wc01hcC5oYXMoZWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lkIjlubbmk43kvZzlsZ7mgKdcbiAgICAgICAgICAgIGxldCBwcmV2Rm9ybWF0T3A6IG9wc01vZGVsPEZvcm1hdE9wc0RlbHRhPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICgocHJldkZvcm1hdE9wID0gZm9ybWF0T3BzTWFwLmdldChlbGUpKSkge1xuICAgICAgICAgICAgICAgIG1lcmdlRGlmZlByb3BzKHByZXZGb3JtYXRPcC5vcHMuZm9ybWF0LCBvcC5vcHMuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1hdE9wc01hcC5zZXQoZWxlLCBvcCBhcyBvcHNNb2RlbDxGb3JtYXRPcHNEZWx0YT4pXG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2hzLnB1c2goeyBpbmRleDogb3AuaW5kZXgsIHBhcmVudEluZGV4OiBvcC5wYXJlbnRJbmRleCwgcHJldkluZGV4OiBvcC5wcmV2SW5kZXgsIG9wczogb3Aub3BzIH0pO1xuICAgIH1cbiAgICAvL+a4heepulxuICAgIG9wcy5sZW5ndGggPSAwO1xuICAgIHJldHVybiBwYXRjaHM7XG59XG5cbi8qKlxuICog5riF6Zmk5Y+Y5pu055qE5pWw5o2uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRyYWNlcyhkb2M6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBkb2NPcHNNYXAuZGVsZXRlKGRvYyk7XG59XG5cbi8qKlxuICog6I635Y+W5Yig6Zmk5YWD57Sg55qE5pON5L2cXG4gKiDlnKjnlJ/miJDkv67mlLnnmoTmibnmk43kvZzml7bvvIzpnIDopoHlhYjojrflj5bliKDpmaTnmoTlhYPntKDvvIzlm6DkuLrlhYPntKDooqvliKDpmaTlkI7vvIzmiYDmnInnmoTlhbbku5bmk43kvZzpg73kuI3pnIDopoHooqvorrDlvZXkuoZcbiAqL1xuZnVuY3Rpb24gZ2V0RGVsZXRlRWxlT3BzKG9wczogQXJyYXk8b3BzTW9kZWw+KTogTWFwPEVsZW1lbnQsIG9wc01vZGVsPiB7XG4gICAgY29uc3QgZGVsT3BzTWFwOiBNYXA8RWxlbWVudCwgb3BzTW9kZWw+ID0gbmV3IE1hcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldXG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3AuaW5kZXg7XG4gICAgICAgIGNvbnN0IGVsZSA9IG9wLmVsZTtcbiAgICAgICAgLy/kv67mlLnnmoTlhYPntKDlkI7pnaLooqvliKDpmaTvvIzpgqPkuYjor6XlpITnkIbkvZzlup9cbiAgICAgICAgaWYgKCdkZWxldGUnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgZGVsT3BzTWFwLnNldChlbGUsIG9wKVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGRlbE9wc01hcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXJyYXlJdGVtPFQ+KGFycjogQXJyYXk8VD4sIGl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiDlkIzkuIDmibnmrKHnmoTkv67mlLnvvIzkv67mlLnkuoblkIzkuIDlsZ7mgKfvvIzpnIDopoHlkIjlubblpJrkuKrlkIzkuIDlsZ7mgKfnmoTlpJrkuKrkv67mlLlcbiAqIOS4vuS+i++8mnRhYmxl55qEY29sc+WuveW6puS/ruaUuVxuICogQHBhcmFtIHByZXZGb3JtYXRcbiAqIEBwYXJhbSBjdXJyRm9ybWF0XG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGlmZlByb3BzKHByZXZGb3JtYXQ6IGRpZmZQcm9wVHlwZSwgY3VyckZvcm1hdDogZGlmZlByb3BUeXBlKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY3VyckZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIHByZXZGb3JtYXQpIHtcbiAgICAgICAgICAgIHByZXZGb3JtYXRba2V5XS5uZXdWYWx1ZSA9IGN1cnJGb3JtYXRba2V5XS5uZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZGb3JtYXRba2V5XSA9IGN1cnJGb3JtYXRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cblxuIiwiLy/orqLpmIXogIUgU3Vic2NyaXB0aW9uXG4vL+WPkeW4g+iAhSjkuovku7bmupApIEV2ZW50U291cmNlXG5cbnR5cGUgRXZlbnRIYW5kbGVyPFQgPSB2b2lkPiA9IChkYXRhOiBUKSA9PiB2b2lkO1xuXG4vKipcbiAqIOiuoumYheiAhVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3Vic2NyaXB0aW9uPFQ9YW55PiB7XG4gICAgcHJvdGVjdGVkIGNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgYWJzdHJhY3QgaW52b2tlKGRhdGE6IFQpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV2ZW50U291cmNlQ29yZTxUPiB7XG4gICAgcHJvdGVjdGVkIGNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgbmV4dChkYXRhPzogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWJzPVsuLi50aGlzLnN1YnNdO1xuICAgICAgICBzdWJzLmZvckVhY2goKHN1YikgPT4ge1xuICAgICAgICAgICAgc3ViLmludm9rZShkYXRhKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkU3ViKHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZVN1YihzdWI6IFN1YnNjcmlwdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3Vicy5pbmRleE9mKHN1Yik7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH1cblxufVxuXG4vKipcbiAqIERPTeS6i+S7tuWkhOeQhlxuICovXG5leHBvcnQgY2xhc3MgRE9NRXZlbnRTb3VyY2U8VCBleHRlbmRzIEV2ZW50PiBleHRlbmRzIEV2ZW50U291cmNlQ29yZTxUPiB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRvbTogTm9kZSwgcHVibGljIHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBjb25zdCBjYjogRXZlbnRMaXN0ZW5lciA9IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQoZSBhcyBUKTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2IpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShsaXN0ZW5lcjogKGV2dDpUKT0+dm9pZCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIGNvbnN0IHN1YiA9IG5ldyBET01TdWJzY3JpcHRpb24obGlzdGVuZXIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViKHN1Yik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZFN1YihzdWIpO1xuICAgICAgICByZXR1cm4gIHN1YjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBET01TdWJzY3JpcHRpb248VD4gZXh0ZW5kcyBTdWJzY3JpcHRpb248VD4ge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBsaXN0ZW5lcjogKGV2dDpUKT0+dm9pZCwgcHVibGljIGNhbmNlbDogKCkgPT4gdm9pZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGludm9rZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5lcihkYXRhKTtcbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU3ViamVjdDxUPiBleHRlbmRzIEV2ZW50U291cmNlQ29yZTxUPntcbiAgICBzdWJzY3JpYmUobGlzdGVuZXI6KGRhdGE6VCk9PnZvaWQpOlN1YnNjcmlwdGlvbntcbiAgICAgICAgY29uc3Qgc3ViID0gbmV3IFN1YmplY3RTdWJzY3JpcHRpb24obGlzdGVuZXIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViKHN1Yik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZFN1YihzdWIpO1xuICAgICAgICByZXR1cm4gc3ViO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1YmplY3RTdWJzY3JpcHRpb24gZXh0ZW5kcyBTdWJzY3JpcHRpb257XG4gICAgY29uc3RydWN0b3IocHVibGljIGxpc3RlbmVyOihkYXRhOmFueSk9PnZvaWQsIHB1YmxpYyBjYW5jZWw6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpbnZva2UoZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuZXIoZGF0YSk7XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudDxUIGV4dGVuZHMgRXZlbnQ+KGRvbTpOb2RlLHR5cGU6c3RyaW5nKTpET01FdmVudFNvdXJjZTxUPntcbiAgICByZXR1cm4gbmV3IERPTUV2ZW50U291cmNlPFQ+KGRvbSx0eXBlKTtcbn0iLCJpbXBvcnQgeyBFbGVtZW50RXZlbnQsIEV2ZW50TWFwLCBFdmVudFR5cGVzIH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IHdhdGNoQ2hhbmdlZCB9IGZyb20gXCIuL25vdGlmeVwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQ3Vyc29yVHlwZSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0ICogYXMgSGlzdG9yeSBmcm9tICcuL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWN0IHtcbiAgICB4ID0gMDtcbiAgICB5ID0gMDtcbiAgICB3aWR0aCA9IDA7XG4gICAgaGVpZ2h0ID0gMDtcbiAgICBtYXhIZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgbWF4V2lkdGg6IG51bWJlciA9IDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplUHJvcHMge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBwcm9wcz86IGFueSxcbiAgICBjaGlsZHJlbj86IEFycmF5PFNlcmlhbGl6ZVByb3BzPjtcbiAgICBjb21wbGV0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICog5Yi35paw57G75Z6LXG4gKiDliLfmlrDlpJbop4LvvIzkuI3pnIDopoHov5vooYzmtYvph4/vvIznm7TmjqXov5vlhaXnu5jliLZcbiAqIOWIt+aWsOWGheWuue+8jOmcgOimgemHjeaWsOa1i+mHj++8jOWGjee7mOWItlxuICovXG5leHBvcnQgdHlwZSBSZWZyZXNoVHlwZSA9ICdhcHBlYXJhbmNlJyB8ICdjb250ZW50JztcblxuLyoqXG4gKiDkv67mlLnmoIflv5dcbiAqL1xuZXhwb3J0IGVudW0gTW9kaWZ5RmxhZyB7XG4gICAgLy/ooqvkv67mlLlcbiAgICBNb2RpZnkgPSAwLFxuICAgIC8v5peg5L+u5pS5XG4gICAgTm9uZSA9IDEsXG4gICAgLy/lrZDpobnooqvkv67mlLlcbiAgICBUcmFjayA9IDJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbkNoYW5nZUV2ZW50UHJvcHMge1xuICAgIGRhdGE6IGFueVxufVxuXG5leHBvcnQgdHlwZSBFbGVtZW50SGFuZGxlcjxFIGV4dGVuZHMgRWxlbWVudEV2ZW50ID0gRWxlbWVudEV2ZW50PiA9IChlOiBFKSA9PiB2b2lkO1xuXG5pbnRlcmZhY2UgUmVnaXN0ZXJUeXBlSGFuZGxlclByb3BzPFQgZXh0ZW5kcyBFbGVtZW50PiB7XG4gICAgZWxlbWVudFR5cGU6IGFueSxcbiAgICBldmVudE5hbWU6IEV2ZW50VHlwZXMsXG4gICAgaGFuZGxlcjogRWxlbWVudEhhbmRsZXIsXG4gICAgdXNlQ2FwdHVyZTogYm9vbGVhbixcbiAgICBjdHg6IEVsZW1lbnRFdmVudFsnY3R4J11cbn1cblxuLyoqXG4gKiDnsbvlnovkuovku7blpITnkIZcbiAqL1xuZXhwb3J0IGNvbnN0IGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyOiBBcnJheTxSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8RWxlbWVudD4+ID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VUeXBlSGFuZGxlcihlbGU6IEVsZW1lbnQsIGV2ZW50TmFtZTogRXZlbnRUeXBlcywgZTogRWxlbWVudEV2ZW50LCB1c2VDYXB0dXJlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVkaWNhdGUgPSAoZWxlOiBFbGVtZW50LCB0aDogUmVnaXN0ZXJUeXBlSGFuZGxlclByb3BzPEVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmIChDb21tb25VdGlsLmlzQ29uc3RydWN0b3IodGguZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlIGluc3RhbmNlb2YgdGguZWxlbWVudFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGguZWxlbWVudFR5cGUoZSk7XG5cbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCB0aCBvZiBlbGVtZW50VHlwZUV2ZW50SGFuZGxlcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGVsZSwgdGgpICYmIHRoLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIHRoLnVzZUNhcHR1cmUgPT09IHVzZUNhcHR1cmUgJiYgdGguY3R4ID09PSBlLmN0eCkge1xuICAgICAgICAgICAgdGguaGFuZGxlcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiDlrprkuYnnu4Tku7bnmoTmlbDmja7vvIzphY3nva5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICAgIG1vZGlmeUZsYWc6IE1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk1vZGlmeTtcbiAgICBpc01vdXNlZW50ZXIhOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2V2ZW50TWFwOiBFdmVudE1hcCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfcmVmcmVzaEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcm90ZWN0ZWQgX29uQ2hhbmdlRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgb2JzZXJ2ZXJzOiBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PFN1YnNjcmlwdGlvbj4+ID0gbmV3IFdlYWtNYXAoKTtcbiAgICBwYWludFJlbmRlcnM6IEFycmF5PFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICBtZWFzdXJlUmVuZGVyITogUmVuZGVyT2JqZWN0IHwgbnVsbDtcbiAgICBmb2N1c2FibGUhOiBib29sZWFuO1xuICAgIGlzRm9jdXNlZCE6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog5L+u6aWw5YWD57Sg5LiN6IO95aSN5Yi244CB5bqP5YiX5YyW44CB5Yig6ZmkKOmcgOimgeaJi+WKqOWIoOmZpClcbiAgICAgKi9cbiAgICBpc0RlY29yYXRlITogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDlj6/ngrnlh7vmgKfvvIzkvovlpoLvvJpudWxsLXRleHQg5Y2g5L2N56ym5YWD57Sg5LiN5YW35aSH5Y+v54K55Ye76IO95YqbXG4gICAgICogMi7nvJbovpHpobXnnInpobXohJrnmoTog73liptcbiAgICAgKi9cbiAgICBkaXNhYmxlQ2xpY2shOiBib29sZWFuO1xuICAgIC8v5piv5ZCm6KKr6YeK5pS+XG4gICAgZGlzcG9zZWQhOiBib29sZWFuO1xuICAgIC8v5piv5ZCm5rWL6YeP5a6M5q+VXG4gICAgbG9hZGVkITogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9wYXJlbnQhOiBCcmFuY2hFbGVtZW50IHwgbnVsbDtcbiAgICBnZXQgcGFyZW50KCk6IEJyYW5jaEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50IGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgc2V0IHBhcmVudCh2YWw6IEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb3BzITogUDtcbiAgICBwdWJsaWMgZ2V0IHByb3BzKCk6IFAge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwcm9wcyh2YWx1ZTogUCkge1xuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRoaXMuX3Byb3BzID0gd2F0Y2hDaGFuZ2VkKHZhbHVlLCAodGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlZChwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIC8vdGhpcy5fcHJvcHMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUNoYW5nZWQocDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIEhpc3RvcnkubG9nVXBkYXRlRWxlUHJvcHModGhpcywgcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpXG4gICAgfVxuXG4gICAgLy/lhYPntKDmmK/lkKbnpoHmraLlpI3liLbvvIzkvovlpoLmibnms6jlhYPntKBcbiAgICAvL2ZvcmJpZENvcHk6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9ldmVudE1hcCA9IG5ldyBFdmVudE1hcCgpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VFbnRlcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGw7XG5cbiAgICBhYnN0cmFjdCBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsO1xuXG4gICAgYWJzdHJhY3QgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQ7XG5cbiAgICBhYnN0cmFjdCBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXI7XG5cbiAgICBhYnN0cmFjdCBnZXRTZWxmTGVuZ3RoKHB1cmU6IGJvb2xlYW4pOiBudW1iZXI7XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudE1hcD8uY2xlYXIodGhpcyk7XG4gICAgICAgIHRoaXMucGFpbnRSZW5kZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMubWVhc3VyZVJlbmRlciA9IG51bGw7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcyk7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGFkZEV2ZW50PFQgZXh0ZW5kcyBFbGVtZW50RXZlbnQ+KGV2ZW50OiBFdmVudFR5cGVzLCBoYW5kbGU6IChldnQ6IFQpID0+IHZvaWQsIHVzZUNhcHR1cmUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50TWFwPy5hZGQodGhpcywgZXZlbnQsIGhhbmRsZSwgdXNlQ2FwdHVyZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRXZlbnQoZXZlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXZlbnRNYXAucmVtb3ZlKHRoaXMsIGV2ZW50SWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUV2ZW50QnlUeXBlKGV2ZW50VHlwZTogRXZlbnRUeXBlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwLnJlbW92ZUJ5VHlwZSh0aGlzLCBldmVudFR5cGUpO1xuICAgIH1cblxuICAgIGludm9rZUV2ZW50KGV2ZW50OiBFdmVudFR5cGVzLCBldnQ6IEVsZW1lbnRFdmVudCwgdXNlckNhcHR1cmUgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIC8v6Kem5Y+R57G75Z6L5LqL5Lu2XG4gICAgICAgIGludm9rZVR5cGVIYW5kbGVyKHRoaXMsIGV2ZW50LCBldnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRNYXAuZ2V0KHRoaXMsIGV2ZW50LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGl0ZW0gPT4gaXRlbShldnQpKTtcbiAgICB9XG5cbiAgICBiZWdpbk1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFpbnRSZW5kZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZW5kTWVhc3VyZSgpOnZvaWR7fVxuXG5cbiAgICBnZXRJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRDaGlsZEluZGV4KHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcmVmcmVzaFN1YmplY3QoKTogU3ViamVjdDx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZyZXNoRXZlbnQ7XG4gICAgfVxuXG4gICAgZ2V0IG9uQ2hhbmdlU3ViamVjdCgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlRXZlbnQ7XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hFdmVudC5uZXh0KCk7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgcHViT25DaGFuZ2Uoc2VsZkNoYW5nZTogcHViQ2hhbmdlVHlwZSk6IHZvaWRcblxuICAgIHVuc3Vic2NyaWJlKGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMub2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgIHN1YnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZHN1YnNjcmliZShlbGVtZW50OiBFbGVtZW50LCAuLi5zdWI6IEFycmF5PFN1YnNjcmlwdGlvbj4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHN1YnMgPSB0aGlzLm9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmICghc3Vicykge1xuICAgICAgICAgICAgc3VicyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnMuc2V0KGVsZW1lbnQsIHN1YnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1YnMucHVzaCguLi5zdWIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOW9k+WJjeiKgueCuVxuICAgICAqL1xuICAgIHJlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vKipcbiAqIOacgOWwj+iKgueCueWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGVhZkVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBFbGVtZW50PFA+IHtcbiAgICBjdXJzb3JUeXBlOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuXG4gICAgZ2V0Q2hpbGRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHB1Yk9uQ2hhbmdlKHNlbGZDaGFuZ2U6IHB1YkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjayAmJiBzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk1vZGlmeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuVHJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk1vZGlmeTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNoYW5nZUV2ZW50Lm5leHQoKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiDmnp3lubLoioLngrnvvIzljIXlkKvoi6XlubLkuKrmnp3lubLmiJbogIXlj7blrZDoioLngrlcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJyYW5jaEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBFbGVtZW50PFA+IHtcbiAgICBwcml2YXRlIGNoaWxyZW46IEFycmF5PEVsZW1lbnQ+ID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoY2hpbGQ6IEVsZW1lbnQsIGluZGV4ID0gLTEpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+W9k+WJjeWFg+e0oOW3suiiq+mHiuaUvizkuI3og73lho3mt7vliqDlrZDlhYPntKAnLCB0aGlzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3lhYPntKDlt7Looqvph4rmlL4s5LiN6IO95YaN5re75Yqg5a2Q5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG4gICAgICAgIEhpc3RvcnkuaW5zZXJ0RWxlKGNoaWxkKTtcbiAgICAgICAgY29uc3QgcmVmU3ViID0gY2hpbGQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvbkNoYW5nZVN1YiA9IGNoaWxkLm9uQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3RyYWNrZXInKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkc3Vic2NyaWJlKGNoaWxkLCByZWZTdWIsIG9uQ2hhbmdlU3ViKTtcbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4uuafpeaJvuWIsOW9k+WJjeWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgICAgIEhpc3RvcnkucmVtb3ZlRWxlKGNoaWxkKTtcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbHJlbltpbmRleF07XG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDaGlsZChjaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4uuafpeaJvuWIsOW9k+WJjeWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcG9zZUNoaWxkKGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAoPGFueT5jaGlsZCkucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgfVxuXG4gICAgY2xlYXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jaGlscmVuXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkQnlJbmRleChpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jaGlscmVuXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgY2hpbGQuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmaW5kKHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5maW5kKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGQ8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PihpbmRleDogbnVtYmVyKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW5baW5kZXhdIGFzIFQ7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRJbmRleChjaGlsZDogRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgLy9yZXR1cm4gdGhpcy5jaGlscmVuLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIDEgKyBjdXJyLmdldENoaWxkTGVuZ3RoKCksIDApO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnIgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyAxICsgY3Vyci5nZXRDaGlsZExlbmd0aCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIuZ2V0Q2hpbGRMZW5ndGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBnZXRTZWxmTGVuZ3RoKHB1cmU6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMSArIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5nZXRTZWxmTGVuZ3RoKHB1cmUpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cblxuICAgIHRyZWVGaWx0ZXIocHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uaXRlbS50cmVlRmlsdGVyKHByZWRpY2F0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICB0cmVlRmluZChwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShpdGVtLCBpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0aCA9IGl0ZW0udHJlZUZpbmQocHJlZGljYXRlKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHViT25DaGFuZ2Uoc2VsZkNoYW5nZTogcHViQ2hhbmdlVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrICYmIHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTW9kaWZ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5UcmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTW9kaWZ5O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGlsZChpKS5wdWJPbkNoYW5nZSgndG8tY2hpbGQnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlRXZlbnQubmV4dCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgcHViQ2hhbmdlVHlwZSA9ICdzZWxmJyB8ICd0cmFja2VyJyB8ICd0by1jaGlsZCc7XG5cbi8qKlxuICog6KGM5YaF57yW57uE5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVHcm91cEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHtcbn1cblxuLyoqXG4gKiDlnZfnuqflhYPntKDvvIznm67liY3lj6rmnIlQ5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRlbnRFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgQnJhbmNoRWxlbWVudDxQPiB7XG59XG5cbi8qKlxuICog5YyF5ZCr5Z2X57qn5riy5p+T5YWD57Sg55qE5a655Zmo5YWD57SgLOS+i+WmgmJvZHnjgIF0YWJsZS1jZWxs44CBdGFibGXnrYlcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEJyYW5jaEVsZW1lbnQ8UD4ge1xuICAgIG5vRmlsbEVtcHR5ITogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSByZWFkRWxlbWVudFByb3BzPFQ+IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgcHJvcHM6IFQgfCB1bmRlZmluZWQ7XG4gICAgY2hpbGRyZW46IGFueSB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWxlbWVudEZhY3Rvcnk8VCA9IG51bGw+IHtcbiAgICBvcHRpb25zITogVmlld09wdGlvbnM7XG5cbiAgICBhYnN0cmFjdCBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgYWJzdHJhY3QgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFQ+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudDtcblxuICAgIHJlYWRDb21wbGV0ZWQoZWxlOiBFbGVtZW50LCBjaGlsZHJlbjogQXJyYXk8RWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGl0ZW0gPT4gZWxlLmFkZENoaWxkKGl0ZW0pKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICB0YXJnZXQ6IEVsZW1lbnRcbiAgICBpc0Z1bGxTZWxlY3RlZDogYm9vbGVhbixcbiAgICBzdGFydE9mZnNldDogbnVtYmVyLFxuICAgIGVuZE9mZnNldDogbnVtYmVyLFxuICAgIHNlbGVjdGVkQ2hpbGRyZW46IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4sXG59XG5cbi8qKlxuICog57yW6L6R5qih5byPXG4gKi9cbmV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICAvKipcbiAgICAgKiDoh6rnlLHmqKHlvI/vvIzorr7orqHmqKHmnb/ml7bkvb/nlKhcbiAgICAgKi9cbiAgICBGcmVlID0gMCxcbiAgICAvKipcbiAgICAgKiDkuKXmoLzmqKHlvI/vvIzljLvnlJ/kuablhpnmqKHlvI/ml7bkvb/nlKgs5Y+q5Y+v5pu05pS55pWw5o2u5YWD5YC8XG4gICAgICovXG4gICAgU3RyaWN0ID0gMSxcbiAgICAvKipcbiAgICAgKiDmn6XnnIvmqKHlvI8s5Lu75L2V5L+u5pS55paH5qGj55qE5pON5L2c6YO95LiN5YWB6K6477yM5L2G5piv5Y+v6YCJ5Lit77yM5pyJ5ouW6JOdXG4gICAgICovXG4gICAgVmlldyA9IDIsXG4gICAgLyoqXG4gICAgICog56aB55So5qih5byP77yM5b2T5YmN5Yy65Z+f5LiN5Y+v54K55Ye777yM5LiN5Y+v6YCJ5Lit77yM6aG16ISa44CB6aG155yJ57yW6L6R5pe255qE5o6n5Yi2XG4gICAgICovXG4gICAgRGlzYWJsZWQgPSAzXG59XG5cbi8qKlxuICog5paH5qGj5qih5byPXG4gKi9cbmV4cG9ydCBlbnVtIERvY01vZGUge1xuICAgIERlc2lnbiA9IDAsXG4gICAgLyoqXG4gICAgICog5a6M5YWo57yW6L6R5qih5byPXG4gICAgICovXG4gICAgRWRpdCA9IDEsXG4gICAgLyoqXG4gICAgICog6KGo5Y2V57yW6L6R5qih5byPXG4gICAgICovXG4gICAgRm9ybUVkaXQgPSAyLFxuICAgIC8qKlxuICAgICAqIOinhuWbvuaooeW8j++8jOWPquiDveafpeeci1xuICAgICAqL1xuICAgIFZpZXcgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEJvb2xlYW5FbnVtIHtcbiAgICBOdWxsLFxuICAgIFRydWUsXG4gICAgRmFsc2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2NVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUGFnZU9wdGlvbnMge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyID0gMDtcbiAgICBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnO1xuXG4gICAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9yaWVudDogT3JpZW50VHlwZSA9ICdwb3J0cmFpdCcpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLm9yaWVudCA9IG9yaWVudDtcbiAgICB9XG5cbiAgICBnZXQgd2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50ID09PSAnbGFuZHNjYXBlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCB3aWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5vcmllbnQgPT09ICdsYW5kc2NhcGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBzZXQgaGVpZ2h0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBPcmllbnRUeXBlID0gJ2xhbmRzY2FwZScgfCAncG9ydHJhaXQnO1xuZXhwb3J0IHR5cGUgUGFnZUxheW91dE1vZGUgPSAnc2luZ2xlUGFnZScgfCAnbXVsdGlQYWdlJyB8ICdmaXQtcGFnZSc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3T3B0aW9ucyB7XG4gICAgY29weVJpZ2h0SW5mbyE6IHN0cmluZztcbiAgICB3YXRlcm1hcms/OiBzdHJpbmc7XG4gICAgZHJhd0xpbmVSZWN0Q29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBkcmF3Q2hhclJlY3RDb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGRyYXdTeW1ib2xzQ29sb3IgPSAncmdiKDEyOCwxMjgsMTI4KSc7XG4gICAgZGVmYXVsdEZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgZGVmYXVsdEZvbnRTaXplID0gMTQ7XG4gICAgZGVmYXVsdENvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9ICdyZ2IoMTMxLDE3NSwxNTUsMC41KSc7XG4gICAgZGF0YUVsZU92ZXJsYXlzQ29sb3IgPSAncmdiKDEzMSwxNzUsMTU1LDAuNSknO1xuICAgIGRhdGFFbGVSZWFkT25seU92ZXJsYXlDb2xvciA9ICcjZDlkOWQ5JztcbiAgICBkYXRhRWxlT3V0bGluZUNvbG9yID0gJ3JnYigxMzEsMTc1LDE1NSwwLjcpJztcbiAgICB2aWV3QmFja2NvbG9yID0gJ3JnYigyMzAsMjMwLDIzMCknO1xuICAgIHBhcmFTeW1ib2xDb2xvciA9ICdyZ2IoMTI4LDEyOCwxMjgpJztcbiAgICBkYXRhR3JvdXBDb2xvciA9ICdyZ2IoMCw4MCwxNzkpJztcbiAgICAvL+aWsOWini3nlZnnl5XlnZfmlofmnKzpopzoibJcbiAgICB0cmFja0luc0NvbG9yID0gJyNmZjRkNGYnO1xuICAgIC8v5Yig6ZmkLeeVmeeXleWdl+aWh+acrOminOiJslxuICAgIHRyYWNrRGVsQ29sb3IgPSAnIzAwMCc7XG4gICAgc2hvd0xpbmVSZWN0ITogYm9vbGVhbjtcbiAgICBzaG93Q2hhclJlY3QhOiBib29sZWFuO1xuICAgIHNob3dQYXJhTWFyayE6IGJvb2xlYW47XG4gICAgc2hvd1RhYkNoYXIhOiBib29sZWFuO1xuICAgIHNob3dTcGFjZUNoYXIhOiBib29sZWFuO1xuICAgIHNob3dMaW5lQnJlYWshOiBib29sZWFuO1xuICAgIGJvZHlNYXJnaW5Ub3AgPSA4O1xuICAgIGRldk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzaG93RGVidWchOiBib29sZWFuO1xuICAgIHJlc291cmNlTW9kZTogJ2xhenknIHwgJ2ltbWVkaWF0ZScgPSAnaW1tZWRpYXRlJztcbiAgICBzZWNyZXRCcm93c2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvL+S4reaWh+eJiOW8j++8jOWkhOeQhuS4reaWh+aNouihjO+8m+WJjee9ruagh+eCueWSjOWQjue9ruagh+eCuVxuICAgIGNoaW5lc2VMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8v6K6w5b2V5Y+Y5pu0XG4gICAgZW5hYmxlVHJhY2tIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gICAgLy/orrDlvZXlj5jmm7TnmoTmrKHmlbBcbiAgICB0cmFja0hpc3RvcnlNYXhMZW5ndGg6IG51bWJlciA9IDUwMDtcbiAgICAvL+aVtOmhteaooeW8j++8jOS4jeWIhumhtVxuICAgIHByaXZhdGUgX2Z1bGxQYWdlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdldCBmdWxsUGFnZVZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdWxsUGFnZVZpZXc7XG4gICAgfVxuXG4gICAgc2V0IGZ1bGxQYWdlVmlldyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5mdWxsUGFnZVZpZXcgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZnVsbFBhZ2VWaWV3ID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UubmV4dCgnZm9yY2UnKTtcbiAgICB9XG5cbiAgICAvL+avq+exs+WSjOWDj+e0oOeahOi9rOaNouavlFxuICAgIG1tVG9QaXhlbHNSYXRpbzogbnVtYmVyID0gMDtcbiAgICBjdXJzb3I6IEN1cnNvclR5cGUgPSAndGV4dCc7XG4gICAgLy/lvZPliY3mlofmoaPlgY/np7vph4/vvIzlj5blhrPkuo7mu5rliqjmnaHkvY3nva5cbiAgICB0cmFuc2xhdGVZID0gMDtcbiAgICAvL+aWh+aho+Wkp+Wwj1xuICAgIGRvY1BhZ2VTZXR0aW5nczogUGFnZU9wdGlvbnMgPSBuZXcgUGFnZU9wdGlvbnMoMCwgMCk7XG4gICAgLy/op4blm77lpKflsI8sY2FudmFzXG4gICAgdmlld1NldHRpbmdzIToge1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB9O1xuICAgIHBhZ2VOdW1Gb3JtYXQ6IHN0cmluZyA9ICfnrKx7aW5kZXh96aG1L+WFsXtjb3VudH3pobUnO1xuICAgIHBhZ2VOdW1PZmZzZXQ6IG51bWJlciA9IDA7XG4gICAgLy/pobXmjpLniYjmqKHlvI/vvJrljZXpobXmqKHlvI/jgIHlpJrpobXmqKHlvI/jgIHpgILlupTpobXlrr3mqKHlvI9cbiAgICBwYWdlTGF5b3V0TW9kZTogUGFnZUxheW91dE1vZGUgPSAnc2luZ2xlUGFnZSc7XG5cbiAgICAvL+WGheWuueWMuuWuveW6pu+8jOWPl+WuoemYheeql+WPo+WuveW6puW9seWTjVxuICAgIGdldCBjb250ZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jUGFnZVNldHRpbmdzLndpZHRoICsgdGhpcy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YaF5a655Yy65Z+f55qE6auY5bqmXG4gICAgICog5ZCM5pe26ZmQ5a6aY2FudmFz55qE5pyA5bCP5a695bqmXG4gICAgICovXG4gICAgZ2V0IENvbnRlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgd2lkdGggPSB3aWR0aCArIHRoaXMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cblxuICAgIC8v5Lik5Liq6aG155qE6Ze06LedXG4gICAgZG9jU3BhY2U6IG51bWJlciA9IDA7XG4gICAgLy/mmK/lkKbmmL7npLrlrqHpmIXnqpflj6NcbiAgICBwcml2YXRlIF9zaG93UmV2aWV3V2luZG93OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGdldCBzaG93UmV2aWV3V2luZG93KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1Jldmlld1dpbmRvdztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNob3dSZXZpZXdXaW5kb3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvd1Jldmlld1dpbmRvdyA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICAvL+WuoemYheeql+WPo+WuveW6plxuICAgIHJldmlld1dpbmRvd1dpZHRoOiBudW1iZXIgPSAyMDA7XG4gICAgLy/nvKnmlL5cbiAgICBwcml2YXRlIF9zY2FsZTogbnVtYmVyID0gMTtcbiAgICBnZXQgc2NhbGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlO1xuICAgIH1cblxuICAgIHNldCBzY2FsZSh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9zY2FsZSA9IHZhbDtcbiAgICB9XG5cbiAgICBkb2NNb2RlOiBEb2NNb2RlID0gRG9jTW9kZS5EZXNpZ247XG4gICAgLy/mmK/lkKbmmL7npLrlrqHpmIXnl5Xov7lcbiAgICBwcml2YXRlIF9zaG93VHJhY2tDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwdWJsaWMgZ2V0IHNob3dUcmFja0NoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93VHJhY2tDaGFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2hvd1RyYWNrQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1RyYWNrQ2hhbmdlcyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93VHJhY2tDaGFuZ2VzID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UubmV4dCgnZm9yY2UnKTtcbiAgICB9XG5cbiAgICAvL+WMu+WYseaJk+WNsOaooeW8j++8jOaWh+Wtl+ihjOaooeW8jyzlsIbooajmoLzlpJrooYzlr7nosaHovazmjaLkuLrlpJrkuKrooajmoLzooYzlr7nosaFcbiAgICB0ZXh0Um93TGluZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBlZGl0VXNlcjogRG9jVXNlciA9IHsgaWQ6ICcnLCBuYW1lOiAnJyB9O1xuICAgIC8v55WZ55eV5Yy65Z+f55qE55Sf5pWI5pe26Ze05q6177yM5ZCM5LiA55So5oi355qE55WZ55eV5Z2X5Zyo5q2k5pe26Ze05aSW6ZyA6KaB55Sf5oiQ5paw55qE55WZ55eV5Z2XXG4gICAgdHJhY2tDaGFuZ2VQZXJpb2Q6IG51bWJlciA9IDEwO1xuICAgIG9uQ2hhbmdlOiBTdWJqZWN0PCdkZW1hbmQnIHwgJ2ZvcmNlJz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBNYXJnaW5Qcm9wcyB7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdG9wOiBudW1iZXIgPSAwLCBwdWJsaWMgYm90dG9tOiBudW1iZXIgPSAwLCBwdWJsaWMgbGVmdDogbnVtYmVyID0gMCwgcHVibGljIHJpZ2h0OiBudW1iZXIgPSAwKSB7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogTWFyZ2luUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZU1hcmdpbiA9IG5ldyBNYXJnaW5Qcm9wcyh0aGlzLnRvcCwgdGhpcy5ib3R0b20sIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XG4gICAgICAgIHJldHVybiBjbG9uZU1hcmdpbjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYWRkaW5nUHJvcHMgZXh0ZW5kcyBNYXJnaW5Qcm9wcyB7XG59XG5cbmV4cG9ydCBjbGFzcyBCb3JkZXJQcm9wcyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHdpZHRoOiBudW1iZXIgPSAwLCBwdWJsaWMgY29sb3I6IHN0cmluZyA9ICd0cmFuc3BhcmVudCcsIHB1YmxpYyBzdHlsZTogc3RyaW5nID0gJ3NvbGlkJykge1xuICAgIH1cblxuICAgIGNsb25lKCk6IEJvcmRlclByb3BzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCb3JkZXJQcm9wcyh0aGlzLndpZHRoLCB0aGlzLmNvbG9yLCB0aGlzLnN0eWxlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJRGlzcG9zZSB7XG4gICAgYWJzdHJhY3QgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5cbmV4cG9ydCB0eXBlIFRleHRBbGlnbiA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVzaXplTGVhZlJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xufVxuXG5cbmV4cG9ydCB0eXBlIE51bGxhYmxlVHlwZTxUPiA9IHtcbiAgICBbUHJvcE5hbWUgaW4ga2V5b2YgVF0/OiBUW1Byb3BOYW1lXVxufTtcblxuXG5leHBvcnQgdHlwZSBSZXF1aXJlZFR5cGU8VD4gPSB7XG4gICAgW1Byb3BOYW1lIGluIGtleW9mIFRdOiBUW1Byb3BOYW1lXVxufTtcblxuZXhwb3J0IHR5cGUgSW1nTG9hZFN0YXR1cyA9ICdubycgfCAnbG9hZGluZycgfCAnY29tcGxldGVkJyB8ICdlcnJvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhbmNlbFRva2VuRm4ge1xuICAgIGNhbmNlbD86ICgpID0+IHZvaWQ7XG4gICAgb25GaW5pc2g/OiAoKSA9PiB2b2lkO1xufVxuXG5cbnR5cGUgSVZvaWRGbiA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmNlVGFzayhmbjogSVZvaWRGbik6IElWb2lkRm4ge1xuICAgIGxldCBzdGF0ZSA9IGZhbHNlO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gdHJ1ZTtcbiAgICAgICAgZm4oKTtcbiAgICB9O1xufSIsImltcG9ydCB7TnVsbGFibGVUeXBlLCBPcmllbnRUeXBlLCBQYWRkaW5nUHJvcHMsIFRleHRBbGlnbiwgVmlld09wdGlvbnN9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7VHJhY2tSdW5UeXBlRW51bX0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5pbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRWZXJ0QWxpZ24gPSAnc3VwZXJzY3JpcHQnIHwgJ3N1YnNjcmlwdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICAvLyBvblByb3BlcnR5Q2hhbmdlZFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy8gcHJvcGVydHlDaGFuZ2VkKHByb3BlcnlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZFN1YmplY3QubmV4dChwcm9wZXJ5TmFtZSk7XG4gICAgLy8gfVxuICAgIGFic3RyYWN0IGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueTtcblxuICAgIHByaXZhdGUgX19hdHRhY2hlZFByb3BlcnR5ITogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIHNldFByb3BlcnR5PFQ+KHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX19hdHRhY2hlZFByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX19hdHRhY2hlZFByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5W3Byb3BlcnR5TmFtZV07XG4gICAgfVxuXG4gICAgZ2V0UHJvcGVydHk8VD4ocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eVtwcm9wZXJ0eU5hbWVdIGFzIFQ7XG4gICAgfVxuXG4gICAgY2xvbmVBdHRhY2hlZFByb3BlcnR5KGRlc3Q6IElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX19hdHRhY2hlZFByb3BlcnR5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBkZXN0LnNldFByb3BlcnR5KGtleSwgQ29tbW9uVXRpbC5jbG9uZVZhbHVlKHRoaXMuX19hdHRhY2hlZFByb3BlcnR5W2tleV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgY29sb3IhOiBzdHJpbmc7XG4gICAgZm9udE5hbWUhOiBzdHJpbmc7XG4gICAgZm9udFNpemUhOiBudW1iZXI7XG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcgfCAnYm9sZCcgPSAnbm9ybWFsJztcbiAgICBmb250U3R5bGU6ICdub3JtYWwnIHwgJ2l0YWxpYycgPSAnbm9ybWFsJztcbiAgICAvL3RleHREZWNvcmF0aW9uOiAnbm9uZScgfCAndW5kZXJsaW5lJyB8ICdvdmVybGluZScgfCAnbGluZS10aHJvdWdoJyA9ICdub25lJztcbiAgICB1bmRlcmxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBvdmVybGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxpbmV0aHJvdWdoOiBib29sZWFuID0gZmFsc2U7XG4gICAgYmFja2dyb3VuZCE6IHN0cmluZztcbiAgICBsZXR0ZXJTcGFjZSE6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIOS4iuagh+aIluiAheS4i+agh1xuICAgICAqL1xuICAgIHZlcnRBbGlnbiE6IFRleHRWZXJ0QWxpZ247XG5cbiAgICAvKipcbiAgICAgKiDlrZfnrKbovrnmoYZcbiAgICAgKi9cbiAgICBib3JkZXIhOiBib29sZWFuO1xuXG4gICAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fX2NhY2hlRm9udCA9IG51bGw7XG4gICAgfVxuXG4gICAgY2xvbmUoc291cmNlOiBUZXh0UHJvcHMgfCBudWxsKTogVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBzb3VyY2UgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICB0aGlzLnNldFByb3BzVmFsdWUodGhpcywgY2xvbmUpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc2V0UHJvcHNWYWx1ZShzb3VyY2U6IFRleHRQcm9wcywgdGFyZ2V0OiBUZXh0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGFyZ2V0LmNvbG9yID0gc291cmNlLmNvbG9yO1xuICAgICAgICB0YXJnZXQuZm9udE5hbWUgPSBzb3VyY2UuZm9udE5hbWU7XG4gICAgICAgIHRhcmdldC5mb250U2l6ZSA9IHNvdXJjZS5mb250U2l6ZTtcbiAgICAgICAgdGFyZ2V0LmZvbnRXZWlnaHQgPSBzb3VyY2UuZm9udFdlaWdodDtcbiAgICAgICAgdGFyZ2V0LmZvbnRTdHlsZSA9IHNvdXJjZS5mb250U3R5bGU7XG4gICAgICAgIHRhcmdldC51bmRlcmxpbmUgPSBzb3VyY2UudW5kZXJsaW5lO1xuICAgICAgICB0YXJnZXQub3ZlcmxpbmUgPSBzb3VyY2Uub3ZlcmxpbmU7XG4gICAgICAgIHRhcmdldC5saW5ldGhyb3VnaCA9IHNvdXJjZS5saW5ldGhyb3VnaDtcbiAgICAgICAgdGFyZ2V0LmJhY2tncm91bmQgPSBzb3VyY2UuYmFja2dyb3VuZDtcbiAgICAgICAgdGFyZ2V0LmxldHRlclNwYWNlID0gc291cmNlLmxldHRlclNwYWNlO1xuICAgICAgICB0YXJnZXQudmVydEFsaWduID0gc291cmNlLnZlcnRBbGlnbjtcbiAgICAgICAgdGFyZ2V0LmJvcmRlciA9IHNvdXJjZS5ib3JkZXI7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxUZXh0UHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IgIT09IHZpZXdPcHRpb25zLmRlZmF1bHRDb2xvcikge1xuICAgICAgICAgICAgcHJvcHNbXCJjb2xvclwiXSA9IHRoaXMuY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udE5hbWUgJiYgdGhpcy5mb250TmFtZSAhPT0gdmlld09wdGlvbnMuZGVmYXVsdEZvbnROYW1lKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnROYW1lXCJdID0gdGhpcy5mb250TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250U2l6ZSAhPT0gdmlld09wdGlvbnMuZGVmYXVsdEZvbnRTaXplKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnRTaXplXCJdID0gdGhpcy5mb250U2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250V2VpZ2h0ICYmIHRoaXMuZm9udFdlaWdodCAhPT0gXCJub3JtYWxcIikge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250V2VpZ2h0XCJdID0gdGhpcy5mb250V2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJ1bmRlcmxpbmVcIl0gPSB0aGlzLnVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGluZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJvdmVybGluZVwiXSA9IHRoaXMub3ZlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHByb3BzW1wibGluZXRocm91Z2hcIl0gPSB0aGlzLmxpbmV0aHJvdWdoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHByb3BzW1wiYmFja2dyb3VuZFwiXSA9IHRoaXMuYmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sZXR0ZXJTcGFjZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJsZXR0ZXJTcGFjZVwiXSA9IHRoaXMubGV0dGVyU3BhY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udFN0eWxlICYmIHRoaXMuZm9udFN0eWxlICE9PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250U3R5bGVcIl0gPSB0aGlzLmZvbnRTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52ZXJ0QWxpZ24pIHtcbiAgICAgICAgICAgIHByb3BzW1widmVydEFsaWduXCJdID0gdGhpcy52ZXJ0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyKSB7XG4gICAgICAgICAgICBwcm9wc1tcImJvcmRlclwiXSA9IHRoaXMuYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9fY2FjaGVGb250ITogc3RyaW5nIHwgbnVsbDtcblxuICAgIGdldEZvbnQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX19jYWNoZUZvbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fY2FjaGVGb250O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGZvbnRTdHIgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRTdHlsZSAmJiB0aGlzLmZvbnRTdHlsZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICBmb250U3RyICs9IHRoaXMuZm9udFN0eWxlICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZm9udFdlaWdodCAmJiB0aGlzLmZvbnRXZWlnaHQgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICAgICAgZm9udFN0ciArPSB0aGlzLmZvbnRXZWlnaHQgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+W9k+WJjeWtmOWcqOS4iuagh+aIluiAheS4i+agh++8jOWkp+Wwj+S4ujMvNVxuICAgICAgICAgICAgZm9udFN0ciArPSAodGhpcy52ZXJ0QWxpZ24gPyB0aGlzLmZvbnRTaXplICogMyAvIDUgOiB0aGlzLmZvbnRTaXplKSArICdweCAnO1xuICAgICAgICAgICAgZm9udFN0ciArPSBmb250TWFwRnVuYy5nZXRGb250TWFwKHRoaXMuZm9udE5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fX2NhY2hlRm9udCA9IGZvbnRTdHI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2NhY2hlRm9udDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVxdWFscyhwcm9wczogVGV4dFByb3BzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tncm91bmQgPT09IHByb3BzLmJhY2tncm91bmRcbiAgICAgICAgICAgICYmIHRoaXMuY29sb3IgPT09IHByb3BzLmNvbG9yXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnROYW1lID09PSBwcm9wcy5mb250TmFtZVxuICAgICAgICAgICAgJiYgdGhpcy5mb250U2l6ZSA9PT0gcHJvcHMuZm9udFNpemVcbiAgICAgICAgICAgICYmIHRoaXMuZm9udFdlaWdodCA9PT0gcHJvcHMuZm9udFdlaWdodFxuICAgICAgICAgICAgJiYgdGhpcy5sZXR0ZXJTcGFjZSA9PT0gcHJvcHMubGV0dGVyU3BhY2VcbiAgICAgICAgICAgICYmIHRoaXMudW5kZXJsaW5lID09PSBwcm9wcy51bmRlcmxpbmVcbiAgICAgICAgICAgICYmIHRoaXMub3ZlcmxpbmUgPT09IHByb3BzLm92ZXJsaW5lXG4gICAgICAgICAgICAmJiB0aGlzLmxpbmV0aHJvdWdoID09PSBwcm9wcy5saW5ldGhyb3VnaFxuICAgICAgICAgICAgJiYgdGhpcy5mb250U3R5bGUgPT09IHByb3BzLmZvbnRTdHlsZVxuICAgICAgICAgICAgJiYgdGhpcy52ZXJ0QWxpZ24gPT09IHByb3BzLnZlcnRBbGlnblxuICAgICAgICAgICAgJiYgdGhpcy5ib3JkZXIgPT09IHByb3BzLmJvcmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIC8v5q616JC96buY6K6k55qE5paH5pys5bGe5oCnXG4gICAgLy90ZXh0UHJvcHMhOiBUZXh0UHJvcHM7XG4gICAgaW5kZW50ID0gMDtcbiAgICBoYW5naW5nID0gMDtcbiAgICBsaW5lSGVpZ2h0ID0gMS4zO1xuICAgIHRleHRBbGlnbjogVGV4dEFsaWduID0gJ2xlZnQnO1xuICAgIG51bWJlclR5cGUgPSAtMTtcbiAgICBwYWdlQnJlYWsgPSBmYWxzZTtcblxuICAgIGNsb25lKGRlc3Q6IFBhcmFncmFwaFByb3BzIHwgbnVsbCA9IG51bGwpOiBQYXJhZ3JhcGhQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUGFyYWdyYXBoUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuaW5kZW50ID0gdGhpcy5pbmRlbnQ7XG4gICAgICAgIGNsb25lLm51bWJlclR5cGUgPSB0aGlzLm51bWJlclR5cGU7XG4gICAgICAgIGNsb25lLmxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIGNsb25lLnRleHRBbGlnbiA9IHRoaXMudGV4dEFsaWduO1xuICAgICAgICAvL2Nsb25lLnRleHRQcm9wcyA9IHRoaXMudGV4dFByb3BzLmNsb25lKG5ldyBUZXh0UHJvcHMoKSk7XG4gICAgICAgIC8v5by65Yi25o2i6aG15bGe5oCn5LiN5Y+v5aSN5Yi2XG4gICAgICAgIC8vY2xvbmUucGFnZUJyZWFrPXRoaXMucGFnZUJyZWFrO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxQYXJhZ3JhcGhQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuaW5kZW50KSB7XG4gICAgICAgICAgICBwcm9wc1tcImluZGVudFwiXSA9IHRoaXMuaW5kZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhbmdpbmcpIHtcbiAgICAgICAgICAgIHByb3BzW1wiaGFuZ2luZ1wiXSA9IHRoaXMuaGFuZ2luZztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW5lSGVpZ2h0ICYmIHRoaXMubGluZUhlaWdodCAhPT0gMS4zKSB7XG4gICAgICAgICAgICBwcm9wc1tcImxpbmVIZWlnaHRcIl0gPSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGV4dEFsaWduICYmIHRoaXMudGV4dEFsaWduICE9PSBcImxlZnRcIikge1xuICAgICAgICAgICAgcHJvcHNbXCJ0ZXh0QWxpZ25cIl0gPSB0aGlzLnRleHRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5udW1iZXJUeXBlICE9PSAtMSkge1xuICAgICAgICAgICAgcHJvcHNbXCJudW1iZXJUeXBlXCJdID0gdGhpcy5udW1iZXJUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2VCcmVhaykge1xuICAgICAgICAgICAgcHJvcHNbXCJwYWdlQnJlYWtcIl0gPSB0aGlzLnBhZ2VCcmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIHdpZHRoITogbnVtYmVyO1xuICAgIGhlaWdodCE6IG51bWJlcjtcbiAgICBwYWRkaW5nITogUGFkZGluZ1Byb3BzO1xuICAgIGhlYWRlckxpbmUgPSAxMjtcbiAgICBmb290ZXJMaW5lID0gMTI7XG4gICAgb3JpZW50OiBPcmllbnRUeXBlID0gJ3BvcnRyYWl0J1xuICAgIGNyZWF0ZVVzZXJJZCE6IHN0cmluZztcbiAgICBjcmVhdGVVc2VyTmFtZSE6IHN0cmluZztcbiAgICBjcmVhdGVEYXRlITogc3RyaW5nO1xuICAgIHNjcmlwdHMhOiBzdHJpbmc7XG5cbiAgICBjbG9uZShkZXN0OiBEb2N1bWVudFByb3BzKTogRG9jdW1lbnRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRG9jdW1lbnRQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5wYWRkaW5nID0gdGhpcy5wYWRkaW5nLmNsb25lKCk7XG4gICAgICAgIGNsb25lLmhlYWRlckxpbmUgPSB0aGlzLmhlYWRlckxpbmU7XG4gICAgICAgIGNsb25lLmZvb3RlckxpbmUgPSB0aGlzLmZvb3RlckxpbmU7XG4gICAgICAgIGNsb25lLnNjcmlwdHMgPSB0aGlzLnNjcmlwdHM7XG4gICAgICAgIGNsb25lLmNyZWF0ZVVzZXJJZCA9IHRoaXMuY3JlYXRlVXNlcklkO1xuICAgICAgICBjbG9uZS5jcmVhdGVVc2VyTmFtZSA9IHRoaXMuY3JlYXRlVXNlck5hbWU7XG4gICAgICAgIGNsb25lLmNyZWF0ZURhdGUgPSB0aGlzLmNyZWF0ZURhdGU7XG4gICAgICAgIGNsb25lLm9yaWVudCA9IHRoaXMub3JpZW50O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEb2N1bWVudFByb3BzPiA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgICAgICAgIGhlYWRlckxpbmU6IHRoaXMuaGVhZGVyTGluZSxcbiAgICAgICAgICAgIGZvb3RlckxpbmU6IHRoaXMuZm9vdGVyTGluZSxcbiAgICAgICAgICAgIGNyZWF0ZURhdGU6IHRoaXMuY3JlYXRlRGF0ZSxcbiAgICAgICAgICAgIGNyZWF0ZVVzZXJOYW1lOiB0aGlzLmNyZWF0ZVVzZXJOYW1lLFxuICAgICAgICAgICAgY3JlYXRlVXNlcklkOiB0aGlzLmNyZWF0ZVVzZXJJZFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zY3JpcHRzKSB7XG4gICAgICAgICAgICBwcm9wc1snc2NyaXB0cyddID0gdGhpcy5zY3JpcHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yaWVudCAmJiB0aGlzLm9yaWVudCAhPT0gJ3BvcnRyYWl0Jykge1xuICAgICAgICAgICAgcHJvcHNbJ29yaWVudCddID0gdGhpcy5vcmllbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoZWNrQm94UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBzaXplITogbnVtYmVyO1xuICAgIGlzQ2hlY2tlZCE6IGJvb2xlYW47XG4gICAgLy/nlKjkuo7lpI3pgInmoYbliIbnu4RcbiAgICBncm91cE5hbWUhOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgY2xvbmUoZGVzdDogQ2hlY2tCb3hQcm9wcykge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IENoZWNrQm94UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY2xvbmUuaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQ7XG4gICAgICAgIGNsb25lLmdyb3VwTmFtZSA9IHRoaXMuZ3JvdXBOYW1lO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBpc0NoZWNrZWQ6IHRoaXMuaXNDaGVja2VkLFxuICAgICAgICAgICAgZ3JvdXBOYW1lOiB0aGlzLmdyb3VwTmFtZSxcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZGlvQm94UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcblxuICAgIHNpemUhOiBudW1iZXI7XG4gICAgaXNDaGVja2VkITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IFJhZGlvQm94UHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBSYWRpb0JveFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLnNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNsb25lLmlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBpc0NoZWNlZDogdGhpcy5pc0NoZWNrZWRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd1Byb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgbWluSGVpZ2h0ITogbnVtYmVyO1xuICAgIGhlYWRlclJvdyE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZVJvd1Byb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgVGFibGVSb3dQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5taW5IZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcbiAgICAgICAgY2xvbmUuaGVhZGVyUm93ID0gdGhpcy5oZWFkZXJSb3c7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRhYmxlUm93UHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLm1pbkhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHByb3BzW1wibWluSGVpZ2h0XCJdID0gdGhpcy5taW5IZWlnaHQ7XG4gICAgICAgICAgICBwcm9wc1tcImhlYWRlclJvd1wiXSA9IHRoaXMuaGVhZGVyUm93O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgcHJvcHNbJ2hlYWRlclJvdyddID0gdGhpcy5oZWFkZXJSb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgVGFibGVBbGlnbm1lbnQgPSAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICAvL2F1dG8g5oiW6ICF5YW35L2T55qE5YC8XG4gICAgd2lkdGghOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgY29scyE6IEFycmF5PG51bWJlciB8IHN0cmluZz47XG4gICAgYWxpZ25tZW50ITogVGFibGVBbGlnbm1lbnQ7XG4gICAgYm9yZGVyOiAnYWxsJyB8ICdub25lJyA9ICdhbGwnO1xuICAgIGFsbG93QnJlYWtSb3chOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogVGFibGVQcm9wcyk6IFRhYmxlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuaWQgPSB0aGlzLmlkO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmNvbHMgPSBbLi4udGhpcy5jb2xzXTtcbiAgICAgICAgY2xvbmUuYWxpZ25tZW50ID0gdGhpcy5hbGlnbm1lbnQ7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgY29sczogdGhpcy5jb2xzLFxuICAgICAgICAgICAgYWxpZ25tZW50OiB0aGlzLmFsaWdubWVudCxcbiAgICAgICAgICAgIGJvcmRlcjogdGhpcy5ib3JkZXJcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIENlbGxNZXJnZVR5cGUgPSAnY29sLW1lcmdlJyB8ICdyb3ctbWVyZ2UnO1xuZXhwb3J0IHR5cGUgVk1lcmdlVHlwZSA9ICdyZXN0YXJ0JyB8ICdjb250aW51ZSc7XG5leHBvcnQgdHlwZSBITWVyZ2VUeXBlID0gJ3Jlc3RhcnQnIHwgJ2NvbnRpbnVlJztcbmV4cG9ydCB0eXBlIFZlcnRpY2FsQWxpZ24gPSAndG9wJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbSc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuXG4gICAgdk1lcmdlITogVk1lcmdlVHlwZSB8IG51bGw7XG4gICAgaE1lcmdlITogSE1lcmdlVHlwZSB8IG51bGw7XG4gICAgdkFsaWduITogVmVydGljYWxBbGlnbiB8IG51bGw7XG4gICAgYmFja2dyb3VuZENvbG9yITogc3RyaW5nIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIOWvueinkue6v1xuICAgICAqL1xuICAgIGRpYWdvbmFsITogJ21haW4nIHwgJ3N1YicgfCBudWxsO1xuXG4gICAgY2xvbmUoZGVzdDogVGFibGVDZWxsUHJvcHMpOiBUYWJsZUNlbGxQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgVGFibGVDZWxsUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUudk1lcmdlID0gdGhpcy52TWVyZ2U7XG4gICAgICAgIGNsb25lLmhNZXJnZSA9IHRoaXMuaE1lcmdlO1xuICAgICAgICBjbG9uZS52QWxpZ24gPSB0aGlzLnZBbGlnbjtcbiAgICAgICAgY2xvbmUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIGNsb25lLmRpYWdvbmFsID0gdGhpcy5kaWFnb25hbDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxUYWJsZUNlbGxQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMudk1lcmdlKSB7XG4gICAgICAgICAgICBwcm9wc1sndk1lcmdlJ10gPSB0aGlzLnZNZXJnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgIHByb3BzWydoTWVyZ2UnXSA9IHRoaXMuaE1lcmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZBbGlnbiAmJiB0aGlzLnZBbGlnbiAhPT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHByb3BzWyd2QWxpZ24nXSA9IHRoaXMudkFsaWduO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgcHJvcHNbJ2JhY2tncm91bmRDb2xvciddID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGlhZ29uYWwpIHtcbiAgICAgICAgICAgIHByb3BzWydkaWFnb25hbCddID0gdGhpcy5kaWFnb25hbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGljdHVyZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgdGl0bGUhOiBzdHJpbmc7XG4gICAgd2lkdGghOiBudW1iZXI7XG4gICAgaGVpZ2h0ITogbnVtYmVyO1xuICAgIHNyYyE6IHN0cmluZztcbiAgICBib3JkZXIhOiAnYWxsJyB8ICdub25lJztcblxuICAgIGNsb25lKGRlc3Q6IFBpY3R1cmVQcm9wcyk6IFBpY3R1cmVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUGljdHVyZVByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLnNyYyA9IHRoaXMuc3JjO1xuICAgICAgICBjbG9uZS5ib3JkZXIgPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgY2xvbmUudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8UGljdHVyZVByb3BzPiA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHNyYzogdGhpcy5zcmMsXG4gICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy50aXRsZSkge1xuICAgICAgICAgICAgcHJvcHNbJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGNvbnRlbnQhOiBzdHJpbmc7XG4gICAgc2l6ZSE6IG51bWJlcjtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFEZWNvcmF0ZVByb3BzKTogRGF0YURlY29yYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFEZWNvcmF0ZVByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIGNsb25lLnNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgRGF0YUVsZVR5cGVzID0gJ3RleHQnIHwgJ2Ryb3BsaXN0JyB8ICdkYXRlJyB8ICdjaGVjaycgfCAnaW1nJztcblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUJhc2VQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIG5hbWUhOiBzdHJpbmc7XG4gICAgZmllbGROYW1lITogc3RyaW5nO1xuICAgIGNhcHRpb24hOiBzdHJpbmc7XG4gICAgcmVxdWlyZWQhOiBib29sZWFuO1xuICAgIHByaW50YWJsZSE6IGJvb2xlYW47XG4gICAgc2VjcmV0QnJvd3NlITogYm9vbGVhbjtcbiAgICBlZGl0YWJsZSE6IGJvb2xlYW47XG4gICAgZGVsZXRlYWJsZSE6IGJvb2xlYW47XG4gICAgbWluTGVuZ3RoITogbnVtYmVyO1xuICAgIHR5cGUhOiBEYXRhRWxlVHlwZXM7XG4gICAgdW5kZXJsaW5lITogYm9vbGVhbjtcblxuICAgIGNsb25lQmFzZVByb3BzKGRlc3RQcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoZGVzdFByb3BzKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wVmFsdWUodGhpcywgZGVzdFByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByb3BWYWx1ZShzb3VyY2U6IERhdGFFbGVCYXNlUHJvcHMsIHRhcmdldDogRGF0YUVsZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgICAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQ7XG4gICAgICAgIHRhcmdldC5uYW1lID0gc291cmNlLm5hbWU7XG4gICAgICAgIHRhcmdldC5jYXB0aW9uID0gc291cmNlLmNhcHRpb247XG4gICAgICAgIHRhcmdldC5maWVsZE5hbWUgPSBzb3VyY2UuZmllbGROYW1lO1xuICAgICAgICB0YXJnZXQucmVxdWlyZWQgPSBzb3VyY2UucmVxdWlyZWQ7XG4gICAgICAgIHRhcmdldC5lZGl0YWJsZSA9IHNvdXJjZS5lZGl0YWJsZTtcbiAgICAgICAgdGFyZ2V0LmRlbGV0ZWFibGUgPSBzb3VyY2UuZGVsZXRlYWJsZTtcbiAgICAgICAgdGFyZ2V0LnNlY3JldEJyb3dzZSA9IHNvdXJjZS5zZWNyZXRCcm93c2U7XG4gICAgICAgIHRhcmdldC5wcmludGFibGUgPSBzb3VyY2UucHJpbnRhYmxlO1xuICAgICAgICB0YXJnZXQubWluTGVuZ3RoID0gc291cmNlLm1pbkxlbmd0aDtcbiAgICAgICAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgICAgICAgdGFyZ2V0LnVuZGVybGluZSA9IHNvdXJjZS51bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVCYXNlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wVmFsdWUocHJvcHMsIHRoaXMpO1xuICAgIH1cblxuICAgIGdldEJhc2VQcm9wcyhwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlUHJvcHM+LCBvcHRpb25zOiBWaWV3T3B0aW9ucyk6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVByb3BzPiB7XG4gICAgICAgIHByb3BzW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBwcm9wc1tcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIHByb3BzW1wiZmllbGROYW1lXCJdID0gdGhpcy5maWVsZE5hbWU7XG4gICAgICAgIHByb3BzW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgaWYgKHRoaXMuY2FwdGlvbikge1xuICAgICAgICAgICAgcHJvcHNbXCJjYXB0aW9uXCJdID0gdGhpcy5jYXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBwcm9wc1tcInJlcXVpcmVkXCJdID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmludGFibGUpIHtcbiAgICAgICAgICAgIHByb3BzW1wicHJpbnRhYmxlXCJdID0gdGhpcy5wcmludGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VjcmV0QnJvd3NlKSB7XG4gICAgICAgICAgICBwcm9wc1tcInNlY3JldEJyb3dzZVwiXSA9IHRoaXMuc2VjcmV0QnJvd3NlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbJ2VkaXRhYmxlJ10gPSB0aGlzLmVkaXRhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWFibGUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZGVsZXRlYWJsZVwiXSA9IHRoaXMuZGVsZXRlYWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHByb3BzW1wibWluTGVuZ3RoXCJdID0gdGhpcy5taW5MZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcInVuZGVybGluZVwiXSA9IHRoaXMudW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVCYXNlVGV4dFByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAndGV4dCc7XG4gICAgfVxuXG4gICAgdmFsdWVUZXh0UHJvcHMhOiBUZXh0UHJvcHM7XG4gICAgbnVsbFRleHQhOiBzdHJpbmc7XG4gICAgbnVsbFRleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBkYXRhVHlwZTogJ3RleHQnIHwgJ2ludCcgfCAnZmxvYXQnIHwgJ2VtYWlsJyB8ICdkYXRlJyB8ICdwaG9uZScgfCAnemlwY29kZScgPSAndGV4dCc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlQmFzZVRleHRQcm9wcyB8IG51bGwgPSBudWxsKTogRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVCYXNlVGV4dFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUudmFsdWVUZXh0UHJvcHMgPSB0aGlzLnZhbHVlVGV4dFByb3BzLmNsb25lKG51bGwpO1xuICAgICAgICBjbG9uZS5udWxsVGV4dCA9IHRoaXMubnVsbFRleHQ7XG4gICAgICAgIGNsb25lLm51bGxUZXh0UHJvcHMgPSB0aGlzLm51bGxUZXh0UHJvcHMuY2xvbmUobnVsbCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VUZXh0UHJvcHM+ID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdmFsdWVUZXh0UHJvcHM6IHRoaXMudmFsdWVUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyksXG4gICAgICAgICAgICBudWxsVGV4dDogdGhpcy5udWxsVGV4dCxcbiAgICAgICAgICAgIG51bGxUZXh0UHJvcHM6IHRoaXMubnVsbFRleHRQcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSAmJiB0aGlzLmRhdGFUeXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgICAgIHByb3BzWydkYXRhVHlwZSddID0gdGhpcy5kYXRhVHlwZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBnZXRCYXNlUHJvcHMocHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVRleHRQcm9wcz4sIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlVGV4dFByb3BzPiB7XG4gICAgICAgIHN1cGVyLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHByb3BzWyd2YWx1ZVRleHRQcm9wcyddID0gdGhpcy52YWx1ZVRleHRQcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKTtcbiAgICAgICAgcHJvcHNbJ251bGxUZXh0UHJvcHMnXSA9IHRoaXMubnVsbFRleHRQcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKTtcbiAgICAgICAgcHJvcHNbJ251bGxUZXh0J10gPSB0aGlzLm51bGxUZXh0O1xuICAgICAgICBwcm9wc1snZGF0YVR5cGUnXSA9IHRoaXMuZGF0YVR5cGU7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUJhc2VUZXh0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUHJvcHMocHJvcHMpO1xuICAgICAgICB0aGlzLnZhbHVlVGV4dFByb3BzID0gcHJvcHMudmFsdWVUZXh0UHJvcHM7XG4gICAgICAgIHRoaXMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgdGhpcy5udWxsVGV4dFByb3BzID0gcHJvcHMubnVsbFRleHRQcm9wcztcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9IHByb3BzLmRhdGFUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhRWxlTGlzdE9wdGlvbiB7XG4gICAgY29kZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVMaXN0UHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAnZHJvcGxpc3QnO1xuICAgIH1cblxuICAgIG9wdGlvbnM6IEFycmF5PERhdGFFbGVMaXN0T3B0aW9uPiA9IFtdO1xuICAgIGRyb3BEb3duU3R5bGUhOiAnRHJvcERvd25MaXN0JyB8ICdEcm9wRG93bic7XG4gICAgLyoqXG4gICAgICog5piv5ZCm5YWB6K645aSa6YCJXG4gICAgICovXG4gICAgbXVsdGlTZWxlY3QhOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUxpc3RQcm9wcyB8IG51bGwpOiBEYXRhRWxlTGlzdFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlTGlzdFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lKGNsb25lKTtcbiAgICAgICAgY2xvbmUub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgICAgICBjbG9uZS5kcm9wRG93blN0eWxlID0gdGhpcy5kcm9wRG93blN0eWxlO1xuICAgICAgICBjbG9uZS5tdWx0aVNlbGVjdCA9IHRoaXMubXVsdGlTZWxlY3Q7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUxpc3RQcm9wcz4gPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbLi4udGhpcy5vcHRpb25zXSxcbiAgICAgICAgICAgIG11bHRpU2VsZWN0OiB0aGlzLm11bHRpU2VsZWN0LFxuICAgICAgICAgICAgZHJvcERvd25TdHlsZTogdGhpcy5kcm9wRG93blN0eWxlLFxuICAgICAgICB9O1xuICAgICAgICBzdXBlci5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVMaXN0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUHJvcHMocHJvcHMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0ID0gcHJvcHMubXVsdGlTZWxlY3Q7XG4gICAgICAgIHRoaXMuZHJvcERvd25TdHlsZSA9IHByb3BzLmRyb3BEb3duU3R5bGU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbUNvbnRlbnRQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIGNyZWF0ZUlkITogc3RyaW5nO1xuICAgIGNyZWF0ZU5hbWUhOiBzdHJpbmc7XG4gICAgY3JlYXRlRGF0ZSE6IERhdGU7XG5cbiAgICBjbG9uZShkZXN0OiBDb21tQ29udGVudFByb3BzKTogQ29tbUNvbnRlbnRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgQ29tbUNvbnRlbnRQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgbWFya1R5cGUhOiBcInN0YXJ0XCIgfCBcImVuZFwiO1xuXG4gICAgY2xvbmUoZGVzdDogQ29tbVByb3BzKTogQ29tbVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBDb21tUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuaWQgPSB0aGlzLmlkO1xuICAgICAgICBjbG9uZS5tYXJrVHlwZSA9IHRoaXMubWFya1R5cGU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgbWFya1R5cGU6IHRoaXMubWFya1R5cGVcbiAgICAgICAgfTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVDaGVja1Byb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAnY2hlY2snO1xuICAgIH1cblxuICAgIHNpemUhOiBudW1iZXI7XG4gICAgY2hlY2tlZCE6IGJvb2xlYW47XG4gICAgY2hlY2tlZFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBncm91cE5hbWUhOiBzdHJpbmc7XG4gICAgbXVsdGlTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVDaGVja1Byb3BzIHwgbnVsbCk6IERhdGFFbGVDaGVja1Byb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlQ2hlY2tQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gICAgICAgIGNsb25lLnNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNsb25lLmdyb3VwTmFtZSA9IHRoaXMuZ3JvdXBOYW1lO1xuICAgICAgICBjbG9uZS5tdWx0aVNlbGVjdCA9IHRoaXMubXVsdGlTZWxlY3Q7XG4gICAgICAgIGNsb25lLmNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVDaGVja1Byb3BzPiA9IHtcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuY2hlY2tlZCxcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGdyb3VwTmFtZTogdGhpcy5ncm91cE5hbWUsXG4gICAgICAgICAgICBtdWx0aVNlbGVjdDogdGhpcy5tdWx0aVNlbGVjdCxcbiAgICAgICAgICAgIGNoZWNrZWRWYWx1ZTogdGhpcy5jaGVja2VkVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUNoZWNrUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUHJvcHMocHJvcHMpO1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICAgICAgICB0aGlzLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB0aGlzLmdyb3VwTmFtZSA9IHByb3BzLmdyb3VwTmFtZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVJbWFnZVByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAnaW1nJztcbiAgICB9XG5cbiAgICB3aWR0aCE6IG51bWJlcjtcbiAgICBoZWlnaHQhOiBudW1iZXI7XG4gICAgc3JjITogc3RyaW5nO1xuICAgIGJvcmRlciE6ICdhbGwnIHwgJ25vbmUnO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUltYWdlUHJvcHMgfCBudWxsKTogRGF0YUVsZUltYWdlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVJbWFnZVByb3BzKCk7XG4gICAgICAgIHRoaXMuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5zcmMgPSB0aGlzLnNyYztcbiAgICAgICAgY2xvbmUuYm9yZGVyID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUltYWdlUHJvcHM+ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgc3JjOiB0aGlzLnNyYyxcbiAgICAgICAgICAgIGJvcmRlcjogdGhpcy5ib3JkZXJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUltYWdlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUHJvcHMocHJvcHMpO1xuICAgICAgICB0aGlzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICB0aGlzLnNyYyA9IHByb3BzLnNyYztcbiAgICAgICAgdGhpcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlRGF0ZVByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2RhdGUnO1xuICAgIH1cblxuICAgIG1pblZhbHVlPzogRGF0ZTtcbiAgICBtYXhWYWx1ZT86IERhdGU7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZURhdGVQcm9wcyB8IG51bGwpOiBEYXRhRWxlRGF0ZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlRGF0ZVByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lKGNsb25lKTtcbiAgICAgICAgY2xvbmUubWluVmFsdWUgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICBjbG9uZS5tYXhWYWx1ZSA9IHRoaXMubWF4VmFsdWU7XG4gICAgICAgIGNsb25lLmZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVEYXRlUHJvcHM+ID0ge1xuICAgICAgICAgICAgbWluVmFsdWU6IHRoaXMubWluVmFsdWUsXG4gICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5mb3JtYXRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVEYXRlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIudXBkYXRlUHJvcHMocHJvcHMpO1xuICAgICAgICB0aGlzLm1pblZhbHVlID0gcHJvcHMubWluVmFsdWU7XG4gICAgICAgIHRoaXMubWF4VmFsdWUgPSBwcm9wcy5tYXhWYWx1ZTtcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBwcm9wcy5mb3JtYXQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVDb25kaXRpb24ge1xuICAgIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgICBkYXRhVHlwZTogJ3N0cmluZycgfCAnZGF0ZScgfCAndGltZScgfCAnbnVtYmVyJyB8ICdmbG9hdCcgPSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVNSFByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgLy/liJ3mva7lubTpvoRcbiAgICBhZ2UhOiBzdHJpbmc7XG4gICAgLy/ooYznu4/mnJ/lpKnmlbBcbiAgICBkYXlzITogc3RyaW5nO1xuICAgIC8v5pyI57uP5ZGo5pyf5aSp5pWwXG4gICAgY3ljbGVzITogc3RyaW5nO1xuICAgIC8v5pyr5qyh5pyI57uP5pe26Ze0XG4gICAgbGFzdERhdGUhOiBzdHJpbmc7XG4gICAgLy/pl63nu4/lubTpvoRcbiAgICBjbG9zZUFnZSE6IHN0cmluZztcbiAgICBraW5kITogc3RyaW5nO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZU1IUHJvcHMgfCBudWxsKTogRGF0YUVsZU1IUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVNSFByb3BzKCk7XG4gICAgICAgIHRoaXMuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS5hZ2UgPSB0aGlzLmFnZTtcbiAgICAgICAgY2xvbmUuZGF5cyA9IHRoaXMuZGF5cztcbiAgICAgICAgY2xvbmUuY3ljbGVzID0gdGhpcy5jeWNsZXM7XG4gICAgICAgIGNsb25lLmxhc3REYXRlID0gdGhpcy5sYXN0RGF0ZTtcbiAgICAgICAgY2xvbmUuY2xvc2VBZ2UgPSB0aGlzLmNsb3NlQWdlO1xuICAgICAgICBjbG9uZS5raW5kID0gdGhpcy5raW5kO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlTUhQcm9wcz4gPSB7XG4gICAgICAgICAgICBhZ2U6IHRoaXMuYWdlLFxuICAgICAgICAgICAgZGF5czogdGhpcy5kYXlzLFxuICAgICAgICAgICAgY3ljbGVzOiB0aGlzLmN5Y2xlcyxcbiAgICAgICAgICAgIGxhc3REYXRlOiB0aGlzLmxhc3REYXRlLFxuICAgICAgICAgICAgY2xvc2VBZ2U6IHRoaXMuY2xvc2VBZ2UsXG4gICAgICAgICAgICBraW5kOiB0aGlzLmtpbmRcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRyYWNrUnVuUHJvcHMge1xuICAgIHVzZXJJZCE6IHN0cmluZztcbiAgICB1c2VyTmFtZSE6IHN0cmluZztcbiAgICBkYXRlITogc3RyaW5nO1xuICAgIGlkITogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IFRyYWNrUnVuVHlwZUVudW0pIHtcbiAgICB9XG5cbiAgICBjbG9uZShkZXN0OiBUcmFja1J1blByb3BzIHwgbnVsbCkge1xuICAgICAgICBkZXN0ID0gZGVzdCA/PyBuZXcgVHJhY2tSdW5Qcm9wcyh0aGlzLnR5cGUpO1xuICAgICAgICBkZXN0LnVzZXJJZCA9IHRoaXMudXNlcklkO1xuICAgICAgICBkZXN0LnVzZXJOYW1lID0gdGhpcy51c2VyTmFtZTtcbiAgICAgICAgZGVzdC5kYXRlID0gdGhpcy5kYXRlO1xuICAgICAgICBkZXN0LmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcygpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxUcmFja1J1blByb3BzPiA9IHtcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQsXG4gICAgICAgICAgICB1c2VyTmFtZTogdGhpcy51c2VyTmFtZSxcbiAgICAgICAgICAgIGRhdGU6IHRoaXMuZGF0ZSxcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuXG5jbGFzcyBGb250TWFwU3RydWN0IHtcbiAgICBmb250TWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgICByZWdpc3RlckZvbnRNYXAobmFtZTogc3RyaW5nLCBrZXlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb250TWFwLnNldChuYW1lLCBrZXlOYW1lKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmZvbnRNYXAuc2l6ZTtcbiAgICB9XG5cbiAgICBnZXRGb250TWFwKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udE1hcC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLmZvbnRNYXAuZ2V0KG5hbWUpIGFzIHN0cmluZztcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZm9udE1hcEZ1bmMgPSBuZXcgRm9udE1hcFN0cnVjdCgpO1xuXG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZVByb3BzIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICB0aXRsZSE6IHN0cmluZztcbiAgICBtc2chOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwUHJvcHMge1xuICAgIGlkITogc3RyaW5nO1xuICAgIG5hbWUhOiBzdHJpbmc7XG4gICAgaGlkZGVuITogYm9vbGVhbjtcbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlbWVudEdyb3VwUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/IG5ldyBEYXRhRWxlbWVudEdyb3VwUHJvcHMoKTtcbiAgICAgICAgZGVzdC5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIGRlc3QubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGVzdC5oaWRkZW4gPSB0aGlzLmhpZGRlbjtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcygpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlbWVudEdyb3VwUHJvcHM+ID0ge31cbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHByb3BzLmlkID0gdGhpcy5pZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICAgICAgICBwcm9wcy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgcHJvcHMuaGlkZGVuID0gdGhpcy5oaWRkZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMge1xuICAgIHR5cGU6ICdlbmExMycgfCAnY29kZTEyOCcgfCAnY29kZTM5JyB8ICdxcmNvZGUnID0gJ2NvZGUxMjgnO1xuICAgIHRleHQ6IHN0cmluZyA9ICcnO1xuICAgIHdpZHRoOiBudW1iZXIgPSAwO1xuICAgIGhlaWdodDogbnVtYmVyID0gMDtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVtZW50QmFyY29kZVByb3BzIHwgbnVsbCkge1xuICAgICAgICBkZXN0ID0gZGVzdCA/PyBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMoKTtcbiAgICAgICAgZGVzdC50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICBkZXN0LnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIGRlc3Qud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBkZXN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb2R5UGFydFByb3BzIHtcbiAgICBwYXJ0SWQhOiBzdHJpbmc7XG59IiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7QmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1lbnRSYW5nZVN0YXR1c30gZnJvbSBcIi4vY29tbWVudC1jb250ZW50LWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIENvbW1zQ29udGFpbmVyRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdjb21tLWxpc3QnKTtcbiAgICAgICAgdGhpcy5ub0ZpbGxFbXB0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC5tYXhXaWR0aCA9IG9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcmVuZGVyLnJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbXNDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgLy/mibnms6jlhoXlrrnmmK/lkKblt7Lnu4/ph43nu4Qs5Y+q6KaB6YeN5paw57uY5Yi255qE5pe25YCZ57uE5ZCI5LiA5qyh5Y2z5Y+vXG4gICAgaXNNZWFzdXJlQ29tbSE6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWRTZXQhOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPjtcbiAgICBjb21tZW50UmFuZ2VTdGF0dXM6IEFycmF5PENvbW1lbnRSYW5nZVN0YXR1cz4gPSBbXTtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ2JsYWNrJywgMC41KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBDb21tZW50c0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImNvbW0tbGlzdFwiO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzRWxlID0gbmV3IENvbW1zQ29udGFpbmVyRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gY29tbWVudHNFbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0lubGluZUdyb3VwSW5wdXRFbGVtZW50LCB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8YW55PiB7XG4gICAgLy9wcm9wczogRGF0YURlY29yYXRlUHJvcHM7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRhdGFFbGU6IElubGluZUdyb3VwSW5wdXRFbGVtZW50LCBwdWJsaWMgaXNQcmVmaXg6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZGVjJyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb25TdGF0ZX0gPSBldnQuY3R4O1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCAmJiB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnBhcmVudCBhcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcyA9PT0gZ3JvdXAuZW5kRGVjb3JhdGUgJiYgc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShncm91cC5zdGFydERlY29yYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICAvL3JlbmRlci5yZWN0LndpZHRoID0gdGhpcy5kUHJvcHMuc2l6ZSAvIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gNjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKCk6IERhdGFEZWNvcmF0ZUVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMuZGF0YUVsZSwgdGhpcy5pc1ByZWZpeCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICAvL2Nsb25lLnJlbmRlckN0eCA9IHRoaXMucmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEZWNvclJlY3QoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJlbmRlckRlY29yUmVjdChjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBpZiAoY3R4LmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlckJ5UHJlZGljYXRlKHRoaXMsIGl0ZW0gPT4gdmFsaWRhdGVJbmxpbmVJbnB1dFJlbmRlck9iaihpdGVtKSk7XG4gICAgICAgIGlmICghZGF0YUVsZVJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFFbGVSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXJQb3MoZGF0YUVsZVJlbmRlciwgdGhpcywgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG4gICAgICAgIGxldCB7eCwgeSwgaGVpZ2h0LCB3aWR0aH0gPSBkYXRhRWxlUmVuZGVyUG9zO1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSAyO1xuICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQudHJhbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LnBhcmVudC50eXBlID09PSAnZGF0YS1ncm91cCcpIHtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNoYWRvd0JsdXIgPSA1O1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguc2hhZG93Q29sb3IgPSAnYmxhY2snO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICB4ICs9IDI7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCArIGxpbmVXaWR0aCwgeX0sIHt4OiB4LCB5fSwge1xuICAgICAgICAgICAgICAgICAgICB4OiB4LFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSwge3g6IHggKyBsaW5lV2lkdGgsIHk6IHkgKyBoZWlnaHR9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHggPSB4ICsgd2lkdGggLSAyO1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IHggLSBsaW5lV2lkdGgsIHl9LCB7eDogeCwgeX0sIHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICAgICAgICAgIH0sIHt4OiB4IC0gbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0fV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBEb2NNb2RlLCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgSW5saW5lR3JvdXBFbGVtZW50LCBMZWFmRWxlbWVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgR290Q3Vyc29yRXZlbnQsIEtleWJvcmFkRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQmFzZVByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRGF0YURlY29yYXRlRWxlbWVudCB9IGZyb20gXCIuL2RhdGEtZGVjb3JhdGUtaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5cbi8qKlxuICog5omA5pyJ55qE5pWw5o2u5YWD57un5om/5LiK6L+w5Lik5Liq5oq96LGh57G7XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudExlYWY8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBMZWFmRWxlbWVudDxQPiB7XG4gICAgYWJzdHJhY3Qgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgZ2V0VmFsdWUoKTogYW55O1xufVxuXG4vKipcbiAqIOWPr+S+m+i+k+WFpeeahOWGheiBlOWdl1xuICog5L2/55So5Zy65pmv77ya5pWw5o2u5YWD77yM5pWw5o2u57uEXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIElubGluZUdyb3VwRWxlbWVudDxQPiB7XG4gICAgc3RhcnREZWNvcmF0ZSE6IERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG4gICAgZW5kRGVjb3JhdGUhOiBEYXRhRGVjb3JhdGVFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgICAgICAvL+ihjOWGheWdl+S4jeWFgeiuuOaNouihjFxuICAgICAgICB0aGlzLmFkZEV2ZW50PEtleWJvcmFkRWxlbWVudEV2ZW50PignRWxlbWVudEtleURvd24nLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlLCBzb3VyY2VFdmVudCwgc291cmNlIH0gPSBldnQ7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlRXZlbnQuc2hpZnRLZXkgJiYgc291cmNlRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnJlbW92ZU51bGxUZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc291cmNlRXZlbnQuc2hpZnRLZXkgJiYgc291cmNlRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gZXZ0LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsbERlY29yYXRlKCk7XG4gICAgfVxuXG4gICAgZmlsbERlY29yYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydERlY29yYXRlLCBlbmREZWNvcmF0ZSB9ID0gdGhpcy5jcmVhdGVEYXRhRGVjb3JhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoc3RhcnREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGVuZERlY29yYXRlLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREZWNvcmF0ZSA9IHN0YXJ0RGVjb3JhdGU7XG4gICAgICAgICAgICB0aGlzLmVuZERlY29yYXRlID0gZW5kRGVjb3JhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRGVjb3JhdGUoKTogeyBzdGFydERlY29yYXRlOiBEYXRhRGVjb3JhdGVFbGVtZW50LCBlbmREZWNvcmF0ZTogRGF0YURlY29yYXRlRWxlbWVudCB9IHtcbiAgICAgICAgY29uc3Qgc3RhcnREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIHRydWUpO1xuICAgICAgICBjb25zdCBlbmREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0RGVjb3JhdGUsXG4gICAgICAgICAgICBlbmREZWNvcmF0ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsb25lU2VsZjxUIGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ+KGRhdGE6IGJvb2xlYW4sIGNvbnN0cjogbmV3ICgpID0+IFQpOiBUIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgY29uc3RyKCk7XG4gICAgICAgICg8KHByb3A6IFApID0+IFA+dGhpcy5wcm9wc1snY2xvbmUnXSkoY2xvbmUucHJvcHMpO1xuICAgICAgICAvL2Nsb25lRnVuYy5hcHBseSh0aGlzLCBjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgY2hpbGQgIT09IHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGRUb0xhc3QoY2hpbGQuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGxEZWNvcmF0ZSgpO1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudDxhbnk+LCBpbmRleDogbnVtYmVyID0gLTEpOiB2b2lkIHtcbiAgICAgICAgaW5kZXggPSBpbmRleCA9PT0gLTEgPyB0aGlzLmxlbmd0aCAtIDEgOiBpbmRleDtcbiAgICAgICAgaW5kZXggPSBpbmRleCA+IHRoaXMubGVuZ3RoID8gdGhpcy5sZW5ndGggOiBpbmRleDtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQ/LmFkZENoaWxkKGNoaWxkLCB0aGlzLmdldEluZGV4KCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGggJiYgdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQ/LmFkZENoaWxkKGNoaWxkLCB0aGlzLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5hZGRDaGlsZChjaGlsZCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGNsZWFySW5uZXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlSXRlbXMgPSB0aGlzLmdldElubmVySXRlbXMoKTtcbiAgICAgICAgcmVtb3ZlSXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMucmVtb3ZlQ2hpbGQoaXRlbSkpO1xuICAgIH1cblxuICAgIGdldElubmVySXRlbXMoKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5zdGFydERlY29yYXRlICYmIGNoaWxkICE9PSB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi/veWKoOWIsOWGheWuueWdl+acq+WwvlxuICAgICAqIOiwg+eUqGFkZENoaWxkXG4gICAgICogQHBhcmFtIGNoaWxkXG4gICAgICovXG4gICAgYWRkQ2hpbGRUb0xhc3QoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYWRkQ2hpbGQoY2hpbGQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L+95Yqg5Yiw5YaF5a655Z2X5byA5aeL5L2N572uXG4gICAgICovXG4gICAgYWRkQ2hpbGRUb0ZpcnN0KGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmFkZENoaWxkKGNoaWxkLCAxKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudElubGluZUdyb3VwPFAgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzID0gRGF0YUVsZUJhc2VQcm9wcyAmIHsgdmFsdWVUZXh0UHJvcHM6IFRleHRQcm9wcyB9PiBleHRlbmRzIElubGluZUdyb3VwSW5wdXRFbGVtZW50PFA+IHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8R290Q3Vyc29yRXZlbnQ+KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uR290Q3Vyc29yRXZlbnQoZXZ0KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkdvdEN1cnNvckV2ZW50KGV2dDogR290Q3Vyc29yRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2UsIHNlbGVjdGlvblN0YXRlIH0gPSBldnQ7XG4gICAgICAgIGlmIChldnQuY3R4LnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIC8v5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6RXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgJiYgIXRoaXMucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgPT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBzdGFydE9mZnNldCA9PT0gMCB8fCBzdGFydENvbnRyb2wgPT09IHRoaXMuZW5kRGVjb3JhdGUgJiYgc3RhcnRPZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uU3RhdGUucmFuZ2U/LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlID09PSB0aGlzLmVuZERlY29yYXRlICYmIHNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0ID09PSAwICYmIHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0aGlzLnN0YXJ0RGVjb3JhdGUsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3Qgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgZ2V0VmFsdWUoKTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5pWw5o2u5YWD55qE5YC85piv5ZCm5ZCI5rOVXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZXF1aXJlZCAmJiB0aGlzLnByb3BzLmVkaXRhYmxlICYmICF0aGlzLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAn6K+l5a2X5q615LiN6IO95Li656m6JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCA9IERhdGFFbGVtZW50SW5saW5lR3JvdXA+IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24sIGRvY0N0eDogeyB2aWV3T3B0aW9ucyB9IH0gPSBlO1xuICAgICAgICAvL+aVsOaNruWFg+S4jeaJk+WNsFxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5wcm9wcy5wcmludGFibGUgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgLy/nu5jliLbmlbDmja7lhYPljLrln5/lupXoibJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUNvbG9yID0gdGhpcy5lbGVtZW50LnByb3BzLmVkaXRhYmxlID8gdmlld09wdGlvbnMuZGF0YUVsZU92ZXJsYXlzQ29sb3IgOiB2aWV3T3B0aW9ucy5kYXRhRWxlUmVhZE9ubHlPdmVybGF5Q29sb3I7XG4gICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55IC0gMiwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0ICsgNCwgb3ZlcmxheUNvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuc2VjcmV0QnJvd3NlICYmIHZpZXdPcHRpb25zLnNlY3JldEJyb3dzZSkge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5jdHguZmlsdGVyID0gXCJibHVyKDEwcHgpXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IHBvc2l0aW9uLnkgKyAyICsgdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcG9zaXRpb24ueCwgeSB9LCB7IHg6IHBvc2l0aW9uLnggKyB0aGlzLnJlY3Qud2lkdGgsIHkgfV0sIDEsICcjNTk1OTU5JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFFbGUgPSAoZWxlOiBFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGVsZSBpbnN0YW5jZW9mIERhdGFFbGVtZW50TGVhZiB8fCBlbGUgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YUVsZVJlbmRlck9iaiA9IChyZW5kZXJPYmo6IFJlbmRlck9iamVjdCkgPT4ge1xuICAgIGlmIChyZW5kZXJPYmouZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVEYXRhRWxlKHJlbmRlck9iai5lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSW5saW5lSW5wdXRSZW5kZXJPYmogPSAocmVuZGVyT2JqOiBSZW5kZXJPYmplY3QpID0+IHtcbiAgICBpZiAocmVuZGVyT2JqLmVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iai5lbGVtZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICog5piv5ZCm5Zyo5pWw5o2u5YWD5YaF6YOoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNJblNpZGVEYXRhRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRoRWxlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGNvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICBpZiAobWF0aEVsZSkge1xuICAgICAgICBpZiAoKGNvbnRyb2wgPT09IG1hdGhFbGUuc3RhcnREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDApIHx8IChjb250cm9sID09PSBtYXRoRWxlLmVuZERlY29yYXRlICYmIG9mZnNldCA9PT0gMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cbi8qKlxuICog5piv5ZCm5Zyo5YaF6IGU5Z2X5YaF6YOoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRoRWxlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGNvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpIGFzIElubGluZUdyb3VwSW5wdXRFbGVtZW50O1xuICAgIGlmIChtYXRoRWxlKSB7XG4gICAgICAgIGlmICgoY29udHJvbCA9PT0gbWF0aEVsZS5zdGFydERlY29yYXRlICYmIG9mZnNldCA9PT0gMCkgfHwgKGNvbnRyb2wgPT09IG1hdGhFbGUuZW5kRGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8VCA9IG51bGw+IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VD4ge1xuICAgIHJlYWRDb21wbGV0ZWQoZWxlOiBFbGVtZW50LCBjaGlsZHJlbjogQXJyYXk8RWxlbWVudD4pIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gZWxlLmFkZENoaWxkVG9MYXN0KGl0ZW0pKVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBNYXJnaW5Qcm9wcyxcbiAgICBQYWRkaW5nUHJvcHMsIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50UHJvcHMsIFRleHRQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnQtcHJvcHMnO1xuaW1wb3J0IHsgSVJlbmRlckNvbnRleHRDb250cmFjdCwgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgZG9jdW1lbnRQcmludCB9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1wcmludFwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJFbGVtZW50IH0gZnJvbSBcIi4uL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxEb2N1bWVudFByb3BzPiB7XG4gICAgLy9wcm9wczogRG9jdW1lbnRQcm9wcztcbiAgICB2aWV3T3B0aW9ucyE6IFZpZXdPcHRpb25zO1xuICAgIGJvZHlFbGVtZW50ITogRG9jdW1lbnRCb2R5RWxlbWVudDtcbiAgICBoZWFkZXJFbGVtZW50ITogRG9jdW1lbnRIZWFkZXJFbGVtZW50O1xuICAgIGZvb3RlckVsZW1lbnQhOiBEb2N1bWVudEZvb3RlckVsZW1lbnQ7XG4gICAgY29tbWVudHNDb250YWluZXJFbGVtZW50ITogQ29tbXNDb250YWluZXJFbGVtZW50O1xuICAgIGhlYWRlckVkaXRTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkb2MnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEb2N1bWVudFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zKTogRG9jdW1lbnRSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBkb2NQaXhlbHNXaWR0aCwgaGVpZ2h0OiBkb2NQaXhlbHNIZWlnaHQgfSA9IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzO1xuICAgICAgICBjb25zdCBkb2NSZW5kZXJPYmplY3QgPSBuZXcgRG9jdW1lbnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0LndpZHRoID0gZG9jUGl4ZWxzV2lkdGg7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0Lm1heFdpZHRoID0gZG9jUGl4ZWxzV2lkdGg7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0Lm1heEhlaWdodCA9IGRvY1BpeGVsc0hlaWdodDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0ID0gZG9jUGl4ZWxzSGVpZ2h0O1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QuZWxlbWVudCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gPSB0aGlzLnByb3BzLnBhZGRpbmc7XG4gICAgICAgIGxldCB7IGhlYWRlckxpbmU6IGhlYWRMaW5lLCBmb290ZXJMaW5lOiBmb290TGluZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyBtbVRvUGl4ZWxzUmF0aW8gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGhlYWRMaW5lID0gaGVhZExpbmUgKiBtbVRvUGl4ZWxzUmF0aW87XG4gICAgICAgIGZvb3RMaW5lID0gZm9vdExpbmUgKiBtbVRvUGl4ZWxzUmF0aW87XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLnRvcCA9IE1hdGguZmxvb3IodG9wICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcuYm90dG9tID0gTWF0aC5mbG9vcihib3R0b20gKiBtbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy5sZWZ0ID0gTWF0aC5mbG9vcihsZWZ0ICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcucmlnaHQgPSBNYXRoLmZsb29yKHJpZ2h0ICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmhlYWRlckxpbmUgPSBoZWFkTGluZTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmZvb3RlckxpbmUgPSBmb290TGluZTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0Lm1hcmdpbi50b3AgPSBvcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QubWFyZ2luLmJvdHRvbSA9IG9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgIHJldHVybiBkb2NSZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb2MnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDpobXovrnot51cbiAgICAgKiBAcGFyYW0gbWFyZ2luUHJvcHNcbiAgICAgKi9cbiAgICB1cGRhdGVNYXJnaW4obWFyZ2luUHJvcHM6IFBhcnRpYWw8TWFyZ2luUHJvcHM+LCB1bml0OiAnbW0nIHwgJ2NtJyA9ICdjbScpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IG1hcmdpblByb3BzIGFzIE1hcmdpblByb3BzO1xuICAgICAgICBjb25zdCBwYWRkaWcgPSB0aGlzLnByb3BzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gdW5pdCA9PT0gJ2NtJyA/IDEwIDogMTtcbiAgICAgICAgcGFkZGlnLnRvcCA9IHRvcCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcuYm90dG9tID0gYm90dG9tICogcmF0aW87XG4gICAgICAgIHBhZGRpZy5sZWZ0ID0gbGVmdCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcucmlnaHQgPSByaWdodCAqIHJhdGlvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouW8gOWQr+mhteeciemhteiEmue8lui+keWKn+iDvVxuICAgICAqL1xuICAgIHN3aXRjaFBhZ2VIZWFkZXJFZGl0b3Ioc3M6IFNlbGVjdGlvblN0YXRlLCBlbGU6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgIT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhlYWRlckVkaXRTdGF0ZSAmJiAoIWVsZSB8fCAoZWxlID09PSB0aGlzLmhlYWRlckVsZW1lbnQgfHwgZWxlID09PSB0aGlzLmZvb3RlckVsZW1lbnQpKSkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGVhZGVyRWRpdFN0YXRlICYmICghZWxlIHx8IGVsZSA9PT0gdGhpcy5ib2R5RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcihlbGU6IEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlKTtcbiAgICB9XG5cbiAgICBoZWFkZXJMaW5lITogbnVtYmVyO1xuICAgIGZvb3RlckxpbmUhOiBudW1iZXI7XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uLCBkb2NDdHg6IHsgdmlld09wdGlvbnMgfSB9ID0gZTtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogZG9jV2lkdGgsIGhlaWdodDogZG9jSGVpZ2h0IH0gPSB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3M7XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgZG9jV2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICd3aGl0ZScsIDUsICdibGFjaycpO1xuICAgICAgICBlLnJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5maWxsU3R5bGUgPSBlLmRvY0N0eC52aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJhd0NvcHlSaWdodCh2aWV3T3B0aW9ucywgcmVuZGVyLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuZHJhd0RvY1BhZ2VOdW0ocmVuZGVyLCB2aWV3T3B0aW9ucywgcG9zaXRpb24pO1xuICAgICAgICAvL+e7mOWItuaWh+aho+i+uei3nee6v1xuICAgICAgICB0aGlzLmRyYXdNYXJnaW5MaW5lKHBvc2l0aW9uLCByZW5kZXIsIGRvY1dpZHRoLCBkb2NIZWlnaHQpO1xuICAgICAgICB0aGlzLmRyYXdXYXRlcm1hcmsocmVuZGVyLCB2aWV3T3B0aW9ucywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItueJiOadg+S/oeaBr1xuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd0NvcHlSaWdodCh2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlcjogSVJlbmRlckNvbnRleHRDb250cmFjdCwgcG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHRleHRQID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UC5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0ZXh0UC5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICB0ZXh0UC5mb250U2l6ZSA9IDEyO1xuICAgICAgICBpZiAodmlld09wdGlvbnMuY29weVJpZ2h0SW5mbykge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8sIHRleHRQLCBwb3NpdGlvbi54ICsgNSwgcG9zaXRpb24ueSArIDUsIDEwMCwgMTIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi25paH5qGj6L656Led57q/XG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3TWFyZ2luTGluZShwb3NpdGlvbjogUG9zaXRpb24sIHJlbmRlcjogSVJlbmRlckNvbnRleHRDb250cmFjdCwgZG9jV2lkdGg6IG51bWJlciwgZG9jSGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHRoaXMucGFkZGluZztcbiAgICAgICAgbGV0IHBhZGRpbmdQb3MgPSB7IHg6IHBhZGRpbmcubGVmdCArIHBvc2l0aW9uLngsIHk6IHBhZGRpbmcudG9wICsgcG9zaXRpb24ueSB9O1xuICAgICAgICBjb25zdCBkcmF3TGluZVdpZHRoID0gMC41O1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSAyMDtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggLSBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgLSBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgICAgICBwYWRkaW5nUG9zID0geyB4OiBkb2NXaWR0aCAtIHBhZGRpbmcucmlnaHQgKyBwb3NpdGlvbi54LCB5OiBwYWRkaW5nLnRvcCArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggKyBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgLSBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgICAgICBwYWRkaW5nUG9zID0geyB4OiBwYWRkaW5nLmxlZnQgKyBwb3NpdGlvbi54LCB5OiBkb2NIZWlnaHQgLSB0aGlzLnBhZGRpbmcuYm90dG9tICsgcG9zaXRpb24ueSB9O1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBhZGRpbmdQb3MueCAtIGxpbmVXaWR0aCwgeTogcGFkZGluZ1Bvcy55IH0sIHBhZGRpbmdQb3MsIHtcbiAgICAgICAgICAgIHg6IHBhZGRpbmdQb3MueCxcbiAgICAgICAgICAgIHk6IHBhZGRpbmdQb3MueSArIGxpbmVXaWR0aFxuICAgICAgICB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IGRvY1dpZHRoIC0gcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogZG9jSGVpZ2h0IC0gdGhpcy5wYWRkaW5nLmJvdHRvbSArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggKyBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgKyBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuawtOWNsFxuICAgICAqIEBwYXJhbSBjdHhcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGRyYXdXYXRlcm1hcmsoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBpZiAodmlld09wdGlvbnMud2F0ZXJtYXJrKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRlcm1hcmsgPSB2aWV3T3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgudHJhbnNsYXRlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjb25zdCBkZWdyZWVzID0gTWF0aC5hdGFuKGhlaWdodCAvIHdpZHRoKSAqIDE4MCAvIE1hdGguUElcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgucm90YXRlKGRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICBjb25zdCBkID0gTWF0aC5zcXJ0KHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDYwO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHdhdGVybWFyaywgdGV4dFByb3BzKS53aWR0aFxuICAgICAgICAgICAgY29uc3QgeCA9IGQgLyAyIC0gdGV4dFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KClcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZmlsbFRleHQod2F0ZXJtYXJrLCB4LCAzMCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuaWh+aho+mhteeggVxuICAgICAqL1xuICAgIGRyYXdEb2NQYWdlTnVtKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gdmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmdldEluZGV4KCkgKyAxICsgdmlld09wdGlvbnMucGFnZU51bU9mZnNldDtcbiAgICAgICAgY29uc3Qgc3RyID0gQ29tbW9uVXRpbC5wYXJzZVRleHQodmlld09wdGlvbnMucGFnZU51bUZvcm1hdCwgeyBpbmRleDogcGFnZUluZGV4LCBjb3VudDogdGhpcy5wYXJlbnQubGVuZ3RoIH0pO1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5Lu/5a6LJztcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSAnaXRhbGljJztcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChzdHIsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IGFsaWduQ2VudGVyWCA9IHBvc2l0aW9uLnggKyBNYXRoLmNlaWwocGFnZVdpZHRoIC8gMikgLSBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIDIpXG4gICAgICAgIGNvbnN0IHBhaW50WSA9IHBvc2l0aW9uLnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQgLSA1O1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoc3RyLCB0ZXh0UHJvcHMsIGFsaWduQ2VudGVyWCwgcGFpbnRZLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci5oZWFkZXJMaW5lID0gdGhpcy5oZWFkZXJMaW5lO1xuICAgICAgICBjbG9uZVJlbmRlci5mb290ZXJMaW5lID0gdGhpcy5mb290ZXJMaW5lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERvY3VtZW50UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkb2MnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEb2N1bWVudFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBuZXcgRG9jdW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEb2N1bWVudFByb3BzO1xuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IGRvY3VtZW50RWxlbWVudC5wcm9wcztcbiAgICAgICAgZG9jUHJvcHMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgZG9jUHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBkb2NQcm9wcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcyhwcm9wcy5wYWRkaW5nLnRvcCwgcHJvcHMucGFkZGluZy5ib3R0b20sIHByb3BzLnBhZGRpbmcubGVmdCwgcHJvcHMucGFkZGluZy5yaWdodCk7XG4gICAgICAgIGRvY1Byb3BzLmhlYWRlckxpbmUgPSBwcm9wcy5oZWFkZXJMaW5lID8/IDEyO1xuICAgICAgICBkb2NQcm9wcy5mb290ZXJMaW5lID0gcHJvcHMuZm9vdGVyTGluZSA/PyAxMjtcbiAgICAgICAgZG9jUHJvcHMuc2NyaXB0cyA9IHByb3BzLnNjcmlwdHM7XG4gICAgICAgIGRvY1Byb3BzLmNyZWF0ZVVzZXJJZCA9IHByb3BzLmNyZWF0ZVVzZXJJZDtcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlVXNlck5hbWUgPSBwcm9wcy5jcmVhdGVVc2VyTmFtZTtcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlRGF0ZSA9IHByb3BzLmNyZWF0ZURhdGU7XG4gICAgICAgIGRvY1Byb3BzLm9yaWVudCA9IHByb3BzLm9yaWVudCA/PyAncG9ydHJhaXQnO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBSZWN0LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge01vdXNlRWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRFbGVtZW50fSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICAvL+W9k+WJjeWMuuWfn+WGheaYr+WQpueVmeeXlVxuICAgIHRyYWNrQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdib2R5Jyk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkZyZWU7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9keScsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0aGlzLCBEb2N1bWVudEVsZW1lbnQpO1xuICAgICAgICBpZiAoZG9jRWxlbWVudCkge1xuICAgICAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEb2N1bWVudEJvZHlFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2sgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgaWYgKGNsb25lRGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnYm9keSc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEJvZHlFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxufVxuXG4iLCJpbXBvcnQge0Jsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFJlY3QsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7TW91c2VFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudEVsZW1lbnR9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlckVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZm9vdGVyJyk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkRpc2FibGVkO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzd2l0Y2hFZGl0TW9kZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0VsZW1lbnQgPSB0aGlzLnBhcmVudCBhcyBEb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGRvY0VsZW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcihldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZm9vdGVyJyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIC8v5Yik5pat6aG155yJ5piv5ZCm5Li66L6T5YWl5YaF5a65XG4gICAgICAgICAgICBjb25zdCBpc0Zvb3RlckVtcHR5ID0gRWxlbWVudFV0aWwuY2hlY2tFbXB0eUNvbnRlbnQodGhpcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiByZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgIGlmIChpc0Zvb3RlckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Rm9vdGVyRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmb290ZXInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRGb290ZXJFbGVtZW50KCk7XG4gICAgICAgIC8vZWxlbWVudC5yZW5kZXJDdHggPSByZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFNlcmlhbGl6ZVByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBNb3VzZUVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdoZWFkZXInKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudERibENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hFZGl0TW9kZShldnQpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgLy90aGlzLmVkaXRNb2RlID0gRWRpdE1vZGUuRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50SGVhZGVyRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMucGFyZW50IGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdCA9IG5ldyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uIH0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICAvL+WIpOaWremhteecieaYr+WQpuS4uui+k+WFpeWGheWuuVxuICAgICAgICAgICAgY29uc3QgaXNIZWFkZXJFbXB0eSA9IEVsZW1lbnRVdGlsLmNoZWNrRW1wdHlDb250ZW50KHRoaXMpO1xuICAgICAgICAgICAgLy/lrZjlnKjovpPlhaXlhoXlrrnml7bvvIznu5jliLbpobXnnIkt6aG15L2T5YiG5Ymy57q/XG4gICAgICAgICAgICBpZiAoIWlzSGVhZGVyRW1wdHkgfHwgIXRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJMaW5lWSA9IHRoaXMucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZShwb3NpdGlvbi54LCBwb3NpdGlvbi55ICsgaGVhZGVyTGluZVksIHRoaXMucmVjdC53aWR0aCwgJ2JsYWNrJywgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrICYmIHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSGVhZGVyRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwLjcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIZWFkZXJGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2hlYWRlcic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKTtcbiAgICAgICAgLy9lbGVtZW50LnJlbmRlckN0eCA9IHJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIEVsZW1lbnQsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnMsXG4gICAgcmVhZEVsZW1lbnRQcm9wc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENvbnRleHRNZW51RWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLFxuICAgIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0ICogYXMgSGlzdG9yeSBmcm9tICcuLi8uLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGVudEVsZW1lbnQ8UGFyYWdyYXBoUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBQYXJhZ3JhcGhQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3AnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBQYXJhZ3JhcGhQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdCYWNrc3BhY2VLZXknLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LnNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAocEZpcnN0TGVhZkVsZW1lbnQgPT09IGV2dC5zb3VyY2UgJiYgZXZ0LnNvdXJjZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubnVtYmVyVHlwZSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7moLflvI9cbiAgICAgKiBAcGFyYW0gZm9ybWF0XG4gICAgICovXG4gICAgc2V0Rm9ybWF0KGZvcm1hdDogUGFydGlhbDxQYXJhZ3JhcGhQcm9wcz4pOiB2b2lkIHtcbiAgICAgICAgSGlzdG9yeS5mb3JtYXRFbGUodGhpcywgZm9ybWF0KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybWF0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3BzW2tleV0gPSBmb3JtYXRba2V5XTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUGFyYWdyYXBoUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IG5ldyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJldHVybiBwYXJhUmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoKTogUGFyYWdyYXBoRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoUmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5kcmF3UHJvamVjdE51bWJlcihlLnJlbmRlciwgZS5kb2NDdHgudmlld09wdGlvbnMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57uY5Yi26aG555uu56ym5Y+3XG4gICAgICovXG4gICAgZHJhd1Byb2plY3ROdW1iZXIoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJhRWxlbWVudC5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhRWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZih0aGlzKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmUgPSB0aGlzLmdldENoaWxkKDApIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFmaXJzdExpbmUpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5saW5lID0gZmlyc3RMaW5lLmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKCFmaXJzdElubGluZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmxpbmVQYWludFBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZmlyc3RJbmxpbmUsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IC12aWV3T3B0aW9ucy50cmFuc2xhdGVZXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclN5bWJvbFkgPSBmaXJzdElubGluZVBhaW50UG9zLnkgKyBNYXRoLmNlaWwoZmlyc3RJbmxpbmUucmVjdC5oZWlnaHQgLyAyKTtcbiAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHN0ciwgdGV4dFByb3BzLCBmaXJzdElubGluZVBhaW50UG9zLnggLSBwYXJhRWxlbWVudC5wYXJhUHJvcHMuaW5kZW50LCBudW1iZXJTeW1ib2xZLCAxNCwgMTQpO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxDaXJjdWxhcihmaXJzdElubGluZVBhaW50UG9zLnggLSBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQgKyAyLCBudW1iZXJTeW1ib2xZLCA0KVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIGNyZWF0ZUxpbmVSZWN0KCk6IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgbGluZVJlY3QgPSBuZXcgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgbGluZVJlY3QucmVjdC5tYXhXaWR0aCA9IHRoaXMucmVjdC5tYXhXaWR0aDtcbiAgICAgICAgcmV0dXJuIGxpbmVSZWN0O1xuICAgIH1cblxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UGFyYWdyYXBoUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdwJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8UGFyYWdyYXBoUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHBhcmFFbGVtZW50ID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQgPSBwcm9wcz8uaW5kZW50ID8/IDA7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmhhbmdpbmcgPSBwcm9wcz8uaGFuZ2luZyA/PyAwO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy50ZXh0QWxpZ24gPSBwcm9wcz8udGV4dEFsaWduID8/ICdsZWZ0JztcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMubnVtYmVyVHlwZSA9IHByb3BzPy5udW1iZXJUeXBlID8/IC0xO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5saW5lSGVpZ2h0ID0gcHJvcHM/LmxpbmVIZWlnaHQgPz8gMS4zO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5wYWdlQnJlYWsgPSBwcm9wcz8ucGFnZUJyZWFrID8/IGZhbHNlO1xuICAgICAgICByZXR1cm4gcGFyYUVsZW1lbnQ7XG4gICAgfVxufVxuXG4vKipcbiAqIOauteiQveihjOahhlxuICovXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0IHtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG5leHBvcnQgY2xhc3MgUFN5bWJvbEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgdGV4dFByb3BzOiBUZXh0UHJvcHM7XG4gICAgZGVmYXVsdEhlaWdodCA9IDE0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdwc3ltJyk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250U2l6ZSA9IHRoaXMuZGVmYXVsdEhlaWdodDtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuZm9udE5hbWUgPSAn5a6L5L2TJztcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuY29sb3IgPSAnIzhjOGM4Yyc7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBuZXcgUFN5bWJvbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgc3ltYm9sLnJlY3QuaGVpZ2h0ID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICBzeW1ib2wucmVjdC53aWR0aCA9IDc7XG4gICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQU3ltYm9sRWxlbWVudCgpO1xuICAgICAgICBjbG9uZS5kZWZhdWx0SGVpZ2h0ID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHB1cmUgPyAwIDogMTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQU3ltYm9sUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxQU3ltYm9sRWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24gfSA9IGU7XG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHQoJ+KkticsIHRoaXMuZWxlbWVudC50ZXh0UHJvcHMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDIwLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvL+e7mOWItuauteiQveespuWPt1xuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQU3ltYm9sUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG59XG5cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUGFkZGluZ1Byb3BzLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lubGluZU11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnR9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVDZWxsUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZUNlbGxQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RiYycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlQ2VsbFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gIXRoaXMuaXNOb3RCZU1lcmdlZENlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkuI3ooqvlkIjlubbljZXlhYPmoLznmoTljZXlhYPmoLxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGlzTm90QmVNZXJnZWRDZWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScgJiYgdGhpcy5wcm9wcy52TWVyZ2UgIT09ICdjb250aW51ZSc7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2NlbGxXaWR0aCwgY2VsbE9mZnNldH0gPSB0aGlzLmdldENlbGxXaWR0aCgpO1xuICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gbmV3IFRhYmxlQ2VsbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgY2VsbFJlbmRlci5yZWN0LndpZHRoID0gY2VsbFdpZHRoO1xuICAgICAgICBjZWxsUmVuZGVyLnJlY3QubWF4V2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgIGNlbGxSZW5kZXIucGFkZGluZyA9IG5ldyBQYWRkaW5nUHJvcHMoMCwgMCwgNSwgNSk7XG4gICAgICAgIGNlbGxSZW5kZXIucmVjdC54ID0gY2VsbE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGNlbGxSZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RiYycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKCk6IHsgY2VsbFdpZHRoOiBudW1iZXIsIGNlbGxPZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGUgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbE9mZnNldCA9IHRhYmxlLmdldENlbGxPZmZzZXRYKGNlbGxJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbFdpZHRoICs9IHRhYmxlLmdldENlbGxXaWR0aChpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtjZWxsV2lkdGgsIGNlbGxPZmZzZXR9O1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVDZWxsKCk6IFRhYmxlQ2VsbEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0YyA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiB0YztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbFJlbmRlck9iamVjdCBleHRlbmRzIElubGluZU11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmNsaXAocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHtoTWVyZ2UsIHZNZXJnZSwgYmFja2dyb3VuZENvbG9yLCBkaWFnb25hbH0gPSAoPFRhYmxlQ2VsbEVsZW1lbnQ+dGhpcy5lbGVtZW50KS5wcm9wcztcbiAgICAgICAgICAgIGlmIChoTWVyZ2UgPT09ICdjb250aW51ZScgfHwgdk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYmFja2dyb3VuZENvbG9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpYWdvbmFsICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsU3RhcnRYID0gZGlhZ29uYWwgPT09ICdtYWluJyA/IHBvc2l0aW9uLnggOiBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGxldCBkaWFnb25hbFN0YXJ0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsRW5kWCA9IGRpYWdvbmFsID09PSAnbWFpbicgPyBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoIDogcG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgICBsZXQgZGlhZ29uYWxFbmRZID0gcG9zaXRpb24ueSArIHRoaXMucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogZGlhZ29uYWxTdGFydFgsIHk6IGRpYWdvbmFsU3RhcnRZfSwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkaWFnb25hbEVuZFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRpYWdvbmFsRW5kWVxuICAgICAgICAgICAgICAgIH1dKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVDZWxsUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucGFkZGluZyA9IHRoaXMucGFkZGluZz8uY2xvbmUoKTtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luID0gdGhpcy5tYXJnaW4/LmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRhYmxlQ2VsbFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndGJjJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VGFibGVDZWxsUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRjID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICB0Yy5wcm9wcy52TWVyZ2UgPSBwcm9wcz8udk1lcmdlID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmhNZXJnZSA9IHByb3BzPy5oTWVyZ2UgPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMudkFsaWduID0gcHJvcHM/LnZBbGlnbiA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy5iYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcz8uYmFja2dyb3VuZENvbG9yID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gcHJvcHM/LmRpYWdvbmFsID8/IG51bGw7XG4gICAgICAgIC8vdGMucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gdGM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIE1vZGlmeUZsYWcsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVSb3dQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0VsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVSb3dQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRhYmxlUm93UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0cicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlUm93UHJvcHMoKTtcbiAgICAgICAgLy/lnKjlt67lvILmm7TmlrDkuK3vvIznlLHkuo7ooYzlhoXljZXlhYPmoLzlrZjlnKjlkIjlubbooYznmoTmg4XlhrXvvIzpnIDopoHlsIblvZPliY3ooYzlhoXlrZjlnKjlkIjlubbnmoTljZXlhYPmoLzvvIzlsIblhbbkv67mlLnmoIflv5fmlLnkuLrkv67mlLlcbiAgICAgICAgY29uc3QgY2hhbmdlU3ViID0gdGhpcy5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2spIHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuY2hlY2tSb3dNb2RpZnlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZHN1YnNjcmliZSh0aGlzLCBjaGFuZ2VTdWIpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlUm93UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndHInLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzPy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlUm93KGNvbHM6IG51bWJlcik6IFRhYmxlUm93RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRyID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgdHIuYWRkQ2hpbGQoVGFibGVDZWxsRWxlbWVudC5jcmVhdGVDZWxsKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd1JlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0PFRhYmxlUm93RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVSb3dSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRhYmxlUm93UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFRhYmxlUm93UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUYWJsZVJvd1Byb3BzO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgdHIucHJvcHMubWluSGVpZ2h0ID0gcHJvcHM/Lm1pbkhlaWdodCA/PyAtMTtcbiAgICAgICAgdHIucHJvcHMuaGVhZGVyUm93ID0gcHJvcHM/LmhlYWRlclJvdztcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtcm93LWltcGxcIjtcblxuXG5leHBvcnQgY2xhc3MgVGFibGVVdGlsIHtcblxuICAgIHN0YXRpYyBjYW5EZWxldGVUYWJsZShzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuICEhdGI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5b2T5YmN6YCJ5Yy65piv5ZCm5Y+v5Lul5omn6KGM5ZCI5bm25Y2V5YWD5qC85pON5L2cXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY2FuTWVyZ2VDZWxscyhzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkLCBzZWxlY3RlZFJhbmdlIH0gPSBzcztcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRiUmVnaW9uID0gdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UgJiYgc2VsZWN0ZWRSYW5nZS50YXJnZXQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzOiBBcnJheTxUYWJsZUNlbGxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoY2VsbCA9PiBzZWxlY3RlZENlbGxzLnB1c2goY2VsbC50YXJnZXQgYXMgVGFibGVDZWxsRWxlbWVudCkpKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRiUmVnaW9uLnN0YXJ0Um93OyBpIDw9IHRiUmVnaW9uLmVuZFJvdzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGJFbGVtZW50LmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gdGJSZWdpb24uc3RhcnRDb2w7IGogPD0gdGJSZWdpb24uZW5kQ29sOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJDZWxsLmlzTm90QmVNZXJnZWRDZWxsKCkgJiYgc2VsZWN0ZWRDZWxscy5pbmRleE9mKGN1cnJDZWxsKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tue7k+adn+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRITWVyZ2VFbmRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGxldCBpbmRleCA9IGNvbEluZGV4O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tuW8gOWni+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRITWVyZ2VTdGFydEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tue7k+adn+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBpXG4gICAgICovXG4gICAgc3RhdGljIGdldFZNZXJnZUVuZEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubblvIDlp4vntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXggaVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWTWVyZ2VTdGFydEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBjdXJyUm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIG1lcmdlQ2VsbHMoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCB9ID0gc3M7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuY29tYmluZUNlbGxDb250ZW50KHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVDZWxscyh0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrUm93QmVNZXJnZWQoc3MpO1xuICAgICAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOWQiOW5tuWNleWFg+agvOWQjumcgOimgeagoemqjFxuICAgICAqIDEu5aaC5p6c5p+Q5Liq6KGM55qE5omA5pyJ5Y2V5YWD5qC86YO95LiN5pivbm9ybWFs77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN6KGMXG4gICAgICogMi7lpoLmnpzmn5DkuKrliJfnmoTmiYDmnInnmoTljZXlhYPmoLzpg73kuI3mmK9ub3JtYWzvvIzliJnpnIDopoHliKDpmaTlvZPliY3liJdcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBjaGVja1Jvd0JlTWVyZ2VkKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghdGIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHNDb3VudCA9IHRiLmdldENvbHNDb3VudCgpO1xuICAgICAgICBjb25zdCBmdWxsTWVyZ2VSb3dzOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3ooYzmiYDmnInnmoTljZXlhYPmoLzpg73ooqvlkIjlubbvvIzpnIDopoHliKDpmaRcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gY29sc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZnVsbE1lcmdlUm93cy5wdXNoKHJvdylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdWxsTWVyZ2VSb3dzLmZvckVhY2gocm93ID0+IHRoaXMucmVtb3ZlUm93KHJvdykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOihjFxuICAgICAqIEBwYXJhbSByb3dcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVSb3cocm93OiBUYWJsZVJvd0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSk7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRJbmRleCA+IHJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KHJvd0luZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSkucHJvcHMudk1lcmdlID0gdk1lcmdlRW5kSW5kZXggLSByb3dJbmRleCA+IDIgPyAncmVzdGFydCcgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCB2TWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAodk1lcmdlRW5kSW5kZXggPiByb3dJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBuZXh0Um93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIC8vICAgICBuZXh0Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpLmNlbGxQcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VTdGFydEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VTdGFydEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlRW5kSW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3ljZXlhYPmoLzlpITkuo7lkIjlubbooYznmoTmnIDlkI7kuIDooYzvvIzlubbkuJTlkIjlubbnmoTooYzmlbDkuLoy6KGMXG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZUVuZEluZGV4ID09PSByb3dJbmRleCAmJiB2TWVyZ2VFbmRJbmRleCAtIHZNZXJnZVN0YXJ0SW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVDZWxsID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pih2TWVyZ2VTdGFydEluZGV4KS5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKVxuICAgICAgICAgICAgICAgICAgICBhYm92ZUNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucmVtb3ZlQ2hpbGQocm93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTliJdcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVDb2wodGI6IFRhYmxlRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleCk7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA+IGNvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGNvbEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLnByb3BzLmhNZXJnZSA9IGhNZXJnZUVuZEluZGV4IC0gY29sSW5kZXggPiAyID8gJ3Jlc3RhcnQnIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlU3RhcnRJbmRleCA9IHRoaXMuZ2V0SE1lcmdlU3RhcnRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85aSE5LqO5ZCI5bm26KGM55qE5pyA5ZCO5LiA6KGM77yM5bm25LiU5ZCI5bm255qE6KGM5pWw5Li6MuihjFxuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA9PT0gY29sSW5kZXggJiYgaE1lcmdlRW5kSW5kZXggLSBoTWVyZ2VTdGFydEluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlclZNZXJnZUNlbGwgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGhNZXJnZVN0YXJ0SW5kZXgpLmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpXG4gICAgICAgICAgICAgICAgICAgIG1hc3RlclZNZXJnZUNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cucmVtb3ZlQ2hpbGQoY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGIucmVtb3ZlQ29sKGNvbEluZGV4KTtcbiAgICAgICAgaWYgKHRiLnByb3BzLmNvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0Yi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWFieagh+aJgOWcqOeahOW9k+WJjeihjFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVDdXJyUm93KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXNzLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyUm93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gY3VyclJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbW92ZVJvdyhjdXJyUm93KTtcbiAgICAgICAgaWYgKHRiLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlhYnmoIfmiYDlnKjnmoTlvZPliY3liJdcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ3VyckNvbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRiID0gY3VyclJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGIsIHN0YXJ0Q2VsbC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCB9ID0gc3M7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Q29sSW5kZXggPD0gZW5kQ29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGJFbGVtZW50LCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZENvbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGJFbGVtZW50LnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbljZXlhYPmoLxcbiAgICAgKi9cbiAgICBzdGF0aWMgY29tYmluZUNlbGxzKHRiRWxlbWVudDogVGFibGVFbGVtZW50LCBzdGFydENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGVuZENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGJSZWdpb24gPSB0aGlzLmdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgY29uc3QgY2VsbENvbnRlbnRzOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gdGJSZWdpb24uc3RhcnRSb3c7IGkgPD0gdGJSZWdpb24uZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0YkVsZW1lbnQuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSB0YlJlZ2lvbi5zdGFydENvbDsgaiA8PSB0YlJlZ2lvbi5lbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKTtcbiAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IHRiUmVnaW9uLnN0YXJ0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLnZNZXJnZSA9IGkgPT09IHRiUmVnaW9uLnN0YXJ0Um93ID8gJ3Jlc3RhcnQnIDogJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwgIT09IHN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsQ29udGVudHMucHVzaCguLi5FbGVtZW50VXRpbC5nZXRDaGlsZHJlbkVsZW1lbnRzKGN1cnJDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLmNsZWFySXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlkIjlubbnmoTljZXlhYPmoLzpg73mmK/nqbrmrrXokL3vvIzliJnkuI3lkIjlubblhoXlrrlcbiAgICAgICAgaWYgKCFjZWxsQ29udGVudHMuZXZlcnkoKGl0ZW0pID0+IChpdGVtIGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCAmJiBpdGVtLmxlbmd0aCA9PT0gMSkpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxDb250ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q2VsbC5hZGRDaGlsZChjZWxsQ29udGVudHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgY2FuU3BsaXRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCBzdGFydENlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRDZWxsIGlzIG51bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9IHN0YXJ0Q2VsbD8ucHJvcHM7XG4gICAgICAgICAgICByZXR1cm4gaE1lcmdlID09PSAncmVzdGFydCcgfHwgdk1lcmdlID09PSAncmVzdGFydCcgfHwgIWhNZXJnZSB8fCAhdk1lcmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWwhuWQiOW5tueahOWNleWFg+agvOWQiOW5tui/mOWOn1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyByZXN0b3JlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkIH0gPSBzcztcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmIChzdGFydENlbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUNlbGxNZXJnZShzdGFydENlbGwpO1xuICAgICAgICAgICAgc3MucmVzZXRSYW5nZShzdGFydENlbGwsIDApO1xuICAgICAgICAgICAgc3RhcnRDZWxsLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZXN0b3JlQ2VsbE1lcmdlKGNlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB2TWVyZ2UsIGhNZXJnZSB9ID0gY2VsbC5wcm9wcztcbiAgICAgICAgY29uc3Qgcm93ID0gY2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09IFwiY29udGludWVcIikge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gXCJyZXN0YXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZUNlbGxNZXJnZShjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCArIDE7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy5oTWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09IFwicmVzdGFydFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2UoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2VsbC5wcm9wcy5oTWVyZ2UgPSBudWxsO1xuICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRWTWVyZ2VSb3dzKHRiOiBUYWJsZUVsZW1lbnQsIG1hc3RlclJvd0luZGV4OiBudW1iZXIsIG1hc3RlckNvbEluZGV4OiBudW1iZXIpOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFRhYmxlUm93RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1hc3RlclJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSA8VGFibGVSb3dFbGVtZW50PnRiLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChtYXN0ZXJDb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBpbnNlcnRDb2woc3M6IFNlbGVjdGlvblN0YXRlLCBpbnNlcnRDb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Um93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xzQ291bnQgPSB0Yi5nZXRDb2xzQ291bnQoKTtcbiAgICAgICAgaW5zZXJ0Q29sSW5kZXggPSBpbnNlcnRDb2xJbmRleCA8IDAgPyAwIDogaW5zZXJ0Q29sSW5kZXg7XG4gICAgICAgIGluc2VydENvbEluZGV4ID0gaW5zZXJ0Q29sSW5kZXggPiBjb2xzQ291bnQgPyBjb2xzQ291bnQgOiBpbnNlcnRDb2xJbmRleDtcbiAgICAgICAgLy/mj5LlhaXliJfpnIDopoHlsIbkuYvliY3liJfliIblibJcbiAgICAgICAgY29uc3QgaW5zZXJ0Q29sV2lkdGggPSBpbnNlcnRDb2xJbmRleCA9PT0gY29sc0NvdW50ID8gdGIuZ2V0Q2VsbFdpZHRoKGNvbHNDb3VudCAtIDEpIDogdGIuZ2V0Q2VsbFdpZHRoKGluc2VydENvbEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3Q29sV2lkdGggPSBNYXRoLmZsb29yKGluc2VydENvbFdpZHRoIC8gMik7XG4gICAgICAgIGlmIChuZXdDb2xXaWR0aCA8IDIwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aPkuWFpeWIl+eahOacgOWwj+WuveW6puS4jeiDveWwj+S6jjIwLOW9k+WJjeS4ujonICsgbmV3Q29sV2lkdGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKVxuICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0Q29sSW5kZXggPT09IDAgfHwgaW5zZXJ0Q29sSW5kZXggPT09IGNvbHNDb3VudCkge1xuICAgICAgICAgICAgICAgIHJvdy5hZGRDaGlsZChuZXdDZWxsLCBpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgaWYgKGZvY3VzQ2VsbCkge1xuICAgICAgICAgICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5ZCI5bm26KGM55qE5pyA5ZCO55qE6KGM57Si5byVXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZENvbEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY3VyckNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhNZXJnZUVuZENvbEluZGV4ID4gaW5zZXJ0Q29sSW5kZXggfHwgKGhNZXJnZUVuZENvbEluZGV4ID09PSBpbnNlcnRDb2xJbmRleCAmJiBjdXJyQ29sSW5kZXggPCBpbnNlcnRDb2xJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnICYmIGN1cnJDb2xJbmRleCA+IGluc2VydENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGIuc2V0Q2VsbFdpZHRoKGluc2VydENvbEluZGV4ID09PSBjb2xzQ291bnQgPyBpbnNlcnRDb2xJbmRleCAtIDEgOiBpbnNlcnRDb2xJbmRleCwgaW5zZXJ0Q29sV2lkdGggLSBuZXdDb2xXaWR0aCk7XG4gICAgICAgIHRiLmluc2VydENvbChpbnNlcnRDb2xJbmRleCwgbmV3Q29sV2lkdGgpO1xuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRSb3coc3M6IFNlbGVjdGlvblN0YXRlLCBpbnNlcnRSb3dJbmRleDogbnVtYmVyKTogVGFibGVSb3dFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gc3RhcnRSb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgaW5zZXJ0Um93SW5kZXggPSBpbnNlcnRSb3dJbmRleCA8IDAgPyAwIDogaW5zZXJ0Um93SW5kZXg7XG4gICAgICAgIGluc2VydFJvd0luZGV4ID0gaW5zZXJ0Um93SW5kZXggPiB0Yi5sZW5ndGggPyB0Yi5sZW5ndGggOiBpbnNlcnRSb3dJbmRleDtcbiAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgIC8v5paw6KGM5o+S5Zyo56ys5LiA6KGM5oiW6ICF5pyA5ZCO5LiA6KGMXG4gICAgICAgIGlmIChpbnNlcnRSb3dJbmRleCA9PT0gMCB8fCBpbnNlcnRSb3dJbmRleCA9PT0gdGIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGluc2VydFJvd0luZGV4KTtcbiAgICAgICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc3RSb3cgPSB0Yi5nZXRDaGlsZChpbnNlcnRSb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RDZWxsID0gZGVzdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ld1Jvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3ljZXlhYPmoLzmmK/mma7pgJrljZXlhYPmoLzmiJbogIXlkIjlubbliJfnmoTmnIDlkI7kuIDkuKrljZXlhYPmoLzvvIzliJnkuI3lgZrlpITnkIZcbiAgICAgICAgICAgIGlmIChkZXN0Q2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAvL+iOt+WPluWQiOW5tuWIl+eahOacgOWQjueahOihjOe0ouW8lVxuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZFJvd0luZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaW5zZXJ0Um93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRSb3dJbmRleCA+IGluc2VydFJvd0luZGV4IHx8ICh2TWVyZ2VFbmRSb3dJbmRleCA9PT0gaW5zZXJ0Um93SW5kZXggJiYgY3VyclJvd0luZGV4IDwgaW5zZXJ0Um93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgLy9uZXdDZWxsLmNlbGxQcm9wcy5oTWVyZ2UgPSBkZXN0Q2VsbC5jZWxsUHJvcHMuaE1lcmdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdENlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcgJiYgY3VyclJvd0luZGV4ID4gaW5zZXJ0Um93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvL+WcqOS4iuaWueaWsOWinuihjO+8jOebruagh+ihjOWNleWFg+agvOWxnuS6juWQiOW5tueahOi1t+eCuVxuICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAvL25ld0NlbGwuY2VsbFByb3BzLmhNZXJnZSA9IGRlc3RDZWxsLmNlbGxQcm9wcy5oTWVyZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGluc2VydFJvd0luZGV4KTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjkuIvmlrnmj5LlhaXooYxcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Um93QmVsb3coc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyUm93SW5kZXggPSBzdGFydFJvdy5nZXRJbmRleCgpO1xuICAgICAgICB0aGlzLmluc2VydFJvdyhzcywgY3VyclJvd0luZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5LiK5pa55o+S5YWl6KGMXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydFJvd0Fib3ZlKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3coc3MsIGN1cnJSb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5Y+z5L6n5o+S5YWl5YiXXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydENvbFRvUmlnaHQoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb2woc3MsIGN1cnJDb2xJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOW3puS+p+aPkuWFpeWIl1xuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRDb2xUb0xlZnQoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb2woc3MsIGN1cnJDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Lez6L2s5Yiw5LiL5LiA5Liq5Y2V5YWD5qC85LitXG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgc3RhdGljIG1vdmVOZXh0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHRoaXMuZ2V0TmV4dENlbGwoc3MpO1xuICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgIHNzLnJlc2V0UmFuZ2UobmV4dENlbGwsIDApO1xuICAgICAgICAgICAgbmV4dENlbGwucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+aWsOWinuihjCzlubblrprkvY1cbiAgICAgICAgY29uc3QgbmV3Um93ID0gdGhpcy5pbnNlcnRSb3coc3MsIHJvd0luZGV4ICsgMSk7XG4gICAgICAgIHNzLnJlc2V0UmFuZ2UobmV3Um93LCAwKTtcbiAgICAgICAgbmV3Um93LnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIvkuIDkuKrlj6/lrprkvY3nmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXh0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiBUYWJsZUNlbGxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Q2VsbC5wYXJlbnQucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4OyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBqID0gaSA9PT0gcm93SW5kZXggPyBjb2xJbmRleCArIDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGZvciAoOyBqIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyQ2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyQ2VsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoJ2dldE5leHRDZWxsIGlzIG51bGwnKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFieagh+aYr+WQpuWcqOacgOWQjuS4gOS4quWNleWFg+agvOS4rVxuICAgICAqL1xuICAgIHN0YXRpYyBpc0xhc3RWaXNpYWJsZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5nZXROZXh0Q2VsbChzcyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlvZPliY10YWJsZVxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVUYWJsZShzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W9k+WJjeS9jee9ruS4jeWtmOWcqOihqOagvCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRiLnBhcmVudC5yZWZyZXNoVmlldygpO1xuICAgICAgICB0Yi5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzljZXlhYPmoLzlr7nop5Lnur9cbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gZGlhZ29uYWxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRUYWJsZUNlbGxEaWFnb25hbChzczogU2VsZWN0aW9uU3RhdGUsIGRpYWdvbmFsOiAnbWFpbicgfCAnc3ViJyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRjKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W9k+WJjeS9jee9ruS4jeWtmOWcqOihqOagvCcpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0Yy5wcm9wcy5kaWFnb25hbCB8fCB0Yy5wcm9wcy5kaWFnb25hbCAhPT0gZGlhZ29uYWwpIHtcbiAgICAgICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gZGlhZ29uYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodGMucHJvcHMuZGlhZ29uYWwgPT09IGRpYWdvbmFsKSB7XG4gICAgICAgICAgICB0Yy5wcm9wcy5kaWFnb25hbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGMucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlsIblvZPliY3ooajmoLzmiKrmlq3miJDkuKTkuKrnm7jpgrvnmoTooajmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgY3V0VGFibGUodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAocm93SW5kZXggPT09IDAgfHwgcm93SW5kZXggPT09IHRiLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdUYiA9IHRiLmNsb25lKGZhbHNlKSBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRiLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChsZW4gPiByb3dJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0Yi5nZXRDaGlsZChsZW4pO1xuICAgICAgICAgICAgbmV3VGIuYWRkQ2hpbGQoY2hpbGQuY2xvbmUodHJ1ZSksIDApO1xuICAgICAgICAgICAgdGIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdUYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0Yi5wYXJlbnQuYWRkQ2hpbGQobmV3VGIsIHRiLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuuWMuuWfn+acgOWkp+eahOefqeW9ouWMuuWfn1xuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBzdGFydENlbGxcbiAgICAgKiBAcGFyYW0gZW5kQ2VsbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiOiBUYWJsZUVsZW1lbnQsIHN0YXJ0Q2VsbDogVGFibGVDZWxsRWxlbWVudCwgZW5kQ2VsbDogVGFibGVDZWxsRWxlbWVudCk6IElUYWJsZVNlbGVjdGVkUmVnaW9uIHtcbiAgICAgICAgbGV0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgc3RhcnRDb2wgPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IGVuZFJvdyA9IGVuZENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGxldCBlbmRDb2wgPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGlmIChzdGFydFJvdyA+IGVuZFJvdykge1xuICAgICAgICAgICAgW2VuZFJvdywgc3RhcnRSb3ddID0gW3N0YXJ0Um93LCBlbmRSb3ddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydENvbCA+IGVuZENvbCkge1xuICAgICAgICAgICAgW2VuZENvbCwgc3RhcnRDb2xdID0gW3N0YXJ0Q29sLCBlbmRDb2xdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydFJvdzsgaSA8PSBlbmRSb3c7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sOyBqIDw9IGVuZENvbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9IGNlbGwucHJvcHM7XG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENvbEluZGV4ID0gVGFibGVVdGlsLmdldEhNZXJnZVN0YXJ0SW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDb2xJbmRleCA9IFRhYmxlVXRpbC5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sID0gTWF0aC5taW4oc3RhcnRDb2wsIHN0YXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBlbmRDb2wgPSBNYXRoLm1heChlbmRDb2wsIGVuZENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFJvd0luZGV4ID0gVGFibGVVdGlsLmdldFZNZXJnZVN0YXJ0SW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRSb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Um93ID0gTWF0aC5taW4oc3RhcnRSb3csIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSBNYXRoLm1heChlbmRSb3csIGVuZFJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gVGFibGVVdGlsLmdldFZNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0luZGV4ID4gZW5kUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSByb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBUYWJsZVV0aWwuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sSW5kZXggPiBlbmRDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbCA9IGNvbEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVNlbGVjdGVkUmVnaW9uIHtcbiAgICBzdGFydFJvdzogbnVtYmVyO1xuICAgIGVuZFJvdzogbnVtYmVyO1xuICAgIHN0YXJ0Q29sOiBudW1iZXI7XG4gICAgZW5kQ29sOiBudW1iZXI7XG59IiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29udGVudE1lbnVJdGVtLCBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgS2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFJlbmRlck9iamVjdH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93RWxlbWVudCwgVGFibGVSb3dSZW5kZXJPYmplY3R9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge1RhYmxlU3BsaXRDZWxsfSBmcm9tIFwiLi90YWJsZS1zcGxpdC1jZWxsXCI7XG5pbXBvcnQge1RhYmxlVXRpbH0gZnJvbSBcIi4vdGFibGUtdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgVGFibGVFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFRhYmxlUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZVByb3BzO1xuICAgIHByaXZhdGUgX2FjdHVhbENvbHNQcm9wcyE6IEFycmF5PElDb2xzRGF0YT4gfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0YicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxLZXlib3JhZEVsZW1lbnRFdmVudD4oJ0VsZW1lbnRLZXlEb3duJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6KGo5qC8RWxlbWVudEtleURvd24nLCBldnQpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlRXZlbnQgPSBldnQuc291cmNlRXZlbnQ7XG4gICAgICAgICAgICAvL+aMieS4i3RhYumUrlxuICAgICAgICAgICAgaWYgKHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDkgJiYgIXNvdXJjZUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5tb3ZlTmV4dENlbGwoZXZ0LnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5a6e6ZmF5rWL6YeP55qE5a695bqm77yM5bCGYXV0b+OAgeeZvuWIhuavlOWIl+WuveW6pui/m+ihjOi9rOWMluS4uiBudW1iZXIg57G75Z6LXG4gICAgICovXG4gICAgZ2V0IGFjdHVhbENvbHNQcm9wcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3R1YWxDb2xzUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHNEYXRhOiBBcnJheTxJQ29sc0RhdGE+ID0gW107XG4gICAgICAgICAgICBjb25zdCBjb2xzID0gY2FsY1RhYmxlQ29scyh0aGlzKTtcbiAgICAgICAgICAgIGNvbHMucmVkdWNlKChwcmUsIGN1cikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHNEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY3VyLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHByZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmUgKyBjdXI7XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gY29sc0RhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdHVhbENvbHNQcm9wcztcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgoY2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAoY2VsbEluZGV4ID49IHRoaXMuYWN0dWFsQ29sc1Byb3BzLmxlbmd0aCB8fCBjZWxsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsQ29sc1Byb3BzW2NlbGxJbmRleF0ud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbE9mZnNldFgoY2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHNbY2VsbEluZGV4XS5vZmZzZXQ7XG4gICAgfVxuXG4gICAgc2V0Q2VsbFdpZHRoKGNlbGxJbmRleDogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5hY3R1YWxDb2xzUHJvcHNbaW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGlmIChjZWxsSW5kZXggPj0gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoIHx8IGNlbGxJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMucHJvcHMuY29sc107XG4gICAgICAgIGNvbHNbY2VsbEluZGV4XSA9IHdpZHRoO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YiX55qE5a6a5LmJXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIHdpZHRoXG4gICAgICovXG4gICAgaW5zZXJ0Q29sKGluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLnByb3BzLmNvbHNdO1xuICAgICAgICBjb2xzLnNwbGljZShpbmRleCwgMCwgd2lkdGgpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzO1xuICAgICAgICB0aGlzLl9hY3R1YWxDb2xzUHJvcHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWIl+eahOWumuS5iVxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIHJlbW92ZUNvbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy5wcm9wcy5jb2xzXTtcbiAgICAgICAgY29scy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzO1xuICAgIH1cblxuICAgIGdldENvbHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGFibGVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gbnVsbDtcbiAgICB9XG5cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgLy90aGlzLnByb3BzLndpZHRoID0gdGhpcy5tZWFzdXJlUmVuZGVyPy5yZWN0LndpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGInLFxuICAgICAgICAgICAgcHJvcHM6IHsuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpfVxuICAgICAgICB9XG4gICAgICAgIHByb3BzLnByb3BzLndpZHRoID0gdGhpcy5tZWFzdXJlUmVuZGVyPy5yZWN0LndpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IFRhYmxlRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCB0YlByb3BzID0gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgdGFibGUucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICB0YlByb3BzLmJvcmRlciA9ICdhbGwnO1xuICAgICAgICB0YlByb3BzLmNvbHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgdGFibGUuYWRkQ2hpbGQoVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyhjb2xzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGFibGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUYWJsZUVsZW1lbnQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnNldFJlbmRlcldpZHRoKG1heFdpZHRoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgLy/nu5jliLbooajmoLznur9cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5ib3JkZXIgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSB0aGlzLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93UG9zOiBQb3NpdGlvbiA9IHt4OiByb3dSZW5kZXIucmVjdC54ICsgcG9zaXRpb24ueCwgeTogcm93UmVuZGVyLnJlY3QueSArIHBvc2l0aW9uLnl9O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dSZW5kZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUG9zOiBQb3NpdGlvbiA9IHt4OiBjZWxsUmVuZGVyLnJlY3QueCArIHJvd1Bvcy54LCB5OiBjZWxsUmVuZGVyLnJlY3QueSArIHJvd1Bvcy55fTtcbiAgICAgICAgICAgICAgICAvL+e7mOWItuWNleWFg+agvOS4iui+ueahhlxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55LCBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7eDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnl9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnlcbiAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZHJhd0xpbmUoY3R4LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55IH0sIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v57uY5Yi25bem6L655qGGXG4gICAgICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54LCBjZWxsUG9zLnksIDEsIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7eDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnl9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/nu5jliLblj7PovrnmoYZcbiAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIGNlbGxQb3MueSwgMSwgY2VsbFJlbmRlci5yZWN0LmhlaWdodCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbe1xuICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNlbGxQb3MueVxuICAgICAgICAgICAgICAgIH0sIHt4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHR9XSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAvL+e7mOWItuS4i+i+ueahhlxuICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCwgY2VsbFJlbmRlci5yZWN0LndpZHRoLCAxKTtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7XG4gICAgICAgICAgICAgICAgICAgIHg6IGNlbGxQb3MueCxcbiAgICAgICAgICAgICAgICAgICAgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgIH0sIHt4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHR9XSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgLy9jZWxsUmVuZGVyLmJlZ2luUmVuZGVyKGN0eCwgeyB4OiBwb3NpdGlvbi54ICsgY2VsbFJlbmRlci5vZmZzZXRYLCB5OiBwb3NpdGlvbi55ICsgY2VsbFJlbmRlci5vZmZzZXRZIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGFibGVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VGFibGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RiJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgVGFibGVQcm9wcztcbiAgICAgICAgY29uc3QgdGIgPSBuZXcgVGFibGVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBwcm9wcy5jb2xzO1xuICAgICAgICBjb25zdCB0YlByb3BzID0gdGIucHJvcHM7XG4gICAgICAgIHRiUHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICB0YlByb3BzLmNvbHMgPSBbXTtcbiAgICAgICAgdGJQcm9wcy5pZCA9IHRiLnByb3BzLmlkO1xuICAgICAgICB0YlByb3BzLmFsaWdubWVudCA9IHByb3BzLmFsaWdubWVudDtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGJQcm9wcy5jb2xzLnB1c2goKDxhbnk+Y29sKS53aWR0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICByZXR1cm4gdGI7XG4gICAgfVxuXG59XG5cbi8qKlxuICog6KGMLeihqOagvOa4suafk+aooeW8j1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dExpbmVSZW5kZXJNb2RlKGVsZTogVGFibGVFbGVtZW50LCBvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRiID0gZWxlLm1lYXN1cmVSZW5kZXIgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+ihqOagvOWktOS4jeWBmuWkhOeQhlxuICAgICAgICBpZiAoKDxUYWJsZVJvd0VsZW1lbnQ+cm93LmVsZW1lbnQpLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgICAvL+iOt+WPluW9k+WJjeihjOeahOaWh+Wtl+ihjOaVsFxuICAgICAgICBjb25zdCBtYXhMaW5lc0NvdW50ID0gZ2V0Um93TWF4VGV4dExpbmVzKHJvdyk7XG4gICAgICAgIGlmIChtYXhMaW5lc0NvdW50ID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBtYXhMaW5lc0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSByb3cuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QoKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBuZXdSb3cucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChyb3cucmVjdCk7XG4gICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q2hpbGQobmV3Um93LCByb3cuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgICAgIC8v5aSN5Yi26KGM5paH5a2X5Yiw5paw6KGM5LitXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByb3cubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChrKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBjZWxsLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnMsIHJlbmRlckN0eCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChjZWxsLnJlY3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um93LmFkZENoaWxkKG5ld0NlbGwpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3BsaXRUZXh0bGluZVRvTmV3Um93KHJvdywgbWF4TGluZXNDb3VudCwgb3B0aW9ucywgcmVuZGVyQ3R4KTtcbiAgICB9XG4gICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiDojrflj5blvZPliY3ooYznmoTmloflrZfooYzmlbBcbiAqIEBwYXJhbSByb3dcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGdldFJvd01heFRleHRMaW5lcyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICBsZXQgY2VsbE1heExpbmVzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjZWxsLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gY2VsbC5nZXRDaGlsZChrKSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjZWxsTWF4TGluZXMgKz0gcGFyYVJlbmRlci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQgPSBjZWxsTWF4TGluZXMgPiBjb3VudCA/IGNlbGxNYXhMaW5lcyA6IGNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5cbi8qKlxuICog5bCG5aSa6KGM5paH5pys56e75Yqo5Yiw5paw6KGM5LitXG4gKiBAcGFyYW0gcm93XG4gKiBAcGFyYW0gbWF4TGluZXNDb3VudFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gc3BsaXRUZXh0bGluZVRvTmV3Um93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QsIG1heExpbmVzQ291bnQ6IG51bWJlciwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiB2b2lkIHtcbiAgICBpZiAobWF4TGluZXNDb3VudCA9PT0gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBwYXJhTGluZXMgPSBFbGVtZW50VXRpbC5nZXRDZWxsUGFyYUxpbmVzKGNlbGwpO1xuICAgICAgICBpZiAocGFyYUxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJhTGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHRlckxpbmVSZWN0ID0gcGFyYUxpbmVzW2pdO1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IG91dHRlckxpbmVSZWN0LnBhcmVudCBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFSZW5kZXIgPSBwYXJhUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnMsIHJlbmRlckN0eCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgbmV3UGFyYVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHBhcmFSZW5kZXIucmVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld091dHRlckxpbmVSZWN0ID0gb3V0dGVyTGluZVJlY3QuY2xvbmUoKTtcbiAgICAgICAgICAgIG5ld091dHRlckxpbmVSZWN0LnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3Qob3V0dGVyTGluZVJlY3QucmVjdCk7XG4gICAgICAgICAgICBuZXdQYXJhUmVuZGVyLmFkZENoaWxkKG5ld091dHRlckxpbmVSZWN0KTtcblxuICAgICAgICAgICAgcGFyYVJlbmRlci5yZW1vdmVDaGlsZChvdXR0ZXJMaW5lUmVjdCk7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocGFyYVJlbmRlcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJhUmVuZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNlbGwucmVtb3ZlQ2hpbGQocGFyYVJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGxpdFJvdyA9IHJvdy5wYXJlbnQuZ2V0Q2hpbGQocm93LmdldEluZGV4KCkgKyBqKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0Q2VsbCA9IHNwbGl0Um93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIHNwbGl0Q2VsbC5hZGRDaGlsZChuZXdQYXJhUmVuZGVyKTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShuZXdQYXJhUmVuZGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0YiA9IHJvdy5wYXJlbnQgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExpbmVzQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCArIGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJvdyk7XG4gICAgfVxufVxuXG5cbi8qKlxuICog6K6h566X6KGo5qC85YiXXG4gKi9cbmZ1bmN0aW9uIGNhbGNUYWJsZUNvbHMoZWxlbWVudDogVGFibGVFbGVtZW50KTogQXJyYXk8bnVtYmVyPiB7XG4gICAgY29uc3QgcGVyY2VudENvbHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgcGVyY2VudFN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZWxlbWVudC5wcm9wcy5jb2xzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyY2VudENvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgcGVyY2VudFN1bSArPSBOdW1iZXIucGFyc2VGbG9hdChjb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVyY2VudENvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgc3VtICs9IGNvbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtZWFzdXJlUmVuZGVyID0gZWxlbWVudC5tZWFzdXJlUmVuZGVyIGFzIFJlbmRlck9iamVjdDtcbiAgICBjb25zdCB0YldpZHRoID0gbWVhc3VyZVJlbmRlci5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICBjb25zdCByZW1haW5XaWR0aCA9IHRiV2lkdGggLSBzdW07XG4gICAgY29uc3QgcmF0aW8gPSByZW1haW5XaWR0aCAvIHBlcmNlbnRTdW07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJjZW50Q29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHBlcmNlbnRDb2xzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyY2VudENvbHNbaV0gPSBNYXRoLmZsb29yKE51bWJlci5wYXJzZUZsb2F0KHdpZHRoKSAqIHJhdGlvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGVyY2VudENvbHMgYXMgQXJyYXk8bnVtYmVyPjtcbn1cblxuaW50ZXJmYWNlIElDb2xzRGF0YSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbn1cblxuXG5pbnRlcmZhY2UgdGJQcm9wcyB7XG4gICAgY29sczogQXJyYXk8eyB3aWR0aDogbnVtYmVyIH0+XG59XG5cblxuIiwiaW1wb3J0IHsgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBMZWFmRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucywgTW9kaWZ5RmxhZyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgd2F0Y2hDaGFuZ2VkIH0gZnJvbSBcIi4uLy4uL25vdGlmeVwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUsIFRleHRVbml0cyB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0ICogYXMgSGlzdG9yeSBmcm9tICcuLi8uLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuXG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8VGV4dFByb3BzPiB7XG4gICAgLy9wcm9wczogVGV4dFByb3BzO1xuICAgIHRleHRNZWFzdXJlczogQXJyYXk8VGV4dFVuaXRzPiA9IFtdO1xuICAgIGlzTWVhc3VyZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0ZXh0Jyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHdhdGNoQ2hhbmdlZCh0aGlzLnByb3BzLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGVhckNhY2hlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCB0ZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3BsaWNlKDAsIHRoaXMudGV4dE1lYXN1cmVzLmxlbmd0aCwgdmFsKTtcbiAgICB9XG5cbiAgICBzcGxpY2UoaW5kZXg6IG51bWJlciwgZGVsZXRlQ291bnQ6IG51bWJlciwgYWRkVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBBcnJheTxUZXh0VW5pdHM+IHtcbiAgICAgICAgY29uc3QgZGVsZXRJdGVtczogQXJyYXk8VGV4dFVuaXRzPiA9IFtdO1xuICAgICAgICBpZiAoZGVsZXRlQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNoYXJzID0gdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKGluZGV4LCBkZWxldGVDb3VudCk7XG4gICAgICAgICAgICBIaXN0b3J5LnJlbW92ZVRleHQodGhpcywgaW5kZXgsIGRlbGV0ZUNvdW50LCByZW1vdmVDaGFycy5tYXAoaXRlbSA9PiBpdGVtLmNoYXIpLmpvaW4oJycpKTtcbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgICAgICAgIGRlbGV0SXRlbXMucHVzaCguLi5yZW1vdmVDaGFycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01lYXN1cmUgPSBmYWxzZTtcbiAgICAgICAgYWRkVGV4dCA9IGFkZFRleHQgPz8gJyc7XG4gICAgICAgIEhpc3RvcnkuaW5wdXRUZXh0KHRoaXMsIGluZGV4LCBhZGRUZXh0KTtcbiAgICAgICAgY29uc3QgYWRkVGV4dFVuaXRzID0gYWRkVGV4dC5zcGxpdCgnJykubWFwKGNoYXIgPT4gKHsgc291cmNlU2l6ZTogMCwgYWN0dWFsU2l6ZTogMCwgY2hhciB9KSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudGV4dE1lYXN1cmVzID0gYWRkVGV4dFVuaXRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKGluZGV4LCBkZWxldGVDb3VudCwgLi4uYWRkVGV4dFVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHJldHVybiBkZWxldEl0ZW1zO1xuICAgIH1cblxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0TWVhc3VyZXMubWFwKGl0ZW0gPT4gaXRlbS5jaGFyKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBpZiAoIXRoaXMuaXNNZWFzdXJlIHx8IHRoaXMubW9kaWZ5RmxhZyAhPT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICByZW5kZXJDdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHRVbml0cyh0aGlzLnRleHRNZWFzdXJlcywgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFRleHRHcm91cFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLmRpc2FibGVDbGljayA9IHRoaXMuZGlzYWJsZUNsaWNrO1xuICAgICAgICByZW5kZXIudGV4dE1lYXN1cmVzID0gWy4uLnRoaXMudGV4dE1lYXN1cmVzXTtcbiAgICAgICAgcmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICAvL+S/rumlsOWFg+e0oOS4jeW6j+WIl+WMllxuICAgICAgICBpZiAodGhpcy5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGNsb25lLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc3BsaWNlVGV4dChzdGFydE9mZnNldDogbnVtYmVyLCBlbmRPZmZzZXQ6IG51bWJlciwgeENvcHk6IGJvb2xlYW4pOiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGVuZE9mZnNldCA9IGVuZE9mZnNldCA9PT0gLTEgPyB0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggOiBlbmRPZmZzZXQ7XG4gICAgICAgIGlmIChlbmRPZmZzZXQgPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoeENvcHkpIHtcbiAgICAgICAgICAgIC8vY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICBjbG9uZS50ZXh0TWVhc3VyZXMgPSB0aGlzLnNwbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy50ZXh0TWVhc3VyZXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPj0gc3RhcnRPZmZzZXQgJiYgaW5kZXggPCBlbmRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IGNsb25lLnRleHRNZWFzdXJlcy5tYXAoaXRlbSA9PiAoeyBzb3VyY2VTaXplOiAwLCBhY3R1YWxTaXplOiAwLCBjaGFyOiBpdGVtLmNoYXIgfSkpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55qC35byPXG4gICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAqL1xuICAgIHNldEZvcm1hdChmb3JtYXQ6IFBhcnRpYWw8VGV4dFByb3BzPik6IHZvaWQge1xuICAgICAgICBIaXN0b3J5LmZvcm1hdEVsZSh0aGlzLCBmb3JtYXQpO1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcHNba2V5XSA9IGZvcm1hdFtrZXldO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsZWFyVGV4dENhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxUZXh0R3JvdXBFbGVtZW50PiB7XG4gICAgdGV4dE1lYXN1cmVzITogQXJyYXk8VGV4dFVuaXRzPjtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24gfSA9IGU7XG4gICAgICAgIC8vbnVsbC10ZXh05LiN5omT5Y2wXG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcgJiYgdGhpcy5lbGVtZW50LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLmJvcmRlcikge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHRVbml0cyh0aGlzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICAgICAgLy8gaWYgKHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpIHtcbiAgICAgICAgLy8gICAgIGN0eC5vdmVybGF5c0NvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIENvbW1vblV0aWwucmFuZG9tQ29sb3IoKSk7XG4gICAgICAgIC8vIH1cblxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLmRpc2FibGVDbGljayA9IHRoaXMuZGlzYWJsZUNsaWNrO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnRleHRNZWFzdXJlcyA9IFsuLi50aGlzLnRleHRNZWFzdXJlc107XG4gICAgICAgIC8vRklYOuaVsOaNruWFg+S4reWMheWQq051bGxUZXh05pe277yM5Zyo5aSN5Yi2UmVuZGVy5ZCO77yM55Sx5LqOTnVsbFRleHTlr7nlupTnmoRFbGVtZW505LiN5Zyo5YWD57Sg5qCR5Lit77yM5Zug5q2kTnVsbFRleHRSZW5kZXJcbiAgICAgICAgLy/lnKjmuLLmn5Pml7bkvJrkuI3mlq3nmoRQdXNo5YiwUGFpbnRSZW5kZXJz5Lit77yM5a+86Ie05YaF5a2Y5rOE6ZyyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmlzRGVjb3JhdGUgJiYgdGhpcy5lbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbiAgICBtZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSB0aGlzLnRleHRNZWFzdXJlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLmFjdHVhbFNpemUsIDApO1xuICAgICAgICB0aGlzLnJlY3QuaGVpZ2h0ID0gdGhpcy5lbGVtZW50LnByb3BzLmZvbnRTaXplO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHRHcm91cEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndGV4dCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFRleHRQcm9wcztcbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuY29udGVudCBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHRleHRHcm91cCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRleHRHcm91cC50ZXh0ID0gdGV4dDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyh0ZXh0R3JvdXAucHJvcHMsIHByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGV4dEdyb3VwO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZURhdGFFbGUgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgVHJhY2tSdW5FbGVtZW50LCBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U2VyaWFsaXplIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKGVsZW1lbnQ6IEVsZW1lbnQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZWxlbWVudC5zZXJpYWxpemUodmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgbGV0IHByZXZFbGU6IHsgZWxlOiBFbGVtZW50LCBwcm9wczogYW55IH0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVDaGlsZCA9IHRoaXMuc2VyaWFsaXplKGNoaWxkLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICd0ZXh0JyAmJiBwcmV2RWxlICYmIHByZXZFbGUuZWxlLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDxUZXh0R3JvdXBFbGVtZW50PmNoaWxkKS5wcm9wcy5lcXVhbHMoKDxUZXh0R3JvdXBFbGVtZW50PnByZXZFbGUuZWxlKS5wcm9wcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbGUucHJvcHMuY29udGVudCArPSAoPGFueT5zZXJpYWxpemVDaGlsZCkuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNoaWxkLnByb3BzID0gc2VyaWFsaXplQ2hpbGQucHJvcHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5wcm9wcyAmJiBjaGlsZC5wcm9wc1snX19hdHRhY2hlZFByb3BlcnR5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNoaWxkLnByb3BzWydfX2F0dGFjaGVkUHJvcGVydHknXSA9IENvbW1vblV0aWwuY2xvbmVWYWx1ZShjaGlsZC5wcm9wc1snX19hdHRhY2hlZFByb3BlcnR5J10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZXJpYWxpemVDaGlsZC5wcm9wcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW4gJiYgc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuLnB1c2goc2VyaWFsaXplQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2RWxlID0geyBlbGU6IGNoaWxkLCBwcm9wczogc2VyaWFsaXplQ2hpbGQgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuICAgIHN0YXRpYyBzZXJpYWxpemVTdHJpbmcoZWxlbWVudDogRWxlbWVudCwgb3B0aW9uczogeyBhbGw6IGJvb2xlYW4gfSA9IHsgYWxsOiBmYWxzZSB9KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmFsbCAmJiBlbGVtZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmICFlbGVtZW50LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh0aGlzLnNlcmlhbGl6ZVN0cmluZyhpdGVtLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuam9pbignJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3nmoTnu5PmnoRcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRTdHJ1Y3Qoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQgfHwgIXNzLnN0YXJ0Q29udHJvbCB8fCAhc3Muc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuY2xvbmVSYW5nZShyYW5nZSwgZmFsc2UsICdjb3B5Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit55qE5paH5pysXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICovXG4gICAgc3RhdGljIGdldFNlbGVjdGVkVGV4dChzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3RydWN0ID0gdGhpcy5nZXRTZWxlY3RlZFN0cnVjdChzcywgdmlld09wdGlvbnMpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RlZFN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplU3RyaW5nKHNlbGVjdGVkU3RydWN0LCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRKU09OKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHJ1Y3QgPSB0aGlzLmdldFNlbGVjdGVkU3RydWN0KHNzLCB2aWV3T3B0aW9ucykgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGVjdGVkU3RydWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJpYWxpemUoc2VsZWN0ZWRTdHJ1Y3QsIHZpZXdPcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgY3ljobmjIflrprlhYPntKDlhoXpg6jmiYDmnInmlbDmja7lhYPliJfooahcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGF0YUVsZW1lbnRzKGVsZW1lbnQ6IEJyYW5jaEVsZW1lbnQpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRGF0YUVsZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKC4uLnRoaXMuZ2V0RGF0YUVsZW1lbnRzKGl0ZW0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUVsZW1lbnRWYWx1ZVN0cnVjdCB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xufVxuIiwiaW1wb3J0IHtcbiAgICBJbmxpbmVHcm91cEVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnMsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSwgcmVhZEVsZW1lbnRQcm9wc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VHJhY2tSdW5Qcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge0dldFRyYWNrVGlwc0V2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7bmFub2lkfSBmcm9tIFwibmFub2lkXCI7XG5cbmV4cG9ydCBlbnVtIFRyYWNrUnVuVHlwZUVudW0ge1xuICAgIEluc2VydGVkID0gJ2lucy1ydW4nLFxuICAgIERlbGV0ZWQgPSAnZGVsLXJ1bicsXG59XG5cbnR5cGUgTnVsbGFibGVUeXBlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBjbGFzcyBUcmFja1J1bkVsZW1lbnQgZXh0ZW5kcyBJbmxpbmVHcm91cEVsZW1lbnQ8VHJhY2tSdW5Qcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSkge1xuICAgICAgICBzdXBlcih0cmFja1R5cGUpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHModHJhY2tUeXBlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxHZXRUcmFja1RpcHNFdmVudD4oJ0dldFRyYWNrVGlwcycsIChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC50cmFja1RpcHMgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2tSdW5UeXBlOiB0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnByb3BzLnVzZXJOYW1lLFxuICAgICAgICAgICAgICAgIGRhdGU6IHRoaXMucHJvcHMuZGF0ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzLCB7YWxsOiB0cnVlfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldnQudHJhY2tUaXBzLmNvbnRlbnQpO1xuXG4gICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYWNrUnVuRWxlbWVudCh0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IE51bGxhYmxlVHlwZTxSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNob3dUcmFja0NoYW5nZXMgJiYgdGhpcy50eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVHJhY2tSdW5SZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3BsaXQoaW5kZXg6IG51bWJlcik6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoaW5kZXggPT09IDAgfHwgaW5kZXggPT09IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFja1J1bkVsZW1lbnQodGhpcy50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0pO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhY2tSdW5SZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxUcmFja1J1bkVsZW1lbnQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGU6IFRyYWNrUnVuRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGUpO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbiwgZG9jQ3R4OiB7dmlld09wdGlvbnN9fSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWxsQ29sb3IgPSB2aWV3T3B0aW9ucy5zaG93VHJhY2tDaGFuZ2VzID8gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/IHZpZXdPcHRpb25zLnRyYWNrSW5zQ29sb3IgOiB2aWV3T3B0aW9ucy50cmFja0RlbENvbG9yIDogJyc7XG4gICAgICAgICAgICBpZiAoZmlsbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHt4LCB5fSA9IHBvc2l0aW9uO1xuICAgICAgICAvL+S4jeaYvuekuueXlei/uVxuICAgICAgICBpZiAoIXZpZXdPcHRpb25zLnNob3dUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuZWxlbWVudC50eXBlID09PSAnaW5zLXJ1bicgPyAnZ3JlZW4nIDogJ3JlZCc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3Qge3JlY3R9ID0gY2hpbGRSZW5kZXI7XG4gICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXIuZWxlbWVudCAmJiBjaGlsZFJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdkZWwtcnVuJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxpbmVZID0geSArIHJlY3QueSArIHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgbGluZVkgPSB0aGlzLmVsZW1lbnQudHlwZSA9PT0gJ2lucy1ydW4nID8gbGluZVkgOiBsaW5lWSAtIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUoeCArIHJlY3QueCwgbGluZVksIHJlY3Qud2lkdGgsIGNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRyYWNrUnVuUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW5FbGVtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRyYWNrUnVuUHJvcHM+IHtcblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUcmFja1J1blByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFRyYWNrUnVuRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBUcmFja1J1bkVsZW1lbnQoZGF0YS50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0pO1xuICAgICAgICBlbGUucHJvcHMudXNlcklkID0gZGF0YS5wcm9wcz8udXNlcklkID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMudXNlck5hbWUgPSBkYXRhLnByb3BzPy51c2VyTmFtZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmRhdGUgPSBkYXRhLnByb3BzPy5kYXRlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBkYXRhLnByb3BzPy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkIHx8IHR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZDtcbiAgICB9XG5cblxufVxuXG4iLCJpbXBvcnQge25hbm9pZH0gZnJvbSBcIm5hbm9pZFwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBSZWN0LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtIaXRSZWdpb259IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVCYXNlUHJvcHMsIFRleHRQcm9wc30gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtDb21tc0NvbnRhaW5lckVsZW1lbnR9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRJbmxpbmVHcm91cH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEJvZHlFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRGb290ZXJFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEhlYWRlckVsZW1lbnR9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtQU3ltYm9sRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvcC1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudCwgVGFibGVSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW19IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCxcbiAgICBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsXG4gICAgQm9yZGVyVHlwZSxcbiAgICBCcmFuY2hSZW5kZXJPYmplY3QsXG4gICAgQ3Vyc29yVHlwZSxcbiAgICBJbmxpbmVHcm91cFJlbmRlck9iamVjdCxcbiAgICBMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5cblxudHlwZSBQQUlSID0geyB4OiBudW1iZXIsIHk6IG51bWJlciB9O1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFV0aWwge1xuXG4gICAgc3RhdGljIHNldENhbnZhc1Byb3BzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIChjYW52YXMgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0T2Zmc2NyZWVuQ2FudmFzKGNhbnZhcywgY3R4IGFzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnMsIHNjYWxlKTtcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHZpZXdPcHRpb25zO1xuICAgICAgICBsZXQgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgZHByID0gTWF0aC5jZWlsKGRwcik7XG4gICAgICAgIGNvbnN0IHNjYWxlV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogZHByKSAvIGRwcjtcbiAgICAgICAgY29uc3Qgc2NhbGVIZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIGRwcikgLyBkcHI7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHNjYWxlV2lkdGggKyAncHgnO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKyAncHgnO1xuICAgICAgICBjYW52YXMud2lkdGggPSBzY2FsZVdpZHRoICogZHByO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKiBkcHI7XG4gICAgICAgIGN0eC5zY2FsZShkcHIsIGRwcik7XG4gICAgfVxuXG4gICAgLy8gc3RhdGljIHNldE9mZnNjcmVlbkNhbnZhcyhjYW52YXM6IE9mZnNjcmVlbkNhbnZhcywgY3R4OiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0sIHNjYWxlOiBudW1iZXIgPSAxKTogdm9pZCB7XG5cbiAgICAvLyAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3T3B0aW9ucztcbiAgICAvLyAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgLy8gICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAvLyAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAvLyAgICAgY29uc3Qgc2NhbGVXaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBkcHIpIC8gZHByO1xuICAgIC8vICAgICBjb25zdCBzY2FsZUhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogZHByKSAvIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLndpZHRoID0gc2NhbGVXaWR0aCAqIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLmhlaWdodCA9IHNjYWxlSGVpZ2h0ICogZHByO1xuICAgIC8vICAgICBjdHguc2NhbGUoZHByLCBkcHIpO1xuICAgIC8vIH1cblxuICAgIHN0YXRpYyBnZXREcHJOdW1iZXIodmFsOiBudW1iZXIsIHNjYWxlOiBudW1iZXIgPSAxKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogZHByKSAvIGRwclxuICAgIH1cblxuICAgIHN0YXRpYyByZWFkVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHByb3BzOiBUZXh0UHJvcHMgfCB1bmRlZmluZWQsIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogVGV4dFByb3BzIHtcbiAgICAgICAgaWYgKCFwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dFByb3BzKGRlc3QsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICAvL+S4jemcgOiuvue9rum7mOiupOminOiJsu+8jOagueaNruWxgue6p+e7p+aJv+i/m+ihjOWhq+WFhVxuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBwcm9wcy5jb2xvcjsvLyB8fCBvcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gcHJvcHMuZm9udE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IHByb3BzLmZvbnRTaXplIHx8IG9wdGlvbnMuZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICB0ZXh0UHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyO1xuICAgICAgICBpZiAocHJvcHMuZm9udFdlaWdodCkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnRXZWlnaHQgPSBwcm9wcy5mb250V2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSBwcm9wcy5mb250U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5saW5ldGhyb3VnaCA9IHByb3BzLmxpbmV0aHJvdWdoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5vdmVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLm92ZXJsaW5lID0gcHJvcHMub3ZlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5iYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGV0dGVyU3BhY2UpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5sZXR0ZXJTcGFjZSA9IHByb3BzLmxldHRlclNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy52ZXJ0QWxpZ24pIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy52ZXJ0QWxpZ24gPSBwcm9wcy52ZXJ0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZEVsZUJhc2VQcm9wcyhkZXN0OiBEYXRhRWxlQmFzZVByb3BzLCBwcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IERhdGFFbGVCYXNlUHJvcHMge1xuICAgICAgICBkZXN0LmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICBkZXN0Lm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBkZXN0LmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICBkZXN0LmVkaXRhYmxlID0gcHJvcHMuZWRpdGFibGUgPz8gdHJ1ZTtcbiAgICAgICAgZGVzdC5maWVsZE5hbWUgPSBwcm9wcy5maWVsZE5hbWU7XG4gICAgICAgIGRlc3QubWluTGVuZ3RoID0gcHJvcHMubWluTGVuZ3RoO1xuICAgICAgICBkZXN0LnByaW50YWJsZSA9IHByb3BzLnByaW50YWJsZSA/PyB0cnVlO1xuICAgICAgICBkZXN0LnJlcXVpcmVkID0gcHJvcHMucmVxdWlyZWQ7XG4gICAgICAgIGRlc3Quc2VjcmV0QnJvd3NlID0gcHJvcHMuc2VjcmV0QnJvd3NlO1xuICAgICAgICBkZXN0LmRlbGV0ZWFibGUgPSBwcm9wcy5kZWxldGVhYmxlO1xuICAgICAgICBkZXN0LnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgZGVzdC50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5YaF5a655Yy65Z+f5pyA5aSn6auY5bqmXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZW5kZXJIZWlnaHRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBpbm5lclJlY3RNYXhIZWlnaHQocmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlbmRlckhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qge3BhZGRpbmd9ID0gcmVuZGVyO1xuICAgICAgICByZXR1cm4gcmVuZGVySGVpZ2h0IC0gcGFkZGluZy50b3AgLSBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhoXmoYblhoXlrrnpq5jluqbvvIzmm7TmlrDlpJbmoYbmoYbkvZPpq5jluqZcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIGlubmVyUmVjdFxuICAgICAqL1xuICAgIHN0YXRpYyB1cGRhdGVSZW5kZXJIZWlnaHRCeUlubmVyUmVjdChyZW5kZXI6IFJlbmRlck9iamVjdCwgaW5uZXJSZWN0OiBSZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtwYWRkaW5nLCBtYXJnaW59ID0gcmVuZGVyO1xuICAgICAgICAvL+WkluWxguWuueWZqOmrmOW6puetieS6juWGheWuuemrmOW6pivlpJbovrnot50r5YaF6L656LedXG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IGlubmVyUmVjdC5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Z2X57qn5YWD57Sg6ZmQ5Yi25bC65a+4XG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSBwYXJlbnRMaW1pdFJlY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QmxvY2tFbGVtZW50TGltaXRTaXplKHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIHBhcmVudExpbWl0UmVjdDogUmVjdCk6IHZvaWQge1xuICAgICAgICByZW5kZXIucmVjdC54ID0gcGFyZW50TGltaXRSZWN0Lng7XG4gICAgICAgIHJlbmRlci5yZWN0LnkgPSBwYXJlbnRMaW1pdFJlY3QueSArIHBhcmVudExpbWl0UmVjdC5oZWlnaHQ7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcGFyZW50TGltaXRSZWN0Lm1heFdpZHRoID8/IDA7XG4gICAgICAgIHJlbmRlci5yZWN0Lm1heFdpZHRoID0gcGFyZW50TGltaXRSZWN0Lm1heFdpZHRoO1xuICAgICAgICBpZiAocGFyZW50TGltaXRSZWN0Lm1heEhlaWdodCkge1xuICAgICAgICAgICAgcmVuZGVyLnJlY3QubWF4SGVpZ2h0ID0gcGFyZW50TGltaXRSZWN0Lm1heEhlaWdodCAtIHBhcmVudExpbWl0UmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlhYvpmobmoYbkvZNcbiAgICAgKiBAcGFyYW0gcmVjdFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGNsb25lUmVjdChyZWN0OiBSZWN0KTogUmVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgICAgIGNsb25lUmVjdC54ID0gcmVjdC54O1xuICAgICAgICBjbG9uZVJlY3QueSA9IHJlY3QueTtcbiAgICAgICAgY2xvbmVSZWN0LndpZHRoID0gcmVjdC53aWR0aDtcbiAgICAgICAgY2xvbmVSZWN0LmhlaWdodCA9IHJlY3QuaGVpZ2h0O1xuICAgICAgICBjbG9uZVJlY3QubWF4SGVpZ2h0ID0gcmVjdC5tYXhIZWlnaHQ7XG4gICAgICAgIGNsb25lUmVjdC5tYXhXaWR0aCA9IHJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiBjbG9uZVJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YeN5paw6ZmQ5a6a5a2Q5YWD57Sg5Lul5Y+K5b2T5YmN6auY5bqm5YC8LOW5tui/lOWbnuWGhei+ueahhuWGheWuuemrmOW6plxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcmVzZXRYIOa1i+mHj+auteiQveWkluahhuaXtu+8jOWGheahhuS4jemcgOimgemHjee9rnjvvIzlm6DkuLrlhoXmoYblt7Lnu4/lrZjlnKjlr7npvZBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmUocmVuZGVyOiBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB8IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgcmVzZXRYID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtZWFzdXJlVGFibGVSb3cocmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVBbGlnbihyZW5kZXIpO1xuICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZU1lcmdlKHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gcmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChyZXNldFgpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnJlY3QueCA9IGlubmVyUmVjdC54O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZS5yZWN0LnkgPSBpbm5lclJlY3QuaGVpZ2h0ICsgaW5uZXJSZWN0LnkgKyBsaW5lLm1hcmdpbi50b3A7XG4gICAgICAgICAgICBsaW5lLnJlY3QubWF4V2lkdGggPSBpbm5lclJlY3QubWF4V2lkdGg7XG4gICAgICAgICAgICBpbm5lclJlY3QuaGVpZ2h0ICs9IGxpbmUucmVjdC5oZWlnaHQgKyBsaW5lLm1hcmdpbi50b3AgKyBsaW5lLm1hcmdpbi5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3QpO1xuICAgICAgICByZXR1cm4gaW5uZXJSZWN0LmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtZWFzdXJlVGFibGVSb3cocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgZm9yZWNlQ29sSW5kZXggPSAtMSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93TWluSGVpZ2h0ID0gcm93RWxlLnByb3BzLm1pbkhlaWdodCA+IDE5ID8gcm93RWxlLnByb3BzLm1pbkhlaWdodCA6IDE5O1xuICAgICAgICBsZXQgbWF4Q2VsbGhlaWdodCA9IHJvd01pbkhlaWdodDtcbiAgICAgICAgLy/pmZDliLbooYzmnIDlsI/pq5jluqZcbiAgICAgICAgbWF4Q2VsbGhlaWdodCA9IG1heENlbGxoZWlnaHQgPCAxOSA/IDE5IDogbWF4Q2VsbGhlaWdodDtcbiAgICAgICAgLy/ojrflj5booYzlhoXpnZ7nurXlkJHlkIjlubbljZXlhYPmoLznmoTmnIDpq5jljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9ICg8VGFibGVDZWxsRWxlbWVudD5jZWxsUmVuZGVyLmVsZW1lbnQpLnByb3BzO1xuICAgICAgICAgICAgaWYgKGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPiBtYXhDZWxsaGVpZ2h0ICYmICh2TWVyZ2UgIT09ICdyZXN0YXJ0JyB8fCBpID09PSBmb3JlY2VDb2xJbmRleCkpIHtcbiAgICAgICAgICAgICAgICBtYXhDZWxsaGVpZ2h0ID0gY2VsbFJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+W+queOr+iuvue9ruWNleWFg+agvOmrmOW6puS4uuihjOWGheacgOWkp+WNleWFg+agvOmrmOW6plxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gY2VsbEVsZW1lbnQucHJvcHM7XG4gICAgICAgICAgICBpZiAoKHZNZXJnZSAhPT0gJ3Jlc3RhcnQnIHx8IGkgPT09IGZvcmVjZUNvbEluZGV4KSB8fCBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IDwgbWF4Q2VsbGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPSBtYXhDZWxsaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lpITnkIbljZXlhYPmoLzlhoXlrrnnurXlkJHlsYXkuK1cbiAgICAgICAgICAgIHRoaXMubWVhc3VyZUNlbGxWQWxpZ24oY2VsbFJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy/orr7nva7ooYzpq5hcbiAgICAgICAgcm93UmVuZGVyLnVwZGF0ZVJlbmRlckhlaWdodChtYXhDZWxsaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIG1heENlbGxoZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGo5qC86KGM57uY5Yi25YWD57Sg55qE5YaF5a656auY5bqm77yM55So5LqO57yp5pS+6KGM6auY5bqm5pe277yM6I635Y+W5pyA5bCP5YaF5a656auY5bqm77yM57yp5pS+55qE6auY5bqm5LiN6IO95bCP5LqO5YaF5a655pyA5bCP6auY5bqmXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlUm93UmVuZGVyQ29udGVudEhlaWdodChyb3dSZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBsZXQgbWF4Q2VsbGhlaWdodCA9IDE5O1xuICAgICAgICAvL+mZkOWItuihjOacgOWwj+mrmOW6plxuICAgICAgICAvL+iOt+WPluihjOWGhemdnue6teWQkeWQiOW5tuWNleWFg+agvOeahOacgOmrmOWNleWFg+agvOmrmOW6plxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsQ29udGVudEhlaWdodCA9IHRoaXMuZ2V0VGFibGVDZWxsUmVuZGVyQ29udGVudEhlaWdodChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gKDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoY2VsbENvbnRlbnRIZWlnaHQgPiBtYXhDZWxsaGVpZ2h0ICYmIHZNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgbWF4Q2VsbGhlaWdodCA9IGNlbGxDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhDZWxsaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWNleWFg+agvOWGheWuuemrmOW6plxuICAgICAqIOWNleWFg+agvOaaguS4jeWkhOeQhuS4iuS4i21hcmdpbuOAgXBhZGRpbmdcbiAgICAgKiBAcGFyYW0gY2VsbFJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlQ2VsbFJlbmRlckNvbnRlbnRIZWlnaHQoY2VsbFJlbmRlcjogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQgKz0gY2VsbFJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbljZXlhYPmoLzlhoXlrrnnurXlkJHlr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgbWVhc3VyZUNlbGxWQWxpZ24ocmVuZGVyOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGNFbGVtZW50ID0gcmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3Qge3ZBbGlnbn0gPSB0Y0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmICghdkFsaWduIHx8IHZBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3VtSGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bUhlaWdodCArPSByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNwYWNlSGVpZ2h0ID0gMDtcbiAgICAgICAgc3BhY2VIZWlnaHQgPSB2QWxpZ24gPT09ICdtaWRkbGUnID8gTWF0aC5mbG9vcigocmVuZGVyLnJlY3QuaGVpZ2h0IC0gc3VtSGVpZ2h0KSAvIDIpIDogdkFsaWduID09PSAnYm90dG9tJyA/IHJlbmRlci5yZWN0LmhlaWdodCAtIHN1bUhlaWdodCA6IDBcbiAgICAgICAgaWYgKHNwYWNlSGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeSA9IHNwYWNlSGVpZ2h0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVuZGVyLmdldENoaWxkKGkpLnJlY3QueSA9IHk7XG4gICAgICAgICAgICB5ICs9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOaoquWQkeaOkuWIl+aWueW8j1xuICAgICAqIEBwYXJhbSB0YlJlbmRlclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2V0VGFibGVBbGlnbih0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgLy8gY29uc3Qge2FsaWdubWVudH0gPSB0YlJlbmRlci5lbGVtZW50LnByb3BzO1xuICAgICAgICAvLyBpZiAoIWFsaWdubWVudCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IHBhcmVudFJlbmRlciA9IHRiUmVuZGVyLnBhcmVudDtcbiAgICAgICAgLy8gY29uc3QgcmVtYWluU3BhY2UgPSBwYXJlbnRSZW5kZXIucmVjdC53aWR0aCAtIHRiUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgIC8vIGlmIChyZW1haW5TcGFjZSA8PSAwKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKGFsaWdubWVudCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgLy8gICAgIHRiUmVuZGVyLnJlY3QueCA9IE1hdGguZmxvb3IocmVtYWluU3BhY2UgLyAyKTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdlbmQnKSB7XG4gICAgICAgIC8vICAgICB0YlJlbmRlci5yZWN0LnggPSByZW1haW5TcGFjZTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmHjeaWsOa1i+mHj+WQiOW5tuWNleWFg+agvOmrmOW6plxuICAgICAqIEBwYXJhbSB0YlJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHJlbWVhc3VyZVRhYmxlTWVyZ2UodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIC8v5piv5ZCm6ZyA6KaB6YeN5paw6K6h566XLOS4u+imgeino+WGs++8muS5i+WJjeWQiOW5tuiuoeeul+eahOWIl++8jOWPr+iDveS8muiiq+WQjumdouWQiOW5tuiuoeeul+eahOWIl+aJgOW9seWTje+8jOmcgOimgeWGjeasoemHjeaWsOiuoeeul+a1i+mHj1xuICAgICAgICBsZXQgbmVlZFJlQ2FsYyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiUmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlID0gY2VsbFJlbmRlci5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSBlbGUucHJvcHM7XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZUluZGV4ID0gZWxlLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlUm93cyA9IHRoaXMuZ2V0Q29udGludWVWTWVyZ2VSZW5kZXJSb3dzKHRiUmVuZGVyLCBpLCBlbGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udGludWVSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/lkJHkuIvkuI3lrZjlnKjlkIjlubbnmoTljZXlhYPmoLzvvIzlvZPliY3lkIjlubbnmoTljZXlhYPmoLzmmK/ooqtjdXTov4fmnaXnmoTvvIzlubbkuJTlvZPliY3ljZXlhYPmoLzpq5jluqbpq5jkuo7ooYzlhoXpq5jluqbpnIDopoFyZW1lYXN1cmXlvZPliY3ooYxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID4gcm93LnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZVJvdyhyb3csIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZUNhbGMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGludWVDZWxsSGVpZ2h0ID0gY29udGludWVSb3dzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIucmVjdC5oZWlnaHQsIDApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93SGVpZ2h0ID0gY2VsbFJlbmRlci5yZWN0LmhlaWdodCAtIHJvdy5yZWN0LmhlaWdodCAtIGNvbnRpbnVlQ2VsbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgLy/muqLlh7rnmoTpq5jluqbliqDliLDmnIDlkI7kuIDkuKrlkIjlubbljZXlhYPmoLzkuK1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJmbG93SGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFJvdyA9IGNvbnRpbnVlUm93c1tjb250aW51ZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Um93LnJlY3QuaGVpZ2h0ICs9IG92ZXJmbG93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDZWxsVG9GaWxsUm93KGxhc3RSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlQ2FsYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID0gcm93LnJlY3QuaGVpZ2h0ICsgY29udGludWVDZWxsSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkUmVDYWxjKSB7XG4gICAgICAgICAgICB0aGlzLnJlbWVhc3VyZVRhYmxlTWVyZ2UodGJSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCR5LiL57q15ZCR5ZCI5bm255qE6KGMXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29udGludWVWTWVyZ2VSZW5kZXJSb3dzKHJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBUYWJsZVJvd1JlbmRlck9iamVjdFtdIHtcbiAgICAgICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCArIDE7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JlbmRlciA9IHJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHJvd0VsZS5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gZWxlLnByb3BzO1xuICAgICAgICAgICAgaWYgKHZNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93cy5wdXNoKHJvd1JlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5qiq5ZCR5b2T5YmN6KKr5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvCcpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCI5bm25Y2V5YWD5qC85Li75Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogeyByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRDZWxsSW5kZXggPSB0aGlzLmdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0Yiwgcm93SW5kZXgsIHJlc3RhcnRDZWxsSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgY29uc3QgcmVzdGFydFJvd0luZGV4ID0gdGhpcy5nZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGIsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXN0YXJ0Q2VsbFBvc2l0aW9uKHRiLCByZXN0YXJ0Um93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3Jvd0luZGV4LCBjb2xJbmRleH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDosIPmlbTljZXlhYPmoLzpq5jluqbloavmu6HmlbTkuKrooYznmoTpq5jluqZcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZXNpemVDZWxsVG9GaWxsUm93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjZWxsLnJlY3QuaGVpZ2h0ID0gcm93LnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5blhYPntKDnmoTlhajlsYDntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENvbnRyb2xJbmRleChjb250cm9sOiBFbGVtZW50KTogbnVtYmVyO1xuICAgIHN0YXRpYyBnZXRDb250cm9sSW5kZXgoY29udHJvbDogRWxlbWVudCwgcHVyZTogYm9vbGVhbik6IG51bWJlcjtcbiAgICBzdGF0aWMgZ2V0Q29udHJvbEluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIHB1cmU/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcHVyZSA9IHR5cGVvZiBwdXJlID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogcHVyZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRyb2xJbmRleChwdXJlLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhajlsYDntKLlvJXkvY3nva7ojrflj5blhYPntKBcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBjb3VudGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29udHJvbEJ5SW5kZXgoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9KTogRWxlbWVudCB8IG51bGw7XG4gICAgc3RhdGljIGdldENvbnRyb2xCeUluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSwgcHVyZTogYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsO1xuICAgIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleChjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0sIHB1cmU/OiBib29sZWFuKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBwdXJlID0gdHlwZW9mIHB1cmUgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBwdXJlO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEJ5SW5kZXgocHVyZSwgY29udHJvbCwgY291bnRlcik7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5blhYPntKDnmoTlhajlsYDntKLlvJXkvY3nva7vvIzkuI3nu5/orqHmrrXokL3nrKblj7dcbiAgICAgKiBAcGFyYW0gcHVyZVxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0Q29udHJvbEluZGV4KHB1cmU6IGJvb2xlYW4sIGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250cm9sLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IHB1cmUgJiYgY29udHJvbC50eXBlID09PSAncHN5bScgPyAwIDogMTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gY2hpbGQuZ2V0U2VsZkxlbmd0aChwdXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudGVyICsgdGhpcy5fZ2V0Q29udHJvbEluZGV4KHB1cmUsIHBhcmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YWo5bGA57Si5byV5L2N572u6I635Y+W5YWD57Sg77yM5LiN57uf6K6h5q616JC956ym5Y+3XG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gY291bnRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldENvbnRyb2xCeUluZGV4KHB1cmU6IGJvb2xlYW4sIGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5jcmVhc2VWYWwgPSBwdXJlICYmIGNvbnRyb2wudHlwZSA9PT0gJ3BzeW0nID8gMCA6IDE7XG4gICAgICAgIGNvdW50ZXIuY3VyckluZGV4ICs9IGluY3JlYXNlVmFsO1xuICAgICAgICBpZiAoY291bnRlci5jdXJySW5kZXggPT09IGNvdW50ZXIuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLl9nZXRDb250cm9sQnlJbmRleChwdXJlLCBjb250cm9sLmdldENoaWxkKGkpLCBjb3VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLy8gLyoqXG4gICAgLy8gICog6I635Y+W5YWD57Sg55qE5YWo5bGA57Si5byV5L2N572uXG4gICAgLy8gICogQHBhcmFtIGNvbnRyb2xcbiAgICAvLyAgKiBAcmV0dXJuc1xuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBnZXRDb250cm9sSW5kZXgyKGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAvLyAgICAgaWYgKHBhcmVudCkge1xuICAgIC8vICAgICAgICAgY29uc3QgaW5kZXggPSBjb250cm9sLmdldEluZGV4KCk7XG4gICAgLy8gICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAvLyAgICAgICAgICAgICBjb3VudGVyICs9IGNoaWxkLmdldFNlbGZMZW5ndGgoKTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHJldHVybiBjb3VudGVyICsgdGhpcy5nZXRDb250cm9sSW5kZXgyKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gMDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIOagueaNruWFqOWxgOe0ouW8leS9jee9ruiOt+WPluWFg+e0oFxuICAgIC8vICAqIEBwYXJhbSBjb250cm9sXG4gICAgLy8gICogQHBhcmFtIGNvdW50ZXJcbiAgICAvLyAgKiBAcmV0dXJuc1xuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleDIoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9KTogRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb3VudGVyLmN1cnJJbmRleCsrO1xuICAgIC8vICAgICBpZiAoY291bnRlci5jdXJySW5kZXggPT09IGNvdW50ZXIuaW5kZXgpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldENvbnRyb2xCeUluZGV4Mihjb250cm9sLmdldENoaWxkKGkpLCBjb3VudGVyKTtcbiAgICAvLyAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQjOe6p+e0p+aMqOWJjeaWueeahOWFhOW8n+WFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4IC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCM57qn57Sn5oyo5LiL5pa555qE5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgcGFyZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4ICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdFbGUgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBuZXh0U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmdFbGUgPSB0aGlzLmdldFByZXZTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZXZTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBwcmV2U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pu5jorqTphY3nva7liJvlu7rplb/mlofmnKxcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXdUZXh0R3JvdXAodGV4dFByb3BzOiBUZXh0UHJvcHMpOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KClcbiAgICAgICAgdGV4dFByb3BzLmNsb25lKHRleHQucHJvcHMpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9IHZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZTtcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gdmlld09wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICByZXR1cm4gdGV4dFByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWuueWZqOWGheeahOacgOWwj+a4suafk+WFg+e0oOmbhuWQiFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gYXJyYXlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QXZhaWxIaXRMZWFmUmVuZGVyT2JqZWN0cyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IEFycmF5PHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlci5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTx7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiA9IFtdO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goLi4udGhpcy5nZXRBdmFpbEhpdExlYWZSZW5kZXJPYmplY3RzKGNoaWxkLCB7eDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0Lnl9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh7cmVuZGVyOiByZW5kZXIsIHJlY3Q6IHJlbmRlck9iamVjdFJlY3R9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWuueWZqOWGheeahOacgOWwj+a4suafk+WFg+e0oOmbhuWQiFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gYXJyYXlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QXZhaWxIaXRSZW5kZXJPYmplY3RzKHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwYXJQb3M6IFBvc2l0aW9uKTogQXJyYXk8eyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0gdGhpcy5nZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QocmVuZGVyLCBwYXJQb3MpO1xuICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8eyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiA9IFtdO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goe3JlbmRlcjogY2hpbGQsIHJlY3Q6IHRoaXMuZ2V0UmVuZGVyT2JqZWN0QWJzb2x1dGVSZWN0KGNoaWxkLCByZW5kZXJPYmplY3RSZWN0KX0pXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh7cmVuZGVyOiByZW5kZXIsIHJlY3Q6IHJlbmRlck9iamVjdFJlY3R9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItuWFg+e0oOeahOe7neWvueS9jee9ruahhlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QocmVuZGVyOiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24pOiBSZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhclBvcy54ICsgcmVuZGVyLnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhclBvcy55ICsgcmVuZGVyLnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyLnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iamVjdFJlY3Q7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmo4Dmn6XlvZPliY3nu5jliLblhYPntKDmmK/lkKblsZ7kuo7mnInmlYjngrnlh7vlhYPntKBcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXI6IFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQgJiYgcmVuZGVyLmVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocm93RWxlLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dFbGUucGFpbnRSZW5kZXJzLmluZGV4T2YocmVuZGVyKSA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXJlbmRlci5kaXNhYmxlQ2xpY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6aqM6K+B54K55Ye75Y+v5pON5L2c5oCnXG4gICAgICog5Li76KaB6ZmQ5Yi26aG155yJ6aG16ISa55qE57yW6L6R5qih5byPXG4gICAgICovXG4gICAgc3RhdGljIHZlcmlmeUhpdGFibGUoc291cmNlRWxlbWVudDogTGVhZkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghc291cmNlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5LiA5Liq54K55Yiw5LiA5Liq55+p5b2i5pyA55+t55qE6Led56a7XG4gICAgICogQHBhcmFtIHJlY3RcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldERpc3RhbmNlVG9SZWN0KHJlY3Q6IFJlY3QsIHA6IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzOiBBcnJheTx7IGY6IFBBSVIsIHM6IFBBSVIgfT4gPSBbXTtcbiAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IGxpbmVzLm1hcChpdGVtID0+IHRoaXMubWluRGlzdGFuY2UoaXRlbS5mLCBpdGVtLnMsIHApKVxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4uZGlzdGFuY2VzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWluRGlzdGFuY2UoQTogUEFJUiwgQjogUEFJUiwgRTogUEFJUikge1xuXG4gICAgICAgIGNvbnN0IEFCOiBQQUlSID0ge3g6IEIueCAtIEEueCwgeTogQi55IC0gQS55fVxuXG4gICAgICAgIGNvbnN0IEJFOiBQQUlSID0ge3g6IEUueCAtIEIueCwgeTogRS55IC0gQi55fTtcblxuICAgICAgICBjb25zdCBBRTogUEFJUiA9IHt4OiBFLnggLSBBLngsIHk6IEUueSAtIEEueX1cblxuICAgICAgICBjb25zdCBBQl9CRSA9IChBQi54ICogQkUueCArIEFCLnkgKiBCRS55KTtcbiAgICAgICAgY29uc3QgQUJfQUUgPSAoQUIueCAqIEFFLnggKyBBQi55ICogQUUueSk7XG5cbiAgICAgICAgbGV0IHJlcUFucyA9IDA7XG5cbiAgICAgICAgaWYgKEFCX0JFID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeSA9IEUueSAtIEIueTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBFLnggLSBCLng7XG4gICAgICAgICAgICByZXFBbnMgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIH0gZWxzZSBpZiAoQUJfQUUgPCAwKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gRS55IC0gQS55O1xuICAgICAgICAgICAgY29uc3QgeCA9IEUueCAtIEEueDtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHgxID0gQUIueDtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gQUIueTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gQUUueDtcbiAgICAgICAgICAgIGNvbnN0IHkyID0gQUUueTtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IE1hdGguc3FydCh4MSAqIHgxICsgeTEgKiB5MSk7XG4gICAgICAgICAgICByZXFBbnMgPSBNYXRoLmFicyh4MSAqIHkyIC0geTEgKiB4MikgLyBtb2Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcUFucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bniLbnuqflsYLnuqfmuLLmn5Plr7nosaFcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVycyhyZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PFJlbmRlck9iamVjdD4ge1xuICAgICAgICBpZiAocmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3JlbmRlciwgLi4udGhpcy5nZXRQYXJlbnRSZW5kZXJzKHJlbmRlci5wYXJlbnQpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSZW5kZXJNYXBFbGVtZW50cyhyZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgcmVuZGVycyA9IHRoaXMuZ2V0UGFyZW50UmVuZGVycyhyZW5kZXIpO1xuICAgICAgICByZXR1cm4gcmVuZGVycy5tYXAocmVuZGVyID0+IHJlbmRlci5lbGVtZW50KS5maWx0ZXIoZWxlID0+IGVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlcjxUIGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PihjaGlsZDogUmVuZGVyT2JqZWN0LCBwYXJlbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0pOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIHBhcmVudFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudFJlbmRlcihjaGlsZC5wYXJlbnQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlckJ5UHJlZGljYXRlKGNoaWxkOiBSZW5kZXJPYmplY3QsIHByZWRpY2F0ZTogKGl0ZW06IFJlbmRlck9iamVjdCkgPT4gYm9vbGVhbik6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUoY2hpbGQucGFyZW50LCBwcmVkaWNhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54i257qn5bGC57qn5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQYXJlbnRFbGVtZW50cyhlbGVtZW50OiBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZWxlbWVudCwgLi4udGhpcy5nZXRQYXJlbnRFbGVtZW50cyhlbGVtZW50LnBhcmVudCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pyA5ZCO5LiA5Liq5a2Q5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRMYXN0TGVhZkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgcHJlZGljYXRlOiBudWxsIHwgKChpdGVtOiBFbGVtZW50KSA9PiBib29sZWFuKSA9IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExlYWZFbGVtZW50ICYmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShlbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TGFzdExlYWZFbGVtZW50KGVsZW1lbnQuZ2V0Q2hpbGQoaSksIHByZWRpY2F0ZSlcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnrKzkuIDkuKrlrZDlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEZpcnN0TGVhZkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEZpcnN0TGVhZkVsZW1lbnQoZWxlbWVudC5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagoemqjOS4pOS4quWFg+e0oOaYr+WQpuWcqOWQjOS4gOS4quauteiQveS4rVxuICAgICAqIEBwYXJhbSBlbGVtZW50MVxuICAgICAqIEBwYXJhbSBlbGVtZW50MlxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luU2FtZVBhcmFncmFwaChlbGVtZW50MTogRWxlbWVudCwgZWxlbWVudDI6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGFyMSA9IHRoaXMuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQxLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcGFyMiA9IHRoaXMuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQyLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcjEgPT09IHBhcjI7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEJvcmRlckN1cnNvcihib3JkZXJUeXBlOiBCb3JkZXJUeXBlKTogQ3Vyc29yVHlwZSB7XG4gICAgICAgIHN3aXRjaCAoYm9yZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3ctcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnY29sLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2wtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3ctcmVzaXplJ1xuICAgICAgICAgICAgY2FzZSAnbGVmdC1taWRkbGUnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQtbWlkZGxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ctcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3RvcC1taWRkbGUnOlxuICAgICAgICAgICAgY2FzZSAnYm90dG9tLW1pZGRsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdsZWZ0LXRvcCc6XG4gICAgICAgICAgICBjYXNlICdyaWdodC1ib3R0b20nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnc2UtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0LXRvcCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICduZS1yZXNpemUnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudEJ5VHlwZTxQIGV4dGVuZHMgRWxlbWVudCwgVD4oY2hpbGQ6IFAgfCBudWxsLCBwYXJlbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0pOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIHBhcmVudFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEJ5VHlwZShjaGlsZC5wYXJlbnQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudChjaGlsZDogRWxlbWVudCB8IG51bGwsIHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoY2hpbGQucGFyZW50LCBwcmVkaWNhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDkv67mraPmrrXokL3lhoXlrrlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBmaXhQYXJhZ3JhcGhDb250ZW50KGNvbnRyb2w6IFBhcmFncmFwaEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy/lpoLmnpzmnIDlkI7kuIDkuKrlhYPntKDkuI3mmK/mrrXokL3nrKblj7fvvIzliJnooaXotrNcbiAgICAgICAgaWYgKCEoY29udHJvbC5nZXRDaGlsZChjb250cm9sLmxlbmd0aCAtIDEpIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb250cm9sLmFkZENoaWxkKG5ldyBQU3ltYm9sRWxlbWVudCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8UFN5bWJvbEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlQ2hpbGQoaXRlbSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5Z2X57qn5a655Zmo5YaF5a65XG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKi9cbiAgICBzdGF0aWMgZml4QmxvY2tDb250YWluZXIoY29udHJvbDogQmxvY2tDb250YWluZXJFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChjb250cm9sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUNlbGxFbGVtZW50ICYmIChjb250cm9sLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJyB8fCBjb250cm9sLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29udHJvbC5ub0ZpbGxFbXB0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRyb2wuYWRkQ2hpbGQobmV3IFBhcmFncmFwaEVsZW1lbnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItuWFg+e0oOebuOWvueS6juaVtOS4queUu+W4g+eahOe7neWvueS9jee9rlxuICAgICAqIOaVtOS4queUu+W4g+e7mOWItueahOaXtuWAmeS4jeS4gOWumuS7jng9MCx5PTDml7bnu5jliLbnmoTvvIzkuIvmi4nmu5rliqjml7bvvIzkuIrpnaLku47otJ955Z2Q5qCH5byA5aeL57uY5Yi2XG4gICAgICog5aaC5p6c6K6h566X5p+Q5Liq5YWD57Sg55u45a+555S75biD55qE5bem5LiK6KeS55qE57ud5a+55Z2Q5qCH5L2N572u77yM6ZyA6KaBY2hpbGRQb3PnmoR55YC85YeP5Y67dHJhbnNsYXRlWVxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcmVmUG9zIOWPgueFp+S9jee9rlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlZlBvczogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFBvc2l0aW9uIHtcbiAgICAgICAgcmVmUG9zID0gcmVmUG9zID8/IHt4OiAwLCB5OiAwfTtcbiAgICAgICAgY29uc3QgY3VyclBvczogUG9zaXRpb24gPSB7eDogcmVuZGVyLnJlY3QueCArIHJlZlBvcy54LCB5OiByZW5kZXIucmVjdC55ICsgcmVmUG9zLnl9O1xuICAgICAgICBpZiAoIXJlbmRlci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyUG9zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLnBhcmVudCwgY3VyclBvcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFBvczogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLCBjaGlsZFBvcyk7XG4gICAgICAgIHJldHVybiB7Li4ucG9zLCB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsIGhlaWdodDogcmVuZGVyLnJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwfTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reWMuuWfn+eahOW8gOWni+WMuuWfn1xuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgaWYgKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IHJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZS5zZWxlY3RlZENoaWxkcmVuWzBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reWMuuWfn+eahOW8gOWni+WMuuWfn1xuICAgICAqIEBwYXJhbSByYW5nZSBcXFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgcmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltyYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5YWL6ZqG6YCJ5Yy65YaF5a65XG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHBhcmFtIGlzRGVsZXRlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY2xvbmVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBpc0RlbGV0ZTogYm9vbGVhbiwgY2xvbmVNb2RlOiAnY2xvbmUnIHwgJ3NvdXJjZScgfCAnY29weScgPSAnY2xvbmUnKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7dGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgc2VsZWN0ZWRDaGlsZHJlbn0gPSByYW5nZTtcbiAgICAgICAgaWYgKGlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAvL+S/rumlsOWFg+e0oOS4jeiDveWkjeWItiDlrqHpmIXmoIforrDjgIHmlbDmja7lhYNOdWxsVGV4dFxuICAgICAgICAgICAgaWYgKGNsb25lTW9kZSA9PT0gJ2NvcHknICYmIHRhcmdldC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IGNsb25lTW9kZSA9PT0gJ3NvdXJjZScgPyB0YXJnZXQgOiB0YXJnZXQuY2xvbmUodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWxldGUpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBzdGFydE9mZnNldCAhPT0gZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weVRhcmdldCA9IHRhcmdldC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5VGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weVRhcmdldCA9IHRhcmdldC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5VGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlDaGlsZCA9IHRoaXMuY2xvbmVSYW5nZShzZWxlY3RlZENoaWxkcmVuW2ldLCBpc0RlbGV0ZSwgY2xvbmVNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHlDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb3B5Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuY2xvbmUoZmFsc2UpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5VGFyZ2V0LmFkZENoaWxkKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5omA5pyJ55qE5a2Q57qn5YWD57SgXG4gICAgICogQHBhcmFtIGJyYW5jaEVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENoaWxkcmVuRWxlbWVudHMoYnJhbmNoRWxlOiBCcmFuY2hFbGVtZW50KTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaEVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJyYXkucHVzaChicmFuY2hFbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gY3VyckVsZW1lbnRcbiAgICAgKiBAcGFyYW0gaW5QYXJhICDmmK/lkKblnKjlkIzkuIDmrrXokL3kuK3lr7vmib5cbiAgICAgKiBAcGFyYW0gZm9yQ3Vyc29yIOafpeaJvue7k+aenOaYr+WQpueUqOS6juWFieagh+WumuS9jVxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwsIGluUGFyYTogYm9vbGVhbiA9IGZhbHNlLCBmb3JDdXJzb3I6IGJvb2xlYW4gPSBmYWxzZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAgICAgLy/liKDpmaTnlZnnl5XlnZfnmoRtZWFzdXJlUmVuZGVy5Zyo5LiN5pi+56S655WZ55eV5qih5byP5LiL77yM5LiN55Sf5oiQcmVuZGVyXG4gICAgICAgIGlmICghY3VyckVsZW1lbnQgfHwgIXBhcmVudCB8fCAoIWN1cnJFbGVtZW50Lm1lYXN1cmVSZW5kZXIgJiYgIShjdXJyRWxlbWVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaVsOaNruWFg+S4jeWPr+e8lui+ke+8jOWImeebtOaOpei3s+i/h1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiAhcGFyZW50LnByb3BzLmVkaXRhYmxlICYmIHZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvckN1cnNvciAmJiBwYXJlbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBpZiAoaW5QYXJhICYmIHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcHJldkVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZFbGVtZW50ICYmICFwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2RWxlbWVudCB8fCBwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHByZXZFbGVtZW50KTtcbiAgICAgICAgICAgIC8v55So5LqO5YWJ5qCH5a6a5L2NXG4gICAgICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIGxhc3RMZWFmRWxlbWVudCAmJiBsYXN0TGVhZkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGxhc3RMZWFmRWxlbWVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocHJldkVsZW1lbnQucGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvqrnjq/lkJHliY3lr7vmib7lj6/lrprkvY3nmoTmlbDmja7lhYNcbiAgICAgKiBAcGFyYW0gY3VyckVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJldkRhdGFFbGVtZW50KGN0eDogRWRpdG9yQ29udGV4dCwgY3VyckVsZW1lbnQ6IERhdGFFbGVtZW50SW5saW5lR3JvdXApOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjdHguZ2V0Q3VycmVudEN0eChjdXJyRWxlbWVudCkuZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwPjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhRWxlLmluZGV4T2YoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YUVsZVtpXS5kaXNhYmxlQ2xpY2sgJiYgZGF0YUVsZVtpXS5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUVsZVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgIC8vICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICBpZiAoIWluZGV4KSB7XG4gICAgLy8gICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBwcmV2RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpbmRleCAtIDEpO1xuICAgIC8vICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHByZXZFbGVtZW50KTtcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEocHJldkVsZW1lbnQ/LnBhcmVudCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYUZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuXG4gICAgLyoqXG4gICAgICog6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwsIGluUGFyYTogYm9vbGVhbiA9IGZhbHNlLCBmb3JDdXJzb3I6IGJvb2xlYW4gPSBmYWxzZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50IHx8ICFjdXJyRWxlbWVudC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaVsOaNruWFg+S4jeWPr+e8lui+ke+8jOWImeebtOaOpei3s+i/h1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiAhcGFyZW50LnByb3BzLmVkaXRhYmxlICYmIHZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvckN1cnNvciAmJiBwYXJlbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBpZiAoaW5QYXJhICYmIHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBwYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQgJiYgIW5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW5leHRFbGVtZW50IHx8IG5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KG5leHRFbGVtZW50KTtcbiAgICAgICAgICAgIC8v55So5LqO5YWJ5qCH5a6a5L2NXG4gICAgICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIGxhc3RMZWFmRWxlbWVudCAmJiBsYXN0TGVhZkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGxhc3RMZWFmRWxlbWVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQobmV4dEVsZW1lbnQucGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgIC8vICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICBpZiAoaW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgLy8gICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpbmRleCArIDEpO1xuICAgIC8vICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChuZXh0RWxlbWVudCk7XG4gICAgLy8gICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKG5leHRFbGVtZW50LnBhcmVudCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYUZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50Rm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGM5YaF5pyA5aSn5riy5p+T5Y2V5YWD5qC86auY5bqm77yM5Li76KaB5aSE55CG57q15ZCR5ZCI5bm25Y2V5YWD5qC86Zeu6aKYXG4gICAgICogQHBhcmFtIHJvd1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJvd01heENlbGxIZWlnaHQocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4SGVpZ2h0O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5piv5ZCm5Li656m65YaF5a65XG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0VtcHR5Q29udGVudChlbGU6IEJyYW5jaFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZWxlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZW5kZXIgPSBlbGUuZ2V0Q2hpbGQoMCk7XG4gICAgICAgICAgICBpZiAoZmlyc3RSZW5kZXIgaW5zdGFuY2VvZiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDxQYXJhZ3JhcGhFbGVtZW50PihmaXJzdFJlbmRlci5lbGVtZW50KSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rWL6YeP6KGM5YaF57yW57uE5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihyZW5kZXI6IElubGluZUdyb3VwUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaXRlbS5yZWN0LnggPSB4O1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBpdGVtLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBpdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtLnJlY3QueSA9IG1heEhlaWdodCAtIGl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB4O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFMaW5lUG9zKGNoaWxkUmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUmVuZGVyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QocGFyZW50LnJlY3QpO1xuICAgICAgICByZWN0LnggPSBjaGlsZFJlbmRlclBvcy54IC0gY2hpbGRSZW5kZXIucmVjdC54O1xuICAgICAgICByZWN0LnkgPSBjaGlsZFJlbmRlclBvcy55IC0gY2hpbGRSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyYUxpbmVQb3MocGFyZW50LCByZWN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlclBvcyhwYXJlbnRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXJQb3M6IFBvc2l0aW9uKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkUmVuZGVyLnBhcmVudDtcbiAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJlbnQucmVjdCk7XG4gICAgICAgIHJlY3QueCA9IGNoaWxkUmVuZGVyUG9zLnggLSBjaGlsZFJlbmRlci5yZWN0Lng7XG4gICAgICAgIHJlY3QueSA9IGNoaWxkUmVuZGVyUG9zLnkgLSBjaGlsZFJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhcmVudFJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXJQb3MocGFyZW50UmVuZGVyLCBwYXJlbnQsIHJlY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLblhYPntKDmiYDlnKjnmoTljLrln59cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogSGl0UmVnaW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVnaW9uKHJlbmRlci5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJPYmplY3RSZWdpb24ocmVuZGVyLnBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5paH5qGj5YWD57Sg5omA5Zyo55qE5Yy65Z+fXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbGVtZW50UmVnaW9uKGVsZW1lbnQ6IEVsZW1lbnQpOiBIaXRSZWdpb24gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWdpb25UYXJnZXQgPSB0aGlzLmdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiByZWdpb25UYXJnZXQ/LnR5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudDogRWxlbWVudCB8IG51bGwpOiB7IHR5cGU6IEhpdFJlZ2lvbiwgdGFyZ2V0OiBCcmFuY2hFbGVtZW50IH0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogJ2JvZHknLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdmb290ZXInLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdoZWFkZXInLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdyZXZpZXcnLCB0YXJnZXQ6IGVsZW1lbnR9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChlbGVtZW50LnBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5Z2Q5qCH57O757uf5YGP56e75L2N6I635Y+W5omA5Zyo55qE5paH5pys5YGP56e75L2N572uXG4gICAgICogQHBhcmFtIHRleHRSZW5kZXJcbiAgICAgKiBAcGFyYW0geFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRleHRSZW5kZXJPZmZzZXQodGV4dFJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBlbGUgPSB0ZXh0UmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRleHRSZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgaWYgKCFkb2NSZW5kZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9jUmVuZGVyIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZVBhaW50UmVuZGVycyA9IGVsZS5wYWludFJlbmRlcnM7Ly8uZmlsdGVyKGl0ZW0gPT4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGl0ZW0sIERvY3VtZW50UmVuZGVyT2JqZWN0KSA9PT0gZG9jUmVuZGVyKTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVQYWludFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGVsZVBhaW50UmVuZGVyc1tpXSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocmVuZGVyICE9PSB0ZXh0UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvclggKyByZW5kZXIudGV4dE1lYXN1cmVzW2pdLmFjdHVhbFNpemUgPj0geCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvclggKyBNYXRoLmZsb29yKHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZSAvIDIpID4geCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwICYmIGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGogKyBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBob3JYICs9IHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ICsgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDlvZPliY3mlofmnKzlhYPntKDnmoTlhYnmoIflgY/np7vph48nKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0SGl0UmVuZGVyT2Zmc2V0KHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dFJlbmRlck9mZnNldChyZW5kZXIsIHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50ICYmIHJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChyZW5kZXIucmVjdC53aWR0aCAvIDIpID49IHggPyAwIDogMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0UmVuZGVySG9yWChjdXJyUmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyKTogeyBzdGFydFg6IG51bWJlciwgZW5kWDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB0ZXh0RWxlID0gY3VyclJlbmRlci5lbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgIGxldCBlbmRYID0gMDtcbiAgICAgICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEVsZS5wYWludFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gdGV4dEVsZS5wYWludFJlbmRlcnNbaV0gYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHBhaW50UmVuZGVyICE9PSBjdXJyUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ICsgcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCA8IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRPZmZzZXQgPT09IGNvdW50ICsgaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICsgaiA9PT0gc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGVuZFg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZW5kWCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtzdGFydFgsIGVuZFh9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluS4gOS4quWFg+e0oOe7k+WwvuWBj+enu+mHj1xuICAgICAqIOaWh+acrOS7peWtl+espumVv+W6pui/m+ihjOehruWumlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbGVtZW50RW5kT2Zmc2V0KGVsZTogTGVhZkVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZS50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreW9k+WJjeWBj+enu+mHj+aYr+WQpuaYr+acgOe7iOWBj+enu+mHj1xuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICovXG4gICAgc3RhdGljIGlzRWxlbWVudEVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RW5kT2Zmc2V0KGVsZSkgPT09IG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnm7TmjqXlrZDoioLngrnnmoTmiYDmnInmuLLmn5PlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q2hpbGRSZW5kZXJzPFQgZXh0ZW5kcyBSZW5kZXJPYmplY3Q+KGVsZTogQnJhbmNoUmVuZGVyT2JqZWN0KTogQXJyYXk8VD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8VD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goZWxlLmdldENoaWxkKGkpIGFzIFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3ljZXlhYPmoLzlhoXmiYDmnInnmoTmrrXokL3ooYxcbiAgICAgKiBAcGFyYW0gY2VsbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENlbGxQYXJhTGluZXMoY2VsbDogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogQXJyYXk8UGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmEgPSBjZWxsLmdldENoaWxkKGkpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFyYS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gocGFyYS5nZXRDaGlsZChqKSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJhbmRvbUNvbG9yKHNlZWQ6IG51bWJlcikge1xuICAgICAgICBsZXQgbGV0dGVycyA9ICcwMTIzNDU2Nzg5QUJDREVGJztcbiAgICAgICAgbGV0IGNvbG9yID0gJyMnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgY29sb3IgKz0gbGV0dGVyc1tNYXRoLmZsb29yKHRoaXMuZ2V0U2VlZFJhbmRvbShzZWVkKSAqIDE2KV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGdldFNlZWRSYW5kb20oc2VlZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihcIjAuXCIgKyBNYXRoLnNpbihzZWVkICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoKS5zdWJzdHIoNikpO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGZpbmRDaGlsZFJlbmRlcihyZW5kZXI6IEJyYW5jaFJlbmRlck9iamVjdCwgcHJlZGljYXRlOiAoY2hpbGQ6IFJlbmRlck9iamVjdCkgPT4gYm9vbGVhbik6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShyZW5kZXIuZ2V0Q2hpbGQoaSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHkuIrmn6Xmib7nsbvlnovkuLrmlbDmja7lhYPnmoTniLbnuqdcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGF0YUVsZW1lbnQoZWxlOiBFbGVtZW50KTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoZWxlLCBpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgIH1cbn1cblxuIiwiaW1wb3J0IHtJUmVuZGVyQ29udGV4dENvbnRyYWN0LCBSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcbmltcG9ydCB7UmVuZGVyQ3R4fSBmcm9tIFwiLi4vLi4vLi4vY29udHJvbHMvcmVuZGVyLWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29udGFpbmVyUmVuZGVyIGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgbmV4dFJlbmRlcixkb2NDdHg6e3ZpZXdPcHRpb25zfX0gPSBlO1xuICAgICAgICBjb25zdCB7dmlld1NldHRpbmdzLCBkb2NQYWdlU2V0dGluZ3MsIHZpZXdCYWNrY29sb3Isc2NhbGV9ID0gdmlld09wdGlvbnM7XG4gICAgICAgIHJlbmRlci5jbGVhcigpO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZpZXdTZXR0aW5ncy53aWR0aCwgdmlld1NldHRpbmdzLmhlaWdodCwgdmlld0JhY2tjb2xvcik7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgICAgICBuZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIGFkZFBhZ2VzKHBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChwYWdlc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCwgRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBQb3NpdGlvbiB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBIaXRFdmVudEluZm8sIEhpdFJlZ2lvbiB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRTZWxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIHNuYXBzaG90U2VsZWN0aW9uU3RhdGUhOiBTZWxlY3Rpb25TdGF0ZSB8IG51bGw7XG4gICAgc2V0U2VsZWN0aW9uU3RhdGUoaGl0SW5mbzogeyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydEhpdEluZm8sIGVuZEhpdEluZm8gfSA9IGhpdEluZm87XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydEhpdEluZm8gPSBzdGFydEhpdEluZm87XG4gICAgICAgIGlmICghc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBzdGFydFJhbmdlLnNldFN0YXJ0KHN0YXJ0SGl0SW5mby5lbGVtZW50LCBzdGFydEhpdEluZm8ub2Zmc2V0KTtcbiAgICAgICAgaWYgKGVuZEhpdEluZm8pIHtcbiAgICAgICAgICAgIHN0YXJ0UmFuZ2Uuc2V0RW5kKGVuZEhpdEluZm8uZWxlbWVudCwgZW5kSGl0SW5mby5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRSYW5nZS5zZXRFbmQoc3RhcnRIaXRJbmZvLmVsZW1lbnQsIHN0YXJ0SGl0SW5mby5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2Uoc3RhcnRSYW5nZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiDojrflj5bpgInljLrlhbHlkIznmoTnpZblhYjmjqfku7ZcbiAgICAqL1xuICAgIHN0YXRpYyBnZXRBbmNlc3RvckNvbW1vbkNvbnRyb2woc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kQ29udHJvbDogTGVhZkVsZW1lbnQpOiBCcmFuY2hFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc3RhcnROZXN0UGFyZW50cyA9IHRoaXMuZ2V0TmVzdFBhcmVudHMoc3RhcnRDb250cm9sLnBhcmVudCk7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IHRoaXMuZ2V0Q29tbW9uUGFyZW5ldChlbmRDb250cm9sLnBhcmVudCwgc3RhcnROZXN0UGFyZW50cyk7XG4gICAgICAgIGlmICghYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWFrOWFseeahOelluWFiOe7hOS7ticpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmNlc3RvckNvbW1vbkNvbnRyb2w7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCR5LiK55qE5bWM5aWX54i257qn6IqC54K56ZuG5ZCIXG4gICAgICogQHBhcmFtIGNvbnRyb2wgXG4gICAgICogQHBhcmFtIGFycmF5IFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXN0UGFyZW50cyhjb250cm9sOiBCcmFuY2hFbGVtZW50IHwgbnVsbCk6IEFycmF5PEJyYW5jaEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBbY29udHJvbCwgLi4udGhpcy5nZXROZXN0UGFyZW50cyhjb250cm9sLnBhcmVudCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcblxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDb21tb25QYXJlbmV0KGNvbnRyb2w6IEJyYW5jaEVsZW1lbnQgfCBudWxsLCBhcnJheTogQXJyYXk8QnJhbmNoRWxlbWVudD4pOiBCcmFuY2hFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycmF5LnNvbWUoaXRlbSA9PiBpdGVtID09PSBjb250cm9sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbW9uUGFyZW5ldChjb250cm9sPy5wYXJlbnQsIGFycmF5KTtcbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3Rpb25TdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGlvbkVxdWFscygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybVJhbmdlKCk7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5zdGFydENvbnRyb2wpO1xuICAgICAgICBjb25zdCBlbmRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2UuZW5kQ29udHJvbCk7XG4gICAgICAgIGlmIChlbmRDb250cm9sSW5kZXggPCBzdGFydENvbnRyb2xJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sID0gcmFuZ2UuZW5kQ29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZW5kQ29udHJvbCA9IHJhbmdlLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZWRpdGFibGUgPSByYW5nZS5lZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UoY2xvbmUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgPSByYW5nZS5lZGl0YWJsZTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCA9IHJhbmdlLnN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLnN0YXJ0Q29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRDb250cm9sID0gcmFuZ2UuZW5kQ29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLmVuZENvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYW5jZXN0b3JDb21tb25Db250cm9sID0gRG9jdW1lbnRTZWxlY3Rpb24uZ2V0QW5jZXN0b3JDb21tb25Db250cm9sKHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZENvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzID0gdGhpcy5nZXRFbmFibGVUcmFja0NoYW5nZXMocmFuZ2Uuc3RhcnRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6YCJ5Yy65Yy65Z+f5YaF5piv5ZCm5pSv5oyB55WZ55eVXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEVuYWJsZVRyYWNrQ2hhbmdlcyhlbGU6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYm9keSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbGUsIERvY3VtZW50Qm9keUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gYm9keT8udHJhY2tDaGFuZ2VzIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVNlbGVjdGlvbkVxdWFscygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICBjb25zdCBzbmFwID0gdGhpcy5zbmFwc2hvdFNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoc25hcCAmJiByYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gc25hcC5zdGFydENvbnRyb2xcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gc25hcC5zdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLmVuZENvbnRyb2wgPT09IHNuYXAuZW5kQ29udHJvbFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gc25hcC5lbmRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi9rOaNoumAieWMuuWGheWuuVxuICAgICAqIOWkhOeQhue7k+adn+mAieWMuuWcqOW8gOWni+mAieWMuuS5i+WJjVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtUmFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGNvbnN0IGVuZENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbmRDb250cm9sKTtcbiAgICAgICAgaWYgKChlbmRDb250cm9sSW5kZXggPCBzdGFydENvbnRyb2xJbmRleCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbCA9IGVuZENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgIGNsb25lLmVuZENvbnRyb2wgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UoY2xvbmUpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYW5nZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICAgICAgaWYgKChyYW5nZS5zdGFydENvbnRyb2wgPT09IHJhbmdlLmVuZENvbnRyb2wgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPiByYW5nZS5lbmRPZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSA9IHJhbmdlO1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICAgICAgLy/pmLLmraLlhYnmoIflrprkvY3liLDmrrXokL3nrKblj7fkuYvlkI5cbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gcmFuZ2UuZW5kQ29udHJvbCAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMSAmJiByYW5nZS5lbmRPZmZzZXQgPT09IDEgJiYgcmFuZ2Uuc3RhcnRDb250cm9sLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0YWtlU25hcHNob3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc25hcHNob3RTZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhclNuYXBzaG90KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNuYXBzaG90U2VsZWN0aW9uU3RhdGUgPSBudWxsO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uU3RhdGUge1xuICAgIGdldCBzdGFydENvbnRyb2woKTogTGVhZkVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgIH1cblxuICAgIHNldCBzdGFydENvbnRyb2wodmFsdWU6IExlYWZFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9zdGFydENvbnRyb2wgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZW5kQ29udHJvbCgpOiBMZWFmRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgIH1cblxuICAgIHNldCBlbmRDb250cm9sKHZhbHVlOiBMZWFmRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZW5kQ29udHJvbCA9IHZhbHVlO1xuICAgIH1cbiAgICBvbkNoYW5nZWRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc3RhcnRDb250cm9sSW5kZXghOiBudW1iZXI7XG4gICAgc3RhcnRPZmZzZXQhOiBudW1iZXI7XG4gICAgZW5kQ29udHJvbEluZGV4ITogbnVtYmVyO1xuICAgIGVuZE9mZnNldCE6IG51bWJlcjtcbiAgICBnZXQgY29sbGFwc2VkKCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbEluZGV4LCBzdGFydE9mZnNldCwgZW5kQ29udHJvbEluZGV4LCBlbmRPZmZzZXQgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiAhKHN0YXJ0Q29udHJvbEluZGV4ICE9PSBlbmRDb250cm9sSW5kZXggfHwgKHN0YXJ0Q29udHJvbEluZGV4ID09PSBlbmRDb250cm9sSW5kZXggJiYgc3RhcnRPZmZzZXQgIT09IGVuZE9mZnNldCkpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zdGFydENvbnRyb2whOiBMZWFmRWxlbWVudCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfZW5kQ29udHJvbCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBhbmNlc3RvckNvbW1vbkNvbnRyb2whOiBCcmFuY2hFbGVtZW50IHwgbnVsbDtcbiAgICByYW5nZSE6IFNlbGVjdGlvblJhbmdlIHwgbnVsbDtcbiAgICBzdGFydEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIHNlbGVjdGVkUmFuZ2UhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsO1xuICAgIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICByZW5kZXJDb250YWluZXIhOiBEb2N1bWVudENvbnRhaW5lclJlbmRlcjtcbiAgICBjdXJzb3JQb3MhOiBSZWN0IHwgbnVsbDtcbiAgICAvL+W9k+WJjemAieWMuueahOS4iuS4i+aWh+aYr+WQpuaUr+aMgeeVmeeXleS/ruaUuVxuICAgIGVuYWJsZVRyYWNrQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IC0xO1xuICAgICAgICB0aGlzLmVuZE9mZnNldCA9IC0xO1xuICAgICAgICB0aGlzLl9zdGFydENvbnRyb2wgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbmRDb250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5hbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0Q29udHJvbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuZW5kQ29udHJvbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zID0gbnVsbDtcbiAgICB9XG5cbiAgICBhZGRSYW5nZShyYW5nZTogU2VsZWN0aW9uUmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkRXZlbnQubmV4dCgpO1xuICAgIH1cbiAgICByZXNldFJhbmdlKHN0YXJ0Q29udHJvbDogRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IFNlbGVjdGlvblJhbmdlIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIHJhbmdlLnNldEVuZChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICBzdXJyb3VuZChlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWxlLCAwKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGVsZSwgLTEpO1xuICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTZWxlY3Rpb25TdGF0ZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIGNsb25lLl9zdGFydENvbnRyb2wgPSB0aGlzLl9zdGFydENvbnRyb2w7XG4gICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldDtcbiAgICAgICAgY2xvbmUuX2VuZENvbnRyb2wgPSB0aGlzLl9lbmRDb250cm9sO1xuICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldDtcbiAgICAgICAgY2xvbmUuYW5jZXN0b3JDb21tb25Db250cm9sID0gdGhpcy5hbmNlc3RvckNvbW1vbkNvbnRyb2w7XG4gICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbEluZGV4ID0gdGhpcy5zdGFydENvbnRyb2xJbmRleDtcbiAgICAgICAgY2xvbmUuZW5kQ29udHJvbEluZGV4ID0gdGhpcy5lbmRDb250cm9sSW5kZXg7XG4gICAgICAgIGNsb25lLnNlbGVjdGVkUmFuZ2UgPSB0aGlzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGNsb25lLmVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG59XG5cblxuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uUmFuZ2Uge1xuICAgIHN0YXJ0Q29udHJvbCE6IEVsZW1lbnQ7XG4gICAgc3RhcnRPZmZzZXQhOiBudW1iZXI7XG4gICAgZW5kQ29udHJvbCE6IEVsZW1lbnQ7XG4gICAgZW5kT2Zmc2V0ITogbnVtYmVyO1xuICAgIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzZXRTdGFydChjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0Q29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAgIHRoaXMuc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHNldEVuZChjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVuZENvbnRyb2wgPSBjb250cm9sO1xuICAgICAgICB0aGlzLmVuZE9mZnNldCA9IG9mZnNldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5zZXRJbmZvKHRoaXMuc3RhcnRDb250cm9sLCB0aGlzLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5zZXRTdGFydChyZXMuY29udHJvbCwgcmVzLm9mZnNldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNldEluZm8odGhpcy5lbmRDb250cm9sLCB0aGlzLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuc2V0RW5kKHJlcy5jb250cm9sLCByZXMub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYWxjUmFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FsY1N0YXJ0KCk7XG4gICAgICAgIHRoaXMuY2FsY0VuZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5mbyhjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHsgY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPT09IC0xID8gY29udHJvbC50ZXh0Lmxlbmd0aCA6IG9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA9PT0gLTEgPyAxIDogb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udHJvbCwgb2Zmc2V0IH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign6LaF57Si5byVJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09PSBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChvZmZzZXQgLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRJbmZvKGNoaWxkLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChjb250cm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEluZm8oY2hpbGQsIC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5mbyhjaGlsZCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VsZWN0aW9uUmFuZ2Uge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBjbG9uZS5zdGFydENvbnRyb2wgPSB0aGlzLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0O1xuICAgICAgICBjbG9uZS5lbmRDb250cm9sID0gdGhpcy5lbmRDb250cm9sO1xuICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDdXJzb3Ige1xuICAgIHN0YXRpYyBnZXRFbGVtZW50Q3Vyc29yUG9zKGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBoaXRSZWdpb246IEhpdFJlZ2lvbiB8IHVuZGVmaW5lZCwgZG9jTnVtOiBudW1iZXIpOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0ge1xuICAgICAgICBpZiAoaGl0UmVnaW9uID09PSAnYm9keScgfHwgaGl0UmVnaW9uID09PSAncmV2aWV3Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlbmRlclBvcyhlbGUsIG9mZnNldCwgZWxlLnBhaW50UmVuZGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UmVnaW9uID09PSAnZm9vdGVyJyB8fCBoaXRSZWdpb24gPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NDb250YWluZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoZWxlLnBhaW50UmVuZGVyc1swXSwgRG9jdW1lbnRDb250YWluZXJSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFkb2NDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvY0NvbnRhaW5lciBpcyBudWxsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChkb2NOdW0pIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY3VyckRvY1BhaW50UmVuZGVycyA9IGVsZS5wYWludFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGl0ZW0sIERvY3VtZW50UmVuZGVyT2JqZWN0KSA9PT0gZG9jUmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRSZW5kZXJQb3MoZWxlLCBvZmZzZXQsIGN1cnJEb2NQYWludFJlbmRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWFg+e0oOWBj+enu+mHj+WvueW6lOeahOWFieagh+S9jee9ricpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RWxlbWVudFJlbmRlclBvcyhlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgcGFpbnRzOiBBcnJheTxSZW5kZXJPYmplY3Q+KTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9IHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gcGFpbnRzW2ldIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBsZXQgaG9yWCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggKyBjb3VudCA8IG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gb2Zmc2V0IHx8IChpID09PSAwICYmIGNvdW50ICsgMC41ID09PSBvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QocGFpbnRSZW5kZXIsIHsgeDogMCwgeTogMCB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy/kuIrmoIfjgIHkuIvmoIfkvY3nva7lpITnkIZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbJ3N1cGVyc2NyaXB0JywgJ3N1YnNjcmlwdCddLmluZGV4T2YoZWxlLnByb3BzLnZlcnRBbGlnbikgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0IC09IGVsZS5wcm9wcy5mb250U2l6ZSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZS5wcm9wcy52ZXJ0QWxpZ24gPT09ICdzdWJzY3JpcHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSArPSByZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnggKz0gaG9yWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiBwYWludFJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgaG9yWCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYWludFJlbmRlciA9IHBhaW50c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYWludFJlbmRlciwgeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVjdC54ICs9IHJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogcGFpbnRSZW5kZXIsXG4gICAgICAgICAgICAgICAgcmVjdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95a6a5L2N5Yiw5YWD57Sg5L2N572uJylcbiAgICB9XG59XG4iLCJpbXBvcnQge0VsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q2hlY2tCb3hQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8Q2hlY2tCb3hQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY2tiJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ2hlY2tCb3hQcm9wcygpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnZGVmYXVsdCdcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShldnQpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBDaGVja0JveFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBDaGVja0JveFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLnNpemUgKyA0O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLnNpemU7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGUoZTogRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcHMuaXNDaGVja2VkID0gIXRoaXMucHJvcHMuaXNDaGVja2VkO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2tiJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IENoZWNrQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENoZWNrQm94RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoZWNrQm94RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENoZWNrQm94UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdja2InO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxDaGVja0JveFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IENoZWNrQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcztcbiAgICAgICAgY29uc3QgY2tiRWxlbWVudCA9IG5ldyBDaGVja0JveEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY2tiUHJvcHMgPSBja2JFbGVtZW50LnByb3BzO1xuICAgICAgICBja2JQcm9wcy5zaXplID0gcHJvcHM/LnNpemUgPz8gMTQ7XG4gICAgICAgIGNrYlByb3BzLmlzQ2hlY2tlZCA9IHByb3BzPy5pc0NoZWNrZWQgPz8gZmFsc2U7XG4gICAgICAgIGNrYlByb3BzLmdyb3VwTmFtZSA9IHByb3BzPy5ncm91cE5hbWUgPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNrYkVsZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PENoZWNrQm94RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3Q2hlY2tCb3goZS5wb3NpdGlvbi54ICsgMiwgZS5wb3NpdGlvbi55LCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5pc0NoZWNrZWQpO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDaGVja0JveFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVjdCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1Db250ZW50UHJvcHMsIFRleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCJcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtDb21tZW50RWxlbWVudH0gZnJvbSBcIi4vY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0geyBpZDogc3RyaW5nIH0+IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFA+IHtcbiAgICBzdGFydE1hcmshOiBDb21tZW50RWxlbWVudDtcbiAgICBlbmRNYXJrITogQ29tbWVudEVsZW1lbnQ7XG4gICAgZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PEUgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PiBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0PEU+IHtcbiAgICBjb21tTWFya1JlbmRlciE6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHBvczogUG9zaXRpb24gfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50RWxlbWVudCBleHRlbmRzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ8Q29tbUNvbnRlbnRQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImNvbW0tY29udGVudFwiKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBDb21tQ29udGVudFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1Db250ZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucGFkZGluZy5sZWZ0ID0gMTQ7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLnRvcCA9IDI0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczogey4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4jeaUr+aMgScpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50UmVuZGVyT2JqZWN0IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PENvbW1Db250ZW50RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBsZXQgYm9yZGVyQ29sb3IgPSB0aGlzLmVsZW1lbnQuZm9jdXMgPyAnI2ZhOGMxNicgOiAnI2ZmZDU5MSc7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYm9yZGVyQ29sb3IpO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5maWxsUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgOCwgdGhpcy5yZWN0LmhlaWdodCwgJyM4NzE0MDAnKVxuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/ojrflj5blrqHpmIXmoIforrDnmoTnu5jliLblnZDmoIdcbiAgICAgICAgbGV0IGNvbW1NYXJrUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tTWFya0xpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgY29tbU1hcmtQb3MpO1xuICAgICAgICBjb21tTWFya1Bvcy55ID0gY29tbU1hcmtMaW5lUG9zLnkgKyAyO1xuXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLCB7eDogMCwgeTogLWUuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9KTtcbiAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IGNvbW1NYXJrUG9zLnggLSBkb2NSZW5kZXJQb3MueCAtIGRvY1JlbmRlci5wYWRkaW5nLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gZS5kb2NDdHgudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoIC0gbWFyZ2luTGVmdCAtIGRvY1JlbmRlci5wYWRkaW5nLnJpZ2h0ICogMjtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbY29tbU1hcmtQb3MsIHtcbiAgICAgICAgICAgIHg6IGNvbW1NYXJrUG9zLnggKyBtYXJnaW5SaWdodCxcbiAgICAgICAgICAgIHk6IGNvbW1NYXJrUG9zLnlcbiAgICAgICAgfV0sIFsxLCAxXSwgJ3JlZCcpO1xuICAgICAgICBlLnJlbmRlci5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFt7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH0sIGUucG9zaXRpb25dLCBbMSwgMV0sICdyZWQnKTtcblxuICAgICAgICB0aGlzLnJlbmRlclRpdGxlKGUucmVuZGVyLCBlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9wUGFkZGluZyA9IDI0O1xuICAgICAgICBjb25zdCB7cHJvcHN9ID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDEyO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIGNvbnN0IGNyZWF0ZURhdGUgPSBtb21lbnQocHJvcHMuY3JlYXRlRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcbiAgICAgICAgY29uc3QgY29tbVRpdGxlID0gYCR7cHJvcHMuY3JlYXRlTmFtZX06JHtjcmVhdGVEYXRlfWA7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChjb21tVGl0bGUsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IHJlY3Q6IFJlY3QgPSB7eDogcG9zaXRpb24ueCArIHRoaXMucGFkZGluZy5sZWZ0LCB5OiBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQ6IDAsIG1heFdpZHRoOiAwfVxuICAgICAgICByZWN0LnkgKz0gKHRvcFBhZGRpbmcgLSByZWN0LmhlaWdodCkgLyAyO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoY29tbVRpdGxlLCB0ZXh0UHJvcHMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1Db250ZW50UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmUucGFkZGluZyA9IHRoaXMucGFkZGluZy5jbG9uZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50UmFuZ2VTdGF0dXMge1xuICAgIHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgY29tbUNvbnRlbnQ6IENvbW1Db250ZW50QmFzZUVsZW1lbnRcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRDb250ZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENvbW1Db250ZW50UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiY29tbS1jb250ZW50XCI7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPENvbW1Db250ZW50UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBDb21tQ29udGVudFByb3BzO1xuICAgICAgICBjb25zdCBjb21tZW50RWxlID0gbmV3IENvbW1Db250ZW50RWxlbWVudCgpO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlRGF0ZSA9IHByb3BzLmNyZWF0ZURhdGU7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlSWQgPSBwcm9wcy5jcmVhdGVJZDtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5jcmVhdGVOYW1lID0gcHJvcHMuY3JlYXRlTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnRFbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtQb3NpdGlvbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge0NvbW1Db250ZW50QmFzZUVsZW1lbnQsIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdCx9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQge0NvbW1lbnRFbGVtZW50LCBDb21tZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHtDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdH0gZnJvbSBcIi4vY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcblxuaW50ZXJmYWNlIENvbW1NYXBQcm9wcyB7XG4gICAgY29tbU1hcmtSZW5kZXI6IENvbW1lbnRSZW5kZXJPYmplY3QsXG4gICAgY29tbU1hcmtQb3M6IFBvc2l0aW9uLFxuICAgIGNvbW1Db250ZW50UmVuZGVyOiBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8YW55PixcbiAgICBjb21tQ29udGVudFBvcz86IFBvc2l0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50c1V0aWwge1xuICAgIHN0YXRpYyByZW1lYXN1cmVDb21tZW50cyhjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBjb21tV2luZG93OiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCwgY29tbUNvbnRhaW5lcjogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QsIG1hcDogQXJyYXk8eyBlbGU6IENvbW1lbnRFbGVtZW50LCByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tTWFwOiBBcnJheTxDb21tTWFwUHJvcHM+ID0gW107XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihjb21tV2luZG93LCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29tbVJlbmRlciA9IGNvbW1Db250YWluZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCBjb21tRWxlID0gY29tbVJlbmRlci5lbGVtZW50IGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtYXBDb21tID0gbWFwLmZpbmQoaXRlbSA9PiBpdGVtLmVsZS5wcm9wcy5pZCA9PT0gY29tbUVsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAobWFwQ29tbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1NYXJrTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKG1hcENvbW0ucmVuZGVyLCBtYXBDb21tLnBvcyk7XG4gICAgICAgICAgICAgICAgbWFwQ29tbS5wb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50UmVuZGVyID0gY29tbVJlbmRlci5jbG9uZSgpIGFzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxhbnk+O1xuICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueCA9IDA7XG4gICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ID0gbWFwQ29tbS5wb3MueTtcbiAgICAgICAgICAgICAgICBjb21tV2luZG93LmFkZENoaWxkKGNvbW1Db250ZW50UmVuZGVyKTtcbiAgICAgICAgICAgICAgICBjb21tTWFwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb21tTWFya1JlbmRlcjogPENvbW1lbnRSZW5kZXJPYmplY3Q+bWFwQ29tbS5yZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1NYXJrUG9zOiBtYXBDb21tLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXI6IGNvbW1Db250ZW50UmVuZGVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bUNvbW1lbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1NYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyID0gY29tbU1hcFtpIC0gMV0/LmNvbW1Db250ZW50UmVuZGVyO1xuICAgICAgICAgICAgY29uc3Qge2NvbW1Db250ZW50UmVuZGVyfSA9IG1hcDtcbiAgICAgICAgICAgIHN1bUNvbW1lbnRIZWlnaHQgKz0gY29tbUNvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgKyA1O1xuICAgICAgICAgICAgaWYgKHByZXZSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldlksIGhlaWdodDogcHJldkhlaWdodH0gPSBwcmV2UmVuZGVyLnJlY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA8IHByZXZZICsgcHJldkhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSArIHByZXZIZWlnaHQgKyA1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLmNvbW1NYXJrUmVuZGVyID0ge3JlbmRlcjogbWFwLmNvbW1NYXJrUmVuZGVyLCBwb3M6IG1hcC5jb21tTWFya1Bvc307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21tTWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDb21tZW50TWFwID0gY29tbU1hcFtjb21tTWFwLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCB7Y29tbUNvbnRlbnRSZW5kZXI6IGxhc3RDb21tQ29udGVudFJlbmRlcn0gPSBsYXN0Q29tbWVudE1hcDtcbiAgICAgICAgY29uc3Qge3JlY3Q6IGxhc3RSZWN0fSA9IGxhc3RDb21tQ29udGVudFJlbmRlcjtcblxuICAgICAgICAvL+aJueazqOWGheWuuei2heWHuuaWh+aho++8jOmcgOimgemHjeaWsOaOkuW6j1xuICAgICAgICBpZiAobGFzdFJlY3QueSArIGxhc3RSZWN0LmhlaWdodCA+IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgLy/mgLvlhoXlrrnlsI/kuo7lrrnlmajpq5jluqYs5YiZ6L+b6KGM5YCS5o6SXG4gICAgICAgICAgICAvL+WQpuWImei/m+ihjOato+aOklxuICAgICAgICAgICAgaWYgKHN1bUNvbW1lbnRIZWlnaHQgPCBkb2NSZW5kZXIucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsYXN0UmVjdC55ID0gZG9jUmVuZGVyLnJlY3QuaGVpZ2h0IC0gbGFzdFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tTWFwLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXIgPSBjb21tTWFwW2kgKyAxXT8uY29tbUNvbnRlbnRSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtjb21tQ29udGVudFJlbmRlcn0gPSBtYXA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldll9ID0gcHJldlJlbmRlci5yZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSArIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0ID4gcHJldlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSAtIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5jb21tTWFya1JlbmRlciA9IHtyZW5kZXI6IG1hcC5jb21tTWFya1JlbmRlciwgcG9zOiBtYXAuY29tbU1hcmtQb3N9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29tbVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PENvbW1Qcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY29tbScpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ29tbVByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1lbnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gMDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50UmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxDb21tZW50RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAoIWUuZG9jQ3R4LnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHRoaXMsIHt4OiBlLnBvc2l0aW9uLngsIHk6IGUucG9zaXRpb24ueX0pO1xuICAgICAgICBjb25zdCBjb2xvciA9ICcjZmY0ZDRmJztcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QoZS5wb3NpdGlvbi54IC0gMSwgcGFyYUxpbmVQb3MueSwgMiwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb2xvcilcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tZW50UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Q29tbVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImNvbW1cIjtcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Q29tbVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIENvbW1Qcm9wcztcbiAgICAgICAgZWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGVsZS5wcm9wcy5tYXJrVHlwZSA9IHByb3BzLm1hcmtUeXBlO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7Vmlld09wdGlvbnMsIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBQb3NpdGlvbiwgUmVjdH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RleHRQcm9wcywgVmFsaWRhdGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3R9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnR9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbi8qKlxuICog5pWw5o2u5YWD6aqM6K+B5o+Q56S6XG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PFZhbGlkYXRlUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3ZhbGlkYXRlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVmFsaWRhdGVQcm9wcygpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgVmFsaWRhdGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLmxlZnQgPSAxNDtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcudG9wID0gMjQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGV4dC5wcm9wcy5mb250U2l6ZSA9IDE0O1xuICAgICAgICB0ZXh0LnByb3BzLmZvbnROYW1lID0gJ+etiee6vyc7XG4gICAgICAgIHRleHQucHJvcHMuY29sb3IgPSAnIzAwMDAwMCdcbiAgICAgICAgdGV4dC50ZXh0ID0gY29udGVudDtcbiAgICAgICAgcGFyYS5hZGRDaGlsZCh0ZXh0KTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZChwYXJhKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZVJlbmRlck9iamVjdCBleHRlbmRzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxWYWxpZGF0ZUVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlckNvbG9yID0gdGhpcy5lbGVtZW50LmZvY3VzID8gJyNmYThjMTYnIDogJyNmZmQ1OTEnO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIGJvcmRlckNvbG9yKTtcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIDgsIHRoaXMucmVjdC5oZWlnaHQsICcjODcxNDAwJylcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v6I635Y+W5a6h6ZiF5qCH6K6w55qE57uY5Yi25Z2Q5qCHXG4gICAgICAgIGxldCBjb21tTWFya1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAtZS5kb2NDdHgudmlld09wdGlvbnMudHJhbnNsYXRlWVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tbU1hcmtMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIGNvbW1NYXJrUG9zKTtcbiAgICAgICAgY29tbU1hcmtQb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlciwge3g6IDAsIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZfSk7XG4gICAgICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBjb21tTWFya1Bvcy54IC0gZG9jUmVuZGVyUG9zLnggLSBkb2NSZW5kZXIucGFkZGluZy5sZWZ0O1xuICAgICAgICBjb25zdCBtYXJnaW5SaWdodCA9IGUuZG9jQ3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCAtIG1hcmdpbkxlZnQgLSBkb2NSZW5kZXIucGFkZGluZy5yaWdodCAqIDI7XG4gICAgICAgIGUucmVuZGVyLm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW2NvbW1NYXJrUG9zLCB7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH1dLCBbMSwgMV0sICdyZWQnKTtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbe1xuICAgICAgICAgICAgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgeTogY29tbU1hcmtQb3MueVxuICAgICAgICB9LCBlLnBvc2l0aW9uXSwgWzEsIDFdLCAncmVkJyk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJUaXRsZShlLnJlbmRlciwgZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVuZGVyVGl0bGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcFBhZGRpbmcgPSAyNDtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSAxMjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuZWxlbWVudC5wcm9wcy50aXRsZTtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHRpdGxlLCB0ZXh0UHJvcHMpO1xuICAgICAgICBjb25zdCByZWN0OiBSZWN0ID0ge3g6IHBvc2l0aW9uLnggKyB0aGlzLnBhZGRpbmcubGVmdCwgeTogcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0OiAwLCBtYXhXaWR0aDogMH1cbiAgICAgICAgcmVjdC55ICs9ICh0b3BQYWRkaW5nIC0gcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHRpdGxlLCB0ZXh0UHJvcHMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVmFsaWRhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZS5wYWRkaW5nID0gdGhpcy5wYWRkaW5nLmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVzaXplTGVhZlJlbmRlck9iamVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRMZWFmfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgYndpcGpzIGZyb20gXCJid2lwLWpzXCI7XG5pbXBvcnQge3dhdGNoQ2hhbmdlZH0gZnJvbSBcIi4uLy4uL25vdGlmeVwiO1xuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGUgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHM+IHtcbiAgICByZXNpemVhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwcml2YXRlIGJhckNvZGVDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gICAgcHJpdmF0ZSBjYWNoZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1iYXJjb2RlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCA9IDEwMDtcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQgPSAzMDtcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgICB3YXRjaENoYW5nZWQodGhpcy5wcm9wcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWNoZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGUoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLnRleHQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dDtcbiAgICB9XG5cbiAgICBkcmF3QmFyY29kZShyZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3M6IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlQmFyY29kZUNhY2hlKCk7XG4gICAgICAgIHJlbmRlckN0eC5jb250ZW50Q29udGV4dC5jdHguZHJhd0ltYWdlKHRoaXMuYmFyQ29kZUNhbnZhcyBhcyBIVE1MQ2FudmFzRWxlbWVudCwgcG9zLngsIHBvcy55LCB0aGlzLnByb3BzLndpZHRoLCB0aGlzLnByb3BzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQmFyY29kZUNhY2hlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuYmFyQ29kZUNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5iYXJDb2RlQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXJDb2RlQ2FudmFzID0gYndpcGpzLnRvQ2FudmFzKHRoaXMuYmFyQ29kZUNhbnZhcywge1xuICAgICAgICAgICAgYmNpZDogdGhpcy5wcm9wcy50eXBlLCAvLyBCYXJjb2RlIHR5cGVcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucHJvcHMudGV4dCB8fCBcIjAxMjM0NTY3ODlcIiwgLy8gVGV4dCB0byBlbmNvZGVcbiAgICAgICAgICAgIGhlaWdodDogMTAsIC8vIEJhciBoZWlnaHQsIGluIG1pbGxpbWV0ZXJzXG4gICAgICAgICAgICBpbmNsdWRldGV4dDogdHJ1ZSwgLy8gU2hvdyBodW1hbi1yZWFkYWJsZSB0ZXh0XG4gICAgICAgICAgICB0ZXh0eGFsaWduOiBcImNlbnRlclwiLCAvLyBBbHdheXMgZ29vZCB0byBzZXQgdGhpc1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYmFyY29kZUVsZSA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRWxlbWVudEJhcmNvZGU7XG4gICAgICAgIGJhcmNvZGVFbGUuZHJhd0JhcmNvZGUoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50QmFyY29kZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3Qge3JlbmRlcixwb3NpdGlvbjpwb3N9PWU7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN0eE5hdGl2ZSA9IGN0eC5jb250ZW50Q29udGV4dC5jdHg7XG4gICAgICAgIGN0eE5hdGl2ZS5zYXZlKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsU3R5bGUgPSAnIzY5YzBmZic7XG4gICAgICAgIGN0eE5hdGl2ZS5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmFyYyh4LCB5LCBNYXRoLmZsb29yKDQgLyA1ICogNCksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4TmF0aXZlLmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbCgpO1xuICAgICAgICBjdHhOYXRpdmUucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVtZW50QmFyY29kZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtYmFyY29kZSc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVtZW50QmFyY29kZVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlKCk7XG4gICAgICAgIGVsZS5wcm9wcy53aWR0aCA9IGRhdGEucHJvcHM/LndpZHRoIHx8IDEwMDtcbiAgICAgICAgZWxlLnByb3BzLmhlaWdodCA9IGRhdGEucHJvcHM/LmhlaWdodCB8fCAzMDtcbiAgICAgICAgZWxlLnByb3BzLnR5cGUgPSBkYXRhLnByb3BzPy50eXBlIHx8ICdjb2RlMTI4JztcbiAgICAgICAgZWxlLnByb3BzLnRleHQgPSBkYXRhLnByb3BzPy50ZXh0IHx8ICcnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIExlYWZFbGVtZW50LFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbnRleHRNZW51RWxlbWVudEV2ZW50LCBFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQ2hlY2tQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudExlYWZ9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2sgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZUNoZWNrUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWNoZWNrJyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdkZWZhdWx0J1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVDaGVja1Byb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+KCdFbGVtZW50Q29udGV4dE1lbnUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50Q2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tIYW5kbGVyKGV2dClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMuc2l6ZSArIDQ7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBvbkNsaWNrSGFuZGxlcihldnQ6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMuZWRpdGFibGUgJiYgZXZ0LmN0eC52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlvZPliY3mmK/ljZXpgInmoYblubbkuJTlvZPliY3lt7Lnu4/ooqvpgInkuK3vvIzliJnkuI3kvZzlpITnkIZcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZ3JvdXBOYW1lICYmICF0aGlzLnByb3BzLm11bHRpU2VsZWN0ICYmIHRoaXMucHJvcHMuY2hlY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XG4gICAgICAgIGNvbnN0IGRvY0N0eCA9IGV2dC5jdHg7XG4gICAgICAgIC8v5aSN6YCJ5qGG5a2Y5Zyo57uE5pe277yM5bm25LiU5Li65Y2V6YCJ5qih5byP5pe2XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmdyb3VwTmFtZSAmJiAhdGhpcy5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3QgY2ticyA9IGRvY0N0eC5nZXRDdXJyZW50Q3R4KHRoaXMpLmdldENoZWNrQm94TGlzdCh0aGlzLnByb3BzLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICBja2JzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZSghdGhpcy5wcm9wcy5jaGVja2VkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudENoZWNrIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRDaGVjaygpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRydWVWYWx1ZSA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gdHJ1ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hlY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50Q2hlY2s7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3Q2hlY2tCb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLmNoZWNrZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdSYWRpb0JveChwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuY2hlY2tlZCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVDaGVja1Byb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLWNoZWNrXCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUNoZWNrUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlQ2hlY2tQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50Q2hlY2soKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVDaGVja1Byb3BzLCBwcm9wczogRGF0YUVsZUNoZWNrUHJvcHMpOiBEYXRhRWxlQ2hlY2tQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZUNoZWNrUHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICAgICAgICBkYXRhRWxlUHJvcHMuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5ncm91cE5hbWUgPSBwcm9wcy5ncm91cE5hbWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0ID8/IGZhbHNlO1xuICAgICAgICBkYXRhRWxlUHJvcHMuY2hlY2tlZFZhbHVlID0gcHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZURhdGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnREYXRlIGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlRGF0ZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1kYXRlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZURhdGVQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50RGF0ZSB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnREYXRlKTtcbiAgICB9XG5cblxuICAgIHNldFZhbHVlKHZhbDogRGF0ZSB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodmFsLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0U3RyID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gZm9ybWF0U3RyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gZm9ybWF0U3RyO1xuICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcylcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodGhpcy5nZXRWYWx1ZSgpLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aXpeacn+agvOW8j+S4jeato+ehric7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudERhdGU+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudERhdGUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnREYXRlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50RGF0ZUZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVEYXRlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtZGF0ZVwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVEYXRlUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudERhdGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVEYXRlUHJvcHMsIHByb3BzOiBEYXRhRWxlRGF0ZVByb3BzKTogRGF0YUVsZURhdGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZURhdGVQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm1pblZhbHVlID0gcHJvcHMubWluVmFsdWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tYXhWYWx1ZSA9IHByb3BzLm1heFZhbHVlO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZm9ybWF0ID0gcHJvcHMuZm9ybWF0O1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBJbmxpbmVHcm91cElucHV0RWxlbWVudH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMsIEVsZW1lbnQsIFBvc2l0aW9ufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRHcm91cFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtDb250ZXh0TWVudUVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQgZXh0ZW5kcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxEYXRhRWxlbWVudEdyb3VwUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZ3JvdXAnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlbWVudEdyb3VwUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmVTZWxmKGRhdGEsIERhdGFFbGVtZW50R3JvdXBFbGVtZW50KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaGlkZGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxEYXRhRWxlbWVudEdyb3VwRWxlbWVudD4ge1xuICAgIHBhaW50UG9zITogUG9zaXRpb247XG5cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhaW50UG9zID0gZS5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYXJhR3JvdXBSZW5kZXJzKCk6IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3RbXSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcnM6IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3RbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyUGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnNbaV0sIFBhcmFncmFwaFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHBhcmFSZW5kZXIgPT09IGN1cnJQYXJhUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVycy5wdXNoKHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnNbaV0gYXMgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcnM7XG4gICAgfVxuXG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgZG9jQ3R4OiB7dmlld09wdGlvbnN9fSA9IGU7XG4gICAgICAgIGNvbnN0IGNhblBhaW50ID0gdGhpcy5lbGVtZW50LmlzTW91c2VlbnRlciB8fCB0aGlzLmVsZW1lbnQuaXNGb2N1c2VkO1xuICAgICAgICBpZiAoY2FuUGFpbnQgJiYgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5pbmRleE9mKHRoaXMpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUGFyYVJlbmRlcnMgPSB0aGlzLmdldEN1cnJlbnRQYXJhR3JvdXBSZW5kZXJzKCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJPZmZzZXQgPSAzO1xuICAgICAgICAgICAgaWYgKGN1cnJQYXJhUmVuZGVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kR3JvdXBSZW5kZXJQb3MgPSBjdXJyUGFyYVJlbmRlcnNbMV0ucGFpbnRQb3M7XG4gICAgICAgICAgICAgICAgaWYgKHNlY29uZEdyb3VwUmVuZGVyUG9zLnggKyBjdXJyUGFyYVJlbmRlcnNbMV0ucmVjdC53aWR0aCA+IHRoaXMucGFpbnRQb3MueCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0UG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZW5kZXIgPSBjdXJyUGFyYVJlbmRlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlbmRlclBvcyA9IGdyb3VwUmVuZGVyLnBhaW50UG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9pbnRzLnB1c2goe3g6IGdyb3VwUmVuZGVyUG9zLngsIHk6IGdyb3VwUmVuZGVyUG9zLnkgLSB2ZXJPZmZzZXR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVuZGVyUG9zLnggKyBncm91cFJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGdyb3VwUmVuZGVyUG9zLnkgLSB2ZXJPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlbmRlclBvcy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGdyb3VwUmVuZGVyUG9zLnkgKyBncm91cFJlbmRlci5yZWN0LmhlaWdodCArIHZlck9mZnNldCAqIDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ3JvdXBSZW5kZXJQb3MueCArIGdyb3VwUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZ3JvdXBSZW5kZXJQb3MueSArIGdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0ICsgdmVyT2Zmc2V0ICogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcnBQb2ludHMxID0gQ29tbW9uVXRpbC5yZXNoYXJwUG9pbnRzKHJpZ2h0UG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcnBQb2ludHMgPSBDb21tb25VdGlsLnJlc2hhcnBQb2ludHMoWy4uLmxlZnRQb2ludHMucmV2ZXJzZSgpXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoWy4uLnNoYXJwUG9pbnRzLCAuLi5zaGFycFBvaW50czEsIHNoYXJwUG9pbnRzWzBdXSwgMSwgdmlld09wdGlvbnMuZGF0YUdyb3VwQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYVJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUmVuID0gY3VyclBhcmFSZW5kZXJzW2ldO1xuICAgICAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlUmVjdChjdXJyUmVuLnBhaW50UG9zLngsIGN1cnJSZW4ucGFpbnRQb3MueSAtIHZlck9mZnNldCwgY3VyclJlbi5yZWN0LndpZHRoLCBjdXJyUmVuLnJlY3QuaGVpZ2h0ICsgdmVyT2Zmc2V0ICogMiwgdmlld09wdGlvbnMuZGF0YUdyb3VwQ29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcblxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBGYWN0b3J5IGV4dGVuZHMgRGF0YUVsZW1lbnRCYXNlRmFjdG9yeTxEYXRhRWxlbWVudEdyb3VwUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1ncm91cFwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVtZW50R3JvdXBQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIGVsZS5wcm9wcy5pZCA9IHByb3BzLmlkO1xuICAgICAgICBlbGUucHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIGVsZS5wcm9wcy5oaWRkZW4gPSBCb29sZWFuKHByb3BzLmhpZGRlbik7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG59XG5cbiIsImltcG9ydCB7XG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBJbWdMb2FkU3RhdHVzLFxuICAgIExlYWZFbGVtZW50LFxuICAgIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVzaXplTGVhZlJlbmRlck9iamVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUltYWdlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRMZWFmfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEltYWdlIGV4dGVuZHMgRGF0YUVsZW1lbnRMZWFmPERhdGFFbGVJbWFnZVByb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUltYWdlUHJvcHM7XG4gICAgc3RhdHVzOiBJbWdMb2FkU3RhdHVzID0gJ25vJztcbiAgICByZXNpemVhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtaW1nJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZUltYWdlUHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdtb3ZlJ1xuICAgICAgICB0aGlzLmZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YUltYWdlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RhdGEtZWxlLWltZycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRJbWFnZSgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShjdHg6IEVkaXRvckNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdsb2FkaW5nJztcbiAgICAgICAgICAgIGNvbnN0IG9uQ2FsbGJhY2sgPSAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5pbWFnZUxvYWRlci5sb2FkSW1hZ2UodGhpcy5wcm9wcy5zcmMsIG9uQ2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuc3JjID0gdmFsIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zcmM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUltYWdlUmVuZGVyT2JqZWN0IGV4dGVuZHMgUmVzaXplTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9uLGRvY0N0eH0gPSBlO1xuICAgICAgICBjb25zdCBkYXRhSW1nRWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRWxlbWVudEltYWdlO1xuICAgICAgICBjb25zdCBwaWNQcm9wcyA9IGRhdGFJbWdFbGVtZW50LnByb3BzO1xuICAgICAgICBpZiAoZGF0YUltZ0VsZW1lbnQuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICBkYXRhSW1nRWxlbWVudC5sb2FkSW1hZ2UoZG9jQ3R4KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YUltZ0VsZW1lbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VTb3VyY2UgPSBkb2NDdHguaW1hZ2VMb2FkZXIuZ2V0SW1hZ2UocGljUHJvcHMuc3JjKTtcbiAgICAgICAgICAgIGlmICghaW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGljUHJvcHMuYm9yZGVyID09PSAnYWxsJykge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ2JsYWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0ltYWdlKGltYWdlU291cmNlLCAwLCAwLCBpbWFnZVNvdXJjZS5uYXR1cmFsV2lkdGgsIGltYWdlU291cmNlLm5hdHVyYWxIZWlnaHQsIHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55ICsgMiwgcGljUHJvcHMud2lkdGgsIHBpY1Byb3BzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICBsZXQge3gsIHl9ID0gcG9zaXRpb247XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjb25zdCBsaW5lV2lkdGggPSA1O1xuICAgICAgICAgICAgY29uc3QgcGFpbnRDb2xvciA9ICcjMDA1MGIzJztcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IHggKyBsaW5lV2lkdGgsIHl9LCB7eCwgeX0sIHt4LCB5OiB5ICsgaGVpZ2h0fSwge1xuICAgICAgICAgICAgICAgIHg6IHggKyBsaW5lV2lkdGgsXG4gICAgICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICAgICAgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICAgICAgeCA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IHggLSBsaW5lV2lkdGgsIHl9LCB7eCwgeX0sIHt4LCB5OiB5ICsgaGVpZ2h0fSwge1xuICAgICAgICAgICAgICAgIHg6IHggLSBsaW5lV2lkdGgsXG4gICAgICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICAgICAgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUltYWdlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChlOklSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCB7cmVuZGVyLHBvc2l0aW9uOnBvc309ZTtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvcy54LCBwb3MueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzE4OTBmZicsIDAuNSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdSZXNpemVDaXJjbGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLnNhdmUoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5yZXN0b3JlKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEltZ0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlSW1hZ2VQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGEtZWxlLWltZyc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVJbWFnZVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZUltYWdlUHJvcHM7XG4gICAgICAgIGNvbnN0IHBpYyA9IG5ldyBEYXRhRWxlbWVudEltYWdlKCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMocGljLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vcGljLnByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL3BpYy5wcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9waWMucHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vcGljLnByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBwaWMucHJvcHMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgcGljLnByb3BzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgcGljLnByb3BzLnNyYyA9IHByb3BzLnNyYztcbiAgICAgICAgcGljLnByb3BzLmJvcmRlciA9IHByb3BzLmJvcmRlciB8fCAnYWxsJztcbiAgICAgICAgcmV0dXJuIHBpYztcbiAgICB9XG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCByZWFkRWxlbWVudFByb3BzLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlTGlzdFByb3BzLCBEYXRhRWxlQmFzZVRleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8RGF0YUVsZUxpc3RQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERhdGFFbGVMaXN0UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1saXN0Jyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZUxpc3RQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50TGlzdFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50TGlzdCB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnRMaXN0KTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWxzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSB2YWxzLmpvaW4oJzsnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5jbGVhcklubmVySXRlbXMoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLmNvZGUgPT09IHZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0U3ltYm9sID0gaSA8IHZhbHMubGVuZ3RoIC0gMSA/ICc7JyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gb3B0aW9uLnZhbHVlICsgc3BsaXRTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQodmFsdWVUZXh0LCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2YWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W9k+WJjeS4i+aLieahhuaYr+WNlemAieaooeW8jyzkuI3og73kvKDlhaXlpJrkuKrlgLwnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsc1swXTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5jb2RlID09PSB2YWwpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy52YWx1ZVRleHRQcm9wcy5jbG9uZSh2YWx1ZVRleHQucHJvcHMpO1xuICAgICAgICAgICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQodmFsdWVUZXh0LCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVnaW5NZWFzdXJlKCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcyk7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zcGxpdCgnOycpO1xuICAgICAgICBjb25zdCB2YWx1ZUNvZGU6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZUl0ZW0gb2YgdmFsdWVJdGVtcykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZUl0ZW0pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIHZhbHVlQ29kZS5wdXNoKG9wdGlvbi5jb2RlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNvZGUucHVzaChvcHRpb24gKyAnJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVDb2RlLmpvaW4oJzsnKVxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnRMaXN0PiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRGF0YUVsZW1lbnRMaXN0KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50TGlzdFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudExpc3RGYWN0b3J5IGV4dGVuZHMgRGF0YUVsZW1lbnRCYXNlRmFjdG9yeTxEYXRhRWxlTGlzdFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLWxpc3RcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlTGlzdFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZUxpc3RQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50TGlzdCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZUxpc3RQcm9wcywgcHJvcHM6IERhdGFFbGVMaXN0UHJvcHMpOiBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZUxpc3RQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zIHx8IFtdO1xuICAgICAgICBkYXRhRWxlUHJvcHMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG4gICAgICAgIGRhdGFFbGVQcm9wcy5kcm9wRG93blN0eWxlID0gcHJvcHMuZHJvcERvd25TdHlsZTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUJhc2VUZXh0UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50QmFzZUZhY3RvcnksIERhdGFFbGVtZW50SW5saW5lR3JvdXAsIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudFRleHQgZXh0ZW5kcyBEYXRhRWxlbWVudElubGluZUdyb3VwPERhdGFFbGVCYXNlVGV4dFByb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUJhc2VUZXh0UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS10ZXh0Jyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZUJhc2VUZXh0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudFRleHRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzICYgYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudFRleHQge1xuICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmVTZWxmKGRhdGEsIERhdGFFbGVtZW50VGV4dCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0RGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRoaXMuY2xlYXJJbm5lckl0ZW1zKCk7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgICAgICB2YWx1ZVRleHQudGV4dCA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQodmFsdWVUZXh0LCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVnaW5NZWFzdXJlKCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMsIHthbGw6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGVycm9yID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRUZXh0UmVuZGVyT2JqZWN0IGV4dGVuZHMgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnRUZXh0PiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRGF0YUVsZW1lbnRUZXh0KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudFRleHRGYWN0b3J5IGV4dGVuZHMgRGF0YUVsZW1lbnRCYXNlRmFjdG9yeTxEYXRhRWxlQmFzZVRleHRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS10ZXh0XCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZUJhc2VUZXh0UHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudFRleHQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVCYXNlVGV4dFByb3BzLCBwcm9wczogRGF0YUVsZUJhc2VUZXh0UHJvcHMpOiBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZUJhc2VUZXh0UHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy5udWxsVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBkYXRhRWxlUHJvcHMudmFsdWVUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLnZhbHVlVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZGF0YVR5cGUgPSBwcm9wcy5kYXRhVHlwZTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgTGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcblxuLyoqXG4gKiDlvZPliY3mlbDmja7lhYPlhoXlrrnplb/luqblsI/kuo7mnIDlsI/plb/luqbml7bvvIzpnIDopoHlvZPliY3lhYPntKDmkpHlvIDku6Xovr7liLDmnIDlsI/plb/luqZcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGxOdWxsU3BhY2VFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQge1xuICAgIC8v6ZyA6KaB5aGr5YWF55qE6ZW/5bqmXG4gICAgbGVuZ3RoITogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdmaWxsLW51bGwnKTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsTnVsbFNwYWNlRWxlbWVudCgpO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG51bGwpO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn0iLCJpbXBvcnQge0Jsb2NrQ29udGFpbmVyRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIEVsZW1lbnQsIHJlYWRFbGVtZW50UHJvcHMsIEVsZW1lbnRGYWN0b3J5fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7Qm9keVBhcnRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcblxuLyoqXG4gKiDnlKjkuo7lkIjlubbnl4XnqIvlvZUs5q+P5LiqcGFydOWMheWQq+avj+S7veeXheeoi+W9lWJvZHlcbiAqIOWkmuS4qnBhcnTlpITkuo7kuIDkuKpib2R55LiL6Z2iXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxCb2R5UGFydFByb3BzPiB7XG4gICAgLy/mmK/lkKbooqvkv67mlLlcbiAgICBpc01vZGlmeSE6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2JvZHktcGFydCcpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnR290Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IEJvZHlQYXJ0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIubWFyZ2luLnRvcCA9IDEwO1xuICAgICAgICByZW5kZXIubWFyZ2luLmJvdHRvbSA9IDEwO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIHBhcnRJZDogdGhpcy5wcm9wcy5wYXJ0SWQsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCgpO1xuICAgICAgICBjbG9uZS5wcm9wcy5wYXJ0SWQgPSB0aGlzLnByb3BzLnBhcnRJZDtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIGNvbnN0IGJnQ29sb3IgPSAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCB8fCB0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyKSA/ICcjZDlkOWQ5JyA6ICcjZmZmZmZmJztcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54IC0gMiwgcG9zaXRpb24ueSAtIDIsIHRoaXMucmVjdC53aWR0aCArIDQsIHRoaXMucmVjdC5oZWlnaHQgKyA0LCBiZ0NvbG9yLCA1LCAnYmxhY2snKTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLm1hcmdpbi50b3AgPSB0aGlzLm1hcmdpbi50b3A7XG4gICAgICAgIGNsb25lUmVuZGVyLm1hcmdpbi5ib3R0b20gPSB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgICAgIGlmIChjbG9uZURhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5UGFydEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxCb2R5UGFydFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnYm9keS1wYXJ0JztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Qm9keVBhcnRQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50PGFueT4ge1xuICAgICAgICBjb25zdCBib2R5UGFydCA9IGRhdGEucHJvcHM/LnBhcnRJZCB8fCAnJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCgpO1xuICAgICAgICBlbGVtZW50LnByb3BzLnBhcnRJZCA9IGJvZHlQYXJ0O1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBWaWV3T3B0aW9ucywgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIEVsZW1lbnRGYWN0b3J5LCByZWFkRWxlbWVudFByb3BzLCBSZWN0IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlTUhQcm9wcywgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IElSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRMZWFmIH0gZnJvbSBcIi4uL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbi8qKlxuICog5pyI57uP5Y+yXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudE1IIGV4dGVuZHMgRGF0YUVsZW1lbnRMZWFmPERhdGFFbGVNSFByb3BzPiB7XG4gICAgLy9wcm9wcyE6IERhdGFFbGVNSFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtbWgnKVxuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVNSFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogRGF0YUVsZU1IUHJvcHMgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdmFsLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaExheW91dEl0ZW0gPSBnZXRNSEl0ZW0odGhpcy5wcm9wcy5raW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5sZWZ0LnByb3BdID0gaXRlbXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1ttaExheW91dEl0ZW0udG9wLnByb3BdID0gaXRlbXNbMV07XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1ttaExheW91dEl0ZW0uYm90dG9tLnByb3BdID0gaXRlbXNbMl07XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1ttaExheW91dEl0ZW0ucmlnaHQucHJvcF0gPSBpdGVtc1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5hZ2UgPSB2YWw/LmFnZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZGF5cyA9IHZhbD8uZGF5cyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3ljbGVzID0gdmFsPy5jeWNsZXMgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmxhc3REYXRlID0gdmFsPy5sYXN0RGF0ZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2xvc2VBZ2UgPSB2YWw/LmNsb3NlQWdlID8/ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGxheW91dEl0ZW0gPSBnZXRNSEl0ZW0odGhpcy5wcm9wcy5raW5kKTtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucHJvcHNbbGF5b3V0SXRlbS5sZWZ0LnByb3BdfTske3RoaXMucHJvcHNbbGF5b3V0SXRlbS50b3AucHJvcF19OyR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLmJvdHRvbS5wcm9wXX07JHt0aGlzLnByb3BzW2xheW91dEl0ZW0ucmlnaHQucHJvcF19YDtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Q8RWxlbWVudD4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFSZW5kZXJNSCh0aGlzKTtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHJlbmRlck1IKHRoaXMsIHJlbmRlckN0eCwgeyB4OiAwLCB5OiAwIH0sIGZhbHNlKTtcbiAgICAgICAgaWYgKG1lYXN1cmUpIHtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gbWVhc3VyZS53aWR0aDtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IG1lYXN1cmUuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEYXRhRWxlbWVudE1IKCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRMYXlvdXRJdGVtKCk6IE1ITGF5b3V0VHlwZSB7XG4gICAgICAgIHJldHVybiBnZXRNSEl0ZW0odGhpcy5wcm9wcy5raW5kKTtcbiAgICB9XG5cbn1cblxudHlwZSBNSExheW91dFR5cGUgPSB7XG4gICAgW2tleSBpbiAnbGVmdCcgfCAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJ106IHtcbiAgICAgICAgdGlwOiAn5Yid5r2u5bm06b6EJyB8ICfooYznu4/mnJ/lpKnmlbAnIHwgJ+acq+asoeaciOe7j+aXtumXtCcgfCAn5pyI57uP5ZGo5pyf5aSp5pWwJyB8ICfpl63nu4/lubTpvoQnLFxuICAgICAgICBwcm9wOiAnYWdlJyB8ICdkYXlzJyB8ICdjeWNsZXMnIHwgJ2xhc3REYXRlJyB8ICdjbG9zZUFnZSdcbiAgICB9XG59XG5cbmNvbnN0IG1oTGF5b3V0SXRlbXM6IEFycmF5PE1ITGF5b3V0VHlwZT4gPSBbXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn5pyI57uP5ZGo5pyf5aSp5pWwJywgcHJvcDogJ2N5Y2xlcycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn6Zet57uP5bm06b6EJywgcHJvcDogJ2Nsb3NlQWdlJyB9LFxuICAgICAgICB0b3A6IHsgdGlwOiAn6KGM57uP5pyf5aSp5pWwJywgcHJvcDogJ2RheXMnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+aciOe7j+WRqOacn+WkqeaVsCcsIHByb3A6ICdjeWNsZXMnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfliJ3mva7lubTpvoQnLCBwcm9wOiAnYWdlJyB9LFxuICAgICAgICB0b3A6IHsgdGlwOiAn5pyI57uP5ZGo5pyf5aSp5pWwJywgcHJvcDogJ2N5Y2xlcycgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn6KGM57uP5pyf5aSp5pWwJywgcHJvcDogJ2RheXMnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfliJ3mva7lubTpvoQnLCBwcm9wOiAnYWdlJyB9LFxuICAgICAgICB0b3A6IHsgdGlwOiAn6Zet57uP5bm06b6EJywgcHJvcDogJ2Nsb3NlQWdlJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9XG4gICAgfVxuXVxuXG5cbmZ1bmN0aW9uIGdldE1ISXRlbShraW5kOiBzdHJpbmcpOiBNSExheW91dFR5cGUge1xuICAgIGtpbmQgPSBraW5kID8/ICdBJztcbiAgICBraW5kID0ga2luZC50b1VwcGVyQ2FzZSgpO1xuICAgIGxldCBraW5kSW5kZXggPSBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRSddLmluZGV4T2Yoa2luZCk7XG4gICAga2luZEluZGV4ID0ga2luZEluZGV4IDwgMCA/IDAgOiBraW5kSW5kZXg7XG4gICAgcmV0dXJuIG1oTGF5b3V0SXRlbXNba2luZEluZGV4XTtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFSZW5kZXJNSCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnRNSD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICByZW5kZXJNSCh0aGlzLmVsZW1lbnQsIGUucmVuZGVyLCBlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Q8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhUmVuZGVyTUgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRNSEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlTUhQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGEtZWxlLW1oJ1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlTUhQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50TUgoKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhlbGUucHJvcHMsIGRhdGEucHJvcHMgYXMgRGF0YUVsZU1IUHJvcHMpO1xuICAgICAgICBlbGUucHJvcHMuYWdlID0gZGF0YS5wcm9wcz8uYWdlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuY3ljbGVzID0gZGF0YS5wcm9wcz8uY3ljbGVzID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuZGF5cyA9IGRhdGEucHJvcHM/LmRheXMgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5sYXN0RGF0ZSA9IGRhdGEucHJvcHM/Lmxhc3REYXRlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuY2xvc2VBZ2UgPSBkYXRhLnByb3BzPy5jbG9zZUFnZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmtpbmQgPSBkYXRhLnByb3BzPy5raW5kID8/ICdBJztcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVyTUgoZWxlbWVudDogRGF0YUVsZW1lbnRNSCwgY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0sIGlzUGFpbnQ6IGJvb2xlYW4pOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0gfCB2b2lkIHtcbiAgICBsZXQgeyB4LCB5IH0gPSBwb3NpdGlvbjtcbiAgICBjb25zdCBkZWZhdWx0VGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpXG4gICAgY29uc3QgcGFkZGluZ1ZlciA9IDI7XG4gICAgY29uc3QgcGFkZGluZ0hvciA9IDU7XG4gICAgZGVmYXVsdFRleHRQcm9wcy5mb250U2l6ZSA9IDEyO1xuICAgIGRlZmF1bHRUZXh0UHJvcHMuZm9udE5hbWUgPSAn5Lu/5a6LJztcbiAgICBkZWZhdWx0VGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgY29uc3QgY3VycmVudExheW91dCA9IGdldE1ISXRlbShlbGVtZW50LnByb3BzLmtpbmQpO1xuICAgIGNvbnN0IGxlZnQgPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LmxlZnQucHJvcF0sIGN1cnJlbnRMYXlvdXQubGVmdC50aXApO1xuICAgIGNvbnN0IHRvcCA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQudG9wLnByb3BdLCBjdXJyZW50TGF5b3V0LnRvcC50aXApO1xuICAgIGNvbnN0IGJvdHRvbSA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQuYm90dG9tLnByb3BdLCBjdXJyZW50TGF5b3V0LmJvdHRvbS50aXApO1xuICAgIGNvbnN0IHJpZ2h0ID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC5yaWdodC5wcm9wXSwgY3VycmVudExheW91dC5yaWdodC50aXApO1xuICAgIGNvbnN0IGxlZnRSZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KGxlZnQsIGRlZmF1bHRUZXh0UHJvcHMpXG4gICAgY29uc3QgdG9wUmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dCh0b3AsIGRlZmF1bHRUZXh0UHJvcHMpXG4gICAgY29uc3QgYm90dG9tUmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChib3R0b20sIGRlZmF1bHRUZXh0UHJvcHMpXG4gICAgY29uc3QgcmlnaHRSZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHJpZ2h0LCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGxldCBoZWlnaHQgPSB0b3BSZWN0LmhlaWdodCArIGJvdHRvbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IG1pZGRsZVdpZHRoID0gTWF0aC5tYXgodG9wUmVjdC53aWR0aCwgYm90dG9tUmVjdC53aWR0aClcbiAgICBsZXQgd2lkdGggPSBsZWZ0UmVjdC53aWR0aCArIG1pZGRsZVdpZHRoICsgcmlnaHRSZWN0LndpZHRoO1xuICAgIGlmICghaXNQYWludCkge1xuICAgICAgICByZXR1cm4geyB3aWR0aDogd2lkdGggKyBwYWRkaW5nSG9yICogMiwgaGVpZ2h0OiBoZWlnaHQgKyBwYWRkaW5nVmVyICogMiB9XG4gICAgfVxuICAgIHggKz0gcGFkZGluZ0hvcjtcbiAgICB5ICs9IHBhZGRpbmdWZXI7XG4gICAgLy/lubTpvoRcbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQobGVmdCwgZGVmYXVsdFRleHRQcm9wcywgeCwgeSArIChoZWlnaHQgLSBsZWZ0UmVjdC5oZWlnaHQpIC8gMiwgbGVmdFJlY3Qud2lkdGgsIGxlZnRSZWN0LmhlaWdodClcbiAgICB4ICs9IGxlZnRSZWN0LndpZHRoO1xuICAgIC8v5aSp5pWwXG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHRvcCwgZGVmYXVsdFRleHRQcm9wcywgeCArIChtaWRkbGVXaWR0aCAtIHRvcFJlY3Qud2lkdGgpIC8gMiwgeSAtIDIsIHRvcFJlY3Qud2lkdGgsIHRvcFJlY3QuaGVpZ2h0KTtcbiAgICAvL+WIhuWJsue6v1xuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUoeCwgeSArIHRvcFJlY3QuaGVpZ2h0LCBtaWRkbGVXaWR0aClcbiAgICAvL+WRqOacn1xuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChib3R0b20sIGRlZmF1bHRUZXh0UHJvcHMsIHggKyAobWlkZGxlV2lkdGggLSBib3R0b21SZWN0LndpZHRoKSAvIDIsIHkgKyB0b3BSZWN0LmhlaWdodCArIDIsIGJvdHRvbVJlY3Qud2lkdGgsIGJvdHRvbVJlY3QuaGVpZ2h0KTtcbiAgICAvL+acq+asoeaXtumXtFxuICAgIHggKz0gbWlkZGxlV2lkdGg7XG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHJpZ2h0LCBkZWZhdWx0VGV4dFByb3BzLCB4LCB5ICsgKGhlaWdodCAtIGxlZnRSZWN0LmhlaWdodCkgLyAyLCByaWdodFJlY3Qud2lkdGgsIHJpZ2h0UmVjdC5oZWlnaHQpXG5cbiAgICBpZiAoY3R4LmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgICAgIHdpZHRoID0gd2lkdGggKyBwYWRkaW5nSG9yICogMjtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgcGFkZGluZ1ZlciAqIDI7XG4gICAgICAgIC8vY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDM7XG4gICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4ICsgbGluZVdpZHRoLCB5IH0sIHsgeCwgeSB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwge1xuICAgICAgICAgICAgeDogeCArIGxpbmVXaWR0aCxcbiAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICB4ID0geCArIHdpZHRoO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogeCAtIGxpbmVXaWR0aCwgeSB9LCB7IHgsIHkgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHtcbiAgICAgICAgICAgIHg6IHggLSBsaW5lV2lkdGgsXG4gICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICB9XG59XG5cblxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIEltZ0xvYWRTdGF0dXMsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgUmVzaXplTGVhZlJlbmRlck9iamVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UGljdHVyZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cblxuaW50ZXJmYWNlIElSZXNpemVFbGVtZW50IHtcbiAgICByZXNpemVhYmxlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUGljdHVyZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxQaWN0dXJlUHJvcHM+IGltcGxlbWVudHMgSVJlc2l6ZUVsZW1lbnQge1xuICAgIC8vcHJvcHM6IFBpY3R1cmVQcm9wcztcbiAgICBzdGF0dXM6IEltZ0xvYWRTdGF0dXMgPSAnbm8nO1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdpbWcnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBQaWN0dXJlUHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdtb3ZlJ1xuICAgICAgICB0aGlzLmZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUGljdHVyZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLndpZHRoICsgMjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5oZWlnaHQgKyAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWcnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBpY3R1cmVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgbG9hZEltYWdlKGN0eDogRWRpdG9yQ29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICAgICAgLy90aGlzLmltYWdlU291cmNlID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAvL3RoaXMuaW1hZ2VTb3VyY2Uuc3JjID0gdGhpcy5wcm9wcy5zcmM7XG4gICAgICAgICAgICAvLyBjb25zdCBvbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pc0xvYWQgPSAnY29tcGxldGVkJztcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJlZnJlc2hWaWV3KCdhcHBlYXJhbmNlJyk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgLy8gY29uc3Qgb25lcnJvciA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlzTG9hZCA9ICdlcnJvcic7XG4gICAgICAgICAgICAvLyAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICBjb25zdCBvbkNhbGxiYWNrID0gKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguaW1hZ2VMb2FkZXIubG9hZEltYWdlKHRoaXMucHJvcHMuc3JjLCBvbkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlUmVuZGVyT2JqZWN0IGV4dGVuZHMgUmVzaXplTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9uLGRvY0N0eH0gPSBlO1xuICAgICAgICBjb25zdCBwaWNFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIFBpY3R1cmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwaWNQcm9wcyA9IHBpY0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmIChwaWNFbGVtZW50LnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgcGljRWxlbWVudC5sb2FkSW1hZ2UoZG9jQ3R4KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGljRWxlbWVudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IGRvY0N0eC5pbWFnZUxvYWRlci5nZXRJbWFnZShwaWNQcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwaWNQcm9wcy5ib3JkZXIgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2VTb3VyY2UsIDAsIDAsIGltYWdlU291cmNlLm5hdHVyYWxXaWR0aCwgaW1hZ2VTb3VyY2UubmF0dXJhbEhlaWdodCwgcG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnkgKyAyLCBwaWNQcm9wcy53aWR0aCwgcGljUHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBpY3R1cmVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6T21pdDxJUmVuZGVyRGF0YSwgXCJuZXh0UmVuZGVyXCI+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCB7cmVuZGVyLHBvc2l0aW9uOnBvc309ZTtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvcy54LCBwb3MueSwgd2lkdGgsIGhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN0eE5hdGl2ZSA9IGN0eC5jb250ZW50Q29udGV4dC5jdHg7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsU3R5bGUgPSAnIzY5YzBmZic7XG4gICAgICAgIGN0eE5hdGl2ZS5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmFyYyh4LCB5LCBNYXRoLmZsb29yKDQgLyA1ICogNCksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4TmF0aXZlLmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbCgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgUGljdHVyZUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxQaWN0dXJlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdpbWcnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBQaWN0dXJlUHJvcHM7XG4gICAgICAgIGNvbnN0IHBpYyA9IG5ldyBQaWN0dXJlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwaWNQcm9wcyA9IHBpYy5wcm9wcztcbiAgICAgICAgcGljUHJvcHMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgcGljUHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBwaWNQcm9wcy5zcmMgPSBwcm9wcy5zcmM7XG4gICAgICAgIHBpY1Byb3BzLmJvcmRlciA9IHByb3BzLmJvcmRlciB8fCAnYWxsJztcbiAgICAgICAgcGljUHJvcHMudGl0bGUgPSBwcm9wcy50aXRsZTtcbiAgICAgICAgcGljLnByb3BzID0gcGljUHJvcHM7XG4gICAgICAgIHJldHVybiBwaWM7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtFbGVtZW50RmFjdG9yeSwgTGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UmFkaW9Cb3hQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8UmFkaW9Cb3hQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFJhZGlvQm94UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdyZCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFJhZGlvQm94UHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdkZWZhdWx0J1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50Q2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJhZGlvQm94UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFJhZGlvQm94UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMuc2l6ZSArIDQ7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBjaGFuZ2VTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBSYWRpb0JveEVsZW1lbnQgJiYgY2hpbGQgIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5wcm9wcy5pc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BzLmlzQ2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdyZCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJhZGlvQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFJhZGlvQm94RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZGlvQm94RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFJhZGlvQm94UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdyZCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSYWRpb0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCByZEVsZW1lbnQgPSBuZXcgUmFkaW9Cb3hFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBSYWRpb0JveFByb3BzO1xuICAgICAgICBjb25zdCBja2JQcm9wcyA9IHJkRWxlbWVudC5wcm9wcztcbiAgICAgICAgY2tiUHJvcHMuc2l6ZSA9IHByb3BzLnNpemUgPz8gMTQ7XG4gICAgICAgIGNrYlByb3BzLmlzQ2hlY2tlZCA9IHByb3BzLmlzQ2hlY2tlZDtcbiAgICAgICAgcmRFbGVtZW50LnByb3BzID0gY2tiUHJvcHM7XG4gICAgICAgIHJldHVybiByZEVsZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PFJhZGlvQm94RWxlbWVudD4ge1xuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3UmFkaW9Cb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIHRoaXMuZWxlbWVudC5wcm9wcy5zaXplLCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLmlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFJhZGlvQm94UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgTGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtUZXh0UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5cbmV4cG9ydCBjbGFzcyBCcmVha0VsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgdGV4dFByb3BzOiBUZXh0UHJvcHM7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2JyJyk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250U2l6ZSA9IDE0O1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250TmFtZSA9ICflrovkvZMnO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5jb2xvciA9ICcjNTk1OTU5JztcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IG5ldyBCcmVha1JlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgc3ltYm9sLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHN5bWJvbC5yZWN0LndpZHRoID0gNztcbiAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2JyJyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IEJyZWFrRWxlbWVudCgpO1xuICAgICAgICAvL2Nsb25lLnJlbmRlckN0eCA9IHRoaXMucmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBCcmVha1JlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8QnJlYWtFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHQoJ+KGkycsIHRoaXMuZWxlbWVudC50ZXh0UHJvcHMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDIwLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQnJlYWtSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgcmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCcmVha0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnYnInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBCcmVha0VsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuIiwiZXhwb3J0IGludGVyZmFjZSBDb2x1bW5QYXJ0T2Zmc2V0IGV4dGVuZHMgQ29sdW1uUGFydCB7XG4gICAgb2Zmc2V0OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5QYXJ0IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5QYXRjaCB7XG4gICAgdHlwZTogJ21vZGlmeScgfCAnaW5zZXJ0JyxcbiAgICBkYXRhOiBDb2x1bW5QYXJ0XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5QYXRjaFV0aWwge1xuICAgIHN0YXRpYyBnZXRQYXRjaFBhY2tzKGNvbHM6IEFycmF5PENvbHVtblBhcnQ+LCBzcGxpdENvbHM6IEFycmF5PENvbHVtblBhcnQ+KTogW0FycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4sIEFycmF5PEFycmF5PENvbHVtblBhcnQ+Pl0ge1xuICAgICAgICBjb25zdCBvbGRMaW5lUG9pbnRNYXAgPSB0aGlzLmdldExpbmVQb2ludE1hcChjb2xzKTtcbiAgICAgICAgLy/opoHliIblibLnmoTliJflnZDmoIdcbiAgICAgICAgY29uc3QgbmV3TGluZVBvaW50TWFwID0gdGhpcy5nZXRMaW5lUG9pbnRNYXAoc3BsaXRDb2xzKTtcbiAgICAgICAgY29uc3QgcmVzQXJyYXk6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuICAgICAgICBjb25zdCBhbGxQb2ludE1hcCA9IG9sZExpbmVQb2ludE1hcC5jb25jYXQobmV3TGluZVBvaW50TWFwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQb2ludE1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IGFsbFBvaW50TWFwW2ldO1xuICAgICAgICAgICAgcmVzQXJyYXkuYWRkKHBhcnQub2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc0FycmF5LmFkZChwYXJ0Lm9mZnNldCArIHBhcnQud2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IEFycmF5LmZyb20ocmVzQXJyYXkpLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0IC0gc2Vjb25kKTtcbiAgICAgICAgY29uc3QgcGF0Y2hzOiBBcnJheTx7IHBhcnQ6IENvbHVtblBhcnRPZmZzZXQsIHBhdGNoczogQXJyYXk8Q29sdW1uUGF0Y2g+IH0+ID0gW107XG4gICAgICAgIC8v6I635Y+W5YW25LuW6KGM55qE5ouG5YiG6KGl5LiBXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0YXJ0T2Zmc2V0ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgcGFydEVuZE9mZnNldCA9IHBvaW50c1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBqb2luUGFydCA9IG9sZExpbmVQb2ludE1hcC5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gaXRlbS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gaXRlbS5vZmZzZXQgKyBpdGVtLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA+PSBwYXJ0U3RhcnRPZmZzZXQgJiYgc3RhcnRPZmZzZXQgPCBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgICAgICAoZW5kT2Zmc2V0ID4gcGFydFN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA8PSBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPD0gcGFydFN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA+PSBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGpvaW5QYXJ0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGpvaW5QYXJ0Lm9mZnNldCA9PT0gcGFydFN0YXJ0T2Zmc2V0ICYmIGpvaW5QYXJ0Lm9mZnNldCArIGpvaW5QYXJ0LndpZHRoID09PSBwYXJ0RW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhdGNocy5maW5kKGl0ZW0gPT4gaXRlbS5wYXJ0ID09PSBqb2luUGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoLnBhdGNocy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpbnNlcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge3dpZHRoOiBwYXJ0RW5kT2Zmc2V0IC0gcGFydFN0YXJ0T2Zmc2V0LCBpbmRleDogam9pblBhcnQuaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydDogam9pblBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaHM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21vZGlmeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge3dpZHRoOiBwYXJ0RW5kT2Zmc2V0IC0gcGFydFN0YXJ0T2Zmc2V0LCBpbmRleDogam9pblBhcnQuaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+iOt+WPluW9k+WJjeihjOeahOaLhuWIhuihpeS4gVxuICAgICAgICBjb25zdCBjdXJyUm93UGF0aHM6IEFycmF5PEFycmF5PENvbHVtblBhcnQ+PiA9IFtdO1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5NYXAgPSB0aGlzLmdldExpbmVQb2ludE1hcCh0aGlzLmdldENvbHVtbihwb2ludHMpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMaW5lUG9pbnRNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdGFydE9mZnNldCA9IG5ld0xpbmVQb2ludE1hcFtpXS5vZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBwYXJ0RW5kT2Zmc2V0ID0gbmV3TGluZVBvaW50TWFwW2ldLm9mZnNldCArIG5ld0xpbmVQb2ludE1hcFtpXS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5QYXJ0cyA9IGFsbENvbHVtbk1hcC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBpdGVtLm9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSBpdGVtLm9mZnNldCArIGl0ZW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID49IHBhcnRTdGFydE9mZnNldCAmJiBzdGFydE9mZnNldCA8IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmRPZmZzZXQgPiBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA8PSBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0ID49IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdXJyUm93UGF0aHMucHVzaChqb2luUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGF0Y2hzLCBjdXJyUm93UGF0aHNdO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29sdW1uKHBvaW50czogQXJyYXk8bnVtYmVyPik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PENvbHVtblBhcnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb2ludHMubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7aW5kZXgsIHdpZHRoOiBwb2ludHNbaW5kZXggKyAxXSAtIHBvaW50c1tpbmRleF19KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3BsaXRDb2xzKHdpZHRoOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PENvbHVtblBhcnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHt3aWR0aDogTWF0aC5mbG9vcih3aWR0aCAvIGNvbHMpLCBpbmRleDogaX0pO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLndpZHRoICs9IHdpZHRoIC0gaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgMCk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRMaW5lUG9pbnRNYXAoaE1lcmdlQ29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBBcnJheTxDb2x1bW5QYXJ0T2Zmc2V0PiB7XG4gICAgICAgIGNvbnN0IGxpbmVQb2ludE1hcDogQXJyYXk8Q29sdW1uUGFydE9mZnNldD4gPSBbXTtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhNZXJnZUNvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGhNZXJnZUNvbHNbaV07XG4gICAgICAgICAgICBsaW5lUG9pbnRNYXAucHVzaCh7aW5kZXg6IGNvbC5pbmRleCwgd2lkdGg6IGNvbC53aWR0aCwgb2Zmc2V0OiB4fSk7XG4gICAgICAgICAgICB4ICs9IGNvbC53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZVBvaW50TWFwO1xuICAgIH1cbn0iLCJpbXBvcnQge1NlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbEVsZW1lbnR9IGZyb20gXCIuL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnR9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7VGFibGVSb3dFbGVtZW50fSBmcm9tIFwiLi90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHtDb2x1bW5QYXJ0LCBDb2x1bW5QYXJ0T2Zmc2V0LCBDb2x1bW5QYXRjaCwgQ29sdW1uUGF0Y2hVdGlsfSBmcm9tIFwiLi90YWJsZS1zcGxpdC1jZWxsLXBhdGNoXCI7XG5pbXBvcnQge1RhYmxlVXRpbH0gZnJvbSBcIi4vdGFibGUtdXRpbFwiO1xuXG4vKipcbiAqIOaLhuWIhuWNleWFg+agvFxuICog6JyA6YGT6Zq+77yM6Zq+5LqO5LiK6Z2S5aSp77yb5ouG5YiG5Y2V5YWD5qC877yM5aS05Y+R56eD77yM57K+56We6KGw77yM55y8552b5piP77yM6Lqr5L2T5bqf44CCXG4gKlxuICogMS7mi4bliIbkuLrlpJrliJfop4TliJnvvJrkuI3lvbHlk43lhbbku5bliJflrr3luqbvvIzlsIblvZPliY3liJflrr3luqblnYfliIZcbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlU3BsaXRDZWxsIHtcbiAgICAvKipcbiAgICAgKlxuICAgICAqIOaZrumAmuWNleWFg+agvOWPr+S7peS7u+aEj+aLhuWIhuihjOWSjOWIl1xuICAgICAqIOW3suWQiOW5tueahOWNleWFg+agvO+8jOWPr+S7peaLhuWIhuS7u+aEj+aVsOmHj+eahOWIl++8m+WPr+S7peaLhuWIhueahOaVsOmHj+W/hemhu+S4uuWQiOW5tuWNleWFg+agvOaVsOmHj+eahOe6puaVsFxuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm9jdXNDZWxsLnByb3BzLmhNZXJnZSAmJiAhZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgdGhpcy5zcGxpdE5vcm1hbENlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zcGxpdE1lcmdlQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiAoIWZvY3VzQ2VsbC5jZWxsUHJvcHMuaE1lcmdlKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB7IGVuZENvbEluZGV4IH0gPSB0aGlzLmhvclNwbGl0SG9yTm9ybWFsQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIC8vICAgICB0aGlzLnZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzLCByb3dzLCBlbmRDb2xJbmRleCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gLy/lvZPliY3ljZXlhYPmoLzkuLrmqKrlkJHlkIjlubbljZXlhYPmoLxcbiAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgIC8vICAgICBjb25zdCB7IGVuZENvbEluZGV4IH0gPSB0aGlzLmhvclNwbGl0SG9yTWVyZ2VDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgLy8gICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5pmu6YCa55qE5Y2V5YWD5qC8XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3BsaXROb3JtYWxDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcm93cyA9IHJvd3MgPCAxID8gMSA6IHJvd3M7XG4gICAgICAgIGNvbHMgPSBjb2xzIDwgMSA/IDEgOiBjb2xzO1xuICAgICAgICBpZiAocm93cyA9PT0gMSAmJiBjb2xzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0Yi5nZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBpZiAoZm9jdXNDZWxsLnByb3BzLmhNZXJnZSB8fCBmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/mi4bliIbkuLrlpJrliJdcbiAgICAgICAgaWYgKGNvbHMgPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdENlbGxXaWR0aHMgPSB0aGlzLmdldFNwbGl0Q29scyhjZWxsV2lkdGgsIGNvbHMpO1xuICAgICAgICAgICAgdGIuc2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4LCBzcGxpdENlbGxXaWR0aHNbMF0ud2lkdGgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdENlbGxXaWR0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0Yi5pbnNlcnRDb2woZm9jdXNDZWxsSW5kZXggKyBpLCBzcGxpdENlbGxXaWR0aHNbaV0ud2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+iOt+WPluS4u+WNleWFg+agvFxuICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlckNlbGwgPSByb3cuZ2V0Q2hpbGQoZm9jdXNDZWxsSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5hZGRDaGlsZChuZXdDZWxsLCBmb2N1c0NlbGxJbmRleCArIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGZvY3VzUm93SW5kZXggfHwgaSA+IGZvY3VzUm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v55Sx5pmu6YCa5Y2V5YWD5qC86L2s5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd3MgPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IFRhYmxlUm93RWxlbWVudC5jcmVhdGVSb3codGIuZ2V0Q29sc0NvdW50KCkpO1xuICAgICAgICAgICAgICAgIHRiLmFkZENoaWxkKG5ld1JvdywgZm9jdXNSb3dJbmRleCArIGkpXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdSb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IG5ld1Jvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGZvY3VzUm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopXG4gICAgICAgICAgICAgICAgICAgIGlmIChqIDwgZm9jdXNDZWxsSW5kZXggfHwgaiA+IGZvY3VzQ2VsbEluZGV4ICsgY29scyAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+e0p+aMqOS4iue6p+eahOWNleWFg+agvOWtmOWcqOaoquWQkeWQiOW5tlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaLhuWIhuWQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSByb3dzXG4gICAgICogQHBhcmFtIGNvbHNcbiAgICAgKi9cbiAgICBzdGF0aWMgc3BsaXRNZXJnZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICByb3dzID0gcm93cyA8IDEgPyAxIDogcm93cztcbiAgICAgICAgY29scyA9IGNvbHMgPCAxID8gMSA6IGNvbHM7XG4gICAgICAgIGlmIChyb3dzID09PSAxICYmIGNvbHMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsLnByb3BzLmhNZXJnZSAmJiAhZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IG1lcmdlQ29scyA9IHRoaXMuZ2V0SE1lcmdlQ29sc0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIC8v5Y+q5pyJ5ouG5YiG55qE6KGM5pWw6ZyA6KaB5ruh6Laz5q2k5p2h5Lu2XG4gICAgICAgIGlmIChtZXJnZVJvd3MgPiAxICYmIHJvd3MgPiAxKSB7XG4gICAgICAgICAgICBpZiAocm93cyAlIG1lcmdlUm93cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5b2T5YmN5ZCI5bm255qE6KGM5pWw5Li6OiR7bWVyZ2VSb3dzfSzlvZPliY3lj6/mi4bliIbnmoTooYzmlbDmmK8ke21lcmdlUm93c33nmoTnuqbmlbBgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5ouG5YiG55qE6KGM5pWw44CB5YiX5pWw562J5LqO5ZCI5bm255qE6KGM5pWw44CB5YiX5pWwXG4gICAgICAgIC8v5omn6KGM6L+Y5Y6fXG4gICAgICAgIGlmIChtZXJnZUNvbHMgPT09IGNvbHMgJiYgbWVyZ2VSb3dzID09PSByb3dzKSB7XG4gICAgICAgICAgICBUYWJsZVV0aWwucmVzdG9yZUNlbGwoc3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lcmdlQ29scyA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3Qge2VuZENvbEluZGV4fSA9IHRoaXMuaG9yU3BsaXRIb3JOb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeWNleWFg+agvOS4uuaoquWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHtlbmRDb2xJbmRleH0gPSB0aGlzLmhvclNwbGl0SG9yTWVyZ2VDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaLhuWIhuaoquWQkeato+W4uOeahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSByb3dzXG4gICAgICogQHBhcmFtIGNvbHNcbiAgICAgKi9cbiAgICBzdGF0aWMgaG9yU3BsaXRIb3JOb3JtYWxDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB7IHN0YXJ0Q29sSW5kZXg6IG51bWJlciwgZW5kQ29sSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0Yi5nZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBzcGxpdENlbGxXaWR0aHMgPSB0aGlzLmdldFNwbGl0Q29scyhjZWxsV2lkdGgsIGNvbHMpO1xuICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgsIHNwbGl0Q2VsbFdpZHRoc1swXS53aWR0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXRDZWxsV2lkdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0Yi5pbnNlcnRDb2woZm9jdXNDZWxsSW5kZXggKyBpLCBzcGxpdENlbGxXaWR0aHNbaV0ud2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIHJvd3MgPSByb3dzIDwgbWVyZ2VSb3dzID8gbWVyZ2VSb3dzIDogcm93cztcbiAgICAgICAgLy/lkJHmjIflrprnmoTliJfmj5LlhaXmi4bliIbljZXlhYPmoLxcbiAgICAgICAgaWYgKGNvbHMgPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+iOt+WPluS4u+WNleWFg+agvFxuICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlckNlbGwgPSBjdXJyUm93LmdldENoaWxkKGZvY3VzQ2VsbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyUm93LmFkZENoaWxkKG5ld0NlbGwsIGZvY3VzQ2VsbEluZGV4ICsgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZm9jdXNSb3dJbmRleCB8fCBpID49IGZvY3VzUm93SW5kZXggKyByb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+eUseaZrumAmuWNleWFg+agvOi9rOWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy52TWVyZ2UgPSBtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WcqOmAieS4reihjOS4i+aPkuWFpeaLhuWIhuihjFxuICAgICAgICAvL+WmguaenOW9k+WJjeaYr+aZrumAmuWNleWFg+agvFxuICAgICAgICBpZiAoIWZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IFRhYmxlUm93RWxlbWVudC5jcmVhdGVSb3codGIuZ2V0Q29sc0NvdW50KCkpO1xuICAgICAgICAgICAgICAgIHRiLmFkZENoaWxkKG5ld1JvdywgZm9jdXNSb3dJbmRleCArIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRDb2xJbmRleDogZm9jdXNDZWxsSW5kZXgsXG4gICAgICAgICAgICBlbmRDb2xJbmRleDogZm9jdXNDZWxsSW5kZXggKyBjb2xzIC0gMVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qiq5ZCR5ouG5YiG5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIHN0YXRpYyBob3JTcGxpdEhvck1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogeyBzdGFydENvbEluZGV4OiBudW1iZXIsIGVuZENvbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgaE1lcmdlQ29scyA9IHRoaXMuZ2V0SE1lcmdlQ29scyh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgsIGNvbHMpO1xuICAgICAgICBjb25zdCBjb2xzV2lkdGggPSBoTWVyZ2VDb2xzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIud2lkdGgsIDApXG4gICAgICAgIGNvbnN0IHNwbGl0Q29scyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNvbHNXaWR0aCwgY29scyk7XG4gICAgICAgIGNvbnN0IFtvdGhlclBhY2tzLCBjdXJyUGFja3NdID0gQ29sdW1uUGF0Y2hVdGlsLmdldFBhdGNoUGFja3MoaE1lcmdlQ29scywgc3BsaXRDb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUhvclNwbGl0Q29sdW1uUGF0Y2hQYWNrcyh0YiwgZm9jdXNSb3dJbmRleCwgMSwgb3RoZXJQYWNrcyk7XG4gICAgICAgIHRoaXMuYXBwbHlIb3JTcGxpdENvbHVtbkN1cnJQYXRjaFBhY2tzKHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCwgcm93cywgY3VyclBhY2tzKTtcbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCxcbiAgICAgICAgICAgIGVuZENvbEluZGV4OiB0aGlzLmdldFByZXBhcmVOZXdDb2xDb3VudHMob3RoZXJQYWNrcywgaE1lcmdlQ29scylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumcgOimgeaWsOWIm+W7uueahOWIl+aVsOmHj1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldFByZXBhcmVOZXdDb2xDb3VudHMocGFja3M6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4sIGhNZXJnZUNvbHM6IEFycmF5PENvbHVtblBhcnQ+KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbGFzdENvbEluZGV4ID0gaE1lcmdlQ29sc1toTWVyZ2VDb2xzLmxlbmd0aCAtIDFdLmluZGV4O1xuICAgICAgICBpZiAocGFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDb2xQYWNrID0gcGFja3MuZmluZChwYWNrID0+IHBhY2sucGFydC5pbmRleCA9PT0gbGFzdENvbEluZGV4KTtcbiAgICAgICAgaWYgKCFsYXN0Q29sUGFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RDb2xJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4ICsgbGFzdENvbFBhY2sucGF0Y2hzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2luc2VydCcpLmxlbmd0aFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW6lOeUqOaoquWQkeaLhuWIhuWNleWFg+agvOihpeS4gVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SG9yU3BsaXRDb2x1bW5QYXRjaFBhY2tzKHRiOiBUYWJsZUVsZW1lbnQsIGZvY3VzUm93SW5kZXg6IG51bWJlciwgc3BsaXRSb3dzOiBudW1iZXIsIHBhY2tzOiBBcnJheTx7IHBhcnQ6IENvbHVtblBhcnRPZmZzZXQsIHBhdGNoczogQXJyYXk8Q29sdW1uUGF0Y2g+IH0+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcGFjayA9IHBhY2tzW2ldO1xuICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBwYWNrLnBhcnQuaW5kZXg7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gcGFjay5wYXRjaHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhY2sucGF0Y2hzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChwYXRjaC50eXBlID09PSAnbW9kaWZ5Jykge1xuICAgICAgICAgICAgICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoY29sSW5kZXgsIHBhdGNoLmRhdGEud2lkdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0Y2gudHlwZSA9PT0gJ2luc2VydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q29sKGNvbEluZGV4ICsgMSwgcGF0Y2guZGF0YS53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8v5ZCR5oyH5a6a55qE5YiX5o+S5YWl5ouG5YiG5Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluS4u+WNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJSb3cuYWRkQ2hpbGQobmV3Q2VsbCwgY29sSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWtmOWcqOaoquWQkeWQiOW5tueahOWNleWFg+agvO+8jOi/m+ihjOWNleWFg+agvOWIhuaLhu+8jOaJk+ihpeS4gVxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBmb2N1c1Jvd0luZGV4XG4gICAgICogQHBhcmFtIGZvY3VzQ29sSW5leFxuICAgICAqIEBwYXJhbSBzcGxpdFJvd3NcbiAgICAgKiBAcGFyYW0gcGFja3NcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBhcHBseUhvclNwbGl0Q29sdW1uQ3VyclBhdGNoUGFja3ModGI6IFRhYmxlRWxlbWVudCwgZm9jdXNSb3dJbmRleDogbnVtYmVyLCBmb2N1c0NvbEluZXg6IG51bWJlciwgc3BsaXRSb3dzOiBudW1iZXIsIHBhY2tzOiBBcnJheTxBcnJheTxDb2x1bW5QYXJ0Pj4pOiB2b2lkIHtcbiAgICAgICAgLy/ojrflj5blvZPliY3liJfnmoTlkIjlubbooYzmlbBcbiAgICAgICAgbGV0IHZNZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDb2xJbmV4KTtcbiAgICAgICAgdk1lcmdlUm93cyA9IHZNZXJnZVJvd3MgPT09IDEgPyAwIDogdk1lcmdlUm93cztcbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSB0Yi5nZXRDaGlsZChmb2N1c1Jvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVuZFJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXggKyB2TWVyZ2VSb3dzIC0gMSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZUNvbHMgPSBwYWNrc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXJnZUNvbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gc3RhcnRSb3cuZ2V0Q2hpbGQoZm9jdXNDb2xJbmV4ICsgbWVyZ2VDb2xzWzBdLmluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBlbmRSb3cuZ2V0Q2hpbGQoZm9jdXNDb2xJbmV4ICsgbWVyZ2VDb2xzWzBdLmluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5jb21iaW5lQ2VsbHModGIsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciAobGV0IGogPSAwOyBqIDwgbWVyZ2VDb2xzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IGNlbGwgPSBmb2N1c1Jvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbal0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNlbGwuY2VsbFByb3BzLmhNZXJnZSA9IGogPT09IDAgPyAncmVzdGFydCcgOiAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBzdGFydFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGVuZFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbbWVyZ2VDb2xzLmxlbmd0aCAtIDFdLmluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5jb21iaW5lQ2VsbHModGIsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOe6teWQkeaLhuWIhuWQiOW5tueahOWNleWFg+agvFxuICAgICAqIOWcqOaMh+WumuihjOS4i+aPkuWFpeWkjeWItuihjFxuICAgICAqIOWtmOWcqFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBlbmRDb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChyb3dzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgbWVyZ2VSb3dzID0gMDtcbiAgICAgICAgaWYgKGZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgICAgIGlmIChtZXJnZVJvd3MgJSByb3dzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDlj6/mi4bliIbnmoTooYzmlbDlv4XpobvmmK8ke21lcmdlUm93c33nmoTnuqbmlbBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+S4jeWtmOWcqOWQiOW5tuihjO+8jOWImeWQkeS4i+aWsOWinuihjFxuICAgICAgICBpZiAobWVyZ2VSb3dzID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MgLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBuZXcgVGFibGVSb3dFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c1Jvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c1Jvd0NlbGwgPSBmb2N1c1Jvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy/lhbbku5bliJfopoHnurXlkJHlkIjlubZcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c0NlbGxJbmRleCB8fCBpID4gZW5kQ29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9jdXNSb3dDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzUm93Q2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy5oTWVyZ2UgPSBmb2N1c1Jvd0NlbGwucHJvcHMuaE1lcmdlO1xuICAgICAgICAgICAgICAgICAgICBuZXdSb3cuYWRkQ2hpbGQoY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRiLmFkZENoaWxkKG5ld1JvdywgZm9jdXNSb3dJbmRleCArIGkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WtmOWcqOWQiOW5tuihjO+8jOWImeaMieeFp+e6puaVsOWNleS4quWQiOW5tuWIhuaLhuS4uuWkmuS4quWQiOW5tlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8v5ouG5YiG6KGM5ZKM5ZCI5bm26KGM55u4562J77yM5YiZ5omn6KGM6L+Y5Y6fXG4gICAgICAgICAgICBpZiAocm93cyA9PT0gbWVyZ2VSb3dzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXJnZVJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChmb2N1c1Jvd0luZGV4ICsgaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gZm9jdXNDZWxsSW5kZXg7IGogPD0gZW5kQ29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lcmdlUm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICUgcm93cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoZm9jdXNDZWxsSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3BsaXRDb2xzKHdpZHRoOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PENvbHVtblBhcnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHt3aWR0aDogTWF0aC5mbG9vcih3aWR0aCAvIGNvbHMpLCBpbmRleDogaX0pO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLndpZHRoICs9IHdpZHRoIC0gaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgMCk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmqKrlkJHlkIjlubbnmoTliJdcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gY3VyclJvd0luZGV4XG4gICAgICogQHBhcmFtIGN1cnJDb2xJbmRleFxuICAgICAqIEBwYXJhbSBzcGxpdENvbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRITWVyZ2VDb2xzKHRiOiBUYWJsZUVsZW1lbnQsIGN1cnJSb3dJbmRleDogbnVtYmVyLCBjdXJyQ29sSW5kZXg6IG51bWJlciwgc3BsaXRDb2xzOiBudW1iZXIpOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGN1cnJSb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbe3dpZHRoOiB0Yi5nZXRDZWxsV2lkdGgoY3VyckNvbEluZGV4KSwgaW5kZXg6IGN1cnJDb2xJbmRleH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gY3VyckNvbEluZGV4ICsgMTsgaSA8IHRiLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe3dpZHRoOiB0Yi5nZXRDZWxsV2lkdGgoaSksIGluZGV4OiBpfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubbnmoTooYzmlbBcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRWTWVyZ2VSb3dzQ291bnQodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IDxUYWJsZUNlbGxFbGVtZW50Pig8VGFibGVSb3dFbGVtZW50PnRiLmdldENoaWxkKHJvd0luZGV4KSkuZ2V0Q2hpbGQoY29sSW5kZXgpXG4gICAgICAgIGlmIChzdGFydENlbGwucHJvcHMudk1lcmdlICE9PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChpID0gcm93SW5kZXggKyAxOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAtIHJvd0luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpIC0gcm93SW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57q15ZCR5ZCI5bm255qE6KGM5pWwXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SE1lcmdlQ29sc0NvdW50KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGNvbEluZGV4KVxuICAgICAgICBpZiAoc3RhcnRDZWxsLnByb3BzLmhNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IGNvbEluZGV4ICsgMTsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgLSBjb2xJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSAtIGNvbEluZGV4O1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZnJhbWV3b3JrL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudEN1cnNvciwgU2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7UG9zaXRpb24sIFZpZXdPcHRpb25zfSBmcm9tIFwiLi9mcmFtZXdvcmsvZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7SGl0RXZlbnRJbmZvfSBmcm9tIFwiLi9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFBhcmFncmFwaFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcbmltcG9ydCB7VGFibGVDZWxsUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd1JlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9mcmFtZXdvcmsvZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVPcHRpb25zIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIHBhZ2VQTDogbnVtYmVyO1xuICAgIHBhZ2VQUjogbnVtYmVyO1xuICAgIGRvY0xlZnQ6IG51bWJlcjtcblxufVxuXG5leHBvcnQgY2xhc3MgRG9jUnVsZSB7XG4gICAgcHJpdmF0ZSBjdHghOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBSdWxlT3B0aW9ucztcbiAgICAvL+agh+WwuumrmOW6plxuICAgIHByaXZhdGUgcnVsZUhlaWdodCA9IDMwO1xuICAgIC8v5b2T5YmN5qCH5bC655qE5L2N572uXG4gICAgcHJpdmF0ZSB0aHVtYlg6IHtcbiAgICAgICAgaW5kZW50OiBudW1iZXIsXG4gICAgICAgIGhhbmdpbmc6IG51bWJlclxuICAgIH1cbiAgICBwcml2YXRlIG1vdXNlRG93blBvcyE6IFBvc2l0aW9uIHwgbnVsbDtcbiAgICBwcml2YXRlIGluZGVudFRodW1iUG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIGhhbmdUaHVtYlBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBtb3VzZURvd25UaHVtYlR5cGU6ICdub25lJyB8ICdpbmRlbnQnIHwgJ2hhbmcnID0gJ25vbmUnO1xuICAgIHB1YmxpYyB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgcHVibGljIHNzOiBTZWxlY3Rpb25TdGF0ZVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5zcyA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIHBhZ2VQTDogMCxcbiAgICAgICAgICAgIHBhZ2VQUjogMCxcbiAgICAgICAgICAgIGRvY0xlZnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHVtYlggPSB7XG4gICAgICAgICAgICBpbmRlbnQ6IDAsXG4gICAgICAgICAgICBoYW5naW5nOiAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGV2dCkgPT4gdGhpcy5jYW52YXNNb3VzZWRvd24oZXZ0KSk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgKGV2dCkgPT4gdGhpcy5jYW52YXNNb3VzZW1vdmUoZXZ0KSk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIChldnQpID0+IHRoaXMuY2FudmFzTW91c2V1cChldnQpKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMuY2FudmFzTW91c2Vkb3duKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLmNhbnZhc01vdXNlbW92ZSk7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuY2FudmFzTW91c2V1cCk7XG4gICAgfVxuXG4gICAgc2V0UnVsZU9wdGlvbnMob3B0aW9uczogUnVsZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY29udmVydFJhdGlvID0gdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW87XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYWdlUEwgPSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy5wYWdlUEwgKiBjb252ZXJ0UmF0aW8pO1xuICAgICAgICB0aGlzLm9wdGlvbnMucGFnZVBSID0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMucGFnZVBSICogY29udmVydFJhdGlvKTtcbiAgICAgICAgLy90aGlzLnNjYWxlVmlldygpO1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgsIHt3aWR0aDogdGhpcy5nZXRQYXJlbnRXaWR0aCgpLCBoZWlnaHQ6IHRoaXMucnVsZUhlaWdodH0pO1xuICAgICAgICAvL3RoaXMuY2FudmFzLnN0eWxlLmxlZnQgPSB0aGlzLm9wdGlvbnMuZG9jTGVmdCArICdweCc7XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbGxSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgY29sb3I6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zY2FsZShzY2FsZSwgMSk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0luZGVudFRodW1iKHg6IG51bWJlciwgeTogbnVtYmVyKTogQXJyYXk8UG9zaXRpb24+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgeCAtPSA0O1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA0LCB5OiB5ICsgN30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHkgKyAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICB0aGlzLmRyYXdMaW5lKHBvaW50cyk7XG4gICAgICAgIHJldHVybiBwb2ludHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3SGFuZ1RodW1iKHg6IG51bWJlciwgeTogbnVtYmVyKTogQXJyYXk8UG9zaXRpb24+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzOiBBcnJheTx7IHg6IG51bWJlciwgeTogbnVtYmVyIH0+ID0gW107XG4gICAgICAgIHggLT0gNDtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHl9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHk6IHkgLSAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgNCwgeTogeSAtIDd9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5OiB5IC0gM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHl9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHl9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHk6IHkgKyAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5OiB5fSk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmUocG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIHBvaW50cztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gXCI4cHggJ1RpbWVzIE5ldyBSb21hbidcIjtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICByZXR1cm4gbWVhc3VyZS53aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdMaW5lKHBvaW50czogQXJyYXk8UG9zaXRpb24+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zY2FsZShzY2FsZSwgMSk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gMC41O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbGV0IHt4LCB5fSA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3VGV4dCh0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB4ID0geCAqIHNjYWxlO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSBcImFscGhhYmV0aWNcIjtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IFwiOHB4ICdUaW1lcyBOZXcgUm9tYW4nXCI7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHRleHQsIHgsIHkgKyA4IC0gMSk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliLfmlrDmlrDnmoTnirbmgIFcbiAgICAgKi9cbiAgICByZWZyZXNoUnVsZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wpIHtcbiAgICAgICAgLy8gICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMucnVsZUhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKHRoaXMub3B0aW9ucy5kb2NMZWZ0ICogdGhpcy52aWV3T3B0aW9ucy5zY2FsZSwgMCk7XG4gICAgICAgIHRoaXMuZHJhd1J1bGUoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FudmFzTW91c2Vkb3duKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjbGlja1BvcyA9IHRoaXMuZ2V0TW91c2VQb3MoZXZ0KTtcbiAgICAgICAgaWYgKHRoaXMucG9pbnRJblBvbHkoY2xpY2tQb3MsIHRoaXMuaW5kZW50VGh1bWJQb2ludHMpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9ICdpbmRlbnQnO1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjbGlja1BvcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvaW50SW5Qb2x5KGNsaWNrUG9zLCB0aGlzLmhhbmdUaHVtYlBvaW50cykpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duVGh1bWJUeXBlID0gJ2hhbmcnO1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjbGlja1BvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5pyq54K55Ye75Zyo6YeM6Z2iXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb3VzZVBvcyhldnQ6IE1vdXNlRXZlbnQpOiBQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogKGV2dC5vZmZzZXRYIC8gc2NhbGUgLSB0aGlzLm9wdGlvbnMuZG9jTGVmdCksXG4gICAgICAgICAgICB5OiBldnQub2Zmc2V0WSAvIHNjYWxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNlbW92ZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFsnaW5kZW50JywgJ2hhbmcnXS5pbmRleE9mKHRoaXMubW91c2VEb3duVGh1bWJUeXBlKSA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubW91c2VEb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5nZXRNb3VzZVBvcyhldnQpO1xuICAgICAgICBsZXQgbW92ZVggPSBjYW52YXNQb3MueCAtIHRoaXMubW91c2VEb3duUG9zLng7XG4gICAgICAgIC8v6Iez5bCR56e75YqoNXB45YaN6L+b6KGM5L+u5pS5XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IG1vdmVYICUgNTtcbiAgICAgICAgaWYgKE1hdGguYWJzKHJlbWFpbmRlcikgPCAzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVtYWluZGVyIDwgMCkge1xuICAgICAgICAgICAgICAgIG1vdmVYIC09IDUgKyByZW1haW5kZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vdmVYICs9IDUgLSByZW1haW5kZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vdmVYID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FudmFzUG9zLnggPSB0aGlzLm1vdXNlRG93blBvcy54ICsgbW92ZVg7XG4gICAgICAgIGNvbnN0IHBhcmEgPSB0aGlzLmdldEN1cnJQYXJhKCk7XG4gICAgICAgIGlmICghcGFyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJhIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9PT0gJ2luZGVudCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IHRoaXMudGh1bWJYLmluZGVudCA8IDAgPyAwIDogdGhpcy50aHVtYlguaW5kZW50O1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gdGhpcy50aHVtYlguaW5kZW50ID4gdGhpcy5vcHRpb25zLndpZHRoID8gdGhpcy5vcHRpb25zLndpZHRoIDogdGhpcy50aHVtYlguaW5kZW50O1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjYW52YXNQb3M7XG4gICAgICAgICAgICBwYXJhLnByb3BzLmluZGVudCArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMuZHJhd1J1bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPT09ICdoYW5nJykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSB0aGlzLnRodW1iWC5oYW5naW5nIDwgMCA/IDAgOiB0aGlzLnRodW1iWC5oYW5naW5nO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IHRoaXMudGh1bWJYLmhhbmdpbmcgPiB0aGlzLm9wdGlvbnMud2lkdGggPyB0aGlzLm9wdGlvbnMud2lkdGggOiB0aGlzLnRodW1iWC5oYW5naW5nO1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjYW52YXNQb3M7XG4gICAgICAgICAgICBwYXJhLnByb3BzLmhhbmdpbmcgKz0gbW92ZVg7XG4gICAgICAgICAgICB0aGlzLmRyYXdSdWxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNldXAoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMubW91c2VEb3duVGh1bWJUeXBlID0gJ25vbmUnO1xuICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHBvaW50SW5Qb2x5KHB0OiBQb3NpdGlvbiwgcG9seTogQXJyYXk8UG9zaXRpb24+KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMSwgbCA9IHBvbHkubGVuZ3RoLCBqID0gbCAtIDE7ICsraSA8IGw7IGogPSBpKSB7XG4gICAgICAgICAgICBpZiAoKChwb2x5W2ldLnkgPD0gcHQueSAmJiBwdC55IDwgcG9seVtqXS55KSB8fCAocG9seVtqXS55IDw9IHB0LnkgJiYgcHQueSA8IHBvbHlbaV0ueSkpICYmIHB0LnggPCAoKHBvbHlbal0ueCAtIHBvbHlbaV0ueCkgKiAocHQueSAtIHBvbHlbaV0ueSkpIC8gKHBvbHlbal0ueSAtIHBvbHlbaV0ueSkgKyBwb2x5W2ldLngpIHtcbiAgICAgICAgICAgICAgICBjID0gIWNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOe7mOWItlxuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd1J1bGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0UnVsZU1hcmtzUG9zKCk7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICAvL3RoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgLy90aGlzLmN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgICAgICB0aGlzLmZpbGxSZWN0KDAsIDAsIHRoaXMub3B0aW9ucy5wYWdlUEwsIHRoaXMucnVsZUhlaWdodCwgXCJyZ2IoMTk4LDE5OCwxOTgpXCIpO1xuICAgICAgICB0aGlzLmZpbGxSZWN0KHRoaXMub3B0aW9ucy53aWR0aCAtIHRoaXMub3B0aW9ucy5wYWdlUFIsIDAsIHRoaXMub3B0aW9ucy5wYWdlUFIsIHRoaXMucnVsZUhlaWdodCwgXCJyZ2IoMTk4LDE5OCwxOTgpXCIpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDUwOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGdhbnRXaWR0aCA9IDIwO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBqICogZ2FudFdpZHRoO1xuICAgICAgICAgICAgaWYgKHggPiB0aGlzLm9wdGlvbnMud2lkdGgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHkgPSAxMDtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHt4LCB5fSwge3gsIHk6IHkgKyAxMH0pO1xuICAgICAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gdGhpcy5tZWFzdXJlVGV4dChqICsgXCJcIik7XG4gICAgICAgICAgICB0aGlzLmRyYXdUZXh0KGogKyAnJywgeCArIE1hdGguZmxvb3IoKGdhbnRXaWR0aCAtIHRleHRXaWR0aCkgLyAyKSwgeSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZW50VGh1bWJQb2ludHMgPSB0aGlzLmRyYXdJbmRlbnRUaHVtYih0aGlzLnRodW1iWC5pbmRlbnQsIDYpO1xuICAgICAgICB0aGlzLmhhbmdUaHVtYlBvaW50cyA9IHRoaXMuZHJhd0hhbmdUaHVtYih0aGlzLnRodW1iWC5oYW5naW5nLCAyNSk7XG4gICAgICAgIC8vdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVsZU1hcmtzUG9zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgc3RhcnRIaXRJbmZvfSA9IHRoaXMuc3M7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IDA7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5kZW50ID0gcGFyYS5wcm9wcy5pbmRlbnQ7XG4gICAgICAgIGNvbnN0IGhhbmdpbmcgPSBwYXJhLnByb3BzLmhhbmdpbmc7XG4gICAgICAgIGNvbnN0IHtzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXh9ID0gdGhpcy5zcy5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvO1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXgpO1xuICAgICAgICAvL+W9k+WJjeauteiQvVxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGN1cnNvclBvc2kucmVuZGVyLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/lvZPliY3mrrXokL3kvY3nva5cbiAgICAgICAgY29uc3QgcGFyYVJlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocGFyYVJlbmRlcilcbiAgICAgICAgLy/lvZPliY3mlofmoaNcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHBhcmFSZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/lvZPliY3mlofmoaPkvY3nva5cbiAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIpXG4gICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IHBhcmFSZW5kZXJQb3MueCAtIGRvY1JlbmRlclBvcy54ICsgaW5kZW50O1xuICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gcGFyYVJlbmRlclBvcy54IC0gZG9jUmVuZGVyUG9zLnggKyBoYW5naW5nO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZG9jTGVmdCA9IGRvY1JlbmRlci5yZWN0LnggKyBkb2NSZW5kZXIucGFyZW50LnJlY3QueDtcbiAgICAgICAgdGhpcy5zZXRQYXJlbnRNYXJrc1BvcyhwYXJhUmVuZGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJQYXJhKCk6IFBhcmFncmFwaEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zcztcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBhcmVudE1hcmtzUG9zKGNoaWxkUmVuZGVyOiBSZW5kZXJPYmplY3QpOiBBcnJheTx7IHBvczogUG9zaXRpb24gfT4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8eyBwb3M6IFBvc2l0aW9uIH0+ID0gW107XG4gICAgICAgIGNvbnN0IHBhcmVudFJlbmRlciA9IGNoaWxkUmVuZGVyLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRSZW5kZXIgfHwgcGFyZW50UmVuZGVyIGluc3RhbmNlb2YgRG9jdW1lbnRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50UmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihwYXJlbnRSZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcGFyZW50UmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGNlbGxSZW5kZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3Q2VsbE1hcmsocG9zLnggLSBkb2NSZW5kZXJQb3MueCwgMCwgY2VsbFJlbmRlci5wYWRkaW5nLmxlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5zZXRQYXJlbnRNYXJrc1BvcyhwYXJlbnRSZW5kZXIpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0NlbGxNYXJrKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgdGhpcy5maWxsUmVjdCh4LCB5LCB3aWR0aCwgdGhpcy5ydWxlSGVpZ2h0LCAncmdiKDE5OCwxOTgsMTk4LDAuMiknKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gMC4zO1xuICAgICAgICAgICAgdGhpcy5jdHguc2V0TGluZURhc2goWzAuNSwgMC41LCAwLjVdKTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4ICsgaSwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIGksIHkgKyB0aGlzLnJ1bGVIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNjYWxlVmlldygpOiB2b2lkIHtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAvLyAgICAgLy90aGlzLmNhbnZhcy5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnY2VudGVyIGNlbnRlcic7XG4gICAgLy8gICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY2FudmFzLnBhcmVudEVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgLy8gICAgIGlmIChzY2FsZSA9PT0gMSkge1xuICAgIC8vICAgICAgICAgcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3RoaXMudmlld09wdGlvbnMuc2NhbGV9KWA7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgLy9cblxufVxuIiwiaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0VW5pdHMge1xuICAgIHNvdXJjZVNpemU6IG51bWJlcixcbiAgICBhY3R1YWxTaXplOiBudW1iZXIsXG4gICAgY2hhcjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlbmRlckNvbnRleHRDb250cmFjdCB7XG4gICAgY29udGVudENvbnRleHQ6IFBhaW50Q29udGVudDtcbiAgICBvdmVybGF5c0NvbnRleHQ6IFBhaW50Q29udGVudDtcbiAgICBtYWluQ29udGV4dDogUGFpbnRDb250ZW50O1xuICAgIGRyYXdNb2RlOiAndmlldycgfCAncHJpbnQnO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgY29tbWl0KHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZFxuICAgIGluaXQocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkXG4gICAgdHJhbihlZmZlY3Q6ICgpID0+IHZvaWQpOiB2b2lkO1xuICAgIHVwZGF0ZShwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNvbnRleHRUeXBlID0gSVJlbmRlckNvbnRleHRDb250cmFjdDtcblxuZXhwb3J0IHR5cGUgSVNldENhbnZhc1BhZ2VQcm9wcyA9XG4gICAge1xuICAgICAgICB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcjsgc2NhbGU6IG51bWJlcjtcbiAgICB9O1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyQ29udGV4dCBpbXBsZW1lbnRzIElSZW5kZXJDb250ZXh0Q29udHJhY3Qge1xuICAgIGNvbnRlbnRDb250ZXh0ITogUGFpbnRDb250ZW50O1xuICAgIG92ZXJsYXlzQ29udGV4dCE6IFBhaW50Q29udGVudDtcbiAgICBkcmF3TW9kZTogJ3ZpZXcnIHwgJ3ByaW50JyA9ICd2aWV3JztcbiAgICBwcml2YXRlIGNvbnRlbnRPZmZDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBwcml2YXRlIG92ZXJsYXlPZmZDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBtYWluQ29udGV4dDogUGFpbnRDb250ZW50KSB7IH1cblxuICAgIC8v5Yid5aeL5YyW5Yib5bu657uY5Yi257G7XG4gICAgaW5pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnRPZmZDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5T2ZmQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHRoaXMuY29udGVudENvbnRleHQgPSBuZXcgUGFpbnRDb250ZW50KHRoaXMuY29udGVudE9mZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0ID0gbmV3IFBhaW50Q29udGVudCh0aGlzLm92ZXJsYXlPZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgICAgICB0aGlzLnVwZGF0ZShwYWdlU2V0dGluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw57uY5Yi255S75biD5aSn5bCPXG4gICAgICovXG4gICAgdXBkYXRlKHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMuY29udGVudE9mZkNhbnZhcywgdGhpcy5jb250ZW50Q29udGV4dC5jdHgsIHBhZ2VTZXR0aW5nKVxuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLm92ZXJsYXlPZmZDYW52YXMsIHRoaXMub3ZlcmxheXNDb250ZXh0LmN0eCwgcGFnZVNldHRpbmcpXG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMubWFpbkNvbnRleHQuY3R4LmNhbnZhcywgdGhpcy5tYWluQ29udGV4dC5jdHgsIHBhZ2VTZXR0aW5nKVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBjb21taXQocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gcGFnZVNldHRpbmc7XG4gICAgICAgIC8vdGhpcy5tYWluQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm1haW5DdHguY2FudmFzLndpZHRoLCB0aGlzLm1haW5DdHguY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5T2ZmQ2FudmFzLndpZHRoIHx8ICF0aGlzLm92ZXJsYXlPZmZDYW52YXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/kv67lpI3nlLHkuo7lgY/np7vph4/nmoTpl67popjvvIzlr7zoh7Tpu5HovrnnmoTpl67pophcbiAgICAgICAgdGhpcy5tYWluQ29udGV4dC5maWxsUmVjdCgtMSwgLTEsIHdpZHRoICsgMiwgaGVpZ2h0ICsgMiwgJyNmZmYnKVxuICAgICAgICB0aGlzLm1haW5Db250ZXh0LmRyYXdJbWFnZSh0aGlzLm92ZXJsYXlPZmZDYW52YXMsIDAsIDAsIEVsZW1lbnRVdGlsLmdldERwck51bWJlcih3aWR0aCksIEVsZW1lbnRVdGlsLmdldERwck51bWJlcihoZWlnaHQpKTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ2RyYXdJbWFnZScpO1xuICAgICAgICB0aGlzLm1haW5Db250ZXh0LmRyYXdJbWFnZSh0aGlzLmNvbnRlbnRPZmZDYW52YXMsIDAsIDAsIEVsZW1lbnRVdGlsLmdldERwck51bWJlcih3aWR0aCksIEVsZW1lbnRVdGlsLmdldERwck51bWJlcihoZWlnaHQpKTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ2RyYXdJbWFnZScpO1xuICAgIH1cblxuICAgIHRyYW4oZWZmZWN0OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICAgIGVmZmVjdCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlzQ29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhaW50Q29udGVudCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICB9XG5cbiAgICBzZXRHbG9iYWxBbHBoYShhbHBoYTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gYWxwaGE7XG4gICAgfVxuXG4gICAgZ2V0R2xvYmFsQWxwaGEoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4Lmdsb2JhbEFscGhhO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgZHJhd1RleHQodGV4dDogc3RyaW5nLCB0ZXh0UHJvcHM6IFRleHRQcm9wcywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMuYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0UHJvcHMuYmFja2dyb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0ZXh0UHJvcHMuY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBjb25zdCB2ZXJ0SGVpZ2h0ID0gdGV4dFByb3BzLnZlcnRBbGlnbiA9PT0gJ3N1cGVyc2NyaXB0JyA/IDAgOiBoZWlnaHQ7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHRleHQsIHgsIHkgKyB2ZXJ0SGVpZ2h0IC0gaGVpZ2h0IC8gNyk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgaWYgKHRleHRQcm9wcy5saW5ldGhyb3VnaCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gMikpLCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSArIGhlaWdodCwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRQcm9wcy5vdmVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaWxsQ2lyY3VsYXIoeDogbnVtYmVyLCB5OiBudW1iZXIsIHI6IG51bWJlciwgY29sb3I6IHN0cmluZyA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCByLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGRyYXdUZXh0VW5pdHModGV4dEdyb3VwUmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRleHRFbGUgPSB0ZXh0R3JvdXBSZW5kZXIuZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSB0ZXh0RWxlLnByb3BzO1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRleHRHcm91cFJlbmRlci5yZWN0O1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIC8v5qC55o2u5LiK57qn57un5om/6L+b6KGM57uY5Yi2XG4gICAgICAgIGlmKHRleHRQcm9wcy5jb2xvcil7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0ZXh0UHJvcHMuY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMuYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0UHJvcHMuYmFja2dyb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRQcm9wcy5saW5ldGhyb3VnaCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gMikpLCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSArIGhlaWdodCwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRQcm9wcy5vdmVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3SG9yaUxpbmUoeCwgeSwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhvclggPSAwO1xuICAgICAgICBsZXQgdmVydEhlaWdodCA9IGhlaWdodCAtIChoZWlnaHQgLyA3KTtcbiAgICAgICAgaWYgKHRleHRQcm9wcy52ZXJ0QWxpZ24gPT09ICdzdXBlcnNjcmlwdCcpIHtcbiAgICAgICAgICAgIC8v5YiwdG9wXG4gICAgICAgICAgICB2ZXJ0SGVpZ2h0IC09IHRleHRQcm9wcy5mb250U2l6ZSAqIDIgLyA1O1xuICAgICAgICAgICAgLy90b3DlnKjlkJHkuIrmlLbnvKkgLXRvcOihjOmXtOi3nVxuICAgICAgICAgICAgLy92ZXJ0SGVpZ2h0IC09IHRleHRQcm9wcy5mb250U2l6ZSAqIHRoaXMuZ2V0UGFyYUxpbmVIZWlnaHQodGV4dEVsZSkgLyAyMFxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEdyb3VwUmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdW5pdCA9IHRleHRHcm91cFJlbmRlci50ZXh0TWVhc3VyZXNbaV07XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsVGV4dCh1bml0LmNoYXIsIHggKyBob3JYLCB5ICsgdmVydEhlaWdodCk7XG4gICAgICAgICAgICBob3JYICs9IHVuaXQuYWN0dWFsU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgZ2V0UGFyYUxpbmVIZWlnaHQodGV4dEVsZTogVGV4dEdyb3VwRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUodGV4dEVsZSwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgICAgIGlmICghcGFyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrog73mib7liLDniLbnuqfmrrXokL3lhYPntKAnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhLnByb3BzLmxpbmVIZWlnaHQ7XG4gICAgfVxuXG4gICAgbWVhc3VyZVRleHQodGV4dDogc3RyaW5nLCB0ZXh0UHJvcHM6IFRleHRQcm9wcyk6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRleHRQcm9wcy5jb2xvcjtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGNvbnN0IHRleHRNZWFzdXJlID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCk7XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB0ZXh0TWVhc3VyZS53aWR0aCwgaGVpZ2h0OiB0ZXh0UHJvcHMuZm9udFNpemUgfTtcbiAgICB9XG5cblxuICAgIG1lYXN1cmVUZXh0VW5pdHModW5pdHM6IEFycmF5PFRleHRVbml0cz4sIHRleHRQcm9wczogVGV4dFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBjb25zdCBsZXR0ZXJTcGFjZSA9IHRleHRQcm9wcy5sZXR0ZXJTcGFjZSA/PyAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyID0gdW5pdHNbaV07XG4gICAgICAgICAgICBjb25zdCB0ZXh0TWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KGNoYXIuY2hhcik7XG4gICAgICAgICAgICBjaGFyLmFjdHVhbFNpemUgPSB0ZXh0TWVhc3VyZS53aWR0aCArIGxldHRlclNwYWNlO1xuICAgICAgICAgICAgY2hhci5zb3VyY2VTaXplID0gdGV4dE1lYXN1cmUud2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBzYXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgfVxuXG4gICAgcmVzdG9yZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHNjYWxlKHJhdGlvOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2NhbGUocmF0aW8sIHJhdGlvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDljIXoo4Xku7vliqHmiafooYzvvJpzYXZlLT5leGVjLT5yZXN0b3JlXG4gICAgICogQHBhcmFtIGVmZmVjdFxuICAgICAqL1xuICAgIHRyYW4oZWZmZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZWZmZWN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0cm9rZVJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBzdHJva2VDb2xvciA9ICdibGFjaycsIHN0cm9rZVdpZHRoID0gMSk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gc3Ryb2tlV2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgLy90aGlzLnN0cm9rZUxpbmVzKFt7IHgsIHkgfSwgeyB4OiB4ICsgd2lkdGgsIHkgfSwgeyB4OiB4ICsgd2lkdGgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHsgeCwgeSB9XSwgc3Ryb2tlV2lkdGgsIHN0cm9rZUNvbG9yKTtcbiAgICB9XG5cbiAgICAvL3N0cm9rZVJlY3RJbWFnZURhdGEoeDpudW1iZXIpXG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbmsLTlubPnur9cbiAgICAgKiBAcGFyYW0geCBcbiAgICAgKiBAcGFyYW0geSBcbiAgICAgKiBAcGFyYW0gd2lkdGggXG4gICAgICogQHBhcmFtIGxpbmVDb2xvciBcbiAgICAgKiBAcGFyYW0gbGluZVdpZHRoIFxuICAgICAqL1xuICAgIGRyYXdIb3JpTGluZSh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgbGluZUNvbG9yID0gJ2JsYWNrJywgbGluZVdpZHRoID0gMSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0cm9rZUxpbmVzKFt7IHgsIHkgfSwgeyB4OiB4ICsgd2lkdGgsIHkgfV0sIGxpbmVXaWR0aCwgbGluZUNvbG9yKTtcbiAgICB9XG5cbiAgICBmaWxsUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGZpbGxDb2xvciA9ICd3aGl0ZScsIHNoYWRvd0JsdXIgPSAwLCBzaGFkb3dDb2xvciA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgeCA9IE1hdGguY2VpbCh4KTtcbiAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgeCArPSAwLjU7XG4gICAgICAgIHkgKz0gMC41O1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguc2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7XG4gICAgICAgIHRoaXMuY3R4LnNoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBzdHJva2VMaW5lcyhsaW5lczogQXJyYXk8UG9zaXRpb24+LCB3aWR0aCA9IDEsIHN0cm9rZUNvbG9yID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmN0eC5saW5lQ2FwID0gJ3JvdW5kJztcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB7IHgsIHkgfSA9IGxpbmVzW2ldO1xuICAgICAgICAgICAgeCA9IE1hdGguY2VpbCh4KTtcbiAgICAgICAgICAgIHkgPSBNYXRoLmNlaWwoeSk7XG4gICAgICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgICAgIHkgKz0gMC41O1xuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBmaWxsTGluZXMobGluZXM6IEFycmF5PFBvc2l0aW9uPiwgd2lkdGggPSAxLCBmaWxsQ29sb3IgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB7IHgsIHkgfSA9IGxpbmVzW2ldO1xuICAgICAgICAgICAgeCA9IE1hdGguY2VpbCh4KTtcbiAgICAgICAgICAgIHkgPSBNYXRoLmNlaWwoeSk7XG4gICAgICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgICAgIHkgKz0gMC41O1xuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cblxuICAgIGRyYXdDaGVja0JveCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0cm9rZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgJ2JsYWNrJywgMSk7XG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goeyB4OiB4ICsgKE1hdGguY2VpbCh3aWR0aCAvIDQpKSwgeTogeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIH0pO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoIC8gMikpLCB5OiB5ICsgKE1hdGguZmxvb3IoaGVpZ2h0ICogMyAvIDQpKSB9KTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goeyB4OiB4ICsgKE1hdGguY2VpbCh3aWR0aCAqIDMgLyA0KSksIHk6IHkgKyAoTWF0aC5jZWlsKGhlaWdodCAvIDQpKSB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlTGluZXMobGluZXMsIDIsICdyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdSYWRpb0JveCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB4ID0geCArIE1hdGguZmxvb3Iod2lkdGggLyAyKTtcbiAgICAgICAgeSA9IHkgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpO1xuICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGggLyAyKTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9ICdibGFjayc7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5hcmMoeCwgeSwgd2lkdGgsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5hcmMoeCwgeSwgTWF0aC5mbG9vcih3aWR0aCAvIDUgKiAzKSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuXG4gICAgZHJhd0ltYWdlKGltYWdlOiBDYW52YXNJbWFnZVNvdXJjZSwgc3g6IG51bWJlciwgc3k6IG51bWJlcik6IHZvaWQ7XG4gICAgZHJhd0ltYWdlKGltYWdlOiBDYW52YXNJbWFnZVNvdXJjZSwgc3g6IG51bWJlciwgc3k6IG51bWJlciwgc3c6IG51bWJlciwgc2g6IG51bWJlcik6IHZvaWQ7XG4gICAgZHJhd0ltYWdlKGltYWdlOiBDYW52YXNJbWFnZVNvdXJjZSwgc3g6IG51bWJlciwgc3k6IG51bWJlciwgc3c6IG51bWJlciwgc2g6IG51bWJlciwgZHg6IG51bWJlciwgZHk6IG51bWJlciwgZHc6IG51bWJlciwgZGg6IG51bWJlcik6IHZvaWQ7XG4gICAgZHJhd0ltYWdlKGltYWdlOiBDYW52YXNJbWFnZVNvdXJjZSwgc3g6IG51bWJlciwgc3k6IG51bWJlciwgc3c/OiBudW1iZXIsIHNoPzogbnVtYmVyLCBkeD86IG51bWJlciwgZHk/OiBudW1iZXIsIGR3PzogbnVtYmVyLCBkaD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHN3ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2ggIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkeCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGR5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZHcgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkaCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzaCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgc3gsIHN5LCBzdywgc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0Rhc2hMaW5lKHBvaW50czogQXJyYXk8UG9zaXRpb24+LCBsaW5lRGFzaDogQXJyYXk8bnVtYmVyPiwgbGluZUNvbG9yID0gJ2JsYWNrJywgbGluZVdpZHRoID0gMSk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNldExpbmVEYXNoKGxpbmVEYXNoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBsaW5lQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyB4LCB5IH0gPSBwb2ludHNbaV07XG4gICAgICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgICAgIHkgKz0gMC41O1xuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICByb3VuZFJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlciB8IHsgdGw6IG51bWJlciwgdHI6IG51bWJlciwgYnI6IG51bWJlciwgYmw6IG51bWJlciB9LCBmaWxsOiBib29sZWFuLCBzdHJva2U6IGJvb2xlYW4pIHtcbiAgICAgICAgeCArPSAwLjU7XG4gICAgICAgIHkgKz0gMC41O1xuICAgICAgICBpZiAodHlwZW9mIHN0cm9rZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0cm9rZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByYWRpdXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByYWRpdXMgPSB7IHRsOiByYWRpdXMsIHRyOiByYWRpdXMsIGJyOiByYWRpdXMsIGJsOiByYWRpdXMgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0UmFkaXVzID0geyB0bDogMCwgdHI6IDAsIGJyOiAwLCBibDogMCB9O1xuICAgICAgICAgICAgZm9yICh2YXIgc2lkZSBpbiBkZWZhdWx0UmFkaXVzKSB7XG4gICAgICAgICAgICAgICAgcmFkaXVzW3NpZGVdID0gcmFkaXVzW3NpZGVdIHx8IGRlZmF1bHRSYWRpdXNbc2lkZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4ICsgcmFkaXVzLnRsLCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCAtIHJhZGl1cy50ciwgeSk7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMudHIpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLmJyKTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIHJhZGl1cy5iciwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgcmFkaXVzLmJsLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzLmJsKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkgKyByYWRpdXMudGwpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMudGwsIHkpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgaWYgKGZpbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgY2xpcCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmNsaXAoKTtcbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBWaWV3T3B0aW9ucywgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50LCB0ZXh0TGluZVJlbmRlck1vZGUgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5cbi8qKlxuKiDmloflrZfooYzmuLLmn5PmqKHlvI9cbueUqOS6juWMu+WYseaJk+WNsOaooeW8j1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXh0TGluZVJlbmRlcihlbGU6IEVsZW1lbnQsIG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnRleHRSb3dMaW5lTW9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGUgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgdGV4dExpbmVSZW5kZXJNb2RlKGVsZSwgb3B0aW9ucywgcmVuZGVyQ3R4KTtcbiAgICAgICAgcmVtZWFzdXJlUGFyZW50UmVuZGVycyhlbGUubWVhc3VyZVJlbmRlcilcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcnVuVGV4dExpbmVSZW5kZXIoZWxlLmdldENoaWxkKGkpLCBvcHRpb25zLCByZW5kZXJDdHgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1lYXN1cmVQYXJlbnRSZW5kZXJzKHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyIGFzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0KVxuICAgIHJlbWVhc3VyZVBhcmVudFJlbmRlcnMocmVuZGVyLnBhcmVudClcblxufSIsImltcG9ydCB7IHJ1blRleHRMaW5lUmVuZGVyIH0gZnJvbSBcIi4vZG9jdW1lbnQtdGV4dGxpbmUtbW9kZVwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgQmxvY2tDb250ZW50RWxlbWVudCxcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgSW5saW5lR3JvdXBFbGVtZW50LFxuICAgIExlYWZFbGVtZW50LFxuICAgIE1vZGlmeUZsYWcsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVCYXNlUHJvcHMsIERhdGFFbGVCYXNlVGV4dFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBzdXBwcmVzc1RyYWNraW5nIH0gZnJvbSBcIi4vZWxlbWVudC10cmFjZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LFxuICAgIEJsb2NrQ29udGVudFJlbmRlck9iamVjdCxcbiAgICBCcmFuY2hSZW5kZXJPYmplY3QsXG4gICAgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsXG4gICAgTGVhZlJlbmRlck9iamVjdCxcbiAgICBSZW5kZXJPYmplY3Rcbn0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW50ZXJmYWNlIElDdXRMaW5lRGF0YSB7IGZpcnN0SXRlbTogUmVuZGVyT2JqZWN0IHwgbnVsbCwgbGFzdEl0ZW06IFJlbmRlck9iamVjdCB8IG51bGwsIGJyPzogYm9vbGVhbiB9XG4vKipcbiAqIOa1i+mHj+mYtuaute+8jOeUn+aIkFJlbmRlci1VSVxuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudE1lYXN1cmUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSkgeyB9XG5cbiAgICBtZWFzdXJlRG9jdW1lbnQoZG9jdW1lbnQ6IERvY3VtZW50RWxlbWVudCk6IERvY3VtZW50UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgLy/mtYvph4/pmLbmrrXvvIzlr7nkuo7nqbrmrrXokL3kvJrmj5LlhaXmrrXokL3nrKblj7fvvIzmlrDooajmoLzkvJrmj5LlhaXnqbrmrrXokL3vvIzmraTml7bkuI3pnIDopoHorrDlvZXoioLngrnnmoTmm7TmlLnvvIzku6XmnIDlpKfnmoToioLngrnov5vooYzorrDlvZVcbiAgICAgICAgcmV0dXJuIHN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGVhclBhaW50Q2FjaGUoZG9jdW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gdGhpcy5tZWFzdXJlQ29udHJvbChkb2N1bWVudCwgdGhpcy5vcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLnNldE1lYXN1cmVDb21wbGV0ZWRNb2RpZnlGbGFnKGRvY3VtZW50KTtcbiAgICAgICAgICAgIHJ1blRleHRMaW5lUmVuZGVyKGRvY3VtZW50LCB0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgIHJldHVybiBkb2NSZW5kZXI7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgbWVhc3VyZUNvbnRyb2woZWxlbWVudDogRWxlbWVudCwgbWF4V2lkdGg6IG51bWJlcik6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAoZWxlbWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lm1lYXN1cmVSZW5kZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCbG9ja0NvbnRlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXIgPSBlbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSByZW5kZXI7XG4gICAgICAgICAgICAvL+a1i+mHj+mYtuaute+8jOWPqumZkOWItuacgOWkp+WuveW6puWNs+WPr1xuICAgICAgICAgICAgcmVuZGVyLnNldFJlbmRlcldpZHRoKG1heFdpZHRoKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZVBhcmFncmFwaChlbGVtZW50LCByZW5kZXIgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZW5kZXI7XG5cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvY2tDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5maXhCbG9ja0NvbnRhaW5lcihlbGVtZW50KTtcbiAgICAgICAgICAgIGxldCByZW5kZXI6IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk1vZGlmeSB8fCBlbGVtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2spIHtcbiAgICAgICAgICAgICAgICBFbGVtZW50VXRpbC5maXhCbG9ja0NvbnRhaW5lcihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlbmRlciA9IGVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpIGFzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyLnJlY3QubWF4V2lkdGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnNldFJlbmRlcldpZHRoKG1heFdpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVuZGVyIGlzIG51bGwnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gcmVuZGVyO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJNYXhXaWR0aCA9IHJlbmRlci5nZXRJbm5lck1heFdpZHRoKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2tDb250ZW50RUxlbWVudCA9IGNoaWxkIGFzIEJsb2NrQ29udGVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSB0aGlzLm1lYXN1cmVDb250cm9sKGJsb2NrQ29udGVudEVMZW1lbnQsIGlubmVyTWF4V2lkdGgpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW5kZXIuYWRkQ2hpbGQoY2hpbGRSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJlbmRlcik7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUn+aIkOauteiQvSBVSSDmoJFcbiAgICAgKiBAcGFyYW0gcGFyYSBcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqL1xuICAgIG1lYXN1cmVQYXJhZ3JhcGgocGFyYTogUGFyYWdyYXBoRWxlbWVudCwgcmVuZGVyOiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgRWxlbWVudFV0aWwuZml4UGFyYWdyYXBoQ29udGVudChwYXJhKTtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0czogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyYS5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSB0aGlzLmdldElubGluZUdyb3VwUmVuZGVySXRlbShjaGlsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5wdXNoKGNoaWxkLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlUmVuZGVyID0gY2hpbGQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdHMucHVzaChjaGlsZC5tZWFzdXJlUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZWFzdXJlSW5uZXJQYXJhZ3JhcGgocmVuZGVyLCBwYXJhLCByZW5kZXJPYmplY3RzKTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5q616JC9VUnlhYPntKDvvIzov5vooYzmjpLliJdcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBwYXJhZ3JhcGggXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdHMgXG4gICAgICovXG4gICAgbWVhc3VyZUlubmVyUGFyYWdyYXBoKHJlbmRlcjogUGFyYWdyYXBoUmVuZGVyT2JqZWN0LCBwYXJhZ3JhcGg6IFBhcmFncmFwaEVsZW1lbnQsIHJlbmRlck9iamVjdHM6IEFycmF5PFJlbmRlck9iamVjdD4pIHtcbiAgICAgICAgbGV0IGxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgIC8v6KGM5YaF5qGGXG4gICAgICAgIGNvbnN0IGlubmVyTGluZVJlY3RzOiBBcnJheTxQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkSW5uZXJMaW5lRnVuYyA9IChsaW5lUmVjdDogUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlubmVyTGluZVJlY3RzLnB1c2gobGluZVJlY3QpO1xuICAgICAgICAgICAgaWYgKGxpbmVSZWN0LnJlY3QubWF4V2lkdGggPD0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbGluZVJlY3QucmVjdC5tYXhXaWR0aCBpcyAnICsgbGluZVJlY3QucmVjdC5tYXhXaWR0aClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbm5lckxpbmVSZWN0cy5pbmRleE9mKGxpbmVSZWN0KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGgucHJvcHMuaW5kZW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIC09IHBhcmFncmFwaC5wcm9wcy5pbmRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIC09IHBhcmFncmFwaC5wcm9wcy5oYW5naW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBhZGRJbm5lckxpbmVGdW5jKGxpbmVSZWN0KTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3Vyckl0ZW0gPSByZW5kZXJPYmplY3RzW2krK107XG4gICAgICAgIGNvbnN0IGluQ2xvc2VCb2R5ID0gcGFyYWdyYXBoLnBhcmVudC50eXBlID09PSAnYm9keSc7XG4gICAgICAgIHdoaWxlIChjdXJySXRlbSkge1xuICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJdGVtID0gcmVuZGVyT2JqZWN0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgZmlyc3RJdGVtLCBsYXN0SXRlbSwgYnIgfSA9IHRoaXMuY3V0UmVuZGVySXRlbShjdXJySXRlbSwgbmV4dEl0ZW0sIG1heFdpZHRoIC0gbGluZVJlY3QucmVjdC53aWR0aCwgbGluZVJlY3QubGVuZ3RoID09PSAwLCBpbkNsb3NlQm9keSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdHMuc3BsaWNlKGksIDAsIGxhc3RJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyckl0ZW0gPSBmaXJzdEl0ZW07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgICAgICAgICAgYWRkSW5uZXJMaW5lRnVuYyhsaW5lUmVjdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lUmVjdC5hZGRDaGlsZChjdXJySXRlbSk7XG4gICAgICAgICAgICBjdXJySXRlbS5yZWN0LnggPSBsaW5lUmVjdC5yZWN0LndpZHRoO1xuICAgICAgICAgICAgaWYgKGN1cnJJdGVtLnJlY3QuaGVpZ2h0ID4gbGluZVJlY3QucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsaW5lUmVjdC5yZWN0LmhlaWdodCA9IGN1cnJJdGVtLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZVJlY3QucmVjdC53aWR0aCArPSBjdXJySXRlbS5yZWN0LndpZHRoO1xuICAgICAgICAgICAgaWYgKGJyKSB7XG4gICAgICAgICAgICAgICAgLy9saW5lUmVjdC5yZWN0Lm1heFdpZHRoID0gbGluZVJlY3QucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICBsaW5lUmVjdCA9IHJlbmRlci5jcmVhdGVMaW5lUmVjdCgpO1xuICAgICAgICAgICAgICAgIGFkZElubmVyTGluZUZ1bmMobGluZVJlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3Vyckl0ZW0gPSByZW5kZXJPYmplY3RzW2krK107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lckxpbmVSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJMaW5lUmVjdCA9IGlubmVyTGluZVJlY3RzW2ldIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdC5yZWN0LnggPSB0aGlzLmdldFBhcmFMaW5lUmVjdFN0YXJ0WChpbm5lckxpbmVSZWN0cy5sZW5ndGgsIGksIHBhcmFncmFwaCwgcmVuZGVyLCBpbm5lckxpbmVSZWN0KTtcbiAgICAgICAgICAgIC8v6ZmQ5Yi25pyA5aSn6KGM6auYXG4gICAgICAgICAgICBjb25zdCBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5mbG9vcigxNCAqIDEuMyk7XG4gICAgICAgICAgICAvL2ZpbGxMaW5lSGVpZ2h05aGr5YWF6KGM6auYXG4gICAgICAgICAgICBsZXQgZmlsbExpbmVIZWlnaHQgPSBNYXRoLmNlaWwoaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCAqIChwYXJhZ3JhcGgucHJvcHMubGluZUhlaWdodCAtIDEpKTtcbiAgICAgICAgICAgIGZpbGxMaW5lSGVpZ2h0ID0gZmlsbExpbmVIZWlnaHQgPiBtYXhMaW5lSGVpZ2h0ID8gbWF4TGluZUhlaWdodCA6IGZpbGxMaW5lSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgKyBmaWxsTGluZUhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBNYXRoLmNlaWwoZmlsbExpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgIGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbm5lckxpbmVSZWN0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVhZiA9IGlubmVyTGluZVJlY3QuZ2V0Q2hpbGQoaik7XG4gICAgICAgICAgICAgICAgbGVhZi5yZWN0LnkgPSBpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0IC0gcGFkZGluZ0JvdHRvbSAtIGxlYWYucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3JlbmRlci5yZWN0LmhlaWdodCArPSBsaW5lUmVjdC5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IG91dHRlckxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgICAgICBvdXR0ZXJMaW5lUmVjdC5yZWN0LndpZHRoID0gb3V0dGVyTGluZVJlY3QucmVjdC5tYXhXaWR0aCBhcyBudW1iZXI7XG4gICAgICAgICAgICBvdXR0ZXJMaW5lUmVjdC5hZGRDaGlsZChpbm5lckxpbmVSZWN0KTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShvdXR0ZXJMaW5lUmVjdCwgZmFsc2UpO1xuICAgICAgICAgICAgcmVuZGVyLmFkZENoaWxkKG91dHRlckxpbmVSZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmrrXokL3ooYzluIPlsYDmqKrlkJHlnZDmoIfotbflp4vkvY3nva7vvIzooqvmrrXokL10ZXh0LWFsaWdu5b2x5ZONXG4gICAgICovXG4gICAgZ2V0UGFyYUxpbmVSZWN0U3RhcnRYKGNvdW50ZXI6IG51bWJlciwgcGFyYUxpbmVJbmRleDogbnVtYmVyLCBwYXJhRWxlbWVudDogUGFyYWdyYXBoRWxlbWVudCwgcGFyYVJlbmRlck9iamVjdDogUGFyYWdyYXBoUmVuZGVyT2JqZWN0LCBwYXJhTGluZVJlbmRlcjogUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICAvL+W3puWvuem9kO+8jOmmluihjOe8qei/m1xuICAgICAgICBsZXQgaW5kZW50ID0gcGFyYUVsZW1lbnQucHJvcHMuaW5kZW50O1xuICAgICAgICAvL+WtmOWcqOmhueebruespuWPt1xuICAgICAgICBpZiAocGFyYUxpbmVJbmRleCA+IDApIHtcbiAgICAgICAgICAgIGluZGVudCA9IHBhcmFFbGVtZW50LnByb3BzLmhhbmdpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpblNwYWNlID0gcGFyYVJlbmRlck9iamVjdC5yZWN0LndpZHRoIC0gcGFyYUxpbmVSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwocmVtYWluU3BhY2UgLyAyKSArIGluZGVudDtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhRWxlbWVudC5wcm9wcy50ZXh0QWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpblNwYWNlID0gcGFyYVJlbmRlck9iamVjdC5yZWN0LndpZHRoIC0gcGFyYUxpbmVSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgIHJldHVybiByZW1haW5TcGFjZSArIGluZGVudDtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhRWxlbWVudC5wcm9wcy50ZXh0QWxpZ24gPT09ICdqdXN0aWZ5Jykge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVW5pdENvdW50ID0gdGhpcy5nZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lUmVuZGVyKTtcbiAgICAgICAgICAgIGlmIChwYXJhTGluZUluZGV4ID09PSBjb3VudGVyIC0gMSB8fCByZW5kZXJVbml0Q291bnQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhY2VXaWR0aCA9ICg8bnVtYmVyPnBhcmFMaW5lUmVuZGVyLnJlY3QubWF4V2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoKSAvIChyZW5kZXJVbml0Q291bnQgLSAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWxpZ25KdXN0aWZ5KHBhcmFMaW5lUmVuZGVyLCAwLCBzcGFjZVdpZHRoKTtcbiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Lik56uv5a+56b2QXG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKiBAcGFyYW0gY291bnQgXG4gICAgICogQHBhcmFtIHNwYWNlV2lkdGggXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBbGlnbkp1c3RpZnkocmVuZGVyOiBSZW5kZXJPYmplY3QsIGNvdW50OiBudW1iZXIsIHNwYWNlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSZW5kZXIgPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gdGhpcy5zZXRBbGlnbkp1c3RpZnkoY3VyclJlbmRlciwgY291bnQsIHNwYWNlV2lkdGgpO1xuICAgICAgICAgICAgICAgIGN1cnJSZW5kZXIucmVjdC54ID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgd2lkdGggKz0gY3VyclJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBjb3VudCA9PT0gMCA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIudGV4dE1lYXN1cmVzW2ldLmFjdHVhbFNpemUgPSByZW5kZXIudGV4dE1lYXN1cmVzW2ldLmFjdHVhbFNpemUgKyBzcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW5kZXIubWVhc3VyZSgpO1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggKz0gc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5q616JC96KGM5riy5p+T5Y2V5L2N5Liq5pWwLOWtl+espumcgOimgeiuoeeul+S4uuWtl+espumVv+W6plxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVuZGVyVW5pdExlbmd0aChwYXJhTGluZTogUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHBhcmFMaW5lIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHBhcmFMaW5lIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFMaW5lLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFMaW5lIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhTGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IHRoaXMuZ2V0UmVuZGVyVW5pdExlbmd0aChwYXJhTGluZS5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrliLDovr7orqHnrpfkvY3nva4nKVxuICAgIH1cblxuXG4gICAgZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGl0ZW06IElubGluZUdyb3VwRWxlbWVudCk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBjb25zdCBpbmxpbmVHcm91cFJlbmRlciA9IGl0ZW0uY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpIGFzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAoIWlubGluZUdyb3VwUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gaXRlbS5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNoaWxkLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlUmVuZGVyID0gY2hpbGQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmFkZENoaWxkKGNoaWxkLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVSZW5kZXIgPSB0aGlzLmdldElubGluZUdyb3VwUmVuZGVySXRlbShjaGlsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5hZGRDaGlsZChpdGVtLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICAvL+mZkOWItuacgOWwj+mVv+W6plxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIHtcbiAgICAgICAgICAgIC8v6ZyA6KaB5aGr5YWFbnVsbC10ZXh0XG4gICAgICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBudWxsVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgbnVsbFRleHQuaXNEZWNvcmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgbnVsbFRleHQuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlVGV4dFByb3BzID0gKDxhbnk+aXRlbSkucHJvcHMgYXMgRGF0YUVsZUJhc2VUZXh0UHJvcHM7XG4gICAgICAgICAgICAgICAgbnVsbFRleHQudGV4dCA9IGJhc2VUZXh0UHJvcHMubnVsbFRleHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGJhc2VUZXh0UHJvcHMubnVsbFRleHRQcm9wcy5jbG9uZShudWxsVGV4dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVsbFRleHRSZW5kZXIgPSBudWxsVGV4dC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuaW5zZXJ0Q2hpbGQobnVsbFRleHRSZW5kZXIsIDEpO1xuICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGlubGluZUdyb3VwUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gKDxhbnk+aXRlbSkucHJvcHMgYXMgRGF0YUVsZUJhc2VQcm9wcztcbiAgICAgICAgICAgIGxldCBtaW5MZW5ndGggPSBwcm9wcy5taW5MZW5ndGggPz8gMTQ7XG4gICAgICAgICAgICBtaW5MZW5ndGggPSBtaW5MZW5ndGggPCAxNCA/IDE0IDogbWluTGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmIGlubGluZUdyb3VwUmVuZGVyLnJlY3Qud2lkdGggPCBtaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsTnVsbFNwYWNlID0gbmV3IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QoKTtcbiAgICAgICAgICAgICAgICBmaWxsTnVsbFNwYWNlLnJlY3Qud2lkdGggPSBtaW5MZW5ndGggLSBpbmxpbmVHcm91cFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbGxOdWxsU3BhY2UucmVjdC5oZWlnaHQgPSBpbmxpbmVHcm91cFJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5pbnNlcnRDaGlsZChmaWxsTnVsbFNwYWNlLCBpbmxpbmVHcm91cFJlbmRlci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGlubGluZUdyb3VwUmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5saW5lR3JvdXBSZW5kZXI7XG4gICAgfVxuXG5cbiAgICBjdXRSZW5kZXJJdGVtKHJlbmRlcjogUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoICYmIHJlbmRlciBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dFRleHRSZW5kZXIocmVuZGVyLCBuZXh0UmVuZGVyLCBsaW1pdFdpZHRoLCBsaW5lRW1wdHksIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0RmlsbE51bGxSZW5kZXIocmVuZGVyLCBsaW1pdFdpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA8IGxpbWl0V2lkdGggfHwgbGluZUVtcHR5IHx8IHJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdicicgfHwgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiByZW5kZXIsIGxhc3RJdGVtOiBudWxsLCBicjogcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ2JyJyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9O1xuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIElubGluZUdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRJbmxpbmVHcm91cFJlbmRlckl0ZW0ocmVuZGVyLCBsaW1pdFdpZHRoLCBsaW5lRW1wdHksIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+WIsOi+vuiuoeeul+i+ueeVjCcpXG4gICAgfVxuXG4gICAgY3V0VGV4dFJlbmRlcihyZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgbmV4dFJlbmRlcjogUmVuZGVyT2JqZWN0LCBsaW1pdFdpZHRoOiBudW1iZXIsIGxpbmVFbXB0eTogYm9vbGVhbiwgaW5DbG9zZUJvZHk6IGJvb2xlYW4pOiBJQ3V0TGluZURhdGEge1xuICAgICAgICBsZXQgc3VtV2lkdGggPSAwO1xuICAgICAgICBjb25zdCBjdXRSZW5kZXIgPSByZW5kZXIuY2xvbmUoKSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgIGN1dFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKDsgaSA8IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bVdpZHRoICs9IHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgIGlmIChzdW1XaWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZUVtcHR5ICYmIGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5ZCO572u5qCH54K55aSE55CGXG4gICAgICAgIGkgPSB0aGlzLnBhdGNoSGFuZGxlUG9zdFB1bmN0dWF0aW9uKHJlbmRlciwgbmV4dFJlbmRlciwgaSwgaW5DbG9zZUJvZHksIGxpbmVFbXB0eSk7XG4gICAgICAgIC8v5YmN572u5qCH54K55aSE55CGXG4gICAgICAgIGkgPSB0aGlzLnBhdGNoSGFuZGxlTGVhZGluZ1B1bmN0dWF0aW9uKHJlbmRlciwgaSwgbGluZUVtcHR5KTtcbiAgICAgICAgaWYgKGkgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY3V0UmVuZGVyLnRleHRNZWFzdXJlcyA9IHJlbmRlci50ZXh0TWVhc3VyZXMuc3BsaWNlKDAsIGkpO1xuICAgICAgICByZW5kZXIubWVhc3VyZSgpO1xuICAgICAgICBjdXRSZW5kZXIubWVhc3VyZSgpO1xuICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IGN1dFJlbmRlciwgbGFzdEl0ZW06IHJlbmRlciwgYnI6IHRydWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbliY3nva7moIfngrks5YmN572u5qCH54K55LiN6IO95Ye6546w5Zyo5pyr5bC+XG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKiBAcGFyYW0gaSBcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhdGNoSGFuZGxlTGVhZGluZ1B1bmN0dWF0aW9uKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBpOiBudW1iZXIsIGxpbmVFbXB0eTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChpID09PSAxICYmIGxpbmVFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udGFpbkxlYWRpbmdQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzW2ldPy5jaGFyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGktLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIblkI7nva7moIfngrnvvIzlkI7nva7moIfngrnkuI3og73lh7rnjrDlnKjooYzpppZcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBpIFxuICAgICAqIEBwYXJhbSBsaW5lRW1wdHkgXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXRjaEhhbmRsZVBvc3RQdW5jdHVhdGlvbihyZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgbmV4dFJlbmRlcjogUmVuZGVyT2JqZWN0LCBpOiBudW1iZXIsIGluQ2xvc2VCb2R5OiBib29sZWFuLCBsaW5lRW1wdHk6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaSA9PT0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAvL+e0p+i3n+edgOeahOWtl+espuWMheWQq+WQjue9ruagh+eCuVxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU3RhcnRTeW1ib2xJblRleHRTdGFydChuZXh0UmVuZGVyKSkge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5DbG9zZUJvZHkgJiYgdGhpcy5jb250YWluUG9zdFB1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaV0/LmNoYXIpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250YWluUG9zdFB1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaSArIDFdPy5jaGFyKSkge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGkgPD0gMSkge1xuICAgICAgICAgICAgICAgIC8vZGVidWdnZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IDEgJiYgdGhpcy5jb250YWluUG9zdFB1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaV0/LmNoYXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWMheWQq+WQjue9ruagh+eCuVxuICAgICAqIEBwYXJhbSBzdHIgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250YWluUG9zdFB1bmN0dWF0aW9uKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAnISksLjo7P119wqjCt8uHy4nigJXigJbigJnigJ3igKbiiLbjgIHjgILjgIPjgIXjgInjgIvjgI3jgI/jgJHjgJXjgJfvvIHvvILvvIfvvInvvIzvvI7vvJrvvJvvvJ/vvL3vvYDvvZzvvZ3vvZ7vv6AnLmluZGV4T2Yoc3RyKSA+IC0xO1xuICAgIH1cblxuICAgIC8v5piv5ZCm5YyF5ZCr5YmN572u5qCH54K5XG4gICAgcHJpdmF0ZSBjb250YWluTGVhZGluZ1B1bmN0dWF0aW9uKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAn4oCY4oCc44CI44CK44CM44CO44CQ44CU44CW77yI77y7772b77+hJy5pbmRleE9mKHN0cikgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmnKzlvIDlpLTmmK/lkKbljIXlkKvlkI7nva7moIfngrlcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgY29udGFpbmVyU3RhcnRTeW1ib2xJblRleHRTdGFydChyZW5kZXI6IFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICAvL3JldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1swXS5jaGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3V0RmlsbE51bGxSZW5kZXIocmVuZGVyOiBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0LCBsaW1pdFdpZHRoOiBudW1iZXIpOiBJQ3V0TGluZURhdGEge1xuICAgICAgICBpZiAobGltaXRXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY3V0UmVuZGVyID0gbmV3IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QoKTtcbiAgICAgICAgICAgIGN1dFJlbmRlci5yZWN0LndpZHRoID0gbGltaXRXaWR0aDtcbiAgICAgICAgICAgIGN1dFJlbmRlci5yZWN0LmhlaWdodCA9IHJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcmVuZGVyLnJlY3Qud2lkdGggLSBsaW1pdFdpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBjdXRSZW5kZXIsIGxhc3RJdGVtOiByZW5kZXIgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiByZW5kZXIsIGxhc3RJdGVtOiBudWxsIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihjOWGhee8lue7hOWFg+e0oOi2heWHuuihjOWGheWPr+eUqOepuumXtO+8jOmcgOimgeagueaNruWJqeS9meepuumXtOmVv+W6pui/m+ihjOaIquaWrVxuICAgICAqL1xuICAgIGN1dElubGluZUdyb3VwUmVuZGVySXRlbShyZW5kZXI6IElubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBsaW1pdFdpZHRoOiBudW1iZXIsIGVtcHR5TGluZTogYm9vbGVhbiwgaW5DbG9zZUJvZHk6IGJvb2xlYW4pOiBJQ3V0TGluZURhdGEge1xuICAgICAgICBjb25zdCBjdXRSZW5kZXIgPSByZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgbGV0IGJyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnJlbmRlci5nZXRJdGVtcygpXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCArIGNoaWxkLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3RJdGVtLCBsYXN0SXRlbSwgYnI6IGNoaWxkQnIgfSA9IHRoaXMuY3V0UmVuZGVySXRlbShjaGlsZCwgaXRlbXNbaSArIDFdLCBsaW1pdFdpZHRoIC0geCwgZW1wdHlMaW5lICYmIGN1dFJlbmRlci5sZW5ndGggPT09IDAsIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGZpcnN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2l0ZW1zLnB1c2gobGFzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXRlbXMuc3BsaWNlKGkgKyAxLCAwLCBsYXN0SXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiciA9IGNoaWxkQnIgfHwgYnI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v6L2v5o2i6KGM56ymXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmVsZW1lbnQgJiYgY2hpbGQuZWxlbWVudC50eXBlID09PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHggKyBjaGlsZC5yZWN0LndpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpcnN0SXRlbSwgYnI6IGNoaWxkQnIgfSA9IHRoaXMuY3V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkLCBsaW1pdFdpZHRoIC0geCwgZW1wdHlMaW5lICYmIGN1dFJlbmRlci5sZW5ndGggPT09IDAsIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGZpcnN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnIgPSBjaGlsZEJyIHx8IGJyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHggKz0gY2hpbGQucmVjdC53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1dFJlbmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogbnVsbCwgbGFzdEl0ZW06IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihjdXRSZW5kZXIpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihyZW5kZXIpO1xuICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IGN1dFJlbmRlciwgbGFzdEl0ZW06IHJlbmRlci5sZW5ndGggPyByZW5kZXIgOiBudWxsLCBiciB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruaUuea1i+mHj+WujOavleWQjueahOWFg+e0oOeKtuaAgVxuICAgICAqIEBwYXJhbSBlbGUgXG4gICAgICovXG4gICAgc2V0TWVhc3VyZUNvbXBsZXRlZE1vZGlmeUZsYWcoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVhc3VyZUNvbXBsZXRlZE1vZGlmeUZsYWcoZWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbGUubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTm9uZTtcbiAgICB9XG5cbiAgICBjbGVhclBhaW50Q2FjaGUoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGVsZS5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclBhaW50Q2FjaGUoZWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuZE1lYXN1cmVzKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZE1lYXN1cmVzKGVsZS5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG4iLCJpbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlIH0gZnJvbSAnLi9kb2N1bWVudC1zZWxlY3Rpb24nXG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBSYW5nZVV0aWwge1xuXG4gICAgc3RhdGljIGdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kQ29udHJvbDogTGVhZkVsZW1lbnQsIGVuZE9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWJsZVNlbGVjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgdGJFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRDb250cm9sID09PSBlbmRDb250cm9sICYmIHN0YXJ0Q29udHJvbC5wYXJlbnQgPT09IGFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sbGFwc2VkUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSB0aGlzLmdldFN0YXJ0Rm9yYmFja1RyZWVEYXRhKHN0YXJ0Q29udHJvbCwgYW5jZXN0b3JDb21tb25Db250cm9sLCBudWxsLCBzdGFydE9mZnNldCkuc2VsZWN0ZWRDaGlsZHJlblswXTtcbiAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSB0aGlzLmdldEVuZEZvcndhcmRUcmVlRGF0YShlbmRDb250cm9sLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIG51bGwsIGVuZE9mZnNldCkuc2VsZWN0ZWRDaGlsZHJlblswXTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5nZXRDaGlsZEluZGV4KHN0YXJ0UmFuZ2UudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wuZ2V0Q2hpbGRJbmRleChlbmRSYW5nZS50YXJnZXQpO1xuICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0SW5kZXggKyAxLCBlbmRJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnJhbmdlRXF1YWxzKHN0YXJ0UmFuZ2UsIGVuZFJhbmdlKSkge1xuICAgICAgICAgICAgY29tbW9uUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KHN0YXJ0UmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tbW9uUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KHN0YXJ0UmFuZ2UpO1xuICAgICAgICAgICAgY29tbW9uUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKGVuZFJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKGNvbW1vblJhbmdlKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vblJhbmdlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDb2xsYXBzZWRSYW5nZShzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRPZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGFuY2VzdG9yQ29tbW9uQ29udHJvbCxcbiAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSxcbiAgICAgICAgICAgIGVuZE9mZnNldDogc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxLFxuICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW3RoaXMuZ2V0Q2hpbGRUcmVlRGF0YShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5booajmoLzpgInljLrnmoTlhoXlrrlcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sIFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldCBcbiAgICAgKiBAcGFyYW0gZW5kQ29udHJvbCBcbiAgICAgKiBAcGFyYW0gZW5kT2Zmc2V0IFxuICAgICAqIEBwYXJhbSB0YiBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFibGVTZWxlY3Rpb25SYW5nZShzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kT2Zmc2V0OiBudW1iZXIsIHRiOiBUYWJsZUVsZW1lbnQpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbCAmJiBlbmRDZWxsICYmIHN0YXJ0Q2VsbC5wYXJlbnQucGFyZW50ID09PSB0YiAmJiBlbmRDZWxsLnBhcmVudC5wYXJlbnQgPT09IHRiKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRSb3dJbmRleCA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBlbmRSb3dJbmRleCA9IGVuZENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgc3RhcnRDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGVuZENvbEluZGV4ID0gZW5kQ2VsbC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29sSW5kZXggPiBlbmRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgIFtzdGFydENvbEluZGV4LCBlbmRDb2xJbmRleF0gPSBbZW5kQ29sSW5kZXgsIHN0YXJ0Q29sSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXJ0Um93SW5kZXggPiBlbmRSb3dJbmRleCkge1xuICAgICAgICAgICAgICAgIFtzdGFydFJvd0luZGV4LCBlbmRSb3dJbmRleF0gPSBbZW5kUm93SW5kZXgsIHN0YXJ0Um93SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0geyBzdGFydFJvdzogc3RhcnRSb3dJbmRleCwgZW5kUm93OiBlbmRSb3dJbmRleCwgc3RhcnRDb2w6IHN0YXJ0Q29sSW5kZXgsIGVuZENvbDogZW5kQ29sSW5kZXggfTsvL3RoaXMuZ2V0VGFibGVSZWN0U2VsZWN0ZWRSZWdpb24odGIsIHsgc3RhcnRSb3c6IHN0YXJ0Um93SW5kZXgsIGVuZFJvdzogZW5kUm93SW5kZXgsIHN0YXJ0Q29sOiBzdGFydENvbEluZGV4LCBlbmRDb2w6IGVuZENvbEluZGV4IH0pO1xuICAgICAgICAgICAgc3RhcnRSb3dJbmRleCA9IHJlZ2lvbi5zdGFydFJvdztcbiAgICAgICAgICAgIGVuZFJvd0luZGV4ID0gcmVnaW9uLmVuZFJvdztcbiAgICAgICAgICAgIHN0YXJ0Q29sSW5kZXggPSByZWdpb24uc3RhcnRDb2w7XG4gICAgICAgICAgICBlbmRDb2xJbmRleCA9IHJlZ2lvbi5lbmRDb2w7XG4gICAgICAgICAgICBjb25zdCByb3dSYW5nZXM6IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydFJvd0luZGV4OyBpIDw9IGVuZFJvd0luZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2VzOiBBcnJheTxTZWxlY3Rpb25Db250ZW50UmFuZ2U+ID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBzdGFydENvbEluZGV4OyBqIDw9IGVuZENvbEluZGV4OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsRmlyc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQoY2VsbCkgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxMYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQoY2VsbCkgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2VsbEZpcnN0TGVhZkVsZW1lbnQgJiYgIWNlbGwuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZSA9IHRoaXMuZ2V0U2VsY3Rpb25SYW5nZShjZWxsRmlyc3RMZWFmRWxlbWVudCwgMCwgY2VsbExhc3RMZWFmRWxlbWVudCwgMSwgY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmFuZ2VzLnB1c2goY2VsbFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnRDb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmRDb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogWy4uLmNlbGxSYW5nZXNdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByb3dSYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0Q29sSW5kZXggPT09IDAgJiYgZW5kQ29sSW5kZXggPT09IHJvdy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHJvd1Jhbmdlcy5wdXNoKHJvd1JhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRiLFxuICAgICAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnRSb3dJbmRleCxcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZFJvd0luZGV4LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFsuLi5yb3dSYW5nZXNdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFibGVSYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0Um93SW5kZXggPT09IDAgJiYgZW5kUm93SW5kZXggPT09IHRiLmxlbmd0aCAtIDEgJiYgdGFibGVSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5pc0Z1bGxTZWxlY3RlZCk7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVSYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5b2T5YmN5Y2V5YWD5qC85ZKM6KGo5qC85LiN5a+55bqUJyk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RhcnRGb3JiYWNrVHJlZURhdGEoY29udHJvbDogRWxlbWVudCwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50LCBjaGlsZERhdGE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwsIG9mZnNldDogbnVtYmVyKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAhPT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShwYXJlbnQsIHBhcmVudC5nZXRDaGlsZEluZGV4KGNvbnRyb2wpICsgMSwgLTEpO1xuICAgICAgICAgICAgaWYgKGNoaWxkRGF0YSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdChjaGlsZERhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQodGhpcy5nZXRDaGlsZFRyZWVEYXRhKGNvbnRyb2wsIG9mZnNldCwgLTEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRGb3JiYWNrVHJlZURhdGEocGFyZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHJhbmdlLCAtOTkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogYW5jZXN0b3JDb21tb25Db250cm9sLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiAtMSxcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IC0xLFxuICAgICAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY2hpbGREYXRhID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKGNvbnRyb2wsIG9mZnNldCwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5jZXN0b3JSYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoYW5jZXN0b3JSYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gYW5jZXN0b3JSYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRFbmRGb3J3YXJkVHJlZURhdGEoY29udHJvbDogRWxlbWVudCwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50LCBjaGlsZERhdGE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwsIG9mZnNldDogbnVtYmVyKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgIT09IGFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldENoaWxkVHJlZURhdGEocGFyZW50LCAwLCBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjb250cm9sKSk7XG4gICAgICAgICAgICBpZiAoY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaCh0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgMCwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVuZEZvcndhcmRUcmVlRGF0YShwYXJlbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgcmFuZ2UsIC05OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBhbmNlc3RvckNvbW1vbkNvbnRyb2wsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY2hpbGREYXRhID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKGNvbnRyb2wsIDAsIG9mZnNldClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKGFuY2VzdG9yUmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yUmFuZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDaGlsZFRyZWVEYXRhKGNvbnRyb2w6IEVsZW1lbnQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgY29uc3QgcmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgIHRhcmdldDogY29udHJvbCxcbiAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZE9mZnNldDogZW5kLFxuICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gZW5kID09PSAtMSA/IGNvbnRyb2wudGV4dC5sZW5ndGggOiBlbmQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGVuZCA9PT0gLTEgPyAxIDogZW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVuZCA9IGVuZCA9PT0gLTEgPyBjb250cm9sLmxlbmd0aCA6IGVuZDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaCh0aGlzLmdldENoaWxkVHJlZURhdGEoY2hpbGQsIDAsIC0xKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZXRSYW5nZUZ1bGxTZWxlY3RlZChzZWxlY3Rpb25SYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0gPSBzZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBzdGFydE9mZnNldCA9PT0gMCAmJiBlbmRPZmZzZXQgPT09IHNlbGVjdGlvblJhbmdlLnRhcmdldC50ZXh0Lmxlbmd0aFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0T2Zmc2V0ID09PSAwICYmIGVuZE9mZnNldCA9PT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBzZWxlY3Rpb25SYW5nZS50YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gc2VsZWN0aW9uUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbjtcbiAgICAgICAgICAgIC8v6KKr5ZCI5bm255qEdGFibGUtY2VsbO+8jOWGheWuueS4umVtcHR5XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IDAgJiYgc2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSBzZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RJdGVtSW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChmaXJzdEl0ZW0udGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJdGVtID0gc2VsZWN0ZWRDaGlsZHJlbltzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGxhc3RJdGVtLnRhcmdldCk7XG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCA9IGZpcnN0SXRlbUluZGV4O1xuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0ID0gbGFzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gZmlyc3RJdGVtSW5kZXggPT09IDAgJiYgZmlyc3RJdGVtLmlzRnVsbFNlbGVjdGVkICYmIGxhc3RJdGVtSW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxICYmIGxhc3RJdGVtLmlzRnVsbFNlbGVjdGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJhbmdlRXF1YWxzKHNlbFJhbmdlMTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZWxSYW5nZTI6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2VsUmFuZ2UxLnRhcmdldCA9PT0gc2VsUmFuZ2UyLnRhcmdldCAmJiBzZWxSYW5nZTEuc3RhcnRPZmZzZXQgPT09IHNlbFJhbmdlMi5zdGFydE9mZnNldCAmJiBzZWxSYW5nZTEuZW5kT2Zmc2V0ID09PSBzZWxSYW5nZTIuZW5kT2Zmc2V0O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u6YCJ5Yy66IyD5Zu05pu05q2j6YCJ5Yy65YaF5a6554q25oCBXG4gICAgICogQHBhcmFtIHNlbGVjdGVkUmFuZ2UgXG4gICAgICogQHBhcmFtIHNlbGVjdGlvblN0YXRlIFxuICAgICAqL1xuICAgIHN0YXRpYyBmaXhTZWxlY3Rpb25TdGF0ZUJ5UmFuZ2Uoc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBzZWxlY3RlZFJhbmdlIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gdGhpcy5nZXRTdGFydFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSB0aGlzLmdldEVuZFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0ICE9PSBzdGFydENvbnRyb2wgfHwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCAhPT0gc3RhcnRPZmZzZXQgfHwgZW5kUmFuZ2UudGFyZ2V0ICE9PSBlbmRDb250cm9sIHx8IGVuZFJhbmdlLmVuZE9mZnNldCAhPT0gZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3Qgc3NSYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgc3NSYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCk7XG4gICAgICAgICAgICBzc1JhbmdlLnNldEVuZChlbmRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShzc1JhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U3RhcnRSYW5nZVRhcmdldChwYXJlbnRSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCB7XG4gICAgICAgIGlmIChwYXJlbnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRTdGFydFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVuZFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKHBhcmVudFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50UmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0RW5kUmFuZ2VUYXJnZXQocGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOW+queOr+mAkuW9kuaJp+ihjOmAieWMuuWvueixoeaWueazlVxuICAgICogQHBhcmFtIHJhbmdlIFxuICAgICogQHBhcmFtIGhhbmRsZXIgXG4gICAgKi9cbiAgICBzdGF0aWMgcmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGhhbmRsZXI6IChyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGhhbmRsZXIocmFuZ2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0sIGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5YWD57Sg5piv5ZCm6KKr5a6M5YWo6YCJ5LitXG4gICAgICogQHBhcmFtIHJhbmdlIFxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0VsZW1lbnRGdWxsSW5SYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBlbGU6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZSwgKGNoaWxkUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZFJhbmdlLnRhcmdldCA9PT0gZWxlICYmIGNoaWxkUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgb25jZVRhc2ssIFBvc2l0aW9uLCBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEJyYW5jaFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50Q29udGFpbmVyUmVuZGVyIH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IENvbW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50c1V0aWwgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbnRPcHRpb25zIHtcbiAgICBiZWZvcmVQcmludFBhZ2U6IChwYWdlSW5kZXg6IG51bWJlciwgcGFnZUNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG4gICAgYWZ0ZXJQcmludFBhZ2U6IChwYWdlSW5kZXg6IG51bWJlciwgcGFnZUNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50UGFpbnQge1xuICAgIC8v5a2Y5YKo5YWD57Sg5ZKM57uY5Yi25YWD57Sg55qE5pig5bCE5YWz57O7XG4gICAgLy9wYWludEVsZW1lbnRNYXA6IE1hcDxFbGVtZW50LCBBcnJheTxSZW5kZXJPYmplY3Q+PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHNlbGVjdGVkU2V0cyE6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+O1xuICAgIHByaXZhdGUgbWVhc3VyZUNvbW1Db250YWluZXIhOiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICBwcml2YXRlIHJlUGFpbnQhOiBib29sZWFuO1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBkb2NDdHgudmlld09wdGlvbnM7XG4gICAgfVxuXG4gICAgLy/lrqHpmIXmoIforrDnmoTkvY3nva7lr7nlupTlhbPns7tcbiAgICBwYWludENvbW1NYXAhOiBBcnJheTx7IGVsZTogQ29tbWVudEVsZW1lbnQsIHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwb3M6IFBvc2l0aW9uIH0+O1xuICAgIHBhaW50UGFnZVBvcyE6IFBvc2l0aW9uO1xuXG4gICAgZHJhd1BhZ2VzKGRvY0NvbnRhaW5lcjogRG9jdW1lbnRDb250YWluZXJSZW5kZXIsIHNlbGVjdGVkU2V0czogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4sIG1lYXN1cmVDb21tQ29udGFpbmVyOiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCwgcmVQYWludDogYm9vbGVhbik6IHZvaWQge1xuXG4gICAgICAgIHRoaXMucmVQYWludCA9IHJlUGFpbnQ7XG4gICAgICAgIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIgPSBtZWFzdXJlQ29tbUNvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMgPSBzZWxlY3RlZFNldHM7XG4gICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IGRvY0NvbnRhaW5lci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclBvcyA9IHsgeDogZG9jQ29udGFpbmVyLnJlY3QueCwgeTogZG9jQ29udGFpbmVyLnJlY3QueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSB9O1xuICAgICAgICBjb25zdCBuZXh0UmVuZGVyRm4gPSBvbmNlVGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IGRvYy5yZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQb3NpdGlvbiA9IHsgeDogcnggKyBjb250YWluZXJQb3MueCwgeTogcnkgKyBjb250YWluZXJQb3MueSB9O1xuICAgICAgICAgICAgICAgIGxldCBpblZpZXdQb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkID0gKGN1cnJQb3NpdGlvbi55ID49IDAgJiYgY3VyclBvc2l0aW9uLnkgPD0gdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0IC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZSkgfHwgKGN1cnJQb3NpdGlvbi55IDwgMCAmJiBjdXJyUG9zaXRpb24ueSArIHJoID4gMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vaW5WaWV3UG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludENvbW1NYXAgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50UGFnZVBvcyA9IGN1cnJQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdSZW5kZXJPYmplY3QoZG9jLCBjb250YWluZXJQb3MsIGluVmlld1BvcnQpO1xuICAgICAgICAgICAgICAgIGlmIChpblZpZXdQb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlZFBhZ2VQYWludENvbXBsZXRlZChkb2MsIGNvbnRhaW5lclBvcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBkb2NDb250YWluZXIucmVuZGVyKHtcbiAgICAgICAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXJDdHgsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgICAgICBuZXh0UmVuZGVyOiBuZXh0UmVuZGVyRm4sXG4gICAgICAgICAgICBkb2NDdHg6IHRoaXMuZG9jQ3R4XG4gICAgICAgIH0pXG4gICAgICAgIG5leHRSZW5kZXJGbigpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCB2aWV3U2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnJlbmRlckN0eC5jb21taXQoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICB9XG5cbiAgICBkcmF3UmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0PGFueT4sIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBwYXJlbnRJblZpZXdQb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlbmRlck9iamVjdC5lbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5yZVBhaW50ICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucGFpbnRSZW5kZXJzLnB1c2gocmVuZGVyT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHg6IHJ4LCB5OiByeSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH0gPSByZW5kZXJPYmplY3QucmVjdDtcbiAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIHBhcmVudC54LCB5OiByeSArIHBhcmVudC55IH07XG4gICAgICAgIC8v5Yik5pat5b2T5YmN57uY5Yi25YWD57Sg5piv5ZCm5Zyo6KeG56qX5YaFXG4gICAgICAgIGxldCBpblZpZXdQb3J0OiBib29sZWFuID0gcGFyZW50SW5WaWV3UG9ydDtcbiAgICAgICAgaWYgKHBhcmVudEluVmlld1BvcnQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgaW5WaWV3UG9ydCA9IChjdXJyUG9zaXRpb24ueSA+PSAwICYmIGN1cnJQb3NpdGlvbi55IDw9IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCkgfHwgKGN1cnJQb3NpdGlvbi55IDwgMCAmJiBjdXJyUG9zaXRpb24ueSArIHJoID4gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGluVmlld1BvcnQgfHwgdGhpcy5yZVBhaW50KSB7XG4gICAgICAgICAgICAgICAgLy/lrqHpmIXnqpflj6Pph43mlrDorqHnrpfkvY3nva5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWVhc3VyZUNvbW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzVXRpbC5yZW1lYXN1cmVDb21tZW50cyh0aGlzLnJlbmRlckN0eCwgcmVuZGVyT2JqZWN0LCB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLCB0aGlzLnBhaW50Q29tbU1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJPYmplY3QuaXNNZWFzdXJlQ29tbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFJlbmRlckZuID0gb25jZVRhc2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdSZW5kZXJPYmplY3QoY2hpbGQsIGN1cnJQb3NpdGlvbiwgaW5WaWV3UG9ydClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyRGF0YTogSVJlbmRlckRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6IG5leHRSZW5kZXJGbixcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiB0aGlzLnJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICAgICAgZG9jQ3R4OiB0aGlzLmRvY0N0eFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW5kZXJPYmplY3QucmVuZGVyKHJlbmRlckRhdGEpO1xuICAgICAgICAgICAgICAgIG5leHRSZW5kZXJGbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQb3J0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyRGF0YTogSVJlbmRlckRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiB0aGlzLnJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICAgICAgZG9jQ3R4OiB0aGlzLmRvY0N0eFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW5kZXJPYmplY3QucmVuZGVyKHJlbmRlckRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lrqHpmIXkv6Hmga9cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09ICdjb21tJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1FbGVtZW50ID0gZWxlbWVudCBhcyBDb21tZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY29tbUVsZW1lbnQucHJvcHMubWFya1R5cGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ojrflj5blvZPliY3nu5jliLblhYPntKDnm7jlr7nkuo7lvZPliY3pobXnmoTlnZDmoIdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludENvbW1NYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGU6IGNvbW1FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHsgeDogY3VyclBvc2l0aW9uLnggLSB0aGlzLnBhaW50UGFnZVBvcy54LCB5OiBjdXJyUG9zaXRpb24ueSAtIHRoaXMucGFpbnRQYWdlUG9zLnkgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lpITnkIbpgInkuK3mi5bok51cbiAgICAgICAgaWYgKGluVmlld1BvcnQgJiYgdGhpcy5zZWxlY3RlZFNldHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRTZXRzLmdldChlbGVtZW50KSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0geyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3MocmVuZGVyT2JqZWN0LCB7IHg6IGN1cnJQb3NpdGlvbi54LCB5OiBjdXJyUG9zaXRpb24ueSB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KG92ZXJsYXlSZWN0LngsIHBhcmFMaW5lUG9zLnksIG92ZXJsYXlSZWN0LndpZHRoLCBwYXJhTGluZVBvcy5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHJhbmdlLmVuZE9mZnNldCA+IHJhbmdlLnN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSBFbGVtZW50VXRpbC5nZXRUZXh0UmVuZGVySG9yWCg8VGV4dEdyb3VwUmVuZGVyT2JqZWN0PnJlbmRlck9iamVjdCwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5UmVjdC53aWR0aCA9IGVuZFggLSBzdGFydFg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5UmVjdC54ICs9IHN0YXJ0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChvdmVybGF5UmVjdC54LCBwYXJhTGluZVBvcy55LCBvdmVybGF5UmVjdC53aWR0aCwgcGFyYUxpbmVQb3MuaGVpZ2h0LCB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCAmJiBlbGVtZW50LnR5cGUgPT09ICd0YmMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KGN1cnJQb3NpdGlvbi54LCBjdXJyUG9zaXRpb24ueSwgcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsIHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCwgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5WaWV3UG9ydCAmJiB0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5zZWxlY3RlZFNldC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0IHx8IHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLnNlbGVjdGVkU2V0LmdldChlbGVtZW50KSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UmFuZ2VQYWludENvbG9yID0gJyNmZmQ1OTEnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuY29tbWVudFJhbmdlU3RhdHVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50UmFuZ2VTdGF0dXMgPSB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLmNvbW1lbnRSYW5nZVN0YXR1c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50UmFuZ2VTdGF0dXMuY29tbUNvbnRlbnQuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmFuZ2VVdGlsLmNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKGNvbW1lbnRSYW5nZVN0YXR1cy5yYW5nZSwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudFJhbmdlUGFpbnRDb2xvciA9ICcjZmE4YzE2JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheVJlY3QgPSB7IHg6IGN1cnJQb3NpdGlvbi54LCB5OiBjdXJyUG9zaXRpb24ueSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3MocmVuZGVyT2JqZWN0LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyUG9zaXRpb24ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGN1cnJQb3NpdGlvbi55XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3Qob3ZlcmxheVJlY3QueCwgcGFyYUxpbmVQb3MueSwgb3ZlcmxheVJlY3Qud2lkdGgsIHBhcmFMaW5lUG9zLmhlaWdodCwgY29tbWVudFJhbmdlUGFpbnRDb2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HpobXpnaLnu5jliLbnu5PmnZ/kuovku7ZcbiAgICAgKi9cbiAgICBpbnZva2VkUGFnZVBhaW50Q29tcGxldGVkKHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHg6IHJ4LCB5OiByeSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH0gPSByZW5kZXJPYmplY3QucmVjdDtcbiAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIHBhcmVudC54LCB5OiByeSArIHBhcmVudC55IH07XG4gICAgICAgIHJlbmRlck9iamVjdC5wYWdlUGFpbnRDb21wbGV0ZWQoeyByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LCBwb3NpdGlvbjogY3VyclBvc2l0aW9uLCBkb2NDdHg6IHRoaXMuZG9jQ3R4IH0pXG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VkUGFnZVBhaW50Q29tcGxldGVkKHJlbmRlck9iamVjdC5nZXRDaGlsZChpKSwgY3VyclBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBkcmF3UGFnZShyZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHg6IHJ4LCB5OiByeSB9ID0gcmVuZGVyT2JqZWN0LnJlY3Q7XG4gICAgICAgIGNvbnN0IGN1cnJQb3NpdGlvbiA9IHsgeDogcnggKyBwYXJlbnQueCwgeTogcnkgKyBwYXJlbnQueSB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0UmVuZGVyRm4gPSBvbmNlVGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1BhZ2UocmVuZGVyQ3R4LCBkb2NDdHgsIGNoaWxkLCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyRGF0YTogSVJlbmRlckRhdGEgPSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBuZXh0UmVuZGVyOiBuZXh0UmVuZGVyRm4sXG4gICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJDdHgsXG4gICAgICAgICAgICAgICAgZG9jQ3R4XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJPYmplY3QucmVuZGVyKHJlbmRlckRhdGEpO1xuICAgICAgICAgICAgbmV4dFJlbmRlckZuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyRGF0YTogSVJlbmRlckRhdGEgPSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBuZXh0UmVuZGVyOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJDdHgsXG4gICAgICAgICAgICAgICAgZG9jQ3R4OiBkb2NDdHhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuXG4iLCJpbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0LCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgUmVjdCwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQsIFRhYmxlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRSZW5kZXJDdXQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGV4dFR5cGUpIHsgfVxuXG4gICAgY3V0UGFnZShkb2N1bWVudFJlbmRlcjogRG9jdW1lbnRSZW5kZXJPYmplY3QsIGRvY3VtZW50RWxlbWVudDogRG9jdW1lbnRFbGVtZW50KTogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZ1bGxWaWV3RG9jUmVuZGVyKGRvY3VtZW50UmVuZGVyLCBkb2N1bWVudEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlclJlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDApIGFzIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBib2R5UmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMSkuY2xvbmUoKSBhcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGZvb3RlclJlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDIpIGFzIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBjb21tZW50c1JlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDMpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCB7IGhlYWRlckxpbmUsIGZvb3RlckxpbmUgfSA9IGRvY3VtZW50UmVuZGVyO1xuICAgICAgICBsZXQgYm9keU1hcmdpblRvcCA9IGhlYWRlckxpbmUgKyBoZWFkZXJSZW5kZXIucmVjdC5oZWlnaHQgKyA2O1xuICAgICAgICBsZXQgYm9keU1hcmdpbkJvdHRvbSA9IGZvb3RlckxpbmUgKyBmb290ZXJSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHsgdG9wOiBib2R5VG9wLCBib3R0b206IGJvZHlCb3R0b20gfSA9IGRvY3VtZW50UmVuZGVyLnBhZGRpbmc7XG4gICAgICAgIGJvZHlNYXJnaW5Ub3AgPSBib2R5TWFyZ2luVG9wID4gYm9keVRvcCA/IGJvZHlNYXJnaW5Ub3AgOiBib2R5VG9wO1xuICAgICAgICBib2R5TWFyZ2luQm90dG9tID0gYm9keU1hcmdpbkJvdHRvbSA+IGJvZHlCb3R0b20gPyBib2R5TWFyZ2luQm90dG9tIDogYm9keUJvdHRvbTtcbiAgICAgICAgZG9jdW1lbnRSZW5kZXIucGFkZGluZy50b3AgPSBib2R5TWFyZ2luVG9wO1xuICAgICAgICBkb2N1bWVudFJlbmRlci5wYWRkaW5nLmJvdHRvbSA9IGJvZHlNYXJnaW5Cb3R0b207XG4gICAgICAgIGNvbnN0IGJvZHlMaW1pdFJlY3QgPSBkb2N1bWVudFJlbmRlci5nZXRJbm5lclJlY3QoKTtcbiAgICAgICAgY29uc3QgYm9keUFycmF5OiBBcnJheTxEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGxldCB7IGVtcHR5Qm9keTogcGFnZUJvZHlSZW5kZXIsIGlubmVyUmVjdDogYm9keUlubmVyTGltaXRSZWN0IH0gPSB0aGlzLmNyZWF0ZUVtcHR5Qm9keVJlbmRlcihib2R5UmVuZGVyLCBib2R5TGltaXRSZWN0KTtcbiAgICAgICAgYm9keUFycmF5LnB1c2gocGFnZUJvZHlSZW5kZXIpO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZUJvZHlIb2xkZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGVtcHR5Qm9keSwgaW5uZXJSZWN0IH0gPSB0aGlzLmNyZWF0ZUVtcHR5Qm9keVJlbmRlcihib2R5UmVuZGVyLCBib2R5TGltaXRSZWN0KTtcbiAgICAgICAgICAgIHBhZ2VCb2R5UmVuZGVyID0gZW1wdHlCb2R5O1xuICAgICAgICAgICAgYm9keUlubmVyTGltaXRSZWN0ID0gaW5uZXJSZWN0O1xuICAgICAgICAgICAgYm9keUFycmF5LnB1c2gocGFnZUJvZHlSZW5kZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFwcGVuZFRvQm9keSA9IChpdGVtOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QpID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucmVjdC55ID0gYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCArIGl0ZW0ubWFyZ2luLnRvcDtcbiAgICAgICAgICAgIHBhZ2VCb2R5UmVuZGVyLmFkZENoaWxkKGl0ZW0pO1xuICAgICAgICAgICAgYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCArPSBpdGVtLnJlY3QuaGVpZ2h0ICsgaXRlbS5tYXJnaW4udG9wICsgaXRlbS5tYXJnaW4uYm90dG9tO1xuICAgICAgICAgICAgLy/kuIrkuIDkuKrlhYPntKDnmoRib3R0b20tbWFyZ2luXG4gICAgICAgICAgICAvL2JvZHlJbm5lckxpbWl0UmVjdC5wcmV2TWFyZ2luID0gaXRlbS5tYXJnaW4uYm90dG9tO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwudXBkYXRlUmVuZGVySGVpZ2h0QnlJbm5lclJlY3QocGFnZUJvZHlSZW5kZXIsIGJvZHlJbm5lckxpbWl0UmVjdCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja1BhZ2VCcmVhayhpdGVtKSkge1xuICAgICAgICAgICAgICAgIGNyZWF0ZUJvZHlIb2xkZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IGNsb25lQmxvY2tDb250ZW50UmVuZGVyOiBudWxsIHwgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0ID0gYm9keVJlbmRlci5nZXRDaGlsZChpKSBhcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIHdoaWxlIChjbG9uZUJsb2NrQ29udGVudFJlbmRlcikge1xuICAgICAgICAgICAgaWYgKGJvZHlJbm5lckxpbWl0UmVjdC5tYXhIZWlnaHQgLSBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0IC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4uYm90dG9tIC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLnRvcCA8IDApIHtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlBdmFpbEhlaWdodCA9IGJvZHlJbm5lckxpbWl0UmVjdC5tYXhIZWlnaHQgLSBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0IC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLmJvdHRvbSAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi50b3A7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodChjbG9uZUJsb2NrQ29udGVudFJlbmRlciwgYm9keUF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXRSZW5kZXJPYmplY3QgPSB0aGlzLmN1dFJlbmRlckl0ZW0oY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIsIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAvL+iHs+WwkeacieS4gOS4quWdl+e6p+ihjOWFg+e0oOiiq+WIh+WJsuWHuuadpVxuICAgICAgICAgICAgICAgIGlmIChjdXRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9Cb2R5KGN1dFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNyZWF0ZUJvZHlIb2xkZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kVG9Cb2R5KGNsb25lQmxvY2tDb250ZW50UmVuZGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoKytpIDwgYm9keVJlbmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIgPSBib2R5UmVuZGVyLmdldENoaWxkKGkpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUJsb2NrQ29udGVudFJlbmRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9jUGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBsZXQgcGFnZVk6IG51bWJlciA9IHRoaXMub3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5QXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBib2R5QXJyYXlbaV07XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudFJlbmRlciA9IGRvY3VtZW50RWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIGRvY1BhZ2VzLnB1c2goZG9jdW1lbnRSZW5kZXIpO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC55ID0gcGFnZVk7XG4gICAgICAgICAgICBjb25zdCBsaW1pdFJlY3QgPSBkb2N1bWVudFJlbmRlci5nZXRJbm5lclJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSGVhZGVyUmVuZGVyID0gaGVhZGVyUmVuZGVyLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZUhlYWRlclJlbmRlci5yZWN0LnggPSBsaW1pdFJlY3QueDtcbiAgICAgICAgICAgIGNsb25lSGVhZGVyUmVuZGVyLnJlY3QueSA9IGhlYWRlckxpbmU7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjbG9uZUhlYWRlclJlbmRlcik7XG4gICAgICAgICAgICBib2R5LnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgYm9keS5yZWN0LnkgPSBib2R5TWFyZ2luVG9wO1xuICAgICAgICAgICAgYm9keS5yZWN0LmhlaWdodCA9IGJvZHlJbm5lckxpbWl0UmVjdC5tYXhIZWlnaHQ7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChib2R5KTtcbiAgICAgICAgICAgIHBhZ2VZICs9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0ICsgdGhpcy5vcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVGb290ZXJSZW5kZXIgPSBmb290ZXJSZW5kZXIuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lRm9vdGVyUmVuZGVyLnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgY2xvbmVGb290ZXJSZW5kZXIucmVjdC55ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgLSBib2R5TWFyZ2luQm90dG9tO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY2xvbmVGb290ZXJSZW5kZXIpO1xuICAgICAgICAgICAgLy/lrqHpmIXmqKHlvI/vvIzmt7vliqDlrqHpmIXnqpflj6NcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiBjb21tZW50c1JlbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRzQ29udGFpbmVyID0gY29tbWVudHNSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnBhZGRpbmcudG9wID0gYm9keU1hcmdpblRvcDtcbiAgICAgICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LmhlaWdodCA9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNvbW1lbnRzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LnggPSBkb2N1bWVudFJlbmRlci5yZWN0LnggKyBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGggKz0gdGhpcy5vcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb2NQYWdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFnZUJyZWFrKGl0ZW06IFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50ICYmIGl0ZW0uZWxlbWVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBpdGVtLmVsZW1lbnQgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwLnByb3BzLnBhZ2VCcmVhaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRGdWxsVmlld0RvY1JlbmRlcihkb2N1bWVudFJlbmRlcjogRG9jdW1lbnRSZW5kZXJPYmplY3QsIGRvY3VtZW50RWxlbWVudDogRG9jdW1lbnRFbGVtZW50KTogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3QgY29tbWVudHNSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgY29tbWVudHNDb250YWluZXIgPSBjb21tZW50c1JlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC09IGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCBib2R5UmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMSkgYXMgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlbW92ZUNoaWxkKGNvbW1lbnRzUmVuZGVyKTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNvbW1lbnRzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnBhZGRpbmcudG9wID0gYm9keVJlbmRlci5yZWN0Lnk7XG4gICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LmhlaWdodCA9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucmVjdC54ID0gZG9jdW1lbnRSZW5kZXIucmVjdC54ICsgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGggKz0gdGhpcy5vcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZG9jdW1lbnRSZW5kZXIgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3RdXG4gICAgfVxuXG4gICAgY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXI6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCwgbGltaXRSZWN0OiBSZWN0KTogeyBlbXB0eUJvZHk6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCwgaW5uZXJSZWN0OiBSZWN0ICYgeyBwcmV2TWFyZ2luOiBudW1iZXIgfSB9IHtcbiAgICAgICAgY29uc3QgcGFnZUJvZHlSZW5kZXIgPSBib2R5UmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldEJsb2NrRWxlbWVudExpbWl0U2l6ZShwYWdlQm9keVJlbmRlciwgbGltaXRSZWN0KTtcbiAgICAgICAgY29uc3QgYm9keUlubmVyTGltaXRSZWN0ID0gcGFnZUJvZHlSZW5kZXIuZ2V0SW5uZXJSZWN0KCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbXB0eUJvZHk6IHBhZ2VCb2R5UmVuZGVyLCBpbm5lclJlY3Q6IHsgLi4uYm9keUlubmVyTGltaXRSZWN0LCBwcmV2TWFyZ2luOiAwIH0gfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIflibLmuLLmn5PlhYPntKBcbiAgICAgKiBAcGFyYW0gcmVuZGVyIOiiq+WIh+WJsueahOWvueixoVxuICAgICAqIEBwYXJhbSBsaW1pdEhlaWdodCBcbiAgICAgKiBAcGFyYW0gYWRkRnVuYyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBjdXRSZW5kZXJJdGVtKHJlbmRlcjogQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCBsaW1pdEhlaWdodDogbnVtYmVyKTogQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0Um93UmVuZGVySXRlbShyZW5kZXIsIGxpbWl0SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dFRhYmxlKHJlbmRlciwgbGltaXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gcmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDtcbiAgICAgICAgY2xvbmVSZW5kZXIuc2V0UmVuZGVyV2lkdGgocmVuZGVyLnJlY3Qud2lkdGgpO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBzdW1IZWlnaHQgPSAwO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgbGV0IGJsb2NrTGluZSA9IGNoaWxkcmVuW2pdO1xuICAgICAgICAgICAgd2hpbGUgKGJsb2NrTGluZSkge1xuICAgICAgICAgICAgICAgIC8vc3VtSGVpZ2h0ID0gRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lUmVuZGVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxjQmxvY2tMaW5lSGVpZ2h0ID0gdGhpcy5nZXRCbG9ja0xpbmVIZWlnaHQoYmxvY2tMaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsY0Jsb2NrTGluZUhlaWdodCArIHN1bUhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0xpbmUgaW5zdGFuY2VvZiBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsSGVpZ2h0ID0gbGltaXRIZWlnaHQgLSBzdW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQocmVuZGVyLCBhdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXRSZW5kZXJPYmplY3QgPSB0aGlzLmN1dFJlbmRlckl0ZW0oYmxvY2tMaW5lLCBsaW1pdFJlbmRlcklubnRlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3V0UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQoY3V0UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1IZWlnaHQgKz0gY3V0UmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrTGluZSA9IGNoaWxkcmVuWysral07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVtb3ZlQ2hpbGQoYmxvY2tMaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQoYmxvY2tMaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGJsb2NrTGluZS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tMaW5lID0gY2hpbGRyZW5bKytqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVSZW5kZXIpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJlbmRlcik7XG4gICAgICAgICAgICBpZiAoY2xvbmVSZW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIflibLmuLLmn5PlhYPntKBcbiAgICAgKiBAcGFyYW0gdGJSZW5kZXIg6KKr5YiH5Ymy55qE5a+56LGhXG4gICAgICogQHBhcmFtIGxpbWl0SGVpZ2h0IFxuICAgICAqIEBwYXJhbSBhZGRGdW5jIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGN1dFRhYmxlKHRiUmVuZGVyOiBUYWJsZVJlbmRlck9iamVjdCwgbGltaXRIZWlnaHQ6IG51bWJlcik6IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBjb25zdCBjbG9uZVRiUmVuZGVyID0gdGJSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIFRhYmxlUmVuZGVyT2JqZWN0O1xuICAgICAgICBjbG9uZVRiUmVuZGVyLnNldFJlbmRlcldpZHRoKHRiUmVuZGVyLnJlY3Qud2lkdGgpO1xuICAgICAgICBsZXQgc3VtSGVpZ2h0ID0gMDtcbiAgICAgICAgY29uc3Qgcm93cyA9IFsuLi50YlJlbmRlci5nZXRJdGVtcygpXTtcbiAgICAgICAgLy/ojrflj5bot6jpobXpnIDopoHph43lpI3mmL7npLrnmoTooYxcbiAgICAgICAgY29uc3QgaGVhZGVyUm93cyA9IHRoaXMuZ2V0SGVhZGVyUm93cyh0YlJlbmRlcik7XG4gICAgICAgIC8v6Leo6aG15aS055qE6auY5bqmXG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IGhlYWRlclJvd3MucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5yZWN0LmhlaWdodCwgMCk7XG4gICAgICAgIGlmIChoZWFkZXJIZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29weUhlYWRlclJvd3MgPSBoZWFkZXJSb3dzLm1hcChpdGVtID0+IGl0ZW0uY2xvbmUoKSk7XG4gICAgICAgIC8v6I635Y+W5pyA5ZCO5LiA5Liq5oiq5pat6KGMLOmcgOimgeagueaNruaIquaWreihjOWIpOaWreacgOWQjuS4gOS4quaIquaWreeahOihjOS9jee9rlxuICAgICAgICBjb25zdCBjdXRPZmZSb3dzID0gcm93cy5maWx0ZXIocm93ID0+IGxpbWl0SGVpZ2h0ID49IHJvdy5yZWN0LnkgJiYgbGltaXRIZWlnaHQgPD0gcm93LnJlY3QueSArIHJvdy5yZWN0LmhlaWdodClcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4gKHsgcm93SW5kZXg6ICg8VGFibGVSb3dFbGVtZW50PnJvdy5lbGVtZW50KS5nZXRJbmRleCgpLCByb3cgfSkpXG4gICAgICAgICAgICAuc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gc2Vjb25kLnJvd0luZGV4IC0gZmlyc3Qucm93SW5kZXgpO1xuICAgICAgICBpZiAoY3V0T2ZmUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5peg5rOV6I635Y+W5oiq5pat6KGMJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgam9pblJvdyA9IGN1dE9mZlJvd3NbMF0ucm93O1xuICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgIGxldCBjdXJyUm93ID0gcm93c1tqXTtcbiAgICAgICAgY29uc3QgY3V0Um93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIHdoaWxlIChjdXJyUm93KSB7XG4gICAgICAgICAgICBjb25zdCByb3dDb250ZW50SGVpZ2h0ID0gdGhpcy5nZXRCbG9ja0xpbmVIZWlnaHQoY3VyclJvdyk7XG4gICAgICAgICAgICBpZiAocm93Q29udGVudEhlaWdodCArIHN1bUhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJSb3cgaW5zdGFuY2VvZiBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdmFpbEhlaWdodCA9IGxpbWl0SGVpZ2h0IC0gc3VtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodCh0YlJlbmRlciwgYXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXRSb3cgPSB0aGlzLmN1dFJvd1JlbmRlckl0ZW0oY3VyclJvdywgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3V0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZVRiUmVuZGVyLmFkZENoaWxkKGN1dFJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1IZWlnaHQgKz0gY3V0Um93LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3V0Um93cy5wdXNoKGN1cnJSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJSb3cgPT09IGpvaW5Sb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJSb3cgPSByb3dzWysral07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGJSZW5kZXIucmVtb3ZlQ2hpbGQoY3VyclJvdyk7XG4gICAgICAgICAgICAgICAgY2xvbmVUYlJlbmRlci5hZGRDaGlsZChjdXJyUm93KTtcbiAgICAgICAgICAgICAgICBzdW1IZWlnaHQgKz0gY3VyclJvdy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBjdXJyUm93ID0gcm93c1srK2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZml4Q3V0VGFibGUodGJSZW5kZXIsIGN1dFJvd3MpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVUYlJlbmRlcik7XG4gICAgICAgIC8v5a2Y5Zyo6Leo6aG16ZyA6KaB6YeN5aSN5pi+56S655qE6KGM5aS077yM5YiZ6ZyA6KaB6YeN5paw5pS+572u6KGM5aS0XG4gICAgICAgIGlmIChjb3B5SGVhZGVyUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvcHlIZWFkZXJSb3dzLmZvckVhY2goKHIsIGkpID0+IHRiUmVuZGVyLmluc2VydENoaWxkKHIsIGkpKVxuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0YlJlbmRlcik7XG4gICAgICAgIGlmIChjbG9uZVRiUmVuZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVUYlJlbmRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGN1dFJvd1JlbmRlckl0ZW0ocmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgbGltaXRIZWlnaHQ6IG51bWJlcik6IFRhYmxlUm93UmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmIChyZW5kZXIuZWxlbWVudC5wcm9wcy5taW5IZWlnaHQgPiAwICYmIHJlbmRlci5yZWN0LmhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZVJvd1JlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCgpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICBjbG9uZVJvd1JlbmRlci5yZWN0LndpZHRoID0gcmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgIGNsb25lUm93UmVuZGVyLnJlY3QubWF4V2lkdGggPSByZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNlbGxSZW5kZXJzID0gWy4uLnJlbmRlci5nZXRJdGVtcygpXSBhcyBBcnJheTxUYWJsZUNlbGxSZW5kZXJPYmplY3Q+O1xuICAgICAgICBjb25zdCBjdXRDZWxsUmVuZGVyczogQXJyYXk8UmVuZGVyT2JqZWN0IHwgbnVsbD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxsUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IGNlbGxSZW5kZXJzW2ldO1xuICAgICAgICAgICAgaWYgKGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgYXZhaWxIZWlnaHQgPSBsaW1pdEhlaWdodDtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KGNlbGxSZW5kZXIsIGF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXRDZWxsUmVuZGVyID0gdGhpcy5jdXRSZW5kZXJJdGVtKGNlbGxSZW5kZXIsIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBpZiAoY3V0Q2VsbFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjdXRDZWxsUmVuZGVycy5wdXNoKGN1dENlbGxSZW5kZXIpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3V0Q2VsbFJlbmRlcnMucHVzaChudWxsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVDZWxsUmVuZGVyID0gY2VsbFJlbmRlciBhcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgICAgICBjdXRDZWxsUmVuZGVycy5wdXNoKGNsb25lQ2VsbFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJlbmRlcik7XG4gICAgICAgIGlmIChjdXRDZWxsUmVuZGVycy5maWx0ZXIoaXRlbSA9PiBpdGVtKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy/ooaXpvZDljZXlhYPmoLxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0Q2VsbFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbFJlbmRlciA9IGN1dENlbGxSZW5kZXJzW2ldIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGxSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlciA9IGNlbGxSZW5kZXJzW2ldLmNsb25lKCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb25lUm93UmVuZGVyLmFkZENoaWxkKGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lUm93UmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZVJvd1JlbmRlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiDkv67lpI0tPuW3sue7j+aIquaWreeahOWQiOW5tuWNleWFg+agvOimgeWQkeS4i+enu+WKqOWIsOWQiOmAgueahOS9jee9rlxuICAgICAqIEBwYXJhbSB0YlJlbmRlciBcbiAgICAgKiBAcGFyYW0gY3V0Um93cyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpeEN1dFRhYmxlKHRiUmVuZGVyOiBUYWJsZVJlbmRlck9iamVjdCwgY3V0Um93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGlmICghY3V0Um93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YkVsZSA9IHRiUmVuZGVyLmVsZW1lbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBiZWxvd01lcmdlUm93cyA9IG5ldyBTZXQ8VGFibGVSb3dSZW5kZXJPYmplY3Q+KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiUmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgbmV4dFJvdyA9IHRiUmVuZGVyLmdldENoaWxkKGkgKyAxKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmICghbmV4dFJvdykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjdXRSb3dzLnNvbWUoaXRlbSA9PiBpdGVtID09PSByb3cpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93Lmxlbmd0aCA9PT0gdGJFbGUuZ2V0Q29sc0NvdW50KCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrRnVsbFJvdyhyb3cpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxFbGUgPSBjZWxsLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNlbGxFbGUuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXhpc3RzQ2VsbFJlbmRlcihuZXh0Um93LCBjb2xJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0Q29sSW5kZXggPSB0aGlzLmdldFJvd0luc2VydENlbGxJbmRleChjZWxsLCBuZXh0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydENvbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0Q29sSW5kZXgyID0gdGhpcy5nZXRSb3dJbnNlcnRDZWxsSW5kZXgoY2VsbCwgbmV4dFJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWcqOe0p+aMqOS4i+aWueaJvuWIsOWPr+S7peaUvue9rueahOS9jee9ricpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZUNoaWxkKGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Um93Lmluc2VydENoaWxkKGNlbGwsIGluc2VydENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVsb3dNZXJnZVJvd3MuYWRkKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShuZXh0Um93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlbG93TWVyZ2VSb3dzLnNpemUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGJlbG93TWVyZ2VSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGJSZW5kZXIucmVtb3ZlQ2hpbGQocm93KTtcbiAgICAgICAgICAgICAgICByb3cuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0YlJlbmRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoKHpqozlvZPliY3mmK/lkKbmmK/kuIDkuKrlrozmlbTnmoTooYzvvIzmsqHmnIlOdWxs5Y2V5YWD5qC877yM5qOA5p+l5b2T5YmN5piv5ZCm6L+Y6ZyA6KaB5ZCR5LiL5ZCI5bm2XG4gICAgICogQHBhcmFtIHJvdyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrRnVsbFJvdyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAoY2VsbC5yZWN0LnggIT09IHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4ICs9IGNlbGwucmVjdC53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA9PT0gcm93LnJlY3Qud2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGlzdHNDZWxsUmVuZGVyKHJvd1JlbmRlcjogVGFibGVSb3dSZW5kZXJPYmplY3QsIGNlbGxJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGUgPSBjZWxsUmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsRWxlLmdldEluZGV4KCkgPT09IGNlbGxJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2NrTGluZUhlaWdodChyZW5kZXI6IFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IG1heENlbGxIZWlnaHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gcmVuZGVyLmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmIChpdGVtSGVpZ2h0ID4gbWF4Q2VsbEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBtYXhDZWxsSGVpZ2h0ID0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF4Q2VsbEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgIH1cblxuXG4gICAgZ2V0Um93SW5zZXJ0Q2VsbEluZGV4KHNvdXJjZUNlbGw6IFRhYmxlQ2VsbFJlbmRlck9iamVjdCwgZGVzdFJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkZXN0Um93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBjZWxsLnJlY3Q7XG4gICAgICAgICAgICBpZiAoc291cmNlQ2VsbC5yZWN0LnggPCByZWN0LngpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0Q2VsbCA9IGRlc3RSb3cuZ2V0Q2hpbGQoZGVzdFJvdy5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKHNvdXJjZUNlbGwucmVjdC54ID49IGxhc3RDZWxsLnJlY3QueCArIGxhc3RDZWxsLnJlY3Qud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXN0Um93Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIZWFkZXJSb3dzKHRiOiBUYWJsZVJlbmRlck9iamVjdCk6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvd1JlbmRlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCJcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5cblxuXG5cbi8qKlxuICog55So5LqO5aSE55CG6YCJ5Yy65ouW6JOdXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25PdmVybGF5cyB7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25SYW5nZSE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGw7XG4gICAgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZSkgeyB9XG5cbiAgICBnZXRTZWxlY3Rpb25UcmVlRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGNvbGxhcHNlZCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhZW5kQ29udHJvbCB8fCAhYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICAvL3RoaXMuc2VsZWN0aW9uUmFuZ2U/LnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoPTA7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlID0gY29tbW9uUmFuZ2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cy5jbGVhcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpeFN0YXJ0RWxlbWVudCA9IHRoaXMuZml4U3RhcnRTZWxlY3Rpb25FbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIHN0YXJ0Q29udHJvbCA9IGZpeFN0YXJ0RWxlbWVudC5lbGVtZW50O1xuICAgICAgICBzdGFydE9mZnNldCA9IGZpeFN0YXJ0RWxlbWVudC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IGZpeEVuZEVsZW1lbnQgPSB0aGlzLmZpeEVuZFNlbGVjdGlvbkVsZW1lbnQoZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICBlbmRDb250cm9sID0gZml4RW5kRWxlbWVudC5lbGVtZW50O1xuICAgICAgICBlbmRPZmZzZXQgPSBmaXhFbmRFbGVtZW50Lm9mZnNldDtcbiAgICAgICAgY29uc3QgY29tbW9uUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coY29tbW9uUmFuZ2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gY29tbW9uUmFuZ2U7XG4gICAgICAgIHRoaXMuY29udmVydFNlbGVjdFJhbmdlVG9TZXQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlID0gY29tbW9uUmFuZ2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0U2VsZWN0UmFuZ2VUb1NldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIFNlbGVjdGlvbk92ZXJsYXlzLmFkZFRvU2V0cyh0aGlzLnNlbGVjdGlvblJhbmdlLCB0aGlzLnNlbGVjdGVkU2V0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYWRkVG9TZXRzKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNldDogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4pOiB2b2lkIHtcbiAgICAgICAgc2V0LnNldChyYW5nZS50YXJnZXQsIHJhbmdlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvL+WNleWFg+agvOWFqOmDqOmAieS4reaViOaenO+8jOWNleWFg+agvOaVtOS4quaLluiTneWNs+WPr1xuICAgICAgICAgICAgaWYgKHJhbmdlLmlzRnVsbFNlbGVjdGVkICYmIHJhbmdlLnRhcmdldC50eXBlID09PSAndGJjJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRUb1NldHMocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSwgc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa3u+WKoOWIsOaJueazqOmbhuWQiFxuICAgICAqIEBwYXJhbSByYW5nZSBcbiAgICAgKiBAcGFyYW0gc2V0IFxuICAgICAqL1xuICAgIHN0YXRpYyBhZGRUb0NvbW1lbnRTZXRzKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNldDogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4pOiB2b2lkIHtcbiAgICAgICAgc2V0LnNldChyYW5nZS50YXJnZXQsIHJhbmdlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvQ29tbWVudFNldHMocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSwgc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruato+W8gOWni+mAieWMuuWGheWuuVxuICAgICAqIDEu5aaC5p6c5b2T5YmN6YCJ5Yy65byA5aeL5LqO6KGo5qC85YaF5a6577yM57uT5p2f6YCJ5Yy65L2N5LqO6KGo5qC85aSW77yM5YiZ6ZyA6KaB5byA5aeL6YCJ5Yy65YaF5a656YeN5a6a5L2N5Yiw5Y2V5YWD5qC856ys5LiA5Liq5YWD57SgXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaXhTdGFydFNlbGVjdGlvbkVsZW1lbnQoZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiB7IGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKCEoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgbG9va3VwUGFyZW50Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChsb29rdXBQYXJlbnRDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFsb29rdXBQYXJlbnRDZWxsLnBhcmVudCB8fCAhbG9va3VwUGFyZW50Q2VsbC5wYXJlbnQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudFRiSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA8IGxvb2t1cFBhcmVudFRiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93Rmlyc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJvd0ZpcnN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5b2T5YmN5YWD57Sg5aSE5LqO6KGo5qC85YaF5YWD57Sg77yM5pyq6IO95a6a5L2N5Yiw5b2T5YmN5Y2V5YWD5qC86aaW5Liq5YWD57SgJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJvd0ZpcnN0TGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudCwgb2Zmc2V0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5byA5aeL6YCJ5Yy65YaF5a65XG4gICAgICogMS7lpoLmnpzlvZPliY3pgInljLrlvIDlp4vkuo7ooajmoLzlhoXlrrnvvIznu5PmnZ/pgInljLrkvY3kuo7ooajmoLzlpJbvvIzliJnpnIDopoHlvIDlp4vpgInljLrlhoXlrrnph43lrprkvY3liLDljZXlhYPmoLznrKzkuIDkuKrlhYPntKBcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpeEVuZFNlbGVjdGlvbkVsZW1lbnQoZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiB7IGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKCEoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgbG9va3VwUGFyZW50Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChsb29rdXBQYXJlbnRDZWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9va3VwUGFyZW50VGJJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChsb29rdXBQYXJlbnRDZWxsLnBhcmVudC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4IDwgbG9va3VwUGFyZW50VGJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dMYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJvd0xhc3RMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KGxvb2t1cFBhcmVudENlbGwucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5b2T5YmN5YWD57Sg5aSE5LqO6KGo5qC85YaF5YWD57Sg77yM5pyq6IO95a6a5L2N5Yiw5b2T5YmN5Y2V5YWD5qC86aaW5Liq5YWD57SgJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJvd0xhc3RMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbGVtZW50LCBvZmZzZXQgfTtcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBFbGVtZW50TWVhc3VyZSB9IGZyb20gXCIuL2VsZW1lbnQtbWVhc3VyZVwiO1xuaW1wb3J0IHsgRWxlbWVudFBhaW50IH0gZnJvbSBcIi4vZWxlbWVudC1wYWludFwiO1xuaW1wb3J0IHsgRWxlbWVudFJlbmRlckN1dCB9IGZyb20gXCIuL2VsZW1lbnQtcmVuZGVyLWN1dFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50Q29udGFpbmVyUmVuZGVyIH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudFNlbGVjdGlvbiB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25PdmVybGF5cyB9IGZyb20gXCIuL3NlbGVjdGlvbi1vdmVybGF5c1wiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IENvbW1Db250ZW50RWxlbWVudCwgQ29tbWVudFJhbmdlU3RhdHVzIH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRQYWludCB7XG4gICAgZWxlbWVudE1lYXN1cmU6IEVsZW1lbnRNZWFzdXJlO1xuICAgIGVsZW1lbnRSZW5kZXJDdXQ6IEVsZW1lbnRSZW5kZXJDdXQ7XG4gICAgZWxlbWVudFBhaW50OiBFbGVtZW50UGFpbnQ7XG4gICAgZG9jUGFnZXMhOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD47XG4gICAgZG9jQ29udGFpbmVyITogRG9jdW1lbnRDb250YWluZXJSZW5kZXI7XG4gICAgY29tbXNDb250YWluZXIhOiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICBwcml2YXRlIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlckNvbnRleHQ6IFJlbmRlckNvbnRleHRUeXBlLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSBzZWxlY3RlZFNldHM6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5lbGVtZW50TWVhc3VyZSA9IG5ldyBFbGVtZW50TWVhc3VyZSh0aGlzLnZpZXdPcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZW5kZXJDdXQgPSBuZXcgRWxlbWVudFJlbmRlckN1dCh0aGlzLnZpZXdPcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRQYWludCA9IG5ldyBFbGVtZW50UGFpbnQodGhpcy5yZW5kZXJDb250ZXh0LCB0aGlzLmRvY0N0eCk7XG4gICAgfVxuXG4gICAgcmVQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY0N0eC5kb2N1bWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lciA9IG5ldyBEb2N1bWVudENvbnRhaW5lclJlbmRlcigpO1xuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5yZW5kZXJDb250YWluZXIgPSB0aGlzLmRvY0NvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC53aWR0aCA9IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICAvLyBjb25zb2xlLnRpbWUoJ+aOkueJiOiuoeaXticpO1xuICAgICAgICBjb25zdCBkb2N1bWVudFJlbmRlciA9IHRoaXMuZWxlbWVudE1lYXN1cmUubWVhc3VyZURvY3VtZW50KHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDMpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAodGhpcy5jb21tc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lciA9IHRoaXMuY29tbXNDb250YWluZXIuY2xvbmUoKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgn5o6S54mI6K6h5pe2Jyk7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCfmlq3pobXorqHml7YnKTtcbiAgICAgICAgY29uc3QgZG9jUGFnZXMgPSB0aGlzLmVsZW1lbnRSZW5kZXJDdXQuY3V0UGFnZShkb2N1bWVudFJlbmRlciwgdGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgn5pat6aG16K6h5pe2Jyk7XG4gICAgICAgIHRoaXMuc2V0Q29tbVJhbmdlTWFyaygpO1xuICAgICAgICB0aGlzLmRvY1BhZ2VzID0gZG9jUGFnZXM7XG4gICAgICAgIHRoaXMubGF5b3V0UGFnZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmoaPpobXpnaLmmL7npLrluIPlsYBcbiAgICAgKiBAcGFyYW0gcGFnZXNcbiAgICAgKi9cbiAgICBsYXlvdXRQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY0NvbnRhaW5lciB8fCAhdGhpcy5kb2NQYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcGFnZUxheW91dE1vZGUgfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGlmIChwYWdlTGF5b3V0TW9kZSA9PSAnbXVsdGlQYWdlJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRNdWx0aVBhZ2VzKHRoaXMuZG9jUGFnZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaW5nbGVQYWdlcyh0aGlzLmRvY1BhZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWNlemhteaooeW8j++8muWujOaIkOaWh+aho+mhteaWremhteWQju+8jOaWh+aho+mhteaOkueJiFxuICAgICAqIDEu5qC55o2u6aG16Z2i6KeG5Zu+57yp5pS+6K6+572uXG4gICAgICogMi7moLnmja7pobXpnaLop4bnqpfmgLvlrr3luqbvvIzorr7nva7pobXpnaLlsYXkuK1cbiAgICAgKi9cbiAgICBwcml2YXRlIGxheW91dFNpbmdsZVBhZ2VzKHBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgcGFnZUxheW91dE1vZGUsIHZpZXdTZXR0aW5nczogeyB3aWR0aDogdmlld1dpZHRoIH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIC8v5paH5qGj5YaF5a655Yy65a695bqmXG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHRoaXMudmlld09wdGlvbnMuY29udGVudFdpZHRoO1xuICAgICAgICAvL+aWh+aho+WuueWZqOaAu+WuveW6puetieS6juWGheWuueWuveW6plxuICAgICAgICAvL+WNlemhteaooeW8j++8jGRvY0NvbnRhaW5lcuWxheS4rVxuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LndpZHRoID0gY29udGVudFdpZHRoO1xuICAgICAgICAvL+e8qeaUvuWQjueahOWGheWuueWMuuWuveW6plxuICAgICAgICBjb25zdCBzY2FsZUNvbnRlbnRXaWR0aCA9IGNvbnRlbnRXaWR0aCAqIHNjYWxlO1xuICAgICAgICBjb25zdCBkb2NMZWZ0ID0gTWF0aC5mbG9vcigodmlld1dpZHRoIC0gc2NhbGVDb250ZW50V2lkdGgpIC8gMiAvIHNjYWxlKTtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC54ID0gZG9jTGVmdDtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIuYWRkUGFnZXMocGFnZXMpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGhpcy5kb2NDb250YWluZXIsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkmumhteaooeW8j1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBsYXlvdXRNdWx0aVBhZ2VzKHBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICBwYWdlTGF5b3V0TW9kZSxcbiAgICAgICAgICAgIGRvY1NwYWNlLFxuICAgICAgICAgICAgdmlld1NldHRpbmdzOiB7IHdpZHRoOiB2aWV3V2lkdGggfSxcbiAgICAgICAgICAgIGRvY1BhZ2VTZXR0aW5nczogeyBoZWlnaHQ6IHBhZ2VIZWlnaHQgfVxuICAgICAgICB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgLy/mlofmoaPlhoXlrrnljLrlrr3luqZcbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5jb250ZW50V2lkdGhcbiAgICAgICAgLy/mlofmoaPlrrnlmajmgLvlrr3luqbnrYnkuo7nu5jliLbljLrmgLvlrr3luqZcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC53aWR0aCA9IHZpZXdXaWR0aDtcbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC54ID0gMDtcblxuICAgICAgICAvL+WIpOaWreaYr+WQpua7oei2s+WkmumhteW4g+WxgFxuICAgICAgICBsZXQgbGF5b3V0UGFnZU51bSA9IE1hdGguZmxvb3Iodmlld1dpZHRoIC8gKGNvbnRlbnRXaWR0aCArIGRvY1NwYWNlICogMikgLyBzY2FsZSk7XG4gICAgICAgIGlmIChsYXlvdXRQYWdlTnVtIDwgMiB8fCBwYWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2luZ2xlUGFnZXMocGFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxheW91dFBhZ2VOdW0gPSBsYXlvdXRQYWdlTnVtID4gcGFnZXMubGVuZ3RoID8gcGFnZXMubGVuZ3RoIDogbGF5b3V0UGFnZU51bTtcbiAgICAgICAgY29uc3QgcGFnZUxpbmVXaWR0aCA9IGNvbnRlbnRXaWR0aCAqIGxheW91dFBhZ2VOdW0gKyAobGF5b3V0UGFnZU51bSAtIDEpICogZG9jU3BhY2U7XG4gICAgICAgIGxldCBsZWZ0U3BhY2UgPSBNYXRoLmZsb29yKCh2aWV3V2lkdGggLSBwYWdlTGluZVdpZHRoICogc2NhbGUpIC8gMiAvIHNjYWxlKTtcbiAgICAgICAgbGV0IGhlaWdodCA9IGRvY1NwYWNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFnZXNbaV07XG4gICAgICAgICAgICBpZiAoaSAlIGxheW91dFBhZ2VOdW0gPT09IDAgJiYgaSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGhlaWdodCArPSBwYWdlSGVpZ2h0ICsgZG9jU3BhY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdlLnJlY3QueCA9IGxlZnRTcGFjZSArIChpICUgbGF5b3V0UGFnZU51bSkgKiAoY29udGVudFdpZHRoICsgZG9jU3BhY2UpO1xuICAgICAgICAgICAgcGFnZS5yZWN0LnkgPSBoZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5hZGRDaGlsZChwYWdlKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3QuaGVpZ2h0ID0gaGVpZ2h0ICsgcGFnZUhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5borr7nva7mlofmoaPlrrnlmajnmoTmgLvpq5jluqZcbiAgICAgKi9cbiAgICBnZXREb2N1bWVudENvbnRhaW5lckhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5kb2NQYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NDb250YWluZXIucmVjdC5oZWlnaHQgKiB0aGlzLnZpZXdPcHRpb25zLnNjYWxlO1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhZ2UgPSB0aGlzLmRvY1BhZ2VzW3RoaXMuZG9jUGFnZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZVkgPSBsYXN0UGFnZS5yZWN0LnkgKyBsYXN0UGFnZS5yZWN0LmhlaWdodCArIHRoaXMudmlld09wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFBhZ2VZICsgKHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCAqICh0aGlzLnZpZXdPcHRpb25zLnNjYWxlIC0gMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWZyZXNoVmlldyhyZVBhaW50ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ+iuoeaXticpO1xuICAgICAgICB0aGlzLmVsZW1lbnRQYWludC5kcmF3UGFnZXModGhpcy5kb2NDb250YWluZXIsIHRoaXMuc2VsZWN0ZWRTZXRzLCB0aGlzLmNvbW1zQ29udGFpbmVyLCByZVBhaW50KTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ+iuoeaXticpO1xuXG4gICAgfVxuXG4gICAgZ2V0RG9jUGFnZXMoKTogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jUGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0RG9jQ29udGFpbmVyKCk6IERvY3VtZW50Q29udGFpbmVyUmVuZGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jQ29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKipcbiAgICAgKiDorr7nva7lrqHpmIXljLrpl7TmoLflvI/nl5Xov7lcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENvbW1SYW5nZU1hcmsoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2NlID0gdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50O1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4oKTtcbiAgICAgICAgY29uc3QgY29tbWVudFJhbmdlU3RhdHVzOiBBcnJheTxDb21tZW50UmFuZ2VTdGF0dXM+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2NlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IGNjZS5nZXRDaGlsZChpKSBhcyBDb21tQ29udGVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0TWFyaywgZW5kTWFyaywgcHJvcHM6IHsgaWQgfSwgZm9jdXMgfSA9IGNvbW1Db250ZW50O1xuICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sID0gRG9jdW1lbnRTZWxlY3Rpb24uZ2V0QW5jZXN0b3JDb21tb25Db250cm9sKHN0YXJ0TWFyaywgZW5kTWFyayk7XG4gICAgICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0TWFyaywgMCwgZW5kTWFyaywgMSwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgIFNlbGVjdGlvbk92ZXJsYXlzLmFkZFRvQ29tbWVudFNldHMoY29tbW9uUmFuZ2UsIHNldCk7XG4gICAgICAgICAgICBjb21tZW50UmFuZ2VTdGF0dXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29tbUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IGNvbW1vblJhbmdlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbXNDb250YWluZXIuc2VsZWN0ZWRTZXQgPSBzZXQ7XG4gICAgICAgIHRoaXMuY29tbXNDb250YWluZXIuY29tbWVudFJhbmdlU3RhdHVzID0gY29tbWVudFJhbmdlU3RhdHVzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9ucyxcbiAgICBFbGVtZW50XG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5cbi8qKlxuICog5q616JC96KGMXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhTGluZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxQYXJhTGluZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdwLWxpbmUnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBQYXJhTGluZVByb3BzKCk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQYXJhTGluZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUGFyYUxpbmVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gOTk5OTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhTGluZVJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBhcmFMaW5lUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0hvcmlMaW5lKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucGFyZW50LnJlY3Qud2lkdGgsICdibGFjaycsIDEpO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYUxpbmVFbGVtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBhcmFMaW5lUHJvcHM+IHtcbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8UGFyYUxpbmVQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IFBhcmFMaW5lRWxlbWVudCgpO1xuICAgICAgICBlbGUucHJvcHMubGluZVR5cGUgPSBkYXRhLnByb3BzPy5saW5lVHlwZSA/PyAnc29saWQnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3AtbGluZSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFyYUxpbmVQcm9wcyB7XG4gICAgbGluZVR5cGU6ICdzb2xpZCcgfCAnZGFzaCcgPSAnc29saWQnO1xuXG4gICAgY2xvbmUoZGVzdD86IFBhcmFMaW5lUHJvcHMpOiBQYXJhTGluZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBQYXJhTGluZVByb3BzKCk7XG4gICAgICAgIGNsb25lLmxpbmVUeXBlID0gdGhpcy5saW5lVHlwZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIEVsZW1lbnQsIFZpZXdPcHRpb25zLCBQYWdlT3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBDaGVja0JveEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NoZWNrYm94L2NoZWNrYm94LWltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRDb250ZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1jb250ZW50LWltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJFbGVtZW50LCBDb21tZW50c0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudENoZWNrRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1jaGVjay1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudERhdGVGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWRhdGUtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRJbWdGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWltYWdlLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TGlzdEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtbGlzdC1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudFRleHRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LXRleHQtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCwgRG9jdW1lbnRCb2R5RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50LCBEb2N1bWVudEZvb3RlckZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJFbGVtZW50LCBEb2N1bWVudEhlYWRlckZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudE1IRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvbWVkaWEtZm9ybXVsYS9tZW5zdHJ1YWwtaGlzdG9yeVwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgUGljdHVyZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3BpY3R1cmUvaW1hZ2UtaW1wbFwiO1xuaW1wb3J0IHsgUmFkaW9Cb3hGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9yYWRpby9yYWRpby1pbXBsXCI7XG5pbXBvcnQgeyBCcmVha0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3N5bWJvbC9ici1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlUm93RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IFJ1bkVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCwgVHJhY2tSdW5Qcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50R3JvdXBGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWdyb3VwLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keVBhcnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFyY29kZVwiO1xuaW1wb3J0IHsgUGFyYUxpbmVFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtbGluZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50UmVhZGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpIHtcbiAgICAgICAgdGhpcy5pbml0RmFjdG9yeSgpO1xuICAgIH1cblxuICAgIGZhY3RvcmllczogQXJyYXk8RWxlbWVudEZhY3Rvcnk+ID0gW107XG5cbiAgICBhZGRGYWN0b3J5PFUgZXh0ZW5kcyBudWxsIHwgb2JqZWN0LCBUIGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VT4+KGM6IG5ldyAoKSA9PiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGMoKTtcbiAgICAgICAgaW5zdGFuY2Uub3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmZhY3Rvcmllcy5wdXNoKGluc3RhbmNlIGFzIEVsZW1lbnRGYWN0b3J5KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgaW5pdEZhY3RvcnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRIZWFkZXJGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50Qm9keUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGFyYWdyYXBoRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUZXh0R3JvdXBGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENoZWNrQm94RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUYWJsZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGFibGVSb3dGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRhYmxlQ2VsbEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRGb290ZXJGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFBpY3R1cmVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFJhZGlvQm94RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudFRleHRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50RGF0ZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudENoZWNrRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudEJhcmNvZGVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KEJyZWFrRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50c0ZhY3RvcnkpXG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50Q29udGVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ29tbWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRJbWdGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50TUhGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFJ1bkVsZW1lbnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50R3JvdXBGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50Qm9keVBhcnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFBhcmFMaW5lRWxlbWVudEZhY3RvcnkpO1xuICAgICAgICAvLyB0aGlzLnJlZ2lzdGVyUmVhZEZ1bmM8VHJhY2tSdW5Qcm9wcz4oJ2lucy1ydW4nLCAoZGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3QgcHJvcHMgPSBuZXcgVHJhY2tSdW5Qcm9wcyhkYXRhLnR5cGUpO1xuICAgICAgICAvLyAgICAgcHJvcHMudXNlcklkID0gZGF0YS51c2VySWQ7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VyTmFtZSA9IGRhdGEudXNlck5hbWU7XG4gICAgICAgIC8vICAgICBwcm9wcy5kYXRlID0gZGF0YS5kYXRlO1xuICAgICAgICAvLyAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAvLyB9KVxuICAgICAgICAvLyB0aGlzLnJlZ2lzdGVyUmVhZEZ1bmM8VHJhY2tSdW5Qcm9wcz4oJ2RlbC1ydW4nLCAoZGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3QgcHJvcHMgPSBuZXcgVHJhY2tSdW5Qcm9wcyhkYXRhLnR5cGUpO1xuICAgICAgICAvLyAgICAgcHJvcHMudXNlcklkID0gZGF0YS51c2VySWQ7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VyTmFtZSA9IGRhdGEudXNlck5hbWU7XG4gICAgICAgIC8vICAgICBwcm9wcy5kYXRlID0gZGF0YS5kYXRlO1xuICAgICAgICAvLyAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAvLyB9KVxuICAgIH1cblxuICAgIHJlYWQoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZGF0YSBpbnN0YW5jZW9mIERvY3VtZW50RWxlbWVudCA/IGRhdGEgOiB0aGlzLnJlYWRFbGVtZW50KGRhdGEpIGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5zZXREb2N1bWVudChkb2N1bWVudCk7XG4gICAgfVxuXG4gICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQ6IERvY3VtZW50RWxlbWVudCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB0aGlzLmRvY3VtZW50Py5jbGVhckl0ZW1zKCk7XG4gICAgICAgIC8vIGRvY3VtZW50LmRvY1Byb3BzLmNsb25lKHRoaXMuZG9jdW1lbnQuZG9jUHJvcHMpO1xuICAgICAgICBkb2N1bWVudC5ib2R5RWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5oZWFkZXJFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50SGVhZGVyRWxlbWVudCkgYXMgRG9jdW1lbnRIZWFkZXJFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5mb290ZXJFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Rm9vdGVyRWxlbWVudCkgYXMgRG9jdW1lbnRGb290ZXJFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJFbGVtZW50KSBhcyBDb21tc0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGlmICghZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQgPSBuZXcgQ29tbXNDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuY2xlYXJJdGVtcygpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5oZWFkZXJFbGVtZW50KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkQ2hpbGQoZG9jdW1lbnQuYm9keUVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5mb290ZXJFbGVtZW50KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkQ2hpbGQoZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgZG9jdW1lbnQudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmZsb29yKGRvY3VtZW50LnByb3BzLndpZHRoICogdGhpcy5kb2NDdHgudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcihkb2N1bWVudC5wcm9wcy5oZWlnaHQgKiB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MgPSBuZXcgUGFnZU9wdGlvbnMod2lkdGgsIGhlaWdodCwgZG9jdW1lbnQucHJvcHMub3JpZW50KTtcbiAgICAgICAgLy90aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoICsgMTA7XG4gICAgfVxuXG5cbiAgICByZWFkRWxlbWVudChkYXRhOiBhbnkpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGRhdGEudHlwZSBhcyBzdHJpbmc7XG4gICAgICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiB0aGlzLmZhY3Rvcmllcykge1xuICAgICAgICAgICAgaWYgKGZhY3RvcnkubWF0Y2godHlwZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVFbGVtZW50KGRhdGEsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRFeHRlbmRzUHJvcHMoZGF0YSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRBcnI6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9lbGVtZW50LmFkZENoaWxkKHRoaXMucmVhZEVsZW1lbnQoY2hpbGQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQXJyLnB1c2godGhpcy5yZWFkRWxlbWVudChjaGlsZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZhY3RvcnkucmVhZENvbXBsZXRlZChlbGVtZW50LCBjaGlsZEFycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrnn6XnmoTlhYPntKDnsbvlnos6JyArIHR5cGUpO1xuICAgIH1cblxuICAgIC8vIHByb3BzUmVhZEZ1bmNzOiBNYXA8c3RyaW5nLCAoZGF0YTogYW55KSA9PiBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gICAgLy8gcmVnaXN0ZXJSZWFkRnVuYzxUPihwcm9wTmFtZTogc3RyaW5nLCBmdW5jOiAoZGF0YTogVCkgPT4gVCk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLnByb3BzUmVhZEZ1bmNzLnNldChwcm9wTmFtZSwgZnVuYyk7XG4gICAgLy8gfVxuXG4gICAgcmVhZEV4dGVuZHNQcm9wcyhkYXRhOiBhbnksIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRhLnByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXh0ZW5kc1Byb3BzID0gZGF0YS5wcm9wcy5fX2F0dGFjaGVkUHJvcGVydHk7XG4gICAgICAgIGlmIChleHRlbmRzUHJvcHMpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnByb3BzIGluc3RhbmNlb2YgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV4dGVuZHNQcm9wcyBhcyBvYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnByb3BzLnNldFByb3BlcnR5KGtleSwgZXh0ZW5kc1Byb3BzW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFBhaW50fSBmcm9tIFwiLi9kb2N1bWVudC1wYWludFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtMZWFmRWxlbWVudCwgUmVjdCwgRWxlbWVudCwgUG9zaXRpb24sIFZpZXdPcHRpb25zLCBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LCBEb2NNb2RlfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtcbiAgICBEcm9wRWxlbWVudEV2ZW50LFxuICAgIEVsZW1lbnRFdmVudCxcbiAgICBFdmVudFN0YWdlLFxuICAgIEV2ZW50VHlwZXMsXG4gICAgR2V0VHJhY2tUaXBzRXZlbnQsXG4gICAgR290Q3Vyc29yRXZlbnQsXG4gICAgSGl0RXZlbnRJbmZvLFxuICAgIEhpdFJlZ2lvbixcbiAgICBJVHJhY2tUaXBzLFxuICAgIExvc3RDdXJzb3JFdmVudCxcbiAgICBNb3VzZWRvd25FbGVtZW50RXZlbnQsXG4gICAgTW91c2VFbGVtZW50RXZlbnRcbn0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtQaWN0dXJlRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtCcmVha0VsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7UFN5bWJvbEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0JvcmRlclR5cGUsIEJyYW5jaFJlbmRlck9iamVjdCwgQ3Vyc29yVHlwZSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7UGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuaW1wb3J0IHtEb2N1bWVudElucHV0fSBmcm9tIFwiLi9kb2N1bWVudC1pbnB1dC1jdXJzb3JcIjtcblxuaW50ZXJmYWNlIEVkZ2VSZW5kZXJJbmZvIHtcbiAgICByZW5kZXJFbGVtZW50OiBFbGVtZW50LFxuICAgIHJlbGF0aXZlUG9zOiBQb3NpdGlvbixcbiAgICBtb3VzZWRvd246IGJvb2xlYW4sXG4gICAgbW91c2Vkb3duUG9zPzogUG9zaXRpb24sXG4gICAgYm9yZGVyOiBCb3JkZXJUeXBlXG59XG5cbi8qKlxuICog5LqL5Lu257O757ufXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEV2ZW50IHtcbiAgICBwcml2YXRlIGlzbW91c2Vkb3duITogYm9vbGVhbjtcbiAgICAvL+W8gOWni+eCueWHu+aXtueahOWFg+e0oOS/oeaBr1xuICAgIHN0YXJ0SGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3kvY3nva7ngrnlh7vnmoTlhYPntKDkv6Hmga9cbiAgICBlbmRIaXRJbmZvITogSGl0RXZlbnRJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjeWumuS9jeeahOeEpueCueWFg+e0oCzkvovlpoLlm77niYfnrYlcbiAgICBmb2N1c2VkRWxlbWVudCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBmb2N1c2VkUmVjdCE6IFJlY3QgfCBudWxsO1xuICAgIC8v5b2T5YmN5YWJ5qCH5omA5Zyo55qE5YWD57SgXG4gICAgY3VycmVudE1vdXNlb3ZlclJlbmRlciE6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbDtcbiAgICBoaXRJbmZvQ2hhbmdlZDogU3ViamVjdDx7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNsaWNrRXZlbnQ6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGRibENsaWNrRXZlbnQ6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNoYW5nZUN1cnNvcjogU3ViamVjdDxDdXJzb3JUeXBlPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29udGV4dE1lbnU6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHRyYWNrVGlwc0NoYW5nZWQ6IFN1YmplY3Q8eyBwb3M6IFBvc2l0aW9uLCB0aXBzOiBJVHJhY2tUaXBzIH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WFieagh+WkhOS6jui+ueahhueahOe7mOWItuWFg+e0oFxuICAgIGVkZ2VSZW5kZXJJbmZvITogRWRnZVJlbmRlckluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN6byg5qCH5omA5Zyo55qEcGFnZS1wb3NpdGlvblxuICAgIGN1cnJlbnRQb3MhOiBQb3NpdGlvbjtcbiAgICAvL+m8oOagh+aMieS4i+eahOS9jee9rlxuICAgIG1vdXNlZG93blBvcyE6IFBvc2l0aW9uO1xuICAgIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcbiAgICBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuYmluZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZXVwJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2V1cChldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnY2xpY2snKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUNsaWNrSGFuZGxlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdjb250ZXh0bWVudScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51Lm5leHQoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlbW92ZScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnZGJsY2xpY2snKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURibENsaWNrSGFuZGxlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uTGVmdEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xlZnQoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uUmlnaHRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9SaWdodCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25TZWxlY3RBbGxFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSG9tZUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xpbmVTdGFydCgpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkVuZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xpbmVFbmQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25VcEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1VwT3JEb3duKHRydWUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkRvd25FdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9VcE9yRG93bihmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTdWJFdmVudChzdWI6IFN1YnNjcmlwdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICAgIH1cblxuICAgIGNsZWFyU3ViRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zdGFydEhpdEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2Vkb3duKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICBkb2NFdmVudC5idXR0b25zID0gZXZ0LmJ1dHRvbnM7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0ge3g6IGRvY0V2ZW50Lmdsb2JhbFgsIHk6IGRvY0V2ZW50Lmdsb2JhbFl9O1xuICAgICAgICB0aGlzLm1vdXNlZG93bkhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZXVwKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICBkb2NFdmVudC5zaGlmdCA9IGV2dC5zaGlmdEtleTtcbiAgICAgICAgZG9jRXZlbnQuY3RybCA9IGV2dC5jdHJsS2V5O1xuICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2Vtb3ZlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICBkb2NFdmVudC5zaGlmdCA9IGV2dC5zaGlmdEtleTtcbiAgICAgICAgZG9jRXZlbnQuY3RybCA9IGV2dC5jdHJsS2V5O1xuICAgICAgICBpZiAodGhpcy5tb3VzZWRvd25Qb3MgJiYgZG9jRXZlbnQuZ2xvYmFsWCA9PT0gdGhpcy5tb3VzZWRvd25Qb3MueCAmJiBkb2NFdmVudC5nbG9iYWxZID09PSB0aGlzLm1vdXNlZG93blBvcy55KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb3VzZW1vdmVIYW5kbGUoZG9jRXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNrue8qeaUvuWAvO+8jOiuvue9ruWcqOe7mOWItuWvueixoeS4iueahOWdkOagh+S9jee9rlxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcGFyYW0gdmlld0V2dFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0RXZlbnRWaWV3UG9zKGV2dDogTW91c2VFdmVudCwgdmlld0V2dDogRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHZpZXdFdnQuZ2xvYmFsWCA9IGV2dC5vZmZzZXRYIC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICAgICAgdmlld0V2dC5nbG9iYWxZID0gZXZ0Lm9mZnNldFkgLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJldlRyYWNrSW5mbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5pi+56S65o+Q56S65L+h5oGvXG4gICAgICog5pi+56S655WZ55eV5o+Q56S65L+h5oGv562JXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRUaXBzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIucmVuZGVyLmVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEdldFRyYWNrVGlwc0V2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gZWxlbWVudDtcbiAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnR2V0VHJhY2tUaXBzJywgZWxlbWVudCwgZXZlbnQsICdCdWJibGluZycsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgaWYgKGV2ZW50LnRyYWNrVGlwcykge1xuICAgICAgICAgICAgdGhpcy50cmFja1RpcHNDaGFuZ2VkLm5leHQoe3Bvczogey4uLnRoaXMuY3VycmVudFBvc30sIHRpcHM6IGV2ZW50LnRyYWNrVGlwc30pO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhY2tJbmZvID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmV2VHJhY2tJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmFja1RpcHNDaGFuZ2VkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYWNrSW5mbyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmu5rliqjop4blm77nmoTml7blgJnvvIzpnIDopoHmiYvliqjop6blj5Ftb3VzZW1vdmVcbiAgICAgKi9cbiAgICBvblNjcm9sbFZpZXcoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gdGhpcy5jdXJyZW50UG9zLng7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSB0aGlzLmN1cnJlbnRQb3MueTtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmVIYW5kbGUoZG9jRXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhum8oOagh+aMieS4i+S6i+S7tlxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2Vkb3duSGFuZGxlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy/ngrnlh7vlj7PplK7ml7Ys55u05o6l6L+U5ZueXG4gICAgICAgIGlmIChldnQuYnV0dG9ucyA9PT0gMiAmJiB0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhldnQpO1xuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUodGhpcy5zdGFydEhpdEluZm8/LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEVsZW1lbnQgPSB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hFbGVtZW50Rm9jdXMoKTtcbiAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN6YCJ5Lit55qE5piv5q616JC956ym5Y+377yM5YiZ6ZyA6KaB5omL5Yqo5bCG5YW25YGP56e76YeP5a6a5L2N5Yiw5bem6L65XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtZW50IGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQgfHwgc3RhcnRFbGVtZW50IGluc3RhbmNlb2YgQnJlYWtFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEhpdEluZm8ub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vdGhpcy5zdGFydEhpdEluZm8uc3RhcnRSZWdpb24gPSB0aGlzLmdldFJlbmRlck9iamVjdFJlZ2lvbih0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIpO1xuICAgICAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gdGhpcy5zdGFydEhpdEluZm87XG4gICAgICAgICAgICBjb25zdCBtb3VzZWRvd25FdmVudCA9IG5ldyBNb3VzZWRvd25FbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgbW91c2Vkb3duRXZlbnQuc291cmNlID0gc3RhcnRFbGVtZW50O1xuICAgICAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudE1vdXNlZG93bicsIHN0YXJ0RWxlbWVudCwgbW91c2Vkb3duRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93biA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaXRJbmZvQ2hhbmdlZC5uZXh0KHtcbiAgICAgICAgICAgIHN0YXJ0SGl0SW5mbzogdGhpcy5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvLFxuICAgICAgICAgICAgZW5kSGl0SW5mbzogdGhpcy5lbmRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYPntKDnhKbngrnnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIHN3aXRjaEVsZW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRFbGVtZW50ICYmIHN0YXJ0RWxlbWVudC5mb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IHN0YXJ0RWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdCh0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6byg5qCH5omA5Zyo5L2N572u55qE5YWD57Sg5L+h5oGvXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRIaXRJbmZvKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiBIaXRFdmVudEluZm8gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShldnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtkb2NJbmRleCwgZG9jUmVuZGVyLCBoaXRQYWdlUG9zfSA9IGhpdERvY0luZm87XG4gICAgICAgIC8v6K6+572u5paH5qGj6aG15Lit55qE55u45a+55L2N572uXG4gICAgICAgIGV2dC5wYWdlWCA9IGhpdFBhZ2VQb3MueDtcbiAgICAgICAgZXZ0LnBhZ2VZID0gaGl0UGFnZVBvcy55O1xuXG4gICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoZG9jUmVuZGVyLCB7eDogMCwgeTogLWRvY1JlbmRlci5yZWN0Lnl9LCB7XG4gICAgICAgICAgICB4OiBldnQucGFnZVgsXG4gICAgICAgICAgICB5OiBldnQucGFnZVlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGhpdEluZm8ucmVuZGVyLmVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoaXREb2NJbmRleDogZG9jSW5kZXgsXG4gICAgICAgICAgICBvZmZzZXQ6IGhpdEluZm8ub2Zmc2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlcjogaGl0SW5mby5yZW5kZXIsXG4gICAgICAgICAgICByZWxhdGl2ZVJlY3Q6IGhpdEluZm8ucmVuZGVyLnJlY3QsXG4gICAgICAgICAgICBhYnNvbHV0ZVJlY3Q6IGhpdEluZm8uYWJzb2x1dGVSZW5kZXJSZWN0LFxuICAgICAgICAgICAgc2hhZG93UmVuZGVySW5kZXg6IGVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YoaGl0SW5mby5yZW5kZXIpLFxuICAgICAgICAgICAgc3RhcnRSZWdpb246IEVsZW1lbnRVdGlsLmdldFJlbmRlck9iamVjdFJlZ2lvbihoaXRJbmZvLnJlbmRlcilcbiAgICAgICAgfTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVySW5mbyhldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShldnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtkb2NJbmRleCwgZG9jUmVuZGVyLCBwYWludEFic29sdXRlUmVjdCwgaGl0UGFnZVBvc30gPSBoaXREb2NJbmZvO1xuICAgICAgICAvL+iuvue9ruaWh+aho+mhteS4reeahOebuOWvueS9jee9rlxuICAgICAgICBldnQucGFnZVggPSBoaXRQYWdlUG9zLng7XG4gICAgICAgIGV2dC5wYWdlWSA9IGhpdFBhZ2VQb3MueTtcbiAgICAgICAgLy9jb25zdCBkb2NSZW5kZXJQYXJlbnRBYnNvbHV0ZVBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLnBhcmVudCk7XG4gICAgICAgIC8vY29uc3QgbW91c2VvdmVySW5mbyA9IHRoaXMuZ2V0TW91c2VvdmVyUmVuZGVyKGRvY1JlbmRlciwgZG9jUmVuZGVyUGFyZW50QWJzb2x1dGVQb3MsIHsgeDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZICsgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH0pO1xuICAgICAgICBjb25zdCBtb3VzZW92ZXJJbmZvID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGRvY1JlbmRlciwge1xuICAgICAgICAgICAgeDogLWRvY1JlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiAtZG9jUmVuZGVyLnJlY3QueVxuICAgICAgICB9LCB7eDogZXZ0LnBhZ2VYLCB5OiBldnQucGFnZVl9KTtcbiAgICAgICAgcmV0dXJuIG1vdXNlb3ZlckluZm87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6byg5qCH56e75Yqo5LqL5Lu2XG4gICAgICog5Li76KaB5aSE55CG6YCJ5Yy65pS55Y+YXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZW1vdmVIYW5kbGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICAvL2NvbnNvbGUudGltZSgnbW91c2Vtb3Zl6K6h5pe2JylcbiAgICAgICAgbGV0IGVkZ2VSZW5kZXJJbmZvOiBudWxsIHwgdHlwZW9mIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgICAgICBjb25zdCBtb3VzZVBvczogUG9zaXRpb24gPSB7eDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZfTtcbiAgICAgICAgbGV0IGN1cnNvclR5cGU6IEN1cnNvclR5cGUgPSAndGV4dCc7XG4gICAgICAgIHRoaXMuY3VycmVudFBvcyA9IG1vdXNlUG9zO1xuICAgICAgICBpZiAodGhpcy5pc21vdXNlZG93biAmJiB0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGV2dCk7XG4gICAgICAgICAgICAvL+WPquaciem8oOagh+aMieS4i+eahOaXtuWAmemcgOimgeWPkeW4g+S6i+S7tlxuICAgICAgICAgICAgdGhpcy5wdWJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3Vyck1vdXNlb3ZlclJlbmRlckluZm8gPSB0aGlzLmdldE1vdXNlb3ZlclJlbmRlckluZm8oZXZ0KTtcbiAgICAgICAgLy/mlrDml6fkv6Hmga/kuI3kuIDoh7Qs6ZyA6KaB5qCh6aqM57uY5Yi25Yy65Z+f77yM6Kem5Y+RbW91c2VlbnRlcuOAgW1vdXNlbGVhdmXnrYnkuovku7ZcbiAgICAgICAgdGhpcy5pbnZva2VNb3VzZW1vdmVFdmVudCh0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciwgY3Vyck1vdXNlb3ZlclJlbmRlckluZm8/LnJlbmRlciwgbW91c2VQb3MpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIgPSBjdXJyTW91c2VvdmVyUmVuZGVySW5mbztcbiAgICAgICAgLy/lvZPliY3mnInlhYPntKDmnInnhKbngrnml7bvvIzpnIDopoHpppblhYjliKTmlq3lvZPliY3kvY3nva7mmK/lkKblnKjnhKbngrnlhYPntKDkuIpcbiAgICAgICAgLy/lpoLmnpzljZXlhYPmoLzkuK3ljIXlkKvlm77niYfnrYnlj6/nvKnmlL7nmoTlhYPntKDvvIzlubbkuJTlhYPntKDnmoTlpKflsI/otoXov4fljZXlhYPmoLzvvIzliJnlvZPliY3lm77niYfnmoTmn5DkuIDpg6jliIblsLHml6Dms5XnvKnmlL5cbiAgICAgICAgaWYgKCF0aGlzLmlzbW91c2Vkb3duICYmIHRoaXMuZm9jdXNlZEVsZW1lbnQgJiYgdGhpcy5mb2N1c2VkUmVjdCAmJiAoPGFueT50aGlzLmZvY3VzZWRFbGVtZW50KVsncmVzaXplYWJsZSddKSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVBvczogUG9zaXRpb24gPSB7eDogbW91c2VQb3MueCAtIHRoaXMuZm9jdXNlZFJlY3QueCwgeTogbW91c2VQb3MueSAtIHRoaXMuZm9jdXNlZFJlY3QueX07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblBpY3R1cmVSZXNpemVQb2ludCh0aGlzLmZvY3VzZWRSZWN0LCByZWxhdGl2ZVBvcywgNCk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3JUeXBlID0gRWxlbWVudFV0aWwuZ2V0Qm9yZGVyQ3Vyc29yKGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcj8uYm9yZGVyVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ6IHRoaXMuZm9jdXNlZEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0vL+W9k+WJjem8oOagh+S4jeWkhOS6jm1vdXNlZG93buW5tuS4lOm8oOagh+S9jeS6juWNleWFg+agvOi+ueeVjOaXtizojrflj5bovrnnlYzkv6Hmga9cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5pc0luQ2VsbFJlbmRlck9iamVjdCh0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIgYXMgUmVuZGVyT2JqZWN0LCBUYWJsZUNlbGxSZW5kZXJPYmplY3QpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIC8vY29uc3QgY2VsbFJlbmRlciA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIC8vY29uc3QgeyByZW5kZXI6IHsgcmVuZGVyUG9zaXRpb246IHsgeDogcngsIHk6IHJ5IH0gfSB9ID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyO1xuICAgICAgICAgICAgLy9jb25zdCBycCA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8uYWJzb2x1dGVSZW5kZXJSZWN0IGFzIFJlY3Q7XG4gICAgICAgICAgICBjb25zdCBycCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgcnAueSAtPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVk7XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVBvczogUG9zaXRpb24gPSB7eDogbW91c2VQb3MueCAtIHJwLngsIHk6IG1vdXNlUG9zLnkgLSBycC55fTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DZWxsQm9yZGVyID0gQ29tbW9uVXRpbC5pc0luUmVjdEJvcmRlcihjZWxsUmVuZGVyLnJlY3QsIDIsIHJlbGF0aXZlUG9zKTtcbiAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcikge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+aYr+WQpuWcqOi+ueahhuS4iicgKyBpc0luQ2VsbEJvcmRlcj8uYm9yZGVyVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJzb3JUeXBlID0gRWxlbWVudFV0aWwuZ2V0Qm9yZGVyQ3Vyc29yKGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3IubmV4dChjdXJzb3JUeXBlKTtcbiAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcj8uYm9yZGVyVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRWxlbWVudDogY2VsbFJlbmRlci5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBvcyxcbiAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpc0luQ2VsbEJvcmRlci5ib3JkZXJUeXBlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNtb3VzZWRvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBlZGdlUmVuZGVySW5mbztcbiAgICAgICAgfVxuICAgICAgICAvL+WtmOWcqOi+ueeVjOWFg+e0oO+8jOW5tuS4lOW9k+WJjei+ueeVjOWkhOS6jum8oOagh+aMieS4i+eKtuaAgVxuICAgICAgICBpZiAodGhpcy5lZGdlUmVuZGVySW5mbyAmJiB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93bikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVSZW5kZXIoZXZ0KTtcbiAgICAgICAgICAgIGN1cnNvclR5cGUgPSBFbGVtZW50VXRpbC5nZXRCb3JkZXJDdXJzb3IodGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlcj8uZWxlbWVudCBpbnN0YW5jZW9mIExlYWZFbGVtZW50ICYmICF0aGlzLmlzbW91c2Vkb3duICYmIGN1cnNvclR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyPy5lbGVtZW50LmN1cnNvclR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3IubmV4dChjdXJzb3JUeXBlKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgaXNDZWxsUmVuZGVyT2JqZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiByZW5kZXIgaW5zdGFuY2VvZiBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN57uY5Yi25YWD57Sg5piv5ZCm5Zyo5Y2V5YWD5qC85LiK6Z2iXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0luQ2VsbFJlbmRlck9iamVjdChyZW5kZXI6IFJlbmRlck9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocmVuZGVyLCBUYWJsZUNlbGxSZW5kZXJPYmplY3QpICE9PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXNpemVSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlciBpbnN0YW5jZW9mIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R6byg5qCH56e75Yqo5LqL5Lu2XG4gICAgICovXG4gICAgcHJpdmF0ZSBpbnZva2VNb3VzZW1vdmVFdmVudChvbGRSZW5kZXI6IFJlbmRlck9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQsIG5ld1JlbmRlcjogUmVuZGVyT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgbW91c2VQb3M6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRQYXJlbnRSZW5kZXJzID0gb2xkUmVuZGVyID8gRWxlbWVudFV0aWwuZ2V0UmVuZGVyTWFwRWxlbWVudHMob2xkUmVuZGVyKSA6IFtdO1xuICAgICAgICBjb25zdCBuZXdQYXJlbnRSZW5kZXJzID0gbmV3UmVuZGVyID8gRWxlbWVudFV0aWwuZ2V0UmVuZGVyTWFwRWxlbWVudHMobmV3UmVuZGVyKSA6IFtdO1xuICAgICAgICBjb25zdCBtb3VzZWxlYXZlUmVuZGVycyA9IG9sZFBhcmVudFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gbmV3UGFyZW50UmVuZGVycy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbW91c2VlbnRlclJlbmRlcnMgPSBuZXdQYXJlbnRSZW5kZXJzLmZpbHRlcihpdGVtID0+IG9sZFBhcmVudFJlbmRlcnMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IG1vdXNlbW92ZVJlbmRlcnMgPSBvbGRQYXJlbnRSZW5kZXJzLmZpbHRlcihpdGVtID0+IG1vdXNlbGVhdmVSZW5kZXJzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBsb29wSW52b2tlRXZlbnQgPSAoZXZlbnROYW1lOiBFdmVudFR5cGVzLCBhcnJheTogQXJyYXk8RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuc291cmNlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmludm9rZUV2ZW50KGV2ZW50TmFtZSwgbW91c2VFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCBtb3VzZWxlYXZlUmVuZGVycyk7XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnRWxlbWVudE1vdXNlRW50ZXInLCBtb3VzZWVudGVyUmVuZGVycyk7XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIG1vdXNlbW92ZVJlbmRlcnMpO1xuICAgIH1cblxuXG4gICAgcHJldkN1cnNvckl0ZW1zOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R6I635Y+W54Sm54K55LqL5Lu2XG4gICAgICog6ZyA6KaB5qC55o2u5LiK5qyh6I635Y+W54Sm54K555qE5YWD57Sg77yM5q+U6L6D6Kem5Y+R5aSx5Y6754Sm54K55LqL5Lu2XG4gICAgICogQHBhcmFtIGZvY3VzRWxlbWVudFxuICAgICAqL1xuICAgIGludm9rZUN1cnNvcihmb2N1c0VsZW1lbnQ6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0VsZW1lbnQgPT09IHRoaXMucHJldkN1cnNvckl0ZW1zWzBdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2V0Q3Vyc29yRXZlbnQgPSBuZXcgR290Q3Vyc29yRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBnZXRDdXJzb3JFdmVudC5zb3VyY2UgPSBmb2N1c0VsZW1lbnQ7XG5cbiAgICAgICAgY29uc3Qgb2xkUGFyZW50cyA9IHRoaXMucHJldkN1cnNvckl0ZW1zO1xuICAgICAgICBjb25zdCBuZXdQYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoZm9jdXNFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbGVhdmVQYXJlbnRzID0gb2xkUGFyZW50cy5maWx0ZXIoaXRlbSA9PiBuZXdQYXJlbnRzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBlbnRlclBhcmVudHMgPSBuZXdQYXJlbnRzLmZpbHRlcihpdGVtID0+IG9sZFBhcmVudHMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGxvb3BJbnZva2VFdmVudCA9IChldmVudE5hbWU6IEV2ZW50VHlwZXMsIGFycmF5OiBBcnJheTxFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBMb3N0Q3Vyc29yRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuc291cmNlID0gZm9jdXNFbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3R4ID0gdGhpcy5kb2NDdHg7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbnZva2VFdmVudChldmVudE5hbWUsIG1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0xvc3RDdXJzb3InLCBsZWF2ZVBhcmVudHMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0dvdEN1cnNvcicsIGVudGVyUGFyZW50cyk7XG5cbiAgICAgICAgdGhpcy5wcmV2Q3Vyc29ySXRlbXMgPSBuZXdQYXJlbnRzO1xuICAgICAgICAvL2REb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdHb3RDdXJzb3InLCBmb2N1c0VsZW1lbnQsIGdldEN1cnNvckV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vdXNlZG93bi1tb3VzZXVwLWNsaWNrXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZUNsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLlZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydEhpdEluZm8gJiYgdGhpcy5lbmRIaXRJbmZvICYmIHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQgPT09IHRoaXMuZW5kSGl0SW5mby5lbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEVsZW1lbnQgPSB0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIuZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlZG93bkV2ZW50ID0gbmV3IE1vdXNlZG93bkVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBtb3VzZWRvd25FdmVudC5zb3VyY2UgPSBzdGFydEVsZW1lbnQ7XG4gICAgICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50Q2xpY2snLCBzdGFydEVsZW1lbnQsIG1vdXNlZG93bkV2ZW50LCBcIkFsbFwiLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAvL3RoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkICYmIHRoaXMuc3RhcnRIaXRJbmZvICYmIHN0YXJ0Q29udHJvbCAmJiB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50ID09PSB0aGlzLmZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICAvL2NvbnN0IHsgcmVuZGVyOiB7IGVsZW1lbnQ6IGVuZEVsZW1lbnQgfSwgb2Zmc2V0OiBlbmRFbGVtZW50T2Zmc2V0IH0gPSB0aGlzLmVuZEhpdEluZm87XG4gICAgICAgICAgICAvL+W9k+WJjeeEpueCueWFg+e0oOiiq+aLluaUvlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEVsZW1lbnQgaW5zdGFuY2VvZiBQaWN0dXJlRWxlbWVudCAmJiB0aGlzLmZvY3VzZWRFbGVtZW50ICE9PSBzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wRXZlbnQgPSBuZXcgRHJvcEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LnNvdXJjZSA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuc291cmNlT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LmRyYWdFbGVtZW50ID0gdGhpcy5mb2N1c2VkRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudERyb3AnLCBzdGFydENvbnRyb2wsIGRyb3BFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY0NoYW5nZS5tb3ZlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCB0aGlzLmZvY3VzZWRFbGVtZW50LCB0aGlzLnN0YXJ0SGl0SW5mby5vZmZzZXQsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6byg5qCH5Y+M5Ye75LqL5Lu2XG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZURibENsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICAvL+mcgOimgeWFiOWkhOeQhuaYr+WQpuW8gOWQr+mhteeciemhteiEmue8lui+keWKn+iDvVxuICAgICAgICBjb25zdCBoaXRSZWdpb24gPSB0aGlzLmdldEhpdFJlZ2lvbihkb2NFdmVudCk7XG4gICAgICAgIGlmICgoaGl0UmVnaW9uID09PSAnZm9vdGVyJyB8fCBoaXRSZWdpb24gPT09ICdoZWFkZXInKSAmJiAhdGhpcy5kb2NDdHguZG9jdW1lbnQuaGVhZGVyRWRpdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKHRoaXMuc2VsZWN0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFJlZ2lvbiA9PT0gJ2JvZHknICYmIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmhlYWRlckVkaXRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcih0aGlzLnNlbGVjdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKGhpdEluZm8pIHtcbiAgICAgICAgICAgIGRvY0V2ZW50LnNvdXJjZSA9IGhpdEluZm8uZWxlbWVudDtcbiAgICAgICAgICAgIGRvY0V2ZW50LnNvdXJjZVJlbmRlciA9IGhpdEluZm8ucmVuZGVyO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudERibENsaWNrJywgaGl0SW5mby5lbGVtZW50LCBkb2NFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGJsQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoTmuLLmn5PlhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0XG4gICAgICogQHBhcmFtIHBhclBvc1xuICAgICAqIEBwYXJhbSBoaXRQb3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbiwgaGl0UG9zOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCBvZmZzZXQ6IG51bWJlciwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgLy/lpITnkIbljZXlhYPmoLzlkIjlubbvvIzooqvlkIjlubbnmoTljZXlhYPmoLzlvZPliY3lsZ7kuo7ooqvpmpDol4/nirbmgIEs5LiN6IO96KKr6YCJ5oupXG4gICAgICAgIC8vaWYgKHJlbmRlck9iamVjdC5lbGVtZW50ICYmIHJlbmRlck9iamVjdC5lbGVtZW50LnZpc2lhYmxlID09PSBmYWxzZSB8fCByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXJPYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlbmRlck9iamVjdC5yZWN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlck9iamVjdC5yZWN0IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlck9iamVjdC5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlck9iamVjdC5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VFJvd0hpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0LCBwYXJQb3MsIGhpdFBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBoaXRQb3MueCAtIHJlbmRlck9iamVjdFJlY3QueDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQocmVuZGVyT2JqZWN0LCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBoaXRQb3MpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihjaGlsZFJlbmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogcmVuZGVyT2JqZWN0UmVjdC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcmVuZGVyT2JqZWN0UmVjdC55XG4gICAgICAgICAgICAgICAgICAgIH0sIGhpdFBvcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3ojIPlm7TmnKrlh7vkuK3ku7vkvZXlhYPntKDvvIzliJnpnIDopoHljLnphY3mnIDov5HnmoTlhYPntKBcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWNlbnRIaXRSZW5kZXIocmVuZGVyT2JqZWN0LCBwYXJQb3MsIGhpdFBvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRUUm93SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJlbmRlck9iamVjdC5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgLy/ot6jpobXph43lpI3mmL7npLrnmoTlpLTooYzvvIzlsZ7kuo7kuI3lj6/ngrnlh7vljLrln59cbiAgICAgICAgLy/lj6rmnInooajnrKzkuIDpobXpg6jliIblj6/ku6Xngrnlh7tcbiAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucGFpbnRSZW5kZXJzLmluZGV4T2YocmVuZGVyT2JqZWN0KSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyZW50LnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyZW50LnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoY2hpbGRSZW5kZXIsIHt4OiByZW5kZXJPYmplY3RSZWN0LngsIHk6IHJlbmRlck9iamVjdFJlY3QueX0sIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5aaC5p6c5b2T5YmN6IyD5Zu05pyq5Ye75Lit5Lu75L2V5YWD57Sg77yM5YiZ6ZyA6KaB5Yy56YWN5pyA6L+R55qE5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJlbnRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJlY2VudEhpdFJlbmRlcihyZW5kZXJPYmplY3Q6IEJyYW5jaFJlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIG9mZnNldDogbnVtYmVyLCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBjdXJyZW50UmVuZGVyUG9zOiBQb3NpdGlvbiA9IHt4OiByZW5kZXJPYmplY3QucmVjdC54ICsgcGFyZW50LngsIHk6IHJlbmRlck9iamVjdC5yZWN0LnkgKyBwYXJlbnQueX1cbiAgICAgICAgbGV0IGNoaWxkUmVuZGVycyA9IEVsZW1lbnRVdGlsLmdldEF2YWlsSGl0UmVuZGVyT2JqZWN0cyhyZW5kZXJPYmplY3QsIHBhcmVudCk7XG4gICAgICAgIGNoaWxkUmVuZGVycyA9IGNoaWxkUmVuZGVycy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5yZW5kZXIuZGlzYWJsZUNsaWNrKTtcbiAgICAgICAgbGV0IGNoaWxkcmVuUmVuZGVyTWFwID0gY2hpbGRSZW5kZXJzLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICByZWN0OiBpdGVtLnJlY3QsXG4gICAgICAgICAgICBkaXN0YW5jZTogRWxlbWVudFV0aWwuZ2V0RGlzdGFuY2VUb1JlY3QoaXRlbS5yZWN0LCBwb3NpdGlvbiksXG4gICAgICAgICAgICByZW5kZXI6IGl0ZW0ucmVuZGVyXG4gICAgICAgIH0pKVxuICAgICAgICAvL3JlY3RzID0gcmVjdHMuY29uY2F0KGNoaWxkUmVuZGVycy5tYXAoaXRlbSA9PiAoeyByZWN0OiBpdGVtLnJlY3QsIGRpc3RhbmNlOiBFbGVtZW50VXRpbC5nZXREaXN0YW5jZSh7IHg6IGl0ZW0ucmVjdC54ICsgaXRlbS5yZWN0LndpZHRoLCB5OiBpdGVtLnJlY3QueSB9LCBwb3NpdGlvbiksIHJlbmRlcjogaXRlbS5yZW5kZXIgfSkpKTtcbiAgICAgICAgY2hpbGRyZW5SZW5kZXJNYXAuc29ydCgoaXRlbTEsIGl0ZW0yKSA9PiBpdGVtMS5kaXN0YW5jZSAtIGl0ZW0yLmRpc3RhbmNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlblJlbmRlck1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYWRqYWNlbnRSZW5kZXIgPSBjaGlsZHJlblJlbmRlck1hcFswXTtcbiAgICAgICAgICAgIGlmICghYWRqYWNlbnRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZGphY2VudFJlbmRlci5yZW5kZXIgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldFJlY2VudEhpdFJlbmRlcihhZGphY2VudFJlbmRlci5yZW5kZXIsIGN1cnJlbnRSZW5kZXJQb3MsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhZGphY2VudFJlbmRlci5yZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICAgICAgICAgIGlmIChhZGphY2VudFJlbmRlci5yZWN0LnggPiBwb3NpdGlvbi54KSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRqYWNlbnRSZW5kZXIucmVjdC54ICsgYWRqYWNlbnRSZW5kZXIucmVjdC53aWR0aCA8IHBvc2l0aW9uLngpIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IGFkamFjZW50UmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uLnggLSBhZGphY2VudFJlbmRlci5yZWN0Lng7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IEVsZW1lbnRVdGlsLmdldEhpdFJlbmRlck9mZnNldChhZGphY2VudFJlbmRlci5yZW5kZXIsIHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogYWRqYWNlbnRSZW5kZXIucmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IGFkamFjZW50UmVuZGVyLnJlY3QsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoRkb2MtcGFnZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0RG9jUGFnZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogeyBkb2NSZW5kZXI6IERvY3VtZW50UmVuZGVyT2JqZWN0LCBwYWludEFic29sdXRlUmVjdDogUG9zaXRpb24sIGhpdFBhZ2VQb3M6IFBvc2l0aW9uLCBkb2NJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0UG9zOiBQb3NpdGlvbiA9IHt4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFl9O1xuICAgICAgICBjb25zdCBkb2NDb250YWluZXIgPSB0aGlzLmRvY3VtZW50UGFpbnQuZ2V0RG9jQ29udGFpbmVyKCk7XG4gICAgICAgIC8vbGV0IHsgeCwgeSB9ID0gZG9jQ29udGFpbmVyLnJlY3Q7XG4gICAgICAgIC8veSAtPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBkb2NDb250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChpKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyKTtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgIHg6IGRvY1Bvcy54LFxuICAgICAgICAgICAgICAgIHk6IGRvY1Bvcy55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBkb2NSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRvY1JlbmRlci5yZWN0LmhlaWdodFxuICAgICAgICAgICAgfSwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGkgPSBpID09PSBkb2NDb250YWluZXIubGVuZ3RoID8gaSAtIDEgOiBpO1xuICAgICAgICBjb25zdCBoaXREb2MgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGRvY1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoaGl0RG9jKTtcbiAgICAgICAgLy9jb25zdCBkb2NQb3MgPSB7IHg6IGhpdERvYy5yZWN0LnggKyB4LCB5OiBoaXREb2MucmVjdC55ICsgeSB9O1xuICAgICAgICBjb25zdCBoaXRQYWdlUG9zOiBQb3NpdGlvbiA9IHt4OiBoaXRQb3MueCAtIGRvY1Bvcy54LCB5OiBoaXRQb3MueSAtIGRvY1Bvcy55ICsgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9jUmVuZGVyOiBoaXREb2MsXG4gICAgICAgICAgICBwYWludEFic29sdXRlUmVjdDogZG9jUG9zLFxuICAgICAgICAgICAgZG9jSW5kZXg6IGksXG4gICAgICAgICAgICBoaXRQYWdlUG9zXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5Hkuovku7ZcbiAgICAgKiBAcGFyYW0gdHlwZVxuICAgICAqIEBwYXJhbSBzb3VyY2VFbGVtZW50XG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICogQHBhcmFtIGV2ZW50U3RhZ2VcbiAgICAgKiBAcGFyYW0gZG9jQ3R4XG4gICAgICovXG4gICAgc3RhdGljIGludm9rZUV2ZW50KHR5cGU6IEV2ZW50VHlwZXMsIHNvdXJjZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50OiBFbGVtZW50RXZlbnQsIGV2ZW50U3RhZ2U6IEV2ZW50U3RhZ2UsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IEVsZW1lbnRFdmVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoc291cmNlRWxlbWVudCk7XG4gICAgICAgIC8v5YWI5omn6KGM5o2V6I636Zi25q61LOWcqOaJp+ihjOWGkuazoVxuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID4gLXBhcmVudHMubGVuZ3RoOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpID4gMSAmJiAoZXZlbnRTdGFnZSAhPT0gJ0NhcHR1cmUnICYmIGV2ZW50U3RhZ2UgIT09ICdBbGwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPD0gMCAmJiAoZXZlbnRTdGFnZSAhPT0gJ0J1YmJsaW5nJyAmJiBldmVudFN0YWdlICE9PSAnQWxsJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50c1tNYXRoLmFicyhpKV07XG4gICAgICAgICAgICBldmVudC5jdXJyZW50RWxlbWVudCA9IGNoaWxkO1xuICAgICAgICAgICAgZXZlbnQuc291cmNlID0gc291cmNlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJDYXB0dXJlID0gaSA+IDA7XG4gICAgICAgICAgICBjaGlsZC5pbnZva2VFdmVudCh0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9jQ3R4Lmludm9rZVR5cGVIYW5kbGVyKGNoaWxkLCB0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgLy8gaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Y+R5biD5b2T5YmN55qE54K55Ye75L+h5oGvXG4gICAgICovXG4gICAgcHJpdmF0ZSBwdWJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoe1xuICAgICAgICAgICAgc3RhcnRIaXRJbmZvOiB0aGlzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm8sXG4gICAgICAgICAgICBlbmRIaXRJbmZvOiB0aGlzLmVuZEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlum8oOagh+aJgOWcqOeahOa4suafk+WFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3RcbiAgICAgKiBAcGFyYW0gcGFyZW50XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vdXNlb3ZlclJlbmRlcihyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhcmVudC54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXJPYmplY3QucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Li66KGo5Y2V5YWD5qC877yM5L2G5piv6KGo5qC85LiN5a2Y5Zyo5LiK5LiLcGFkZGluZ++8jFxuICAgICAgICAgICAgICAgIC8v5YiZ6KGo5qC85LiK6L655qGG5ZKM5LiL6L655qGG5Y+v6IO95Lya5ZKM5YaF5a65KHBhcmFncmFwaCnph43lj6DvvIxcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeWFieagh+WcqHRhYmxlLXJlbmRlcuS4iuaXtu+8jOWni+e7iOaXoOazleiOt+WPluWIsHRhYmxlLWNlbGwtcmVuZGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIFRhYmxlQ2VsbFJlbmRlck9iamVjdCAmJiAoQ29tbW9uVXRpbC5BcHByb3htYXRlVmFsdWVJblJhbmdlKHJlbmRlck9iamVjdFJlY3QueSwgMSwgcG9zaXRpb24ueSkgfHwgQ29tbW9uVXRpbC5BcHByb3htYXRlVmFsdWVJblJhbmdlKHJlbmRlck9iamVjdFJlY3QueSArIHJlbmRlck9iamVjdFJlY3QuaGVpZ2h0LCAxLCBwb3NpdGlvbi55KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TW91c2VvdmVyUmVuZGVyKGNoaWxkUmVuZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJPYmplY3RSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJPYmplY3RSZWN0LnlcbiAgICAgICAgICAgICAgICAgICAgfSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplUmVuZGVyKGU6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmVkZ2VSZW5kZXJJbmZvPy5yZW5kZXJFbGVtZW50KVsncmVzaXplYWJsZSddKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUVsZW1lbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lZGdlUmVuZGVySW5mbz8ucmVuZGVyRWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlQ2VsbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDZWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7ooajmoLxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZVRhYmxlQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gdGhpcy5nZXRSZXNpemVUYWJsZUNlbGwoKTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93blBvcyA9IHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zO1xuICAgICAgICBjb25zdCBtb3ZlRGlzdGFuY2VYID0gdGhpcy5jdXJyZW50UG9zLnggLSBtb3VzZWRvd25Qb3MueDtcbiAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGxFbGVtZW50LnBhcmVudDtcbiAgICAgICAgY29uc3QgdGFibGUgPSByb3c/LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGlmICghcm93IHx8ICF0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgfCB0YWJsZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGFibGUuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGlmIChbJ2xlZnQnLCAncmlnaHQnXS5pbmNsdWRlcyhib3JkZXIpKSB7XG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID09PSAwICYmIGJvcmRlciA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc2l6ZUNvbFdpZHRoID0gMDtcbiAgICAgICAgICAgIGxldCByZXNpemVDb2xJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoYm9yZGVyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xJbmRleCA9IGNlbGxJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoICs9IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICAgICAgY2VsbFdpZHRoIC09IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJvcmRlciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbEluZGV4ID0gY2VsbEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAvL+enu+WKqOacgOWQjuS4gOWIl+aXtu+8jOWPs+S+p+ayoeacieWIl+S6hu+8jHJlc2l6ZUNvbFdpZHRo55qE5YC85Li6LTFcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZUNvbFdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCAtPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsV2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocmVzaXplQ29sV2lkdGggIT0gLTEgJiYgcmVzaXplQ29sV2lkdGggPCAyMCkgfHwgY2VsbFdpZHRoIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgsIHJlc2l6ZUNvbFdpZHRoKTtcbiAgICAgICAgICAgIHRhYmxlLnNldENlbGxXaWR0aChjZWxsSW5kZXgsIGNlbGxXaWR0aCk7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRhYmxlLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoWydib3R0b20nLCAndG9wJ10uaW5jbHVkZXMoYm9yZGVyKSkge1xuICAgICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgYm9yZGVyID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5oyJ54Wn56e75Yqo5bqV6L656K6h566XXG4gICAgICAgICAgICByb3dJbmRleCA9IGJvcmRlciA9PT0gJ3RvcCcgPyByb3dJbmRleCAtIDEgOiByb3dJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVJvd0VsZSA9IHRhYmxlLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgcmVzaXplUm93UmVuZGVyID0gcmVzaXplUm93RWxlLm1lYXN1cmVSZW5kZXIgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocmVzaXplUm93UmVuZGVyLmVsZW1lbnQgIT09IHJlc2l6ZVJvd0VsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+e8qeaUvuihqOagvOihjOmrmOW6puWHuueOsOmUmeivryznu5jliLblhYPntKDlkozooajmoLzlr7nosaHkuI3lr7nlupQnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHJlc2l6ZVJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPz8gMDtcbiAgICAgICAgICAgIC8v5b2T5YmN6KGM5LiN5a2Y5Zyo5pyA5bCP6auY5bqm6K6+572u77yM5bm25LiU57yp5pS+6auY5bqm5Li66LSf5pWwXG4gICAgICAgICAgICBpZiAobWluSGVpZ2h0IDw9IDAgJiYgbW92ZURpc3RhbmNlWSA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+W9k+WJjeWGheWuuemrmOW6plxuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQgPSBFbGVtZW50VXRpbC5nZXRUYWJsZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQocmVzaXplUm93UmVuZGVyKTtcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dNaW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgaWYgKG1pbkhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IG1pbkhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+e8qeaUvueahOmrmOW6puWwj+S6juWGheWuuemrmOW6pu+8jOWImemHjee9ruihjOacgOWwj+mrmOW6plxuICAgICAgICAgICAgaWYgKHJlc2l6ZVJvd01pbkhlaWdodCA8PSByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy9yZXNpemVSb3dFbGUudHJQcm9wcy5taW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNpemVSb3dFbGUucHJvcHMubWluSGVpZ2h0ID0gcmVzaXplUm93TWluSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB0YWJsZS5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNpemVUYWJsZUNlbGwoKTogVGFibGVDZWxsRWxlbWVudCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlZGdlUmVuZGVySW5mbyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IHRoaXMuZWRnZVJlbmRlckluZm8ucmVuZGVyRWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCByb3cgPSBjZWxsRWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBpZiAoY2VsbEVsZW1lbnQucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcgfHwgYm9yZGVyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuZ2V0Q2hpbGQoaSAtIDEpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pih0YWJsZS5nZXRDb2xzQ291bnQoKSAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDosIPmlbTlhYPntKDlpKflsI9cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZUVsZW1lbnQoZTogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltZ0VsZW1lbnQgPSA8dW5rbm93bj50aGlzLmVkZ2VSZW5kZXJJbmZvLnJlbmRlckVsZW1lbnQgYXMgeyBwcm9wczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IH07XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBjb25zdCBtb3VzZWRvd25Qb3MgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcztcbiAgICAgICAgbGV0IG1vdmVEaXN0YW5jZVggPSB0aGlzLmN1cnJlbnRQb3MueCAtIG1vdXNlZG93blBvcy54O1xuICAgICAgICBsZXQgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGlmIChbJ2xlZnQtdG9wJywgJ2xlZnQtbWlkZGxlJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LXRvcCcsICdyaWdodC1taWRkbGUnLCAncmlnaHQtYm90dG9tJywgJ3RvcC1taWRkbGUnLCAnYm90dG9tLW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoWydsZWZ0LW1pZGRsZScsICdyaWdodC1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFsndG9wLW1pZGRsZScsICdib3R0b20tbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vc2hpZnTplK7mjInmr5TkvovnvKnmlL5cbiAgICAgICAgICAgIGlmIChlLnNoaWZ0ICYmIFsnbGVmdC10b3AnLCAncmlnaHQtdG9wJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LWJvdHRvbSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobW92ZURpc3RhbmNlWCkgPiBNYXRoLmFicyhtb3ZlRGlzdGFuY2VZKSkge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVggLyBpbWdFbGVtZW50LnByb3BzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VZID0gTWF0aC5mbG9vcihzY2FsZSAqIGltZ0VsZW1lbnQucHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVkgLyBpbWdFbGVtZW50LnByb3BzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWCA9IE1hdGguZmxvb3Ioc2NhbGUgKiBpbWdFbGVtZW50LnByb3BzLndpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgKz0gbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIGlmIChpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3lhajpg6ggY3RybCtBXG4gICAgICovXG4gICAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHJlZ2lvblRhcmdldCA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb25UYXJnZXQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXJlZ2lvblRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0TGVhZiA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQocmVnaW9uVGFyZ2V0LnRhcmdldCk7XG4gICAgICAgIGNvbnN0IGxhc3RMZWFmID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHJlZ2lvblRhcmdldC50YXJnZXQpO1xuICAgICAgICBpZiAoIWZpcnN0TGVhZiB8fCAhbGFzdExlYWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3RMZWFmIG9yIGxhc3RMZWFmIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoZmlyc3RMZWFmLCAwKTtcbiAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGxhc3RMZWFmLCAtMSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UobmV3U2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAvL2NvbnN0IGRvYz1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOenu+WKqOWFieagh+WIsOihjOmmllxuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xpbmVTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Ib21lT3JFbmQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vliqjlhYnmoIfliLDooYzlsL5cbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MaW5lRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0hvbWVPckVuZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG56e75Yqo5YWJ5qCH5Yiw6KGM5bC+5oiW6KGM6aaWXG4gICAgICogQHBhcmFtIGhvbWVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgbW92ZUN1cnNvclRvSG9tZU9yRW5kKGhvbWU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXRoaXMuZG9jQ3R4LmN1cnNvclJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kb2NDdHguY3Vyc29yUmVjdDtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gcmVjdC54O1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBkb2NFdmVudC5idXR0b25zID0gMTtcbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaGl0SW5mby5yZW5kZXIsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdFxuICAgICAgICBjb25zdCBsaW5lUG9zUmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhcmFSZW5kZXIpXG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSBsaW5lUG9zUmVjdC54ICsgKGhvbWUgPyAwIDogbGluZVBvc1JlY3Qud2lkdGgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gbGluZVBvc1JlY3QueSArIGxpbmVQb3NSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0ge3g6IGRvY0V2ZW50Lmdsb2JhbFgsIHk6IGRvY0V2ZW50Lmdsb2JhbFl9O1xuICAgICAgICB0aGlzLm1vdXNlZG93bkhhbmRsZShkb2NFdmVudCk7XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlkJHlt6bnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MZWZ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAocHJldkVsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24ocHJldkVsZSk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1JlZ2lvbiAhPT0gb2xkUmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydENvbnRyb2wsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCR5Y+z56e75Yqo5YWJ5qCHXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLmlzTGVhZkVsZUVuZE9mZnNldChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkUmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihuZXh0RWxlKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkUmVnaW9uICE9PSBuZXdSZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeS4iuenu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb1VwT3JEb3duKHVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHt4LCB5fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zO1xuICAgICAgICB5IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0geDtcbiAgICAgICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSB5IC0gKHVwID8gaSAqIDIgOiBpICogLTIpO1xuICAgICAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IDE7XG4gICAgICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGhpdEluZm8/LmVsZW1lbnQgPT09IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sICYmIGhpdEluZm8ub2Zmc2V0ID09PSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHt4OiB4LCB5OiB5fTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlZG93bkhhbmRsZShkb2NFdmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YGP56e76YeP5piv5ZCm5aSE5LqO5b2T5YmN5YWD57Sg55qE5pyr5bC+XG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNMZWFmRWxlRW5kT2Zmc2V0KGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IG9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ID09PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54K55Ye755qE5paH5qGj5Yy65Z+fXG4gICAgICogQHBhcmFtIGRvY1JlbmRlclxuICAgICAqIEBwYXJhbSBwb3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldEhpdFJlZ2lvbihkb2NFdmVudDogTW91c2VFbGVtZW50RXZlbnQpOiBIaXRSZWdpb24gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShkb2NFdmVudCk7XG4gICAgICAgIGlmICghaGl0RG9jSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2RvY1JlbmRlciwgaGl0UGFnZVBvc30gPSBoaXREb2NJbmZvO1xuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXIgPSBFbGVtZW50VXRpbC5maW5kQ2hpbGRSZW5kZXIoZG9jUmVuZGVyLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgZm9vdGVyUmVuZGVyID0gRWxlbWVudFV0aWwuZmluZENoaWxkUmVuZGVyKGRvY1JlbmRlciwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICghaGVhZGVyUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb290ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9vdGVyIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyUmVuZGVyLnJlY3QueSArIGhlYWRlclJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgZm9vdGVyTGluZSA9IGZvb3RlclJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChoaXRQYWdlUG9zLnkgPD0gaGVhZGVyTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFBhZ2VQb3MueSA8PSBmb290ZXJMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JvZHknO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFBhZ2VQb3MueSA+IGZvb3RlckxpbmUgJiYgaGl0UGFnZVBvcy55IDwgZG9jUmVuZGVyLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Zvb3Rlcic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbiIsImltcG9ydCB7IExlYWZFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEtleWJvcmFkRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50RXZlbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1ldmVudFwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9zaXRpb25TdGFydEluZm8ge1xuICAgIGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBJbnB1dERhdGEge1xuICAgIGNvbXBvc2l0aW9uPzogYm9vbGVhbjtcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjueahOWFieagh+eahOi1t+eCueS9jee9rlxuICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvPzogSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgIC8v6L6T5YWl5rOV5LmL5YmN6L6T5YWl55qE5YaF5a65XG4gICAgcHJldklucHV0RGF0YT86IHN0cmluZztcbiAgICBkYXRhOiBzdHJpbmdcbn1cblxuLyoqXG4gKiDovpPlhaXlpITnkIZcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50SW5wdXQge1xuICAgIC8qKlxuICAgICAqIOWFieagh+mXqueDgeeKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgX2N1cnNvckJsaW5rc1N0YXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJzb3JCbGlua3NJbnRlcnZhbElEOiBhbnk7XG4gICAgLy/mmK/lkKbmmK/lvIDlkK/ovpPlhaXms5XkuoZcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uU3RhcnQgPSBmYWxzZTtcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjui+k+WFpeeahOaWh+Wtl1xuICAgIHByaXZhdGUgY29tcG9zaXRpb25QcmV2RGF0YSE6IHN0cmluZztcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjueahOeahOWFg+e0oFxuICAgIHByaXZhdGUgY29tcG9zaXRpb25TdGFydEluZm8hOiBJQ29tcG9zaXRpb25TdGFydEluZm8gfCBudWxsO1xuICAgIC8v6L6T5YWl5YaF5a655LqL5Lu2XG4gICAgb25JbnB1dEV2ZW50OiBTdWJqZWN0PElucHV0RGF0YT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vYmFja3NwYWNlIOmUruebmOS6i+S7tlxuICAgIG9uQmFja3NwYWNlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZGVsZXRlIOmUruebmOS6i+S7tlxuICAgIG9uRGVsZXRlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW50ZXIg6ZSu55uY5LqL5Lu2XG4gICAgb25FbnRlckV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+W3pumUrlxuICAgIG9uTGVmdEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WPs+mUrlxuICAgIG9uUmlnaHRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lpI3liLZcbiAgICBvbkNvcHlFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5Ymq5YiHXG4gICAgb25DdXRFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v57KY6LS0XG4gICAgb25QYXN0ZUV2ZW50OiBTdWJqZWN0PENsaXBib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/mj5LlhaXmjaLooYznrKZcbiAgICBvbkluc2VydEJyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2N0cmwrQSDlhajpgInkuovku7ZcbiAgICBvblNlbGVjdEFsbEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2hvbWUg5LqL5Lu2XG4gICAgb25Ib21lRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW5kIOS6i+S7tlxuICAgIG9uRW5kRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uVXBFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25Eb3duRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdElucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBwcml2YXRlIGVkaXRDdXJzb3I6IEhUTUxTcGFuRWxlbWVudCwgcHJpdmF0ZSBjdXJzb3JXcmFwcGVyOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnYmx1cicpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmoYYgYmx1cicpO1xuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmoYYgZm9jdXMnKTtcbiAgICAgICAgfSlcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnaW5wdXQnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0SW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmloflrZfkuoYnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5lZGl0SW5wdXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByZXZJbnB1dERhdGE6ICcnLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbnB1dCcpO1xuXG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudDxDb21wb3NpdGlvbkV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2NvbXBvc2l0aW9uc3RhcnQnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeazleW8gOWniycpO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDb21wb3NpdGlvbkV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2NvbXBvc2l0aW9udXBkYXRlJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PT0gdGhpcy5jb21wb3NpdGlvblByZXZEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5LqG77yaJyArIGV2dC5kYXRhKTtcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbyxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBwcmV2SW5wdXREYXRhOiB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGFcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgLy8gdGhpcy5jb21wb3NpdGlvblByZXZEYXRhID0gZXZ0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbmVuZCcpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb21wb3NpdGlvbmVuZCcpXG5cbiAgICAgICAgICAgIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZWRpdElucHV0LnZhbHVlLFxuICAgICAgICAgICAgICAgIHByZXZJbnB1dERhdGE6ICcnLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mb1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblByZXZEYXRhID0gJyc7XG5cbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQ6IHRoaXMuY29tcG9zaXRpb25TdGFydE9mZnNldCxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblJlY29yZENvbnRlbnQ6IHRoaXMuY29tcG9zaXRpb25SZWNvcmRDb250ZW50XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIHByZXZJbnB1dERhdGE6ICcnXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSBudWxsO1xuICAgICAgICAgICAgLy90aGlzLmNvbXBvc2l0aW9uUmVjb3JkQ29udGVudCA9ICcnO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBLZXlib3JhZEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBrZXlFdmVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgICAgIGlmIChEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50S2V5RG93bicsIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwga2V5RXZlbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDEzICYmICFldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXJFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNykge1xuICAgICAgICAgICAgICAgIHRoaXMub25MZWZ0RXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmlnaHRFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25VcEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRvd25FdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMTMgJiYgZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkluc2VydEJyLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmN0cmxLZXkgJiYgZXZ0LmtleUNvZGUgPT09IDY1KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW5kRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjb3B5XCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHlFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCBcInBhc3RlXCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblBhc3RlRXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjdXRcIikuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ3V0RXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY3Vyc29yQmxpbmtzSW50ZXJ2YWxJRCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCH6Zeq54OBXG4gICAgICovXG4gICAgc2V0Q3Vyc29yQmxpbmtzKCkge1xuICAgICAgICB0aGlzLmVkaXRDdXJzb3Iuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuX2N1cnNvckJsaW5rc1N0YXRlID8gJ3RyYW5zcGFyZW50JyA6ICdibGFjayc7XG4gICAgICAgIHRoaXMuX2N1cnNvckJsaW5rc1N0YXRlID0gIXRoaXMuX2N1cnNvckJsaW5rc1N0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh+S9jee9rlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHNldEN1cnNvclBvc2l0aW9uKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcjsgfSkge1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUubGVmdCA9IHBvc2l0aW9uLnggKyAncHgnO1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUudG9wID0gcG9zaXRpb24ueSArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5oZWlnaHQgPSBwb3NpdGlvbi5oZWlnaHQgKyAncHgnO1xuICAgICAgICB0aGlzLnNldEN1cnNvclZpc2liaWxpdHkodHJ1ZSk7XG4gICAgICAgIC8vdGhpcy5zZXRDdXJzb3JJbnB1dFN0YXR1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiZmuaLn+WFieagh+eahOWPr+ingeaAp1xuICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5XG4gICAgICovXG4gICAgc2V0Q3Vyc29yVmlzaWJpbGl0eSh2aXNpYmlsaXR5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gdmlzaWJpbGl0eSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICAgIGlmICh2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0Rm9jdXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ovpPlhaXnirbmgIFcbiAgICAgKiBAcGFyYW0gZm9jdXMgXG4gICAgICovXG4gICAgc2V0SW5wdXRGb2N1cyhmb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5mb2N1cygpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL3RoaXMuZWRpdElucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59IiwiaW1wb3J0IHtEb2N1bWVudElucHV0LCBJQ29tcG9zaXRpb25TdGFydEluZm8sIElucHV0RGF0YX0gZnJvbSBcIi4vZG9jdW1lbnQtaW5wdXQtY3Vyc29yXCI7XG5pbXBvcnQge1NlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgSW5saW5lR3JvdXBFbGVtZW50LFxuICAgIExlYWZFbGVtZW50LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1BTeW1ib2xFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7UmFuZ2VVdGlsfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEV2ZW50fSBmcm9tIFwiLi9kb2N1bWVudC1ldmVudFwiO1xuaW1wb3J0IHtLZXlib3JhZEVsZW1lbnRFdmVudH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUJhc2VQcm9wcywgUGFyYWdyYXBoUHJvcHMsIFRleHRQcm9wc30gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtFbGVtZW50UmVhZGVyfSBmcm9tIFwiLi9lbGVtZW50LXJlYWRlclwiO1xuaW1wb3J0IHtCcmVha0VsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RGF0YURlY29yYXRlRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQsXG4gICAgSXNJblNpZGVEYXRhRWxlbWVudCxcbiAgICBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50XG59IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRDb21tZW50fSBmcm9tIFwiLi9kb2N1bWVudC1jb21tZW50XCI7XG5pbXBvcnQge0NvbW1lbnRFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge25hbm9pZH0gZnJvbSBcIm5hbm9pZFwiO1xuaW1wb3J0IHtDb21tQ29udGVudEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7VmFsaWRhdGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQge1RyYWNrUnVuRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bX0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEJvZHlFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5cbi8qKlxuICog5paH5qGj5YaF5a655pS55Y+YXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENoYW5nZSB7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgcHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlYWRlcjogRWxlbWVudFJlYWRlciwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgZG9jQ29tbWVudDogRG9jdW1lbnRDb21tZW50LCBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbklucHV0RXZlbnQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQmFja3NwYWNlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2UoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRW50ZXJFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkVudGVyKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkNvcHlFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHkoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQ3V0RXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblBhc3RlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QYXN0ZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25JbnNlcnRCci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRTb2Z0QnIoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRGVsZXRlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25EZWxldGVLZXlIYW5kbGVyKGV2dClcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZXdJbnB1dChkYXRhOiBJbnB1dERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCwgZW5hYmxlVHJhY2tDaGFuZ2VzfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0QnlTZWxlY3RSYW5nZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WIpOaWreaYr+WQpumcgOimgeWIm+W7uuaWsOeahOeVmeeXleWMuuWfn1xuICAgICAgICBpZiAoZW5hYmxlVHJhY2tDaGFuZ2VzICYmICF0aGlzLmlzSW5Db3JyZWN0VHJhY2tSZWdpb24oc3RhcnRDb250cm9sIGFzIEVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0VHJhY2tDaGFuZ2VzKGRhdGEsIHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN6L6T5YWl6IqC54K55piv5Zyo55WZ55eV5Yy65Z+f5Lit77yM5L2G5piv5b2T5YmN5YWz6Zet5LqG5a6h6ZiF5qih5byP77yM6ZyA6KaB5ouG5YiG55WZ55eV5Yy65Z+f77yM5Yib5bu65paw6L6T5YWl6IqC54K5XG4gICAgICAgIGlmICghZW5hYmxlVHJhY2tDaGFuZ2VzICYmIHRoaXMuaXNJblRyYWNrQmxvY2soc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgY29tcCA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICAgICAgY29tcC5lbGVtZW50ID0gbmV3SW5wdXQ7XG4gICAgICAgICAgICBjb21wLm9mZnNldCA9IDA7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld0lucHV0LCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb21wb3NpdGlvblN0YXJ0SW5mbyBpcyBudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nVGV4dEVsZSA9IHN0YXJ0T2Zmc2V0ID09PSAxID8gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCkgOiBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChzaWJsaW5nVGV4dEVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvLm9mZnNldCA9IHN0YXJ0T2Zmc2V0ID09PSAwID8gc2libGluZ1RleHRFbGUudGV4dC5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAoc2libGluZ1RleHRFbGUsIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0R3JvdXAgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAoaW5wdXRUZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29udHJvbC5wYXJlbnQuYWRkQ2hpbGQobmV3VGV4dEdyb3VwLCBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld1RleHRHcm91cCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChzdGFydENvbnRyb2wsIGRhdGEpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit5Yy65Z+f5ZCO6L+b6KGM6L6T5YWlXG4gICAgICog6ZyA6KaB5aSE55CG5bCG6YCJ5Lit55qE5Yy65Z+f5Yig6Zmk5ZCO77yM6L+b6KGM6L6T5YWl55qE5oOF5Ya1XG4gICAgICovXG4gICAgb25JbnB1dEJ5U2VsZWN0UmFuZ2UoZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICBjb25zdCBjYiA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlZGl0YWJsZX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKCFlZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXAgPSBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgICAgIGNvbXAuZWxlbWVudCA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNvbXAub2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy/liKnnlKjlm57osIPlrozmiJDlkI7nu63nmoTovpPlhaXlpITnkIZcbiAgICAgICAgdGhpcy5kb2NDdHguc2V0UGFpbnRlZENhbGxiYWNrKGNiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDmmK/lkKblnKjmraPnoa7nmoTnlZnnl5XljLrln58oaW5zLXJ1buOAgWRlbC1ydW4p77yM5oOF5Ya15YiG5Li65Lul5LiL5oOF5Ya1XG4gICAgICogMS7nlZnnl5XlnZfnsbvlnovkuLrmlrDlop7vvIzkvYbmmK/nlZnnl5XlnZfnmoTliJvlu7rogIXkuLrlhbbku5bnlKjmiLfvvIzmraTml7bpnIDopoHmi4bliIbnlZnnl5XljLrln59cbiAgICAgKiAyLueVmeeXleWdl+S4uuW9k+WJjeeUqOaIt+WIm+W7uu+8jOS9huaYr+WIm+W7uuaXtumXtOWkp+S6juacieaViOeahOaXtumXtO+8jOatpOaXtumcgOimgeaLhuWIhueVmeeXleWMuuWfn1xuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpc0luQ29ycmVjdFRyYWNrUmVnaW9uKHN0YXJ0Q29udHJvbDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YXJ0Q29udHJvbC5wYXJlbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnRcbiAgICAgICAgICAgICYmIHBhcmVudC5wcm9wcy51c2VySWQgPT09IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWRcbiAgICAgICAgICAgICYmIHBhcmVudC50eXBlID09PSB0cmFja1R5cGVcbiAgICAgICAgICAgICYmIENvbW1vblV0aWwuZ2V0Tm93RGlmZlNlY29uZHMocGFyZW50LnByb3BzLmRhdGUpIDw9IHRoaXMudmlld09wdGlvbnMudHJhY2tDaGFuZ2VQZXJpb2Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo55WZ55eV5Yy65Z+fKGlucy1ydW7jgIFkZWwtcnVuKeS4rVxuICAgICAqIEBwYXJhbSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpc0luVHJhY2tCbG9jayh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSB8IG51bGwgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmICh0cmFja1R5cGUgPT09IG51bGwgfHwgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeVmeeXlei+k+WFpVxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgbmV3SW5wdXRUcmFja0NoYW5nZXMoZGF0YTogSW5wdXREYXRhLCBzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQ7XG4gICAgICAgIGNvbnN0IGNvbXBJbmZvID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgIGlmICh0aGlzLmlzSW5Db3JyZWN0VHJhY2tSZWdpb24oc3RhcnRDb250cm9sLCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0Jsb2NrKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gdGhpcy5jcmVhdGVOZXdUcmFja0lucHV0KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpO1xuICAgICAgICAgICAgY29tcEluZm8ub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGNvbXBJbmZvLmVsZW1lbnQgPSBuZXdJbnB1dDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3SW5wdXQsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgICAgICBuZXdUZXh0R3JvdXBcbiAgICAgICAgICAgIH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCBudWxsLCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBbdHJhY2tFbGVtZW50XSlcbiAgICAgICAgICAgIGNvbXBJbmZvLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb21wSW5mby5lbGVtZW50ID0gbmV3VGV4dEdyb3VwO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChuZXdUZXh0R3JvdXAsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliJvlu7rmlrDnmoTnlZnnl5XlnZcs5bm26L+U5Zue55WZ55eV5Z2X6L6T5YWl5a6a5L2N5paH5pysXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGNyZWF0ZU5ld1RyYWNrSW5wdXQoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY3VyclRyYWNrRWxlID0gc3RhcnRDb250cm9sLnBhcmVudCBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRleHQgPSBzdGFydENvbnRyb2wuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpIGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKHNwbGl0VGV4dCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldCA+IDAgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgICAvL+WIh+WJsueVmeeXleWdl1xuICAgICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgY3VyclRyYWNrRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUcmFjayA9IGN1cnJUcmFja0VsZS5zcGxpdChzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHNwbGl0VHJhY2ssIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCB7dHJhY2tFbGVtZW50LCBuZXdUZXh0R3JvdXB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgdGV4dFByb3BzLCB0cmFja1R5cGUpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3RyYWNrRWxlbWVudCwgbmV3VGV4dEdyb3VwfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2wsIHRleHRQcm9wcywgdHJhY2tUeXBlKTtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIChpbmRleCA9PT0gMCA/IDAgOiAxKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6L6T5YWl6IqC54K555qE5paH5pys5bGe5oCnXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBUZXh0UHJvcHMge1xuICAgICAgICBsZXQgdGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMgPSBzdGFydENvbnRyb2wucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICAgICAgaWYgKGRhdGFFbGUgJiYgSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIG9mZnNldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhRWxlLnByb3BzLnZhbHVlVGV4dFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0UHJvcHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u6YCJ6aG56YWN572u6L+U5Zue5Yib5bu65paH5pys55qE6buY6K6k5paH5pys5bGe5oCnXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERlZmF1bHRUZXh0UHJvcHNCeU9wdGlvbnMoKTogVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHByb3BzLmZvbnROYW1lID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHByb3BzLmZvbnRTaXplID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHByb3BzLmNvbG9yID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDkvY3kuo7nlZnnl5XljLrln5/lhoXvvIzkvYbmmK/lvZPliY3nvJbovpHmqKHlvI/kuLrpnZ7nlZnnl5XmqKHlvI/vvIzpnIDopoHlsIblvZPliY3nlZnnl5XlhYPntKDliIblibLlvIDmnaXvvIzmj5LlhaXmlrDmma7pgJrmlofmnKzlhYPntKDlr7nosaEs5bm26L+U5ZueXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3BsaXRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBpZiAoIShzdGFydENvbnRyb2wucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRDb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY3VyclRyYWNrRWxlID0gc3RhcnRDb250cm9sLnBhcmVudCBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRleHQgPSBzdGFydENvbnRyb2wuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpIGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKHNwbGl0VGV4dCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldCA+IDAgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgY3VyclRyYWNrRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUcmFjayA9IGN1cnJUcmFja0VsZS5zcGxpdChzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHNwbGl0VHJhY2ssIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHMpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChuZXdJbnB1dCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KG5ld0lucHV0LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wcyk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKG5ld0lucHV0LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIChpbmRleCA9PT0gMCA/IDAgOiAxKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFRyYWNrRWxlbWVudChuZXdJbnB1dCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliJvlu7rmj5LlhaUoaW5zLXJ1bikg55WZ55eVLOW5tuS4lOi/lOWbnueVmeeXleeahOaWh+acrOWFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2w6IEVsZW1lbnQsIHRleHRQcm9wczogVGV4dFByb3BzIHwgbnVsbCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogeyB0cmFja0VsZW1lbnQ6IFRyYWNrUnVuRWxlbWVudCwgbmV3VGV4dEdyb3VwOiBUZXh0R3JvdXBFbGVtZW50IH0ge1xuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgdGV4dFByb3BzID0gdGV4dFByb3BzIHx8IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wc0J5T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBuZXdUZXh0R3JvdXAgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAodGV4dFByb3BzKTtcbiAgICAgICAgbmV3VGV4dEdyb3VwLnByb3BzLmNvbG9yID0gJyc7XG4gICAgICAgIC8vbmV3VGV4dEdyb3VwLnByb3BzLmNvbG9yID0gJyNmZjRkNGYnO1xuICAgICAgICB0cmFja0VsZW1lbnQuYWRkQ2hpbGQobmV3VGV4dEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRyYWNrRWxlbWVudCh0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUcmFja1J1bkVsZW1lbnQge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnQgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy51c2VySWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMudXNlck5hbWUgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLm5hbWU7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy5kYXRlID0gQ29tbW9uVXRpbC5mb3JtYXROb3coJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLmlkID0gbmFub2lkKDUpO1xuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5wdXRUZXh0R3JvdXAodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGEgPSBkYXRhLnByZXZJbnB1dERhdGEgfHwgJyc7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGFMZW5ndGggPSBwcmV2SW5wdXREYXRhLmxlbmd0aDtcbiAgICAgICAgaWYgKCFkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXBvc2l0aW9uU3RhcnRJbmZvIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtlbGVtZW50LCBvZmZzZXR9ID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgbGV0IHN0YXJ0SW5wdXRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIC8vc3RhcnRJbnB1dE9mZnNldCAtPSBwcmV2SW5wdXREYXRhTGVuZ3RoO1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkpIHtcbiAgICAgICAgICAgIC8v5b2T5YmN6YCJ5Lit5YWD57Sg5L2N5LqO6L6T5YWl5YWD57Sg5piv6LW35aeL6L+Y5piv57uT5p2f5L2N572u77yM5aaC5p6c5L2N5LqO6LW35aeL5L2N572u77yM5YiZ6L6T5YWl5YGP56e76YeP5Li6MCzlkKbliJnkuLrmnKrlj5jmm7TkuYvliY3nmoTlhoXlrrlsZW5ndGhcbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudCkgPT09IHRleHQpIHtcbiAgICAgICAgICAgICAgICBzdGFydElucHV0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbnB1dE9mZnNldCA9IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCAtIHByZXZJbnB1dERhdGFMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGV4dC5zcGxpY2Uoc3RhcnRJbnB1dE9mZnNldCwgcHJldklucHV0RGF0YUxlbmd0aCwgZGF0YS5kYXRhKTtcbiAgICAgICAgLy/ovpPlhaXlkI7mkqTplIDvvIzlr7zoh7TmlofmnKznu4TlhoXkuLrnqbpcbiAgICAgICAgaWYgKCF0ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5VGV4dCh0ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0ZXh0LCBzdGFydElucHV0T2Zmc2V0ICsgZGF0YS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIGJhY2tzcGFjZSzlkJHliY3liKDpmaRcbiAgICAgKi9cbiAgICBvbkJhY2tzcGFjZShldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydENvbnRyb2wgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRFbGVtZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnRFbGVtZW50LmtleSA9ICdiYWNrc3BhY2UnO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnQmFja3NwYWNlS2V5Jywgc3RhcnRDb250cm9sLCBldmVudEVsZW1lbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5pc0NhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC51cGRhdGVDb21tZW50cygpO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRlLOWQkeWQjuWIoOmZpFxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkRlbGV0ZUtleUhhbmRsZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgZXZlbnRFbGVtZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnRFbGVtZW50LmtleSA9ICdkZWxldGUnO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRGVsZXRlS2V5Jywgc3RhcnRDb250cm9sLCBldmVudEVsZW1lbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5pc0NhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEZWxldGVFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInmi6nojIPlm7TliKDpmaRcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uUmFuZ2VEZWxldGUoKTogeyBjdXJzb3JFbGU6IEVsZW1lbnQsIGN1cnNvck9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB7c2VsZWN0ZWRSYW5nZX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VsZWN0aW9uUmFuZ2UgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgLy/nlKjkuo7liLfmlrDlkI7lrprkvY3lhYnmoIdcbiAgICAgICAgbGV0IHN0YXJ0UG9pbnRFbGVtZW50OiBFbGVtZW50O1xuICAgICAgICBsZXQgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAvL+afkOS4quWuueWZqOeahOWGheWuueiiq+WFqOmDqOmAieS4rVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBzZWxlY3RlZFJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5YaF5a655Z2X6KKr6YCJ5LitLOmcgOimgeWQkeS4iuWvu+aJvuWGheWuueWdl+WuueWZqFxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBCbG9ja0NvbnRlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHNlbGVjdGVkUmFuZ2UudGFyZ2V0LCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkgYXMgQmxvY2tDb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBwYXJlbnRDb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95ZCR5LiK5a+75om+5Yiw5a6a5L2N55qE5YaF5a655Z2X5a655ZmoJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq55+l5p2h5Lu25Yy66Ze0JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U3RhcnRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IFJhbmdlVXRpbC5nZXRFbmRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHN0YXJ0UmFuZ2UudGFyZ2V0LCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucykgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IC0xO1xuICAgICAgICAgICAgICAgIC8v5Yik5pat57uT5p2f6YCJ5Yy65ZKM5byA5aeL6YCJ5Yy65piv5ZCm5Zyo5LiA5Liq5q616JC95Lit77yM5bC96YeP6JC95Zyo5ZCM5LiA5q616JC95LitXG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydFBvaW50RWxlbWVudCB8fCBFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChzdGFydFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IGVuZFJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IHN0YXJ0UmFuZ2UudGFyZ2V0IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2VJbkZvcm1FZGl0KHNlbGVjdGVkUmFuZ2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydFBvaW50RWxlbWVudCwgc3RhcnRQb2ludE9mZnNldCk7XG4gICAgICAgIHJldHVybiB7Y3Vyc29yRWxlOiBzdGFydFBvaW50RWxlbWVudCwgY3Vyc29yT2Zmc2V0OiBzdGFydFBvaW50T2Zmc2V0fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBiYWNrc3BhY2XliKDpmaRcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChjb250cm9sLCBwcmV2RWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCkgPT09IHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUVsZW1lbnQocHJldkVsZSwgRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2RWxlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v6ZyA6KaB5Yik5pat5piv5ZCm5piv5YWE5byf5q616JC977yM5YWE5byf5q616JC977yM6ZyA6KaB5ZCI5bm2XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUocHJldkVsZSwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShjb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6KGo5piO5piv57Sn5oyo552A55qE5Lik5Liq5q616JC977yM6KaB6L+b6KGM5q616JC95ZCI5bm2XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChjdXJyUGFyYSkgPT09IHByZXZQYXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCAtIDEsIDEpO1xuICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlUZXh0KGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQgLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50ICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgLy/nqbrmlbDmja7lhYPvvIzlubbkuJTlvZPliY3lhYnmoIflpITkuo7mlbDmja7lhYPlvIDlp4vkvY3nva5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGRhdGFFbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCAmJiB0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmp1bXBUb1ByZXZEYXRhRWxlbWVudChkYXRhRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi3s+WIsOS4iuS4gOS4quaVsOaNruWFg+S4rVxuICAgICAqIEBwYXJhbSBjdXJyRWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBqdW1wVG9QcmV2RGF0YUVsZW1lbnQoY3VyckVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSAhPT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRQcmV2RGF0YUVsZW1lbnQodGhpcy5kb2NDdHgsIGN1cnJFbGUgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCk7XG4gICAgICAgIGlmICghcHJldkVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZS5lbmREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRl5Yig6ZmkXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KGNvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIG5leHRFbGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChjb250cm9sKSA9PT0gbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RGVsZXRlRWxlbWVudChuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+mcgOimgeWIpOaWreaYr+WQpuaYr+WFhOW8n+auteiQve+8jOWFhOW8n+auteiQve+8jOmcgOimgeWQiOW5tlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKG5leHRFbGUsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoY29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+ihqOaYjuaYr+e0p+aMqOedgOeahOS4pOS4quauteiQve+8jOimgei/m+ihjOauteiQveWQiOW5tlxuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoY3VyclBhcmEpID09PSBuZXh0UGFyYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgobmV4dFBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5wYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudCBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAvL+epuuaVsOaNruWFg++8jOW5tuS4lOW9k+WJjeWFieagh+WkhOS6juaVsOaNruWFg+W8gOWni+S9jee9rlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihkYXRhRWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb250cm9sLmlzUHJlZml4ICYmIGRhdGFFbGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoZGF0YUVsZS5lbmREZWNvcmF0ZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLm9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KGNvbnRyb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5piv5ZCm5Y+v5Lul5Yig6Zmk5pWw5o2u57uEXG4gICAgICogQHBhcmFtIGRhdGFFbGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhRWxlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlVGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGV4dCwgb2Zmc2V0LCBsZW4pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0LnNwbGljZShvZmZzZXQsIGxlbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGVJdGVtKGl0ZW06IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgLy/liKDpmaTnrKblj7fkuI3ov5vooYznlZnnl5VcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblRyYWNrRGVsZXRlRWxlbWVudChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICBpdGVtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo55WZ55eV5YWD57Sg5YaFXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUgJiYgdGFyZ2V0LnBhcmVudC5wcm9wcy51c2VySWQgPT09IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQ7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5UcmFja0VsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGU7XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOeVmeeXlemZpOaWh+acrOS7peWklueahOWFtuS7luWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uVHJhY2tEZWxldGVFbGVtZW50KHRhcmdldDogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeeUqOaIt+WinuWKoOeahOWGheWuue+8jOWGheWuueebtOaOpeWIoOmZpOS4jemcgOimgeeVmeeXlVxuICAgICAgICBpZiAodGhpcy5pc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL3RhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgY29uc3QgdHJhY2tFbGUgPSB0aGlzLmdldE5leHRUcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICB0cmFja0VsZS5hZGRDaGlsZCh0YXJnZXQuY2xvbmUodHJ1ZSksIDApO1xuICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOaWh+acrOWIoOmZpOeVmeeXlVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlRGVsZXRlZFRyYWNrVGV4dCh0YXJnZXQ6IFRleHRHcm91cEVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0luVHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN55So5oi35aKe5Yqg55qE5YaF5a6577yM5b2T5YmN55So5oi35Yig6Zmk5pe25LiN6ZyA6KaB55WZ55eVXG4gICAgICAgIGlmICh0aGlzLmlzSW5DdXJyZW50VXNlclRyYWNrKHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5zcGxpY2Uob2Zmc2V0LCBsZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5YWo6YOo6KKr5Yig6ZmkXG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuID09PSB0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tJbnB1dFRleHQgPSB0aGlzLmdldE5leHRUcmFja0lucHV0RWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgICAgICB0cmFja0lucHV0VGV4dC50ZXh0ID0gdGFyZ2V0LnRleHQgKyB0cmFja0lucHV0VGV4dC50ZXh0O1xuICAgICAgICAgICAgdGFyZ2V0LnNwbGljZSgwLCBsZW4pO1xuICAgICAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2xlZnRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldCwgb2Zmc2V0ICsgbGVuKTtcbiAgICAgICAgdGFyZ2V0ID0gbGVmdEVsZW1lbnQgYXMgbmV2ZXI7XG4gICAgICAgIGxldCB0cmFja1RleHQ6IFRleHRHcm91cEVsZW1lbnQgPSB0aGlzLmdldE5leHRUcmFja0lucHV0RWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgIGNvbnN0IHNwVGV4dCA9IHRhcmdldC5zcGxpY2VUZXh0KHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoIC0gbGVuLCB0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCwgdHJ1ZSk7XG4gICAgICAgIHRyYWNrVGV4dC5zcGxpY2UoMCwgMCwgc3BUZXh0Py50ZXh0KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KHRhcmdldCwgdHJhY2tUeXBlLCB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkKVxuICAgICAgICBpZiAodHJhY2tFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEVsZSA9IHRyYWNrRWxlbWVudC5nZXRDaGlsZCgwKTtcbiAgICAgICAgICAgIGlmIChmaXJzdEVsZSAmJiBmaXJzdEVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RFbGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQuYWRkQ2hpbGQobmV3SW5wdXQsIDApO1xuICAgICAgICAgICAgICAgIHRhcmdldC5wcm9wcy5jbG9uZShuZXdJbnB1dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgICAgICBuZXdUZXh0R3JvdXBcbiAgICAgICAgICAgIH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQodGFyZ2V0LCB0YXJnZXQucHJvcHMsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgICAgICB0YXJnZXQucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgdGFyZ2V0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUZXh0R3JvdXA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0TmV4dFRyYWNrRWxlbWVudCh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRyYWNrUnVuRWxlbWVudCB7XG4gICAgICAgIGxldCB0cmFja0VsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ1RyYWNrRWxlbWVudCh0YXJnZXQsIHRyYWNrVHlwZSwgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZClcbiAgICAgICAgaWYgKCF0cmFja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyYWNrRWxlbWVudCA9IHRoaXMuY3JlYXRlVHJhY2tFbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgICAgICB0YXJnZXQucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgdGFyZ2V0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5YWD57Sg5bm25a6a5L2N5YWJ5qCHXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIHRydWUsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG5leHRFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIHByZXZFbGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSAmJiBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQobmV4dEVsZSkgPT09IGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWbnui9puS6i+S7tlxuICAgICAqL1xuICAgIG9uRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gdGhpcy5zcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTtcbiAgICAgICAgLy/pgInkuK3nmoTmmK/kuIDkuKrlhYPntKBcbiAgICAgICAgaWYgKGJyZWFrUGFyYSA9PT0gcGFyYWdyYXBoKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZVBhcmEgPSBwYXJhZ3JhcGguY2xvbmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZChjbG9uZVBhcmEsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeihqOagvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaW5zZXJ0VGFibGUodGI6IFRhYmxlRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICBicmVha1BhcmEucGFyZW50LmFkZENoaWxkKHRiLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0YiwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG5Ymy5b2T5YmN5q616JC955So5LqO5o+S5YWl6KGo5qC85oiW6ICF57KY6LS055qE5YaF5a65XG4gICAgICogQHBhcmFtIGluc2VydEl0ZW1zIOWIhuWJsuWQjuaPkuWFpeeahOWGheWuue+8jOWGheWuuemcgOimgeaYr2Jsb2Nr5oiW6ICF6KGo5qC85a+56LGhXG4gICAgICovXG4gICAgcHJpdmF0ZSBzcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTogUGFyYWdyYXBoRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBhcmFDb250YWluZXIgPSBwYXJhZ3JhcGgucGFyZW50O1xuICAgICAgICAvL+WmguaenOmAieS4reeahOaYr+auteiQveesrOS4gOS4quWFg+e0oFxuICAgICAgICBjb25zdCBmaXJzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHBhcmFncmFwaCk7XG4gICAgICAgIGlmICgoc3RhcnRDb250cm9sID09PSBmaXJzdExlYWYgJiYgc3RhcnRPZmZzZXQgPT09IDApIHx8IChzdGFydENvbnRyb2wgPT09IGZpcnN0TGVhZiAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkpIHtcbiAgICAgICAgICAgIC8vdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHBhcmFncmFwaCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocGFyYWdyYXBoKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJhUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBsYXN0LCAxLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZWxlY3RlZFBhcmFSYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSBFbGVtZW50VXRpbC5jbG9uZVJhbmdlKHNlbGVjdGVkUGFyYVJhbmdlLCB0cnVlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQoYnJlYWtQYXJhKTtcbiAgICAgICAgcGFyYUNvbnRhaW5lci5hZGRDaGlsZChicmVha1BhcmEsIHBhcmFncmFwaC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIC8vcGFyYUNvbnRhaW5lci5hZGRDaGlsZCh0YiwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICAvL3RoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuICAgICAgICByZXR1cm4gYnJlYWtQYXJhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuauteiQvVxuICAgICAqL1xuICAgIGNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIGN1cnJQYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCBjdXJyRWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2UGFyYUxlbmd0aCA9IHByZXZQYXJhLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJyUGFyYS5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKTtcbiAgICAgICAgICAgIHByZXZQYXJhLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvL2N1cnJQYXJhLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUGFyYUNvbnRhaW5lciA9IGN1cnJQYXJhLnBhcmVudDtcbiAgICAgICAgY3VyclBhcmEuZGVzdHJveSgpO1xuICAgICAgICBjdXJyUGFyYUNvbnRhaW5lci5yZW1vdmVDaGlsZChjdXJyUGFyYSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2UGFyYS5nZXRDaGlsZChwcmV2UGFyYUxlbmd0aCksIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqL1xuICAgIGRlbGV0ZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkQ2hpbGRyZW59ID0gcmFuZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJhbmdlID0gc2VsZWN0ZWRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNvbnN0IHt0YXJnZXQ6IGNoaWxkVGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZDogY2hpbGRGdWxsU2VsZWN0ZWR9ID0gY2hpbGRSYW5nZTtcbiAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50ICYmICFjaGlsZFRhcmdldC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVJdGVtKGNoaWxkVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7c3RhcnRPZmZzZXQsIGVuZE9mZnNldH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGV4dChjaGlsZFRhcmdldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8v55WZ55eV5qih5byPXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ooajmoLzlhajpgInnirbmgIHml7bvvIzmiafooYzliKDpmaTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgVGFibGVFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL+auteiQveWFqOmAieeKtuaAgeaXtu+8jOaJp+ihjOWIoOmZpOaTjeS9nFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOihqOWNleWMuuWfn+WIoOmZpOWkhOeQhlxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWxldGVSYW5nZUluRm9ybUVkaXQocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHJhbmdlLnRhcmdldCk7XG4gICAgICAgIC8v5Zyo5pWw5o2u5YWD5YaF5Yig6Zmk77yM6LCD55So5pmu6YCa55qE5Yig6Zmk5aSE55CGXG4gICAgICAgIGlmIChkYXRhRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lnKjmlbDmja7lhYPlpJbliKDpmaRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5Y2V5qih5byPOuWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqL1xuICAgIHByaXZhdGUgbG9vcEZvckRlbERhdGFFbGVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzZWxlY3RlZENoaWxkcmVufSA9IHJhbmdlO1xuICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSYW5nZSA9IHNlbGVjdGVkQ2hpbGRyZW5baV07XG4gICAgICAgICAgICBjb25zdCB7dGFyZ2V0OiBjaGlsZFRhcmdldH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzID0gY2hpbGRUYXJnZXQucHJvcHMgYXMgRGF0YUVsZUJhc2VQcm9wcztcbiAgICAgICAgICAgICAgICAgICAgLy/mlbDmja7lhYPlj6/nvJbovpFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFFbGVQcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9vcEZvckRlbERhdGFFbGVSYW5nZShjaGlsZFJhbmdlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5ZCR55uu5qCH56e75Yqo5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0T2Zmc2V0XG4gICAgICogQHBhcmFtIG1vdmVFbGVtZW50XG4gICAgICogQHBhcmFtIG1vdmVPZmZzZXRcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBtb3ZlRWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgbW92ZUVsZW1lbnQ6IEVsZW1lbnQsIG1vdmVPZmZzZXQ6IG51bWJlciwgc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIG1vdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtsZWZ0RWxlbWVudCwgcmlnaHRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobGVmdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIGxlZnRFbGVtZW50LmdldEluZGV4KCkgKyAxKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCByaWdodEVsZW1lbnQuZ2V0SW5kZXgoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCB0YXJnZXRFbGVtZW50LmdldEluZGV4KCkgKyB0YXJnZXRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHNzLnJlc2V0UmFuZ2UobW92ZUVsZW1lbnQsIG1vdmVPZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeaMh+WumueahOebruagh+aPkuWFpeWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBkZXN0RWxlQXJyYXlcbiAgICAgKi9cbiAgICBpbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBkZXN0RWxlQXJyYXk6IEFycmF5PEVsZW1lbnQ+KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBsZXQgbGFzdEVsZSE6IEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtsZWZ0RWxlbWVudCwgcmlnaHRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobGVmdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RFbGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWxlID0gZGVzdEVsZUFycmF5W2ldO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobGFzdEVsZSwgbGVmdEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEgKyBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdEVsZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCByaWdodEVsZW1lbnQuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0RWxlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsYXN0RWxlID0gZGVzdEVsZUFycmF5W2ldXG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobGFzdEVsZSwgdGFyZ2V0RWxlbWVudC5nZXRJbmRleCgpICsgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdEVsZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOagueaNruW8gOWni+S9jee9ruWSjOe7k+adn+S9jee9ru+8jOWwhuWtl+espuWIh+WJsuaIkOaMh+WumueahOWMuumXtFxuICAgICAqIEBwYXJhbSBzcGxpdFRleHRVbml0XG4gICAgICogQHBhcmFtIHN0YXJ0XG4gICAgICogQHBhcmFtIGVuZFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0VGV4dEdyb3VwQnlSYW5nZSh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgZW5kID0gZW5kID09PSAtMSA/IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA6IGVuZDtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ID09PSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0VGV4dEdyb3VwID0gdGV4dC5zcGxpY2VUZXh0KGVuZCwgLTEsIHRydWUpO1xuICAgICAgICBsZXQgbWlkZGxlVGV4dEdyb3VwID0gdGV4dC5zcGxpY2VUZXh0KHN0YXJ0LCAtMSwgdHJ1ZSk7XG4gICAgICAgIGlmIChsYXN0VGV4dEdyb3VwKSB7XG4gICAgICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChsYXN0VGV4dEdyb3VwLCB0ZXh0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pZGRsZVRleHRHcm91cCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaWRkbGVUZXh0IGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChtaWRkbGVUZXh0R3JvdXAsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuXG4gICAgICAgIGlmICh0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlkZGxlVGV4dEdyb3VwO1xuICAgIH1cblxuICAgIHNwbGl0VGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHsgbGVmdEVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsLCByaWdodEVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsIH0ge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPT0gLTEgPyB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggOiBvZmZzZXQ7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudDogdGV4dCxcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQ6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudDogdGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHRleHQuc3BsaWNlVGV4dChvZmZzZXQsIC0xLCB0cnVlKTtcbiAgICAgICAgaWYgKHJpZ2h0VGV4dCkge1xuICAgICAgICAgICAgdGV4dC5wYXJlbnQuYWRkQ2hpbGQocmlnaHRUZXh0LCB0ZXh0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGVmdFRleHQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsID0gdGV4dDtcbiAgICAgICAgaWYgKHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxlZnRUZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdEVsZW1lbnQ6IGxlZnRUZXh0LFxuICAgICAgICAgICAgcmlnaHRFbGVtZW50OiByaWdodFRleHRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rumAieS4reeahOaWh+acrOagt+W8j1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSBzZXR0ZXJGdW5jXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0VGV4dFN0eWxlKHNzOiBTZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYzogKHRleHQ6IFRleHRHcm91cEVsZW1lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlIHx8IHNzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25TZXRSYW5nZVRleHRTdHlsZShyYW5nZSwgc2V0dGVyRnVuYyk7XG4gICAgICAgIGlmIChzdGFydFJhbmdlID09PSBlbmRSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHN0YXJ0UmFuZ2UudGFyZ2V0LCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTZWxlY3RlZE9mZnNldCA9IHNzLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFNlbGVjdGVkT2Zmc2V0ID0gc3MuZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUVsZW1lbnQgPSB0aGlzLnNwbGl0VGV4dEdyb3VwQnlSYW5nZShzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRTZWxlY3RlZE9mZnNldCwgZW5kU2VsZWN0ZWRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChtaWRkbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMobWlkZGxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KG1pZGRsZUVsZW1lbnQsIDApO1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobWlkZGxlRWxlbWVudCwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUVsZW1lbnQgPSB0aGlzLnNwbGl0VGV4dEdyb3VwQnlSYW5nZShzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KG1pZGRsZUVsZW1lbnQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChlbmRSYW5nZS50YXJnZXQsIC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKGVuZFJhbmdlLnRhcmdldCwgMCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMobWlkZGxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobWlkZGxlRWxlbWVudCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoZW5kUmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3MuYWRkUmFuZ2UobmV3U2VsZWN0aW9uUmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHJlY3Vyc2lvblNldFJhbmdlVGV4dFN0eWxlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNldHRlckZ1bmM6ICh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIFJhbmdlVXRpbC5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2UsIChpdGVtUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBpdGVtUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKGl0ZW1SYW5nZS50YXJnZXQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2V0UGFyYUFsaWduKHNzOiBTZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYzogKHRwOiBQYXJhZ3JhcGhQcm9wcykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBpZiAoc3MuY29sbGFwc2VkICYmIHNzLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmEpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKHBhcmEucHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJhbmdlVXRpbC5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2UsIChpdGVtUmFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhpdGVtUmFuZ2UudGFyZ2V0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWkjeWItlxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG9uQ29weShldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjb3B5U2VyaWFsaXplU3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZEpTT04odGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGlmICghY29weVNlcmlhbGl6ZVN0cikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2dC5jbGlwYm9hcmREYXRhPy5zZXREYXRhKCdkb2MvcGxhaW4nLCBjb3B5U2VyaWFsaXplU3RyKTtcbiAgICAgICAgY29uc3QgY29weVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRUZXh0KHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBldnQuY2xpcGJvYXJkRGF0YT8uc2V0RGF0YSgndGV4dC9wbGFpbicsIGNvcHlTdHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWJquWIh1xuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkN1dChldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Db3B5KGV2dCk7XG4gICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeymOi0tFxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG9uUGFzdGUoZXZ0OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHBhc3RlVGV4dCA9IGV2dC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gICAgICAgIGNvbnN0IHBhc3RlRGF0YSA9IGV2dC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCdkb2MvcGxhaW4nKTtcbiAgICAgICAgaWYgKCFwYXN0ZURhdGEpIHtcbiAgICAgICAgICAgIGlmIChwYXN0ZVRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlUGxhaW5UZXh0KHBhc3RlVGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFzdGVFbGVtZW50ID0gdGhpcy5lbGVSZWFkZXIucmVhZEVsZW1lbnQoSlNPTi5wYXJzZShwYXN0ZURhdGEpKTtcbiAgICAgICAgaWYgKCFwYXN0ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnspjotLTlj43luo/liJfljJbmlbDmja7lpLHotKUnLCBwYXN0ZURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgbGV0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAvL1RPRE865aaC5p6c5LiA5Liq5a655Zmo5YaF55qE5YWD57Sg6KKr5YWo6YOo5Yig6Zmk77yM5YiZ6L+U5ZueIG51bGxcbiAgICAgICAgICAgIC8vIGNvbnN0IHsgY3Vyc29yRWxlLCBjdXJzb3JPZmZzZXQgfSA9IHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICAgICAgLy8gc3RhcnRDb250cm9sID0gY3Vyc29yRWxlO1xuICAgICAgICAgICAgLy8gc3RhcnRPZmZzZXQgPSBjdXJzb3JPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8jzrlpoLmnpzlpI3liLbnmoTmmK/ljZXmoLzlvI/nmoTmlofmnKzvvIzpnIDopoHluo/liJfljJbkuLrnuq/mlofmnKzlpITnkIZcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgY29uc3QgcGFzdGVTdHJpbmcgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhwYXN0ZUVsZW1lbnQsIHthbGw6IGZhbHNlfSk7XG4gICAgICAgICAgICBpZiAocGFzdGVTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlUGxhaW5UZXh0KHBhc3RlU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCB8fCBwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgaWYgKHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLkVsZW1lbnRVdGlsLmdldENoaWxkcmVuRWxlbWVudHMocGFzdGVFbGVtZW50KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN57KY6LS055qE5YWD57Sg5Li65pWw5o2u5YWD77yM5bm25LiU5Zyo5pWw5o2u5YWD5YaF6YOo57KY6LS0XG4gICAgICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkgJiYgcGFzdGVFbGVtZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZUNoaWxkcmVuID0gcGFzdGVFbGVtZW50LmdldElubmVySXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLmNsb25lKHRydWUpKVxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnBhc3RlQ2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXN0ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmrrXokL3lrZDlhYPntKDkuLrnqbonKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RFbGUgPSB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY2hpbGRyZW4pIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobGFzdEVsZSwgLTEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCfnspjotLQ6JyArIHBhc3RlRGF0YSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0U29mdEJyKCk6IHZvaWQge1xuICAgICAgICBsZXQge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgbGFzdEVsZSA9IHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBbbmV3IEJyZWFrRWxlbWVudCgpXSkgYXMgRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNFbGUgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQobGFzdEVsZSk7XG4gICAgICAgIGlmIChmb2N1c0VsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGZvY3VzRWxlLCAwKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG6buP6LS055qE57qv5paH5pysXG4gICAgICogQHBhcmFtIHRleHRcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhc3RlUGxhaW5UZXh0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0SXRlbXMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQgfHwgdGV4dEl0ZW1zLmxlbmd0aCA9PT0gMSB8fCBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0ZXh0LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0SXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXJhID0gYnJlYWtQYXJhLmNsb25lKGZhbHNlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cChpbnB1dFRleHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgbmV3VGV4dEVsZS50ZXh0ID0gdGV4dEl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQobmV3VGV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZChuZXdQYXJhLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeauteiQvemhueebruespuWPt+exu+Wei1xuICAgICAqL1xuICAgIHNldFBhcmFncmFwaE51bWJlclR5cGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9ybWF0OiBQYXJ0aWFsPFBhcmFncmFwaFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAocGFyYS5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIGZvcm1hdC5udW1iZXJUeXBlID0gLTE7XG4gICAgICAgICAgICBmb3JtYXQuaW5kZW50ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdC5udW1iZXJUeXBlID0gMDtcbiAgICAgICAgICAgIGZvcm1hdC5pbmRlbnQgPSAxNTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhLnNldEZvcm1hdChmb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeaJueazqFxuICAgICAqL1xuICAgIGluc2VydENvbW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkIHx8ICFzdGFydENvbnRyb2wgfHwgIWVuZENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnc3RhcnQnO1xuXG4gICAgICAgIGNvbnN0IGVuZENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ2VuZCc7XG5cbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KGVuZENvbnRyb2wsIGVuZE9mZnNldCwgW2VuZENvbW1NYXJrXSlcbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFtzdGFydENvbW1NYXJrXSlcblxuICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IG5ldyBDb21tQ29udGVudEVsZW1lbnQoKTtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuY3JlYXRlSWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVOYW1lID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5uYW1lO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5kb2NDb21tZW50LmdldENvbW1NYXJrSW5kZXgoc3RhcnRDb21tTWFyayk7XG4gICAgICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+iOt+WPluaPkuWFpeeahOaJueazqOS9jee9ruS4jeato+ehricpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5hZGRDaGlsZChjb21tQ29udGVudCwgcG9zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGVycm9yRWxlTGlzdCA9IGRhdGFFbGVMaXN0Lm1hcChpdGVtID0+ICh7ZXJyb3I6IGl0ZW0udmFsaWRhdGUoKSwgZWxlOiBpdGVtfSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uZXJyb3IpO1xuICAgICAgICBpZiAoIWVycm9yRWxlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yRWxlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBuYW5vaWQoNSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ3N0YXJ0JztcblxuICAgICAgICAgICAgY29uc3QgZW5kQ29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGVuZENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgICAgICBlbmRDb21tTWFyay5wcm9wcy5tYXJrVHlwZSA9ICdlbmQnO1xuXG4gICAgICAgICAgICBpdGVtLmVsZS5hZGRDaGlsZChzdGFydENvbW1NYXJrLCAwKTtcbiAgICAgICAgICAgIGl0ZW0uZWxlLmFkZENoaWxkKGVuZENvbW1NYXJrLCBpdGVtLmVsZS5sZW5ndGgpXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gQ29tbW9uVXRpbC5udWxsVG9TdHJpbmcoaXRlbS5lbGUucHJvcHMuY2FwdGlvbik7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZUVsZW1lbnQgPSBuZXcgVmFsaWRhdGVFbGVtZW50KCk7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQucHJvcHMudGl0bGUgPSBjYXB0aW9uICsgJ+mqjOivgSc7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5zZXRDb250ZW50KGl0ZW0uZXJyb3IpO1xuXG4gICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmRvY0NvbW1lbnQuZ2V0Q29tbU1hcmtJbmRleChzdGFydENvbW1NYXJrKTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5hZGRDaGlsZCh2YWxpZGF0ZUVsZW1lbnQsIHBvcyk7XG5cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk56m65a2X56ym5LiyXG4gICAgICogQHBhcmFtIHRleHRcbiAgICAgKi9cbiAgICByZW1vdmVFbXB0eVRleHQodGV4dDogVGV4dEdyb3VwRWxlbWVudCk6IHZvaWQge1xuICAgICAgICAvL2NvbnN0IG5leHRMZWFmRWxlbWVudEluUGFyYSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudCh0ZXh0LCB0cnVlLCB0cnVlKTsgZ2V0Q29tcHV0ZWRTdHlsZVxuICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbih0ZXh0KTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGV4dC5wYXJlbnQ7XG4gICAgICAgIHRleHQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgIH1cblxuICAgIHNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihjb250cm9sOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnNvckluZm8gPSB0aGlzLmdldEN1cnNvckVsZW1lbnRCeURlbGV0ZUFjdGlvbihjb250cm9sKTtcbiAgICAgICAgaWYgKGN1cnNvckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjdXJzb3JJbmZvLmVsZSwgY3Vyc29ySW5mby5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Vyc29yRWxlbWVudEJ5RGVsZXRlQWN0aW9uKGNvbnRyb2w6IEVsZW1lbnQpOiB7IGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJldkxlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgLy/liKTmlq3mmK/lkKbkuLrlkIzkuIDmrrXokL1cbiAgICAgICAgaWYgKHByZXZMZWFmRWxlbWVudEluUGFyYSAmJiBFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChwcmV2TGVhZkVsZW1lbnRJblBhcmEsIGNvbnRyb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVsZTogcHJldkxlYWZFbGVtZW50SW5QYXJhLFxuICAgICAgICAgICAgICAgIG9mZnNldDogRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2TGVhZkVsZW1lbnRJblBhcmEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lkIzkuIDmrrXokL3lhbbku5blhYPntKBcbiAgICAgICAgY29uc3QgbmV4dExlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIHRydWUsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBpZiAobmV4dExlYWZFbGVtZW50SW5QYXJhKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVsZTogbmV4dExlYWZFbGVtZW50SW5QYXJhLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5LiK5LiA5q616JC9XG4gICAgICAgIGlmIChwcmV2TGVhZkVsZW1lbnRJblBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBwcmV2TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBwcmV2TGVhZkVsZW1lbnRJblBhcmEgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCA/IDAgOiBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KHByZXZMZWFmRWxlbWVudEluUGFyYSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnqbrooYzlhoXmoIfnrb5cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICovXG4gICAgcmVtb3ZlRW10cHlJbmxpbmVCbG9jayhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCAmJiBlbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGUucGFyZW50O1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXlvLrliLbmjaLpobXnrKblj7dcbiAgICAgKi9cbiAgICBpbnNlcnRQYWdlQnJlYWtQYXJhKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudClcbiAgICAgICAgaWYgKCFjdXJyUGFyYSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyUGFyYS5wYXJlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlQnJlYWsgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnByb3BzLnBhZ2VCcmVhayA9IHRydWU7XG4gICAgICAgICAgICBwYWdlQnJlYWsucHJvcHMudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICBwYWdlQnJlYWsucGFyZW50LmFkZENoaWxkKHBhZ2VCcmVhayk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1NlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7T3JpZW50VHlwZSwgUGFnZU9wdGlvbnMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50UGFpbnR9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHR9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBkb2N1bWVudFByaW50IHtcbiAgICBzdGF0aWMgcHJpbnQoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW5kZXJDYW52YXNOb2RlcyA9IHRoaXMuZ2V0UmVuZGVyQ2FudmFzTm9kZXMoc3MsIHZpZXdPcHRpb25zLCBkb2NDdHgsIHByaW50UmFuZ2VzKTtcbiAgICAgICAgaWYgKCFyZW5kZXJDYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6IqC54K5Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnROb2RlcyhyZW5kZXJDYW52YXNOb2RlcywgeyAuLi5kb2NDdHguZG9jdW1lbnQucHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi255qEY2FudmFz6IqC54K5XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKiBAcGFyYW0gZG9jQ3R4IFxuICAgICAqIEBwYXJhbSBwcmludFJhbmdlcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRSZW5kZXJDYW52YXNOb2RlcyhzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSxkb2NQYWdlU2V0dGluZ3M6e3dpZHRoLCBoZWlnaHQgfX0gPSB2aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3QgZGMgPSBzcy5yZW5kZXJDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGNhbnZhc0xpc3Q6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiA9IFtdO1xuICAgICAgICBjb25zdCBwcmludFBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFwcmludFJhbmdlcyB8fCBwcmludFJhbmdlcy5zb21lKHBhZ2VJbmRleCA9PiBwYWdlSW5kZXggPT09IGkpKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRQYWdlcy5wdXNoKDxEb2N1bWVudFJlbmRlck9iamVjdD5kYy5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmN1cnNvciA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNhbnZhc05vZGUuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXNOb2RlLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHMoY2FudmFzTm9kZSwgY3R4LCB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ3R4ID0gbmV3IFJlbmRlckNvbnRleHQobmV3IFBhaW50Q29udGVudChjdHgpKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5pbml0KHt3aWR0aCxoZWlnaHQsc2NhbGV9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5kcmF3TW9kZSA9ICdwcmludCc7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBwcmludFBhZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgdG1wID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGRvYy5yZWN0KTtcbiAgICAgICAgICAgIGRvYy5yZWN0LnggPSAwO1xuICAgICAgICAgICAgZG9jLnJlY3QueSA9IDA7XG4gICAgICAgICAgICBFbGVtZW50UGFpbnQuZHJhd1BhZ2UocmVuZGVyQ3R4LGRvY0N0eCwgZG9jLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJDdHgubWFpbkNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCwgJ3doaXRlJyk7XG4gICAgICAgICAgICByZW5kZXJDdHguY29tbWl0KHt3aWR0aCxoZWlnaHQsc2NhbGV9KTtcbiAgICAgICAgICAgIGRvYy5yZWN0ID0gdG1wO1xuICAgICAgICAgICAgY2FudmFzTGlzdC5wdXNoKGNhbnZhc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW52YXNMaXN0XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a+85Ye6YmFzZTY0XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKiBAcGFyYW0gZG9jQ3R4IFxuICAgICAqIEBwYXJhbSBwcmludFJhbmdlcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZXhwb3J0Q2FudmFzTm9kZXMoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlckNhbnZhc05vZGVzKHNzLCB2aWV3T3B0aW9ucywgZG9jQ3R4LCBwcmludFJhbmdlcyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lvZPliY3pobVcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIFxuICAgICAqL1xuICAgIHN0YXRpYyBwcmludEN1cnJQYWdlKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRIaXRJbmZvIH0gPSBzcztcbiAgICAgICAgaWYgKCFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NQYWdlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHN0YXJ0SGl0SW5mby5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgaWYgKCFkb2NQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmludChzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgW2RvY1BhZ2UuZ2V0SW5kZXgoKV0pO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJpbnRUZW1wbGF0ZSh7IHdpZHRoLCBoZWlnaHQsIG9yaWVudCB9OiBQYWdlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiemhcIj5cbiAgICA8aGVhZD5cbiAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgPHRpdGxlPjwvdGl0bGU+XG4gICAgICA8c3R5bGUgPlxuICAgICAgaHRtbCxcbiAgICAgIGJvZHkge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuICAgICAgKiB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB9XG4gICAgICBAcGFnZSB7XG4gICAgICAgICAgc2l6ZTogJHtvcmllbnR9O1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICAgIGRpdiB7XG4gICAgICAgICAgd2lkdGg6ICR7d2lkdGh9bW07XG4gICAgICAgICAgbWluLWhlaWdodDogJHtoZWlnaHR9bW07XG4gICAgICAgICAgZm9udC1zaXplOiAwO1xuICAgICAgfVxuICAgICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgICBodG1sLFxuICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICB3aWR0aDogJHt3aWR0aH1tbTtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAke2hlaWdodH1tbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGl2IHtcbiAgICAgICAgICAgICAgd2lkdGg6IGluaXRpYWw7XG4gICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IGluaXRpYWw7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgPC9zdHlsZT5cbiAgICA8L2hlYWQ+XG4gICAgPGJvZHk+PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgICBgLnJlcGxhY2UoL1xcbi9nLCAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoLycvZywgJ1xcXFxcXCcnKTtcbn1cblxuXG50eXBlIFByaW50UGFwZXJPcHRpb25zID0ge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgb3JpZW50OiBPcmllbnRUeXBlO1xufTtcblxuLyoqXG4gKiDmiZPljbBET01cbiAqIEBwYXJhbSBwcmludE5vZGVzIFxuICogQHBhcmFtIG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50Tm9kZXMocHJpbnROb2RlczogQXJyYXk8Tm9kZT4sIG9wdGlvbnM6IFByaW50UGFwZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgcHJpbnRJRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xuICAgIHByaW50SUZyYW1lLnNyYyA9ICdhYm91dDpibGFuayc7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuYm9yZGVyV2lkdGggPSAnMCc7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIwXCI7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHByaW50SUZyYW1lKTtcbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5vcGVuKFwidGV4dC9odG1sXCIsIFwicHJpbnRlclwiKTtcbiAgICBpZiAoIXByaW50Tm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6IqC54K5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJpbnRTaXplOiBQYWdlT3B0aW9ucyA9IG5ldyBQYWdlT3B0aW9ucyhvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgb3B0aW9ucy5vcmllbnQpO1xuICAgIGNvbnN0IGlmcmFtZUhUTUwgPSBjcmVhdGVQcmludFRlbXBsYXRlKHByaW50U2l6ZSk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQud3JpdGUoaWZyYW1lSFRNTCk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQuY2xvc2UoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW50Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHByaW50Tm9kZXNbaV07XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoaXRlbSk7XG4gICAgICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KVxuICAgIH1cbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LnByaW50KCk7XG4gICAgICAgIHByaW50SUZyYW1lLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKHByaW50SUZyYW1lKTtcbiAgICB9LCAwKTtcbn1cblxuLyoqXG4gKiBjYW52YXPoioLngrnlr7zlh7rliLBQREZcbiAqIEBwYXJhbSBmaWxlTmFtZSBcbiAqIEBwYXJhbSBub2RlcyBcbiAqIEBwYXJhbSBvcHRpb25zIFxuICovXG4vLyBleHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzVG9QREYoZmlsZU5hbWU6IHN0cmluZywgbm9kZXM6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50Piwgb3B0aW9uczogUHJpbnRQYXBlck9wdGlvbnMpOiB2b2lkIHtcbi8vICAgICBpZiAoIWZpbGVOYW1lKSB7XG4vLyAgICAgICAgIGZpbGVOYW1lID0gJ2RvY3VtZW50LnBkZic7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9bXFwvXFxcXDoqP1wiPD58XS9nLCAnXycpO1xuLy8gICAgICAgICBpZiAoIWZpbGVOYW1lLmVuZHNXaXRoKCcucGRmJykpIHtcbi8vICAgICAgICAgICAgIGZpbGVOYW1lICs9ICcucGRmJztcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBjb25zdCBwZGYgPSBuZXcganNQREYob3B0aW9ucy5vcmllbnQsICdweCcsIFtvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodF0pO1xuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgY2FudmFzID0gbm9kZXNbaV07XG4vLyAgICAgICAgIGNvbnN0IGltZ0RhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMS4wKTtcbi8vICAgICAgICAgcGRmLmFkZEltYWdlKGltZ0RhdGEsICdKUEVHJywgMCwgMCwgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpO1xuLy8gICAgICAgICBpZiAoaSA8IG5vZGVzLmxlbmd0aCAtIDEpIHtcbi8vICAgICAgICAgICAgIHBkZi5hZGRQYWdlKCk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgcGRmLnNhdmUoZmlsZU5hbWUpO1xuLy8gfSIsImltcG9ydCB7IFBhZGRpbmdQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFRlbXBsYXRlIHtcbiAgICBzdGF0aWMgY3JlYXRlQTREb2MoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICBkb2MucHJvcHMgPSBuZXcgRG9jdW1lbnRQcm9wcygpO1xuICAgICAgICBkb2MucHJvcHMud2lkdGggPSAyMTA7XG4gICAgICAgIGRvYy5wcm9wcy5oZWlnaHQgPSAyOTc7XG4gICAgICAgIGRvYy5wcm9wcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygyNS40LCAyNS40LCAxOS4xLCAxOS4xKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKSk7XG4gICAgICAgIGRvYy5hZGRDaGlsZChuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKSk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEV2YWxGdW5jIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG5cbiAgICB9XG4gICAgc2NyaXB0c0Z1bmMhOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICog5a6e5L6L5YyW5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgaW5pdFNjcmlwdHMoc2NyaXB0czogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveVNjcmlwdHMoKTtcbiAgICAgICAgaWYgKHNjcmlwdHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcImRvY0N0eFwiLCBzY3JpcHRzKVxuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0c0Z1bmMgPSBmdW5jKHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwi6Ieq5a6a5LmJ5qCH5pys6Kej5p6Q6ZSZ6K+vXCIsIGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgZnVuYyA9IChkb2NDdHg6IERvY3VtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3Qgc2V4RUxlID0gZG9jQ3R4LmdldENvbnRyb2xCeUlkKCdOcW9ZSScpXG4gICAgICAgIC8vICAgICBjb25zdCBkeUVsZSA9IGRvY0N0eC5nZXRDb250cm9sQnlJZCgnZ1R1QkknKTtcbiAgICAgICAgLy8gICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHNleEVMZSAmJiBkeUVsZSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBzZXhWYWx1ZSA9IHNleEVMZS5nZXRWYWx1ZSgpO1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBkeVZhbHVlID0gc2V4VmFsdWUgPT09ICcxJyA/ICfnlLfnmoTlkJcnIDogc2V4VmFsdWUgPT09ICcyJyA/ICflpbPnmoTlkJcnIDogJ+mavumBk+aYr+S6uuWmluWQlyc7XG4gICAgICAgIC8vICAgICAgICAgICAgIGR5RWxlLnNldFZhbHVlKGR5VmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH07XG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZSA5q+B5Yqo5oCB6ISa5pys5a6e5L6LXG4gICAgICovXG4gICAgZGVzdHJveVNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcmlwdHNGdW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdHNGdW5jID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIGludm9rZWRTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcmlwdHNGdW5jPy4oKTtcbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHsgSUltYWdlTG9hZGVyLCBJbWFnZVNvdXJjZUl0ZW0gfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBJbWdMb2FkU3RhdHVzIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9jdW1lbnRJbWFnZXNCYXNlTG9hZGVyIGltcGxlbWVudHMgSUltYWdlTG9hZGVyIHtcbiAgICBpbWFnZXM6IEFycmF5PEltYWdlU291cmNlSXRlbT4gPSBbXTtcblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmltYWdlcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShzcmM6IHN0cmluZywgb25DYWxsYmFjazogKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXNyYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5bey57uP5a2Y5Zyo55qE6LWE5rqQ5LiN6ZyA6KaB6YeN5paw5Yqg6L29XG4gICAgICAgIGxldCBtYXRjaEl0ZW0gPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEl0ZW0ubG9hZFN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgICAgIG1hdGNoSXRlbS5jYnMucHVzaChvbkNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb25DYWxsYmFjayhtYXRjaEl0ZW0ubG9hZFN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMuY3JlYXRlUmVxdWVzdEltYWdlKHNyYyk7XG4gICAgICAgIGNvbnN0IGltZ0l0ZW06IEltYWdlU291cmNlSXRlbSA9IHtcbiAgICAgICAgICAgIGVsZTogdW5kZWZpbmVkIGFzIGFueSxcbiAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgIGNiczogW29uQ2FsbGJhY2tdLFxuICAgICAgICAgICAgbG9hZFN0YXR1czogJ25vJyxcbiAgICAgICAgICAgIHRhc2tcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbWFnZXMucHVzaChpbWdJdGVtKVxuICAgICAgICAvLyBpZiAodGhpcy52aWV3T3B0aW9ucy5yZXNvdXJjZU1vZGUgPT09ICdpbW1lZGlhdGUnKSB7XG4gICAgICAgIC8vICAgICBlbGUub25sb2FkID0gKGUpID0+IHsgdGhpcy5pbnZva2VJbWdMb2FkKHNyYywgJ2NvbXBsZXRlZCcpOyB9O1xuICAgICAgICAvLyAgICAgZWxlLm9uZXJyb3IgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQoc3JjLCAnZXJyb3InKTsgfTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGFic3RyYWN0IGNyZWF0ZVJlcXVlc3RJbWFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICBpbnZva2VJbWdMb2FkKHNyYzogc3RyaW5nLCBzdGF0dXM6IEltZ0xvYWRTdGF0dXMsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgIGltZy5sb2FkU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgaW1nLmNicy5mb3JFYWNoKGNiID0+IGNiKHN0YXR1cykpO1xuICAgICAgICAgICAgaW1nLmVsZSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMb2FkVGFza3MoKTogQXJyYXk8UHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubWFwKGl0ZW0gPT4gaXRlbS50YXNrKTtcbiAgICB9XG5cblxuICAgIGdldEltYWdlKHNyYzogc3RyaW5nKTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgcmV0dXJuIGltZz8uZWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWbvueJh+aYr+WQpumDveW3sue7j+WKoOi9veWujOavlVxuICAgICAqIOeUqOS6juaJk+WNsOaXtuWIpOaWre+8jOWmguaenOW9k+WJjeWbvueJh+ayoeacieWKoOi9veWujOavleWwseaJk+WNsO+8jOWbvueJh+aYr+aJk+WNsOS4jeWHuuadpVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGltYWdlc0xvYWRDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5ldmVyeShpdGVtID0+IFsnY29tcGxldGVkJywgJ2Vycm9yJ10uaW5jbHVkZXMoaXRlbS5sb2FkU3RhdHVzKSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEltYWdlc0xvYWRlciBleHRlbmRzIERvY3VtZW50SW1hZ2VzQmFzZUxvYWRlciB7XG4gICAgY3JlYXRlUmVxdWVzdEltYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBlbGUuc3JjID0gdXJsO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIsIGkpID0+IHtcbiAgICAgICAgICAgIGVsZS5vbmxvYWQgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQodXJsLCAnY29tcGxldGVkJywgZWxlKTsgcigpOyB9O1xuICAgICAgICAgICAgZWxlLm9uZXJyb3IgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQodXJsLCAnZXJyb3InLCBlbGUpOyByKCk7IH07XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG59IiwiaW1wb3J0IHtEb2N1bWVudEV2YWxGdW5jfSBmcm9tIFwiLi9kb2N1bWVudC1ldmFsLWZ1bmNcIjtcbmltcG9ydCB7RG9jdW1lbnRJbWFnZXNMb2FkZXJ9IGZyb20gXCIuL2RvY3VtZW50LWltYWdlcy1sb2FkZXJcIjtcbmltcG9ydCB7U2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEhhbmRsZXIsXG4gICAgZWxlbWVudFR5cGVFdmVudEhhbmRsZXIsXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBNb2RpZnlGbGFnLFxuICAgIFJlY3QsXG4gICAgUmVmcmVzaFR5cGUsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudEV2ZW50LCBFdmVudFR5cGVzfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudFZhbHVlU3RydWN0LCBFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtcbiAgICBEYXRhRWxlbWVudENoZWNrLFxuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgRGF0YUVsZW1lbnRMZWFmLFxuICAgIERvY3VtZW50Qm9keVBhcnRFbGVtZW50LFxuICAgIERvY3VtZW50RWxlbWVudCxcbiAgICBUcmFja1J1bkVsZW1lbnQsXG4gICAgVHJhY2tSdW5UeXBlRW51bSxcbiAgICB2YWxpZGF0ZURhdGFFbGVcbn0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50Q2hhbmdlfSBmcm9tIFwiLi9kb2N1bWVudC1jaGFuZ2VcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuaW50ZXJmYWNlIFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxUIGV4dGVuZHMgRWxlbWVudD4ge1xuICAgIGVsZW1lbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0sXG4gICAgZXZlbnROYW1lOiBFdmVudFR5cGVzLFxuICAgIGhhbmRsZXI6IDxFIGV4dGVuZHMgRWxlbWVudEV2ZW50PihlOiBFKSA9PiB2b2lkLFxuICAgIHVzZUNhcHR1cmU6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiDlvZPliY3miZPlvIDnmoTmlofmoaPnmoTkuIrkuIvmlofkv6Hmga/vvIzlvZPliY3mlofmoaPmiYDmnInnmoTlsZ7mgKforr7nva7pg73mmrTpnLLlnKjkuIrkuIvmlofkuK1cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckNvbnRleHQge1xuICAgIGlzRGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjdXJzb3JSZWN0ITogUmVjdCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQhOiBEb2N1bWVudEVsZW1lbnQ7XG4gICAgLy/mlofmoaPliLfmlrDnmoTorqLpmIXkuovku7ZcbiAgICAvL3JlZlN1YiE6IFN1YnNjcmlwdGlvbjtcbiAgICBzeW5jUmVmcmVzaCE6ICgpID0+IHZvaWQ7XG4gICAgaW1hZ2VMb2FkZXI6IElJbWFnZUxvYWRlcjtcbiAgICBkeW5hbWljRnVuYzogRG9jdW1lbnRFdmFsRnVuYztcbiAgICBkb2NDaGFuZ2UhOiBEb2N1bWVudENoYW5nZTtcbiAgICBjbGVhclByZXZEb2NDYiE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgLy/nu5jliLbnu5PmnZ/kuYvlkI7lm57osIPlh73mlbBcbiAgICBwYWludGVkQ2FsbGJhY2shOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZSwgcHVibGljIHJlYWRvbmx5IHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICB0aGlzLmR5bmFtaWNGdW5jID0gbmV3IERvY3VtZW50RXZhbEZ1bmModGhpcyk7XG4gICAgICAgIHRoaXMuaW1hZ2VMb2FkZXIgPSBuZXcgRG9jdW1lbnRJbWFnZXNMb2FkZXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5vbkNoYW5nZWRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQYWludGVkQ2FsbGJhY2soY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYWludGVkQ2FsbGJhY2sgPSBjYjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRvY3VtZW50KCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRvY3VtZW50KHZhbHVlOiBEb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYj8uKCk7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFNjcmlwdHMoKTtcbiAgICAgICAgLy8gdGhpcy5yZWZTdWIgPSB0aGlzLl9kb2N1bWVudC5yZWZyZXNoU3ViamVjdC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIGRhdGEgPSBkYXRhID8/ICdjb250ZW50JztcbiAgICAgICAgLy8gICAgIHRoaXMuaXNEaXJ0eSA9IHRoaXMuaXNEaXJ0eSB8fCBkYXRhID09PSAnY29udGVudCc7XG4gICAgICAgIC8vICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oZGF0YSk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBjb25zdCBkb2NSZWZyZXNoU3ViID0gdGhpcy5fZG9jdW1lbnQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZG9jQ2hhbmdlZFN1YiA9IHRoaXMuX2RvY3VtZW50Lm9uQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN5bmNSZWZyZXNoKCk7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2IgPSAoKSA9PiB7XG4gICAgICAgICAgICBkb2NSZWZyZXNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkb2NDaGFuZ2VkU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGU/LnJlbmRlckNvbnRhaW5lcj8uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW1hZ2VMb2FkZXIuY2xlYXIoKTtcbiAgICAgICAgO1xuICAgICAgICB0aGlzLmR5bmFtaWNGdW5jLmRlc3Ryb3lTY3JpcHRzKCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0Q3R4KCk6IERvY3VtZW50Q29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KHRoaXMuX2RvY3VtZW50LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50Q3R4KGVsZTogRWxlbWVudCk6IERvY3VtZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBhcmVudEN0eCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChlbGUsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCkgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudENvbnRleHQocGFyZW50Q3R4LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lvZPliY3pgInljLrvvIzov5Tlm57miYDlnKjnmoTkuIrkuIvmloflhYPntKDvvIzov5Tlm57nsbvlnovkuLpEb2N1bWVudEVsZW1lbnR8RG9jdW1lbnRCb2R5UGFydEVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRDdXJyZW50RWxlQ3R4KCk6IEJyYW5jaEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudChzdGFydENvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCkgYXMgQnJhbmNoRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXRDdHgoZWxlOiBCcmFuY2hFbGVtZW50KTogRG9jdW1lbnRDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudENvbnRleHQoZWxlLCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cblxuICAgIHJlZ2lzdGVyVHlwZUhhbmRsZXJzPFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudCwgRiBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4oZWxlbWVudFR5cGU6IGFueSwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBoYW5kbGVyOiBFbGVtZW50SGFuZGxlcjxGPiwgdXNlQ2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUV2ZW50SGFuZGxlci5maW5kKGl0ZW0gPT4gaXRlbS5jdHggPT09IHRoaXMgJiYgaXRlbS5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgJiYgaXRlbS5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSAmJiBpdGVtLnVzZUNhcHR1cmUgPT09IHVzZUNhcHR1cmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVtcCA9IGhhbmRsZXIgYXMgRWxlbWVudEhhbmRsZXI8RWxlbWVudEV2ZW50PjtcbiAgICAgICAgZWxlbWVudFR5cGVFdmVudEhhbmRsZXIucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXI6IHRlbXAsXG4gICAgICAgICAgICB1c2VDYXB0dXJlLFxuICAgICAgICAgICAgY3R4OiB0aGlzXG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiPy4oKTtcbiAgICAgICAgLy90aGlzLmVsZV90eXBlc19oYW5kbGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyLmNsZWFyKCk7XG4gICAgICAgIDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLooYzmiZPljbDmqKHlvI9cbiAgICAgKi9cbiAgICBzd2l0Y2hUZXh0bGluZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQudmlld09wdGlvbnMudGV4dFJvd0xpbmVNb2RlID0gIXRoaXMuZG9jdW1lbnQudmlld09wdGlvbnMudGV4dFJvd0xpbmVNb2RlO1xuICAgICAgICB0aGlzLnN5bmNSZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a6e5L6L5YyW5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U2NyaXB0cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYy5pbml0U2NyaXB0cyh0aGlzLmRvY3VtZW50LnByb3BzLnNjcmlwdHMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5pu/5o2i5pWw5o2u5YWDXG4gICAgICovXG4gICAgcmVwbGFjZURhdGFFbGVtZW50KG9sZERhdGFFbGVtZW50OiBEYXRhRWxlbWVudExlYWYgfCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBuZXdFbGVtZW50OiBEYXRhRWxlbWVudExlYWYgfCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgLy/muIXpmaTlhYnmoIdcbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgLy/miafooYzliLfmlrBcbiAgICAgICAgLy/mj5LlhaXmlrDlr7nosaHliLDml6flr7nosaHkuYvliY1cbiAgICAgICAgb2xkRGF0YUVsZW1lbnQucGFyZW50LmFkZENoaWxkKG5ld0VsZW1lbnQsIG9sZERhdGFFbGVtZW50LmdldEluZGV4KCkpO1xuICAgICAgICAvL+WIoOmZpOaXp+iKgueCuVxuICAgICAgICBvbGREYXRhRWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBnZXQgcmVmcmVzaFR5cGUoKTogUmVmcmVzaFR5cGUgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSA/ICdhcHBlYXJhbmNlJyA6ICdjb250ZW50J1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVNvdXJjZUl0ZW0ge1xuICAgIHNyYzogc3RyaW5nLFxuICAgIHRhc2s6IFByb21pc2U8dm9pZD47XG4gICAgY2JzOiBBcnJheTwoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB2b2lkPjtcbiAgICBlbGU6IEhUTUxJbWFnZUVsZW1lbnQsXG4gICAgbG9hZFN0YXR1czogSW1nTG9hZFN0YXR1c1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZUxvYWRlciB7XG4gICAgY2xlYXIoKTogdm9pZDtcblxuICAgIGxvYWRJbWFnZShzcmM6IHN0cmluZywgb25DYWxsYmFjazogKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgICBnZXRJbWFnZShzcmM6IHN0cmluZyk6IEhUTUxJbWFnZUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBpbWFnZXNMb2FkQ29tcGxldGVkKCk6IGJvb2xlYW47XG5cbiAgICBnZXRMb2FkVGFza3MoKTogQXJyYXk8UHJvbWlzZTx2b2lkPj47XG59XG5cbi8qKlxuICog5paH5qGj5LiK5LiL5paHXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjdHg6IEJyYW5jaEVsZW1lbnQsIHByaXZhdGUgc3M6IFNlbGVjdGlvblN0YXRlKSB7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbElETGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZGF0YUVsZUxpc3QgPSA8dW5rbm93bj50aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSBhcyBBcnJheTx7IHByb3BzOiB7IGlkOiBzdHJpbmcgfSB9PjtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVMaXN0Lm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuaWQpO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xJbnN0YW5jZUxpc3QoKTogQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj47XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5SWQoaWQ6IHN0cmluZyk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkgJiYgKDxhbnk+aXRlbSlbJ3Byb3BzJ11bJ2lkJ10gPT09IGlkKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeU5hbWUobmFtZTogc3RyaW5nKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSAmJiAoPGFueT5pdGVtKVsncHJvcHMnXVsnbmFtZSddID09PSBuYW1lKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVsOaNruWFg+WAvOmbhuWQiFxuICAgICAqL1xuICAgIGdldERhdGFFbGVtZW50VmFsdWVzKCk6IEFycmF5PERhdGFFbGVtZW50VmFsdWVTdHJ1Y3Q+IHtcbiAgICAgICAgY29uc3Qgc3RydWN0TGlzdCA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTtcbiAgICAgICAgcmV0dXJuIHN0cnVjdExpc3QubWFwPERhdGFFbGVtZW50VmFsdWVTdHJ1Y3Q+KGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0uZ2V0VmFsdWUoKVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pWw5o2u5YWD57uT5p6E5Lul5Y+KZ2V0XFxzZXTpl63ljIXosIPnlKjlh73mlbBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk6IEFycmF5PERhdGFDaGVja0VsZU1vZGVsIHwgRGF0YUlucHV0RWxlTW9kZWwgfCBEYXRhTGVhZkVsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVMaXN0ID0gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSB8fCBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj47XG5cbiAgICAgICAgY29uc3QgZGF0YUlubGluZUdyb3VwcyA9IGRhdGFFbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwPjtcbiAgICAgICAgY29uc3QgZGF0YUxlYWZzID0gZGF0YUVsZUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50TGVhZikgYXMgQXJyYXk8RGF0YUVsZW1lbnRMZWFmPjtcblxuICAgICAgICAvL+WkjemAieahhuaVsOaNruWFg1xuICAgICAgICBjb25zdCBkYXRhQ2hlY2tMaXN0ID0gZGF0YUxlYWZzLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudENoZWNrKSBhcyBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICAgICAgLy/pmaTlpI3pgInmoYbkuYvlpJbnmoRMZWFmRGF0YUVsZW1lbnRcbiAgICAgICAgY29uc3QgZGF0YU90aGVyTGVhZlZhbHVlcyA9IENvbW1vblV0aWwucmVtb3ZlVW5pb25TZXQoZGF0YUxlYWZzLCBkYXRhQ2hlY2tMaXN0KS5tYXA8RGF0YUxlYWZFbGVNb2RlbD4oaXRlbSA9PiAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0ucHJvcHMuaWQgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFZhbHVlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmFsdWUodmFsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgZGF0YUlubGluZVN0cnVjdExpc3QgPSBkYXRhSW5saW5lR3JvdXBzLm1hcDxEYXRhSW5wdXRFbGVNb2RlbD4oaXRlbSA9PiAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0ucHJvcHMuaWQsIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSwgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkTmFtZSwgaXRlbSwgZ2V0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIH0sIHNldFZhbHVlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmFsdWUodmFsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgLy/lpI3pgInmoYbliJfooahcbiAgICAgICAgY29uc3QgZGF0YUNoZWNrU3RydWN0TGlzdCA9IHRoaXMuZ2V0RGF0YUNoZWNrTW9kZWxMaXN0KGRhdGFDaGVja0xpc3QpO1xuICAgICAgICByZXR1cm4gWy4uLmRhdGFJbmxpbmVTdHJ1Y3RMaXN0LCAuLi5kYXRhQ2hlY2tTdHJ1Y3RMaXN0LCAuLi5kYXRhT3RoZXJMZWFmVmFsdWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blpI3pgInmoYbmlbDmja7lhYPnu5PmnoTliJfooahcbiAgICAgKiBAcGFyYW0gZGF0YUNoZWNrTGlzdFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhQ2hlY2tNb2RlbExpc3QoZGF0YUNoZWNrTGlzdDogQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz4pOiBBcnJheTxEYXRhQ2hlY2tFbGVNb2RlbCB8IERhdGFMZWFmRWxlTW9kZWw+IHtcbiAgICAgICAgLy/kuI3lrZjlnKhncm91cE5hbWXnmoTlpI3pgInmoYZcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2hlY2tMaXN0ID0gZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5wcm9wcy5ncm91cE5hbWUpO1xuICAgICAgICAvL+WtmOWcqGdyb3VwTmFtZeeahOWkjemAieahhlxuICAgICAgICBjb25zdCBncm91cE5hbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUpLm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lKSkpO1xuICAgICAgICBjb25zdCBncm91cENoZWNrTGlzdFZhbHVlcyA9IGdyb3VwTmFtZXMubWFwPERhdGFDaGVja0VsZU1vZGVsPigoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cENoZWNrSXRlbXMgPSBkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lID09PSBncm91cE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgICAgIG5hbWU6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5uYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLmZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdDogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0LFxuICAgICAgICAgICAgICAgIGl0ZW06IGdyb3VwQ2hlY2tJdGVtcyxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IGdyb3VwQ2hlY2tJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpLm1hcChpdGVtID0+IGl0ZW0uZ2V0VmFsdWUoKSArICcnKS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkU2luZ2xlSXRlbSA9IGdyb3VwQ2hlY2tJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRTaW5nbGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFZhbHVlID0gY2hlY2tlZFNpbmdsZUl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFZhbHVlOiAodmFsOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8v5Li6bnVsbOaXtlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxJdGVtcyA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnNwbGl0KCc7JykgOiB2YWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvcHMuY2hlY2tlZCA9IHZhbEl0ZW1zLmluZGV4T2YoaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUgKyAnJykgPj0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9wcy5jaGVja2VkID0gaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUgPT09IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNpbmdsZUNoZWNrTGlzdFZhbHVlcyA9IHNpbmdsZUNoZWNrTGlzdC5tYXA8RGF0YUxlYWZFbGVNb2RlbD4oaXRlbSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGl0ZW0ucHJvcHMuaWQsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnByb3BzLm5hbWUsXG4gICAgICAgICAgICBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGROYW1lLFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFZhbHVlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZSh2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIFsuLi5zaW5nbGVDaGVja0xpc3RWYWx1ZXMsIC4uLmdyb3VwQ2hlY2tMaXN0VmFsdWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnlZnnl5XlnZflhYPntKDliJfooahcbiAgICAgKi9cbiAgICBnZXRUcmFja0VsZW1lbnRzKCk6IEFycmF5PFRyYWNrUnVuRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpIGFzIEFycmF5PFRyYWNrUnVuRWxlbWVudD47XG4gICAgfVxuXG4gICAgZ2V0VHJhY2tFbG1lZW50QnlJZChpZDogc3RyaW5nKTogVHJhY2tSdW5FbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgaXRlbS5wcm9wcy5pZCA9PT0gaWQpIGFzIFRyYWNrUnVuRWxlbWVudCB8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55WZ55eV5Z2X5YaF5pWw5o2uXG4gICAgICovXG4gICAgZ2V0VHJhY2tzRGF0YSgpOiBBcnJheTxUcmFja0Jsb2NrRGF0YT4ge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnRzID0gdGhpcy5nZXRUcmFja0VsZW1lbnRzKCk7XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnRzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrUnVuID0gaXRlbSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodHJhY2tSdW4sIHthbGw6IHRydWV9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLy/nlKjmiLdpZFxuICAgICAgICAgICAgICAgIHVzZXJJZDogdHJhY2tSdW4ucHJvcHMudXNlcklkLFxuICAgICAgICAgICAgICAgIC8v55So5oi35ZCN56ewXG4gICAgICAgICAgICAgICAgdXNlck5hbWU6IHRyYWNrUnVuLnByb3BzLnVzZXJOYW1lLFxuICAgICAgICAgICAgICAgIC8v5pel5pyfXG4gICAgICAgICAgICAgICAgZGF0ZTogdHJhY2tSdW4ucHJvcHMuZGF0ZSxcbiAgICAgICAgICAgICAgICAvL+exu+Wei++8jGlucy1ydW7vvJrmj5LlhaXvvIxkZWwtcnVu77ya5Yig6ZmkXG4gICAgICAgICAgICAgICAgdHlwZTogdHJhY2tSdW4udHlwZSBhcyBUcmFja1J1blR5cGVFbnVtLFxuICAgICAgICAgICAgICAgIC8v55WZ55eV5Z2XaWRcbiAgICAgICAgICAgICAgICBpZDogdHJhY2tSdW4ucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgLy/lhoXlrrlcbiAgICAgICAgICAgICAgICBjb250ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldENvbnRyb2xWYWx1ZShpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldENvbnRyb2xCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRhdGFFbGUpIHtcbiAgICAgICAgICAgIGRhdGFFbGUuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3MuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBzZXRDb250cm9sVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDb250cm9sQnlOYW1lKG5hbWUpXG4gICAgICAgIGRhdGFFbGUuc2V0VmFsdWUodmFsKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWkjemAieahhumAieS4reeahOWAvFxuICAgICAqL1xuICAgIGdldENoZWNrQm94VmFsdWVzKGdyb3VwTmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGNrYnMgPSB0aGlzLmdldENoZWNrQm94TGlzdChncm91cE5hbWUpO1xuICAgICAgICByZXR1cm4gY2ticy5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpLm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja0JveExpc3QoZ3JvdXBOYW1lOiBzdHJpbmcpOiBBcnJheTxEYXRhRWxlbWVudENoZWNrPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2xJbnN0YW5jZUxpc3QoKS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRDaGVjayAmJiBpdGVtLnByb3BzLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lKSBhcyBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3kuIrkuIvmlofmiafooYzpu5jorqTnu5HlrppcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGJpbmREYXRhVmFsdWVzKGRhdGE6IHN0cmluZyB8IE9iamVjdCB8IEFycmF5PHsga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkgfT4sIHByZWRpY2F0ZUtleTogJ2lkJyB8ICduYW1lJyB8ICdmaWVsZE5hbWUnID0gJ2ZpZWxkTmFtZScpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zcy5jbGVhcigpO1xuICAgICAgICBsZXQgYmluZERhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEpIGFzIE9iamVjdCA6IGRhdGE7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmREYXRhKSkge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICBiaW5kRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIG9ialtpdGVtLmtleV0gPSBpdGVtLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJpbmREYXRhID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpO1xuICAgICAgICBkYXRhTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqS2V5ID0gaXRlbVtwcmVkaWNhdGVLZXldO1xuICAgICAgICAgICAgaWYgKGJpbmREYXRhLmhhc093blByb3BlcnR5KG9iaktleSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmluZFZhbHVlID0gYmluZERhdGFbb2JqS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJpbmRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlID0gYmluZFZhbHVlLnJlcGxhY2UoL1tcXG5cXHJdL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZShiaW5kRGF0YVtvYmpLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5cbmludGVyZmFjZSBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWVsZE5hbWU6IHN0cmluZztcbiAgICBnZXRWYWx1ZTogKCkgPT4gYW55O1xuICAgIHNldFZhbHVlOiAodmFsOiBhbnkpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBEYXRhQ2hlY2tFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgIG11bHRpU2VsZWN0OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGF0YUlucHV0RWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBEYXRhRWxlbWVudElubGluZUdyb3VwXG59XG5cbmludGVyZmFjZSBEYXRhTGVhZkVsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogRGF0YUVsZW1lbnRMZWFmO1xufVxuXG4vKipcbiAqIOeVmeeXleWdl+e7k+aehOWMluaVsOaNrlxuICovXG5pbnRlcmZhY2UgVHJhY2tCbG9ja0RhdGEge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHVzZXJOYW1lOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIHR5cGU6IFRyYWNrUnVuVHlwZUVudW0sXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmc7XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5cbi8qKlxuICog5aSE55CG5paH5qGj5om55rOoXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbW1lbnQge1xuICAgIGNvbW1NYXJrTGlzdDogQXJyYXk8Q29tbWVudEVsZW1lbnQ+ID0gW107XG4gICAgY29tbUNvbnRlbnRMaXN0OiBBcnJheTxDb21tQ29udGVudEJhc2VFbGVtZW50PiA9IFtdO1xuICAgIGlzRGlydHk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHsgfVxuXG4gICAgLyoqXG4gICAgKiDor7vlj5blrqHpmIXmoIforrDnrKblj7dcbiAgICAqL1xuICAgIHJlYWRDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21tTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdjb21tJykgYXMgQXJyYXk8Q29tbWVudEVsZW1lbnQ+O1xuICAgICAgICBjb25zdCBzdGFydENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gXCJzdGFydFwiKTtcbiAgICAgICAgY29uc3QgZW5kQ29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBcImVuZFwiKTtcbiAgICAgICAgY29uc3QgY29tbU1hcHMgPSBzdGFydENvbW1MaXN0Lm1hcChzdGFydEl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tbUxpc3QuZmluZChlbmRJdGVtID0+IGVuZEl0ZW0ucHJvcHMuaWQgPT09IHN0YXJ0SXRlbS5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAoIWVuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Yy56YWN55qE57uT5p2f5a6h6ZiF56ym5Y+3JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydEl0ZW0sIGVuZCB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGNvbW1Db250ZW50TGlzdDogQXJyYXk8Q29tbUNvbnRlbnRCYXNlRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50LmdldENoaWxkKGkpIGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb21tTWFwID0gY29tbU1hcHMuZmluZChpdGVtID0+IGl0ZW0uc3RhcnQucHJvcHMuaWQgPT09IGNvbW1Db250ZW50LnByb3BzLmlkKTtcbiAgICAgICAgICAgIGlmICghY29tbU1hcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5a6h6ZiF5YaF5a655a+55bqU55qE5a6h6ZiF56ym5Y+3Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tQ29udGVudC5zdGFydE1hcmsgPSBjb21tTWFwLnN0YXJ0O1xuICAgICAgICAgICAgY29tbUNvbnRlbnQuZW5kTWFyayA9IGNvbW1NYXAuZW5kO1xuICAgICAgICAgICAgY29tbUNvbnRlbnRMaXN0LnB1c2goY29tbUNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tTWFya0xpc3QgPSBjb21tTGlzdDtcbiAgICAgICAgdGhpcy5jb21tQ29udGVudExpc3QgPSBjb21tQ29udGVudExpc3Q7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgPSB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiafooYzliKDpmaTliY3vvIzpnIDopoHmm7TmlrDmibnms6joioLngrnkvY3nva5cbiAgICAgKi9cbiAgICB1cGRhdGVDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSB9ID0gdGhpcy5kb2NDdHg7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkLCBzZWxlY3RlZFJhbmdlIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdFbGUgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIC8v57Sn5oyo552A55qE5YWD57SgXG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUgaW5zdGFuY2VvZiBDb21tZW50RWxlbWVudCAmJiBuZXh0U2libGluZ0VsZS5wcm9wcy5tYXJrVHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQobmV4dFNpYmxpbmdFbGUucHJvcHMuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KG5leHRTaWJsaW5nRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+WmguaenOW8gOWni+aJueazqOiiq+mAieS4re+8jOWImemcgOimgeenu+WKqOW8gOWni+aJueazqOWFg+e0oOWIsOmAieWMuuacq+WwvlxuICAgICAgICAgICAgLy/lpoLmnpznu5PmnZ/mibnms6jooqvpgInkuK3vvIzliJnpnIDopoHliKDpmaTlvZPliY3mibnms6hcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSk7XG4gICAgICAgICAgICBpZiAoIWVuZFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21tUGFpcnM6IEFycmF5PENvbW1NYXJrU2VsZWN0ZWRTdGF0dXM+ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tbUNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydE1hcmssIGVuZE1hcmsgfSA9IHRoaXMuY29tbUNvbnRlbnRMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1QYWlyOiBDb21tTWFya1NlbGVjdGVkU3RhdHVzID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE1hcmssXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmssXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWFya1N0YXR1czogUmFuZ2VVdGlsLmNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHNlbGVjdGVkUmFuZ2UsIHN0YXJ0TWFyayksXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmtTdGF0dXM6IFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShzZWxlY3RlZFJhbmdlLCBlbmRNYXJrKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbW1QYWlycy5wdXNoKGNvbW1QYWlyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1QYWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1QYWlyID0gY29tbVBhaXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjb21tUGFpci5lbmRNYXJrU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChjb21tUGFpci5lbmRNYXJrLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1QYWlyLnN0YXJ0TWFya1N0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBuZXdTdGFydE1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV3U3RhcnRNYXJrLnByb3BzLmlkID0gY29tbVBhaXIuc3RhcnRNYXJrLnByb3BzLmlkO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21tUGFpci5zdGFydE1hcmsuaXNEZWNvcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBEb2N1bWVudENoYW5nZS5pbnNlcnRFbGVtZW50KGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0LCBbbmV3U3RhcnRNYXJrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTmibnms6hcbiAgICAgKiBAcGFyYW0gaWQgXG4gICAgICovXG4gICAgcmVtb3ZlQ29tbWVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRNYXJrcyA9IHRoaXMuY29tbU1hcmtMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuaWQgPT09IGlkKTtcbiAgICAgICAgY29uc3QgY29tbWVudENvbnRlbnQgPSB0aGlzLmNvbW1Db250ZW50TGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wcy5pZCA9PT0gaWQpO1xuICAgICAgICBjb21tZW50TWFya3MuZm9yRWFjaChpdGVtID0+IGl0ZW0ucmVtb3ZlKCkpXG4gICAgICAgIGNvbW1lbnRDb250ZW50Py5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGdldENvbW1NYXJrSW5kZXgoY29tbU1hcms6IENvbW1lbnRFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWFya1R5cGUgPSBjb21tTWFyay5wcm9wcy5tYXJrVHlwZTtcbiAgICAgICAgY29uc3QgY29tbUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY29tbScpIGFzIEFycmF5PENvbW1lbnRFbGVtZW50PjtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IG1hcmtUeXBlKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q29tbUxpc3QuaW5kZXhPZihjb21tTWFyayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5omA5pyJ5om55rOoXG4gICAgICovXG4gICAgY2xlYXJBbGxDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWFkQ29tbWVudHMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KHRoaXMuY29tbUNvbnRlbnRMaXN0W2ldLnByb3BzLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieeahOmqjOivgeaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsVmFsaWRhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAndmFsaWRhdGUnKS5mb3JFYWNoKGl0ZW0gPT4geyB0aGlzLnJlbW92ZUNvbW1lbnQoaXRlbS5wcm9wcy5pZCkgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmibnms6jkv67mlLnlkI7kuovku7ZcbiAgICAgKiDnlKjkuo7moIfms6jlvZPliY3mlofmoaPnmoTmibnms6jlj5HnlJ/mm7TmlLnkuobvvIzkuI3lho3ph43lpI3or7vlj5bmibnms6jvvIzmj5Dpq5jmgKfog71cbiAgICAgKi9cbiAgICBhZnRlckNvbW1lbnRzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cblxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbU1hcmtTZWxlY3RlZFN0YXR1cyB7XG4gICAgc3RhcnRNYXJrOiBDb21tZW50RWxlbWVudCxcbiAgICBlbmRNYXJrOiBDb21tZW50RWxlbWVudCxcbiAgICBzdGFydE1hcmtTdGF0dXM6IGJvb2xlYW4sXG4gICAgZW5kTWFya1N0YXR1czogYm9vbGVhblxufVxuIiwiaW1wb3J0IHsgRWxlbWVudCwgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcblxuZGVjbGFyZSBuYW1lc3BhY2UgSW50bCB7XG5cbiAgICB0eXBlIEJDUDQ3TGFuZ3VhZ2VUYWcgPSBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBzb21lIG9yIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBgSW50bC5TZWdtZW50ZXJgIGNvbnN0cnVjdG9yIGBvcHRpb25zYCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9TZWdtZW50ZXIjcGFyYW1ldGVycylcbiAgICAgKi9cbiAgICBpbnRlcmZhY2UgU2VnbWVudGVyT3B0aW9ucyB7XG4gICAgICAgIC8qKiBUaGUgbG9jYWxlIG1hdGNoaW5nIGFsZ29yaXRobSB0byB1c2UuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG9wdGlvbiwgc2VlIFtJbnRsIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX25lZ290aWF0aW9uKS4gKi9cbiAgICAgICAgbG9jYWxlTWF0Y2hlcj86IFwiYmVzdCBmaXRcIiB8IFwibG9va3VwXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8qKiBUaGUgdHlwZSBvZiBpbnB1dCB0byBiZSBzcGxpdCAqL1xuICAgICAgICBncmFudWxhcml0eT86IFwiZ3JhcGhlbWVcIiB8IFwid29yZFwiIHwgXCJzZW50ZW5jZVwiIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgU2VnbWVudHNgIG9iamVjdCBjb250YWluaW5nIHRoZSBzZWdtZW50cyBvZiB0aGUgaW5wdXQgc3RyaW5nLCB1c2luZyB0aGUgc2VnbWVudGVyJ3MgbG9jYWxlIGFuZCBncmFudWxhcml0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGlucHV0IC0gVGhlIHRleHQgdG8gYmUgc2VnbWVudGVkIGFzIGEgYHN0cmluZ2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIEEgbmV3IGl0ZXJhYmxlIFNlZ21lbnRzIG9iamVjdCBjb250YWluaW5nIHRoZSBzZWdtZW50cyBvZiB0aGUgaW5wdXQgc3RyaW5nLCB1c2luZyB0aGUgc2VnbWVudGVyJ3MgbG9jYWxlIGFuZCBncmFudWxhcml0eS5cbiAgICAgICAgICovXG4gICAgICAgIHNlZ21lbnQoaW5wdXQ6IHN0cmluZyk6IFNlZ21lbnRzO1xuXG4gICAgICAgIHJlc29sdmVkT3B0aW9ucygpOiBSZXNvbHZlZFNlZ21lbnRlck9wdGlvbnM7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFJlc29sdmVkU2VnbWVudGVyT3B0aW9ucyB7XG4gICAgICAgIGxvY2FsZTogc3RyaW5nO1xuICAgICAgICBncmFudWxhcml0eTogXCJncmFwaGVtZVwiIHwgXCJ3b3JkXCIgfCBcInNlbnRlbmNlXCI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRzIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHNlZ21lbnQgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBjb2RlIHVuaXQgYXQgYSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBjb2RlVW5pdEluZGV4IC0gQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgaW5kZXggb2YgdGhlIGNvZGUgdW5pdCBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nLiBJZiB0aGUgdmFsdWUgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYDBgLlxuICAgICAgICAgKi9cbiAgICAgICAgY29udGFpbmluZyhjb2RlVW5pdEluZGV4PzogbnVtYmVyKTogU2VnbWVudERhdGE7XG5cbiAgICAgICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRoZSBzZWdtZW50cy4gKi9cbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxTZWdtZW50RGF0YT47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnREYXRhIHtcbiAgICAgICAgLyoqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNlZ21lbnQgZXh0cmFjdGVkIGZyb20gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZy4gKi9cbiAgICAgICAgc2VnbWVudDogc3RyaW5nO1xuICAgICAgICAvKiogVGhlIGNvZGUgdW5pdCBpbmRleCBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nIGF0IHdoaWNoIHRoZSBzZWdtZW50IGJlZ2lucy4gKi9cbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBjb21wbGV0ZSBpbnB1dCBzdHJpbmcgdGhhdCB3YXMgc2VnbWVudGVkLiAqL1xuICAgICAgICBpbnB1dDogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBib29sZWFuIHZhbHVlIG9ubHkgaWYgZ3JhbnVsYXJpdHkgaXMgXCJ3b3JkXCI7IG90aGVyd2lzZSwgdW5kZWZpbmVkLlxuICAgICAgICAgKiBJZiBncmFudWxhcml0eSBpcyBcIndvcmRcIiwgdGhlbiBpc1dvcmRMaWtlIGlzIHRydWUgd2hlbiB0aGUgc2VnbWVudCBpcyB3b3JkLWxpa2UgKGkuZS4sIGNvbnNpc3RzIG9mIGxldHRlcnMvbnVtYmVycy9pZGVvZ3JhcGhzL2V0Yy4pOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaXNXb3JkTGlrZT86IGJvb2xlYW47XG4gICAgfVxuXG4gICAgY29uc3QgU2VnbWVudGVyOiB7XG4gICAgICAgIHByb3RvdHlwZTogU2VnbWVudGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IGBJbnRsLlNlZ21lbnRlcmAgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbG9jYWxlcyAtIEEgc3RyaW5nIHdpdGggYSBbQkNQIDQ3IGxhbmd1YWdlIHRhZ10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTY0NiksIG9yIGFuIGFycmF5IG9mIHN1Y2ggc3RyaW5ncy5cbiAgICAgICAgICogIEZvciB0aGUgZ2VuZXJhbCBmb3JtIGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGxvY2FsZXNgIGFyZ3VtZW50LFxuICAgICAgICAgKiAgc2VlIHRoZSBbYEludGxgIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX2lkZW50aWZpY2F0aW9uX2FuZF9uZWdvdGlhdGlvbikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gW29iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvU2VnbWVudGVyI3BhcmFtZXRlcnMpXG4gICAgICAgICAqICB3aXRoIHNvbWUgb3IgYWxsIG9wdGlvbnMgb2YgYFNlZ21lbnRlck9wdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBbSW50bC5TZWdtZW50ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudHMpIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIpLlxuICAgICAgICAgKi9cbiAgICAgICAgbmV3KGxvY2FsZXM/OiBCQ1A0N0xhbmd1YWdlVGFnIHwgQkNQNDdMYW5ndWFnZVRhZ1tdLCBvcHRpb25zPzogU2VnbWVudGVyT3B0aW9ucyk6IFNlZ21lbnRlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRob3NlIG9mIHRoZSBwcm92aWRlZCBsb2NhbGVzIHRoYXQgYXJlIHN1cHBvcnRlZCB3aXRob3V0IGhhdmluZyB0byBmYWxsIGJhY2sgdG8gdGhlIHJ1bnRpbWUncyBkZWZhdWx0IGxvY2FsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGxvY2FsZXMgLSBBIHN0cmluZyB3aXRoIGEgW0JDUCA0NyBsYW5ndWFnZSB0YWddKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NDYpLCBvciBhbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MuXG4gICAgICAgICAqICBGb3IgdGhlIGdlbmVyYWwgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBsb2NhbGVzYCBhcmd1bWVudCxcbiAgICAgICAgICogIHNlZSB0aGUgW2BJbnRsYCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9pZGVudGlmaWNhdGlvbl9hbmRfbmVnb3RpYXRpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBbb2JqZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9zdXBwb3J0ZWRMb2NhbGVzT2YjcGFyYW1ldGVycykuXG4gICAgICAgICAqICB3aXRoIHNvbWUgb3IgYWxsIHBvc3NpYmxlIG9wdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL3N1cHBvcnRlZExvY2FsZXNPZilcbiAgICAgICAgICovXG4gICAgICAgIHN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzOiBCQ1A0N0xhbmd1YWdlVGFnIHwgQkNQNDdMYW5ndWFnZVRhZ1tdLCBvcHRpb25zPzogUGljazxTZWdtZW50ZXJPcHRpb25zLCBcImxvY2FsZU1hdGNoZXJcIj4pOiBCQ1A0N0xhbmd1YWdlVGFnW107XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzVGV4dFNlZ21lbnQoc2VsZWN0aW9uOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGxldCB7IHN0YXJ0Q29udHJvbDogZWxlbWVudCwgc3RhcnRPZmZzZXQ6IG9mZnNldCB9ID0gc2VsZWN0aW9uO1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghc3VwcG9ydFNlZ21lbnQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGZvY3VzRWxlID0gZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgIG9mZnNldCA9IG9mZnNldCArIDE7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4gZm9jdXNFbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA/IGZvY3VzRWxlLnRleHRNZWFzdXJlcy5sZW5ndGggOiBvZmZzZXQ7XG4gICAgLy/ojrflj5bov57nu63nmoTlrZfnrKZcbiAgICBjb25zdCBpdGVtcyA9IFsuLi5nZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudCksIGVsZW1lbnQsIC4uLmdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50LCBmYWxzZSldO1xuICAgIGNvbnN0IHNvcnRJdGVtcyA9IGdldFRleHRTb3J0RGF0YShpdGVtcyk7XG4gICAgY29uc3QgeyBpbmRleCwgdGV4dCB9ID0gc29ydEl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICBwcmV2LnRleHQgKz0gY3Vyci50ZXh0O1xuICAgICAgICBpZiAocHJldi5jb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyLml0ZW0gPT09IGZvY3VzRWxlKSB7XG4gICAgICAgICAgICBwcmV2LmluZGV4ICs9IG9mZnNldDtcbiAgICAgICAgICAgIHByZXYuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXYuaW5kZXggKz0gY3Vyci5pdGVtLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZcbiAgICB9LCB7IGNvbXBsZXRlZDogZmFsc2UsIGluZGV4OiAwLCB0ZXh0OiAnJyB9KTtcbiAgICBjb25zdCB7IGluZGV4OiBoaXRJbmRleCwgbGVuOiBoaXRMZW4gfSA9IGdldEhpdFNlZ21lbnQodGV4dCwgaW5kZXgpO1xuICAgIGNvbnN0IG1hdGNoU2VnbWVudCA9IHNvcnRJdGVtcy5maWx0ZXIoaXRlbSA9PiAoaXRlbS5pbmRleCA8PSBoaXRJbmRleCAmJiBpdGVtLmVuZEluZGV4ID4gaGl0SW5kZXgpIHx8IChpdGVtLmluZGV4IDw9IGhpdEluZGV4ICsgaGl0TGVuICYmIGl0ZW0uZW5kSW5kZXggPiBoaXRJbmRleCArIGhpdExlbikpO1xuICAgIGNvbnN0IHN0YXJ0U2VnbWVudCA9IG1hdGNoU2VnbWVudFswXTtcbiAgICBjb25zdCBlbmRTZWdtZW50ID0gbWF0Y2hTZWdtZW50W21hdGNoU2VnbWVudC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdGFydE9mZnNldCA9IGhpdEluZGV4IC0gc3RhcnRTZWdtZW50LmluZGV4O1xuICAgIGNvbnN0IGVuZE9mZnNldCA9IGhpdEluZGV4ICsgaGl0TGVuIC0gZW5kU2VnbWVudC5pbmRleDtcbiAgICBjb25zdCBuZXdSYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgIG5ld1JhbmdlLnNldFN0YXJ0KHN0YXJ0U2VnbWVudC5pdGVtLCBzdGFydE9mZnNldCk7XG4gICAgbmV3UmFuZ2Uuc2V0RW5kKGVuZFNlZ21lbnQuaXRlbSwgZW5kT2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgVGV4dFNlZ21lbnREYXRhIHtcbiAgICBpdGVtOiBUZXh0R3JvdXBFbGVtZW50LFxuICAgIGxlbjogbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICB0ZXh0OiBzdHJpbmdcbn1cblxuLyoqXG4gKiDov5vooYzliIbor41cbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcGFyYW0gZm9jdXNPZmZzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0SGl0U2VnbWVudCh0ZXh0OiBzdHJpbmcsIGZvY3VzT2Zmc2V0Om51bWJlcik6IHsgaW5kZXg6IG51bWJlciwgbGVuOiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc2VnbWVudGVyID0gbmV3IEludGwuU2VnbWVudGVyKFwiemgtQ05cIiwgeyBncmFudWxhcml0eTogXCJ3b3JkXCIgfSk7XG4gICAgY29uc3QgaXRlcmF0b3IxID0gc2VnbWVudGVyLnNlZ21lbnQodGV4dClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGNvbnN0IHNlZ0l0ZW1zID0gQXJyYXkuZnJvbShpdGVyYXRvcjEpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZWdJdGVtID0gc2VnSXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHNlZ0l0ZW0uaW5kZXg7XG4gICAgICAgIGNvbnN0IGN1cnJMZW4gPSBzZWdJdGVtLnNlZ21lbnQubGVuZ3RoO1xuICAgICAgICBpZiAoZm9jdXNPZmZzZXQgPiBjdXJySW5kZXggJiYgZm9jdXNPZmZzZXQgPD0gY3VyckxlbiArIGN1cnJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBsZW46IGN1cnJMZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleCArPSBjdXJyTGVuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiOt+WPluWIsOWvueW6lOeahOWIhuivjeivjee7hCcpO1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0U2VnbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIEludGwuU2VnbWVudGVyID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIOagueaNruWJjeWQjumhuuW6j+agh+ivhue0ouW8leS9jVxuICogQHBhcmFtIHRleHRzXG4gKi9cbmZ1bmN0aW9uIGdldFRleHRTb3J0RGF0YSh0ZXh0czogQXJyYXk8VGV4dEdyb3VwRWxlbWVudD4pOiBBcnJheTxUZXh0U2VnbWVudERhdGE+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IHNvcnRJdGVtczogQXJyYXk8VGV4dFNlZ21lbnREYXRhPiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRleHRzW2ldO1xuICAgICAgICBjb25zdCBzb3J0RGF0YSA9IHtcbiAgICAgICAgICAgIGxlbjogaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogaW5kZXggKyBpdGVtLnRleHRNZWFzdXJlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0XG4gICAgICAgIH07XG4gICAgICAgIHNvcnRJdGVtcy5wdXNoKHNvcnREYXRhKTtcbiAgICAgICAgaW5kZXggKz0gc29ydERhdGEubGVuO1xuICAgIH1cbiAgICByZXR1cm4gc29ydEl0ZW1zO1xufVxuXG4vKipcbiAqIOiOt+WPluaMh+WumuaWueWQkeS4iui/nue7reeahOWtl+esplxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBwcmV2XG4gKi9cbmZ1bmN0aW9uIGdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50OiBUZXh0R3JvdXBFbGVtZW50LCBwcmV2ID0gdHJ1ZSk6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+IHtcbiAgICBsZXQgcHJldlRleHQ6IEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcbiAgICBjb25zdCBwcmV2VGV4dHM6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+ID0gW107XG4gICAgY29uc3QgZnVuYyA9IHByZXYgPyBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQgOiBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQ7XG4gICAgY29uc3QgYWRkSXRlbSA9IHByZXYgPyBwcmV2VGV4dHMudW5zaGlmdCA6IHByZXZUZXh0cy5wdXNoO1xuICAgIHdoaWxlICgocHJldlRleHQgPSBmdW5jKHByZXZUZXh0KSkgJiYgcHJldlRleHQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgIC8vYWRkSXRlbShwcmV2VGV4dCk7XG4gICAgICAgIGFkZEl0ZW0uYXBwbHkocHJldlRleHRzLCBbcHJldlRleHRdKTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUZXh0cztcbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tICcuL2NvbW1vbi11dGlsJztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tICcuL2RvY3VtZW50LWNvbnRleHQnXG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vZG9jdW1lbnQtc2VsZWN0aW9uJztcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQtZGVmaW5lJztcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tICcuL2VsZW1lbnQtcmVhZGVyJztcbmltcG9ydCB7XG4gICAgRGVsZXRlRWxlT3BzRGVsdGEsXG4gICAgRGVsZXRlVGV4dE9wc0RlbHRhLFxuICAgIEZvcm1hdE9wc0RlbHRhLFxuICAgIGdlbmVyYXRlUGF0Y2gsXG4gICAgSW5zZXJ0T3BzRGVsdGEsXG4gICAgSW5zZXJ0VGV4dE9wc0RlbHRhLFxuICAgIG9wc1RyYWNrTW9kZWwsXG4gICAgc3VwcHJlc3NUcmFja2luZ1xufSBmcm9tICcuL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gJy4vZWxlbWVudC11dGlsJztcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tICcuL2ltcGwnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5cbnR5cGUgSGlzdG9yeUNvbW1hbmQgPSAndW5kbycgfCAncmVkbyc7XG50eXBlIEhpc3RvcnlDaGFuZ2VzID0geyBkYXRlOiBEYXRlLCBvcHM6IEFycmF5PG9wc1RyYWNrTW9kZWw+LCBiZWZvcmVTZWxlY3Rpb246IFNlbGVjdGlvbkxvZyB8IG51bGwsIGFmdGVyU2VsZWN0aW9uOiBTZWxlY3Rpb25Mb2cgfCBudWxsIH1cblxuLyoqXG4gKiDlpITnkIbmkqTplIDlm57mu5rnrYnooYzkuLpcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRUcmFja01hbmFnZSB7XG5cbiAgICBhY3Rpb25zOiBBcnJheTxIaXN0b3J5Q2hhbmdlcz4gPSBbXTtcbiAgICBpbmRleDogbnVtYmVyID0gMDtcbiAgICAvL+S4gOaXpuWPkeeUn+WPmOabtO+8jOWwsemUgeWumuW9k+WJjemAieWMuueahOaVsOaNrlxuICAgIC8vbG9nTG9ja1N0YXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzZWxlY3Rpb25Mb2chOiBTZWxlY3Rpb25Mb2cgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHVibGljIHJlYWRlcjogRWxlbWVudFJlYWRlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUn+aIkOWPmOabtOS5i+WJjeeahOmAieWMuuaVsOaNrlxuICAgICAqL1xuICAgIGdlbmVyYXRlU2VsZWN0aW9uTG9nKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoIXRoaXMubG9nTG9ja1N0YXRlKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Mb2cgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTG9nID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDljoblj7Lmk43kvZzkv6Hmga9cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVRyYWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLmVuYWJsZVRyYWNrSGlzdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wcyA9IGdlbmVyYXRlUGF0Y2godGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICBpZiAoIW9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXJnZU9wcyhvcHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZSh0aGlzLmluZGV4KTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG9wcyxcbiAgICAgICAgICAgIGJlZm9yZVNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25Mb2csXG4gICAgICAgICAgICBhZnRlclNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5pbmRleCA+IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYWNrSGlzdG9yeU1heExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZSh0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uTG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25pON5L2cLFxuICAgICAqIOWQiOW5tui+k+WFpeOAgeWIoOmZpOaWh+Wtl+WcqOS4gOWumuWRqOacn+WGheeahOabtOaUuVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZU9wcyhvcHM6IG9wc1RyYWNrTW9kZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8v6Zeu6aKY5Zyo5LqO77yaXG4gICAgICAgIC8vMS7mlrDovpPlhaXnmoTlrZfnrKbkuLLvvIxzZWxlY3RTdGF0ZeeahHN0YXJ0T2Zmc2V044CBZW5kT2Zmc2V0PTEs5ZCO6L6T5YWl55qE5a2X56ym5Liy55qEZW5kT2Zmc2V06L+b6KGM57Sv5YqgXG4gICAgICAgIC8vMi7mkqTplIDlkI7ph43lgZrvvIzpgInljLrojIPlm7TlnKgxLTIs6Iux5Zu95pivMC0yLOWboOS4uuS5i+WJjeWcqOWIm+W7uuaWh+acrOWvueixoeWQju+8jOmAieWMuueahOe7k+adn+S9jeS4ujFcbiAgICAgICAgLy8gaWYgKG9wcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgbGFzdE9wcyA9IHRoaXMuYWN0aW9uc1t0aGlzLmFjdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGlmICghbGFzdE9wcykge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8vaWYobGFzdE9wcy5vcHNbbGFzdE9wcy5vcHMubGVuZ3RoLTFdKVxuICAgICAgICAvLyAvL+i2hei/hzEw56eS55qE5pON5L2c5LiN5ZCI5bm2XG4gICAgICAgIC8vIGlmIChtb21lbnQoKS5kaWZmKG1vbWVudChsYXN0T3BzLmRhdGUpLCAnc2Vjb25kcycpID4gMTApIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zdCBwcmV2T3AgPSBsYXN0T3BzLm9wc1tsYXN0T3BzLm9wcy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gY29uc3QgY3Vyck9wID0gb3BzWzBdO1xuICAgICAgICAvLyBjb25zdCBwcmV2QWZ0ZXJTZWxlY3Rpb24gPSBsYXN0T3BzLmFmdGVyU2VsZWN0aW9uO1xuICAgICAgICAvLyAvL+aTjeS9nOexu+Wei+ebuOWQjFxuICAgICAgICAvLyBpZiAoJ2luc1RleHQnIGluIGN1cnJPcC5vcHMgJiYgJ2luc1RleHQnIGluIHByZXZPcC5vcHMgJiYgY3Vyck9wLmluZGV4ID09PSBwcmV2T3AuaW5kZXgpIHtcbiAgICAgICAgLy8gICAgIGlmICghcHJldkFmdGVyU2VsZWN0aW9uKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy/pgInljLrlv4Xpobvpl63lkIhcbiAgICAgICAgLy8gICAgIGlmICghcHJldkFmdGVyU2VsZWN0aW9uLmNvbGxhcHNlZCkge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8v5YmN5ZCO5piv6L+e57ut55qE5pON5L2cXG4gICAgICAgIC8vICAgICBjb25zdCB7IGluZGV4LCBsZW5ndGggfSA9IHByZXZPcC5vcHMuaW5zVGV4dDtcbiAgICAgICAgLy8gICAgIGlmIChpbmRleCArIGxlbmd0aCA9PT0gY3Vyck9wLm9wcy5pbnNUZXh0LmluZGV4KSB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHByZXZBZnRlclNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IGluZGV4ICsgbGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZPcC5vcHMuY29udGVudCArPSBjdXJyT3Aub3BzLmNvbnRlbnQ7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZPcC5vcHMuaW5zVGV4dC5sZW5ndGggKz0gY3Vyck9wLm9wcy5pbnNUZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICAgICAgbGFzdE9wcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgcHJldkFmdGVyU2VsZWN0aW9uLmVuZE9mZnNldCArPSBjdXJyT3Aub3BzLmluc1RleHQubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL3RoaXMuY29tbWFuZEZvckluc2VydFRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEluc2VydFRleHRPcHNEZWx0YT4pXG4gICAgICAgIC8vIH0gZWxzZSBpZiAoJ2RlbFRleHQnIGluIGN1cnJPcC5vcHMgJiYgJ2RlbFRleHQnIGluIHByZXZPcC5vcHMgJiYgY3Vyck9wLmluZGV4ID09PSBwcmV2T3AuaW5kZXgpIHtcbiAgICAgICAgLy8gICAgIGlmIChwcmV2T3Aub3BzLmRlbFRleHQuaW5kZXggPT09IGN1cnJPcC5vcHMuZGVsVGV4dC5pbmRleCArIGN1cnJPcC5vcHMuZGVsVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgICAgICBwcmV2T3Aub3BzLmRlbFRleHQubGVuZ3RoICs9IGN1cnJPcC5vcHMuZGVsVGV4dC5sZW5ndGg7XG4gICAgICAgIC8vICAgICAgICAgcHJldk9wLm9wcy5jb250ZW50ID0gY3Vyck9wLm9wcy5jb250ZW50O1xuICAgICAgICAvLyAgICAgICAgIGxhc3RPcHMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL3RoaXMuY29tbWFuZEZvckRlbGV0ZVRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0aW9uKCk6IFNlbGVjdGlvbkxvZyB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgZWRpdGFibGUgfSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChzdGFydENvbnRyb2wsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydENvbnRyb2wgPT09IGVuZENvbnRyb2wgPyBzdGFydEluZGV4IDogRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVuZENvbnRyb2wsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgICAgIGVuZEluZGV4LFxuICAgICAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICAgICAgZWRpdGFibGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOaSpOmUgFxuICAgICAqL1xuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCgndW5kbycpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmkqTplIBcbiAgICAgKi9cbiAgICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7pemHjeWBmlxuICAgICAqL1xuICAgIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM6YeN5YGaXG4gICAgICovXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKCdyZWRvJyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbdGhpcy5pbmRleF07XG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3MgPSBjb21tYW5kID09PSAndW5kbycgPyBhY3Rpb24uYmVmb3JlU2VsZWN0aW9uIDogYWN0aW9uLmFmdGVyU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oc3MpO1xuICAgICAgICBjb25zdCBvcHMgPSBjb21tYW5kID09PSAndW5kbycgPyBbLi4uYWN0aW9uLm9wc10ucmV2ZXJzZSgpIDogYWN0aW9uLm9wcztcbiAgICAgICAgb3BzLmZvckVhY2gob3AgPT4ge1xuICAgICAgICAgICAgaWYgKCdpbnNlcnQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckluc2VydEVsZU9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8SW5zZXJ0T3BzRGVsdGE+KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2RlbGV0ZScgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRGVsZXRlRWxlT3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxEZWxldGVFbGVPcHNEZWx0YT4pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdpbnNUZXh0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JJbnNlcnRUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KVxuICAgICAgICAgICAgfSBlbHNlIGlmICgnZGVsVGV4dCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRGVsZXRlVGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8RGVsZXRlVGV4dE9wc0RlbHRhPilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2Zvcm1hdCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRWxlRm9ybWF0KGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8Rm9ybWF0T3BzRGVsdGE+KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDov5jljp/lhYnmoIdcbiAgICAgKiBAcGFyYW0gc3NMb2dcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHJlc3RvcmVTZWxlY3Rpb24oc3NMb2c6IFNlbGVjdGlvbkxvZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKCFzc0xvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNldFBhaW50ZWRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIHN0YXJ0T2Zmc2V0LCBlbmRJbmRleCwgZW5kT2Zmc2V0LCBlZGl0YWJsZSB9ID0gc3NMb2c7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2MgPSB0aGlzLmdldENvbnRyb2woc3RhcnRJbmRleCwgZmFsc2UpIGFzIEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGVjID0gc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggPyBzYyA6IHRoaXMuZ2V0Q29udHJvbChlbmRJbmRleCwgZmFsc2UpIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydChzYywgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVjLCBlbmRPZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2UuZWRpdGFibGUgPSBlZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDmlofmnKzovpPlhaXmk43kvZxcbiAgICAgKi9cbiAgICBjb21tYW5kRm9ySW5zZXJ0VGV4dE9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPEluc2VydFRleHRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2UgPSB0aGlzLmdldENvbnRyb2w8VGV4dEdyb3VwRWxlbWVudD4oZGF0YS5pbmRleCk7XG4gICAgICAgIGNvbnN0IHsgY29udGVudCwgaW5zVGV4dDogeyBpbmRleCwgbGVuZ3RoIH0gfSA9IGRhdGEub3BzO1xuICAgICAgICBjb21tYW5kID09PSAndW5kbycgPyB0YXJnZS5zcGxpY2UoaW5kZXgsIGxlbmd0aCkgOiB0YXJnZS5zcGxpY2UoaW5kZXgsIDAsIGNvbnRlbnQpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5paH5pys5Yig6Zmk5pON5L2cXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JEZWxldGVUZXh0T3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8RGVsZXRlVGV4dE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldENvbnRyb2w8VGV4dEdyb3VwRWxlbWVudD4oZGF0YS5pbmRleCk7XG4gICAgICAgIGNvbnN0IHsgY29udGVudCwgZGVsVGV4dDogeyBpbmRleCwgbGVuZ3RoIH0gfSA9IGRhdGEub3BzO1xuICAgICAgICBjb21tYW5kID09PSAndW5kbycgPyB0YXJnZXQuc3BsaWNlKGluZGV4LCAwLCBjb250ZW50KSA6IHRhcmdldC5zcGxpY2UoaW5kZXgsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5YWD57Sg5bGe5oCn5L+u5pS55pON5L2cXG4gICAgICovXG4gICAgY29tbWFuZEZvckVsZUZvcm1hdChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxGb3JtYXRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRDb250cm9sPEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCBhcHBseVByb3BzID0ge307XG4gICAgICAgIGNvbnN0IGdldHRlckZpZWxkID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gJ29sZFZhbHVlJyA6ICduZXdWYWx1ZSc7XG4gICAgICAgIC8v6I635Y+W5L+u5pS55LmL5YmN55qE5YC85a+56LGhXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEub3BzLmZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgYXBwbHlQcm9wc1trZXldID0gZGF0YS5vcHMuZm9ybWF0W2tleV1bZ2V0dGVyRmllbGRdO1xuICAgICAgICB9KVxuICAgICAgICAvL+abtOaWsOWIsOS5i+WJjeeahOWAvFxuICAgICAgICB0aGlzLnVwZGF0ZVByb3BzKHRhcmdldC5wcm9wcywgYXBwbHlQcm9wcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5Yig6Zmk5YWD57Sg55qE5pON5L2cXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JEZWxldGVFbGVPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxEZWxldGVFbGVPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICd1bmRvJykge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVG9JbnNlcnQoZGF0YS5pbmRleCwgZGF0YS5wYXJlbnRJbmRleCwgZGF0YS5wcmV2SW5kZXgsIGRhdGEub3BzLmRlbGV0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmdldENvbnRyb2woZGF0YS5pbmRleCk7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDmj5LlhaXnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gY29tbWFuZFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgY29tbWFuZEZvckluc2VydEVsZU9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPEluc2VydE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3VuZG8nKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmdldENvbnRyb2woZGF0YS5pbmRleCk7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUb0luc2VydChkYXRhLmluZGV4LCBkYXRhLnBhcmVudEluZGV4LCBkYXRhLnByZXZJbmRleCwgZGF0YS5vcHMuaW5zZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZVRvSW5zZXJ0KGluZGV4OiBudW1iZXIsIHBhcmVudEluZGV4OiBudW1iZXIsIHByZXZJbmRleDogbnVtYmVyLCBkYXRhOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTaWJsaW5nRWxlID0gcHJldkluZGV4ICE9PSAtMSA/IHRoaXMuZ2V0Q29udHJvbChwcmV2SW5kZXgpIDogbnVsbDtcbiAgICAgICAgLy/ojrflj5bmj5LlhaXkvY3nva7kuYvliY3nmoTlhYPntKDvvIznhLblkI7lkJHlkI7mj5LlhaXnm67moIflhYPntKBcbiAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGluZGV4IC0gMSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRhdGEuY2xvbmUodHJ1ZSk7XG4gICAgICAgIGlmIChwcmV2U2libGluZ0VsZSkge1xuICAgICAgICAgICAgcHJldlNpYmxpbmdFbGUucGFyZW50LmFkZENoaWxkKHRhcmdldCwgcHJldlNpYmxpbmdFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9lbGXojrflj5bnmoTkuLrniLblrrnlmahcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcGFyZW50SW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlLmFkZENoaWxkKHRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+eItue6p+exu+Wei+S4jeato+ehricpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZS5wYXJlbnQuYWRkQ2hpbGQodGFyZ2V0LCBlbGUuZ2V0SW5kZXgoKSArIDEpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDlsZ7mgKdcbiAgICAgKiBAcGFyYW0gY3VyclByb3BzXG4gICAgICogQHBhcmFtIG5ld1Byb3BzXG4gICAgICovXG4gICAgdXBkYXRlUHJvcHMoY3VyclByb3BzOiBvYmplY3QsIG5ld1Byb3BzOiBvYmplY3QpOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3UHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGN1cnJQcm9wc1trZXldID0gQ29tbW9uVXRpbC5jbG9uZVZhbHVlKG5ld1Byb3BzW2tleV0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldENvbnRyb2w8VCBleHRlbmRzIEVsZW1lbnQ+KGluZGV4OiBudW1iZXIsIHB1cmU6IGJvb2xlYW4gPSB0cnVlKTogVCB7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRDb250cm9sQnlJbmRleCh0aGlzLmRvY0N0eC5kb2N1bWVudCwgeyBjdXJySW5kZXg6IC0xLCBpbmRleDogaW5kZXggfSwgcHVyZSkgYXMgVDtcbiAgICB9XG59XG5cbmludGVyZmFjZSBTZWxlY3Rpb25Mb2cge1xuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBzdGFydE9mZnNldDogbnVtYmVyO1xuICAgIGVuZEluZGV4OiBudW1iZXI7XG4gICAgZW5kT2Zmc2V0OiBudW1iZXI7XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG59IiwiaW1wb3J0IHtQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHR9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7Q29udGVudE1lbnVJdGVtLCBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgRXZlbnRNYXAsIEhpdEV2ZW50SW5mb30gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmUnO1xuaW1wb3J0IHtEb2N1bWVudFBhaW50fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1wYWludCc7XG5pbXBvcnQge0VsZW1lbnRSZWFkZXJ9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtcmVhZGVyJztcbmltcG9ydCB7RG9jdW1lbnRFdmVudH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtZXZlbnQnO1xuaW1wb3J0IHtEb2N1bWVudElucHV0fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1pbnB1dC1jdXJzb3InO1xuaW1wb3J0IHtEb2N1bWVudEN1cnNvciwgRG9jdW1lbnRTZWxlY3Rpb24sIFNlbGVjdGlvblN0YXRlfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1zZWxlY3Rpb24nO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC11dGlsJztcbmltcG9ydCB7RG9jdW1lbnRDaGFuZ2V9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWNoYW5nZSc7XG5pbXBvcnQge0N1cnNvclR5cGV9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUnO1xuaW1wb3J0IHtTZWxlY3Rpb25PdmVybGF5c30gZnJvbSAnLi9mcmFtZXdvcmsvc2VsZWN0aW9uLW92ZXJsYXlzJztcbmltcG9ydCB7XG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgSUNhbmNlbFRva2VuRm4sXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgTWFyZ2luUHJvcHMsXG4gICAgT3JpZW50VHlwZSwgUGFnZUxheW91dE1vZGUsXG4gICAgUGFnZU9wdGlvbnMsXG4gICAgUG9zaXRpb24sXG4gICAgUmVjdCxcbiAgICBUZXh0QWxpZ24sXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1kZWZpbmUnO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXNlcmlhbGl6ZSc7XG5pbXBvcnQge1xuICAgIENvbW1Db250ZW50QmFzZUVsZW1lbnQsIERhdGFFbGVtZW50R3JvdXBFbGVtZW50LFxuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgRGF0YUVsZW1lbnRMZWFmLCBEYXRhRWxlbWVudFRleHQsXG4gICAgRG9jdW1lbnRCb2R5RWxlbWVudCxcbiAgICBEb2N1bWVudEVsZW1lbnQsXG4gICAgRG9jdW1lbnRSZW5kZXJPYmplY3QsXG4gICAgSXNJblNpZGVEYXRhRWxlbWVudCxcbiAgICBQYXJhZ3JhcGhFbGVtZW50LFxuICAgIFBTeW1ib2xFbGVtZW50LFxuICAgIFRhYmxlRWxlbWVudCxcbiAgICBUYWJsZVJvd0VsZW1lbnQsXG4gICAgVGFibGVVdGlsLFxuICAgIFRleHRHcm91cEVsZW1lbnQsXG4gICAgdmFsaWRhdGVEYXRhRWxlXG59IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHtkb2N1bWVudFByaW50fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1wcmludCc7XG5pbXBvcnQge0RvY3VtZW50VGVtcGxhdGV9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXRlbXBsYXRlJztcbmltcG9ydCB7RG9jUnVsZX0gZnJvbSAnLi9kb2MtcnVsZXInO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVRleHRQcm9wcywgUGFyYWdyYXBoUHJvcHMsIFRleHRQcm9wc30gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1wcm9wcyc7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHQnO1xuaW1wb3J0IHtEb2N1bWVudENvbW1lbnR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWNvbW1lbnQnO1xuaW1wb3J0IHtnZXRGb2N1c1RleHRTZWdtZW50fSBmcm9tIFwiLi9mcmFtZXdvcmsvZG9jdW1lbnQtc2VnbWVudGVyXCI7XG5pbXBvcnQgKiBhcyBUcmFjayBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuaW1wb3J0IHtFbGVtZW50VHJhY2tNYW5hZ2V9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtdHJhY2UtbWFuYWdlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAnLi9mcmFtZXdvcmsvZXZlbnQtc3ViamVjdCc7XG5cblxuZXhwb3J0IGNsYXNzIENhbnZhc1RleHRFZGl0b3Ige1xuICAgIHByaXZhdGUgY29udGVudEN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgcHJpdmF0ZSBkb2NDb21tZW50OiBEb2N1bWVudENvbW1lbnQ7XG4gICAgcHJpdmF0ZSByZW5kZXJDb250ZXh0OiBSZW5kZXJDb250ZXh0O1xuICAgIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludDtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuICAgIHByaXZhdGUgZG9jdW1lbnRFdmVudDogRG9jdW1lbnRFdmVudDtcbiAgICBwcml2YXRlIGRvY3VtZW50U2VsZWN0aW9uOiBEb2N1bWVudFNlbGVjdGlvbjtcbiAgICBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudENoYW5nZTogRG9jdW1lbnRDaGFuZ2U7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25PdmVybGF5czogU2VsZWN0aW9uT3ZlcmxheXM7XG4gICAgcHJpdmF0ZSBkb2NSdWxlOiBEb2NSdWxlO1xuICAgIHByaXZhdGUgZXZlbnRNYXA6IEV2ZW50TWFwID0gbmV3IEV2ZW50TWFwKCk7XG4gICAgaGlzdG9yeU1hbmdlOiBFbGVtZW50VHJhY2tNYW5hZ2U7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDxTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGJlZm9yZVJlbmRlclN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGFmdGVyUmVuZGVyU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIC8v5pi+56S65Y+z6ZSu6I+c5Y2VXG4gICAgb25Db250ZXh0TWVudUl0ZW1DaGFuZ2VkOiBTdWJqZWN0PEVkaXRvckNvbnRlbnh0UHJvcHM+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvbkRibENsaWNrRXZlbnQ6IFN1YmplY3Q8RXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvbkNsaWNrRXZlbnQ6IFN1YmplY3Q8RXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvblNjcm9sbFZpZXdFdmVudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+aWh+aho+aUueWPmOS6i+S7tjrlhoXlrrnlj4rmoLflvI/vvIzkuJrliqHmqKHlnZfpnIDopoHmoLnmja7mraTkuovku7bvvIzmnaXov73ouKrlvZPliY3mlofmoaPmmK/lkKbmlLnlj5jnmoTnirbmgIFcbiAgICBvbkRvY0NoYW5nZWRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/miafooYxmbHVzaFRhc2sscmVmcmVzaERvY+S5i+WJje+8jOatpOaXtuWPr+S7peWcqOaWh+aho+iuoeeul+aOkueJiOS5i+WJjeaUueWPmOWGheWuuVxuICAgIG9uQmVmb3JlUmVmcmVzaERvY3VtZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvY1Njcm9sbDogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgaG9sZFNwYWNlOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBydWxlQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgcHJpdmF0ZSBlZGl0Q2FudmFzQ29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBlZGl0Q2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgZWRpdElucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBlZGl0Q3Vyc29yOiBIVE1MU3BhbkVsZW1lbnQsIHByaXZhdGUgY3Vyc29yV3JhcHBlcjogSFRNTERpdkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IG5ldyBWaWV3T3B0aW9ucygpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uID0gbmV3IERvY3VtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4ID0gbmV3IEVkaXRvckNvbnRleHQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY29weVJpZ2h0SW5mbyA9ICfkuIfovr7kv6Hmga/nlLXlrZDnl4XljobnvJbovpHlmagsd3d3LndvbmRlcnNncm91cC5jb20nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRyYXdDaGFyUmVjdENvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93TGluZVJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlID0gMjA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMucmV2aWV3V2luZG93V2lkdGggPSAyMDA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZGVmYXVsdEZvbnROYW1lID0gJ+Wui+S9kydcbiAgICAgICAgLy90aGlzLnZpZXdPcHRpb25zLnNjYWxlID0gMjtcbiAgICAgICAgLy/mlbTkuKrnlLvluIPnmoTlsLrlr7hcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwMCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5nZXRDb250YWluZXJIZWlnaHQoKS5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlciA9IHtcbiAgICAgICAgICAgIGlkOiAnNjY2NicsXG4gICAgICAgICAgICBuYW1lOiAn566h55CG5ZGYJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZURvY1ZpZXdlcigpO1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQgPSBuZXcgRG9jdW1lbnRDb21tZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5jb250ZW50Q3R4ID0gZWRpdENhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0ID0gbmV3IFJlbmRlckNvbnRleHQobmV3IFBhaW50Q29udGVudCh0aGlzLmNvbnRlbnRDdHgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0LmluaXQoe3dpZHRoOiA1MDAsIGhlaWdodDogNTAwLCBzY2FsZTogMX0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cyA9IG5ldyBTZWxlY3Rpb25PdmVybGF5cyh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50ID0gbmV3IERvY3VtZW50UGFpbnQodGhpcy5yZW5kZXJDb250ZXh0LCB0aGlzLmRvY0N0eCwgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5zZWxlY3RlZFNldHMpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIgPSBuZXcgRWxlbWVudFJlYWRlcih0aGlzLmRvY0N0eCwgdGhpcy5yZW5kZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5kb2NSdWxlID0gbmV3IERvY1J1bGUodGhpcy5ydWxlQ2FudmFzLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dCA9IG5ldyBEb2N1bWVudElucHV0KGVkaXRJbnB1dCwgZWRpdEN1cnNvciwgY3Vyc29yV3JhcHBlciwgdGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlID0gbmV3IERvY3VtZW50Q2hhbmdlKHRoaXMuZWxlbWVudFJlYWRlciwgdGhpcy5kb2NDdHgsIHRoaXMuZG9jQ29tbWVudCwgdGhpcy5kb2N1bWVudElucHV0KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50ID0gbmV3IERvY3VtZW50RXZlbnQoZWRpdENhbnZhcywgdGhpcy5kb2N1bWVudFBhaW50LCB0aGlzLmRvY0N0eCwgdGhpcy5kb2N1bWVudElucHV0KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UgPSBuZXcgRWxlbWVudFRyYWNrTWFuYWdlKHRoaXMuZG9jQ3R4LCB0aGlzLmVsZW1lbnRSZWFkZXIpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuaGl0SW5mb0NoYW5nZWQuc3Vic2NyaWJlKChoaXRJbmZvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkKGhpdEluZm8pXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2xpY2tFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2NDbGlja0hhbmRsZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuZGJsQ2xpY2tFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2NEYmxDbGlja0hhbmRsZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2hhbmdlQ3Vyc29yLnN1YnNjcmliZSgoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnNvcihjdXJzb3IpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY29udGV4dE1lbnUuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29udGV4dE1lbnUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LnRyYWNrVGlwc0NoYW5nZWQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY0N0eC5kb2NDaGFuZ2UgPSB0aGlzLmRvY3VtZW50Q2hhbmdlO1xuICAgICAgICB0aGlzLmxpc3RlbkNvbnRhaW5lckhlaWdodCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnN5bmNSZWZyZXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZSgodHlwZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFZpZXdlcih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7moIflsLpcbiAgICAgKi9cbiAgICByZWZyZXNoRG9jUnVsZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRvY0xlZnQgPSAwLy9Db21tb25VdGlsLmdldE9mZnNldFgodGhpcy5lZGl0Q2FudmFzLnBhcmVudEVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFnZVBMID0gMCwgcGFnZVBSID0gMDtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIpIHtcbiAgICAgICAgICAgIGRvY0xlZnQgKz0gdGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lci5yZWN0Lng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LmRvY3VtZW50Py5wcm9wcz8ucGFkZGluZykge1xuICAgICAgICAgICAgY29uc3Qge2xlZnQsIHJpZ2h0fSA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzLnBhZGRpbmc7XG4gICAgICAgICAgICBwYWdlUEwgPSBsZWZ0O1xuICAgICAgICAgICAgcGFnZVBSID0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NSdWxlLnNldFJ1bGVPcHRpb25zKHt3aWR0aDogdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGgsIHBhZ2VQTCwgcGFnZVBSLCBkb2NMZWZ0fSk7XG4gICAgICAgIHRoaXMuZG9jUnVsZS5yZWZyZXNoUnVsZSgpO1xuICAgIH1cblxuICAgIGNyZWF0ZURvY1ZpZXdlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8gPSB0aGlzLm1lYXN1cmVNTVRvUGl4cygpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguZmxvb3IoMjEwICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKDI5NyAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MgPSBuZXcgUGFnZU9wdGlvbnMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuZG9jU2Nyb2xsLm9uc2Nyb2xsID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3KGV2dCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWVhc3VyZU1NVG9QaXhzKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAnMTAwbW0nO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgICAgIHJldHVybiB3aWR0aCAvIDEwMDtcbiAgICB9XG5cbiAgICBmbHVzaFRhc2shOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAgIC8v5piv5ZCm55So5LqO6Lef6Liq5L+u5pS554q25oCB77yM5Zyo5Yid5aeL5YyW44CB5pWw5o2u5YWD6LWL5YC8562J5oOF5Ya15LiN6ZyA6KaB6Lef6Liq5L+u5pS55qCH5b+XXG4gICAgcHJpdmF0ZSB0cmFja0NoYW5nZVN0YXRlID0gdHJ1ZTtcblxuICAgIGZsdXNoVG9TY2hlZHVsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIC8v6Kem5Y+R5Yqo5oCB6ISa5pysXG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5keW5hbWljRnVuYy5pbnZva2VkU2NyaXB0cygpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRG9jQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmx1c2hUYXNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNiID0gdGhpcy5kb2NDdHgucGFpbnRlZENhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2NDdHguc2V0UGFpbnRlZENhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuZ2VuZXJhdGVUcmFjaygpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuZ2VuZXJhdGVTZWxlY3Rpb25Mb2coKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mbHVzaFRhc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsdXNoVGFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HmlofmoaPmlLnlj5jkuovku7ZcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHRyaWdnZXJEb2NDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50cmFja0NoYW5nZVN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRvY0NoYW5nZWRFdmVudC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZm7lh73mlbDmiafooYzml7bvvIzkuI3op6blj5FvbkRvY0NoYW5nZVxuICAgICAqIEBwYXJhbSBmblxuICAgICAqL1xuICAgIG5vRWZmZWN0Q2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnRyYWNrQ2hhbmdlU3RhdGU7XG4gICAgICAgIHRoaXMudHJhY2tDaGFuZ2VTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYWNrQ2hhbmdlU3RhdGUgPSBwcmV2O1xuICAgIH1cblxuXG4gICAgbG9hZERvYyhkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIucmVhZChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDmu5rliqjpq5jluqZcbiAgICAgKiAxLuaWh+aho+WGheWuuemrmOW6plxuICAgICAqIDIu5paH5qGj57yp5pS+5YC8XG4gICAgICovXG4gICAgc2V0U2Nyb2xsU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob2xkU3BhY2Uuc3R5bGUuaGVpZ2h0ID0gdGhpcy5kb2N1bWVudFBhaW50LmdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCkgKyAncHgnO1xuICAgIH1cblxuICAgIHNjcm9sbFZpZXcoZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKHRhcmdldC5zY3JvbGxUb3ApO1xuICAgICAgICB0aGlzLmVkaXRDYW52YXNDb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKDAsLVwiICsgdG9wICsgXCJweClcIjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID0gdG9wIC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5vblNjcm9sbFZpZXdFdmVudC5uZXh0KHRvcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yi35paw5paH5qGj77yM6YeN5paw5rWL6YeP5bm26K6+572u5YWJ5qCH562JXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hEb2N1bWVudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlUGFpbnQgPSB0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICBpZiAocmVQYWludCkge1xuICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVJlZnJlc2hEb2N1bWVudC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLmNsZWFyU25hcHNob3QoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ29tbWVudC5yZWFkQ29tbWVudHMoKTtcbiAgICAgICAgICAgIFRyYWNrLnN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZVBhZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyU3ViamVjdC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoVmlldyhyZVBhaW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliLfmlrDnu5jliLbmlofmoaNcbiAgICAgKiBUT0RPOumAieWMuuaUueWPmOaXtu+8jOebtOaOpeiwg+eUqOivpeaWueazlVxuICAgICAqIEBwYXJhbSByZVBhaW50XG4gICAgICovXG4gICAgcHJpdmF0ZSByZWZyZXNoVmlldyhyZVBhaW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNzQ2hhbmdlZCA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24udXBkYXRlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5nZXRTZWxlY3Rpb25UcmVlRGF0YSgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVmcmVzaFZpZXcocmVQYWludCk7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsU2l6ZSgpO1xuICAgICAgICB0aGlzLnNldEN1cnNvcigpO1xuICAgICAgICBzc0NoYW5nZWQgJiYgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIHRoaXMuZG9jUnVsZS5yZWZyZXNoUnVsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGl0SW5mb0NoYW5nZWQoaGl0SW5mbzogeyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb25TdGF0ZShoaXRJbmZvKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCHXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRDdXJzb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghdGhpcy5jYW5TZXRDdXJzb3IoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LnNldEN1cnNvclZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXh9ID0gdGhpcy5kb2N1bWVudEV2ZW50LnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm87XG4gICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IERvY3VtZW50Q3Vyc29yLmdldEVsZW1lbnRDdXJzb3JQb3Moc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgc3RhcnRSZWdpb24sIGhpdERvY0luZGV4KTtcbiAgICAgICAgdGhpcy5kb2NDdHguY3Vyc29yUmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChjdXJzb3JQb3MucmVjdCk7XG4gICAgICAgIGNvbnN0IGFiUG9zID0gdGhpcy50cmFuc1RvQWJzb2x1dGVQb3MoRWxlbWVudFV0aWwuY2xvbmVSZWN0KGN1cnNvclBvcy5yZWN0KSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5zZXRDdXJzb3JQb3NpdGlvbihhYlBvcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zID0gY3Vyc29yUG9zLnJlY3Q7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5pbnZva2VDdXJzb3Ioc3RhcnRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bCG55u45a+55Z2Q5qCH5L2N572u6L2s5o2i5Li657ud5a+55Z2Q5qCH5L2NXG4gICAgICog55Sx5LqO57yp5pS+77yM5a+86Ie057ud5a+55L2N572uPeebuOWvueS9jee9ripzY2FsZVxuICAgICAqIEBwYXJhbSBwb3NcbiAgICAgKi9cbiAgICB0cmFuc1RvQWJzb2x1dGVQb3M8VCBleHRlbmRzIFBvc2l0aW9uIHwgUmVjdD4ocG9zOiBUKTogVCB7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gdGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lci5yZWN0Lng7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyLnJlY3QueTtcbiAgICAgICAgcG9zLnggPSBwb3MueCAqIHNjYWxlO1xuICAgICAgICBwb3MueSA9IHBvcy55ICogc2NhbGU7XG4gICAgICAgIGlmICgnaGVpZ2h0JyBpbiBwb3MpIHtcbiAgICAgICAgICAgIHBvcy5oZWlnaHQgPSBwb3MuaGVpZ2h0ICogc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3mmK/lkKblhYnmoIflj6/ku6Xorr7nva7mjqXlj5fnvJbovpFcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgY2FuU2V0Q3Vyc29yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZWRpdGFibGV9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIWVkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5EZXNpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8v5rWP6KeI5qih5byPXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuVmlldykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8v6KGo5Y2V5qih5byP5LiL77yM5aaC5p6c5LiN5Zyo5pWw5o2u5YWD57Sg5Lit77yM5YiZ5LiN5pi+56S65YWJ5qCHXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIGlmICghSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUoc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8v6KGo5Y2V5qih5byP5LiL77yM5pWw5o2u5YWD5LiN5Y+v57yW6L6RXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQgJiYgSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YUVsZSA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBpZiAoZGF0YUVsZSAmJiAhZGF0YUVsZS5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mlLnlhYnmoIdcbiAgICAgKiBAcGFyYW0gbmV3Q3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJzb3IobmV3Q3Vyc29yOiBDdXJzb3JUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdENhbnZhcy5zdHlsZS5jdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY3Vyc29yID0gbmV3Q3Vyc29yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+eCueWHu+S6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgZG9jQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMuZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+WPjOWHu+S6i+S7tlxuICAgICAqIOWkhOeQhuWFqOmAieW9k+WJjeauteiQvVxuICAgICAqL1xuICAgIHByaXZhdGUgZG9jRGJsQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGdldEZvY3VzVGV4dFNlZ21lbnQodGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRibENsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjeWFieagh+aJgOWcqOeahOaVsOaNruWFg1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0Q3VycmVudERhdGFFbGVtZW50KCk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUoc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudChzdGFydENvbnRyb2wsIHZhbGlkYXRlRGF0YUVsZSkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3lhYnmoIfmiYDlnKjnmoTmlbDmja7lhYPnmoTlgLxcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG4gICAgc2V0Q3VycmVudERhdGFFbGVtZW50VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q3VycmVudERhdGFFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhRWxlKSB7XG4gICAgICAgICAgICBkYXRhRWxlPy5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pWw5o2u5YWD5L2N572uXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERhdGFFbGVtZW50UG9zaXRpb24oZWxlbWVudDogTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnREZWNvcmF0ZVJlbmRlciA9IGVsZW1lbnQucGFpbnRSZW5kZXJzWzBdXG4gICAgICAgIGlmICghc3RhcnREZWNvcmF0ZVJlbmRlcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5pyq5om+5Yiw5pWw5o2u5YWD5byA5aeL5riy5p+T5YWD57SgJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3gsIGhlaWdodCwgeSwgd2lkdGh9ID0gc3RhcnREZWNvcmF0ZVJlbmRlci5yZWN0O1xuICAgICAgICBjb25zdCBwb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHN0YXJ0RGVjb3JhdGVSZW5kZXIpXG4gICAgICAgIHJldHVybiB7eDogcG9zLnggKyB3aWR0aCwgeTogcG9zLnkgKyBoZWlnaHQgKyA1LCB0cmFuc2xhdGVZOiB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5paH5qGj5qih5Z6LXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREb2NTY2hlbWEoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplKHRoaXMuZG9jQ3R4LmRvY3VtZW50LCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXREb2NTY2hlbWFKU09OKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0RG9jU2NoZW1hKCkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWPs+mUruiPnOWNlVxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkNvbnRleHRNZW51KGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qge3NlbGVjdGlvblN0YXRlfSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb247XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudEV2ZW50ID0gbmV3IENvbnRleHRNZW51RWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZWxlbWVudEV2ZW50LnNvdXJjZSA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudENvbnRleHRNZW51Jywgc3RhcnRDb250cm9sLCBlbGVtZW50RXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge3g6IGV2dC5vZmZzZXRYICsgMTAsIHk6IGV2dC5vZmZzZXRZLCB0cmFuc2xhdGVZOiB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9O1xuICAgICAgICB0aGlzLm9uQ29udGV4dE1lbnVJdGVtQ2hhbmdlZC5uZXh0KHtwb3M6IHBvc2l0aW9uLCBtZW51czogZWxlbWVudEV2ZW50Lm1lbnVzfSlcbiAgICB9XG5cbiAgICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGxpc3RlbkNvbnRhaW5lckhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURvY0hlaWdodCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5kb2NTY3JvbGwpO1xuICAgICAgICB0aGlzLnVwZGF0ZURvY0hlaWdodCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRG9jSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLmdldENvbnRhaW5lckhlaWdodCgpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGlmICh3aWR0aCA8IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8v6YCC5bqU6aG15a695qih5byPXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID09PSAnZml0LXBhZ2UnKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9ICh0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCAtIDgwKSAvIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fc2NhbGVWaWV3KHNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKCk7XG4gICAgfVxuXG4gICAgcmVzZXRWaWV3ZXIodHlwZTogJ2RlbWFuZCcgfCAnZm9yY2UnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUeXBlID0gdHlwZSA9PT0gJ2ZvcmNlJyA/ICdjb250ZW50JyA6ICdhcHBlYXJhbmNlJztcbiAgICAgICAgaWYgKHJlZnJlc2hUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJDdHgoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LmxheW91dFBhZ2VzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7op4blm75cbiAgICAgKiBAcGFyYW0gc2NhbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHNjYWxlKHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy/oh6rpgILlupTpobXlrr3mqKHlvI/ml7bvvIzlpoLmnpzmiYvliqjosIPmlbTnvKnmlL7mr5TkvovvvIzliJnovazlj5jkuLrljZXpobXmqKHlvI9cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPSAnc2luZ2xlUGFnZSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NhbGVWaWV3KHNjYWxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7op4blm75cbiAgICAgKiBAcGFyYW0gc2NhbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3NjYWxlVmlldyhzY2FsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgc2NhbGUgPSBzY2FsZSA8IDAuNSA/IDAuNSA6IHNjYWxlO1xuICAgICAgICBzY2FsZSA9IHNjYWxlID4gMiA/IDIgOiBzY2FsZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlckN0eCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5sYXlvdXRQYWdlcygpO1xuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZW5kZXJDdHgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzY2FsZSwgdmlld1NldHRpbmdzOiB7d2lkdGgsIGhlaWdodH19ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0LnVwZGF0ZSh7d2lkdGgsIGhlaWdodCwgc2NhbGV9KTtcbiAgICB9XG5cbiAgICBnZXRDb250YWluZXJIZWlnaHQoKTogeyBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IHtoZWlnaHQsIHdpZHRofSA9IHRoaXMuZG9jU2Nyb2xsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge2hlaWdodDogTWF0aC5mbG9vcihoZWlnaHQpLCB3aWR0aDogTWF0aC5mbG9vcih3aWR0aCl9O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Zyo5b2T5YmN5L2N572u5o+S5YWl6KGo5qC8XG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIGluc2VydFRhYmxlKHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiID0gVGFibGVFbGVtZW50LmNyZWF0ZVRhYmxlKHJvd3MsIGNvbHMpO1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydFRhYmxlKHRiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiZPljbDmiYDmnInmlofmoaNcbiAgICAgKi9cbiAgICBwcmludEFsbFBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudFByaW50LnByaW50KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KVxuICAgIH1cblxuICAgIGdldFByaW50Tm9kZXMoKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50UHJpbnQuZXhwb3J0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaWh+aho1xuICAgICAqL1xuICAgIGNsZWFyRG9jKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlrDlu7rmlofmoaNcbiAgICAgKiBAcGFyYW0gZG9jXG4gICAgICovXG4gICAgY3JlYXRlTmV3RG9jKGRvYzogRG9jdW1lbnRFbGVtZW50IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLmRvY0N0eC5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdEb2MgPSBkb2MgPz8gRG9jdW1lbnRUZW1wbGF0ZS5jcmVhdGVBNERvYygpO1xuICAgICAgICAvLyB0aGlzLmVsZW1lbnRSZWFkZXIuc2V0RG9jdW1lbnQobmV3RG9jKTtcbiAgICAgICAgLy8gdGhpcy5yZWZyZXNoRG9jdW1lbnQoJ2NvbnRlbnQnKTtcbiAgICAgICAgdGhpcy5sb2FkRG9jKEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplKG5ld0RvYywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsZWFyU3ViRXZlbnQoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Yy65paH5pys5bGe5oCnXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRTZWxlY3Rpb25UZXh0R3JvdXBQcm9wcygpOiBUZXh0UHJvcHMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLnByb3BzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmFuZ2UudGFyZ2V0LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvblBhcmFQcm9wcygpOiBQYXJhZ3JhcGhQcm9wcyB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc2VsZWN0aW9uU3RhdGUgfHwgIXNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBwYXJhLnByb3BzO1xuICAgIH1cblxuXG4gICAgc2V0VGV4dEZvcm1hdChuZXdQcm9wczogUGFydGlhbDxUZXh0UHJvcHM+KTogdm9pZCB7XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFRleHRTdHlsZSh0aGlzLnNlbGVjdGlvblN0YXRlLCAodCkgPT4ge1xuICAgICAgICAgICAgdC5zZXRGb3JtYXQobmV3UHJvcHMpO1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5byA5ZCv5qC85byP5Yi3XG4gICAgICovXG4gICAgZW5hYmxlRm9ybWF0QnJ1c2goKTogSUNhbmNlbFRva2VuRm4gfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2w7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFN0eWxlID0gc3RhcnRDb250cm9sLnByb3BzLmNsb25lKG51bGwpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uT3ZlcmxheUNvbG9yID0gdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yO1xuICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gXCJyZ2JhKDAsNTgsMTQwLDAuOClcIjtcblxuICAgICAgICAgICAgY29uc3QgY2FuY2VsVG9rZW46IElDYW5jZWxUb2tlbkZuID0ge307XG4gICAgICAgICAgICBjb25zdCBzdWIgPSB0aGlzLm9uQ2xpY2tFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGV4dEZvcm1hdChzZWxlY3RlZFN0eWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBzZWxlY3Rpb25PdmVybGF5Q29sb3I7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbFRva2VuLm9uRmluaXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFRva2VuLm9uRmluaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYW5jZWxUb2tlbi5jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gc2VsZWN0aW9uT3ZlcmxheUNvbG9yO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjYW5jZWxUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mrrXokL3lr7npvZBcbiAgICAgKiBAcGFyYW0gYWxpZ25cbiAgICAgKi9cbiAgICBzd2l0Y2hQYXJhQWxpZ24oYWxpZ246IFRleHRBbGlnbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHBhcmFQcm9wczogUGFyYWdyYXBoUHJvcHMpID0+IHtcbiAgICAgICAgICAgIHBhcmFQcm9wcy50ZXh0QWxpZ24gPSBhbGlnbjtcbiAgICAgICAgfTtcbiAgICAgICAgRG9jdW1lbnRDaGFuZ2Uuc2V0UGFyYUFsaWduKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHNldHRlckZ1bmMpO1xuICAgIH1cblxuXG4gICAgY29tYmluZUNlbGwoKTogdm9pZCB7XG4gICAgICAgIFRhYmxlVXRpbC5tZXJnZUNlbGxzKHRoaXMuc2VsZWN0aW9uU3RhdGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5b2T5YmN5q616JC96aG555uu56ym5Y+354q25oCBXG4gICAgICovXG4gICAgc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5zZXRQYXJhZ3JhcGhOdW1iZXJUeXBlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICogQHBhcmFtIGlkXG4gICAgICovXG4gICAgcmVtb3ZlQ29tbWVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5yZW1vdmVDb21tZW50KGlkKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOeEpueCueaJgOWcqOeahOaJueazqFxuICAgICAqL1xuICAgIHJlbW92ZUN1cnJlbnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCAoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCkpIGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbWVudC5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXmibnms6hcbiAgICAgKi9cbiAgICBpbnNlcnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuY2xlYXJBbGxDb21tZW50cygpO1xuICAgIH1cblxuXG4gICAgY3V0VGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgVGFibGVSb3dFbGVtZW50KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gcm93Py5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBUYWJsZVV0aWwuY3V0VGFibGUodGIsIHJvdy5nZXRJbmRleCgpKTtcbiAgICAgICAgY29uc3QgcGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIHRiLnBhcmVudC5hZGRDaGlsZChwYXJhLCB0Yi5nZXRJbmRleCgpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yid5aeL5YyW5b2T5YmN5paH5qGj5Yib5bu655So5oi35L+h5oGvXG4gICAgICog5LiA5Lu95paH5qGj5Y+q6ZyA6KaB6K6+572u5LiA5qyhXG4gICAgICovXG4gICAgaW5pdEN1cnJlbnREb2NVc2VyKHVzZXJJZDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nLCBkYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmRvY0N0eC5kb2N1bWVudDtcbiAgICAgICAgICAgIGRvYy5wcm9wcy5jcmVhdGVVc2VySWQgPSB1c2VySWQ7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlVXNlck5hbWUgPSB1c2VyTmFtZTtcbiAgICAgICAgICAgIGRvYy5wcm9wcy5jcmVhdGVEYXRlID0gZGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5paH5qGj5YaF5a65XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmNsZWFyQWxsVmFsaWRhdGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Q2hhbmdlLnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSAXG4gICAgICovXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UudW5kbygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaBouWkjVxuICAgICAqL1xuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLnJlZG8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmkqTplIBcbiAgICAgKi9cbiAgICBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5TWFuZ2UuY2FuVW5kbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmgaLlpI1cbiAgICAgKi9cbiAgICBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5TWFuZ2UuY2FuUmVkbztcbiAgICB9XG5cbiAgICBzd2l0Y2hUcmFja0NoYW5nZXMoZWxlQ3R4OiBCcmFuY2hFbGVtZW50IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgZWxlQ3R4ID0gZWxlQ3R4IHx8IHRoaXMuZG9jQ3R4LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBib2R5ID0gZWxlQ3R4LnRyZWVGaW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICBib2R5LnRyYWNrQ2hhbmdlcyA9ICFib2R5LnRyYWNrQ2hhbmdlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5YiwZG9jLWJvZHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0cmFja1RpcHNDaGFuZ2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudEV2ZW50LnRyYWNrVGlwc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgc3dpdGNoRnVsbFZpZXdQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldyA9ICF0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldztcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZEpTT04oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRKU09OKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb3B5U2VyaWFsaXplU3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZFN0cnVjdCh0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKGNvcHlTZXJpYWxpemVTdHIgYXMgQnJhbmNoRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u57q45byg5pa55ZCRXG4gICAgICogQHBhcmFtIG9yaWVudGF0aW9uXG4gICAgICovXG4gICAgc2V0UGFwZXJPcmllbnQob3JpZW50YXRpb246IE9yaWVudFR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHMub3JpZW50ID0gb3JpZW50YXRpb247XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLm9yaWVudCA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKCdmb3JjZScpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u57q45byg5aSn5bCPLOWNleS9jeS4uuavq+exsyhtbSlcbiAgICAgKiBAcGFyYW0gd2lkdGhcbiAgICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAgICovXG4gICAgc2V0UGFwZXJTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHM7XG4gICAgICAgIGRvY1Byb3BzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGRvY1Byb3BzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MgPSBuZXcgUGFnZU9wdGlvbnMod2lkdGgsIGhlaWdodCwgZG9jUHJvcHMub3JpZW50KTtcbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcignZm9yY2UnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXlvLrliLbmjaLpobXnrKZcbiAgICAgKi9cbiAgICBpbnNlcnRQYWdlQnJlYWtQYXJhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydFBhZ2VCcmVha1BhcmEoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmL7npLrlvZPliY3lhYPntKDliLDop4blm77kuK1cbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqL1xuICAgIGJyaW5nVG9WaWV3KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlID0gZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQgPyBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KGVsZW1lbnQpIDogZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihlbGUpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyT2JqID0gZWxlLnBhaW50UmVuZGVyc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihyZW5kZXJPYmosIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZG9jUmVuZGVyLmdldEluZGV4KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBEb2N1bWVudEN1cnNvci5nZXRFbGVtZW50Q3Vyc29yUG9zKGVsZSwgMCwgcmVnaW9uLCBpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN1cnJvdW5kKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGN1cnNvclBvcy5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgPiAwICYmIGN1cnNvclBvcy5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgPCB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRvY1Njcm9sbC5zY3JvbGxUbyhjdXJzb3JQb3MucmVjdC54LCBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeaWh+aho+mhtei+uei3nVxuICAgICAqL1xuICAgIHNldERvY3VtZW50TWFyZ2luKHBhZ2VNYXJnaW46IFBhcnRpYWw8TWFyZ2luUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC51cGRhdGVNYXJnaW4ocGFnZU1hcmdpbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0T2Zmc2V0XG4gICAgICogQHBhcmFtIGRlc3RFbGVBcnJheVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgZGVzdEVsZUFycmF5OiBBcnJheTxFbGVtZW50Pik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCwgZGVzdEVsZUFycmF5KTtcbiAgICB9XG5cbiAgICBzaG93SGlzdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhIaXN0b3J5Lm9wcyk7XG4gICAgICAgIGNvbnN0IG5ld1BhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwU3ltYm9sID0gbmV3IFBTeW1ib2xFbGVtZW50KCk7XG4gICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQobmV3IFRleHRHcm91cEVsZW1lbnQoKSk7XG4gICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQocFN5bWJvbCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHBTeW1ib2wpO1xuICAgICAgICBjb25zb2xlLmxvZyhpbmRleClcbiAgICAgICAgY29uc29sZS5sb2coRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgobmV3UGFyYSwge2N1cnJJbmRleDogLTEsIGluZGV4fSkpO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeUlkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldENvbnRyb2xCeUluZGV4KHRoaXMuZG9jQ3R4LmRvY3VtZW50LCB7Y3VyckluZGV4OiAtMSwgaW5kZXh9KTtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sSWQoZWxlOiBFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoZWxlKTtcbiAgICB9XG5cbiAgICBzd2l0Y2hQYWdlTGF5b3V0KG1vZGU6IFBhZ2VMYXlvdXRNb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPSBtb2RlO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2ZpdC1wYWdlJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZsdXNoVG9TY2hlZHVsZSgpO1xuICAgIH1cblxuXG4gICAgdGVzdDIoKTogdm9pZCB7XG4gICAgICAgIC8v6I635Y+W5paH5qGj5LiK5LiL5paHXG4gICAgICAgIGNvbnN0IGRvY0VsZUN0eCA9IHRoaXMuZG9jQ3R4LmdldEN0eCh0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIC8v6I635Y+W5bm06b6E5pWw5o2u5YWDXG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSBkb2NFbGVDdHguZ2V0Q29udHJvbEJ5SWQoJzE0OTM0Nzc3MTIxMzQ2NzIzODYnKSBhcyBEYXRhRWxlbWVudFRleHQ7XG4gICAgICAgIC8v6I635Y+W6KaB6ZqQ6JeP55qE5pWw5o2u57uEXG4gICAgICAgIGNvbnN0IGRhdGFHcm91cCA9IGRvY0VsZUN0eC5jdHgudHJlZUZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCkgYXMgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQ7XG4gICAgICAgIC8v5L6m5ZCs5pWw5o2u5YWD5pu05pS55pe26Ze0XG4gICAgICAgIGRhdGFFbGUub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgLy/lnKjmlofmoaPph43mlrDmjpLniYjjgIHnu5jliLbliY3vvIzojrflj5bmnIDnu4jnmoTmjIflrproioLngrnnmoTlhoXlrrlcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVJlZnJlc2hTdWIgPSB0aGlzLm9uQmVmb3JlUmVmcmVzaERvY3VtZW50LnN1YnNjcmliZSgoZTIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn5YaF5a655Y+R55Sf5pS55Y+Y77yM6ZqQ6JeP5pWw5o2u57uEJyk7XG4gICAgICAgICAgICAgICAgLy/ojrflj5blubTpvoTmlbDmja7lhYPovpPlhaXnmoTlgLxcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBOdW1iZXIucGFyc2VJbnQoZGF0YUVsZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAvL+W5tOm+hOWkp+S6jjIw77yM6ZqQ6JeP5pWw5o2u5YWDXG4gICAgICAgICAgICAgICAgZGF0YUdyb3VwLnByb3BzLmhpZGRlbiA9IGFnZSA+IDIwO1xuICAgICAgICAgICAgICAgIC8v5Y+W5raI6K6i6ZiF5LqL5Lu2XG4gICAgICAgICAgICAgICAgYmVmb3JlUmVmcmVzaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCB0eXBlIEVkaXRvckN1cnJlbnRQb3MgPSB7XG4gICAgcG9zOiBQb3NpdGlvblxufTtcblxuZXhwb3J0IHR5cGUgRWRpdG9yQ29udGVueHRQcm9wcyA9IHtcbiAgICBtZW51czogQXJyYXk8Q29udGVudE1lbnVJdGVtPlxufSAmIEVkaXRvckN1cnJlbnRQb3NcblxuZXhwb3J0IHR5cGUgRWRpdG9yUGFuZWxQcm9wcyA9IHtcbiAgICB0eXBlOiBzdHJpbmc7XG59ICYgRWRpdG9yQ3VycmVudFBvcztcblxuIiwiaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG4vKipcbiAqIOaWh+aho+WQiOW5tlxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21iaW5lIHtcbiAgICAvKipcbiAgICAgKiDlkIjlubbmqKHmnb/mlofmoaNcbiAgICAgKiDnlKjkuo7orr7nva7lkIjlubblkI7vvIzpobXnnInpobXohJrnrYnnu5/kuIDpg6jliIZcbiAgICAgKi9cbiAgICBtYWluVGVtcGxhdGUhOiBEb2N1bWVudEVsZW1lbnRcblxuICAgIGRvY1BhcnRzOiBBcnJheTx7IGRvYzogRG9jdW1lbnRFbGVtZW50LCBkb2NJZDogc3RyaW5nIH0+ID0gW107XG4gICAgLyoqXG4gICAgICog5re75Yqg6ZyA6KaB5ZCI5bm255qE5paH5qGj6YOo5YiGXG4gICAgICovXG4gICAgYWRkKGRvY1BhcnQ6IERvY3VtZW50RWxlbWVudCwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY1BhcnRzLnB1c2goeyBkb2M6IGRvY1BhcnQsIGRvY0lkOiBpZCB9KVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jUGFydHMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlKjkuo7lkIjlubbmlofmoaPorqHnrpdcbiAgICAgKi9cbiAgICBsb2FkKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5tYWluVGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHRlbXBsYXRlLmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBib2R5LmNsZWFySXRlbXMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY1BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gdGhpcy5kb2NQYXJ0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRDb250YWluZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGRvY1BhcnRDb250YWluZXIucHJvcHMucGFydElkID0gcGFydC5kb2NJZDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRCb2R5ID0gcGFydC5kb2MuZmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50XG4gICAgICAgICAgICBkb2NQYXJ0Q29udGFpbmVyLmFkZENoaWxkKGRvY1BhcnRCb2R5LmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIGJvZHkuYWRkQ2hpbGQoZG9jUGFydENvbnRhaW5lcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBEb2N1bWVudFBhaW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IHByaW50Tm9kZXMgfSBmcm9tIFwiLi9kb2N1bWVudC1wcmludFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRQYWludCB9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LXJlYWRlclwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHQsIFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcblxuLyoqXG4gKiDnprvlsY/miZPljbBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERvY3VtZW50UHJpbnRPZmZzY3JlZW5CYXNlIHtcbiAgICBkb2N1bWVudFBhaW50OiBEb2N1bWVudFBhaW50O1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZTtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBuZXcgVmlld09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvID0gJ+S4h+i+vuS/oeaBr+eUteWtkOeXheWOhue8lui+keWZqCx3d3cud29uZGVyc2dyb3VwLmNvbSc7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0NoYXJSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kcmF3Q2hhclJlY3RDb2xvciA9ICdncmVlbic7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0xpbmVSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZSA9IDIwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoID0gMjAwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyA9IDMuNzc5NTAwMTIyMDcwMzEyNjtcbiAgICAgICAgLy/mlbTkuKrnlLvluIPnmoTlsLrlr7hcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwMCxcbiAgICAgICAgICAgIGhlaWdodDogODAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIgPSB7XG4gICAgICAgICAgICBpZDogJzY2NjYnLFxuICAgICAgICAgICAgbmFtZTogJ+euoeeQhuWRmCdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjYW52YXMsIGN0eCB9ID0gdGhpcy5jcmVhdGVDYW52YXMoMjAwLCAyMDApO1xuICAgICAgICBjb25zdCBzcyA9IG5ldyBTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLmRvY0N0eCA9IG5ldyBFZGl0b3JDb250ZXh0KHNzLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDdHggPSB0aGlzLmNyZWF0ZVJlbmRlckN0eChjdHgsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50ID0gbmV3IERvY3VtZW50UGFpbnQodGhpcy5yZW5kZXJDdHgsIHRoaXMuZG9jQ3R4LCBuZXcgTWFwKCkpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIgPSBuZXcgRWxlbWVudFJlYWRlcih0aGlzLmRvY0N0eCwgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5zeW5jUmVmcmVzaCA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBwcmludChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgaWYgKCFjYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6aG1JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzO1xuICAgICAgICBwcmludE5vZGVzKGNhbnZhc05vZGVzLCB7IC4uLmRvY1Byb3BzIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItueahOWbvueJh++8jOagvOW8j+S4ukJhc2U2NOe8lueggVxuICAgICAqL1xuICAgIGFzeW5jIGdldEltYWdlc0NvbnRlbnQoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIGlmICghY2FudmFzTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+WvvOWHuumhtScpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbnZhc05vZGVzLm1hcChub2RlID0+IG5vZGUudG9EYXRhVVJMKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFByaW50Tm9kZXMoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8QXJyYXk8YW55Pj4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIHJldHVybiBjYW52YXNOb2RlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDor7vlj5bmlbDmja7vvIzmjpLniYhcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgcHJlcGFyZShkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyLnJlYWQoZGF0YSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZVBhZ2VzKCk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZG9jQ3R4LmltYWdlTG9hZGVyLmdldExvYWRUYXNrcygpKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDdHgudXBkYXRlKHsgc2NhbGUsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FudmFzTm9kZXMocHJpbnRQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3QgY2FudmFzTGlzdDogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHByaW50UmFuZ2VzICYmIHByaW50UmFuZ2VzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGNhbnZhczogY2FudmFzTm9kZSwgY3R4IH0gPSB0aGlzLmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IHRoaXMuY3JlYXRlUmVuZGVyQ3R4KGN0eCwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmluaXQoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5kcmF3TW9kZSA9ICdwcmludCc7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBwcmludFBhZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgdG1wID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGRvYy5yZWN0KTtcbiAgICAgICAgICAgIGRvYy5yZWN0LnggPSAwO1xuICAgICAgICAgICAgZG9jLnJlY3QueSA9IDA7XG4gICAgICAgICAgICBFbGVtZW50UGFpbnQuZHJhd1BhZ2UocmVuZGVyQ3R4LCB0aGlzLmRvY0N0eCwgZG9jLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJDdHgubWFpbkNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCwgJ3doaXRlJyk7XG4gICAgICAgICAgICByZW5kZXJDdHguY29tbWl0KHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSk7XG4gICAgICAgICAgICBkb2MucmVjdCA9IHRtcDtcbiAgICAgICAgICAgIGNhbnZhc0xpc3QucHVzaChjYW52YXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTGlzdDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIH07XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVSZW5kZXJDdHgobWFpbkN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IFJlbmRlckNvbnRleHRUeXBlO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuIGV4dGVuZHMgRG9jdW1lbnRQcmludE9mZnNjcmVlbkJhc2Uge1xuICAgIGNyZWF0ZVJlbmRlckN0eChtYWluQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogUmVuZGVyQ29udGV4dFR5cGUge1xuICAgICAgICBjb25zdCByZW5kZXJDdHggPSBuZXcgUmVuZGVyQ29udGV4dChuZXcgUGFpbnRDb250ZW50KG1haW5DdHgpKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgcmVuZGVyQ3R4LmluaXQoeyBzY2FsZSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAgICAgcmV0dXJuIHJlbmRlckN0eDtcbiAgICB9XG5cbiAgICBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIH0ge1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUuY3Vyc29yID0gJ3RleHQnO1xuICAgICAgICBjYW52YXNOb2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhc05vZGUuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKGNhbnZhc05vZGUsIGN0eCwgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FudmFzOiBjYW52YXNOb2RlLCBjdHhcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge0NvbnRlbnRNZW51SXRlbSwgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEtleWJvcmFkRWxlbWVudEV2ZW50fSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IEVsZW1lbnRIYW5kbGVyIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IGRvY3VtZW50UHJpbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1wcmludFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50LCBUYWJsZVNwbGl0Q2VsbCwgVGFibGVVdGlsfSBmcm9tIFwiLi9pbXBsXCI7XG5cbi8qKlxuICog5Yig6Zmk5b2T5YmN5q616JC9XG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVDdXJyZW50UGFyYWdyYXBoOiBFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4gPSAoZXZ0KTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSwgY3R4OiB7IHZpZXdPcHRpb25zIH0sIGN1cnJlbnRFbGVtZW50IH0gPSBldnQ7XG4gICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnRGVsZXRlVGFibGUnLCBjYXB0aW9uOiAn5Yig6Zmk5q616JC9JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwc3ltYm9sID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Rm9jdXNhYmxlRWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHBzeW1ib2wsIGZhbHNlLCB0cnVlLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRGb2N1c2FibGVFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0Rm9jdXNhYmxlRWxlLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiDmlofmoaPmiZPljbBcbiAqIEBwYXJhbSBjZXZ0IFxuICovXG5leHBvcnQgY29uc3QgcHJpbnREb2NPbkNvbnRleHRtZW51OiBFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4gPSAoY2V2dCk6IHZvaWQgPT4ge1xuICAgIGNldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdQcmludCcsIGNhcHRpb246ICfmiZPljbDmiYDmnInpobUnLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UHJpbnQucHJpbnQoY2V2dC5zZWxlY3Rpb25TdGF0ZSwgY2V2dC5jdHgudmlld09wdGlvbnMsIGNldnQuY3R4KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgY2V2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ1ByaW50JywgY2FwdGlvbjogJ+aJk+WNsOW9k+WJjemhtScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRQcmludC5wcmludEN1cnJQYWdlKGNldnQuc2VsZWN0aW9uU3RhdGUsIGNldnQuY3R4LnZpZXdPcHRpb25zLCBjZXZ0LmN0eClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldERhdGFFbGVtZW50UHJvcHM6RWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+PShldnQpOnZvaWQgPT57XG4gICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnU2V0dGluZ3MnLCBjYXB0aW9uOiAn5YaF5a655o6n5Yi26K6+572uJywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6KGUpPT57XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+eCueWHu+S6hicpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBvblRhYmxlQ29udGV4dG1lbnU6RWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+PShldnQpOnZvaWQgPT57XG4gICAgY29uc3Qge3NlbGVjdGlvblN0YXRlLCBjdHg6IHt2aWV3T3B0aW9uc30sY3VycmVudEVsZW1lbnR9ID0gZXZ0O1xuICAgIGlmIChUYWJsZVV0aWwuY2FuRGVsZXRlVGFibGUoc2VsZWN0aW9uU3RhdGUpKSB7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdEZWxldGVUYWJsZScsIGNhcHRpb246ICfliKDpmaTooajmoLwnLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY3VycmVudEVsZW1lbnQsIGZhbHNlLCB0cnVlLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChUYWJsZVV0aWwuY2FuTWVyZ2VDZWxscyhzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ01lcmdlRHVwbGljYXRlJywgY2FwdGlvbjogJ+WQiOW5tuWNleWFg+agvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVVdGlsLm1lcmdlQ2VsbHMoc2VsZWN0aW9uU3RhdGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKFRhYmxlVXRpbC5jYW5TcGxpdENlbGwoc2VsZWN0aW9uU3RhdGUpKSB7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdTcGxpdCcsIGNhcHRpb246ICfmi4bliIbljZXlhYPmoLwnLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlU3BsaXRDZWxsLnNwbGl0Q2VsbChzZWxlY3Rpb25TdGF0ZSwgMCwgMilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnQ29tYmluZScsIGNhcHRpb246ICflkIjlubbljZXlhYPmoLzov5jljp8nLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5yZXN0b3JlQ2VsbChzZWxlY3Rpb25TdGF0ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogXCJJbnNlcnRcIiwgY2FwdGlvbjogJ+S4iuaWueaPkuWFpeauteiQvScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChQYXJhZ3JhcGhFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKSwgY3VycmVudEVsZW1lbnQuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVmcmVzaFZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiBcIkluc2VydFwiLCBjYXB0aW9uOiAn5LiL5pa55o+S5YWl5q616JC9JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucGFyZW50LmFkZENoaWxkKFBhcmFncmFwaEVsZW1lbnQuY3JlYXRlRWxlbWVudCgpLCBjdXJyZW50RWxlbWVudC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVmcmVzaFZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZXZ0Lm1lbnVzID0gcmVtb3ZlRHVwbGljYXRlc0V2ZW50KGV2dC5tZW51cyk7XG59O1xuXG5mdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzRXZlbnQoZXZlbnRzOiBDb250ZW50TWVudUl0ZW1bXSk6IENvbnRlbnRNZW51SXRlbVtdIHtcbiAgICBsZXQgYXJyOiBDb250ZW50TWVudUl0ZW1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgbGV0IGtleXMgPSBhcnIubWFwKGl0ZW0gPT4gaXRlbS5jYXB0aW9uKTtcbiAgICAgICAgaWYgKCFrZXlzLmluY2x1ZGVzKGV2ZW50c1tpXS5jYXB0aW9uKSkge1xuICAgICAgICAgICAgYXJyLnVuc2hpZnQoZXZlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufSJdLCJuYW1lcyI6WyJuYW5vaWQiLCJSZW5kZXJPYmplY3RUeXBlIiwibW9tZW50IiwiTW9kaWZ5RmxhZyIsIkhpc3RvcnkubG9nVXBkYXRlRWxlUHJvcHMiLCJIaXN0b3J5Lmluc2VydEVsZSIsIkhpc3RvcnkucmVtb3ZlRWxlIiwiRWRpdE1vZGUiLCJEb2NNb2RlIiwiQm9vbGVhbkVudW0iLCJIaXN0b3J5LmZvcm1hdEVsZSIsIkhpc3RvcnkucmVtb3ZlVGV4dCIsIkhpc3RvcnkuaW5wdXRUZXh0IiwiVHJhY2tSdW5UeXBlRW51bSIsImJ3aXBqcyIsIlRyYWNrLnN1cHByZXNzVHJhY2tpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUF3QkE7O0FBRUc7TUFDVSxZQUFZLENBQUE7QUFDRixJQUFBLEdBQUEsQ0FBQTtBQUFuQixJQUFBLFdBQUEsQ0FBbUIsR0FBa0IsRUFBQTtRQUFsQixJQUFHLENBQUEsR0FBQSxHQUFILEdBQUcsQ0FBZTtLQUFLO0FBQzFDOztBQUVHO0FBQ0gsSUFBQSxNQUFNLENBQVc7QUFDakIsSUFBQSxZQUFZLENBQVU7QUFDdEIsSUFBQSxZQUFZLENBQWdCO0FBQzVCOztBQUVHO0FBQ0gsSUFBQSxjQUFjLENBQVc7QUFDekIsSUFBQSxvQkFBb0IsQ0FBVTtBQUM5QixJQUFBLG9CQUFvQixDQUFVOztBQUU5QixJQUFBLFFBQVEsQ0FBVztBQUNuQixJQUFBLE9BQU8sQ0FBVTtBQUNqQixJQUFBLE9BQU8sQ0FBVTtBQUNqQixJQUFBLEtBQUssQ0FBVTtBQUNmLElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVc7QUFDaEIsSUFBQSxJQUFJLENBQVc7QUFDZixJQUFBLE9BQU8sQ0FBVTtBQUNqQixJQUFBLElBQUksY0FBYyxHQUFBO0FBQ2QsUUFBQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO0tBQ2xDO0FBQ0osQ0FBQTtNQUtZLGVBQWUsQ0FBQTtBQUN4QixJQUFBLElBQUksQ0FBVTtBQUNkLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsUUFBUSxDQUFnQjtJQUN4QixRQUFRLEdBQTRCLEVBQUUsQ0FBQztBQUMxQyxDQUFBO0FBQ0Q7O0FBRUc7QUFDRyxNQUFPLGlCQUFrQixTQUFRLFlBQVksQ0FBQTtBQUFJLENBQUE7QUFFakQsTUFBTyxxQkFBc0IsU0FBUSxZQUFZLENBQUE7QUFBSSxDQUFBO0FBQ3JELE1BQU8sb0JBQXFCLFNBQVEsWUFBWSxDQUFBO0FBQ2xELElBQUEsR0FBRyxDQUFVO0FBQ2IsSUFBQSxXQUFXLENBQWlCO0FBQy9CLENBQUE7QUFDSyxNQUFPLGNBQWUsU0FBUSxZQUFZLENBQUE7QUFBSSxDQUFBO0FBQzlDLE1BQU8sZUFBZ0IsU0FBUSxZQUFZLENBQUE7QUFBSSxDQUFBO0FBTy9DLE1BQU8saUJBQWtCLFNBQVEsWUFBWSxDQUFBO0FBQy9DLElBQUEsU0FBUyxDQUFjO0FBQzFCLENBQUE7QUFDSyxNQUFPLHVCQUF3QixTQUFRLFlBQVksQ0FBQTtJQUNyRCxLQUFLLEdBQTJCLEVBQUUsQ0FBQztBQUN0QyxDQUFBO0FBQ0ssTUFBTyxnQkFBaUIsU0FBUSxZQUFZLENBQUE7QUFDOUMsSUFBQSxXQUFXLENBQVc7QUFDekIsQ0FBQTtNQUdZLFFBQVEsQ0FBQTtBQUNULElBQUEsR0FBRyxHQUE2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXRFLElBQUEsR0FBRyxDQUF5QixPQUFnQixFQUFFLFNBQXFCLEVBQUUsUUFBMEIsRUFBRSxVQUFtQixFQUFBO1FBQ2hILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsTUFBTSxPQUFPLEdBQUdBLGFBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sVUFBVSxHQUFrQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNuRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN2QyxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQixTQUFBO0FBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQztLQUNsQjtJQUVELE1BQU0sQ0FBQyxPQUFnQixFQUFFLE9BQWUsRUFBQTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxRQUFBLElBQUksTUFBTSxFQUFFO0FBQ1IsWUFBQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRTtBQUNwQixnQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQyxhQUFBO0FBQ0osU0FBQTtLQUNKO0lBRUQsWUFBWSxDQUFDLE9BQWdCLEVBQUUsU0FBcUIsRUFBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxRQUFBLElBQUksTUFBTSxFQUFFO0FBQ1IsWUFBQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFHLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLE9BQWdCLEVBQUE7O0FBRWxCLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDNUI7QUFFRCxJQUFBLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFNBQWlCLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBQTtRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxRQUFBLElBQUksTUFBTSxFQUFFO0FBQ1IsWUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xJLFlBQUEsT0FBTyxRQUFRLENBQUM7QUFDbkIsU0FBQTtBQUNELFFBQUEsT0FBTyxFQUFFLENBQUM7S0FFYjtBQUNKOztBQzVJRCxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDOUIsTUFBQSxXQUFXLEdBQUcsSUFBSSxPQUFPLEdBQW1CO0FBQzVDLE1BQUEsVUFBVSxHQUFHLElBQUksT0FBTyxHQUErQztBQU9wRixNQUFNLFNBQVMsR0FBMEIsRUFBRSxDQUFDO0FBQzVDLFNBQVMsS0FBSyxDQUFDLE1BQWMsRUFBRSxDQUFXLEVBQUE7SUFDdEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNYLE9BQU87QUFDVixLQUFBO0lBQ0QsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ1osUUFBQSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFBO0FBQ2xELEtBQUE7SUFDRCxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDWixRQUFBLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUE7QUFDNUMsS0FBQTtBQUNELElBQUEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsTUFBYyxFQUFFLENBQVcsRUFBRSxRQUFhLEVBQUUsUUFBYSxFQUFBOztJQUV0RSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0IsT0FBTztBQUNWLEtBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixPQUFPO0FBQ1YsS0FBQTtJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQ3RDLElBQUEsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RCxJQUFBLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBRWpELElBQUEsSUFBSSxRQUFRLEVBQUU7QUFDVixRQUFBLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDdkIsS0FBQTtBQUNELElBQUEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUc7UUFDYixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDckMsS0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRWUsU0FBQSxZQUFZLENBQW1CLE1BQVMsRUFBRSxFQUFrQixFQUFBO0FBQ3hFLElBQUEsSUFBVSxNQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsVUFBVSxDQUFPLE1BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0MsUUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNqQixLQUFBO0FBQ0QsSUFBQSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNoQixRQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2pCLEtBQUE7SUFDRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLElBQUEsSUFBSSxVQUFVLEVBQUU7QUFDWixRQUFBLE9BQU8sVUFBZSxDQUFDO0FBQzFCLEtBQUE7QUFDRCxJQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUM1QixRQUFBLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBQTtZQUNuQixJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDYixnQkFBQSxPQUFPLE1BQU0sQ0FBQztBQUNqQixhQUFBO1lBQ0QsSUFBSSxDQUFDLEtBQUssZUFBZSxFQUFFO0FBQ3ZCLGdCQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsYUFBQTtBQUNELFlBQUEsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQzVDLFlBQUEsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ2hDLGdCQUFBLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxhQUFBO0FBQ0QsWUFBQSxPQUFPLEdBQUcsQ0FBQztTQUNkO0FBQ0QsUUFBQSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFBOztBQUU3QixZQUFBLE1BQU0sUUFBUSxHQUFTLE1BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFBLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsWUFBQSxJQUFVLFFBQVMsQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFO0FBQ2hDLGdCQUFBLElBQUksUUFBUSxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsRUFBRTtvQkFDM0UsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLGlCQUFBO0FBQ0osYUFBQTtBQUNELFlBQUEsT0FBTyxHQUFHLENBQUM7U0FDZDtBQUNKLEtBQUEsQ0FBQyxDQUFBO0FBQ0YsSUFBQSxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5QixJQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFFLEVBQWtCLEVBQUE7QUFDakUsSUFBQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLElBQUEsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsSUFBQSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDO1NBR2Usd0JBQXdCLENBQUMsTUFBYyxFQUFFLENBQVcsRUFBRSxFQUFrQixFQUFBO0lBQ3BGLElBQUksV0FBVyxHQUFRLE1BQU0sQ0FBQztBQUM5QixJQUFBLElBQVUsTUFBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQ2hDLFFBQUEsV0FBVyxHQUFTLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxLQUFBO0FBQ0QsSUFBQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2xCLElBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQUVNLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBWSxLQUFrQixHQUFHLFlBQVksS0FBSTtNQUUzRCxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFRO0FBQ2hELE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYyxLQUN2QyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQztBQUVqQixNQUFBLFNBQVMsR0FBRyxDQUFDLEtBQWMsS0FBWTtBQUNoRCxJQUFBLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMzQzs7QUNuSEE7O0FBRUc7TUFDbUIsWUFBWSxDQUFBO0FBU1gsSUFBQSxPQUFBLENBQUE7QUFSbkIsSUFBQSxNQUFNLENBQWU7QUFDckIsSUFBQSxPQUFPLENBQWdCO0FBQ3ZCLElBQUEsSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsSUFBQSxNQUFNLENBQXNCO0FBQzVCOztBQUVFO0FBQ0YsSUFBQSxZQUFZLENBQVc7QUFDdkIsSUFBQSxXQUFBLENBQW1CLE9BQVUsRUFBQTtRQUFWLElBQU8sQ0FBQSxPQUFBLEdBQVAsT0FBTyxDQUFHO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBQ3JDO0lBRUQsa0JBQWtCLENBQUMsQ0FBa0MsRUFBQSxHQUFXO0lBQ2hFLE9BQU8sR0FBQTs7Ozs7O0tBTU47QUFFRDs7OztBQUlFO0lBQ0YsWUFBWSxHQUFBO0FBQ1IsUUFBQSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNyQixZQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZFLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxnQkFBZ0IsR0FBQTtBQUNaLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3JCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ2hELFNBQUE7QUFDRCxRQUFBLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUMxRjtBQUVEOzs7QUFHRztBQUNILElBQUEsa0JBQWtCLENBQUMsU0FBd0IsRUFBQTtBQUN2QyxRQUFBLE1BQU0sV0FBVyxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsR0FBRyxTQUFTLEdBQVUsU0FBVSxDQUFDLE1BQU0sQ0FBQztBQUN6RixRQUFBLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDOztBQUVqQyxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDakU7SUFFRCxRQUFRLEdBQUE7UUFDSixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLFNBQUE7S0FDSjtBQUVKLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQWdCLGdCQUE4QyxTQUFRLFlBQWUsQ0FBQTtBQUN2RixJQUFBLFdBQUEsQ0FBWSxPQUFpQixFQUFBO1FBQ3pCLEtBQUssQ0FBQyxPQUFZLENBQUMsQ0FBQztLQUN2QjtBQUNKLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQWdCLGtCQUFnRCxTQUFRLFlBQWUsQ0FBQTtBQUN6RixJQUFBLFdBQUEsQ0FBWSxPQUFpQixFQUFBO1FBQ3pCLEtBQUssQ0FBQyxPQUFZLENBQUMsQ0FBQztLQUN2QjtJQUNPLE9BQU8sR0FBd0IsRUFBRSxDQUFDO0lBQzFDLFFBQVEsR0FBQTtRQUNKLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUN2QjtJQUVELFFBQVEsQ0FBQyxHQUFHLEtBQTBCLEVBQUE7QUFDbEMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxZQUFBLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFlBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsU0FBQTtLQUNKO0lBRUQsV0FBVyxDQUFDLElBQWtCLEVBQUUsS0FBYSxFQUFBO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztLQUN0QjtBQUVELElBQUEsV0FBVyxDQUFDLEtBQW1CLEVBQUE7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ1gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7QUFDRCxRQUFBLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FFMUI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakM7QUFFRCxJQUFBLGtCQUFrQixDQUFDLEtBQWEsRUFBQTtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRWpDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7S0FDSjtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsWUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsU0FBQTtLQUNKO0FBQ0QsSUFBQSxJQUFJLE1BQU0sR0FBQTtBQUNOLFFBQUEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUM5QjtBQUdELElBQUEsUUFBUSxDQUF3QyxLQUFhLEVBQUE7QUFDekQsUUFBQSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFNLENBQUM7S0FDbkM7QUFFRCxJQUFBLGFBQWEsQ0FBQyxLQUFtQixFQUFBO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEM7SUFJRCxPQUFPLEdBQUE7UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7O0FBRW5CLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7S0FFM0I7QUFDSixDQUFBO0FBUUQ7O0FBRUc7QUFDRyxNQUFnQix3QkFBc0QsU0FBUSxrQkFBcUIsQ0FBQTtBQUNyRyxJQUFBLGNBQWMsQ0FBQyxRQUFnQixFQUFBO0FBQzNCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQzlCO0FBQ0osQ0FBQTtBQUVLLE1BQWdCLHVCQUFxRCxTQUFRLGtCQUFxQixDQUFBO0FBQ3ZHLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQWdCLDBCQUF3RCxTQUFRLGtCQUFxQixDQUFBO0FBQ3ZHLElBQUEsY0FBYyxDQUFDLFFBQWdCLEVBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7S0FDOUI7QUFDSixDQUFBO0FBRUQ7O0FBRUc7QUFDRyxNQUFnQiwwQkFBd0QsU0FBUSx3QkFBMkIsQ0FBQTtBQUFJLENBQUE7QUFFckg7O0FBRUc7QUFDRyxNQUFnQixvQkFBcUIsU0FBUSwwQkFBMEIsQ0FBQTtBQUFJLENBQUE7QUFFakY7OztBQUdHO0FBQ0csTUFBZ0IsZ0NBQWlDLFNBQVEsMEJBQTBCLENBQUE7QUFBSSxDQUFBO0FBRTdGOzs7QUFHRztBQUNHLE1BQWdCLHlCQUEwQixTQUFRLHdCQUF3QixDQUFBO0FBQUksQ0FBQTtBQUt4RUMsa0NBR1g7QUFIRCxDQUFBLFVBQVksZ0JBQWdCLEVBQUE7QUFDeEIsSUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBVSxDQUFBO0FBQ1YsSUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBUSxDQUFBO0FBQ1osQ0FBQyxFQUhXQSx3QkFBZ0IsS0FBaEJBLHdCQUFnQixHQUczQixFQUFBLENBQUEsQ0FBQTs7TUN0TlksVUFBVSxDQUFBO0FBRW5COzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLHNCQUFzQixDQUFDLElBQXdDLEVBQUUsUUFBa0IsRUFBQTtBQUN0RixRQUFBLE9BQU8sUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzs7Z0JBRXZCLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSzs7QUFFakMsZ0JBQUEsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzs7Z0JBRXBCLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFDO0FBRUQsSUFBQSxPQUFPLGtCQUFrQixDQUFDLElBQVUsRUFBRSxRQUFjLEVBQUE7QUFDaEQsUUFBQSxPQUFPLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7O2dCQUV2QixRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUs7O0FBRWpDLGdCQUFBLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7O2dCQUVwQixRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07O0FBRWxDLGdCQUFBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNOztBQUVwRCxnQkFBQSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzFEO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8sY0FBYyxDQUFDLElBQVUsRUFBRSxXQUFtQixFQUFFLFFBQWtCLEVBQUE7QUFDckUsUUFBQSxNQUFNLGNBQWMsR0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hILFFBQUEsTUFBTSxlQUFlLEdBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hJLFFBQUEsTUFBTSxhQUFhLEdBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxRQUFBLE1BQU0sZ0JBQWdCLEdBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pJLElBQUksVUFBVSxHQUFlLE1BQU0sQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdkQsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixTQUFBO2FBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQy9ELFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDeEIsU0FBQTthQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUM3RCxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFNBQUE7YUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNoRSxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLFNBQUE7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDekI7QUFFRDs7QUFFRztBQUNILElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxJQUFVLEVBQUUsR0FBYSxFQUFFLENBQVMsRUFBQTtBQUM5RCxRQUFBLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLFFBQUEsTUFBTSxNQUFNLEdBQXNELENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzNlLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUMvQixZQUFBLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckUsZ0JBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFHRDs7Ozs7QUFLRTtJQUNGLE9BQU8sYUFBYSxDQUFDLE1BQXVCLEVBQUE7QUFDeEMsUUFBQSxJQUFJLFNBQVMsR0FBYSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQW9CLEVBQUUsQ0FBQztBQUNsQyxRQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxZQUFBLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFNUIsWUFBQSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsZ0JBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxhQUFBO0FBQ0QsWUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RCLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDekIsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFpQixFQUFBO0FBQy9CLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDckIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7QUFDaEQsU0FBQTtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUN4QjtBQUVELElBQUEsT0FBTyxXQUFXLEdBQUE7UUFDZCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hCLFlBQUEsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCxTQUFBO0FBQ0QsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBRUQ7Ozs7OztBQU1HO0FBQ0gsSUFBQSxPQUFPLHNCQUFzQixDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsWUFBb0IsRUFBQTtBQUMzRSxRQUFBLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxLQUFLLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEtBQUssWUFBWSxDQUFDO0tBQzNFO0FBR0QsSUFBQSxPQUFPLGFBQWEsQ0FBSSxHQUFNLEVBQUUsUUFBVyxFQUFBO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDTixZQUFBLE9BQU8sUUFBUSxDQUFDO0FBQ25CLFNBQUE7QUFDRCxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFFRDs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxjQUFjLENBQUksS0FBZSxFQUFFLFdBQXFCLEVBQUE7QUFDM0QsUUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFlBQUEsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQUEsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BCLGdCQUFBLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDeEIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sWUFBWSxDQUFDLEdBQVEsRUFBQTtBQUN4QixRQUFBLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO0FBQ25DLFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDYixTQUFBO0FBQ0QsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFVBQVUsQ0FBQyxJQUFVLEVBQUUsTUFBYyxFQUFBO1FBQ3hDLE9BQU9DLDBCQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBYyxFQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzlDO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFBO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsUUFBQSxJQUFJLEtBQUssQ0FBQztRQUNWLE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0IsWUFBQSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsWUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsWUFBQSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBR0QsT0FBTyxpQkFBaUIsQ0FBQyxJQUFtQixFQUFBO0FBQ3hDLFFBQUEsSUFBSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEQsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ3RCOztJQUdELE9BQU8sTUFBTSxDQUFDLEdBQVcsRUFBQTtRQUNyQixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQztBQUNsQyxRQUFBLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4QjtJQUlELE9BQU8sVUFBVSxDQUFDLEdBQVEsRUFBQTtBQUN0QixRQUFBLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFNBQUE7QUFDRCxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFHRCxPQUFPLGFBQWEsQ0FBQyxDQUFLLEVBQUE7UUFDdEIsSUFBSTtZQUNBLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDWCxTQUFBO0FBQUMsUUFBQSxPQUFPLEdBQUcsRUFBRTs7QUFFVixZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFFSjs7QUMzSk0sTUFBTSxTQUFTLEdBQWtDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEUsSUFBSSxpQkFBaUIsR0FBWSxJQUFJLENBQUM7QUFNdEM7OztBQUdHO0FBQ0csU0FBVSxnQkFBZ0IsQ0FBSSxFQUFXLEVBQUE7SUFDM0MsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUk7UUFDQSxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ2YsS0FBQTtBQUFDLElBQUEsT0FBTyxDQUFDLEVBQUU7QUFDUixRQUFBLE1BQU0sQ0FBQyxDQUFDO0FBQ1gsS0FBQTtBQUFTLFlBQUE7UUFDTixpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDM0IsS0FBQTtBQUNMLENBQUM7QUFHRCxTQUFTLFNBQVMsQ0FBQyxHQUFZLEVBQUE7SUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3BCLFFBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixLQUFBOztBQUVELElBQUEsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQVEsQ0FBQztJQUM3RSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ04sUUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLEtBQUE7QUFDRCxJQUFBLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQWdCLENBQUM7QUFDbEQsSUFBQSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO0FBQ3pDLFFBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixLQUFBO0lBQ0QsT0FBTztRQUNILEdBQUc7QUFDSCxRQUFBLE9BQU8sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDO0tBQzlCLENBQUM7QUFDTixDQUFDO0FBRUssU0FBVSxTQUFTLENBQUMsR0FBWSxFQUFBO0FBQ2xDLElBQUEsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUNyQixPQUFPO0FBQ1YsS0FBQTtBQUNELElBQUEsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDVixPQUFPO0FBQ1YsS0FBQTs7Ozs7QUFLRCxJQUFBLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMxQixRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMxQixLQUFBLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFHSyxTQUFVLFNBQVMsQ0FBQyxHQUFZLEVBQUE7QUFDbEMsSUFBQSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ3JCLE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNWLE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUIsUUFBQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUIsS0FBQSxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBWSxFQUFFLEdBQVksRUFBRSxHQUFhLEVBQUE7SUFDMUQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ2pDLEtBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNQLEtBQUssRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDN0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDMUQsUUFBQSxTQUFTLEVBQUUsT0FBTyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxHQUFHO1FBQ0gsR0FBRztBQUNOLEtBQUEsQ0FBQyxDQUFBO0FBQ04sQ0FBQztTQUVlLFNBQVMsQ0FBQyxHQUFZLEVBQUUsVUFBa0IsRUFBRSxLQUFhLEVBQUE7QUFDckUsSUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNWLE9BQU87QUFDVixLQUFBO0lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUIsUUFBQSxPQUFPLEVBQUU7QUFDTCxZQUFBLEtBQUssRUFBRSxVQUFVO1lBQ2pCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtBQUN2QixTQUFBO0FBQ0QsUUFBQSxPQUFPLEVBQUUsS0FBSztBQUNqQixLQUFBLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFSyxTQUFVLFVBQVUsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUE7QUFDbkYsSUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNWLE9BQU87QUFDVixLQUFBO0lBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUIsUUFBQSxPQUFPLEVBQUU7WUFDTCxLQUFLO1lBQ0wsTUFBTTtBQUNULFNBQUE7UUFDRCxPQUFPO0FBQ1YsS0FBQSxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQ7Ozs7O0FBS0c7QUFDYSxTQUFBLFNBQVMsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFBO0FBQ2pELElBQUEsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDVixPQUFPO0FBQ1YsS0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsSUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNwQixPQUFPO0FBQ1YsS0FBQTtBQUNELElBQUEsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQzFCLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM5QyxLQUFBLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRDs7Ozs7O0FBTUc7QUFDRyxTQUFVLGlCQUFpQixDQUFDLEdBQVksRUFBRSxDQUEyQixFQUFFLFFBQWEsRUFBRSxRQUFhLEVBQUE7QUFDckcsSUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNWLE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUIsUUFBQSxNQUFNLEVBQUU7WUFDSixDQUFDLENBQUMsR0FBRztnQkFDRCxRQUFRO2dCQUNSLFFBQVE7QUFDWCxhQUFBO0FBQ0osU0FBQTtBQUNKLEtBQUEsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO0lBQ3pELE1BQU0sR0FBRyxHQUFpQixFQUFFLENBQUM7QUFDN0IsSUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHO1FBQzVDLFFBQVEsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxRQUFRLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsS0FBQSxDQUFDLENBQUE7QUFDRixJQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUdLLFNBQVUsYUFBYSxDQUFDLEdBQVksRUFBQTtBQUN0QyxJQUFBLE1BQU0sWUFBWSxHQUEyQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELElBQUEsTUFBTSxZQUFZLEdBQTJDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdkUsTUFBTSxNQUFNLEdBQXlCLEVBQUUsQ0FBQztJQUN4QyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLElBQUEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7QUFDckIsUUFBQSxPQUFPLEVBQUUsQ0FBQztBQUNiLEtBQUE7QUFDRCxJQUFBLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFFBQUEsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLFFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7QUFFbkIsUUFBQSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFOztBQUVwQixZQUFBLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QyxTQUFTO0FBQ1osYUFBQTs7QUFFRCxZQUFBLElBQUksWUFBa0QsQ0FBQztZQUN2RCxLQUFLLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ3hDLGdCQUFBLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RCxTQUFTO0FBQ1osYUFBQTtBQUNELFlBQUEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBOEIsQ0FBQyxDQUFBO0FBQ3hELFNBQUE7QUFDRCxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkcsS0FBQTs7QUFFRCxJQUFBLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBU0Q7OztBQUdHO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBb0IsRUFBQTtBQUN6QyxJQUFBLE1BQU0sU0FBUyxHQUEyQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3BELElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsUUFBQSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsUUFBYyxFQUFFLENBQUMsTUFBTTtBQUN2QixRQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0FBRW5CLFFBQUEsSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRTtBQUNwQixZQUFBLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3pCLFNBQUE7QUFFSixLQUFBO0FBQ0QsSUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBU0Q7Ozs7O0FBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxVQUF3QixFQUFFLFVBQXdCLEVBQUE7SUFDdEUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFHO1FBQ2xDLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtBQUNuQixZQUFBLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxTQUFBO0FBQU0sYUFBQTtZQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsU0FBQTtBQUNMLEtBQUMsQ0FBQyxDQUFBO0FBQ047O0FDL1RBO0FBQ0E7QUFJQTs7QUFFRztNQUNtQixZQUFZLENBQUE7SUFDcEIsTUFBTSxHQUFZLEtBQUssQ0FBQztBQUtyQyxDQUFBO01BRXFCLGVBQWUsQ0FBQTtJQUN2QixNQUFNLEdBQVksS0FBSyxDQUFDO0lBQzFCLElBQUksR0FBd0IsRUFBRSxDQUFDO0FBRXZDLElBQUEsSUFBSSxDQUFDLElBQVEsRUFBQTtRQUNULE1BQU0sSUFBSSxHQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQ2pCLFlBQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixTQUFDLENBQUMsQ0FBQTtLQUNMO0FBRVMsSUFBQSxNQUFNLENBQUMsR0FBaUIsRUFBQTtBQUM5QixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZCO0FBRVMsSUFBQSxTQUFTLENBQUMsR0FBaUIsRUFBQTtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsU0FBQTtLQUNKO0lBRUQsV0FBVyxHQUFBO0FBQ1AsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztLQUN0QjtBQUVKLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQU8sY0FBZ0MsU0FBUSxlQUFrQixDQUFBO0FBQ2hELElBQUEsR0FBQSxDQUFBO0FBQWtCLElBQUEsSUFBQSxDQUFBO0lBQXJDLFdBQW1CLENBQUEsR0FBUyxFQUFTLElBQVksRUFBQTtBQUM3QyxRQUFBLEtBQUssRUFBRSxDQUFDO1FBRE8sSUFBRyxDQUFBLEdBQUEsR0FBSCxHQUFHLENBQU07UUFBUyxJQUFJLENBQUEsSUFBQSxHQUFKLElBQUksQ0FBUTtBQUU3QyxRQUFBLE1BQU0sRUFBRSxHQUFrQixDQUFDLENBQUMsS0FBSTtBQUM1QixZQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBTSxDQUFDLENBQUM7QUFDdEIsU0FBQyxDQUFDO0FBQ0YsUUFBQSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2xDO0FBRUQsSUFBQSxTQUFTLENBQUMsUUFBdUIsRUFBQTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBSztBQUMzQyxZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsUUFBQSxPQUFRLEdBQUcsQ0FBQztLQUNmO0FBQ0osQ0FBQTtBQUVLLE1BQU8sZUFBbUIsU0FBUSxZQUFlLENBQUE7QUFDaEMsSUFBQSxRQUFBLENBQUE7QUFBZ0MsSUFBQSxNQUFBLENBQUE7SUFBbkQsV0FBbUIsQ0FBQSxRQUF1QixFQUFTLE1BQWtCLEVBQUE7QUFDakUsUUFBQSxLQUFLLEVBQUUsQ0FBQztRQURPLElBQVEsQ0FBQSxRQUFBLEdBQVIsUUFBUSxDQUFlO1FBQVMsSUFBTSxDQUFBLE1BQUEsR0FBTixNQUFNLENBQVk7S0FFcEU7QUFFRCxJQUFBLE1BQU0sQ0FBQyxJQUFTLEVBQUE7UUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN2QjtJQUVELFdBQVcsR0FBQTtBQUNQLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ2pCO0FBQ0osQ0FBQTtBQUdLLE1BQU8sT0FBVyxTQUFRLGVBQWtCLENBQUE7QUFDOUMsSUFBQSxTQUFTLENBQUMsUUFBdUIsRUFBQTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFLO0FBQy9DLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFDSixDQUFBO0FBRUssTUFBTyxtQkFBb0IsU0FBUSxZQUFZLENBQUE7QUFDOUIsSUFBQSxRQUFBLENBQUE7QUFBa0MsSUFBQSxNQUFBLENBQUE7SUFBckQsV0FBbUIsQ0FBQSxRQUF5QixFQUFTLE1BQWtCLEVBQUE7QUFDbkUsUUFBQSxLQUFLLEVBQUUsQ0FBQztRQURPLElBQVEsQ0FBQSxRQUFBLEdBQVIsUUFBUSxDQUFpQjtRQUFTLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFZO0tBRXRFO0FBRUQsSUFBQSxNQUFNLENBQUMsSUFBUyxFQUFBO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkI7SUFFRCxXQUFXLEdBQUE7QUFDUCxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNqQjtBQUNKLENBQUE7QUFHZSxTQUFBLFNBQVMsQ0FBa0IsR0FBUSxFQUFDLElBQVcsRUFBQTtBQUMzRCxJQUFBLE9BQU8sSUFBSSxjQUFjLENBQUksR0FBRyxFQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDOztNQzVHYSxJQUFJLENBQUE7SUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNOLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQVcsQ0FBQyxDQUFDO0FBQ3hCLENBQUE7QUFnQkQ7O0FBRUc7QUFDU0MsNEJBT1g7QUFQRCxDQUFBLFVBQVksVUFBVSxFQUFBOztBQUVsQixJQUFBLFVBQUEsQ0FBQSxVQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBVSxDQUFBOztBQUVWLElBQUEsVUFBQSxDQUFBLFVBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFRLENBQUE7O0FBRVIsSUFBQSxVQUFBLENBQUEsVUFBQSxDQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLE9BQVMsQ0FBQTtBQUNiLENBQUMsRUFQV0Esa0JBQVUsS0FBVkEsa0JBQVUsR0FPckIsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQWdCRDs7QUFFRztBQUNJLE1BQU0sdUJBQXVCLEdBQTZDLEdBQUc7QUFFOUUsU0FBVSxpQkFBaUIsQ0FBQyxHQUFZLEVBQUUsU0FBcUIsRUFBRSxDQUFlLEVBQUUsVUFBQSxHQUFzQixLQUFLLEVBQUE7QUFDL0csSUFBQSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVksRUFBRSxFQUFxQyxLQUFhO1FBQy9FLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDMUMsWUFBQSxPQUFPLEdBQUcsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO0FBQ3hDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsU0FBQTtBQUNMLEtBQUMsQ0FBQztBQUNGLElBQUEsS0FBSyxNQUFNLEVBQUUsSUFBSSx1QkFBdUIsRUFBRTtRQUN0QyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ3RHLFlBQUEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixTQUFBO0FBQ0osS0FBQTtBQUNMLENBQUM7QUFFRDs7QUFFRztNQUNtQixPQUFPLENBQUE7QUFxRE4sSUFBQSxJQUFBLENBQUE7QUFwRG5CLElBQUEsVUFBVSxHQUFlQSxrQkFBVSxDQUFDLE1BQU0sQ0FBQztBQUMzQyxJQUFBLFlBQVksQ0FBVztBQUNmLElBQUEsU0FBUyxDQUFrQjtBQUMzQixJQUFBLGFBQWEsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMzQyxJQUFBLGNBQWMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNoRCxJQUFBLFNBQVMsR0FBMEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN6RSxZQUFZLEdBQXdCLEVBQUUsQ0FBQztBQUN2QyxJQUFBLGFBQWEsQ0FBdUI7QUFDcEMsSUFBQSxTQUFTLENBQVc7QUFDcEIsSUFBQSxTQUFTLENBQVc7QUFDcEI7O0FBRUc7QUFDSCxJQUFBLFVBQVUsQ0FBVztBQUNyQjs7O0FBR0c7QUFDSCxJQUFBLFlBQVksQ0FBVzs7QUFFdkIsSUFBQSxRQUFRLENBQVc7O0FBRW5CLElBQUEsTUFBTSxDQUFXO0FBQ1QsSUFBQSxPQUFPLENBQXdCO0FBQ3ZDLElBQUEsSUFBSSxNQUFNLEdBQUE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUF3QixDQUFDO0tBQ3hDO0lBRUQsSUFBSSxNQUFNLENBQUMsR0FBa0IsRUFBQTtBQUN6QixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0tBQ3RCO0FBRU8sSUFBQSxNQUFNLENBQUs7QUFDbkIsSUFBQSxJQUFXLEtBQUssR0FBQTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0QjtJQUVELElBQVcsS0FBSyxDQUFDLEtBQVEsRUFBQTtBQUNyQixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUk7WUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQzdDLFNBQUMsQ0FBQyxDQUFBOztLQUVMO0FBRU8sSUFBQSxhQUFhLENBQUMsQ0FBMkIsRUFBRSxRQUFhLEVBQUUsUUFBYSxFQUFBO1FBQzNFQyxpQkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RCxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7S0FDM0I7OztBQUlELElBQUEsV0FBQSxDQUFtQixJQUFZLEVBQUE7UUFBWixJQUFJLENBQUEsSUFBQSxHQUFKLElBQUksQ0FBUTtBQUMzQixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ3ZDLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7QUFDNUIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ3ZDLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7QUFDN0IsU0FBQyxDQUFDLENBQUM7S0FDTjtJQVlELE9BQU8sR0FBQTtBQUNILFFBQUEsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0tBQ3hCO0FBRUQsSUFBQSxRQUFRLENBQXlCLEtBQWlCLEVBQUUsTUFBd0IsRUFBRSxVQUFVLEdBQUcsS0FBSyxFQUFBO0FBQzVGLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFDdEMsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMvRDtBQUVELElBQUEsV0FBVyxDQUFDLE9BQWUsRUFBQTtBQUN2QixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBQ3RDLFNBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEM7QUFFRCxJQUFBLGlCQUFpQixDQUFDLFNBQXFCLEVBQUE7QUFDbkMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNqQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUN0QyxTQUFBO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2hEO0FBRUQsSUFBQSxXQUFXLENBQUMsS0FBaUIsRUFBRSxHQUFpQixFQUFFLFdBQVcsR0FBRyxLQUFLLEVBQUE7QUFDakUsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNqQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUN0QyxTQUFBOztRQUVELGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxRQUFBLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsWUFBWSxHQUFBO0FBQ1IsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDaEM7QUFFRCxJQUFBLFVBQVUsTUFBUztJQUduQixRQUFRLEdBQUE7UUFDSixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLFNBQUE7S0FDSjtBQUVELElBQUEsSUFBSSxjQUFjLEdBQUE7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDN0I7QUFFRCxJQUFBLElBQUksZUFBZSxHQUFBO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0tBQzlCO0lBRUQsV0FBVyxHQUFBO0FBQ1AsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzdCO0FBSUQsSUFBQSxXQUFXLENBQUMsT0FBZ0IsRUFBQTtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxRQUFBLElBQUksSUFBSSxFQUFFO0FBQ04sWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBRztnQkFDZixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDckIsYUFBQyxDQUFDLENBQUM7QUFDSCxZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFNBQUE7S0FDSjtBQUVELElBQUEsWUFBWSxDQUFDLE9BQWdCLEVBQUUsR0FBRyxHQUF3QixFQUFBO1FBQ3RELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNyQjtBQUVEOztBQUVHO0lBQ0gsTUFBTSxHQUFBO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2IsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxTQUFBO0tBQ0o7QUFDSixDQUFBO0FBR0Q7O0FBRUc7QUFDRyxNQUFnQixXQUFvQyxTQUFRLE9BQVUsQ0FBQTtJQUN4RSxVQUFVLEdBQWUsTUFBTSxDQUFDO0lBRWhDLGNBQWMsR0FBQTtBQUNWLFFBQUEsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUVELE9BQU8sR0FBQTtRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNuQjtBQUVELElBQUEsYUFBYSxDQUFDLElBQWEsRUFBQTtBQUN2QixRQUFBLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7QUFFRCxJQUFBLFdBQVcsQ0FBQyxVQUF5QixFQUFBO0FBQ2pDLFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLRCxrQkFBVSxDQUFDLElBQUksRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEIsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBS0Esa0JBQVUsQ0FBQyxLQUFLLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNsRSxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLQSxrQkFBVSxDQUFDLE1BQU0sRUFBRTtZQUN2QyxPQUFPO0FBQ1YsU0FBQTtRQUNELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtBQUMxQixZQUFBLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBS0Esa0JBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDckMsZ0JBQUEsSUFBSSxDQUFDLFVBQVUsR0FBR0Esa0JBQVUsQ0FBQyxLQUFLLENBQUM7QUFDdEMsYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHQSxrQkFBVSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzlCO0FBQ0osQ0FBQTtBQUdEOztBQUVHO0FBQ0csTUFBZ0IsYUFBc0MsU0FBUSxPQUFVLENBQUE7SUFDbEUsT0FBTyxHQUFtQixFQUFFLENBQUM7QUFFckMsSUFBQSxXQUFBLENBQVksSUFBWSxFQUFBO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNmO0FBRUQsSUFBQSxRQUFRLENBQUMsS0FBYyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQTtBQUMvQixRQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDeEIsWUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ3hDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3hDLFNBQUE7QUFDRCxRQUFBLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2QsWUFBQSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QixTQUFBO0FBQ0QsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLFFBQUFFLFNBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDbkQsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxTQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxLQUFJO0FBQ3pELFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNoQyxTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5QyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUI7QUFFRCxJQUFBLFdBQVcsQ0FBQyxLQUFjLEVBQUE7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ1gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7QUFDRCxRQUFBQyxTQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakM7QUFFRCxJQUFBLGtCQUFrQixDQUFDLEtBQWEsRUFBQTtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7S0FDSjtBQUVELElBQUEsWUFBWSxDQUFDLEtBQWMsRUFBQTtBQUN2QixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO0FBQ2pCLFlBQUEsS0FBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDOUIsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1QjtJQUVELFVBQVUsR0FBQTtRQUNOLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsWUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsU0FBQTtLQUNKO0lBRUQsT0FBTyxHQUFBO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsWUFBQSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hCLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixTQUFBO0tBQ0o7QUFFRCxJQUFBLElBQUksTUFBTSxHQUFBO0FBQ04sUUFBQSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQzlCO0FBRUQsSUFBQSxJQUFJLENBQUMsU0FBb0QsRUFBQTtRQUNyRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZDO0FBRUQsSUFBQSxRQUFRLENBQThCLEtBQWEsRUFBQTtBQUMvQyxRQUFBLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQU0sQ0FBQztLQUNuQztBQUVELElBQUEsYUFBYSxDQUFDLEtBQWMsRUFBQTtRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RDO0lBRUQsY0FBYyxHQUFBOztRQUVWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFJO1lBQ3RDLElBQUksSUFBSSxZQUFZLGFBQWEsRUFBRTtnQkFDL0IsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMzQyxhQUFBO2lCQUFNLElBQUksSUFBSSxZQUFZLFdBQVcsRUFBRTtBQUNwQyxnQkFBQSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkMsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsT0FBTyxDQUFDLENBQUE7QUFDWCxhQUFBO1NBQ0osRUFBRSxDQUFDLENBQUMsQ0FBQTtLQUNSO0FBRUQsSUFBQSxhQUFhLENBQUMsSUFBYSxFQUFBO0FBQ3ZCLFFBQUEsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFJO1lBQzFDLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNUO0FBR0QsSUFBQSxVQUFVLENBQUMsU0FBb0QsRUFBQTtRQUMzRCxNQUFNLEtBQUssR0FBbUIsRUFBRSxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixZQUFBLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNwQixnQkFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLGFBQUE7WUFDRCxJQUFJLElBQUksWUFBWSxhQUFhLEVBQUU7Z0JBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxRQUFRLENBQUMsU0FBb0QsRUFBQTtBQUN6RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDcEIsZ0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixhQUFBO1lBQ0QsSUFBSSxJQUFJLFlBQVksYUFBYSxFQUFFO2dCQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RDLGdCQUFBLElBQUksSUFBSSxFQUFFO0FBQ04sb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQsSUFBQSxXQUFXLENBQUMsVUFBeUIsRUFBQTtRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUtILGtCQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDbEUsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBS0Esa0JBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDdkMsT0FBTztBQUNWLFNBQUE7UUFDRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDMUIsWUFBQSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUtBLGtCQUFVLENBQUMsSUFBSSxFQUFFO0FBQ3JDLGdCQUFBLElBQUksQ0FBQyxVQUFVLEdBQUdBLGtCQUFVLENBQUMsS0FBSyxDQUFDO0FBQ3RDLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsSUFBSSxDQUFDLFVBQVUsR0FBR0Esa0JBQVUsQ0FBQyxNQUFNLENBQUM7QUFDcEMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDM0MsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDOUI7QUFDSixDQUFBO0FBSUQ7O0FBRUc7QUFDRyxNQUFnQixrQkFBMkMsU0FBUSxhQUFnQixDQUFBO0FBQ3hGLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQWdCLG1CQUE0QyxTQUFRLGFBQWdCLENBQUE7QUFDekYsQ0FBQTtBQUVEOztBQUVHO0FBQ0csTUFBZ0IscUJBQThDLFNBQVEsYUFBZ0IsQ0FBQTtBQUN4RixJQUFBLFdBQVcsQ0FBVztBQUN6QixDQUFBO01BUXFCLGNBQWMsQ0FBQTtBQUNoQyxJQUFBLE9BQU8sQ0FBZTtJQU10QixhQUFhLENBQUMsR0FBWSxFQUFFLFFBQXdCLEVBQUE7UUFDaEQsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFO0FBQzlCLFlBQUEsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2xELFNBQUE7S0FDSjtBQUNKLENBQUE7QUFVRDs7QUFFRztBQUNTSSwwQkFpQlg7QUFqQkQsQ0FBQSxVQUFZLFFBQVEsRUFBQTtBQUNoQjs7QUFFRztBQUNILElBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFRLENBQUE7QUFDUjs7QUFFRztBQUNILElBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxRQUFVLENBQUE7QUFDVjs7QUFFRztBQUNILElBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFRLENBQUE7QUFDUjs7QUFFRztBQUNILElBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxVQUFZLENBQUE7QUFDaEIsQ0FBQyxFQWpCV0EsZ0JBQVEsS0FBUkEsZ0JBQVEsR0FpQm5CLEVBQUEsQ0FBQSxDQUFBLENBQUE7QUFFRDs7QUFFRztBQUNTQyx5QkFjWDtBQWRELENBQUEsVUFBWSxPQUFPLEVBQUE7QUFDZixJQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBVSxDQUFBO0FBQ1Y7O0FBRUc7QUFDSCxJQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBUSxDQUFBO0FBQ1I7O0FBRUc7QUFDSCxJQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBWSxDQUFBO0FBQ1o7O0FBRUc7QUFDSCxJQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBUSxDQUFBO0FBQ1osQ0FBQyxFQWRXQSxlQUFPLEtBQVBBLGVBQU8sR0FjbEIsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQUVXQyw2QkFJWDtBQUpELENBQUEsVUFBWSxXQUFXLEVBQUE7QUFDbkIsSUFBQSxXQUFBLENBQUEsV0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUksQ0FBQTtBQUNKLElBQUEsV0FBQSxDQUFBLFdBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFJLENBQUE7QUFDSixJQUFBLFdBQUEsQ0FBQSxXQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBSyxDQUFBO0FBQ1QsQ0FBQyxFQUpXQSxtQkFBVyxLQUFYQSxtQkFBVyxHQUl0QixFQUFBLENBQUEsQ0FBQSxDQUFBO01BT1ksV0FBVyxDQUFBO0lBQ1osTUFBTSxHQUFXLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBZSxVQUFVLENBQUM7QUFFaEMsSUFBQSxXQUFBLENBQVksS0FBYSxFQUFFLE1BQWMsRUFBRSxTQUFxQixVQUFVLEVBQUE7QUFDdEUsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7S0FDeEI7QUFFRCxJQUFBLElBQUksS0FBSyxHQUFBO0FBQ0wsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN2QixTQUFBO0FBQU0sYUFBQTtZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN0QixTQUFBO0tBQ0o7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFhLEVBQUE7QUFDbkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztLQUN2QjtBQUVELElBQUEsSUFBSSxNQUFNLEdBQUE7QUFDTixRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3RCLFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZCLFNBQUE7S0FFSjtJQUVELElBQUksTUFBTSxDQUFDLEtBQWEsRUFBQTtBQUNwQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3hCO0FBQ0osQ0FBQTtNQUtZLFdBQVcsQ0FBQTtBQUNwQixJQUFBLGFBQWEsQ0FBVTtBQUN2QixJQUFBLFNBQVMsQ0FBVTtJQUNuQixpQkFBaUIsR0FBRyxZQUFZLENBQUM7SUFDakMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0lBQ2pDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0lBQ3RDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQzVCLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ2hELG9CQUFvQixHQUFHLHNCQUFzQixDQUFDO0lBQzlDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQztJQUN4QyxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQztJQUM3QyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7SUFDbkMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQ3JDLGNBQWMsR0FBRyxlQUFlLENBQUM7O0lBRWpDLGFBQWEsR0FBRyxTQUFTLENBQUM7O0lBRTFCLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDdkIsSUFBQSxZQUFZLENBQVc7QUFDdkIsSUFBQSxZQUFZLENBQVc7QUFDdkIsSUFBQSxZQUFZLENBQVc7QUFDdkIsSUFBQSxXQUFXLENBQVc7QUFDdEIsSUFBQSxhQUFhLENBQVc7QUFDeEIsSUFBQSxhQUFhLENBQVc7SUFDeEIsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQVksS0FBSyxDQUFDO0FBQ3pCLElBQUEsU0FBUyxDQUFXO0lBQ3BCLFlBQVksR0FBeUIsV0FBVyxDQUFDO0lBQ2pELFlBQVksR0FBWSxLQUFLLENBQUM7O0lBRTlCLGFBQWEsR0FBWSxJQUFJLENBQUM7O0lBRTlCLGtCQUFrQixHQUFZLEtBQUssQ0FBQzs7SUFFcEMscUJBQXFCLEdBQVcsR0FBRyxDQUFDOztJQUU1QixhQUFhLEdBQVksS0FBSyxDQUFDO0FBQ3ZDLElBQUEsSUFBSSxZQUFZLEdBQUE7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDN0I7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFjLEVBQUE7QUFDM0IsUUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1lBQzdCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9COztJQUdELGVBQWUsR0FBVyxDQUFDLENBQUM7SUFDNUIsTUFBTSxHQUFlLE1BQU0sQ0FBQzs7SUFFNUIsVUFBVSxHQUFHLENBQUMsQ0FBQzs7SUFFZixlQUFlLEdBQWdCLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFckQsSUFBQSxZQUFZLENBR1Y7SUFDRixhQUFhLEdBQVcscUJBQXFCLENBQUM7SUFDOUMsYUFBYSxHQUFXLENBQUMsQ0FBQzs7SUFFMUIsY0FBYyxHQUFtQixZQUFZLENBQUM7O0FBRzlDLElBQUEsSUFBSSxZQUFZLEdBQUE7UUFDWixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUM5RCxTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0tBQ3JDO0FBRUQ7OztBQUdHO0FBQ0gsSUFBQSxJQUFJLFlBQVksR0FBQTtBQUNaLFFBQUEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDdkIsWUFBQSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUMxQyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjs7SUFHRCxRQUFRLEdBQVcsQ0FBQyxDQUFDOztJQUViLGlCQUFpQixHQUFZLEtBQUssQ0FBQztBQUMzQyxJQUFBLElBQVcsZ0JBQWdCLEdBQUE7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7S0FDakM7SUFFRCxJQUFXLGdCQUFnQixDQUFDLEtBQWMsRUFBQTtBQUN0QyxRQUFBLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNsQyxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDeEI7O0lBR0QsaUJBQWlCLEdBQVcsR0FBRyxDQUFDOztJQUV4QixNQUFNLEdBQVcsQ0FBQyxDQUFDO0FBQzNCLElBQUEsSUFBSSxLQUFLLEdBQUE7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDdEI7SUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFXLEVBQUE7QUFDakIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztLQUNyQjtBQUVELElBQUEsT0FBTyxHQUFZRCxlQUFPLENBQUMsTUFBTSxDQUFDOztJQUUxQixpQkFBaUIsR0FBWSxJQUFJLENBQUM7QUFDMUMsSUFBQSxJQUFXLGdCQUFnQixHQUFBO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0tBQ2pDO0lBRUQsSUFBVyxnQkFBZ0IsQ0FBQyxLQUFjLEVBQUE7QUFDdEMsUUFBQSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7WUFDbEMsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMvQjs7SUFHRCxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLFFBQVEsR0FBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDOztJQUV6QyxpQkFBaUIsR0FBVyxFQUFFLENBQUM7QUFDL0IsSUFBQSxRQUFRLEdBQWdDLElBQUksT0FBTyxFQUFFLENBQUM7QUFFdEQsSUFBQSxXQUFBLEdBQUE7S0FDQztBQUNKLENBQUE7TUFHWSxXQUFXLENBQUE7QUFFRCxJQUFBLEdBQUEsQ0FBQTtBQUF3QixJQUFBLE1BQUEsQ0FBQTtBQUEyQixJQUFBLElBQUEsQ0FBQTtBQUF5QixJQUFBLEtBQUEsQ0FBQTtJQUEvRixXQUFtQixDQUFBLEdBQUEsR0FBYyxDQUFDLEVBQVMsTUFBaUIsR0FBQSxDQUFDLEVBQVMsSUFBZSxHQUFBLENBQUMsRUFBUyxLQUFBLEdBQWdCLENBQUMsRUFBQTtRQUE3RixJQUFHLENBQUEsR0FBQSxHQUFILEdBQUcsQ0FBWTtRQUFTLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFZO1FBQVMsSUFBSSxDQUFBLElBQUEsR0FBSixJQUFJLENBQVk7UUFBUyxJQUFLLENBQUEsS0FBQSxHQUFMLEtBQUssQ0FBWTtLQUMvRztJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRixRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sWUFBYSxTQUFRLFdBQVcsQ0FBQTtBQUM1QyxDQUFBO01BRVksV0FBVyxDQUFBO0FBQ0QsSUFBQSxLQUFBLENBQUE7QUFBMEIsSUFBQSxLQUFBLENBQUE7QUFBc0MsSUFBQSxLQUFBLENBQUE7QUFBbkYsSUFBQSxXQUFBLENBQW1CLFFBQWdCLENBQUMsRUFBUyxRQUFnQixhQUFhLEVBQVMsUUFBZ0IsT0FBTyxFQUFBO1FBQXZGLElBQUssQ0FBQSxLQUFBLEdBQUwsS0FBSyxDQUFZO1FBQVMsSUFBSyxDQUFBLEtBQUEsR0FBTCxLQUFLLENBQXdCO1FBQVMsSUFBSyxDQUFBLEtBQUEsR0FBTCxLQUFLLENBQWtCO0tBQ3pHO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDOUQ7QUFDSixDQUFBO01BRXFCLFFBQVEsQ0FBQTtBQUU3QixDQUFBO0FBV0ssTUFBZ0Isc0JBQXVCLFNBQVEsZ0JBQWdCLENBQUE7QUFDcEUsQ0FBQTtBQXNCSyxTQUFVLFFBQVEsQ0FBQyxFQUFXLEVBQUE7SUFDaEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLElBQUEsT0FBTyxNQUFLO0FBQ1IsUUFBQSxJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU87QUFDVixTQUFBO1FBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNiLFFBQUEsRUFBRSxFQUFFLENBQUM7QUFDVCxLQUFDLENBQUM7QUFDTjs7TUNqeUJzQixzQkFBc0IsQ0FBQTtBQU9oQyxJQUFBLGtCQUFrQixDQUF1QjtJQUVqRCxXQUFXLENBQUksWUFBb0IsRUFBRSxLQUFRLEVBQUE7QUFDekMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO0FBQzFCLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ2pEO0FBRUQsSUFBQSxjQUFjLENBQUMsWUFBb0IsRUFBQTtBQUMvQixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO0FBRUQsSUFBQSxXQUFXLENBQUksWUFBb0IsRUFBQTtBQUMvQixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7QUFDMUIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBTSxDQUFDO0tBQ3JEO0FBRUQsSUFBQSxxQkFBcUIsQ0FBQyxJQUE0QixFQUFBO0FBQzlDLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFHO0FBQy9DLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLFNBQUMsQ0FBQyxDQUFDO0tBQ047QUFDSixDQUFBO0FBRUssTUFBTyxTQUFVLFNBQVEsc0JBQXNCLENBQUE7QUFDakQsSUFBQSxXQUFBLEdBQUE7QUFDSSxRQUFBLEtBQUssRUFBRSxDQUFDO0tBQ1g7QUFFRCxJQUFBLEtBQUssQ0FBVTtBQUNmLElBQUEsUUFBUSxDQUFVO0FBQ2xCLElBQUEsUUFBUSxDQUFVO0lBQ2xCLFVBQVUsR0FBc0IsUUFBUSxDQUFDO0lBQ3pDLFNBQVMsR0FBd0IsUUFBUSxDQUFDOztJQUUxQyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsV0FBVyxHQUFZLEtBQUssQ0FBQztBQUM3QixJQUFBLFVBQVUsQ0FBVTtBQUNwQixJQUFBLFdBQVcsQ0FBVTtBQUVyQjs7QUFFRztBQUNILElBQUEsU0FBUyxDQUFpQjtBQUUxQjs7QUFFRztBQUNILElBQUEsTUFBTSxDQUFXO0lBRWpCLFVBQVUsR0FBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7S0FDM0I7QUFFRCxJQUFBLEtBQUssQ0FBQyxNQUF3QixFQUFBO0FBQzFCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7QUFDeEMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsYUFBYSxDQUFDLE1BQWlCLEVBQUUsTUFBaUIsRUFBQTtBQUM5QyxRQUFBLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN0QyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN4QyxRQUFBLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN0QyxRQUFBLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN4QyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNqQztBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxZQUFZLEVBQUU7QUFDdkQsWUFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLGVBQWUsRUFBRTtBQUNoRSxZQUFBLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3JDLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsZUFBZSxFQUFFO0FBQy9DLFlBQUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDckMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtBQUNqRCxZQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsWUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2QyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2YsWUFBQSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNyQyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2xCLFlBQUEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDM0MsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQixZQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbEIsWUFBQSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMzQyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQy9DLFlBQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDdkMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDYixZQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRU8sSUFBQSxXQUFXLENBQWlCO0lBRXBDLE9BQU8sR0FBQTtRQUNILElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDM0IsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQy9DLGdCQUFBLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxhQUFBO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ2pELGdCQUFBLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUNwQyxhQUFBOztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQzVFLE9BQU8sSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRCxZQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMzQixTQUFBO0tBQ0o7QUFFRCxJQUFBLE1BQU0sQ0FBQyxLQUFnQixFQUFBO0FBQ25CLFFBQUEsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxVQUFVO0FBQ3BDLGVBQUEsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSztBQUMxQixlQUFBLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVE7QUFDaEMsZUFBQSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRO0FBQ2hDLGVBQUEsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsVUFBVTtBQUNwQyxlQUFBLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLFdBQVc7QUFDdEMsZUFBQSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO0FBQ2xDLGVBQUEsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUTtBQUNoQyxlQUFBLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLFdBQVc7QUFDdEMsZUFBQSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO0FBQ2xDLGVBQUEsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsU0FBUztBQUNsQyxlQUFBLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUN2QztBQUNKLENBQUE7QUFFSyxNQUFPLGNBQWUsU0FBUSxzQkFBc0IsQ0FBQTs7O0lBR3RELE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUNqQixTQUFTLEdBQWMsTUFBTSxDQUFDO0lBQzlCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLEtBQUssQ0FBQyxPQUE4QixJQUFJLEVBQUE7QUFDcEMsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUMzQyxRQUFBLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQixRQUFBLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7OztBQUlqQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxXQUF3QixFQUFBO1FBQ3RDLE1BQU0sS0FBSyxHQUFpQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2IsWUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNqQyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2QsWUFBQSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNuQyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO0FBQzVDLFlBQUEsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDekMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtBQUM3QyxZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN4QixZQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsWUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLGFBQWMsU0FBUSxzQkFBc0IsQ0FBQTtBQUNyRCxJQUFBLEtBQUssQ0FBVTtBQUNmLElBQUEsTUFBTSxDQUFVO0FBQ2hCLElBQUEsT0FBTyxDQUFnQjtJQUN2QixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxHQUFlLFVBQVUsQ0FBQTtBQUMvQixJQUFBLFlBQVksQ0FBVTtBQUN0QixJQUFBLGNBQWMsQ0FBVTtBQUN4QixJQUFBLFVBQVUsQ0FBVTtBQUNwQixJQUFBLE9BQU8sQ0FBVTtBQUVqQixJQUFBLEtBQUssQ0FBQyxJQUFtQixFQUFBO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7QUFDMUMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLFFBQUEsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdCLFFBQUEsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLFFBQUEsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQzNDLFFBQUEsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxpQkFBaUIsR0FBQTtBQUNiLFFBQUEsTUFBTSxLQUFLLEdBQWdDO1lBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDbEMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNkLFlBQUEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDbkMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUMzQyxZQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sYUFBYyxTQUFRLHNCQUFzQixDQUFBO0FBQ3JELElBQUEsSUFBSSxDQUFVO0FBQ2QsSUFBQSxTQUFTLENBQVc7O0FBRXBCLElBQUEsU0FBUyxDQUFpQjtBQUUxQixJQUFBLEtBQUssQ0FBQyxJQUFtQixFQUFBO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7QUFDMUMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUM1QixDQUFBO0tBQ0o7QUFDSixDQUFBO0FBRUssTUFBTyxhQUFjLFNBQVEsc0JBQXNCLENBQUE7QUFFckQsSUFBQSxJQUFJLENBQVU7QUFDZCxJQUFBLFNBQVMsQ0FBVztBQUVwQixJQUFBLEtBQUssQ0FBQyxJQUFtQixFQUFBO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7QUFDMUMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzNCLENBQUM7S0FDTDtBQUNKLENBQUE7QUFFSyxNQUFPLGFBQWMsU0FBUSxzQkFBc0IsQ0FBQTtBQUNyRCxJQUFBLFNBQVMsQ0FBVTtBQUNuQixJQUFBLFNBQVMsQ0FBVztBQUVwQixJQUFBLEtBQUssQ0FBQyxJQUFtQixFQUFBO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7QUFDMUMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxNQUFNLEtBQUssR0FBZ0MsRUFBRSxDQUFDO0FBQzlDLFFBQUEsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNwQixZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFlBQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDdkMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0osQ0FBQTtBQUlLLE1BQU8sVUFBVyxTQUFRLHNCQUFzQixDQUFBO0FBQ2xELElBQUEsRUFBRSxDQUFVOztBQUVaLElBQUEsS0FBSyxDQUFtQjtBQUN4QixJQUFBLElBQUksQ0FBMEI7QUFDOUIsSUFBQSxTQUFTLENBQWtCO0lBQzNCLE1BQU0sR0FBbUIsS0FBSyxDQUFDO0FBQy9CLElBQUEsYUFBYSxDQUFXO0FBRXhCLElBQUEsS0FBSyxDQUFDLElBQWdCLEVBQUE7QUFDbEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUN2QyxRQUFBLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuQixRQUFBLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxPQUFPO1lBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDdEIsQ0FBQztLQUNMO0FBQ0osQ0FBQTtBQU9LLE1BQU8sY0FBZSxTQUFRLHNCQUFzQixDQUFBO0FBRXRELElBQUEsTUFBTSxDQUFxQjtBQUMzQixJQUFBLE1BQU0sQ0FBcUI7QUFDM0IsSUFBQSxNQUFNLENBQXdCO0FBQzlCLElBQUEsZUFBZSxDQUFpQjtBQUVoQzs7QUFFRztBQUNILElBQUEsUUFBUSxDQUF5QjtBQUVqQyxJQUFBLEtBQUssQ0FBQyxJQUFvQixFQUFBO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7QUFDM0MsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDN0MsUUFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDL0IsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsT0FBb0IsRUFBQTtRQUNsQyxNQUFNLEtBQUssR0FBaUMsRUFBRSxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNiLFlBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNiLFlBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtBQUN0QyxZQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDdEIsWUFBQSxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQ25ELFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZixZQUFBLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3JDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sWUFBYSxTQUFRLHNCQUFzQixDQUFBO0FBQ3BELElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLE1BQU0sQ0FBVTtBQUNoQixJQUFBLEdBQUcsQ0FBVTtBQUNiLElBQUEsTUFBTSxDQUFrQjtBQUV4QixJQUFBLEtBQUssQ0FBQyxJQUFrQixFQUFBO0FBQ3BCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7QUFDekMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDckIsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtBQUN0QyxRQUFBLE1BQU0sS0FBSyxHQUErQjtZQUN0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1osWUFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvQixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLGlCQUFrQixTQUFRLHNCQUFzQixDQUFBO0FBQ3pELElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsSUFBSSxDQUFVO0FBRWQsSUFBQSxLQUFLLENBQUMsSUFBdUIsRUFBQTtBQUN6QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFDOUMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0IsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3hCLENBQUM7S0FDTDtBQUNKLENBQUE7QUFLSyxNQUFPLGdCQUFpQixTQUFRLHNCQUFzQixDQUFBO0FBQ3hELElBQUEsRUFBRSxDQUFVO0FBQ1osSUFBQSxJQUFJLENBQVU7QUFDZCxJQUFBLFNBQVMsQ0FBVTtBQUNuQixJQUFBLE9BQU8sQ0FBVTtBQUNqQixJQUFBLFFBQVEsQ0FBVztBQUNuQixJQUFBLFNBQVMsQ0FBVztBQUNwQixJQUFBLFlBQVksQ0FBVztBQUN2QixJQUFBLFFBQVEsQ0FBVztBQUNuQixJQUFBLFVBQVUsQ0FBVztBQUNyQixJQUFBLFNBQVMsQ0FBVTtBQUNuQixJQUFBLElBQUksQ0FBZ0I7QUFDcEIsSUFBQSxTQUFTLENBQVc7QUFFcEIsSUFBQSxjQUFjLENBQUMsU0FBMkIsRUFBQTtBQUN0QyxRQUFBLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3RDO0lBRU8sWUFBWSxDQUFDLE1BQXdCLEVBQUUsTUFBd0IsRUFBQTtBQUNuRSxRQUFBLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN0QixRQUFBLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUMxQixRQUFBLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN0QyxRQUFBLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztBQUMxQyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUMxQixRQUFBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztLQUN2QztBQUVELElBQUEsV0FBVyxDQUFDLEtBQXVCLEVBQUE7QUFDL0IsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNsQztJQUVELFlBQVksQ0FBQyxLQUFxQyxFQUFFLE9BQW9CLEVBQUE7QUFDcEUsUUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0QixRQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCLFFBQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEMsUUFBQSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDZCxZQUFBLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZixZQUFBLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3JDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsWUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2QyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ25CLFlBQUEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDN0MsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsWUFBQSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNyQyxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pCLFlBQUEsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDekMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsWUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtBQUN0QyxRQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7S0FDekI7QUFDSixDQUFBO0FBRUssTUFBTyxvQkFBcUIsU0FBUSxnQkFBZ0IsQ0FBQTtBQUN0RCxJQUFBLFdBQUEsR0FBQTtBQUNJLFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ3ZCO0FBRUQsSUFBQSxjQUFjLENBQWE7QUFDM0IsSUFBQSxRQUFRLENBQVU7QUFDbEIsSUFBQSxhQUFhLENBQWE7SUFDMUIsUUFBUSxHQUFzRSxNQUFNLENBQUM7SUFFckYsS0FBSyxDQUFDLE9BQW9DLElBQUksRUFBQTtBQUMxQyxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDakQsUUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsUUFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxPQUFvQixFQUFBO0FBQ2xDLFFBQUEsTUFBTSxLQUFLLEdBQXVDO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztZQUM5RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1NBQy9ELENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDM0MsWUFBQSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNyQyxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsWUFBWSxDQUFDLEtBQXlDLEVBQUUsT0FBb0IsRUFBQTtBQUN4RSxRQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RSxRQUFBLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLFFBQUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbEMsUUFBQSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNsQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxXQUFXLENBQUMsS0FBMkIsRUFBQTtBQUNuQyxRQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDM0MsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7S0FDbEM7QUFDSixDQUFBO0FBT0ssTUFBTyxnQkFBaUIsU0FBUSxvQkFBb0IsQ0FBQTtBQUN0RCxJQUFBLFdBQUEsR0FBQTtBQUNJLFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0tBQzNCO0lBRUQsT0FBTyxHQUE2QixFQUFFLENBQUM7QUFDdkMsSUFBQSxhQUFhLENBQStCO0FBQzVDOztBQUVHO0FBQ0gsSUFBQSxXQUFXLENBQVc7QUFFdEIsSUFBQSxLQUFLLENBQUMsSUFBNkIsRUFBQTtBQUMvQixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDN0MsUUFBQSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFBLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN6QyxRQUFBLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNyQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxPQUFvQixFQUFBO0FBQ2xDLFFBQUEsTUFBTSxLQUFLLEdBQW1DO0FBQzFDLFlBQUEsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDcEMsQ0FBQztBQUNGLFFBQUEsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsV0FBVyxDQUFDLEtBQXVCLEVBQUE7QUFDL0IsUUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0tBQzVDO0FBQ0osQ0FBQTtBQUVLLE1BQU8sZ0JBQWlCLFNBQVEsc0JBQXNCLENBQUE7QUFDeEQsSUFBQSxFQUFFLENBQVU7QUFDWixJQUFBLFFBQVEsQ0FBVTtBQUNsQixJQUFBLFVBQVUsQ0FBVTtBQUNwQixJQUFBLFVBQVUsQ0FBUTtBQUVsQixJQUFBLEtBQUssQ0FBQyxJQUFzQixFQUFBO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUM3QyxRQUFBLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuQixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxXQUF3QixFQUFBO1FBQ3RDLE9BQU87WUFDSCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDO0tBQ0w7QUFDSixDQUFBO0FBRUssTUFBTyxTQUFVLFNBQVEsc0JBQXNCLENBQUE7QUFDakQsSUFBQSxFQUFFLENBQVU7QUFDWixJQUFBLFFBQVEsQ0FBbUI7QUFFM0IsSUFBQSxLQUFLLENBQUMsSUFBZSxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7QUFDdEMsUUFBQSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkIsUUFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDL0IsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsV0FBd0IsRUFBQTtRQUN0QyxPQUFPO1lBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUM7S0FDTDtBQUNKLENBQUE7QUFHSyxNQUFPLGlCQUFrQixTQUFRLGdCQUFnQixDQUFBO0FBQ25ELElBQUEsV0FBQSxHQUFBO0FBQ0ksUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7S0FDeEI7QUFFRCxJQUFBLElBQUksQ0FBVTtBQUNkLElBQUEsT0FBTyxDQUFXO0lBQ2xCLFlBQVksR0FBVyxFQUFFLENBQUM7QUFDMUIsSUFBQSxTQUFTLENBQVU7SUFDbkIsV0FBVyxHQUFZLEtBQUssQ0FBQztBQUU3QixJQUFBLEtBQUssQ0FBQyxJQUE4QixFQUFBO0FBQ2hDLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUM5QyxRQUFBLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsUUFBQSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0IsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDckMsUUFBQSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDdkMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsaUJBQWlCLENBQUMsT0FBb0IsRUFBQTtBQUNsQyxRQUFBLE1BQU0sS0FBSyxHQUFvQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDbEMsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsV0FBVyxDQUFDLEtBQXdCLEVBQUE7QUFDaEMsUUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0tBQzFDO0FBQ0osQ0FBQTtBQUdLLE1BQU8saUJBQWtCLFNBQVEsZ0JBQWdCLENBQUE7QUFDbkQsSUFBQSxXQUFBLEdBQUE7QUFDSSxRQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1IsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUN0QjtBQUVELElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxNQUFNLENBQVU7QUFDaEIsSUFBQSxHQUFHLENBQVU7QUFDYixJQUFBLE1BQU0sQ0FBa0I7QUFFeEIsSUFBQSxLQUFLLENBQUMsSUFBOEIsRUFBQTtBQUNoQyxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFDOUMsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLFFBQUEsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLFFBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLGlCQUFpQixDQUFDLE9BQW9CLEVBQUE7QUFDbEMsUUFBQSxNQUFNLEtBQUssR0FBb0M7WUFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDdEIsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsV0FBVyxDQUFDLEtBQXdCLEVBQUE7QUFDaEMsUUFBQSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQzlCO0FBRUosQ0FBQTtBQUVLLE1BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CLENBQUE7QUFDdEQsSUFBQSxXQUFBLEdBQUE7QUFDSSxRQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1IsUUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUN2QjtBQUVELElBQUEsUUFBUSxDQUFRO0FBQ2hCLElBQUEsUUFBUSxDQUFRO0FBQ2hCLElBQUEsTUFBTSxDQUFVO0FBRWhCLElBQUEsS0FBSyxDQUFDLElBQTZCLEVBQUE7QUFDL0IsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzdDLFFBQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQixRQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUMvQixRQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUMvQixRQUFBLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxPQUFvQixFQUFBO0FBQ2xDLFFBQUEsTUFBTSxLQUFLLEdBQW1DO1lBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUM7QUFDRixRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLFdBQVcsQ0FBQyxLQUF1QixFQUFBO0FBQy9CLFFBQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUM5QjtBQUNKLENBQUE7TUFFWSxpQkFBaUIsQ0FBQTtJQUMxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUN2QixRQUFRLEdBQW9ELFFBQVEsQ0FBQztBQUN4RSxDQUFBO0FBRUssTUFBTyxjQUFlLFNBQVEsZ0JBQWdCLENBQUE7O0FBRWhELElBQUEsR0FBRyxDQUFVOztBQUViLElBQUEsSUFBSSxDQUFVOztBQUVkLElBQUEsTUFBTSxDQUFVOztBQUVoQixJQUFBLFFBQVEsQ0FBVTs7QUFFbEIsSUFBQSxRQUFRLENBQVU7QUFDbEIsSUFBQSxJQUFJLENBQVU7QUFFZCxJQUFBLEtBQUssQ0FBQyxJQUEyQixFQUFBO0FBQzdCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7QUFDM0MsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLFFBQUEsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLFFBQUEsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQy9CLFFBQUEsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQy9CLFFBQUEsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLGlCQUFpQixDQUFDLE9BQW9CLEVBQUE7QUFDbEMsUUFBQSxNQUFNLEtBQUssR0FBaUM7WUFDeEMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2xCLENBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFSixDQUFBO01BRVksYUFBYSxDQUFBO0FBTUgsSUFBQSxJQUFBLENBQUE7QUFMbkIsSUFBQSxNQUFNLENBQVU7QUFDaEIsSUFBQSxRQUFRLENBQVU7QUFDbEIsSUFBQSxJQUFJLENBQVU7QUFDZCxJQUFBLEVBQUUsQ0FBVTtBQUVaLElBQUEsV0FBQSxDQUFtQixJQUFzQixFQUFBO1FBQXRCLElBQUksQ0FBQSxJQUFBLEdBQUosSUFBSSxDQUFrQjtLQUN4QztBQUVELElBQUEsS0FBSyxDQUFDLElBQTBCLEVBQUE7UUFDNUIsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDckI7SUFFRCxpQkFBaUIsR0FBQTtBQUNiLFFBQUEsTUFBTSxLQUFLLEdBQWdDO1lBQ3ZDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSixDQUFBO0FBR0QsTUFBTSxhQUFhLENBQUE7QUFDZixJQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNwQyxNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBRW5CLGVBQWUsQ0FBQyxJQUFZLEVBQUUsT0FBZSxFQUFBO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQ25DO0FBRUQsSUFBQSxVQUFVLENBQUMsSUFBWSxFQUFBO0FBQ25CLFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNuQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUM7QUFDM0MsWUFBQSxPQUFPLEdBQUcsQ0FBQztBQUNkLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSixDQUFBO0FBRVksTUFBQSxXQUFXLEdBQUcsSUFBSSxhQUFhLEdBQUc7TUFHbEMsYUFBYSxDQUFBO0FBQ3RCLElBQUEsRUFBRSxDQUFVO0FBQ1osSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLEdBQUcsQ0FBVTtBQUNoQixDQUFBO01BRVkscUJBQXFCLENBQUE7QUFDOUIsSUFBQSxFQUFFLENBQVU7QUFDWixJQUFBLElBQUksQ0FBVTtBQUNkLElBQUEsTUFBTSxDQUFXO0FBQ2pCLElBQUEsS0FBSyxDQUFDLElBQWtDLEVBQUE7QUFDcEMsUUFBQSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztBQUMzQyxRQUFBLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUM3QjtJQUVELGlCQUFpQixHQUFBO1FBQ2IsTUFBTSxLQUFLLEdBQXdDLEVBQUUsQ0FBQTtRQUNyRCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDVCxZQUFBLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0QixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1gsWUFBQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDMUIsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNiLFlBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0osQ0FBQTtNQUdZLHVCQUF1QixDQUFBO0lBQ2hDLElBQUksR0FBOEMsU0FBUyxDQUFDO0lBQzVELElBQUksR0FBVyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFXLENBQUMsQ0FBQztJQUNsQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0FBRW5CLElBQUEsS0FBSyxDQUFDLElBQW9DLEVBQUE7QUFDdEMsUUFBQSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztBQUM3QyxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUM3QjtJQUVELGlCQUFpQixHQUFBO1FBQ2IsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDdEIsQ0FBQTtLQUNKO0FBQ0osQ0FBQTtNQUVZLGFBQWEsQ0FBQTtBQUN0QixJQUFBLE1BQU0sQ0FBVTtBQUNuQjs7QUNuOEJLLE1BQU8scUJBQXNCLFNBQVEscUJBQXFCLENBQUE7QUFDNUQsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztLQUMzQjtJQUVELGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNqRSxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3pDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixZQUFBLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQztLQUNMO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFDMUMsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLDBCQUEyQixTQUFRLDBCQUEwQixDQUFBOztBQUV0RSxJQUFBLGFBQWEsQ0FBVztBQUN4QixJQUFBLFdBQVcsQ0FBdUM7SUFDbEQsa0JBQWtCLEdBQThCLEVBQUUsQ0FBQztBQUVuRCxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNuSDtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxZQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0osQ0FBQTtBQUdLLE1BQU8sZUFBZ0IsU0FBUSxjQUFvQixDQUFBO0FBQ3JELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQztLQUMvQjtJQUVELGFBQWEsQ0FBQyxJQUFTLEVBQUUsU0FBNEIsRUFBQTtBQUNqRCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztBQUNoRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBQ0o7O0FDeEVLLE1BQU8sbUJBQW9CLFNBQVEsV0FBZ0IsQ0FBQTtBQUVsQyxJQUFBLE9BQUEsQ0FBQTtBQUF5QyxJQUFBLFFBQUEsQ0FBQTs7SUFBNUQsV0FBbUIsQ0FBQSxPQUFnQyxFQUFTLFFBQWlCLEVBQUE7UUFDekUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBREgsSUFBTyxDQUFBLE9BQUEsR0FBUCxPQUFPLENBQXlCO1FBQVMsSUFBUSxDQUFBLFFBQUEsR0FBUixRQUFRLENBQVM7UUFFekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDL0IsWUFBQSxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUNqQyxJQUFJLGNBQWMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSx1QkFBdUIsRUFBRTtBQUM1RSxnQkFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBaUMsQ0FBQztnQkFDckQsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtBQUNoRSxvQkFBQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUNwQixjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsd0JBQUEsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDdkIscUJBQUE7QUFDSixpQkFBQTtBQUNKLGFBQUE7QUFDTCxTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDMUI7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbEQsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUVELFNBQVMsR0FBQTtBQUNMLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELEtBQUssR0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTlCLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSixDQUFBO0FBR0ssTUFBTyx3QkFBeUIsU0FBUSxnQkFBZ0IsQ0FBQTtBQUMxRCxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5QztJQUVELGVBQWUsQ0FBQyxHQUFzQixFQUFFLFFBQW1DLEVBQUE7QUFDdkUsUUFBQSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO1lBQzFCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkYsUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBOEIsQ0FBQztRQUNwRCxJQUFJLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUM3QixRQUFBLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQUs7WUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO2dCQUMzQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQ2hELGFBQUE7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRTtBQUM5RCx3QkFBQSxDQUFDLEVBQUUsQ0FBQzt3QkFDSixDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU07QUFDaEIscUJBQUEsRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFFO0FBQzlELHdCQUFBLENBQUMsRUFBRSxDQUFDO3dCQUNKLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTTtBQUNoQixxQkFBQSxFQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6RCxhQUFBO0FBQ0wsU0FBQyxDQUFDLENBQUE7S0FDTDtJQUVELEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxFQUFBO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVKOztBQ3BGRDs7QUFFRztBQUNHLE1BQWdCLGVBQXdDLFNBQVEsV0FBYyxDQUFBO0FBSW5GLENBQUE7QUFFRDs7O0FBR0c7QUFDRyxNQUFnQix1QkFBZ0QsU0FBUSxrQkFBcUIsQ0FBQTtBQUMvRixJQUFBLGFBQWEsQ0FBdUI7QUFDcEMsSUFBQSxXQUFXLENBQXVCO0FBRWxDLElBQUEsV0FBQSxDQUFZLElBQVksRUFBQTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBRVosSUFBSSxDQUFDLFFBQVEsQ0FBdUIsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEtBQUk7WUFDMUQsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3BELFlBQUEsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxjQUFjLENBQUM7QUFDckQsWUFBQSxJQUFJLG1CQUFtQixDQUFDLFlBQTJCLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQy9ELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUV2RDtxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUM1RCxvQkFBQSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN2QixpQkFBQTtBQUNKLGFBQUE7U0FDSixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRVQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUk7WUFDL0IsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQ3pELFlBQUEsSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDaEQsZ0JBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDekIsYUFBQTtBQUNMLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDaEMsWUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMzQixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN2QjtJQUVELFlBQVksR0FBQTtBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNqRSxZQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUNuQyxZQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDLFNBQUE7S0FDSjtJQUVELGtCQUFrQixHQUFBO1FBQ2QsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsT0FBTztZQUNILGFBQWE7WUFDYixXQUFXO1NBQ2QsQ0FBQTtLQUNKO0lBRVMsU0FBUyxDQUFvQyxJQUFhLEVBQUUsTUFBbUIsRUFBQTtBQUNyRixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbkQsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUM1RCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQyxpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELFlBQVksR0FBQTtRQUNSLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDeEI7QUFFRCxJQUFBLFFBQVEsQ0FBQyxLQUFtQixFQUFFLEtBQUEsR0FBZ0IsQ0FBQyxDQUFDLEVBQUE7QUFDNUMsUUFBQSxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQyxRQUFBLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNsRCxRQUFBLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ25DLFlBQUEsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE9BQU87QUFDVixTQUFBO1FBQ0QsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzNDLFlBQUEsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEM7SUFFRCxlQUFlLEdBQUE7QUFDWCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN6QyxRQUFBLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUVELGFBQWEsR0FBQTtRQUNULE1BQU0sS0FBSyxHQUFtQixFQUFFLENBQUM7QUFDakMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzVELGdCQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsY0FBYyxDQUFDLEtBQWMsRUFBQTtRQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLGVBQWUsQ0FBQyxLQUFjLEVBQUE7QUFDMUIsUUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM1QjtBQUNKLENBQUE7QUFFSyxNQUFnQixzQkFBc0csU0FBUSx1QkFBMEIsQ0FBQTtBQUMxSixJQUFBLFdBQUEsQ0FBWSxJQUFZLEVBQUE7UUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUN0QyxZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2QixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDdkMsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDdEIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFpQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDL0MsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDOUIsU0FBQyxDQUFDLENBQUM7S0FDTjtBQUVELElBQUEsZ0JBQWdCLENBQUMsR0FBbUIsRUFBQTtBQUNoQyxRQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3ZDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLQSxlQUFPLENBQUMsUUFBUSxFQUFFOztZQUVsRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNqRCxnQkFBQSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLGNBQWMsQ0FBQztBQUNyRCxnQkFBQSxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLFdBQVcsS0FBSyxDQUFDLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtvQkFDcEgsT0FBTztBQUNWLGlCQUFBO0FBQ0QsZ0JBQUEsY0FBYyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDNUMsZ0JBQUEsSUFBSSxLQUFLLEVBQUU7QUFDUCxvQkFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN2QixvQkFBQSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLGlCQUFBO2dCQUNELE9BQU07QUFDVCxhQUFBO0FBQ0osU0FBQTtBQUVELFFBQUEsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN0RixZQUFBLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxTQUFBO0tBQ0o7QUFNRDs7O0FBR0c7SUFDSCxRQUFRLEdBQUE7QUFDSixRQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7QUFDaEUsWUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNwQixTQUFBO0FBQ0QsUUFBQSxPQUFPLEVBQUUsQ0FBQztLQUNiO0FBRUosQ0FBQTtBQUVLLE1BQWdCLHVCQUFtRixTQUFRLHVCQUEwQixDQUFBO0FBQ3ZJLElBQUEsTUFBTSxDQUFDLENBQWMsRUFBQTtBQUNqQixRQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDOztBQUV4RCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDOUQsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQUs7O0FBRTVCLFlBQUEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUMsMkJBQTJCLENBQUM7QUFDOUgsZ0JBQUEsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDcEgsYUFBQTtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUU7Z0JBQzdELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUE7QUFDbEQsYUFBQTtBQUNELFlBQUEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDOUIsZ0JBQUEsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUMsZ0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDbEgsYUFBQTtZQUNELENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQixTQUFDLENBQUMsQ0FBQTtLQUNMO0FBRUosQ0FBQTtBQUdZLE1BQUEsZUFBZSxHQUFHLENBQUMsR0FBWSxLQUFJO0FBQzVDLElBQUEsT0FBTyxHQUFHLFlBQVksZUFBZSxJQUFJLEdBQUcsWUFBWSxzQkFBc0IsQ0FBQztBQUNuRixFQUFFO0FBRVcsTUFBQSx3QkFBd0IsR0FBRyxDQUFDLFNBQXVCLEtBQUk7SUFDaEUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQ25CLFFBQUEsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLEtBQUE7QUFDRCxJQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUU7QUFFVyxNQUFBLDRCQUE0QixHQUFHLENBQUMsU0FBdUIsS0FBSTtJQUNwRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7QUFDbkIsUUFBQSxPQUFPLFNBQVMsQ0FBQyxPQUFPLFlBQVksdUJBQXVCLENBQUM7QUFDL0QsS0FBQTtBQUNELElBQUEsT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRTtBQUVGOzs7O0FBSUc7QUFDYSxTQUFBLG1CQUFtQixDQUFDLE9BQW9CLEVBQUUsTUFBYyxFQUFBO0FBQ3BFLElBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxZQUFZLHNCQUFzQixDQUEyQixDQUFDO0FBQzNILElBQUEsSUFBSSxPQUFPLEVBQUU7UUFDVCxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxhQUFhLElBQUksTUFBTSxLQUFLLENBQUMsTUFBTSxPQUFPLEtBQUssT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDMUcsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLEtBQUE7QUFDRCxJQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFHRDs7OztBQUlHO0FBQ2EsU0FBQSwrQkFBK0IsQ0FBQyxPQUFvQixFQUFFLE1BQWMsRUFBQTtBQUNoRixJQUFBLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksWUFBWSx1QkFBdUIsQ0FBNEIsQ0FBQztBQUM3SCxJQUFBLElBQUksT0FBTyxFQUFFO1FBQ1QsSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsYUFBYSxJQUFJLE1BQU0sS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUFLLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFHLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixLQUFBO0FBQ0QsSUFBQSxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBR0ssTUFBZ0Isc0JBQWlDLFNBQVEsY0FBaUIsQ0FBQTtJQUM1RSxhQUFhLENBQUMsR0FBWSxFQUFFLFFBQXdCLEVBQUE7UUFDaEQsSUFBSSxHQUFHLFlBQVksdUJBQXVCLEVBQUU7QUFDeEMsWUFBQSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDckQsU0FBQTtLQUNKO0FBQ0o7O0FDaFFLLE1BQU8sZUFBZ0IsU0FBUSxxQkFBb0MsQ0FBQTs7QUFFckUsSUFBQSxXQUFXLENBQWU7QUFDMUIsSUFBQSxXQUFXLENBQXVCO0FBQ2xDLElBQUEsYUFBYSxDQUF5QjtBQUN0QyxJQUFBLGFBQWEsQ0FBeUI7QUFDdEMsSUFBQSx3QkFBd0IsQ0FBeUI7SUFDakQsZUFBZSxHQUFZLEtBQUssQ0FBQztBQUVqQyxJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0tBQ3BDO0FBRUQsSUFBQSxrQkFBa0IsQ0FBQyxPQUFvQixFQUFBO0FBQ25DLFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0FBQzVGLFFBQUEsTUFBTSxlQUFlLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxRQUFBLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztBQUM1QyxRQUFBLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUMvQyxRQUFBLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztBQUNqRCxRQUFBLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQztBQUM5QyxRQUFBLGVBQWUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFFBQUEsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hELFFBQUEsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEUsUUFBQSxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUM3QyxRQUFBLFFBQVEsR0FBRyxRQUFRLEdBQUcsZUFBZSxDQUFDO0FBQ3RDLFFBQUEsUUFBUSxHQUFHLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFDdEMsUUFBQSxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxlQUFlLENBQUMsQ0FBQztBQUNoRSxRQUFBLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDO0FBQ3RFLFFBQUEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUM7QUFDbEUsUUFBQSxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQztBQUNwRSxRQUFBLGVBQWUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQ3RDLFFBQUEsZUFBZSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDdEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUM5QyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2pELFFBQUEsT0FBTyxlQUFlLENBQUM7S0FDMUI7SUFFRCxTQUFTLEdBQUE7UUFDTCxPQUFPO0FBQ0gsWUFBQSxJQUFJLEVBQUUsS0FBSztBQUNYLFlBQUEsS0FBSyxFQUFFO0FBQ0gsZ0JBQUEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3BDLGFBQUE7U0FDSixDQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7QUFDRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLFlBQVksQ0FBQyxXQUFpQyxFQUFFLElBQUEsR0FBb0IsSUFBSSxFQUFBO1FBQ3BFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxXQUEwQixDQUFDO0FBQ2hFLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDbEMsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsUUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBQSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDaEM7QUFFRDs7QUFFRztJQUNILHNCQUFzQixDQUFDLEVBQWtCLEVBQUUsR0FBbUIsRUFBQTtRQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLQSxlQUFPLENBQUMsTUFBTSxFQUFFO1lBQzdDLE9BQU87QUFDVixTQUFBO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFO0FBQy9GLFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDL0IsU0FBQTtBQUFNLGFBQUEsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDbkUsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDdkMsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDdkMsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdEMsWUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNoQyxTQUFBO1FBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3RCO0FBQ0osQ0FBQTtBQUdLLE1BQU8sb0JBQXFCLFNBQVEsMEJBQTBCLENBQUE7QUFDaEUsSUFBQSxXQUFBLENBQVksR0FBWSxFQUFBO1FBQ3BCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0FBRUQsSUFBQSxVQUFVLENBQVU7QUFDcEIsSUFBQSxVQUFVLENBQVU7QUFFcEIsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQsUUFBQSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUMzRSxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekcsUUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFLO0FBQ2YsWUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUMxRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbkIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztRQUVuRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUNyRDtBQUVEOztBQUVHO0FBQ0ssSUFBQSxhQUFhLENBQUMsV0FBd0IsRUFBRSxNQUE4QixFQUFFLFFBQWtCLEVBQUE7QUFDOUYsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQzlCLFFBQUEsS0FBSyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7QUFDM0IsUUFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN0QixRQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0csU0FBQTtLQUNKO0FBRUQ7O0FBRUc7QUFDSyxJQUFBLGNBQWMsQ0FBQyxRQUFrQixFQUFFLE1BQThCLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQixFQUFBO0FBQzFHLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDOUYsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2YsZ0JBQUEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUzthQUM5QixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbkIsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZGLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUU7Z0JBQzlGLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNmLGdCQUFBLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVM7YUFDOUIsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ25CLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDOUYsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2YsZ0JBQUEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUzthQUM5QixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkIsUUFBQSxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRyxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFO2dCQUM5RixDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDZixnQkFBQSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxTQUFTO2FBQzlCLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUN0QjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLGFBQWEsQ0FBQyxHQUFzQixFQUFFLFdBQXdCLEVBQUUsUUFBbUMsRUFBQTtRQUN2RyxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7QUFDdkIsWUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQ3hDLFlBQUEsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsWUFBQSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFlBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7QUFDekQsWUFBQSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdkQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN6QyxZQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckQsWUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLFlBQUEsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7QUFDL0IsWUFBQSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQixZQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFlBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUM1RSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDaEMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUNqRCxZQUFBLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFlBQUEsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEMsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLGNBQWMsQ0FBQyxHQUFzQixFQUFFLFdBQXdCLEVBQUUsUUFBbUMsRUFBQTtBQUNoRyxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0FBQ3BELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ2xFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3RyxRQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDbEMsUUFBQSxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztBQUMvQixRQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxTQUFTLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUMvQixRQUFBLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN0RixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzlGO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBUzFCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sZUFBZ0IsU0FBUSxjQUE2QixDQUFBO0FBQzlELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQztLQUN6QjtJQUVELGFBQWEsQ0FBQyxJQUFxQyxFQUFFLFNBQTRCLEVBQUE7QUFDN0UsUUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQzlDLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQXNCLENBQUM7QUFDMUMsUUFBQSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLFFBQUEsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzdCLFFBQUEsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQy9CLFFBQUEsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RILFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDN0MsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxRQUFBLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUNqQyxRQUFBLFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztBQUMzQyxRQUFBLFFBQVEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUMvQyxRQUFBLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN2QyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDO0FBQzdDLFFBQUEsT0FBTyxlQUFlLENBQUM7S0FDMUI7QUFFSjs7QUNoUUssTUFBTyxtQkFBb0IsU0FBUSxxQkFBcUIsQ0FBQTs7SUFFMUQsWUFBWSxHQUFZLEtBQUssQ0FBQztBQUU5QixJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxLQUFJO1lBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNuQixnQkFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLGFBQUE7U0FDSixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1o7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsT0FBTyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzdDO0lBRUQsU0FBUyxHQUFBO1FBQ0wsT0FBTztBQUNILFlBQUEsSUFBSSxFQUFFLE1BQU07QUFDWixZQUFBLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQTtLQUNKO0FBRUQsSUFBQSxjQUFjLENBQUMsR0FBc0IsRUFBQTtRQUNqQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN0RSxRQUFBLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0QsU0FBQTtRQUNELE9BQU87S0FDVjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxJQUFJLEVBQUU7QUFDTixZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLGdCQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFHSixDQUFBO0FBR0ssTUFBTyx3QkFBeUIsU0FBUSwwQkFBMEIsQ0FBQTtBQUNwRSxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxNQUFNLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBSztZQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekQsZ0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsYUFBQTtZQUNELENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQixTQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLEVBQUE7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxRQUFBLElBQUksU0FBUyxFQUFFO0FBQ1gsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxnQkFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFFSixDQUFBO0FBR0ssTUFBTyxtQkFBb0IsU0FBUSxjQUFvQixDQUFBO0FBQ3pELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLE1BQU0sQ0FBQztLQUMxQjtJQUVELGFBQWEsQ0FBQyxJQUFTLEVBQUUsU0FBNEIsRUFBQTtBQUNqRCxRQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztBQUMxQyxRQUFBLE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBRUo7O0FDbkZLLE1BQU8scUJBQXNCLFNBQVEscUJBQXFCLENBQUE7QUFDNUQsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBRWhCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNyQyxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUIsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNaO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFDMUMsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsY0FBYyxDQUFDLEdBQXNCLEVBQUE7QUFDakMsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBeUIsQ0FBQztRQUNsRCxVQUFVLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPO0tBQ1Y7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRCxRQUFBLE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0lBRUQsU0FBUyxHQUFBO1FBQ0wsT0FBTztBQUNILFlBQUEsSUFBSSxFQUFFLFFBQVE7QUFDZCxZQUFBLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQTtLQUNKO0FBQ0osQ0FBQTtBQUVLLE1BQU8sMEJBQTJCLFNBQVEsMEJBQTBCLENBQUE7QUFDdEUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQUs7O1lBRWIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekQsZ0JBQUEsSUFBSSxhQUFhLEVBQUU7QUFDZixvQkFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxpQkFBQTtBQUFNLHFCQUFBO0FBQ0gsb0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsaUJBQUE7QUFDSixhQUFBO1lBQ0QsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CLFNBQUMsQ0FBQyxDQUFDO0tBRU47SUFHRCxLQUFLLEdBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUN0QjtBQUNKLENBQUE7QUFHSyxNQUFPLHFCQUFzQixTQUFRLGNBQW9CLENBQUE7QUFDM0QsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0tBQzVCO0lBRUQsYUFBYSxDQUFDLElBQVMsRUFBRSxTQUE0QixFQUFBO0FBQ2pELFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDOztBQUU1QyxRQUFBLE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBQ0o7O0FDL0VLLE1BQU8scUJBQXNCLFNBQVEscUJBQXFCLENBQUE7QUFDNUQsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNyQyxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUIsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQzVCO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFDMUMsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsY0FBYyxDQUFDLEdBQXNCLEVBQUE7QUFDakMsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBeUIsQ0FBQztRQUNsRCxVQUFVLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPO0tBQ1Y7SUFHRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRCxRQUFBLE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0lBRUQsU0FBUyxHQUFBO1FBQ0wsT0FBTztBQUNILFlBQUEsSUFBSSxFQUFFLFFBQVE7QUFDZCxZQUFBLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQTtLQUNKO0FBRUosQ0FBQTtBQUdLLE1BQU8sMEJBQTJCLFNBQVEsMEJBQTBCLENBQUE7QUFDdEUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQUs7O1lBRWIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDOztZQUUxRCxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7QUFDOUMsZ0JBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNHLGFBQUE7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFO0FBQ3pELGdCQUFBLElBQUksYUFBYSxFQUFFO0FBQ2Ysb0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLE9BQU87QUFDVixpQkFBQTtBQUNELGdCQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGFBQUE7WUFDRCxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbkIsU0FBQyxDQUFDLENBQUE7S0FDTDtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxZQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFNBQUE7QUFDRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBQ0osQ0FBQTtBQUdLLE1BQU8scUJBQXNCLFNBQVEsY0FBb0IsQ0FBQTtBQUMzRCxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7S0FDNUI7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFNBQTRCLEVBQUE7QUFDakQsUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7O0FBRTVDLFFBQUEsT0FBTyxPQUFPLENBQUM7S0FDbEI7QUFDSjs7QUN6RUssTUFBTyxnQkFBaUIsU0FBUSxtQkFBbUMsQ0FBQTs7QUFFckUsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNsQyxZQUFBLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7Z0JBQzlCLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLGlCQUFpQixLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7QUFDNUQsb0JBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7QUFDNUIsd0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0Isd0JBQUEsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDdkIscUJBQUE7QUFBTSx5QkFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzFCLHdCQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0Qix3QkFBQSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN2QixxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtTQUVKLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDWjtBQUVEOzs7QUFHRztBQUNILElBQUEsU0FBUyxDQUFDLE1BQStCLEVBQUE7QUFDckMsUUFBQUUsU0FBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFHO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFNBQUMsQ0FBQyxDQUFBO0tBQ0w7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxRQUFBLE9BQU8sVUFBVSxDQUFDO0tBQ3JCO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTtRQUM5QixPQUFPO0FBQ0gsWUFBQSxJQUFJLEVBQUUsR0FBRztBQUNULFlBQUEsS0FBSyxFQUFFO0FBQ0gsZ0JBQUEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztBQUMvQyxhQUFBO1NBQ0osQ0FBQTtLQUNKO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxJQUFJLEVBQUU7QUFDTixZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLGdCQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLE9BQU8sYUFBYSxHQUFBO1FBQ2hCLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ2pDO0FBRUosQ0FBQTtBQUVLLE1BQU8scUJBQXNCLFNBQVEsMEJBQTBCLENBQUE7QUFDakUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO1FBQ2pCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUMxRDtBQUdEOztBQUVHO0lBQ0gsaUJBQWlCLENBQUMsR0FBc0IsRUFBRSxXQUF3QixFQUFBO0FBQzlELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUM7QUFDckQsUUFBQSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsT0FBTztBQUNWLGFBQUE7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBa0MsQ0FBQztZQUNwRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ1osZ0JBQUEsU0FBUztBQUNaLGFBQUE7WUFDRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDZCxnQkFBQSxTQUFTO0FBQ1osYUFBQTtBQUNELFlBQUEsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFO0FBQzNFLGdCQUFBLENBQUMsRUFBRSxDQUFDO0FBQ0osZ0JBQUEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVU7QUFDN0IsYUFBQSxDQUFDLENBQUM7QUFDSCxZQUFBLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVyRixHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUMxRyxTQUFBO0tBQ0o7SUFHRCxLQUFLLEdBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUN0QjtJQUVELGNBQWMsR0FBQTtRQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzVDLFFBQUEsT0FBTyxRQUFRLENBQUM7S0FDbkI7QUFHSixDQUFBO0FBRUssTUFBTyxnQkFBaUIsU0FBUSxjQUE4QixDQUFBO0FBQ2hFLElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLEdBQUcsQ0FBQztLQUN2QjtJQUVELGFBQWEsQ0FBQyxJQUFzQyxFQUFFLFNBQTRCLEVBQUE7QUFDOUUsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDM0MsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzlDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ2hELFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLElBQUksTUFBTSxDQUFDO1FBQ3pELFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUM7UUFDeEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFDeEQsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUN0QjtBQUNKLENBQUE7QUFFRDs7QUFFRztBQUNHLE1BQU8sNkJBQThCLFNBQVEseUJBQXlCLENBQUE7QUFFeEUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0tBQ3BCO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEUsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFlBQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEQsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFDSjs7QUNyS0ssTUFBTyxjQUFlLFNBQVEsV0FBVyxDQUFBO0FBQzNDLElBQUEsU0FBUyxDQUFZO0lBQ3JCLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFbkIsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDZCxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdDLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0tBQ3BDO0lBRUQsa0JBQWtCLEdBQUE7QUFDZCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN4QyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRUQsU0FBUyxHQUFBO0FBQ0wsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ3pDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLGFBQWEsQ0FBQyxJQUFhLEVBQUE7UUFDdkIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN2QjtBQUNKLENBQUE7QUFFSyxNQUFPLG1CQUFvQixTQUFRLGdCQUFnQyxDQUFBO0FBQ3JFLElBQUEsTUFBTSxDQUFDLENBQWMsRUFBQTtBQUNqQixRQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUM3QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM3Rzs7SUFHRCxLQUFLLEdBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFSjs7QUN4Q0ssTUFBTyxnQkFBaUIsU0FBUSxxQkFBcUMsQ0FBQTs7QUFFdkUsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDYixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQzs7S0FFckM7SUFFRCxZQUFZLEdBQUE7UUFDUixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0tBQ2pEO0FBRUQ7OztBQUdHO0lBQ0gsaUJBQWlCLEdBQUE7QUFDYixRQUFBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQztLQUMvRTtJQUVELGtCQUFrQixHQUFBO0FBQ2QsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7QUFDM0IsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7UUFDRCxNQUFNLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRCxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsUUFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDbEMsUUFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDckMsUUFBQSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQy9CLFFBQUEsT0FBTyxVQUFVLENBQUM7S0FDckI7QUFFRCxJQUFBLFNBQVMsQ0FBQyxPQUFvQixFQUFBO1FBQzFCLE9BQU87QUFDSCxZQUFBLElBQUksRUFBRSxLQUFLO0FBQ1gsWUFBQSxLQUFLLEVBQUU7QUFDSCxnQkFBQSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO0FBQzNDLGFBQUE7U0FDSixDQUFDO0tBQ0w7QUFFRCxJQUFBLEtBQUssQ0FBQyxJQUFhLEVBQUE7QUFDZixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELFlBQVksR0FBQTtBQUNSLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ04sWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2xDLFNBQUE7QUFDRCxRQUFBLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFzQixDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25ELFFBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDakMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7QUFDckQsZ0JBQUEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDdEMsb0JBQUEsU0FBUyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsaUJBQUE7QUFBTSxxQkFBQTtvQkFDSCxNQUFNO0FBQ1QsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztLQUNsQztBQUVELElBQUEsT0FBTyxVQUFVLEdBQUE7QUFDYixRQUFBLE1BQU0sRUFBRSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUNsQyxRQUFBLE9BQU8sRUFBRSxDQUFDO0tBQ2I7QUFFSixDQUFBO0FBRUssTUFBTyxxQkFBc0IsU0FBUSxnQ0FBZ0MsQ0FBQTtBQUN2RSxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxNQUFNLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBSztZQUNiLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RGLFlBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBQyxHQUFzQixJQUFJLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQztBQUMzRixZQUFBLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ2hELGdCQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLGdCQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLGFBQUE7QUFDRCxZQUFBLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN4RCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUE7QUFDN0csYUFBQTtBQUNELFlBQUEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELElBQUksY0FBYyxHQUFHLFFBQVEsS0FBSyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3JGLGdCQUFBLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxHQUFHLFFBQVEsS0FBSyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pELGdCQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUMsRUFBRTtBQUN2RSx3QkFBQSxDQUFDLEVBQUUsWUFBWTtBQUNmLHdCQUFBLENBQUMsRUFBRSxZQUFZO0FBQ2xCLHFCQUFBLENBQUMsQ0FBQyxDQUFBO0FBQ04sYUFBQTtZQUNELENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNuQixTQUFDLENBQUMsQ0FBQTtLQUNMO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzFDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUN0QjtBQUNKLENBQUE7QUFFSyxNQUFPLGdCQUFpQixTQUFRLGNBQThCLENBQUE7QUFDaEUsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO0tBQ3pCO0lBRUQsYUFBYSxDQUFDLElBQXNDLEVBQUUsU0FBNEIsRUFBQTtBQUM5RSxRQUFBLE1BQU0sRUFBRSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUNsQyxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDeEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDeEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDeEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxFQUFFLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDMUQsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7O0FBRTVDLFFBQUEsT0FBTyxFQUFFLENBQUM7S0FDYjtBQUVKOztBQzNJSyxNQUFPLGVBQWdCLFNBQVEscUJBQW9DLENBQUE7O0FBRXJFLElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1osUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7O1FBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQUs7QUFDbEQsWUFBQSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUtQLGtCQUFVLENBQUMsS0FBSyxFQUFFOztBQUV0QyxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7QUFDTCxTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDdEM7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pDO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTtRQUM5QixPQUFPO0FBQ0gsWUFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLFlBQUEsS0FBSyxFQUFFO0FBQ0gsZ0JBQUEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztBQUNoRCxhQUFBO1NBQ0osQ0FBQztLQUNMO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksSUFBSSxFQUFFO0FBQ04sWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxnQkFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsT0FBTyxTQUFTLENBQUMsSUFBWSxFQUFBO0FBQ3pCLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLEVBQUUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM5QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEVBQUUsQ0FBQztLQUNiO0FBQ0osQ0FBQTtBQUVLLE1BQU8sb0JBQXFCLFNBQVEsMEJBQTJDLENBQUE7QUFDakYsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0tBQ3BCO0lBR0QsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFlBQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEQsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFDSixDQUFBO0FBRUssTUFBTyxlQUFnQixTQUFRLGNBQTZCLENBQUE7QUFDOUQsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO0tBQ3hCO0lBRUQsYUFBYSxDQUFDLElBQXFDLEVBQUUsU0FBNEIsRUFBQTtBQUM3RSxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFzQixDQUFDO0FBQzFDLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUM7QUFDdEMsUUFBQSxPQUFPLEVBQUUsQ0FBQztLQUNiO0FBRUo7O01DbEZZLFNBQVMsQ0FBQTtJQUVsQixPQUFPLGNBQWMsQ0FBQyxFQUFrQixFQUFBO0FBQ3BDLFFBQUEsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ2YsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO1FBQ0QsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2Y7QUFFRDs7OztBQUlHO0lBQ0gsT0FBTyxhQUFhLENBQUMsRUFBa0IsRUFBQTtBQUNuQyxRQUFBLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekYsUUFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTtBQUNELFFBQUEsSUFBSSxxQkFBcUIsWUFBWSxZQUFZLElBQUkscUJBQXFCLFlBQVksZUFBZSxFQUFFO0FBQ25HLFlBQUEsTUFBTSxTQUFTLEdBQUcscUJBQXFCLFlBQVksWUFBWSxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQXNCLENBQUM7WUFDdkksTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLFlBQUEsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ2xGLGdCQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLGdCQUFBLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO29CQUNyRCxNQUFNLGFBQWEsR0FBNEIsRUFBRSxDQUFDO0FBQ2xELG9CQUFBLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkksb0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN2RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFrQixDQUFDLENBQUMsQ0FBQztBQUN2RCx3QkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELDRCQUFBLElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckUsZ0NBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsNkJBQUE7QUFDSix5QkFBQTtBQUNKLHFCQUFBO0FBQ0Qsb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLGlCQUFpQixDQUFDLEVBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFvQixDQUFDO1FBQ3pELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUNyQixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO0FBQ3JELFlBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ2xDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDYixhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsTUFBTTtBQUNULGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLG1CQUFtQixDQUFDLEVBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO1FBQzNFLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFvQixDQUFDO0FBQ3JELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7QUFDakQsWUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxnQkFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2hDO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8saUJBQWlCLENBQUMsRUFBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUE7UUFDekUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3JCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFvQixDQUFDO1lBQ2xELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFxQixDQUFDO0FBQzVELFlBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ2xDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDYixhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsTUFBTTtBQUNULGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLG1CQUFtQixDQUFDLEVBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO0FBQzNFLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQW9CLENBQUM7WUFDbEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQXFCLENBQUM7QUFDNUQsWUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxnQkFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2hDO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8sVUFBVSxDQUFDLEVBQWtCLEVBQUE7UUFDaEMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFFLFFBQUEsSUFBSSxTQUFTLEVBQUU7WUFDWCxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxxQkFBcUIsWUFBWSxZQUFZLElBQUkscUJBQXFCLFlBQVksZUFBZSxFQUFFO0FBQ25HLFlBQUEsTUFBTSxTQUFTLEdBQUcscUJBQXFCLFlBQVksWUFBWSxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQXNCLENBQUM7WUFDdkksTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLFlBQUEsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFOztnQkFFbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELGFBQUE7QUFDRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZCxTQUFBO0tBQ0o7QUFFRDs7OztBQUlHO0lBQ0ssT0FBTyxnQkFBZ0IsQ0FBQyxFQUFrQixFQUFBO0FBQzlDLFFBQUEsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFNO0FBQ1QsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7QUFDakQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztZQUM5QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBcUIsQ0FBQztBQUNqRCxnQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7QUFDM0Isb0JBQUEsS0FBSyxFQUFFLENBQUM7QUFDWCxpQkFBQTtBQUNKLGFBQUE7O1lBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ3JCLGdCQUFBLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDMUIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNyRDtBQUVEOzs7QUFHRztJQUNLLE9BQU8sU0FBUyxDQUFDLEdBQW9CLEVBQUE7QUFDekMsUUFBQSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEMsUUFBQSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBc0IsQ0FBQztBQUN0QyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFlBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDakMsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELElBQUksY0FBYyxHQUFHLFFBQVEsRUFBRTtvQkFDM0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBa0IsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDekcsaUJBQUE7QUFDSixhQUFBO0FBQU0saUJBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Ozs7OztBQU16QyxnQkFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGdCQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDOztnQkFFL0QsSUFBSSxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWMsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7QUFDeEUsb0JBQUEsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBa0IsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQW1CLENBQUMsQ0FBQyxDQUFBO0FBQzlGLG9CQUFBLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNqQyxpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZCO0FBRUQ7Ozs7QUFJRztBQUNLLElBQUEsT0FBTyxTQUFTLENBQUMsRUFBZ0IsRUFBRSxRQUFnQixFQUFBO0FBQ3ZELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBa0IsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBbUIsUUFBUSxDQUFDLENBQUM7QUFDdEQsWUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxnQkFBQSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxjQUFjLEdBQUcsUUFBUSxFQUFFO29CQUMzQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFtQixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsb0JBQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsY0FBYyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM1RSxpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUN6QyxnQkFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLGdCQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztnQkFFL0QsSUFBSSxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWMsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7QUFDeEUsb0JBQUEsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFrQixnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBbUIsQ0FBQyxDQUFDLENBQUE7QUFDckcsb0JBQUEsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEMsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFNBQUE7QUFDRCxRQUFBLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNmLFNBQUE7S0FDSjtBQUVEOzs7QUFHRztJQUNILE9BQU8sYUFBYSxDQUFDLEVBQWtCLEVBQUE7QUFDbkMsUUFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTtZQUNsQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDakYsUUFBQSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBeUIsQ0FBQztBQUNwRCxRQUFBLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFzQixDQUFDO0FBQzFDLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QixRQUFBLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsU0FBQTtLQUNKO0FBRUQ7OztBQUdHO0lBQ0gsT0FBTyxhQUFhLENBQUMsRUFBa0IsRUFBQTtBQUNuQyxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDcEIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDcEMsU0FBQTtRQUNELElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtBQUNkLFlBQUEsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQXlCLENBQUM7QUFDcEQsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBc0IsQ0FBQztZQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPO0FBQ1YsU0FBQTtRQUNELE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQy9ELFFBQUEsSUFBSSxxQkFBcUIsWUFBWSxZQUFZLElBQUkscUJBQXFCLFlBQVksZUFBZSxFQUFFO0FBQ25HLFlBQUEsTUFBTSxTQUFTLEdBQUcscUJBQXFCLFlBQVksWUFBWSxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQXNCLENBQUM7WUFDdkksTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLFlBQUEsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ2xGLGdCQUFBLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQyxnQkFBQSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sYUFBYSxJQUFJLFdBQVcsRUFBRTtBQUNqQyxvQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2QyxvQkFBQSxXQUFXLEVBQUUsQ0FBQztBQUNqQixpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsU0FBQTtRQUNELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNkO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLE9BQU8sWUFBWSxDQUFDLFNBQXVCLEVBQUUsU0FBMkIsRUFBRSxPQUF5QixFQUFBO0FBQy9GLFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsTUFBTSxZQUFZLEdBQW1CLEVBQUUsQ0FBQztBQUN4QyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFrQixDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7QUFDdkQsZ0JBQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzdCLGdCQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUNuQyxnQkFBQSxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQ3pCLG9CQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDekUsb0JBQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ3JDLGlCQUFBO2dCQUNELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtvQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNoRSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekIsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTs7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLFlBQVksZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3hGLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsYUFBQTtBQUNKLFNBQUE7S0FDSjtJQUdELE9BQU8sWUFBWSxDQUFDLEVBQWtCLEVBQUE7UUFDbEMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFFLFFBQUEsSUFBSSxxQkFBcUIsWUFBWSxZQUFZLElBQUkscUJBQXFCLFlBQVksZUFBZSxFQUFFO0FBQ25HLFlBQUEsTUFBTSxTQUFTLEdBQUcscUJBQXFCLFlBQVksWUFBWSxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztZQUN2SCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUUsWUFBQSxJQUFJLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ2xGLElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRTtBQUN2QixvQkFBQSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDdkYsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUE7WUFDSCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDWixnQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEMsYUFBQTtZQUNELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQztBQUM1QyxZQUFBLE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdFLFNBQUE7QUFFRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7OztBQUdHO0lBQ0gsT0FBTyxXQUFXLENBQUMsRUFBa0IsRUFBQTtRQUNqQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDMUUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUM5RSxRQUFBLElBQUksU0FBUyxFQUFFO0FBQ1gsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakMsWUFBQSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsU0FBQTtLQUNKO0lBRU8sT0FBTyxnQkFBZ0IsQ0FBQyxJQUFzQixFQUFBO1FBQ2xELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN0QyxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUF5QixDQUFDO0FBQzNDLFFBQUEsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQXNCLENBQUM7QUFDdEMsUUFBQSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEMsUUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ3RCLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQXFCLENBQUM7QUFDeEQsZ0JBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDbEMsb0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLG9CQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ2pDLHdCQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDdEIsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO0FBQ2pELGdCQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ2xDLG9CQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN6QixvQkFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNqQyx3QkFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IscUJBQUE7QUFDSixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDNUI7QUFHTyxJQUFBLE9BQU8sYUFBYSxDQUFDLEVBQWdCLEVBQUUsY0FBc0IsRUFBRSxjQUFzQixFQUFBO1FBQ3pGLE1BQU0sS0FBSyxHQUEyQixFQUFFLENBQUM7QUFDekMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQXFCLENBQUM7QUFDOUQsWUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNsQyxnQkFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUdELElBQUEsT0FBTyxTQUFTLENBQUMsRUFBa0IsRUFBRSxjQUFzQixFQUFBO0FBQ3ZELFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDakYsUUFBQSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBeUIsQ0FBQztBQUNyRCxRQUFBLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFzQixDQUFDO0FBQzNDLFFBQUEsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFDLFFBQUEsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLFFBQUEsY0FBYyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUN6RCxRQUFBLGNBQWMsR0FBRyxjQUFjLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxjQUFjLENBQUM7O1FBRXpFLE1BQU0sY0FBYyxHQUFHLGNBQWMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2SCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUU7QUFDbEIsWUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxDQUFBO1lBQ2pELE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFrQixDQUFDLENBQUMsQ0FBQTtBQUMzQyxZQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUN2QyxZQUFBLElBQUksY0FBYyxLQUFLLENBQUMsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO0FBQ3RELGdCQUFBLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN0QyxTQUFTO0FBQ1osYUFBQTtZQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQW1CLGNBQWMsQ0FBQyxDQUFDO0FBQ2pFLFlBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxnQkFBQSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTs7QUFFdkMsb0JBQUEsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RSxvQkFBQSxJQUFJLGlCQUFpQixHQUFHLGNBQWMsS0FBSyxpQkFBaUIsS0FBSyxjQUFjLElBQUksWUFBWSxHQUFHLGNBQWMsQ0FBQyxFQUFFO0FBQy9HLHdCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxxQkFBQTtBQUNKLGlCQUFBO3FCQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFlBQVksR0FBRyxjQUFjLEVBQUU7QUFDOUUsb0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLGlCQUFBO0FBQ0osYUFBQTtBQUNELFlBQUEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDekMsU0FBQTtRQUVELEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxLQUFLLFNBQVMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxHQUFHLGNBQWMsRUFBRSxjQUFjLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDbEgsUUFBQSxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxQyxRQUFBLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BCO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxFQUFrQixFQUFFLGNBQXNCLEVBQUE7QUFDdkQsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRixRQUFBLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3BDLFNBQUE7QUFDRCxRQUFBLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUF5QixDQUFDO0FBQ3JELFFBQUEsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQXNCLENBQUM7QUFDM0MsUUFBQSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekMsUUFBQSxjQUFjLEdBQUcsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ3pELFFBQUEsY0FBYyxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7O1FBRTVELElBQUksY0FBYyxLQUFLLENBQUMsSUFBSSxjQUFjLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRTtBQUN0RCxZQUFBLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3BDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqQixZQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2pCLFNBQUE7UUFDRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBb0IsQ0FBQztBQUMvRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDOztBQUV2RCxZQUFBLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFOztBQUV0QyxnQkFBQSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLGdCQUFBLElBQUksaUJBQWlCLEdBQUcsY0FBYyxLQUFLLGlCQUFpQixLQUFLLGNBQWMsSUFBSSxZQUFZLEdBQUcsY0FBYyxDQUFDLEVBQUU7QUFDL0csb0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDOztBQUVyQyxpQkFBQTtBQUNKLGFBQUE7aUJBQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksWUFBWSxHQUFHLGNBQWMsRUFBRTs7QUFFN0UsZ0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDOztBQUVyQyxhQUFBO0FBRUosU0FBQTtBQUNELFFBQUEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDcEMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFRDs7QUFFRztJQUNILE9BQU8sY0FBYyxDQUFDLEVBQWtCLEVBQUE7QUFDcEMsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRixRQUFBLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3BDLFNBQUE7QUFDRCxRQUFBLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUF5QixDQUFDO0FBQ3JELFFBQUEsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN4QztBQUVEOztBQUVHO0lBQ0gsT0FBTyxjQUFjLENBQUMsRUFBa0IsRUFBQTtBQUNwQyxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDcEIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDcEMsU0FBQTtBQUNELFFBQUEsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQXlCLENBQUM7QUFDckQsUUFBQSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNwQztBQUVEOztBQUVHO0lBQ0gsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFrQixFQUFBO0FBQ3RDLFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDakYsUUFBQSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0FBRUQ7O0FBRUc7SUFDSCxPQUFPLGVBQWUsQ0FBQyxFQUFrQixFQUFBO0FBQ3JDLFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDakYsUUFBQSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUMsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNwQztBQUVEOzs7QUFHRztJQUNILE9BQU8sWUFBWSxDQUFDLEVBQWtCLEVBQUE7QUFDbEMsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRixRQUFBLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3BDLFNBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsUUFBQSxJQUFJLFFBQVEsRUFBRTtBQUNWLFlBQUEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87QUFDVixTQUFBOztBQUVELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3hCO0FBR0Q7Ozs7QUFJRztJQUNILE9BQU8sV0FBVyxDQUFDLEVBQWtCLEVBQUE7QUFDakMsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRixRQUFBLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3BDLFNBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdDLFFBQUEsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RDLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFzQixDQUFDO0FBQ25ELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsWUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFvQixDQUFDO1lBQ2xELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7QUFDekQsZ0JBQUEsSUFBSSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtBQUM5QixvQkFBQSxPQUFPLFFBQVEsQ0FBQztBQUNuQixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBOztLQUVKO0FBRUQ7O0FBRUc7SUFDSCxPQUFPLGtCQUFrQixDQUFDLEVBQWtCLEVBQUE7QUFDeEMsUUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNoQztBQUdEOztBQUVHO0lBQ0gsT0FBTyxXQUFXLENBQUMsRUFBa0IsRUFBQTtBQUNqQyxRQUFBLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ0wsWUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNmO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8sb0JBQW9CLENBQUMsRUFBa0IsRUFBRSxRQUF3QixFQUFBO0FBQ3BFLFFBQUEsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNMLFlBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQixPQUFNO0FBQ1QsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUN0RCxZQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNoQyxTQUFBO0FBQU0sYUFBQSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUN2QyxZQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixTQUFBO1FBQ0QsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BCO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsT0FBTyxRQUFRLENBQUMsRUFBZ0IsRUFBRSxRQUFnQixFQUFBO1FBQzlDLElBQUksUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUMsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBaUIsQ0FBQztBQUM5QyxRQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sR0FBRyxHQUFHLFFBQVEsRUFBRTtZQUNuQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFlBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQUEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixTQUFBO0FBQ0QsUUFBQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLFlBQUEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxTQUFBO0tBQ0o7QUFFRDs7Ozs7O0FBTUc7QUFDSCxJQUFBLE9BQU8sMEJBQTBCLENBQUMsRUFBZ0IsRUFBRSxTQUEyQixFQUFFLE9BQXlCLEVBQUE7UUFDdEcsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQyxRQUFBLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRTtZQUNuQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxTQUFBO1FBQ0QsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFO1lBQ25CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLFNBQUE7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFvQixDQUFDO1lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO2dCQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUN2QixvQkFBQSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxvQkFBQSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUQsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUM3QyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUMsaUJBQUE7Z0JBQ0QsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ3ZCLG9CQUFBLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELG9CQUFBLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxQyxpQkFBQTtnQkFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDdEIsb0JBQUEsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRTt3QkFDbkIsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUNyQixxQkFBQTtBQUNKLGlCQUFBO2dCQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUN0QixvQkFBQSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFO3dCQUNuQixNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3JCLHFCQUFBO0FBQ0osaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtRQUNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQTtLQUNoRDtBQUNKOztBQ3pyQkssTUFBTyxZQUFhLFNBQVEscUJBQWlDLENBQUE7O0FBRXZELElBQUEsZ0JBQWdCLENBQTJCO0FBRW5ELElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1osUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBdUIsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEtBQUk7O0FBRTFELFlBQUEsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQzs7WUFFcEMsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDcEQsZ0JBQUEsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUM3QixnQkFBQSxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM5QyxhQUFBO1NBQ0osRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNaO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLElBQUksZUFBZSxHQUFBO0FBQ2YsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7QUFDdEMsWUFBQSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUk7Z0JBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDVixvQkFBQSxLQUFLLEVBQUUsR0FBRztBQUNWLG9CQUFBLE1BQU0sRUFBRSxHQUFHO0FBQ2QsaUJBQUEsQ0FBQyxDQUFDO2dCQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUNwQixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ0wsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0FBQ3BDLFNBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUNoQztBQUVELElBQUEsWUFBWSxDQUFDLFNBQWlCLEVBQUE7UUFDMUIsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtZQUMzRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2IsU0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDaEQ7QUFFRCxJQUFBLGNBQWMsQ0FBQyxTQUFpQixFQUFBO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7S0FDakQ7SUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxLQUFhLEVBQUE7O1FBRXpDLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7WUFDM0QsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7S0FDekI7QUFFRDs7OztBQUlHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFzQixFQUFBO1FBQzNDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7S0FDaEM7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLFNBQVMsQ0FBQyxLQUFhLEVBQUE7UUFDbkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUVELFlBQVksR0FBQTtBQUNSLFFBQUEsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztLQUN0QztBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNqRSxRQUFBLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QztJQUVELFlBQVksR0FBQTtRQUNSLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7S0FDaEM7QUFHRCxJQUFBLFNBQVMsQ0FBQyxPQUFvQixFQUFBOztBQUUxQixRQUFBLE1BQU0sS0FBSyxHQUFHO0FBQ1YsWUFBQSxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBQztTQUNwRCxDQUFBO0FBQ0QsUUFBQSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFlLENBQUM7QUFDN0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsSUFBWSxFQUFFLElBQVksRUFBQTtBQUN6QyxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7QUFDakMsUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEIsUUFBQSxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0IsWUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixTQUFBO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFHSyxNQUFPLGlCQUFrQixTQUFRLDBCQUF3QyxDQUFBO0FBQzNFLElBQUEsY0FBYyxDQUFDLFFBQWdCLEVBQUE7QUFDM0IsUUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2xDO0FBRUQsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7O1FBRTdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtZQUNyQyxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXlCLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQWEsRUFBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzlGLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUEwQixDQUFDO2dCQUNsRSxNQUFNLE9BQU8sR0FBYSxFQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUM7O2dCQUU3RixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7O0FBRVQsb0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUU7NEJBQzNELENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDcEMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2YseUJBQUEsQ0FBQyxDQUFDLENBQUM7O0FBRVAsaUJBQUE7O2dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTs7QUFFVCxvQkFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRTs0QkFDM0QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzRCQUNaLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUN4Qyx5QkFBQSxDQUFDLENBQUMsQ0FBQzs7QUFFUCxpQkFBQTs7O0FBR0QsZ0JBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDN0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNwQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ2YsRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0FBSW5GLGdCQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzdCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDWixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU07cUJBQ3hDLEVBQUUsRUFBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQzs7O0FBR3RGLGFBQUE7QUFDSixTQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUN0QjtBQUNKLENBQUE7QUFHSyxNQUFPLFlBQWEsU0FBUSxjQUEwQixDQUFBO0FBQ3hELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQztLQUN4QjtJQUVELGFBQWEsQ0FBQyxJQUFTLEVBQUUsU0FBNEIsRUFBQTtBQUNqRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFtQixDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUM5QixRQUFBLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDeEIsUUFBQSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdkMsUUFBQSxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFFBQUEsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDcEIsWUFBQSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU8sR0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxFQUFFLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNuQixRQUFBLE9BQU8sRUFBRSxDQUFDO0tBQ2I7QUFFSixDQUFBO0FBRUQ7O0FBRUc7U0FDYSxrQkFBa0IsQ0FBQyxHQUFpQixFQUFFLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNwRyxJQUFBLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFrQyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxHQUFnQyxFQUFFLENBQUE7QUFDNUMsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQzs7QUFFbkQsUUFBQSxJQUFzQixHQUFHLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDaEQsU0FBUztBQUNaLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsS0FBQTtBQUNELElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXBCLFFBQUEsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQTBCLENBQUM7Z0JBQ3hFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0JBQUEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUUzQyxnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7QUFDdEQsb0JBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUEwQixDQUFBO29CQUM1RixPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELG9CQUFBLElBQUksT0FBTyxFQUFFO0FBQ1Qsd0JBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUMzQixxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFDRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRSxLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLElBQUEsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0FBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEdBQXlCLEVBQUE7SUFDakQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztRQUN0RCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztBQUM3RCxZQUFBLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFNBQUE7QUFDRCxRQUFBLEtBQUssR0FBRyxZQUFZLEdBQUcsS0FBSyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdkQsS0FBQTtBQUNELElBQUEsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7OztBQUtHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxHQUF5QixFQUFFLGFBQXFCLEVBQUUsT0FBb0IsRUFBRSxTQUE0QixFQUFBO0lBQy9ILElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtRQUNyQixPQUFPO0FBQ1YsS0FBQTtBQUNELElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JELFFBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixTQUFTO0FBQ1osU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsWUFBQSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBQSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBK0IsQ0FBQztBQUVsRSxZQUFBLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBMEIsQ0FBQztZQUN6RyxhQUFhLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTVELFlBQUEsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakQsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFLFlBQUEsYUFBYSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRTFDLFlBQUEsVUFBVSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2QyxZQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFbEMsWUFBQSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsYUFBQTtBQUNELFlBQUEsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBeUIsQ0FBQztZQUNqRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztBQUNoRSxZQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbEMsWUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3hDLFNBQUE7QUFDSixLQUFBO0FBQ0QsSUFBQSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBMkIsQ0FBQztBQUMzQyxJQUFBLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBeUIsQ0FBQztBQUM5RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUEwQixDQUFDO0FBQ3RELFlBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixTQUFBO0FBQ0QsUUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEtBQUE7QUFDTCxDQUFDO0FBR0Q7O0FBRUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFxQixFQUFBO0lBQ3hDLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7SUFDL0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDbEMsUUFBQSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN6QixZQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBQSxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2QsU0FBQTtBQUNKLEtBQUE7QUFDRCxJQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUE2QixDQUFDO0FBQzVELElBQUEsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFrQixDQUFDO0FBQ3RELElBQUEsTUFBTSxXQUFXLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxJQUFBLE1BQU0sS0FBSyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDdkMsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxRQUFBLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFBLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzNCLFlBQUEsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNqRSxTQUFBO0FBQ0osS0FBQTtBQUNELElBQUEsT0FBTyxXQUE0QixDQUFDO0FBQ3hDOztBQ3JYTSxNQUFPLGdCQUFpQixTQUFRLFdBQXNCLENBQUE7O0lBRXhELFlBQVksR0FBcUIsRUFBRSxDQUFDO0lBQ3BDLFNBQVMsR0FBWSxLQUFLLENBQUM7QUFFM0IsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDZCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUM3QixRQUFBLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQUs7QUFDMUIsWUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2QixZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDNUIsU0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELElBQUksSUFBSSxDQUFDLEdBQVcsRUFBQTtBQUNoQixRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0FBRUQsSUFBQSxNQUFNLENBQUMsS0FBYSxFQUFFLFdBQW1CLEVBQUUsVUFBeUIsSUFBSSxFQUFBO1FBQ3BFLE1BQU0sVUFBVSxHQUFxQixFQUFFLENBQUM7QUFDeEMsUUFBQSxJQUFJLFdBQVcsRUFBRTtBQUNiLFlBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pFUSxVQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRixXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFlBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ25DLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEJDLFNBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4QyxRQUFBLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0YsUUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoQyxZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDakUsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QixRQUFBLE9BQU8sVUFBVSxDQUFDO0tBQ3JCO0FBRUQsSUFBQSxJQUFJLElBQUksR0FBQTtBQUNKLFFBQUEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM1RDtJQUVELGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNqRSxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUtULGtCQUFVLENBQUMsSUFBSSxFQUFFO0FBQ3hELFlBQUEsU0FBUyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RSxZQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFNBQUE7QUFDRCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsUUFBQSxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDeEMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTs7UUFFOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO1FBQ0QsT0FBTztBQUNILFlBQUEsSUFBSSxFQUFFLE1BQU07QUFDWixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDL0MsYUFBQTtZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNsQixZQUFBLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN2QixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsT0FBTyxHQUFBO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0FBRUQsSUFBQSxVQUFVLENBQUMsV0FBbUIsRUFBRSxTQUFpQixFQUFFLEtBQWMsRUFBQTtBQUM3RCxRQUFBLFNBQVMsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3BFLElBQUksU0FBUyxLQUFLLFdBQVcsRUFBRTtBQUMzQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksS0FBSyxFQUFFOztBQUVQLFlBQUEsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDMUUsU0FBQTtBQUFNLGFBQUE7WUFDSCxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxLQUFLLElBQUksV0FBVyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM3RyxTQUFBO0FBQ0QsUUFBQSxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7OztBQUdHO0FBQ0gsSUFBQSxTQUFTLENBQUMsTUFBMEIsRUFBQTtBQUNoQyxRQUFBTyxTQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUc7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsU0FBQyxDQUFDLENBQUE7S0FDTDtJQUVELGNBQWMsR0FBQTtBQUNWLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDMUI7QUFDSixDQUFBO0FBR0ssTUFBTyxxQkFBc0IsU0FBUSxnQkFBa0MsQ0FBQTtBQUN6RSxJQUFBLFlBQVksQ0FBb0I7QUFFaEMsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7O1FBRS9CLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDeEQsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9GLFNBQUE7QUFDRCxRQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztLQUtyRTtBQUVELElBQUEsV0FBQSxDQUFZLE9BQXlCLEVBQUE7UUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUQsUUFBQSxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0MsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7OztBQUdsRCxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFNBQUE7QUFDRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxHQUFBO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0tBQ2xEO0FBQ0osQ0FBQTtBQUVLLE1BQU8sZ0JBQWlCLFNBQVEsY0FBb0IsQ0FBQTtBQUN0RCxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxNQUFNLENBQUM7S0FDMUI7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFNBQTRCLEVBQUE7QUFDakQsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBa0IsQ0FBQztBQUN0QyxRQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFpQixDQUFDO0FBQ3BDLFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3pDLFFBQUEsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBRUo7O01DNUtZLGdCQUFnQixDQUFBO0FBQ3pCLElBQUEsT0FBTyxTQUFTLENBQUMsT0FBZ0IsRUFBRSxXQUF3QixFQUFBO1FBQ3ZELElBQUksT0FBTyxZQUFZLGFBQWEsRUFBRTtZQUNsQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlDLFlBQUEsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQzVCLGdCQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2pCLGFBQUE7QUFDRCxZQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksT0FBTyxHQUF3QyxJQUFJLENBQUM7QUFDeEQsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUQsZ0JBQUEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ2pFLG9CQUFBLElBQXVCLEtBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFvQixPQUFPLENBQUMsR0FBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUMvRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBVSxjQUFlLENBQUMsT0FBTyxDQUFDO3dCQUN2RCxTQUFTO0FBQ1oscUJBQUE7QUFDSixpQkFBQTtBQUNELGdCQUFBLElBQUksY0FBYyxFQUFFO29CQUNoQixPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQy9CLGNBQWMsQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7QUFDbEQsd0JBQUEsY0FBYyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDekcscUJBQUE7QUFDRCxvQkFBQSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ2hELE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQTtBQUM5QixxQkFBQTtvQkFDRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUNqRSxPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUM7QUFDbEMscUJBQUE7QUFDRCxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDckMsT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDbkQsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNqQixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDLFNBQUE7S0FDSjtJQUtELE9BQU8sZUFBZSxDQUFDLE9BQWdCLEVBQUUsVUFBNEIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUE7QUFDL0UsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLFlBQVksZUFBZSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUtHLHdCQUFnQixDQUFDLE9BQU8sRUFBRTtBQUNqRyxZQUFBLE9BQU8sRUFBRSxDQUFDO0FBQ2IsU0FBQTtRQUNELElBQUksT0FBTyxZQUFZLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUM1RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDdkIsU0FBQTtRQUNELElBQUksT0FBTyxZQUFZLGFBQWEsRUFBRTtZQUNsQyxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO0FBQ2hDLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsZ0JBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGFBQUE7QUFDRCxZQUFBLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixTQUFBO0FBQ0QsUUFBQSxPQUFPLEVBQUUsQ0FBQztLQUNiO0FBR0Q7Ozs7QUFJRztBQUNILElBQUEsT0FBTyxpQkFBaUIsQ0FBQyxFQUFrQixFQUFFLFdBQXdCLEVBQUE7QUFDakUsUUFBQSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRTtBQUN2RCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUMvQixPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2RDtBQUVEOzs7O0FBSUc7QUFDSCxJQUFBLE9BQU8sZUFBZSxDQUFDLEVBQWtCLEVBQUUsV0FBd0IsRUFBQTtRQUMvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBa0IsQ0FBQztBQUNoRixRQUFBLElBQUksY0FBYyxFQUFFO0FBQ2hCLFlBQUEsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBRSxDQUFDO0FBQ2hELFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLEVBQUUsQ0FBQztBQUNiLFNBQUE7S0FDSjtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsRUFBa0IsRUFBRSxXQUF3QixFQUFBO1FBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFrQixDQUFDO0FBQ2hGLFFBQUEsSUFBSSxjQUFjLEVBQUU7QUFDaEIsWUFBQSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN0RSxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDYixTQUFBO0tBQ0o7QUFFRDs7QUFFRztJQUNILE9BQU8sZUFBZSxDQUFDLE9BQXNCLEVBQUE7UUFDekMsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztBQUNqQyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsWUFBQSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN2QixnQkFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQixTQUFTO0FBQ1osYUFBQTtZQUNELElBQUksSUFBSSxZQUFZLGFBQWEsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUM1QyxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFJSjs7QUM5R1dBLGtDQUdYO0FBSEQsQ0FBQSxVQUFZLGdCQUFnQixFQUFBO0FBQ3hCLElBQUEsZ0JBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxTQUFvQixDQUFBO0FBQ3BCLElBQUEsZ0JBQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxTQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFIV0Esd0JBQWdCLEtBQWhCQSx3QkFBZ0IsR0FHM0IsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQUlLLE1BQU8sZUFBZ0IsU0FBUSxrQkFBaUMsQ0FBQTtBQUNsRSxJQUFBLFdBQUEsQ0FBWSxTQUEyQixFQUFBO1FBQ25DLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQW9CLGNBQWMsRUFBRSxDQUFDLEdBQUcsS0FBSTtZQUNyRCxHQUFHLENBQUMsU0FBUyxHQUFHO2dCQUNaLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBd0I7QUFDM0MsZ0JBQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUN6QixnQkFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO0FBQ3JCLGdCQUFBLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDO2FBQy9ELENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFbkMsWUFBQSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4QixTQUFDLENBQUMsQ0FBQztLQUNOO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO1FBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQXdCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdCLGdCQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLFNBQTRCLEVBQUE7QUFDakUsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUtBLHdCQUFnQixDQUFDLE9BQU8sRUFBRTtBQUNyRSxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pDO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTtRQUM5QixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsWUFBQSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtTQUN4QyxDQUFDO0tBQ0w7QUFFRCxJQUFBLEtBQUssQ0FBQyxLQUFhLEVBQUE7UUFDZixJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBd0IsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBbUIsRUFBRSxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixZQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckIsU0FBQTtBQUNELFFBQUEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUc7WUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2QsWUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFNBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLG9CQUFxQixTQUFRLHVCQUF3QyxDQUFBO0FBQzlFLElBQUEsV0FBQSxDQUFZLEdBQW9CLEVBQUE7UUFDNUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxNQUFNLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBSztBQUNiLFlBQUEsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzVJLFlBQUEsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNuRCxhQUFBO1lBQ0QsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25CLFNBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLFFBQVEsQ0FBQzs7QUFFeEIsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNoRSxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsWUFBQSxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzNCLElBQUksV0FBVyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQy9ELFNBQVM7QUFDWixhQUFBO1lBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDMUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLFNBQUE7S0FDSjtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxZQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFNBQUE7QUFDRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBQ0osQ0FBQTtBQUVLLE1BQU8saUJBQWtCLFNBQVEsY0FBNkIsQ0FBQTtJQUVoRSxhQUFhLENBQUMsSUFBcUMsRUFBRSxTQUE0QixFQUFBO1FBQzdFLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUF3QixDQUFDLENBQUM7QUFDL0QsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDNUMsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDaEQsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEMsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSWIsYUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQUEsT0FBTyxHQUFHLENBQUM7S0FDZDtBQUVELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLYSx3QkFBZ0IsQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLQSx3QkFBZ0IsQ0FBQyxPQUFPLENBQUM7S0FDbEY7QUFHSjs7TUNyR1ksV0FBVyxDQUFBO0FBRXBCLElBQUEsT0FBTyxjQUFjLENBQUMsTUFBeUIsRUFBRSxHQUE2QixFQUFFLFdBQThDLEVBQUE7Ozs7O0FBSzFILFFBQUEsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxXQUFXLENBQUM7QUFDcEMsUUFBQSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLFFBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdkI7Ozs7Ozs7Ozs7Ozs7O0FBaUJELElBQUEsT0FBTyxZQUFZLENBQUMsR0FBVyxFQUFFLFFBQWdCLENBQUMsRUFBQTtBQUM5QyxRQUFBLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtLQUNyQztBQUVELElBQUEsT0FBTyxhQUFhLENBQUMsSUFBc0IsRUFBRSxLQUE0QixFQUFFLE9BQW9CLEVBQUE7UUFDM0YsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUMsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7O1FBRTFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUM5QixTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvRCxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUMvRCxRQUFBLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDbEIsWUFBQSxTQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDM0MsU0FBQTtRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUNqQixZQUFBLFNBQVMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxTQUFBO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ2pCLFlBQUEsU0FBUyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3pDLFNBQUE7UUFDRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFDbkIsWUFBQSxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDN0MsU0FBQTtRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNoQixZQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUN2QyxTQUFBO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ2xCLFlBQUEsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQzNDLFNBQUE7UUFDRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFDbkIsWUFBQSxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDN0MsU0FBQTtRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUNqQixZQUFBLFNBQVMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLFNBQVMsQ0FBQztLQUNwQjtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFzQixFQUFFLEtBQXVCLEVBQUE7UUFDbkUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJYixhQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLGtCQUFrQixDQUFDLE1BQW9CLEVBQUUsWUFBb0IsRUFBQTtBQUNoRSxRQUFBLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7UUFDekIsT0FBTyxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3REO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsT0FBTyw2QkFBNkIsQ0FBQyxNQUFvQixFQUFFLFNBQWUsRUFBQTtBQUN0RSxRQUFBLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDOztRQUVqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDckc7QUFFRDs7OztBQUlHO0FBQ0gsSUFBQSxPQUFPLHdCQUF3QixDQUFDLE1BQTZELEVBQUUsZUFBcUIsRUFBQTtRQUNoSCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDaEQsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFO0FBQzNCLFlBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBQzlFLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLFNBQVMsQ0FBQyxJQUFVLEVBQUE7QUFDdkIsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUEsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQUEsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQUEsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLFFBQUEsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLFFBQUEsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3JDLFFBQUEsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ25DLFFBQUEsT0FBTyxTQUFTLENBQUM7S0FDcEI7QUFFRDs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxTQUFTLENBQUMsTUFBNkQsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFBO0FBQ3pGLFFBQUEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNiLFNBQUE7UUFDRCxJQUFJLE1BQU0sWUFBWSxvQkFBb0IsRUFBRTtBQUN4QyxZQUFBLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFNBQUE7UUFDRCxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsRUFBRTtBQUNyQyxZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsWUFBQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxZQUFBLElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDeEMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvRSxTQUFBO0FBQ0QsUUFBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQzNCO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxTQUErQixFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBQTtBQUN6RSxRQUFBLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUEwQixDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDL0UsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDOztBQUVqQyxRQUFBLGFBQWEsR0FBRyxhQUFhLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUM7O0FBRXhELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQXNCLFVBQVUsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDO0FBQzlELFlBQUEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEtBQUssTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssY0FBYyxDQUFDLEVBQUU7QUFDMUYsZ0JBQUEsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFDLGFBQUE7QUFDSixTQUFBOztBQUVELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7QUFDbEUsWUFBQSxNQUFNLFdBQVcsR0FBcUIsVUFBVSxDQUFDLE9BQU8sQ0FBQztBQUN6RCxZQUFBLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ25DLFlBQUEsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLGNBQWMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUU7QUFDMUYsZ0JBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBQzFDLGFBQUE7O0FBRUQsWUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEMsU0FBQTs7QUFFRCxRQUFBLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1QyxRQUFBLE9BQU8sYUFBYSxDQUFDO0tBQ3hCO0FBRUQ7O0FBRUc7SUFDSCxPQUFPLDhCQUE4QixDQUFDLFNBQStCLEVBQUE7QUFDakUsUUFBZSxTQUFTLENBQUMsUUFBMkI7UUFDcEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDOzs7QUFHdkIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztZQUNsRSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzRSxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQXNCLFVBQVUsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDO0FBQzlELFlBQUEsSUFBSSxpQkFBaUIsR0FBRyxhQUFhLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDM0QsYUFBYSxHQUFHLGlCQUFpQixDQUFDO0FBQ3JDLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLGFBQWEsQ0FBQztLQUN4QjtBQUVEOzs7OztBQUtHO0lBQ0gsT0FBTywrQkFBK0IsQ0FBQyxVQUFpQyxFQUFBO1FBQ3BFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLGFBQWEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkQsU0FBQTtBQUNELFFBQUEsT0FBTyxhQUFhLENBQUM7S0FDeEI7QUFFRDs7O0FBR0c7SUFDSyxPQUFPLGlCQUFpQixDQUFDLE1BQTZCLEVBQUE7QUFDMUQsUUFBQSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBMkIsQ0FBQztBQUNyRCxRQUFBLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQzdCLE9BQU87QUFDVixTQUFBO1FBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQyxTQUFBO1FBQ0QsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsV0FBVyxHQUFHLE1BQU0sS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDL0ksSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO1lBQ2xCLE9BQU87QUFDVixTQUFBO1FBQ0QsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3BCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSyxPQUFPLGFBQWEsQ0FBQyxRQUEyQixFQUFBOzs7Ozs7Ozs7Ozs7Ozs7S0FldkQ7QUFFRDs7OztBQUlHO0lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUEyQixFQUFBOztRQUVsRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdkIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQztBQUN6RCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztBQUM1RCxnQkFBQSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBMkIsQ0FBQztBQUNuRCxnQkFBQSxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ3RCLG9CQUFBLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQyxvQkFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3RSxvQkFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTs7d0JBRXRCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUMsNEJBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDL0IsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNyQix5QkFBQTt3QkFDRCxTQUFTO0FBQ1oscUJBQUE7b0JBQ0QsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDMUYsb0JBQUEsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7O29CQUVyRixJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7d0JBQ3BCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELHdCQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQztBQUN0Qyx3QkFBQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2xDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDckIscUJBQUE7QUFBTSx5QkFBQTtBQUNILHdCQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO0FBQ2pFLHFCQUFBO0FBQ0osaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxVQUFVLEVBQUU7QUFDWixZQUFBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxPQUFPO0FBQ1YsU0FBQTtLQUNKO0FBRUQ7Ozs7OztBQU1HO0FBQ0ssSUFBQSxPQUFPLDJCQUEyQixDQUFDLE1BQXlCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO1FBQ3BHLE1BQU0sSUFBSSxHQUFnQyxFQUFFLENBQUM7QUFDN0MsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXlCLENBQUM7QUFDN0QsWUFBQSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBMEIsQ0FBQztZQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztBQUMxRCxZQUFBLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzNCLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtnQkFDdkIsTUFBTTtBQUNULGFBQUE7QUFDRCxZQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEIsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLDZCQUE2QixDQUFDLEVBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFBO1FBQ3JGLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFvQixDQUFDO0FBQ3JELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7QUFDakQsWUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUNqQyxnQkFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2hDO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8sMkJBQTJCLENBQUMsRUFBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUE7QUFDbkYsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztBQUN4RCxZQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ2pDLGdCQUFBLE9BQU8sQ0FBQyxDQUFDO0FBQ1osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUNwQztBQUVEOzs7Ozs7QUFNRztBQUNILElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxFQUFnQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBQTtRQUM5RSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBb0IsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztBQUN4RCxRQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFlBQUEsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwRixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdEUsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDbEMsWUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNqRixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JFLFNBQUE7QUFDRCxRQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUE7S0FDOUI7QUFFRDs7QUFFRztJQUNLLE9BQU8sbUJBQW1CLENBQUMsR0FBeUIsRUFBQTtBQUN4RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdEMsU0FBQTtLQUNKO0FBVUQsSUFBQSxPQUFPLGVBQWUsQ0FBQyxPQUFnQixFQUFFLElBQWMsRUFBQTtBQUNuRCxRQUFBLElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0M7QUFVRCxJQUFBLE9BQU8saUJBQWlCLENBQUMsT0FBZ0IsRUFBRSxPQUE2QyxFQUFFLElBQWMsRUFBQTtBQUNwRyxRQUFBLElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzFEO0FBR0Q7Ozs7O0FBS0c7QUFDSyxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsSUFBYSxFQUFFLE9BQWdCLEVBQUE7UUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDYixTQUFBO0FBQ0QsUUFBQSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlCLFFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDUixZQUFBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNqQyxZQUFBLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsZ0JBQUEsT0FBTyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsYUFBQTtZQUNELE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEQsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE9BQU8sQ0FBQyxDQUFDO0FBQ1osU0FBQTtLQUNKO0FBR0Q7Ozs7O0FBS0c7QUFDSyxJQUFBLE9BQU8sa0JBQWtCLENBQUMsSUFBYSxFQUFFLE9BQWdCLEVBQUUsT0FBNkMsRUFBQTtBQUM1RyxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVELFFBQUEsT0FBTyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUM7QUFDakMsUUFBQSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNyQyxZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2xCLFNBQUE7UUFDRCxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7QUFDaEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7YUFBTSxJQUFJLE9BQU8sWUFBWSxhQUFhLEVBQUU7QUFDekMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxnQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEUsZ0JBQUEsSUFBSSxHQUFHLEVBQUU7QUFDTCxvQkFBQSxPQUFPLEdBQUcsQ0FBQztBQUNkLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NEOzs7O0FBSUc7SUFDSCxPQUFPLHFCQUFxQixDQUFDLE9BQWdCLEVBQUE7QUFDekMsUUFBQSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDWCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8scUJBQXFCLENBQUMsT0FBZ0IsRUFBQTtBQUN6QyxRQUFBLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsWUFBQSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNwQyxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVELElBQUEsT0FBTywwQkFBMEIsQ0FBQyxPQUFnQixFQUFFLElBQXNCLEVBQUUsTUFBYyxFQUFBO1FBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLGNBQWMsWUFBWSxlQUFlLEVBQUU7QUFDM0MsWUFBQSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUN4RSxnQkFBQSxPQUFPLGNBQWMsQ0FBQztBQUN6QixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVELElBQUEsT0FBTywwQkFBMEIsQ0FBQyxPQUFnQixFQUFFLElBQXNCLEVBQUUsTUFBYyxFQUFBO1FBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLGNBQWMsWUFBWSxlQUFlLEVBQUU7QUFDM0MsWUFBQSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUN4RSxnQkFBQSxPQUFPLGNBQWMsQ0FBQztBQUN6QixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLGVBQWUsQ0FBQyxTQUFvQixFQUFBO0FBQ3ZDLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0FBQ25DLFFBQUEsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQsSUFBQSxPQUFPLGVBQWUsQ0FBQyxJQUFzQixFQUFFLFdBQXdCLEVBQUE7QUFDbkUsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUMxQyxRQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztBQUNqRCxRQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztBQUNqRCxRQUFBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztBQUMzQyxRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsT0FBTyw0QkFBNEIsQ0FBQyxNQUFvQixFQUFFLE1BQWdCLEVBQUE7QUFDdEUsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25DLFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDYixTQUFBO0FBQ0QsUUFBQSxNQUFNLGdCQUFnQixHQUFTO1lBQzNCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsWUFBQSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ3hCLFlBQUEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUMxQixZQUFBLFFBQVEsRUFBRSxDQUFDO0FBQ1gsWUFBQSxTQUFTLEVBQUUsQ0FBQztTQUNmLENBQUM7UUFDRixNQUFNLEtBQUssR0FBb0QsRUFBRSxDQUFDO1FBQ2xFLElBQUksTUFBTSxZQUFZLGtCQUFrQixFQUFFO0FBQ3RDLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLEVBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNHLGFBQUE7QUFDSixTQUFBO2FBQU0sSUFBSSxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDM0MsWUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDO0FBQ3hELFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsT0FBTyx3QkFBd0IsQ0FBQyxNQUFvQixFQUFFLE1BQWdCLEVBQUE7QUFDbEUsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25DLFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDYixTQUFBO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBUyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sS0FBSyxHQUFnRCxFQUFFLENBQUM7UUFDOUQsSUFBSSxNQUFNLFlBQVksa0JBQWtCLEVBQUU7QUFDdEMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxnQkFBQSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsRUFBQyxDQUFDLENBQUE7QUFFL0YsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTthQUFNLElBQUksTUFBTSxZQUFZLGdCQUFnQixFQUFFO0FBQzNDLFlBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztBQUN4RCxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVEOztBQUVHO0FBQ0gsSUFBQSxPQUFPLDJCQUEyQixDQUFDLE1BQW9CLEVBQUUsTUFBZ0IsRUFBQTtBQUNyRSxRQUFBLE1BQU0sZ0JBQWdCLEdBQVM7WUFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixZQUFBLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFDeEIsWUFBQSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQzFCLFlBQUEsUUFBUSxFQUFFLENBQUM7QUFDWCxZQUFBLFNBQVMsRUFBRSxDQUFDO1NBQ2YsQ0FBQztBQUNGLFFBQUEsT0FBTyxnQkFBZ0IsQ0FBQztLQUMzQjtBQUdEOztBQUVHO0lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxNQUFvQixFQUFBO1FBQzNDLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUMvQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7UUFDRCxJQUFJLE1BQU0sWUFBWSxvQkFBb0IsRUFBRTtBQUN4QyxZQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUEwQixDQUFDO0FBQ2pELFlBQUEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDeEIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0tBQy9CO0FBRUQ7OztBQUdHO0lBQ0gsT0FBTyxhQUFhLENBQUMsYUFBNkMsRUFBQTtRQUM5RCxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ2hCLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxZQUFBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDcEIsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFFRDs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxpQkFBaUIsQ0FBQyxJQUFVLEVBQUUsQ0FBVyxFQUFBO1FBQzVDLE1BQU0sS0FBSyxHQUFnQyxFQUFFLENBQUM7UUFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNQLFlBQUEsQ0FBQyxFQUFFO2dCQUNDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDVCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDWixhQUFBO0FBQ0QsWUFBQSxDQUFDLEVBQUU7QUFDQyxnQkFBQSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSztnQkFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1osYUFBQTtTQUNKLEVBQUU7QUFDQyxZQUFBLENBQUMsRUFBRTtnQkFDQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1osYUFBQTtBQUNELFlBQUEsQ0FBQyxFQUFFO2dCQUNDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGdCQUFBLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQzFCLGFBQUE7U0FDSixFQUFFO0FBQ0MsWUFBQSxDQUFDLEVBQUU7Z0JBQ0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1QsZ0JBQUEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDMUIsYUFBQTtBQUNELFlBQUEsQ0FBQyxFQUFFO0FBQ0MsZ0JBQUEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDdEIsZ0JBQUEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDMUIsYUFBQTtTQUNKLEVBQUU7QUFDQyxZQUFBLENBQUMsRUFBRTtBQUNDLGdCQUFBLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLO2dCQUN0QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDWixhQUFBO0FBQ0QsWUFBQSxDQUFDLEVBQUU7QUFDQyxnQkFBQSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSztBQUN0QixnQkFBQSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtBQUMxQixhQUFBO0FBQ0osU0FBQSxDQUFDLENBQUE7UUFDRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3hFLFFBQUEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDakM7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPLEVBQUUsQ0FBTyxFQUFBO1FBRXhDLE1BQU0sRUFBRSxHQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUE7UUFFN0MsTUFBTSxFQUFFLEdBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUU5QyxNQUFNLEVBQUUsR0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFBO0FBRTdDLFFBQUEsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsWUFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFBO2FBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsWUFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEIsWUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFlBQUEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekMsWUFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFRDs7OztBQUlHO0lBQ0gsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFvQixFQUFBO0FBQ3hDLFFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDUixZQUFBLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUQsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE9BQU8sRUFBRSxDQUFDO0FBQ2IsU0FBQTtLQUNKO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQyxNQUFvQixFQUFBO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ25FO0FBRUQsSUFBQSxPQUFPLGVBQWUsQ0FBK0IsS0FBbUIsRUFBRSxVQUFvQyxFQUFBO1FBQzFHLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDUixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtBQUM3QixZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsU0FBQTtLQUNKO0FBRUQsSUFBQSxPQUFPLDBCQUEwQixDQUFDLEtBQW1CLEVBQUUsU0FBMEMsRUFBQTtRQUM3RixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1IsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTtBQUFNLGFBQUE7WUFDSCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ25FLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLGlCQUFpQixDQUFDLE9BQW1DLEVBQUE7QUFDeEQsUUFBQSxJQUFJLE9BQU8sRUFBRTtBQUNULFlBQUEsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvRCxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDYixTQUFBO0tBQ0o7QUFFRDs7OztBQUlHO0FBQ0gsSUFBQSxPQUFPLGtCQUFrQixDQUFDLE9BQWdCLEVBQUUsWUFBaUQsSUFBSSxFQUFBO0FBQzdGLFFBQUEsSUFBSSxPQUFPLFlBQVksV0FBVyxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQ3RFLFlBQUEsT0FBTyxPQUFPLENBQUM7QUFDbEIsU0FBQTthQUFNLElBQUksT0FBTyxZQUFZLGFBQWEsRUFBRTtBQUN6QyxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxnQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNuRSxnQkFBQSxJQUFJLEdBQUcsRUFBRTtBQUNMLG9CQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2QsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFHRDs7OztBQUlHO0lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxPQUFnQixFQUFBO1FBQ3ZDLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtBQUNoQyxZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2xCLFNBQUE7YUFBTSxJQUFJLE9BQU8sWUFBWSxhQUFhLEVBQUU7QUFDekMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxnQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELGdCQUFBLElBQUksR0FBRyxFQUFFO0FBQ0wsb0JBQUEsT0FBTyxHQUFHLENBQUM7QUFDZCxpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7O0FBSUc7QUFDSCxJQUFBLE9BQU8saUJBQWlCLENBQUMsUUFBaUIsRUFBRSxRQUFpQixFQUFBO1FBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7S0FDeEI7SUFFRCxPQUFPLGVBQWUsQ0FBQyxVQUFzQixFQUFBO0FBQ3pDLFFBQUEsUUFBUSxVQUFVO0FBQ2QsWUFBQSxLQUFLLE1BQU07QUFDUCxnQkFBQSxPQUFPLE1BQU0sQ0FBQztBQUNsQixZQUFBLEtBQUssS0FBSztBQUNOLGdCQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLFlBQUEsS0FBSyxNQUFNO0FBQ1AsZ0JBQUEsT0FBTyxZQUFZLENBQUM7QUFDeEIsWUFBQSxLQUFLLE9BQU87QUFDUixnQkFBQSxPQUFPLFlBQVksQ0FBQztBQUN4QixZQUFBLEtBQUssUUFBUTtBQUNULGdCQUFBLE9BQU8sWUFBWSxDQUFBO0FBQ3ZCLFlBQUEsS0FBSyxhQUFhLENBQUM7QUFDbkIsWUFBQSxLQUFLLGNBQWM7QUFDZixnQkFBQSxPQUFPLFVBQVUsQ0FBQztBQUN0QixZQUFBLEtBQUssWUFBWSxDQUFDO0FBQ2xCLFlBQUEsS0FBSyxlQUFlO0FBQ2hCLGdCQUFBLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLFlBQUEsS0FBSyxVQUFVLENBQUM7QUFDaEIsWUFBQSxLQUFLLGNBQWM7QUFDZixnQkFBQSxPQUFPLFdBQVcsQ0FBQztBQUN2QixZQUFBLEtBQUssV0FBVyxDQUFDO0FBQ2pCLFlBQUEsS0FBSyxhQUFhO0FBQ2QsZ0JBQUEsT0FBTyxXQUFXLENBQUM7QUFDdkIsWUFBQTtBQUNJLGdCQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ3JCLFNBQUE7S0FDSjtBQUVELElBQUEsT0FBTyxlQUFlLENBQXVCLEtBQWUsRUFBRSxVQUFvQyxFQUFBO1FBQzlGLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDUixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtBQUM3QixZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsU0FBQTtLQUNKO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxLQUFxQixFQUFFLFNBQXFDLEVBQUE7UUFDekUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNSLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQixZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEQsU0FBQTtLQUNKO0FBR0Q7OztBQUdHO0lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxPQUF5QixFQUFBOztBQUVoRCxRQUFBLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFlBQVksY0FBYyxDQUFDLEVBQUU7QUFDbkUsWUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztBQUMxQyxTQUFBO1FBQ0QsTUFBTSxLQUFLLEdBQTBCLEVBQUUsQ0FBQztBQUN4QyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksS0FBSyxZQUFZLGNBQWMsRUFBRTtBQUNqQyxnQkFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBRztBQUNqQixZQUFBLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDN0IsU0FBQyxDQUFDLENBQUM7S0FDTjtBQUVEOzs7QUFHRztJQUNILE9BQU8saUJBQWlCLENBQUMsT0FBOEIsRUFBQTtBQUNuRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxPQUFPLFlBQVksZ0JBQWdCLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFO2dCQUNySCxPQUFPO0FBQ1YsYUFBQTtZQUNELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDckIsT0FBTztBQUNWLGFBQUE7QUFDRCxZQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDNUMsU0FBQTtLQUNKO0FBR0Q7Ozs7Ozs7QUFPRztBQUNILElBQUEsT0FBTyx5QkFBeUIsQ0FBQyxNQUFvQixFQUFFLFNBQTBCLElBQUksRUFBQTtBQUNqRixRQUFBLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBYSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUM7QUFDckYsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNoQixZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2xCLFNBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2pFO0FBRUQsSUFBQSxPQUFPLDBCQUEwQixDQUFDLE1BQW9CLEVBQUUsV0FBNEIsSUFBSSxFQUFBO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0QsUUFBQSxPQUFPLEVBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUMsQ0FBQztLQUNwRztBQUdEOzs7O0FBSUc7SUFDSCxPQUFPLHFCQUFxQixDQUFDLEtBQTRCLEVBQUE7QUFDckQsUUFBQSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDakYsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQU0sYUFBQTtZQUNILE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLG9CQUFvQixDQUFDLEtBQTRCLEVBQUE7QUFDcEQsUUFBQSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDakYsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRixTQUFBO0tBQ0o7QUFHRDs7Ozs7QUFLRztJQUNILE9BQU8sVUFBVSxDQUFDLEtBQTRCLEVBQUUsUUFBaUIsRUFBRSxZQUF5QyxPQUFPLEVBQUE7QUFDL0csUUFBQSxNQUFNLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pGLFFBQUEsSUFBSSxjQUFjLEVBQUU7O0FBRWhCLFlBQUEsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7QUFDM0MsZ0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixhQUFBO0FBQ0QsWUFBQSxNQUFNLEtBQUssR0FBRyxTQUFTLEtBQUssUUFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLFlBQUEsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLGFBQUE7QUFDRCxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFBTSxhQUFBO1lBQ0gsSUFBSSxNQUFNLFlBQVksV0FBVyxFQUFFO0FBQy9CLGdCQUFBLElBQUksTUFBTSxZQUFZLGdCQUFnQixJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7QUFDakUsb0JBQUEsSUFBSSxRQUFRLEVBQUU7QUFDVix3QkFBQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkUsd0JBQUEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQzFCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQix5QkFBQTtBQUNELHdCQUFBLE9BQU8sVUFBVSxDQUFDO0FBQ3JCLHFCQUFBO0FBQU0seUJBQUE7QUFDSCx3QkFBQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsd0JBQUEsT0FBTyxVQUFVLENBQUM7QUFDckIscUJBQUE7QUFDSixpQkFBQTtBQUNELGdCQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsYUFBQTtpQkFBTSxJQUFJLE1BQU0sWUFBWSxhQUFhLEVBQUU7Z0JBQ3hDLE1BQU0sS0FBSyxHQUFtQixFQUFFLENBQUM7QUFDakMsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxvQkFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RSxvQkFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLHdCQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIscUJBQUE7QUFDSixpQkFBQTtBQUNELGdCQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2Ysb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixpQkFBQTtBQUFNLHFCQUFBO29CQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFrQixDQUFDO0FBQ3hELG9CQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFHO0FBQ2pCLHdCQUFBLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDN0IscUJBQUMsQ0FBQyxDQUFDO0FBQ0gsb0JBQUEsT0FBTyxVQUFVLENBQUM7QUFDckIsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLG1CQUFtQixDQUFDLFNBQXdCLEVBQUE7UUFDL0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7Ozs7OztBQU9HO0lBQ0gsT0FBTyw4QkFBOEIsQ0FBQyxXQUEyQixFQUFFLE1BQWtCLEdBQUEsS0FBSyxFQUFFLFNBQUEsR0FBcUIsS0FBSyxFQUFFLFdBQXdCLEVBQUE7QUFDNUksUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLEVBQUUsTUFBTSxDQUFDOztBQUVuQyxRQUFBLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUUsV0FBVyxZQUFZLGVBQWUsQ0FBQyxDQUFDLEVBQUU7QUFDdEcsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7O0FBRUQsUUFBQSxJQUFJLE1BQU0sWUFBWSxzQkFBc0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUtRLGVBQU8sQ0FBQyxRQUFRLEVBQUU7QUFDaEgsWUFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RixTQUFBO0FBQ0QsUUFBQSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQ2xDLFlBQUEsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEYsU0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNSLFlBQUEsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDL0IsZ0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixhQUFBO0FBQ0QsWUFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RixTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksV0FBVyxHQUFtQixJQUFJLENBQUM7QUFDdkMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxnQkFBQSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxnQkFBQSxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7b0JBQzFDLE1BQU07QUFDVCxpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRTtBQUMxQyxnQkFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RixhQUFBO1lBQ0QsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDOztBQUVwRSxZQUFBLElBQUksU0FBUyxJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsWUFBWSxFQUFFO0FBQzlELGdCQUFBLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9GLGFBQUE7QUFDRCxZQUFBLElBQUksZUFBZSxFQUFFO0FBQ2pCLGdCQUFBLE9BQU8sZUFBZSxDQUFDO0FBQzFCLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRyxhQUFBO0FBQ0osU0FBQTtLQUNKO0FBR0Q7OztBQUdHO0FBQ0gsSUFBQSxPQUFPLGtCQUFrQixDQUFDLEdBQWtCLEVBQUUsV0FBbUMsRUFBQTtRQUM3RSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksc0JBQXNCLENBQWtDLENBQUM7UUFDaEssTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDWCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLGdCQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3ZELG9CQUFBLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtERDs7QUFFRztJQUNILE9BQU8sOEJBQThCLENBQUMsV0FBMkIsRUFBRSxNQUFrQixHQUFBLEtBQUssRUFBRSxTQUFBLEdBQXFCLEtBQUssRUFBRSxXQUF3QixFQUFBO0FBQzVJLFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtBQUN2RCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTs7QUFFRCxRQUFBLElBQUksTUFBTSxZQUFZLHNCQUFzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBS0EsZUFBTyxDQUFDLFFBQVEsRUFBRTtBQUNoSCxZQUFBLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RGLFNBQUE7QUFDRCxRQUFBLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7QUFDbEMsWUFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RixTQUFBO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoRCxRQUFBLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLFlBQUEsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDL0IsZ0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixhQUFBO0FBQ0QsWUFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RixTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksV0FBVyxHQUFtQixJQUFJLENBQUM7QUFDdkMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsZ0JBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsZ0JBQUEsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO29CQUMxQyxNQUFNO0FBQ1QsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsZ0JBQUEsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEYsYUFBQTtZQUNELE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUFFckUsWUFBQSxJQUFJLFNBQVMsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFlBQVksRUFBRTtBQUM5RCxnQkFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRixhQUFBO0FBQ0QsWUFBQSxJQUFJLGVBQWUsRUFBRTtBQUNqQixnQkFBQSxPQUFPLGVBQWUsQ0FBQztBQUMxQixhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEcsYUFBQTtBQUNKLFNBQUE7S0FDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0REOzs7O0FBSUc7SUFDSCxPQUFPLG1CQUFtQixDQUFDLEdBQXlCLEVBQUE7UUFDaEQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsWUFBQSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7Z0JBQ3pDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0MsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBR0Q7OztBQUdHO0lBQ0gsT0FBTyxpQkFBaUIsQ0FBQyxHQUF1QixFQUFBO0FBQzVDLFFBQUEsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNsQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksV0FBVyxZQUFZLHFCQUFxQixFQUFFO2dCQUM5QyxJQUF1QixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUcsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4RCxvQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7OztBQUdHO0lBQ0gsT0FBTywwQkFBMEIsQ0FBQyxNQUErQixFQUFBO1FBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsWUFBQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRTtBQUM5QixnQkFBQSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDaEMsYUFBQTtBQUNELFlBQUEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLFNBQUE7QUFDRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUMsU0FBQTtBQUNELFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0tBQ2xDO0FBRUQsSUFBQSxPQUFPLGNBQWMsQ0FBQyxXQUF5QixFQUFFLGNBQXdCLEVBQUE7QUFDckUsUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksTUFBTSxZQUFZLDZCQUE2QixFQUFFO0FBQ2pELFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQU0sYUFBQTtZQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBQTtLQUNKO0FBR0QsSUFBQSxPQUFPLGtCQUFrQixDQUFDLFlBQTBCLEVBQUUsV0FBeUIsRUFBRSxjQUF3QixFQUFBO0FBQ3JHLFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7QUFDekIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RCxTQUFBO0tBQ0o7QUFHRDs7QUFFRztJQUNILE9BQU8scUJBQXFCLENBQUMsTUFBb0IsRUFBQTtRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1QsWUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNwQixTQUFBO1FBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxTQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BEO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8sZ0JBQWdCLENBQUMsT0FBZ0IsRUFBQTtRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsT0FBTyxZQUFZLEVBQUUsSUFBSSxDQUFDO0tBQzdCO0lBRUQsT0FBTyxzQkFBc0IsQ0FBQyxPQUF1QixFQUFBO1FBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDVixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELElBQUksT0FBTyxZQUFZLG1CQUFtQixFQUFFO1lBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztBQUMxQyxTQUFBO1FBQ0QsSUFBSSxPQUFPLFlBQVkscUJBQXFCLEVBQUU7WUFDMUMsT0FBTyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQzVDLFNBQUE7UUFDRCxJQUFJLE9BQU8sWUFBWSxxQkFBcUIsRUFBRTtZQUMxQyxPQUFPLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7QUFDNUMsU0FBQTtRQUNELElBQUksT0FBTyxZQUFZLHFCQUFxQixFQUFFO1lBQzFDLE9BQU8sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQTtBQUMzQyxTQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3REO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8sbUJBQW1CLENBQUMsVUFBaUMsRUFBRSxDQUFTLEVBQUE7QUFDbkUsUUFBQSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBMkIsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDWixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtBQUN2QyxTQUFBO0FBQ0QsUUFBQSxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsWUFBQSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUEwQixDQUFDO1lBQzNELElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUN2QixnQkFBQSxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDdkMsYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNiLGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxvQkFBQSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7QUFDL0Msd0JBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDOUQsNEJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0NBQ2xCLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWiw2QkFBQTtBQUNKLHlCQUFBO0FBQU0sNkJBQUE7NEJBQ0gsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNWLHlCQUFBO3dCQUNELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQixxQkFBQTtvQkFDRCxJQUFJLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDN0MsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3RDO0FBRUQsSUFBQSxPQUFPLGtCQUFrQixDQUFDLE1BQXdCLEVBQUUsQ0FBUyxFQUFBO1FBQ3pELElBQUksTUFBTSxZQUFZLHFCQUFxQixFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDbEQsZ0JBQUEsT0FBTyxDQUFDLENBQUM7QUFDWixhQUFBO0FBQ0QsWUFBQSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFNBQUE7S0FDSjtBQUVELElBQUEsT0FBTyxpQkFBaUIsQ0FBQyxVQUFpQyxFQUFFLFdBQW1CLEVBQUUsU0FBaUIsRUFBQTtBQUM5RixRQUFBLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUEyQixDQUFDO1FBQ3ZELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUEwQixDQUFDO1lBQ3JFLElBQUksV0FBVyxLQUFLLFVBQVUsRUFBRTtBQUM1QixnQkFBQSxLQUFLLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDNUMsYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRTtvQkFDdkQsU0FBUztBQUNaLGlCQUFBO2dCQUNELElBQUksS0FBSyxHQUFHLFNBQVMsRUFBRTtvQkFDbkIsU0FBUztBQUNaLGlCQUFBO0FBQ0QsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RELG9CQUFBLElBQUksU0FBUyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ3pCLE1BQU07QUFDVCxxQkFBQTtBQUNELG9CQUFBLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxXQUFXLEVBQUU7d0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDakIscUJBQUE7b0JBQ0QsSUFBSSxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ2xELGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUM7S0FDekI7QUFFRDs7Ozs7QUFLRztJQUNILE9BQU8sbUJBQW1CLENBQUMsR0FBZ0IsRUFBQTtRQUN2QyxJQUFJLEdBQUcsWUFBWSxnQkFBZ0IsRUFBRTtBQUNqQyxZQUFBLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDbEMsU0FBQTtBQUNELFFBQUEsT0FBTyxDQUFDLENBQUM7S0FDWjtBQUVEOzs7O0FBSUc7QUFDSCxJQUFBLE9BQU8sa0JBQWtCLENBQUMsR0FBZ0IsRUFBRSxNQUFjLEVBQUE7UUFDdEQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDO0tBQ25EO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8sZUFBZSxDQUF5QixHQUF1QixFQUFBO1FBQ2xFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztBQUMzQixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQU0sQ0FBQyxDQUFDO0FBQ3BDLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8sZ0JBQWdCLENBQUMsSUFBMkIsRUFBQTtRQUMvQyxNQUFNLEtBQUssR0FBeUMsRUFBRSxDQUFDO0FBQ3ZELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7QUFDdkQsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBa0MsQ0FBQyxDQUFBO0FBQ2hFLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELE9BQU8sY0FBYyxDQUFDLElBQVksRUFBQTtRQUM5QixJQUFJLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QixZQUFBLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFHRCxPQUFPLGFBQWEsQ0FBQyxJQUFZLEVBQUE7UUFDN0IsT0FBTyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdFO0FBR0QsSUFBQSxPQUFPLGVBQWUsQ0FBQyxNQUEwQixFQUFFLFNBQTJDLEVBQUE7QUFDMUYsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDL0IsZ0JBQUEsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQ7Ozs7QUFJRztJQUNILE9BQU8sY0FBYyxDQUFDLEdBQVksRUFBQTtBQUM5QixRQUFBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksWUFBWSxzQkFBc0IsQ0FBMkIsQ0FBQztLQUN4RztBQUNKOztBQ3puREssTUFBTyx1QkFBd0IsU0FBUSwwQkFBMEIsQ0FBQTtBQUNuRSxJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNmO0FBRUQsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxFQUFDLEVBQUMsV0FBVyxFQUFDLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLEtBQUssRUFBQyxHQUFHLFdBQVcsQ0FBQztRQUN6RSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixRQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlGLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFLO1lBQ2IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLFlBQUEsVUFBVSxFQUFFLENBQUM7QUFDakIsU0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELEtBQUssR0FBQTtBQUNELFFBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzlDO0FBRUQsSUFBQSxRQUFRLENBQUMsS0FBa0MsRUFBQTtBQUN2QyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBQTtLQUNKO0FBQ0o7O01DckJZLGlCQUFpQixDQUFBO0FBQzFCLElBQUEsV0FBQSxHQUFBO0FBQ0ksUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7S0FDOUM7QUFFRCxJQUFBLGNBQWMsQ0FBaUI7QUFDL0IsSUFBQSxzQkFBc0IsQ0FBeUI7QUFDL0MsSUFBQSxpQkFBaUIsQ0FBQyxPQUFpRSxFQUFBO0FBQy9FLFFBQUEsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDN0MsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN4QyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELFFBQUEsSUFBSSxVQUFVLEVBQUU7WUFDWixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVELFNBQUE7QUFBTSxhQUFBO1lBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRSxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM1QztBQUVEOztBQUVFO0FBQ0YsSUFBQSxPQUFPLHdCQUF3QixDQUFDLFlBQXlCLEVBQUUsVUFBdUIsRUFBQTtRQUM5RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUN4QixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDakMsU0FBQTtBQUNELFFBQUEsT0FBTyxxQkFBcUIsQ0FBQztLQUNoQztBQUVEOzs7O0FBSUc7SUFDSCxPQUFPLGNBQWMsQ0FBQyxPQUE2QixFQUFBO0FBQy9DLFFBQUEsSUFBSSxPQUFPLEVBQUU7QUFDVCxZQUFBLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVELFNBQUE7QUFDRCxRQUFBLE9BQU8sRUFBRSxDQUFDO0tBRWI7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsT0FBNkIsRUFBRSxLQUEyQixFQUFBO1FBQzlFLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDVixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUU7QUFDdEMsWUFBQSxPQUFPLE9BQU8sQ0FBQztBQUNsQixTQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN4RDtJQUVELG9CQUFvQixHQUFBO0FBQ2hCLFFBQUEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtBQUMvQixZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFDRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1IsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RSxJQUFJLGVBQWUsR0FBRyxpQkFBaUIsRUFBRTtBQUNyQyxZQUFBLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QixZQUFBLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUN0QyxZQUFBLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNwQyxZQUFBLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztBQUN0QyxZQUFBLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNwQyxZQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLFNBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRTlDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUEyQixDQUFDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDcEQsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUF5QixDQUFDO1FBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDaEQsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFekosUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEYsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQ7OztBQUdHO0FBQ0ssSUFBQSxxQkFBcUIsQ0FBQyxHQUFZLEVBQUE7UUFDdEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNuRSxRQUFBLE9BQU8sSUFBSSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUM7S0FDdEM7SUFFTyxzQkFBc0IsR0FBQTtBQUMxQixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ3hDLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQ3pDLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNmLFlBQUEsT0FBTyxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZO0FBQ3hDLG1CQUFBLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVc7QUFDdEMsbUJBQUEsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVTtBQUNwQyxtQkFBQSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDN0MsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7O0FBR0c7SUFDSyxjQUFjLEdBQUE7QUFDbEIsUUFBQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ25FLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLFFBQUEsS0FBSyxlQUFlLEdBQUcsaUJBQWlCLEdBQUc7QUFDdkMsWUFBQSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsWUFBQSxLQUFLLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxZQUFBLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzlCLFlBQUEsS0FBSyxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDaEMsWUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUM5QixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLFNBQUE7QUFDRCxRQUFBLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1IsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBQ25DLFNBQUE7UUFDRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbEIsUUFBQSxLQUFLLEtBQUssQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFDbEYsWUFBQSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN6QyxZQUFBLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzlCLFlBQUEsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDakMsU0FBQTtRQUNELEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFbEIsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ25JLFlBQUEsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixTQUFBO1FBQ0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3JCO0lBRUQsWUFBWSxHQUFBO1FBQ1IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDN0Q7SUFFRCxhQUFhLEdBQUE7QUFDVCxRQUFBLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7S0FDdEM7QUFFSixDQUFBO01BRVksY0FBYyxDQUFBO0FBQ3ZCLElBQUEsSUFBSSxZQUFZLEdBQUE7UUFDWixPQUFPLElBQUksQ0FBQyxhQUE0QixDQUFDO0tBQzVDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBeUIsRUFBQTtBQUN0QyxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0tBQzlCO0FBRUQsSUFBQSxJQUFJLFVBQVUsR0FBQTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQTBCLENBQUM7S0FDMUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUF5QixFQUFBO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7S0FDNUI7QUFDRCxJQUFBLGNBQWMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM5QyxJQUFBLGlCQUFpQixDQUFVO0FBQzNCLElBQUEsV0FBVyxDQUFVO0FBQ3JCLElBQUEsZUFBZSxDQUFVO0FBQ3pCLElBQUEsU0FBUyxDQUFVO0FBQ25CLElBQUEsSUFBSSxTQUFTLEdBQUE7UUFDVCxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDNUUsUUFBQSxPQUFPLEVBQUUsaUJBQWlCLEtBQUssZUFBZSxLQUFLLGlCQUFpQixLQUFLLGVBQWUsSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztLQUMzSDtBQUNPLElBQUEsYUFBYSxDQUFzQjtBQUNuQyxJQUFBLFdBQVcsQ0FBc0I7QUFDekMsSUFBQSxxQkFBcUIsQ0FBd0I7QUFDN0MsSUFBQSxLQUFLLENBQXlCO0FBQzlCLElBQUEsWUFBWSxDQUF1QjtBQUNuQyxJQUFBLGFBQWEsQ0FBZ0M7SUFDN0MsUUFBUSxHQUFZLElBQUksQ0FBQztBQUN6QixJQUFBLGVBQWUsQ0FBMkI7QUFDMUMsSUFBQSxTQUFTLENBQWU7O0lBRXhCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztBQUNwQyxJQUFBLFdBQUEsR0FBQTtRQUNJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNoQjtJQUNELEtBQUssR0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDekI7QUFFRCxJQUFBLFFBQVEsQ0FBQyxLQUFxQixFQUFBO1FBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzlCO0lBQ0QsVUFBVSxDQUFDLFlBQXFCLEVBQUUsV0FBbUIsRUFBQTtBQUNqRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxQyxRQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxRQUFRLENBQUMsR0FBWSxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNuQyxRQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ25DLFFBQUEsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ3pDLFFBQUEsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3JDLFFBQUEsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3JDLFFBQUEsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUN6RCxRQUFBLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDakQsUUFBQSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDN0MsUUFBQSxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDekMsUUFBQSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDL0IsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUdKLENBQUE7TUFJWSxjQUFjLENBQUE7QUFDdkIsSUFBQSxZQUFZLENBQVc7QUFDdkIsSUFBQSxXQUFXLENBQVU7QUFDckIsSUFBQSxVQUFVLENBQVc7QUFDckIsSUFBQSxTQUFTLENBQVU7SUFDbkIsUUFBUSxHQUFZLElBQUksQ0FBQztJQUN6QixRQUFRLENBQUMsT0FBZ0IsRUFBRSxNQUFjLEVBQUE7QUFDckMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0tBQzdCO0lBQ0QsTUFBTSxDQUFDLE9BQWdCLEVBQUUsTUFBYyxFQUFBO0FBQ25DLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztLQUMzQjtJQUVPLFNBQVMsR0FBQTtBQUNiLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFDO0lBRU8sT0FBTyxHQUFBO0FBQ1gsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFFRCxTQUFTLEdBQUE7UUFDTCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2xCO0lBRU8sT0FBTyxDQUFDLE9BQWdCLEVBQUUsTUFBYyxFQUFBO1FBQzVDLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtZQUNoQyxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtBQUNyQyxnQkFBQSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6RCxhQUFBO0FBQ0QsWUFBQSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsWUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzlCLFNBQUE7YUFBTSxJQUFJLE9BQU8sWUFBWSxhQUFhLEVBQUU7QUFDekMsWUFBQSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3pCLGdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsYUFBQTtBQUNELFlBQUEsSUFBSSxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsYUFBQTtBQUFNLGlCQUFBLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RCLGdCQUFBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixTQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7QUFDRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDdkMsUUFBQSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDckMsUUFBQSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDbkMsUUFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVKLENBQUE7TUFFWSxjQUFjLENBQUE7SUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxHQUFnQixFQUFFLE1BQWMsRUFBRSxTQUFnQyxFQUFFLE1BQWMsRUFBQTtBQUN6RyxRQUFBLElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQ2hELFlBQUEsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEUsU0FBQTtBQUFNLGFBQUEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7QUFDekQsWUFBQSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ2YsZ0JBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0FBQzFDLGFBQUE7WUFDRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBeUIsQ0FBQztZQUN4RSxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ25JLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNyRSxTQUFBO0FBQ0QsUUFBQSxTQUFTO0FBQ1QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7S0FDckM7QUFFTyxJQUFBLE9BQU8sbUJBQW1CLENBQUMsR0FBZ0IsRUFBRSxNQUFjLEVBQUUsTUFBMkIsRUFBQTtRQUM1RixJQUFJLEdBQUcsWUFBWSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLGdCQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQTBCLENBQUM7Z0JBQ3ZELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDYixJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEVBQUU7QUFDbEQsb0JBQUEsS0FBSyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUN6QyxTQUFTO0FBQ1osaUJBQUE7QUFDRCxnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsb0JBQUEsSUFBSSxLQUFLLEtBQUssTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRTtBQUN6RCx3QkFBQSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTs7QUFFaEYsd0JBQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ2hFLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLDRCQUFBLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO0FBQ3JDLGdDQUFBLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6Qiw2QkFBQTtBQUNKLHlCQUFBO0FBQ0Qsd0JBQUEsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7d0JBQ2YsT0FBTztBQUNILDRCQUFBLE1BQU0sRUFBRSxXQUFXOzRCQUNuQixJQUFJO3lCQUNQLENBQUE7QUFDSixxQkFBQTtBQUNELG9CQUFBLEtBQUssRUFBRSxDQUFDO29CQUNSLElBQUksSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUNsRCxpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQUEsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDaEYsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2QsZ0JBQUEsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLGFBQUE7WUFDRCxPQUFPO0FBQ0gsZ0JBQUEsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLElBQUk7YUFDUCxDQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtLQUMvQjtBQUNKOztBQ2xZSyxNQUFPLGVBQWdCLFNBQVEsV0FBMEIsQ0FBQTtBQUMzRCxJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDbEMsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pCLFNBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNyQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRUQsSUFBQSxXQUFXLENBQUMsQ0FBZSxFQUFBO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDaEQ7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLE9BQU87QUFDSCxZQUFBLElBQUksRUFBRSxLQUFLO0FBQ1gsWUFBQSxLQUFLLEVBQUU7QUFDSCxnQkFBQSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO0FBQy9DLGFBQUE7U0FDSixDQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7QUFDRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSixDQUFBO0FBRUssTUFBTyxlQUFnQixTQUFRLGNBQTZCLENBQUE7QUFDOUQsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO0tBQ3pCO0lBRUQsYUFBYSxDQUFDLElBQXFDLEVBQUUsU0FBNEIsRUFBQTtBQUM3RSxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ3pDLFFBQUEsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNsQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDL0MsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQztBQUM5QyxRQUFBLE9BQU8sVUFBVSxDQUFDO0tBQ3JCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sb0JBQXFCLFNBQVEsZ0JBQWlDLENBQUE7QUFDdkUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO1FBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4SjtJQUVELEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxFQUFBO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVKOztBQ3BESyxNQUFnQixzQkFBMEQsU0FBUSxxQkFBd0IsQ0FBQTtBQUM1RyxJQUFBLFNBQVMsQ0FBa0I7QUFDM0IsSUFBQSxPQUFPLENBQWtCO0lBQ3pCLEtBQUssR0FBWSxLQUFLLENBQUM7QUFFdkIsSUFBQSxXQUFBLENBQXNCLElBQVksRUFBQTtRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDWixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQUs7QUFDNUIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDdEIsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLE1BQUs7QUFDN0IsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDdEIsU0FBQyxDQUFDLENBQUE7S0FDTDtBQUNKLENBQUE7QUFFSyxNQUFnQiwyQkFBOEQsU0FBUSwwQkFBNkIsQ0FBQTtBQUNySCxJQUFBLGNBQWMsQ0FBMkM7QUFDNUQsQ0FBQTtBQUVLLE1BQU8sa0JBQW1CLFNBQVEsc0JBQXdDLENBQUE7QUFDNUUsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztLQUN2QztJQUVELGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNqRSxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsUUFBQSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVELElBQUEsU0FBUyxDQUFDLFdBQXdCLEVBQUE7UUFDOUIsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFBQztTQUN4RCxDQUFBO0tBQ0o7QUFFRCxJQUFBLEtBQUssQ0FBQyxJQUFhLEVBQUE7QUFDZixRQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDMUI7QUFDSixDQUFBO0FBRUssTUFBTyx1QkFBd0IsU0FBUSwyQkFBK0MsQ0FBQTtBQUN4RixJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzdELFFBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9HLFFBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUM1RixRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQXlCLENBQUM7O1FBRXhILElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtBQUNoRixZQUFBLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUN0QyxTQUFBLENBQUMsQ0FBQztBQUNILFFBQUEsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RixXQUFXLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUM7QUFDbkgsUUFBQSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRTtBQUNoRCxnQkFBQSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXO2dCQUM5QixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDbkIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25CLFFBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbkMsZ0JBQUEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBVztnQkFDOUIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25CLGFBQUEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMxQztJQUVELFdBQVcsQ0FBQyxHQUFzQixFQUFFLFFBQWtCLEVBQUE7UUFDbEQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0IsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO0FBQy9CLFFBQUEsTUFBTSxVQUFVLEdBQUdOLDBCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sU0FBUyxHQUFHLENBQUcsRUFBQSxLQUFLLENBQUMsVUFBVSxDQUFBLENBQUEsRUFBSSxVQUFVLENBQUEsQ0FBRSxDQUFDO0FBQ3RELFFBQUEsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0UsUUFBQSxNQUFNLElBQUksR0FBUyxFQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUE7QUFDL0csUUFBQSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzlGO0lBRUQsU0FBUyxDQUFDLEdBQXNCLEVBQUUsUUFBa0IsRUFBQTs7S0FFbkQ7SUFFRCxLQUFLLEdBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFlBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDNUMsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSixDQUFBO0FBT0ssTUFBTyxxQkFBc0IsU0FBUSxjQUFnQyxDQUFBO0FBQ3ZFLElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLGNBQWMsQ0FBQztLQUNsQztJQUVELGFBQWEsQ0FBQyxJQUF3QyxFQUFFLFNBQTRCLEVBQUE7QUFDaEYsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBeUIsQ0FBQztBQUM3QyxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUM1QyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDL0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQy9DLFFBQUEsT0FBTyxVQUFVLENBQUM7S0FDckI7QUFDSjs7TUNoSVksWUFBWSxDQUFBO0lBQ3JCLE9BQU8saUJBQWlCLENBQUMsR0FBc0IsRUFBRSxVQUFzQyxFQUFFLGFBQXlDLEVBQUUsR0FBd0UsRUFBQTtRQUN4TSxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUF5QixDQUFDO0FBQ3hHLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFBLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFpQyxDQUFDO1lBQzdELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFlBQUEsSUFBSSxPQUFPLEVBQUU7QUFDVCxnQkFBQSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV0QyxnQkFBQSxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQXNDLENBQUM7QUFDakYsZ0JBQUEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsZ0JBQUEsVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNULGNBQWMsRUFBdUIsT0FBTyxDQUFDLE1BQU07b0JBQ25ELFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUN4QixvQkFBQSxpQkFBaUIsRUFBRSxpQkFBaUI7QUFDdkMsaUJBQUEsQ0FBQyxDQUFDO0FBQ04sYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFlBQUEsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUM7QUFDckQsWUFBQSxNQUFNLEVBQUMsaUJBQWlCLEVBQUMsR0FBRyxHQUFHLENBQUM7WUFDaEMsZ0JBQWdCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsWUFBQSxJQUFJLFVBQVUsRUFBRTtBQUNaLGdCQUFBLE1BQU0sRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUN2RCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFVBQVUsRUFBRTtvQkFDL0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyRCxpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFDLENBQUM7QUFDekYsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDakIsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFBLE1BQU0sRUFBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBQyxHQUFHLGNBQWMsQ0FBQztBQUNsRSxRQUFBLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcscUJBQXFCLENBQUM7O0FBRy9DLFFBQUEsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7OztBQUd0RCxZQUFBLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUMsZ0JBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3JELGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxvQkFBQSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUM7QUFDckQsb0JBQUEsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLG9CQUFBLElBQUksVUFBVSxFQUFFO3dCQUNaLE1BQU0sRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNuQyx3QkFBQSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7QUFDbEUsNEJBQUEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEUseUJBQUE7QUFDSixxQkFBQTtBQUNELG9CQUFBLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFDLENBQUM7QUFDekYsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtLQUVKO0FBRUo7O0FDdEVLLE1BQU8sY0FBZSxTQUFRLFdBQXNCLENBQUE7QUFDdEQsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDZCxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7S0FDaEM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLFNBQTRCLEVBQUE7QUFDakUsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDL0MsYUFBQTtTQUNKLENBQUE7S0FDSjtJQUVELEtBQUssR0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLG1CQUFvQixTQUFRLGdCQUFnQyxDQUFBO0FBQ3JFLElBQUEsTUFBTSxDQUFDLENBQWMsRUFBQTtRQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEMsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7S0FDbEc7SUFFRCxLQUFLLEdBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSixDQUFBO0FBRUssTUFBTyxjQUFlLFNBQVEsY0FBeUIsQ0FBQTtBQUN6RCxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxNQUFNLENBQUM7S0FDMUI7SUFFRCxhQUFhLENBQUMsSUFBaUMsRUFBRSxTQUE0QixFQUFBO0FBQ3pFLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNqQyxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFrQixDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFDSjs7QUNsRUQ7O0FBRUc7QUFDRyxNQUFPLGVBQWdCLFNBQVEsc0JBQXFDLENBQUE7QUFDdEUsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUVELGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBNEIsRUFBQTtBQUNqRSxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBQSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVELElBQUEsU0FBUyxDQUFDLFdBQXdCLEVBQUE7QUFDOUIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDOUM7QUFFRCxJQUFBLFVBQVUsQ0FBQyxPQUFlLEVBQUE7UUFDdEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2xCLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFBO0FBQzVCLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN2QjtBQUNKLENBQUE7QUFFSyxNQUFPLG9CQUFxQixTQUFRLDJCQUE0QyxDQUFBO0FBQ2xGLElBQUEsTUFBTSxDQUFDLENBQWMsRUFBQTtBQUNqQixRQUFBLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDN0QsUUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0csUUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBQzVGLFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBeUIsQ0FBQzs7UUFFeEgsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQ2hGLFlBQUEsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVO0FBQ3RDLFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVGLFdBQVcsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQztBQUNuSCxRQUFBLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMzRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQ2hELGdCQUFBLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLFdBQVc7Z0JBQzlCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNuQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkIsUUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuQyxnQkFBQSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXO2dCQUM5QixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkIsYUFBQSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCLEVBQUUsUUFBa0IsRUFBQTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsUUFBQSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN2QyxRQUFBLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pFLFFBQUEsTUFBTSxJQUFJLEdBQVMsRUFBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBQyxDQUFBO0FBQy9HLFFBQUEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxRjtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsWUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM1QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKOztBQ2pGSyxNQUFPLGtCQUFtQixTQUFRLGVBQXdDLENBQUE7SUFDNUUsVUFBVSxHQUFZLElBQUksQ0FBQztBQUNuQixJQUFBLGFBQWEsQ0FBNEI7SUFDekMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUV0QixJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDM0MsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0QixRQUFBLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQUs7QUFDMUIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixTQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsa0JBQWtCLEdBQUE7QUFDZCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQThCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDM0MsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVELElBQUEsU0FBUyxDQUFDLE9BQW9CLEVBQUE7UUFDMUIsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNmLFlBQUEsS0FBSyxFQUFFO0FBQ0gsZ0JBQUEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3BDLGFBQUE7U0FDSixDQUFBO0tBQ0o7QUFFRCxJQUFBLEtBQUssQ0FBQyxJQUFhLEVBQUE7QUFDZixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVELElBQUEsUUFBUSxDQUFDLEdBQVcsRUFBQTtBQUNoQixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztLQUN6QjtJQUVELFFBQVEsR0FBQTtBQUNKLFFBQUEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztLQUMxQjtJQUVELFdBQVcsQ0FBQyxTQUE0QixFQUFFLEdBQWEsRUFBQTtRQUNuRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUMxQixRQUFBLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0STtJQUVELGtCQUFrQixHQUFBO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELFNBQUE7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHWSwwQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3JELFlBQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUNyQixZQUFBLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZO0FBQ3JDLFlBQUEsTUFBTSxFQUFFLEVBQUU7QUFDVixZQUFBLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxRQUFRO0FBQ3ZCLFNBQUEsQ0FBQyxDQUFDO0tBQ047QUFDSixDQUFBO0FBRUssTUFBTyw4QkFBK0IsU0FBUSxzQkFBc0IsQ0FBQTtBQUN0RSxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7QUFDakIsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBNkIsQ0FBQztRQUN0RCxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxrQkFBa0IsQ0FBQyxDQUFhLEVBQUE7QUFDNUIsUUFBQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3hCLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxHQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbEMsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsU0FBQTtLQUNKO0FBRU8sSUFBQSxnQkFBZ0IsQ0FBQyxHQUFzQixFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUE7QUFDakUsUUFBQSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztRQUN6QyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakIsUUFBQSxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN2QjtBQUNKLENBQUE7QUFHSyxNQUFPLHlCQUEwQixTQUFRLGNBQXVDLENBQUE7QUFDbEYsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssa0JBQWtCLENBQUM7S0FDdEM7SUFFRCxhQUFhLENBQUMsSUFBK0MsRUFBRSxTQUE0QixFQUFBO0FBQ3ZGLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3JDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDO0FBQzNDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQzVDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQy9DLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hDLFFBQUEsT0FBTyxHQUFHLENBQUM7S0FDZDtBQUNKOztBQzdISyxNQUFPLGdCQUFpQixTQUFRLGVBQWtDLENBQUE7O0FBRXBFLElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtBQUMzQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQTBCLG9CQUFvQixFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ2pFLFlBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ3BELGFBQUEsQ0FBQyxDQUFDO0FBQ1AsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNsQyxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDNUIsU0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELGtCQUFrQixHQUFBO0FBQ2QsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RELFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3JDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFRCxJQUFBLGNBQWMsQ0FBQyxHQUFpQixFQUFBO0FBQzVCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBS04sZUFBTyxDQUFDLFFBQVEsRUFBRTtZQUMxRSxPQUFPO0FBQ1YsU0FBQTs7QUFFRCxRQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN2RSxPQUFPO0FBQ1YsU0FBQTtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDekMsUUFBQSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDOztBQUV2QixRQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtBQUNqRCxZQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUUsWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBRztnQkFDaEIsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3JDLGlCQUFBO0FBQ0wsYUFBQyxDQUFDLENBQUM7QUFDTixTQUFBO0tBQ0o7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDL0MsYUFBQTtTQUNKLENBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxRQUFRLENBQUMsR0FBUSxFQUFBO0FBQ2IsUUFBQSxJQUFJLE9BQU8sR0FBRyxLQUFLLFNBQVMsRUFBRTtBQUMxQixZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUM1QixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUNsQyxTQUFBO0tBQ0o7SUFFRCxRQUFRLEdBQUE7QUFDSixRQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDcEIsWUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0FBQ2xDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLEVBQUUsQ0FBQztBQUNiLFNBQUE7S0FDSjtBQUNKLENBQUE7QUFHSyxNQUFPLDRCQUE2QixTQUFRLGdCQUFnQixDQUFBO0FBQzlELElBQUEsV0FBQSxDQUFZLE9BQWdCLEVBQUE7UUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBRUQsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBMkIsQ0FBQztBQUNqRCxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO0FBQ2hDLFlBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pJLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakksU0FBQTtLQUNKO0FBQ0osQ0FBQTtBQUVLLE1BQU8sdUJBQXdCLFNBQVEsY0FBaUMsQ0FBQTtBQUMxRSxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxnQkFBZ0IsQ0FBQTtLQUNuQztJQUVELGFBQWEsQ0FBQyxJQUF5QyxFQUFFLFNBQTRCLEVBQUE7QUFDakYsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBMEIsQ0FBQztBQUM5QyxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFFRCxrQkFBa0IsQ0FBQyxJQUF1QixFQUFFLEtBQXdCLEVBQUE7UUFDaEUsTUFBTSxZQUFZLEdBQXNCLElBQUksQ0FBQztBQUM3QyxRQUFBLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7O0FBS2xELFFBQUEsWUFBWSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3JDLFFBQUEsWUFBWSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQy9CLFFBQUEsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUM7QUFDdEQsUUFBQSxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7QUFDL0MsUUFBQSxPQUFPLFlBQVksQ0FBQztLQUN2QjtBQUVKOztBQ3JJSyxNQUFPLGVBQWdCLFNBQVEsc0JBQXdDLENBQUE7QUFDekUsSUFBQSxXQUFBLEdBQUE7UUFDSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztLQUN2QztJQUVELGtCQUFrQixHQUFBO0FBQ2QsUUFBQSxPQUFPLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEQ7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDL0MsYUFBQTtTQUNKLENBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtRQUNmLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDakQ7QUFHRCxJQUFBLFFBQVEsQ0FBQyxHQUFrQixFQUFBO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBR04sMEJBQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxRQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUMvQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkIsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRCxRQUFBLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsUUFBUSxHQUFBO0FBQ0osUUFBQSxPQUFPLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNoRDtJQUVELFFBQVEsR0FBQTtBQUNKLFFBQUEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxHQUFHLEVBQUU7QUFDTCxZQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2QsU0FBQTtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBR0EsMEJBQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0MsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFlBQUEsT0FBTyxTQUFTLENBQUM7QUFDcEIsU0FBQTtBQUNELFFBQUEsT0FBTyxFQUFFLENBQUM7S0FDYjtBQUVKLENBQUE7QUFHSyxNQUFPLDJCQUE0QixTQUFRLHVCQUF3QyxDQUFBO0FBQ3JGLElBQUEsV0FBQSxDQUFZLE9BQXdCLEVBQUE7UUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFlBQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEQsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFFSixDQUFBO0FBRUssTUFBTyxzQkFBdUIsU0FBUSxzQkFBd0MsQ0FBQTtBQUNoRixJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxlQUFlLENBQUE7S0FDbEM7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFNBQTRCLEVBQUE7QUFDakQsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBeUIsQ0FBQztBQUM3QyxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUMsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0lBRUQsa0JBQWtCLENBQUMsSUFBc0IsRUFBRSxLQUF1QixFQUFBO1FBQzlELE1BQU0sWUFBWSxHQUFxQixJQUFJLENBQUM7QUFDNUMsUUFBQSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDOzs7QUFHbEQsUUFBQSxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDdkMsUUFBQSxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDdkMsUUFBQSxZQUFZLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7OztBQUduQyxRQUFBLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUN2QyxRQUFBLFlBQVksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEcsUUFBQSxZQUFZLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xHLFFBQUEsT0FBTyxZQUFZLENBQUM7S0FDdkI7QUFHSjs7QUMzR0ssTUFBTyx1QkFBd0IsU0FBUSx1QkFBOEMsQ0FBQTtBQUN2RixJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDdEMsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdkIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ3ZDLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLFNBQUMsQ0FBQyxDQUFDO0tBQ047QUFFRCxJQUFBLEtBQUssQ0FBQyxJQUFhLEVBQUE7UUFDZixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7S0FDekQ7SUFFRCxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLFNBQTRCLEVBQUE7QUFDakUsUUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ25CLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakQ7QUFFRCxJQUFBLFNBQVMsQ0FBQyxXQUF3QixFQUFBO1FBQzlCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUNwQyxhQUFBO1NBQ0osQ0FBQTtLQUNKO0FBRUosQ0FBQTtBQUdLLE1BQU8sNEJBQTZCLFNBQVEsdUJBQWdELENBQUE7QUFDOUYsSUFBQSxRQUFRLENBQVk7QUFHcEIsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQzlCO0lBRU8sMEJBQTBCLEdBQUE7UUFDOUIsTUFBTSxPQUFPLEdBQW1DLEVBQUUsQ0FBQztRQUNuRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBMEIsQ0FBQztBQUN6RyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsWUFBQSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUEwQixDQUFDO1lBQzdILElBQUksVUFBVSxLQUFLLGNBQWMsRUFBRTtBQUMvQixnQkFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBaUMsQ0FBQyxDQUFDO0FBQzlFLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQztLQUNsQjtBQUdELElBQUEsa0JBQWtCLENBQUMsQ0FBYyxFQUFBO1FBQzdCLE1BQU0sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsUUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNyRSxRQUFBLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDM0QsWUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsWUFBQSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDekQsZ0JBQUEsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7b0JBQzFFLE1BQU0sVUFBVSxHQUFvQixFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sV0FBVyxHQUFvQixFQUFFLENBQUM7QUFDeEMsb0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0Msd0JBQUEsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLHdCQUFBLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7QUFFNUMsd0JBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBQyxDQUFDLENBQUM7d0JBQ3hFLFdBQVcsQ0FBQyxJQUFJLENBQUM7NEJBQ2IsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQzVDLDRCQUFBLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLFNBQVM7QUFDbEMseUJBQUEsQ0FBQyxDQUFDO3dCQUNILFVBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ1osQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ25CLDRCQUFBLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDO0FBQ2hFLHlCQUFBLENBQUMsQ0FBQzt3QkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDOzRCQUNiLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSztBQUM1Qyw0QkFBQSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQztBQUNoRSx5QkFBQSxDQUFDLENBQUM7QUFDTixxQkFBQTtvQkFDRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNELG9CQUFBLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hFLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDckgsT0FBTztBQUNWLGlCQUFBO0FBQ0osYUFBQTtBQUNELFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLGdCQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM5SyxhQUFBO0FBQ0osU0FBQTtLQUVKO0lBR0QsU0FBUyxDQUFDLEdBQXNCLEVBQUUsUUFBa0IsRUFBQTtLQUVuRDtJQUVELEtBQUssR0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksNEJBQTRCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxZQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFNBQUE7QUFDRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sdUJBQXdCLFNBQVEsc0JBQTZDLENBQUE7QUFDdEYsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssWUFBWSxDQUFBO0tBQy9CO0lBRUQsYUFBYSxDQUFDLElBQVMsRUFBRSxTQUE0QixFQUFBO0FBQ2pELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQThCLENBQUM7QUFDbEQsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBRUo7O0FDM0hLLE1BQU8sZ0JBQWlCLFNBQVEsZUFBa0MsQ0FBQTs7SUFFcEUsTUFBTSxHQUFrQixJQUFJLENBQUM7SUFDN0IsVUFBVSxHQUFZLElBQUksQ0FBQztBQUUzQixJQUFBLFdBQUEsR0FBQTtRQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDOztBQUVyQyxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDekI7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN6QyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRUQsSUFBQSxTQUFTLENBQUMsT0FBb0IsRUFBQTtRQUMxQixPQUFPO0FBQ0gsWUFBQSxJQUFJLEVBQUUsY0FBYztBQUNwQixZQUFBLEtBQUssRUFBRTtBQUNILGdCQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7QUFDM0MsYUFBQTtTQUNKLENBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxTQUFTLENBQUMsR0FBa0IsRUFBQTtBQUN4QixRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDdEIsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN4QixZQUFBLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBcUIsS0FBSTtBQUN6QyxnQkFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckIsSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO29CQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEIsaUJBQUE7QUFDTCxhQUFDLENBQUE7QUFDRCxZQUFBLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELFNBQUE7S0FDSjtJQUVELE9BQU8sR0FBQTtRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNuQjtBQUVELElBQUEsUUFBUSxDQUFDLEdBQVEsRUFBQTtBQUNiLFFBQUEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ3pCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFhLENBQUM7S0FDbEM7SUFFRCxRQUFRLEdBQUE7QUFDSixRQUFBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7S0FDekI7QUFDSixDQUFBO0FBRUssTUFBTyxxQkFBc0IsU0FBUSxzQkFBc0IsQ0FBQTtBQUM3RCxJQUFBLE1BQU0sQ0FBQyxDQUFjLEVBQUE7UUFDakIsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUM7QUFDeEQsUUFBQSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtBQUNoQyxZQUFBLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDdkMsWUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDZCxPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtnQkFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hHLGFBQUE7QUFDRCxZQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1SyxTQUFBO0FBQ0QsUUFBQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzVCLFlBQUEsSUFBSSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxRQUFRLENBQUM7WUFDdEIsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUMsRUFBRTtvQkFDbEYsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTO29CQUNoQixDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU07QUFDaEIsaUJBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNuQixZQUFBLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2QsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUMsRUFBRTtvQkFDbEYsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTO29CQUNoQixDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU07QUFDaEIsaUJBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0QixTQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRCxJQUFBLGtCQUFrQixDQUFDLENBQWEsRUFBQTtBQUM1QixRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEdBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNsQyxZQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEcsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNyRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixTQUFBO0tB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eEIsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEdBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUUsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNyRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENB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LElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVPLElBQUEsV0FBVyxDQUFDLElBQVksRUFBQTtBQUM1QixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLHVCQUF1QixD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Q0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RCxTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDckIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7QUFDcEIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBQTtRQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksVUFBVSxHQUFHLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFOztZQUV2QyxVQUFVLElBQUksU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7QUFHNUMsU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxD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LFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxJQUFJLEVBQUU7QUFDTixZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkIsU0FBQTtBQUNELFFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDUixZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDckIsU0FBQTtLQUVKO0FBRUQsSUFBQSxJQUFJLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFBO0FBQ3BELFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNuQjtBQUVKOztBQ25iRDs7O0FBR0U7U0FDYyxpQkFBaUIsQ0FBQyxHQUFZLEVBQUUsT0FBb0IsRUFBRSxTQUE0QixFQUFBO0FBQzlGLElBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7UUFDMUIsT0FBTztBQUNWLEtBQUE7SUFDRCxJQUFJLEdBQUcsWUFBWSxZQUFZLEVBQUU7QUFDN0IsUUFBQSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLFFBQUEsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3pDLE9BQU87QUFDVixLQUFBO0lBQ0QsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFO0FBQzlCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsWUFBQSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxTQUFBO0FBQ0osS0FBQTtBQUNMLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQTJCLEVBQUE7SUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE9BQU07QUFDVCxLQUFBO0FBQ0QsSUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQW9DLENBQUMsQ0FBQTtBQUMzRCxJQUFBLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUV6Qzs7QUNKQTs7QUFFRztNQUNVLGNBQWMsQ0FBQTtBQUNILElBQUEsT0FBQSxDQUFBO0FBQThCLElBQUEsU0FBQSxDQUFBO0lBQWxELFdBQW9CLENBQUEsT0FBb0IsRUFBVSxTQUE0QixFQUFBO1FBQTFELElBQU8sQ0FBQSxPQUFBLEdBQVAsT0FBTyxDQUFhO1FBQVUsSUFBUyxDQUFBLFNBQUEsR0FBVCxTQUFTLENBQW1CO0tBQUs7QUFFbkYsSUFBQSxlQUFlLENBQUMsUUFBeUIsRUFBQTs7UUFFckMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFLO0FBQ3pCLFlBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQixZQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBeUIsQ0FBQztBQUM1RyxZQUFBLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUQsWUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNyQixTQUFDLENBQUMsQ0FBQTtLQUNMO0lBRUQsY0FBYyxDQUFDLE9BQWdCLEVBQUUsUUFBZ0IsRUFBQTtBQUM3QyxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBS0Msa0JBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ2hDLFNBQUE7UUFDRCxJQUFJLE9BQU8sWUFBWSxtQkFBbUIsRUFBRTtBQUN4QyxZQUFBLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQTZCLENBQUM7QUFDcEcsWUFBQSxPQUFPLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQzs7QUFFL0IsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLElBQUksT0FBTyxZQUFZLGdCQUFnQixFQUFFO0FBQ3JDLGdCQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBK0IsQ0FBQyxDQUFDO0FBQ25FLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsYUFBQTtBQUNELFlBQUEsT0FBTyxNQUFNLENBQUM7QUFFakIsU0FBQTthQUFNLElBQUksT0FBTyxZQUFZLHFCQUFxQixFQUFFO0FBQ2pELFlBQUEsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksTUFBTSxHQUFzQyxJQUFJLENBQUM7QUFDckQsWUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUtBLGtCQUFVLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUtBLGtCQUFVLENBQUMsS0FBSyxFQUFFO0FBQ3JGLGdCQUFBLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxnQkFBQSxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUM3QixnQkFBQSxNQUFNLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBK0IsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULG9CQUFBLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzdCLG9CQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsaUJBQUE7QUFDRCxnQkFBQSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtBQUM1QixvQkFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLGlCQUFBO0FBQ0osYUFBQTtZQUNELElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCxnQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDcEMsYUFBQTtBQUNELFlBQUEsT0FBTyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDL0IsWUFBQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUNoRCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLG1CQUFtQixHQUFHLEtBQTRCLENBQUM7Z0JBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUE2QixDQUFDO2dCQUN4RyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNkLFNBQVM7QUFDWixpQkFBQTtBQUNELGdCQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDaEMsYUFBQTtBQUNELFlBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixZQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2pCLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSCxnQkFBZ0IsQ0FBQyxJQUFzQixFQUFFLE1BQTZCLEVBQUE7QUFDbEUsUUFBQSxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztBQUM5QyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxLQUFLLFlBQVksa0JBQWtCLEVBQUU7Z0JBQ3JDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFDckIsb0JBQUEsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0MsaUJBQUE7QUFDSixhQUFBO2lCQUNJLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRTtBQUNuQyxnQkFBQSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO0FBQ3JCLG9CQUFBLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNDLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztLQUMzRDtBQUlEOzs7OztBQUtHO0FBQ0gsSUFBQSxxQkFBcUIsQ0FBQyxNQUE2QixFQUFFLFNBQTJCLEVBQUUsYUFBa0MsRUFBQTtBQUNoSCxRQUFBLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7UUFFdkMsTUFBTSxjQUFjLEdBQXlDLEVBQUUsQ0FBQztBQUNoRSxRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUF1QyxLQUFVO0FBQ3ZFLFlBQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QixZQUFBLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDekUsYUFBQTtZQUNELElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEMsZ0JBQUEsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELGlCQUFBO0FBQ0osYUFBQTtBQUFNLGlCQUFBO2dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3JELGFBQUE7QUFDTCxTQUFDLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixRQUFBLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUNyRCxRQUFBLE9BQU8sUUFBUSxFQUFFO0FBQ2IsWUFBQSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQWtCLENBQUM7QUFDbEQsWUFBQSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9JLFlBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxnQkFBQSxJQUFJLFFBQVEsRUFBRTtvQkFDVixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsaUJBQUE7Z0JBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUN4QixhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNuQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0IsU0FBUztBQUNaLGFBQUE7QUFDRCxZQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0MsYUFBQTtZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDLFlBQUEsSUFBSSxFQUFFLEVBQUU7O0FBRUosZ0JBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUIsYUFBQTtBQUNELFlBQUEsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLFNBQUE7QUFDRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLFlBQUEsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBa0MsQ0FBQztZQUN6RSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQzs7WUFFOUcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7O1lBRTNDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixZQUFBLGNBQWMsR0FBRyxjQUFjLEdBQUcsYUFBYSxHQUFHLGFBQWEsR0FBRyxjQUFjLENBQUM7WUFDakYsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1lBQzlELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFlBQUEsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlFLGFBQUE7O0FBRUQsWUFBQSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0MsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFrQixDQUFDO0FBQ25FLFlBQUEsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2QyxZQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLFlBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNuQyxTQUFBO0FBQ0QsUUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0FBRUQ7O0FBRUc7SUFDSCxxQkFBcUIsQ0FBQyxPQUFlLEVBQUUsYUFBcUIsRUFBRSxXQUE2QixFQUFFLGdCQUF1QyxFQUFFLGNBQTZDLEVBQUE7O0FBRS9LLFFBQUEsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O1FBRXRDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtBQUNuQixZQUFBLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN0QyxTQUFBO0FBQ0QsUUFBQSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUMxQyxZQUFBLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsU0FBQTtBQUFNLGFBQUEsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxPQUFPLEVBQUU7QUFDaEQsWUFBQSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzVFLE9BQU8sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMvQixTQUFBO0FBQU0sYUFBQSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxhQUFhLEtBQUssT0FBTyxHQUFHLENBQUMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFO0FBQ3hELGdCQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2pCLGFBQUE7WUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFTLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNqQixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxNQUFNLENBQUM7QUFDakIsU0FBQTtLQUNKO0FBRUQ7Ozs7O0FBS0c7QUFDSyxJQUFBLGVBQWUsQ0FBQyxNQUFvQixFQUFFLEtBQWEsRUFBRSxVQUFrQixFQUFBO1FBQzNFLElBQUksTUFBTSxZQUFZLGtCQUFrQixFQUFFO1lBQ3RDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsZ0JBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzFCLGdCQUFBLEtBQUssSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNsQyxhQUFBO0FBQ0QsWUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDN0IsU0FBQTthQUFNLElBQUksTUFBTSxZQUFZLGdCQUFnQixFQUFFO1lBQzNDLElBQUksTUFBTSxZQUFZLHFCQUFxQixFQUFFO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsb0JBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3RGLGlCQUFBO2dCQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQixnQkFBQSxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDdkMsYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNiLG9CQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQztBQUNuQyxpQkFBQTtnQkFDRCxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2QsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7O0FBRUc7QUFDSyxJQUFBLG1CQUFtQixDQUFDLFFBQXNCLEVBQUE7UUFDOUMsSUFBSSxRQUFRLFlBQVksZ0JBQWdCLEVBQUU7WUFDdEMsSUFBSSxRQUFRLFlBQVkscUJBQXFCLEVBQUU7QUFDM0MsZ0JBQUEsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxPQUFPLENBQUMsQ0FBQztBQUNaLGFBQUE7QUFDSixTQUFBO2FBQU0sSUFBSSxRQUFRLFlBQVksa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxnQkFBQSxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFBO0FBQ0QsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQzdCO0FBR0QsSUFBQSx3QkFBd0IsQ0FBQyxJQUF3QixFQUFBO0FBQzdDLFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUE0QixDQUFDO1FBQzNHLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUNwQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFO0FBQzlCLGdCQUFBLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFDckIsb0JBQUEsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuRCxpQkFBQTtBQUNKLGFBQUE7aUJBQU0sSUFBSSxLQUFLLFlBQVksa0JBQWtCLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDcEIsb0JBQUEsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRCxpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDekIsYUFBQTtBQUNKLFNBQUE7QUFFRCxRQUFBLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztRQUUxRCxJQUFJLElBQUksWUFBWSxzQkFBc0IsRUFBRTs7QUFFeEMsWUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ25CLGdCQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUN4QyxnQkFBQSxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixnQkFBQSxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QixnQkFBQSxNQUFNLGFBQWEsR0FBUyxJQUFLLENBQUMsS0FBNkIsQ0FBQztBQUNoRSxnQkFBQSxRQUFRLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFrQixDQUFDO2dCQUNqRCxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pGLGdCQUFBLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsZ0JBQUEsV0FBVyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDN0QsYUFBQTtBQUNELFlBQUEsTUFBTSxLQUFLLEdBQVMsSUFBSyxDQUFDLEtBQXlCLENBQUM7QUFDcEQsWUFBQSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxZQUFBLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDNUMsSUFBSSxJQUFJLFlBQVksc0JBQXNCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUU7QUFDcEYsZ0JBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO0FBQ3RELGdCQUFBLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUMxRCxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RSxhQUFBO0FBQ0QsWUFBQSxXQUFXLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUM3RCxTQUFBO0FBQ0QsUUFBQSxPQUFPLGlCQUFpQixDQUFDO0tBQzVCO0lBR0QsYUFBYSxDQUFDLE1BQW9CLEVBQUUsVUFBd0IsRUFBRSxVQUFrQixFQUFFLFNBQWtCLEVBQUUsV0FBb0IsRUFBQTtRQUN0SCxJQUFJLE1BQU0sWUFBWSxnQkFBZ0IsRUFBRTtZQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsSUFBSSxNQUFNLFlBQVkscUJBQXFCLEVBQUU7QUFDM0UsZ0JBQUEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRixhQUFBO1lBQ0QsSUFBSSxNQUFNLFlBQVkseUJBQXlCLEVBQUU7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNyRCxhQUFBO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0csZ0JBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDbEYsYUFBQTtZQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QyxTQUFBO2FBQU0sSUFBSSxNQUFNLFlBQVksdUJBQXVCLEVBQUU7QUFDbEQsWUFBQSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0tBQzVCO0lBRUQsYUFBYSxDQUFDLE1BQTZCLEVBQUUsVUFBd0IsRUFBRSxVQUFrQixFQUFFLFNBQWtCLEVBQUUsV0FBb0IsRUFBQTtRQUMvSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDakIsUUFBQSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUEyQixDQUFDO0FBQzFELFFBQUEsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLFFBQVEsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUM5QyxJQUFJLFFBQVEsR0FBRyxVQUFVLEVBQUU7QUFDdkIsZ0JBQUEsSUFBSSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNULGlCQUFBO2dCQUNELE1BQU07QUFDVCxhQUFBO0FBQ0osU0FBQTs7QUFFRCxRQUFBLENBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDOztRQUVuRixDQUFDLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1IsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlDLFNBQUE7QUFFRCxRQUFBLFNBQVMsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEIsUUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUMvRDtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLDZCQUE2QixDQUFDLE1BQTZCLEVBQUUsQ0FBUyxFQUFFLFNBQWtCLEVBQUE7QUFDOUYsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxFQUFFO0FBQ3RCLFlBQUEsT0FBTyxDQUFDLENBQUM7QUFDWixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzlELE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDZCxTQUFBO0FBQ0QsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNaO0FBRUQ7Ozs7O0FBS0c7SUFDSywwQkFBMEIsQ0FBQyxNQUE2QixFQUFFLFVBQXdCLEVBQUUsQ0FBUyxFQUFFLFdBQW9CLEVBQUUsU0FBa0IsRUFBQTtRQUMzSSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O0FBRXRDLFlBQUEsSUFBSSxJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDbEQsZ0JBQUEsQ0FBQyxFQUFFLENBQUM7QUFDUCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDMUUsWUFBQSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUMvRCxnQkFBQSxDQUFDLEVBQUUsQ0FBQztBQUNQLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLENBQUMsRUFBRSxDQUFDO0FBQ1AsYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO0FBSUgsWUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDcEUsZ0JBQUEsQ0FBQyxFQUFFLENBQUM7QUFDUCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxDQUFDLENBQUM7S0FDWjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLHNCQUFzQixDQUFDLEdBQVcsRUFBQTtRQUN0QyxPQUFPLCtDQUErQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7QUFHTyxJQUFBLHlCQUF5QixDQUFDLEdBQVcsRUFBQTtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDNUM7QUFFRDs7OztBQUlHO0FBQ0ssSUFBQSwrQkFBK0IsQ0FBQyxNQUFvQixFQUFBOztRQUV4RCxJQUFJLE1BQU0sWUFBWSxxQkFBcUIsRUFBRTtBQUN6QyxZQUFBLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLGdCQUFBLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsaUJBQWlCLENBQUMsTUFBaUMsRUFBRSxVQUFrQixFQUFBO1FBQ25FLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtZQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFDN0MsU0FBQTtBQUNELFFBQUEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQUU7QUFDaEMsWUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7QUFDbEQsWUFBQSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0MsWUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ3BELFNBQUE7QUFBTSxhQUFBO1lBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO0FBQy9DLFNBQUE7S0FDSjtBQUVEOztBQUVHO0FBQ0gsSUFBQSx3QkFBd0IsQ0FBQyxNQUErQixFQUFFLFVBQWtCLEVBQUUsU0FBa0IsRUFBRSxXQUFvQixFQUFBO0FBQ2xILFFBQUEsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQTRCLENBQUM7UUFDN0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsWUFBQSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRTtBQUNuQyxvQkFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2SixvQkFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLHdCQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFLakMscUJBQUE7QUFDRCxvQkFBQSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDbkIsTUFBTTtBQUNULGlCQUFBO0FBQU0scUJBQUE7QUFDSCxvQkFBQSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLG9CQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsaUJBQUE7O2dCQUVELElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQzlDLEVBQUUsR0FBRyxJQUFJLENBQUM7b0JBQ1YsTUFBTTtBQUNULGlCQUFBO0FBQ0osYUFBQTtpQkFBTSxJQUFJLEtBQUssWUFBWSx1QkFBdUIsRUFBRTtnQkFDakQsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxFQUFFO0FBQ25DLG9CQUFBLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUksb0JBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCx3QkFBQSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLHFCQUFBO0FBQ0Qsb0JBQUEsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ25CLE1BQU07QUFDVCxpQkFBQTtBQUFNLHFCQUFBO0FBQ0gsb0JBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixvQkFBQSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLGlCQUFBO0FBQ0osYUFBQTtBQUNELFlBQUEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3pCLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM5QyxTQUFBO0FBQ0QsUUFBQSxXQUFXLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsUUFBQSxXQUFXLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztLQUNoRjtBQUVEOzs7QUFHRztBQUNILElBQUEsNkJBQTZCLENBQUMsR0FBWSxFQUFBO1FBQ3RDLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRTtBQUM5QixZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxHQUFHLENBQUMsVUFBVSxHQUFHQSxrQkFBVSxDQUFDLElBQUksQ0FBQztLQUNwQztBQUVELElBQUEsZUFBZSxDQUFDLEdBQVksRUFBQTtRQUN4QixHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFO0FBQzlCLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRCxJQUFBLFdBQVcsQ0FBQyxHQUFZLEVBQUE7UUFDcEIsSUFBSSxHQUFHLFlBQVksYUFBYSxFQUFFO0FBQzlCLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFJSjs7TUMxaUJZLFNBQVMsQ0FBQTtJQUVsQixPQUFPLGdCQUFnQixDQUFDLFlBQXlCLEVBQUUsV0FBbUIsRUFBRSxVQUF1QixFQUFFLFNBQWlCLEVBQUUscUJBQW9DLEVBQUE7QUFDcEosUUFBQSxJQUFJLHFCQUFxQixZQUFZLFlBQVksSUFBSSxxQkFBcUIsWUFBWSxlQUFlLEVBQUU7QUFDbkcsWUFBQSxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsWUFBWSxZQUFZLEdBQUcscUJBQXFCLEdBQUcscUJBQXFCLENBQUMsTUFBc0IsQ0FBQztBQUN2SSxZQUFBLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRyxTQUFBO1FBQ0QsSUFBSSxZQUFZLEtBQUssVUFBVSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUsscUJBQXFCLEVBQUU7QUFDOUUsWUFBQSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQzlGLFNBQUE7QUFDRCxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEgsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtBQUN4QyxZQUFBLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakQsWUFBQSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2QyxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxZQUF5QixFQUFFLFdBQW1CLEVBQUUsU0FBaUIsRUFBRSxxQkFBb0MsRUFBQTtBQUM1SCxRQUFBLE1BQU0sS0FBSyxHQUFHO0FBQ1YsWUFBQSxNQUFNLEVBQUUscUJBQXFCO0FBQzdCLFlBQUEsY0FBYyxFQUFFLEtBQUs7QUFDckIsWUFBQSxXQUFXLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtBQUNwQyxZQUFBLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUN0QyxZQUFBLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDbEYsQ0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FFaEI7QUFFRDs7Ozs7OztBQU9HO0lBQ0gsT0FBTyxzQkFBc0IsQ0FBQyxZQUF5QixFQUFFLFdBQW1CLEVBQUUsVUFBdUIsRUFBRSxTQUFpQixFQUFFLEVBQWdCLEVBQUE7UUFDdEksTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLFFBQUEsSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDeEYsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVDLFlBQUEsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pDLFlBQUEsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksYUFBYSxHQUFHLFdBQVcsRUFBRTtnQkFDN0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDL0QsYUFBQTtZQUNELElBQUksYUFBYSxHQUFHLFdBQVcsRUFBRTtnQkFDN0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDL0QsYUFBQTtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQzlHLFlBQUEsYUFBYSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDaEMsWUFBQSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QixZQUFBLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2hDLFlBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUIsTUFBTSxTQUFTLEdBQWlDLEVBQUUsQ0FBQztZQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLFVBQVUsR0FBaUMsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztnQkFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDL0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7b0JBQ2pELE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBZ0IsQ0FBQztvQkFDbEYsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFnQixDQUFDO29CQUNoRixJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTt3QkFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNaLDRCQUFBLE1BQU0sRUFBRSxJQUFJO0FBQ1osNEJBQUEsY0FBYyxFQUFFLElBQUk7QUFDcEIsNEJBQUEsV0FBVyxFQUFFLENBQUM7QUFDZCw0QkFBQSxTQUFTLEVBQUUsQ0FBQztBQUNaLDRCQUFBLGdCQUFnQixFQUFFLEVBQUU7QUFDdkIseUJBQUEsQ0FBQyxDQUFDO0FBQ04scUJBQUE7QUFBTSx5QkFBQTtBQUNILHdCQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9GLHdCQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIscUJBQUE7QUFDSixpQkFBQTtBQUNELGdCQUFBLE1BQU0sUUFBUSxHQUEwQjtBQUNwQyxvQkFBQSxNQUFNLEVBQUUsR0FBRztBQUNYLG9CQUFBLGNBQWMsRUFBRSxLQUFLO0FBQ3JCLG9CQUFBLFdBQVcsRUFBRSxhQUFhO0FBQzFCLG9CQUFBLFNBQVMsRUFBRSxXQUFXO0FBQ3RCLG9CQUFBLGdCQUFnQixFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQ3BDLENBQUM7QUFDRixnQkFBQSxRQUFRLENBQUMsY0FBYyxHQUFHLGFBQWEsS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hGLGdCQUFBLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUIsYUFBQTtBQUNELFlBQUEsTUFBTSxVQUFVLEdBQTBCO0FBQ3RDLGdCQUFBLE1BQU0sRUFBRSxFQUFFO0FBQ1YsZ0JBQUEsY0FBYyxFQUFFLEtBQUs7QUFDckIsZ0JBQUEsV0FBVyxFQUFFLGFBQWE7QUFDMUIsZ0JBQUEsU0FBUyxFQUFFLFdBQVc7QUFDdEIsZ0JBQUEsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUNuQyxDQUFDO0FBQ0YsWUFBQSxVQUFVLENBQUMsY0FBYyxHQUFHLGFBQWEsS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNuSixZQUFBLE9BQU8sVUFBVSxDQUFDO0FBQ3JCLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2xDLFNBQUE7S0FDSjtJQUlPLE9BQU8sdUJBQXVCLENBQUMsT0FBZ0IsRUFBRSxxQkFBb0MsRUFBRSxTQUF1QyxFQUFFLE1BQWMsRUFBQTtRQUNsSixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1YsWUFBQSxTQUFTO0FBQ1osU0FBQTtBQUNELFFBQUEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLE1BQU0sS0FBSyxxQkFBcUIsRUFBRTtZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsWUFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLGdCQUFBLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLGFBQWEsR0FBMEI7QUFDekMsZ0JBQUEsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDZixTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ2IsZ0JBQUEsY0FBYyxFQUFFLEtBQUs7QUFDckIsZ0JBQUEsZ0JBQWdCLEVBQUUsRUFBRTthQUN2QixDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNaLGdCQUFBLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELGFBQUE7QUFDRCxZQUFBLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDekMsWUFBQSxPQUFPLGFBQWEsQ0FBQztBQUN4QixTQUFBO0tBQ0o7SUFJTyxPQUFPLHFCQUFxQixDQUFDLE9BQWdCLEVBQUUscUJBQW9DLEVBQUUsU0FBdUMsRUFBRSxNQUFjLEVBQUE7QUFDaEosUUFBQSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksTUFBTSxLQUFLLHFCQUFxQixFQUFFO0FBQ2xDLFlBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFlBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxnQkFBQSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMxRSxhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsWUFBQSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEYsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE1BQU0sYUFBYSxHQUEwQjtBQUN6QyxnQkFBQSxNQUFNLEVBQUUscUJBQXFCO0FBQzdCLGdCQUFBLFdBQVcsRUFBRSxDQUFDO0FBQ2QsZ0JBQUEsU0FBUyxFQUFFLENBQUM7QUFDWixnQkFBQSxjQUFjLEVBQUUsS0FBSztBQUNyQixnQkFBQSxnQkFBZ0IsRUFBRSxFQUFFO2FBQ3ZCLENBQUM7WUFDRixJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNaLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUN4RCxhQUFBO0FBQ0QsWUFBQSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pDLFlBQUEsT0FBTyxhQUFhLENBQUM7QUFDeEIsU0FBQTtLQUNKO0FBRU8sSUFBQSxPQUFPLGdCQUFnQixDQUFDLE9BQWdCLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBQTtBQUN4RSxRQUFBLE1BQU0sS0FBSyxHQUEwQjtBQUNqQyxZQUFBLE1BQU0sRUFBRSxPQUFPO0FBQ2YsWUFBQSxjQUFjLEVBQUUsS0FBSztBQUNyQixZQUFBLFdBQVcsRUFBRSxLQUFLO0FBQ2xCLFlBQUEsU0FBUyxFQUFFLEdBQUc7QUFDZCxZQUFBLGdCQUFnQixFQUFFLEVBQUU7U0FDdkIsQ0FBQztRQUNGLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtZQUNoQyxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtBQUNyQyxnQkFBQSxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDNUQsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyxhQUFBO0FBRUosU0FBQTthQUFNLElBQUksT0FBTyxZQUFZLGFBQWEsRUFBRTtBQUN6QyxZQUFBLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxnQkFBQSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFTyxPQUFPLG9CQUFvQixDQUFDLGNBQXFDLEVBQUE7QUFDckUsUUFBQSxJQUFJLGNBQWMsQ0FBQyxNQUFNLFlBQVksV0FBVyxFQUFFO0FBQzlDLFlBQUEsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxjQUFjLENBQUM7QUFDbEQsWUFBQSxJQUFJLGNBQWMsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDbkQsZ0JBQUEsY0FBYyxDQUFDLGNBQWMsR0FBRyxXQUFXLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7QUFDdkcsYUFBQTtBQUFNLGlCQUFBO2dCQUNILGNBQWMsQ0FBQyxjQUFjLEdBQUcsV0FBVyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQSxJQUFJLGNBQWMsQ0FBQyxNQUFNLFlBQVksYUFBYSxFQUFFO0FBQ3ZELFlBQUEsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztBQUNyQyxZQUFBLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDOztBQUV6RCxZQUFBLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQixnQkFBQSxJQUFJLGNBQWMsQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDckUsb0JBQUEsY0FBYyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3JDLE9BQU87QUFDVixpQkFBQTtBQUNELGdCQUFBLGNBQWMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUQsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVELFlBQUEsY0FBYyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDNUMsWUFBQSxjQUFjLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUN6QyxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLGNBQWMsSUFBSSxhQUFhLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQztBQUN0SixTQUFBO0tBQ0o7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLFNBQWdDLEVBQUUsU0FBZ0MsRUFBQTtRQUNqRixPQUFPLFNBQVMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDO0tBQ2xKO0FBR0Q7Ozs7QUFJRztJQUNILE9BQU8sd0JBQXdCLENBQUMsY0FBOEIsRUFBQTtBQUMxRCxRQUFBLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUFDO0FBQzNGLFFBQUEsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNqQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUEwQixDQUFDO1FBQ3BGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQTBCLENBQUM7UUFDaEYsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLFlBQVksSUFBSSxVQUFVLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNwSixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkIsWUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRCxZQUFBLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxXQUFrQyxFQUFBO0FBQ3pELFFBQUEsSUFBSSxXQUFXLENBQUMsTUFBTSxZQUFZLFdBQVcsRUFBRTtBQUMzQyxZQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ3RCLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxnQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsZ0JBQUEsSUFBSSxHQUFHLEVBQUU7QUFDTCxvQkFBQSxPQUFPLEdBQUcsQ0FBQztBQUNkLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxPQUFPLGlCQUFpQixDQUFDLFdBQWtDLEVBQUE7QUFDdkQsUUFBQSxJQUFJLFdBQVcsQ0FBQyxNQUFNLFlBQVksV0FBVyxFQUFFO0FBQzNDLFlBQUEsT0FBTyxXQUFXLENBQUM7QUFDdEIsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvRCxnQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsZ0JBQUEsSUFBSSxHQUFHLEVBQUU7QUFDTCxvQkFBQSxPQUFPLEdBQUcsQ0FBQztBQUNkLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFFRDs7OztBQUlFO0FBQ0YsSUFBQSxPQUFPLDhCQUE4QixDQUFDLEtBQTRCLEVBQUUsT0FBK0MsRUFBQTtRQUMvRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDZixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFlBQUEsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzRSxTQUFBO0tBQ0o7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLE9BQU8sdUJBQXVCLENBQUMsS0FBNEIsRUFBRSxHQUFZLEVBQUE7UUFDckUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEtBQUk7WUFDdEQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUN4RCxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2QsYUFBQTtBQUNMLFNBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBRUo7O01DOVNZLFlBQVksQ0FBQTtBQU9ELElBQUEsU0FBQSxDQUFBO0FBQXNDLElBQUEsTUFBQSxDQUFBOzs7QUFKbEQsSUFBQSxZQUFZLENBQXVDO0FBQ25ELElBQUEsb0JBQW9CLENBQThCO0FBQ2xELElBQUEsT0FBTyxDQUFXO0FBQzFCLElBQUEsV0FBVyxDQUFjO0lBQ3pCLFdBQW9CLENBQUEsU0FBNEIsRUFBVSxNQUFxQixFQUFBO1FBQTNELElBQVMsQ0FBQSxTQUFBLEdBQVQsU0FBUyxDQUFtQjtRQUFVLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO0FBQzNFLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0tBQ3pDOztBQUdELElBQUEsWUFBWSxDQUF1RTtBQUNuRixJQUFBLFlBQVksQ0FBWTtBQUV4QixJQUFBLFNBQVMsQ0FBQyxZQUFxQyxFQUFFLFlBQWlELEVBQUUsb0JBQWdELEVBQUUsT0FBZ0IsRUFBQTtBQUVsSyxRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ2pELFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakMsUUFBQSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RHLFFBQUEsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQUs7WUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3pELGdCQUFBLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hFLGdCQUFBLElBQUksVUFBVSxHQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxNQUFNLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xNLGdCQUFBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FFbEM7QUFDRCxnQkFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2QixnQkFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckQsZ0JBQUEsSUFBSSxVQUFVLEVBQUU7QUFDWixvQkFBQSxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3JELGlCQUFBO0FBQ0osYUFBQTtBQUNMLFNBQUMsQ0FBQyxDQUFBO1FBQ0YsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3hCLFlBQUEsVUFBVSxFQUFFLFlBQVk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQ3RCLFNBQUEsQ0FBQyxDQUFBO0FBQ0YsUUFBQSxZQUFZLEVBQUUsQ0FBQztBQUNmLFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3BFLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbkQ7QUFFRCxJQUFBLGdCQUFnQixDQUFDLFlBQStCLEVBQUUsTUFBZ0MsRUFBRSxtQkFBd0MsS0FBSyxFQUFBO0FBQzdILFFBQUEsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztBQUNyQyxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEVBQUU7QUFDekIsWUFBQSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxTQUFBO1FBQ0QsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO0FBQ2xFLFFBQUEsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRTVELElBQUksVUFBVSxHQUFZLGdCQUFnQixDQUFDO1FBQzNDLElBQUksZ0JBQWdCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO0FBQ2pFLFlBQUEsVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLE1BQU0sWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkosU0FBQTtRQUNELElBQUksWUFBWSxZQUFZLGtCQUFrQixFQUFFO0FBQzVDLFlBQUEsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTs7Z0JBRTVCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxZQUFZLFlBQVksMEJBQTBCLEVBQUU7QUFDekYsb0JBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7QUFDN0Isd0JBQUEsWUFBWSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0csd0JBQUEsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDckMscUJBQUE7QUFDSixpQkFBQTtBQUNELGdCQUFBLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFLO0FBQy9CLG9CQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMxQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN6RCxxQkFBQTtBQUNMLGlCQUFDLENBQUMsQ0FBQTtBQUNGLGdCQUFBLE1BQU0sVUFBVSxHQUFnQjtBQUM1QixvQkFBQSxRQUFRLEVBQUUsWUFBWTtBQUN0QixvQkFBQSxVQUFVLEVBQUUsWUFBWTtvQkFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3RCLENBQUE7QUFDRCxnQkFBQSxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hDLGdCQUFBLFlBQVksRUFBRSxDQUFDO0FBQ2xCLGFBQUE7QUFDSixTQUFBO2FBQU0sSUFBSSxZQUFZLFlBQVksZ0JBQWdCLEVBQUU7QUFDakQsWUFBQSxJQUFJLFVBQVUsRUFBRTtBQUNaLGdCQUFBLE1BQU0sVUFBVSxHQUFnQjtBQUM1QixvQkFBQSxRQUFRLEVBQUUsWUFBWTtBQUN0QixvQkFBQSxVQUFVLEVBQUUsTUFBSyxHQUFJO29CQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDdEIsQ0FBQTtBQUNELGdCQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMsYUFBQTs7QUFFRCxZQUFBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQ3pFLE1BQU0sV0FBVyxHQUFHLE9BQXlCLENBQUM7QUFDOUMsZ0JBQUEsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7O0FBRXhDLG9CQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0FBQ25CLHdCQUFBLEdBQUcsRUFBRSxXQUFXO0FBQ2hCLHdCQUFBLE1BQU0sRUFBRSxZQUFZO3dCQUNwQixHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtBQUM1RixxQkFBQSxDQUFDLENBQUM7QUFDTixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBOztRQUVELElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBMEIsQ0FBQztZQUN0RSxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtnQkFDMUMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZHLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtBQUN0QixvQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDekosaUJBQUE7QUFBTSxxQkFBQTtvQkFDSCxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUU7d0JBQzVFLE1BQU0sRUFDRixNQUFNLEVBQ04sSUFBSSxFQUNQLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUF3QixZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0csd0JBQUEsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLHdCQUFBLFdBQVcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ3hCLHdCQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUN6SixxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtpQkFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDdkQsZ0JBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdkssYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDdkcsWUFBQSxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsSUFBSSxZQUFZLFlBQVksdUJBQXVCLEVBQUU7QUFDN0YsZ0JBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUEwQixDQUFDO2dCQUMxRixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7b0JBQ3RCLElBQUksc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLG9CQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMxRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSx3QkFBQSxJQUFJLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7NEJBQ3RDLElBQUksU0FBUyxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtnQ0FDdEUsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLDZCQUFBO0FBQ0oseUJBQUE7QUFDSixxQkFBQTtvQkFDRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BGLG9CQUFBLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFO3dCQUN6RCxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ2pCLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNwQixxQkFBQSxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN4SSxpQkFBQTtBQUNKLGFBQUE7QUFFSixTQUFBO0tBQ0o7QUFFRDs7QUFFRztJQUNILHlCQUF5QixDQUFDLFlBQTBCLEVBQUUsTUFBZ0MsRUFBQTtRQUNsRixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDbEUsUUFBQSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxZQUFZLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN4RyxJQUFJLFlBQVksWUFBWSxrQkFBa0IsRUFBRTtBQUM1QyxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLGdCQUFBLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzFFLGFBQUE7QUFDSixTQUFBO0tBQ0o7SUFFRCxPQUFPLFFBQVEsQ0FBQyxTQUE0QixFQUFFLE1BQXFCLEVBQUUsWUFBMEIsRUFBRSxNQUFnQyxFQUFBO0FBQzdILFFBQUEsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDM0MsUUFBQSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFlBQVksWUFBWSxrQkFBa0IsRUFBRTtBQUM1QyxZQUFBLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFLO0FBQy9CLGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMxQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3pELGlCQUFBO0FBQ0wsYUFBQyxDQUFDLENBQUM7QUFDSCxZQUFBLE1BQU0sVUFBVSxHQUFnQjtBQUM1QixnQkFBQSxRQUFRLEVBQUUsWUFBWTtBQUN0QixnQkFBQSxVQUFVLEVBQUUsWUFBWTtBQUN4QixnQkFBQSxNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTTthQUNULENBQUE7QUFDRCxZQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsWUFBQSxZQUFZLEVBQUUsQ0FBQztBQUNsQixTQUFBO2FBQU0sSUFBSSxZQUFZLFlBQVksZ0JBQWdCLEVBQUU7QUFDakQsWUFBQSxNQUFNLFVBQVUsR0FBZ0I7QUFDNUIsZ0JBQUEsUUFBUSxFQUFFLFlBQVk7QUFDdEIsZ0JBQUEsVUFBVSxFQUFFLE1BQUssR0FBSTtBQUNyQixnQkFBQSxNQUFNLEVBQUUsU0FBUztBQUNqQixnQkFBQSxNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFBO0FBQ0QsWUFBQSxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLFNBQUE7S0FDSjtBQUNKOztNQzNNWSxnQkFBZ0IsQ0FBQTtBQUNMLElBQUEsT0FBQSxDQUFBO0FBQThCLElBQUEsYUFBQSxDQUFBO0lBQWxELFdBQW9CLENBQUEsT0FBb0IsRUFBVSxhQUFnQyxFQUFBO1FBQTlELElBQU8sQ0FBQSxPQUFBLEdBQVAsT0FBTyxDQUFhO1FBQVUsSUFBYSxDQUFBLGFBQUEsR0FBYixhQUFhLENBQW1CO0tBQUs7SUFFdkYsT0FBTyxDQUFDLGNBQW9DLEVBQUUsZUFBZ0MsRUFBQTtBQUMxRSxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3JFLFNBQUE7UUFDRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBK0IsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBOEIsQ0FBQztRQUNsRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBK0IsQ0FBQztRQUM5RSxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBK0IsQ0FBQztBQUNoRixRQUFBLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsY0FBYyxDQUFDO1FBQ2xELElBQUksYUFBYSxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0QsUUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztBQUNwRSxRQUFBLGFBQWEsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDbEUsUUFBQSxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0FBQ2pGLFFBQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO0FBQzNDLFFBQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7QUFDakQsUUFBQSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQW9DLEVBQUUsQ0FBQztBQUN0RCxRQUFBLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekgsUUFBQSxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBSztBQUMxQixZQUFBLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN2RixjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQzNCLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztBQUMvQixZQUFBLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDbkMsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLFlBQVksR0FBRyxDQUFDLElBQThCLEtBQUk7QUFDcEQsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUQsWUFBQSxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7O0FBR3JGLFlBQUEsV0FBVyxDQUFDLDZCQUE2QixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlFLFlBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNCLGdCQUFBLGdCQUFnQixFQUFFLENBQUM7QUFDdEIsYUFBQTtBQUNMLFNBQUMsQ0FBQztRQUdGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksdUJBQXVCLEdBQW9DLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUE2QixDQUFDO0FBQ2xILFFBQUEsT0FBTyx1QkFBdUIsRUFBRTtZQUM1QixJQUFJLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOztnQkFFakwsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7O2dCQUU5SixNQUFNLHVCQUF1QixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDekcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDOztBQUU3RixnQkFBQSxJQUFJLGVBQWUsRUFBRTtvQkFDakIsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2pDLGlCQUFBO0FBQ0QsZ0JBQUEsZ0JBQWdCLEVBQUUsQ0FBQztBQUN0QixhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDdEMsZ0JBQUEsSUFBSSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQ3pCLG9CQUFBLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUE2QixDQUFDO0FBQ2hGLGlCQUFBO0FBQU0scUJBQUE7b0JBQ0gsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFFRCxNQUFNLFFBQVEsR0FBZ0MsRUFBRSxDQUFDO0FBQ2pELFFBQUEsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDMUMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxZQUFBLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hFLFlBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM5QixZQUFBLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFBLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNoRCxZQUFBLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QyxZQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLFlBQUEsY0FBYyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDO0FBQ2hELFlBQUEsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixZQUFBLEtBQUssSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM1RCxZQUFBLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QyxZQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7QUFDekUsWUFBQSxjQUFjLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7O0FBRTNDLFlBQUEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLGNBQWMsRUFBRTtBQUNqRCxnQkFBQSxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUErQixDQUFDO0FBQ3BJLGdCQUFBLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO2dCQUM5QyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNELGdCQUFBLGNBQWMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMzQyxnQkFBQSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUM3RSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQy9ELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLFFBQVEsQ0FBQztLQUNuQjtBQUVPLElBQUEsY0FBYyxDQUFDLElBQWtCLEVBQUE7UUFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUMzQyxZQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUEyQixDQUFDO0FBQzNDLFlBQUEsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUNuQixnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELG9CQUFvQixDQUFDLGNBQW9DLEVBQUUsZUFBZ0MsRUFBQTtRQUN2RixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBK0IsQ0FBQztBQUNoRixRQUFBLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQStCLENBQUM7UUFDcEksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBNkIsQ0FBQztBQUMxRSxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtBQUMvQixZQUFBLGNBQWMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0MsWUFBQSxjQUFjLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDM0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNELFlBQUEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM3RSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQy9ELFNBQUE7UUFDRCxPQUFPLENBQUMsY0FBc0MsQ0FBQyxDQUFBO0tBQ2xEO0lBRUQscUJBQXFCLENBQUMsVUFBb0MsRUFBRSxTQUFlLEVBQUE7QUFDdkUsUUFBQSxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBNkIsQ0FBQztBQUMzSCxRQUFBLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEUsUUFBQSxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN6RCxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7QUFDM0IsWUFBQSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNoRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0tBQzdGO0FBRUQ7Ozs7OztBQU1HO0lBQ0gsYUFBYSxDQUFDLE1BQWdDLEVBQUUsV0FBbUIsRUFBQTtRQUMvRCxJQUFJLE1BQU0sWUFBWSxvQkFBb0IsRUFBRTtZQUN4QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDckQsU0FBQTtRQUNELElBQUksTUFBTSxZQUFZLGlCQUFpQixFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDN0MsU0FBQTtBQUNELFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQStCLENBQUM7UUFDdEgsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxZQUFZLDBCQUEwQixFQUFFO1lBQzlDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNsQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsWUFBQSxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBQSxPQUFPLFNBQVMsRUFBRTs7Z0JBRWQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsZ0JBQUEsSUFBSSxtQkFBbUIsR0FBRyxTQUFTLEdBQUcsV0FBVyxFQUFFO29CQUMvQyxJQUFJLFNBQVMsWUFBWSwwQkFBMEIsRUFBRTs7QUFFakQsd0JBQUEsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQzs7d0JBRTVDLE1BQU0sdUJBQXVCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQzt3QkFDcEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUMvRSx3QkFBQSxJQUFJLGVBQWUsRUFBRTtBQUNqQiw0QkFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3RDLDRCQUFBLFNBQVMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6Qyw0QkFBQSxTQUFTLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IseUJBQUE7QUFBTSw2QkFBQTs0QkFDSCxNQUFNO0FBQ1QseUJBQUE7QUFDSixxQkFBQTtBQUFNLHlCQUFBO3dCQUNILE1BQU07QUFDVCxxQkFBQTtBQUNKLGlCQUFBO0FBQU0scUJBQUE7QUFDSCxvQkFBQSxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLG9CQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEMsb0JBQUEsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ25DLG9CQUFBLFNBQVMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkMsWUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLFlBQUEsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxQixnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ3RCLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixTQUFBO0tBQ0o7QUFFRDs7Ozs7O0FBTUc7SUFDSCxRQUFRLENBQUMsUUFBMkIsRUFBRSxXQUFtQixFQUFBO0FBQ3JELFFBQUEsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQXNCLENBQUM7UUFDakgsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7O1FBRXRDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRWhELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLFlBQVksR0FBRyxXQUFXLEVBQUU7QUFDNUIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDOztBQUU1RCxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDMUcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFvQixHQUFHLENBQUMsT0FBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUUsYUFBQSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELFFBQUEsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN6QixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsU0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsUUFBQSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQWdDLEVBQUUsQ0FBQztBQUNoRCxRQUFBLE9BQU8sT0FBTyxFQUFFO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsWUFBQSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxXQUFXLEVBQUU7Z0JBQzVDLElBQUksT0FBTyxZQUFZLDBCQUEwQixFQUFFOztBQUUvQyxvQkFBQSxNQUFNLFdBQVcsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDOztvQkFFNUMsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN0RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUF5QixDQUFDO0FBQy9GLG9CQUFBLElBQUksTUFBTSxFQUFFO0FBQ1Isd0JBQUEsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQix3QkFBQSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDaEMsd0JBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdEIsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFOzRCQUNyQixNQUFNO0FBQ1QseUJBQUE7QUFDRCx3QkFBQSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkIscUJBQUE7QUFBTSx5QkFBQTt3QkFDSCxNQUFNO0FBQ1QscUJBQUE7QUFDSixpQkFBQTtBQUFNLHFCQUFBO29CQUNILE1BQU07QUFDVCxpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUIsZ0JBQUEsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxnQkFBQSxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakMsZ0JBQUEsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwQyxRQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBRXJDLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtBQUN2QixZQUFBLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDL0QsU0FBQTtBQUNELFFBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxRQUFBLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxPQUFPLGFBQWEsQ0FBQztBQUN4QixTQUFBO0tBQ0o7SUFFRCxnQkFBZ0IsQ0FBQyxNQUE0QixFQUFFLFdBQW1CLEVBQUE7QUFDOUQsUUFBQSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxFQUFFO0FBQ3hFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO1FBQ0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBMEIsQ0FBQztRQUNuRixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM5QyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFpQyxDQUFDO1FBQzNFLE1BQU0sY0FBYyxHQUErQixFQUFFLENBQUM7QUFDdEQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxZQUFBLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFBLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxFQUFFOztnQkFFdEMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDOztnQkFFaEMsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQzlFLGdCQUFBLElBQUksYUFBYSxFQUFFO0FBQ2Ysb0JBQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUNyQyxpQkFBQTtBQUFNLHFCQUFBO0FBQ0gsb0JBQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUM1QixpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxNQUFNLGVBQWUsR0FBRyxVQUF1QyxDQUFDO0FBQ2hFLGdCQUFBLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0IsZ0JBQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN4QyxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNsRCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUFNLGFBQUE7O0FBRUgsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxnQkFBQSxJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUEwQixDQUFDO2dCQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUEyQixDQUFDO0FBQzdELG9CQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsaUJBQUE7QUFDRCxnQkFBQSxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLGFBQUE7QUFDRCxZQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEMsWUFBQSxPQUFPLGNBQWMsQ0FBQztBQUN6QixTQUFBO0tBQ0o7QUFDRDs7Ozs7QUFLRztJQUNLLFdBQVcsQ0FBQyxRQUEyQixFQUFFLE9BQW9DLEVBQUE7QUFDakYsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNqQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQXVCLENBQUM7QUFDL0MsUUFBQSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztBQUN2RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUF5QixDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBeUIsQ0FBQztZQUNqRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE1BQU07QUFDVCxhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNO0FBQ1QsYUFBQTtZQUNELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU07QUFDVCxhQUFBO0FBQ0QsWUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU07QUFDVCxhQUFBO0FBQ0QsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7QUFDdEQsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUM7QUFDakQsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxvQkFBQSxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNsRSx3QkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEMscUJBQUE7O0FBRUQsb0JBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUMsb0JBQUEsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixvQkFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDckIsWUFBQSxLQUFLLE1BQU0sR0FBRyxJQUFJLGNBQWMsRUFBRTtBQUM5QixnQkFBQSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixhQUFBO0FBQ0QsWUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLFNBQUE7S0FDSjtBQUVEOzs7QUFHRztBQUNLLElBQUEsWUFBWSxDQUFDLEdBQXlCLEVBQUE7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbkIsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsYUFBQTtBQUNELFlBQUEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLFNBQUE7QUFDRCxRQUFBLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQy9CO0lBRU8sZ0JBQWdCLENBQUMsU0FBK0IsRUFBRSxTQUFpQixFQUFBO0FBQ3ZFLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUM7QUFDbEUsWUFBQSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBMkIsQ0FBQztBQUN2RCxZQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRTtBQUNsQyxnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUVPLElBQUEsa0JBQWtCLENBQUMsTUFBb0IsRUFBQTtRQUMzQyxJQUFJLE1BQU0sWUFBWSxvQkFBb0IsRUFBRTtZQUN4QyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxnQkFBQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2xELElBQUksVUFBVSxHQUFHLGFBQWEsRUFBRTtvQkFDNUIsYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUM5QixpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLE9BQU8sYUFBYSxDQUFDO0FBQ3hCLFNBQUE7QUFDRCxRQUFBLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDN0I7SUFHRCxxQkFBcUIsQ0FBQyxVQUFpQyxFQUFFLE9BQTZCLEVBQUE7QUFDbEYsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMEIsQ0FBQztBQUMxRCxZQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQzVCLGdCQUFBLE9BQU8sQ0FBQyxDQUFDO0FBQ1osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFBLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3pCLFNBQUE7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ2I7QUFFTyxJQUFBLGFBQWEsQ0FBQyxFQUFxQixFQUFBO1FBQ3ZDLE1BQU0sSUFBSSxHQUFnQyxFQUFFLENBQUM7QUFDN0MsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQztBQUN6RCxZQUFBLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUEwQixDQUFDO0FBQ3BELFlBQUEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUN4QixnQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxNQUFNO0FBQ1QsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSjs7QUM3YkQ7O0FBRUc7TUFDVSxpQkFBaUIsQ0FBQTtBQUdOLElBQUEsY0FBQSxDQUFBO0FBRlosSUFBQSxjQUFjLENBQWdDO0FBQ3RELElBQUEsWUFBWSxHQUF3QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzlELElBQUEsV0FBQSxDQUFvQixjQUE4QixFQUFBO1FBQTlCLElBQWMsQ0FBQSxjQUFBLEdBQWQsY0FBYyxDQUFnQjtLQUFLO0lBRXZELG9CQUFvQixHQUFBO0FBQ2hCLFFBQUEsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ2pILFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7QUFFeEQsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDekMsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksU0FBUyxFQUFFO0FBQ1gsWUFBQSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDeEgsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDaEQsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3hHLFFBQUEsWUFBWSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDdkMsUUFBQSxXQUFXLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUNyQyxRQUFBLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDaEcsUUFBQSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztBQUNuQyxRQUFBLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFFBQUEsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDOztBQUV4SCxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO0tBQ25EO0lBRU8sdUJBQXVCLEdBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkUsU0FBQTtLQUNKO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxLQUE0QixFQUFFLEdBQXdDLEVBQUE7UUFDbkYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1lBRXBELElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ3JELFNBQVM7QUFDWixhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRCxTQUFBO0tBQ0o7QUFFRDs7OztBQUlHO0FBQ0gsSUFBQSxPQUFPLGdCQUFnQixDQUFDLEtBQTRCLEVBQUUsR0FBd0MsRUFBQTtRQUMxRixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0IsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekQsU0FBQTtLQUNKO0FBRUQ7OztBQUdHO0FBQ0ssSUFBQSx3QkFBd0IsQ0FBQyxPQUFvQixFQUFFLE1BQWMsRUFBRSxxQkFBb0MsRUFBQTtBQUN2RyxRQUFBLElBQUksRUFBRSxxQkFBcUIsWUFBWSxZQUFZLENBQUMsRUFBRTtZQUNsRCxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEYsWUFBQSxJQUFJLGdCQUFnQixFQUFFO2dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUNoRTtBQUNELGdCQUFBLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sMEJBQTBCLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLDBCQUEwQixHQUFHLG1CQUFtQixFQUFFO29CQUNsRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQ3RCLHdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUNqRCxxQkFBQTtvQkFDRCxPQUFPO0FBQ0gsd0JBQUEsT0FBTyxFQUFFLG1CQUFtQjtBQUM1Qix3QkFBQSxNQUFNLEVBQUUsQ0FBQztxQkFDWixDQUFDO0FBQ0wsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUM5QjtBQUVEOzs7QUFHRztBQUNLLElBQUEsc0JBQXNCLENBQUMsT0FBb0IsRUFBRSxNQUFjLEVBQUUscUJBQW9DLEVBQUE7QUFDckcsUUFBQSxJQUFJLEVBQUUscUJBQXFCLFlBQVksWUFBWSxDQUFDLEVBQUU7WUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hGLFlBQUEsSUFBSSxnQkFBZ0IsRUFBRTtBQUNsQixnQkFBQSxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RixNQUFNLDBCQUEwQixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDdEYsSUFBSSwwQkFBMEIsR0FBRyxtQkFBbUIsRUFBRTtvQkFDbEQsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25GLElBQUksQ0FBQyxrQkFBa0IsRUFBRTt3QkFDTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ25GLHdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUNqRCxxQkFBQTtvQkFDRCxPQUFPO0FBQ0gsd0JBQUEsT0FBTyxFQUFFLGtCQUFrQjtBQUMzQix3QkFBQSxNQUFNLEVBQUUsQ0FBQztxQkFDWixDQUFDO0FBQ0wsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUM5QjtBQUVKOztNQ3JIWSxhQUFhLENBQUE7QUFRRixJQUFBLGFBQUEsQ0FBQTtBQUEwQyxJQUFBLE1BQUEsQ0FBQTtBQUErQixJQUFBLFlBQUEsQ0FBQTtBQVA3RixJQUFBLGNBQWMsQ0FBaUI7QUFDL0IsSUFBQSxnQkFBZ0IsQ0FBbUI7QUFDbkMsSUFBQSxZQUFZLENBQWU7QUFDM0IsSUFBQSxRQUFRLENBQStCO0FBQ3ZDLElBQUEsWUFBWSxDQUEyQjtBQUN2QyxJQUFBLGNBQWMsQ0FBOEI7QUFDcEMsSUFBQSxXQUFXLENBQWM7QUFDakMsSUFBQSxXQUFBLENBQW9CLGFBQWdDLEVBQVUsTUFBcUIsRUFBVSxZQUFpRCxFQUFBO1FBQTFILElBQWEsQ0FBQSxhQUFBLEdBQWIsYUFBYSxDQUFtQjtRQUFVLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO1FBQVUsSUFBWSxDQUFBLFlBQUEsR0FBWixZQUFZLENBQXFDO1FBQzFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDM0MsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9FLFFBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkYsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pFO0lBRUQsT0FBTyxHQUFBO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUM5QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDL0QsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDOztBQUV0RSxRQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBK0IsQ0FBQztRQUMvRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBZ0MsQ0FBQztBQUNuRixTQUFBOzs7QUFHRCxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXJGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3RCO0FBRUQ7OztBQUdHO0lBQ0gsV0FBVyxHQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RDLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLGNBQWMsSUFBSSxXQUFXLEVBQUU7QUFDL0IsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLGlCQUFpQixDQUFDLEtBQWtDLEVBQUE7QUFDeEQsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7QUFFdkYsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQzs7O1FBR25ELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7O0FBRTVDLFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQy9DLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNsRDtBQUVEOzs7QUFHRztBQUNLLElBQUEsZ0JBQWdCLENBQUMsS0FBa0MsRUFBQTtBQUN2RCxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxFQUNGLEtBQUssRUFDTCxjQUFjLEVBQ2QsUUFBUSxFQUNSLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFDbEMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUMxQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7O0FBRXJCLFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUE7O1FBRWxELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFHN0IsUUFBQSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxZQUFZLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN6QyxZQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsYUFBYSxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBQzVFLFFBQUEsTUFBTSxhQUFhLEdBQUcsWUFBWSxHQUFHLGFBQWEsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO0FBQ3BGLFFBQUEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDdEIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxZQUFBLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEMsZ0JBQUEsTUFBTSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDbkMsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsS0FBSyxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDMUUsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUNuQyxTQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7S0FDdkQ7QUFFRDs7QUFFRztJQUNILDBCQUEwQixHQUFBO0FBQ3RCLFFBQUEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUIsWUFBQSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUlqRSxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsT0FBTyxDQUFDLENBQUM7QUFDWixTQUFBO0tBQ0o7SUFFRCxXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBQTs7QUFFdkIsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQzs7S0FHbkc7SUFFRCxXQUFXLEdBQUE7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDeEI7SUFFRCxlQUFlLEdBQUE7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7QUFFRDs7QUFFRztJQUNLLGdCQUFnQixHQUFBO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEMsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztBQUMxRCxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO1FBQ3RELE1BQU0sa0JBQWtCLEdBQThCLEVBQUUsQ0FBQztBQUN6RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUF1QixDQUFDO0FBQzFELFlBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ2pFLE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdGLFlBQUEsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2hHLFlBQUEsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELGtCQUFrQixDQUFDLElBQUksQ0FBQztnQkFDcEIsV0FBVztBQUNYLGdCQUFBLEtBQUssRUFBRSxXQUFXO0FBQ3JCLGFBQUEsQ0FBQyxDQUFBO0FBQ0wsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztLQUMvRDtBQUNKOztBQzNLRDs7QUFFRztBQUNHLE1BQU8sZUFBZ0IsU0FBUSxXQUEwQixDQUFBO0FBQzNELElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0tBQ3BDO0FBRUQsSUFBQSxLQUFLLENBQUMsSUFBYSxFQUFBO0FBQ2YsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBR0Qsa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxTQUE0QixFQUFBO0FBQ2pFLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTtRQUM5QixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsWUFBQSxLQUFLLEVBQUU7Z0JBQ0gsR0FBRyxJQUFJLENBQUMsS0FBSztBQUNoQixhQUFBO1NBQ0osQ0FBQTtLQUNKO0FBRUosQ0FBQTtBQUVLLE1BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCLENBQUE7SUFDdEQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbEc7QUFFSixDQUFBO0FBRUssTUFBTyxzQkFBdUIsU0FBUSxjQUE2QixDQUFBO0lBQ3JFLGFBQWEsQ0FBQyxJQUFxQyxFQUFFLFNBQTRCLEVBQUE7QUFDN0UsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksT0FBTyxDQUFDO0FBQ3JELFFBQUEsT0FBTyxHQUFHLENBQUM7S0FDZDtBQUVELElBQUEsS0FBSyxDQUFDLElBQVksRUFBQTtRQUNkLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQztLQUM1QjtBQUNKLENBQUE7TUFFWSxhQUFhLENBQUE7SUFDdEIsUUFBUSxHQUFxQixPQUFPLENBQUM7QUFFckMsSUFBQSxLQUFLLENBQUMsSUFBb0IsRUFBQTtBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQzFDLFFBQUEsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQy9CLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSjs7TUMvQ1ksYUFBYSxDQUFBO0FBRUYsSUFBQSxNQUFBLENBQUE7QUFBK0IsSUFBQSxTQUFBLENBQUE7SUFBbkQsV0FBb0IsQ0FBQSxNQUFxQixFQUFVLFNBQTRCLEVBQUE7UUFBM0QsSUFBTSxDQUFBLE1BQUEsR0FBTixNQUFNLENBQWU7UUFBVSxJQUFTLENBQUEsU0FBQSxHQUFULFNBQVMsQ0FBbUI7UUFDM0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3RCO0lBRUQsU0FBUyxHQUEwQixFQUFFLENBQUM7QUFFdEMsSUFBQSxVQUFVLENBQXVELENBQWMsRUFBQTtBQUMzRSxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUMzQyxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQTBCLENBQUMsQ0FBQztLQUNuRDtJQUdPLFdBQVcsR0FBQTtBQUNmLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7QUFDaEMsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7S0FlM0M7QUFFRCxJQUFBLElBQUksQ0FBQyxJQUEyQixFQUFBO0FBQzVCLFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxZQUFZLGVBQWUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQW9CLENBQUM7QUFDcEcsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzlCO0FBRUQsSUFBQSxXQUFXLENBQUMsUUFBeUIsRUFBQTs7Ozs7O0FBTWpDLFFBQUEsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksWUFBWSxtQkFBbUIsQ0FBd0IsQ0FBQztBQUMzRyxRQUFBLFFBQVEsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLFlBQVkscUJBQXFCLENBQTBCLENBQUM7QUFDakgsUUFBQSxRQUFRLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxZQUFZLHFCQUFxQixDQUEwQixDQUFDO0FBQ2pILFFBQUEsUUFBUSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxZQUFZLHFCQUFxQixDQUEwQixDQUFDO0FBQzVILFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtBQUNwQyxZQUFBLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFDbkUsU0FBQTtRQUNELFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN0QixRQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEMsUUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMxQyxRQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDckQsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDaEMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7S0FFbkc7QUFHRCxJQUFBLFdBQVcsQ0FBQyxJQUFTLEVBQUE7QUFDakIsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBYyxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2xDLFlBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JCLGdCQUFBLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCxnQkFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBbUIsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sWUFBWSxhQUFhLEVBQUU7QUFDbEMsb0JBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDckMsb0JBQUEsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUU7O3dCQUUxQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxQyxxQkFBQTtBQUNKLGlCQUFBO0FBQ0QsZ0JBQUEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekMsZ0JBQUEsT0FBTyxPQUFPLENBQUM7QUFDbEIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztJQVFELGdCQUFnQixDQUFDLElBQVMsRUFBRSxPQUFnQixFQUFBO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztBQUNuRCxRQUFBLElBQUksWUFBWSxFQUFFO0FBQ2QsWUFBQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFlBQVksc0JBQXNCLEVBQUU7Z0JBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNoRCxvQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsaUJBQUMsQ0FBQyxDQUFDO0FBQ04sYUFBQTtBQUNKLFNBQUE7S0FDSjtBQUNKOztBQ3hIRDs7QUFFRztNQUNVLGFBQWEsQ0FBQTtBQTJCRixJQUFBLE1BQUEsQ0FBQTtBQUFtQyxJQUFBLGFBQUEsQ0FBQTtBQUFzQyxJQUFBLE1BQUEsQ0FBQTtBQUErQixJQUFBLGFBQUEsQ0FBQTtBQTFCcEgsSUFBQSxXQUFXLENBQVc7O0FBRTlCLElBQUEsWUFBWSxDQUF1Qjs7QUFFbkMsSUFBQSxVQUFVLENBQXVCOztBQUVqQyxJQUFBLGNBQWMsQ0FBc0I7QUFDcEMsSUFBQSxXQUFXLENBQWU7O0FBRTFCLElBQUEsc0JBQXNCLENBQTZEO0FBQ25GLElBQUEsY0FBYyxHQUFzRSxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2xHLElBQUEsVUFBVSxHQUF3QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2hELElBQUEsYUFBYSxHQUF3QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ25ELElBQUEsWUFBWSxHQUF3QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2xELElBQUEsV0FBVyxHQUF3QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2pELElBQUEsZ0JBQWdCLEdBQWlELElBQUksT0FBTyxFQUFFLENBQUM7O0FBRS9FLElBQUEsY0FBYyxDQUF5Qjs7QUFFdkMsSUFBQSxVQUFVLENBQVk7O0FBRXRCLElBQUEsWUFBWSxDQUFZO0lBQ3hCLElBQUksR0FBd0IsRUFBRSxDQUFDO0FBQy9CLElBQUEsY0FBYyxDQUFpQjtBQUMvQixJQUFBLFdBQVcsQ0FBYztBQUV6QixJQUFBLFdBQUEsQ0FBb0IsTUFBeUIsRUFBVSxhQUE0QixFQUFVLE1BQXFCLEVBQVUsYUFBNEIsRUFBQTtRQUFwSSxJQUFNLENBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBbUI7UUFBVSxJQUFhLENBQUEsYUFBQSxHQUFiLGFBQWEsQ0FBZTtRQUFVLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO1FBQVUsSUFBYSxDQUFBLGFBQUEsR0FBYixhQUFhLENBQWU7UUFDcEosSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNwQjtJQUVPLFNBQVMsR0FBQTtBQUNiLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDL0UsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ0osUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBYSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUM3RSxZQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7QUFDSixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQzNFLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ0osUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBYSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNqRixZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ0osUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBYSxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvRSxZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDLENBQUM7QUFDSixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQzlFLFlBQUEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQUs7WUFDMUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7QUFDM0IsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBSztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtBQUM1QixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQUs7WUFDL0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0FBQ3BCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQUs7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7QUFDaEMsU0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBSztZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtBQUM5QixTQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFLO0FBQ3hDLFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ25DLFNBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQUs7QUFDMUMsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDcEMsU0FBQyxDQUFDLENBQUE7S0FDTDtBQUVELElBQUEsV0FBVyxDQUFDLEdBQWlCLEVBQUE7QUFDekIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN2QjtJQUVELGFBQWEsR0FBQTtBQUNULFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7S0FDOUI7QUFFTyxJQUFBLFNBQVMsQ0FBQyxHQUFlLEVBQUE7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsUUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwQyxRQUFBLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFBLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUM5QixRQUFBLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBQyxDQUFDO0FBQy9ELFFBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNsQztBQUVPLElBQUEsT0FBTyxDQUFDLEdBQWUsRUFBQTtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxRQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQzlCLFFBQUEsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztLQUM5QjtBQUVPLElBQUEsU0FBUyxDQUFDLEdBQWUsRUFBQTtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxRQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQzlCLFFBQUEsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFDM0csT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEM7QUFFRDs7OztBQUlHO0lBQ0ssZUFBZSxDQUFDLEdBQWUsRUFBRSxPQUFxQixFQUFBO0FBQzFELFFBQUEsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ3ZELFFBQUEsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0tBQzFEO0lBRU8sYUFBYSxHQUFZLEtBQUssQ0FBQztBQUV2Qzs7O0FBR0c7SUFDSyxPQUFPLEdBQUE7QUFDWCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDOUIsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCxRQUFBLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFFBQUEsYUFBYSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25GLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLEVBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDO0FBQy9FLFlBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDN0IsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNyQixPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCLFlBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDOUIsU0FBQTtLQUNKO0FBR0Q7O0FBRUc7SUFDSCxZQUFZLEdBQUE7QUFDUixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xCLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNsQztBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLGVBQWUsQ0FBQyxHQUFzQixFQUFBOztRQUUxQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEMsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQ3hELFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDNUIsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNuQixZQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztBQUUxQixZQUFBLElBQUksWUFBWSxZQUFZLGNBQWMsSUFBSSxZQUFZLFlBQVksWUFBWSxFQUFFO0FBQ2hGLGdCQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQyxhQUFBOztBQUVELFlBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlELFlBQUEsY0FBYyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFDckMsWUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRyxTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN2QixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3JCLFlBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3ZCLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBNEI7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUEwQjtBQUM5QyxTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDeEQ7QUFFRDs7QUFFRztJQUNLLGtCQUFrQixHQUFBO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUNyQixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN0QyxZQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFlBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDM0IsU0FBQTtBQUNELFFBQUEsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtBQUN4QyxZQUFBLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFlBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUEyQixDQUFDO0FBQ2xELFlBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RixTQUFBO0tBQ0o7SUFFRCxZQUFZLEdBQUE7QUFDUixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDMUI7QUFFRDs7OztBQUlHO0FBQ0ssSUFBQSxVQUFVLENBQUMsR0FBc0IsRUFBQTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDYixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELE1BQU0sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxHQUFHLFVBQVUsQ0FBQzs7QUFFckQsUUFBQSxHQUFHLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBQSxHQUFHLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsRUFBRTtZQUMzRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDWixDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUs7QUFDZixTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDVixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFzQixDQUFDO1FBQ3RELE9BQU87QUFDSCxZQUFBLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixPQUFPO1lBQ1AsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ3RCLFlBQUEsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNqQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUN4QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQy9ELFdBQVcsRUFBRSxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNqRSxDQUFDO0tBRUw7QUFFTyxJQUFBLHNCQUFzQixDQUFDLEdBQXNCLEVBQUE7UUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2IsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7UUFDRCxNQUFNLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsR0FBRyxVQUFVLENBQUM7O0FBRXhFLFFBQUEsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDOzs7QUFHekIsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO0FBQ25ELFlBQUEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFlBQUEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLFNBQUEsRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFBLE9BQU8sYUFBYSxDQUFDO0tBQ3hCO0FBRUQ7OztBQUdHO0FBQ0ssSUFBQSxlQUFlLENBQUMsR0FBc0IsRUFBQTs7UUFFMUMsSUFBSSxjQUFjLEdBQXNDLElBQUksQ0FBQztBQUM3RCxRQUFBLE1BQU0sUUFBUSxHQUFhLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUMsQ0FBQztRQUM1RCxJQUFJLFVBQVUsR0FBZSxNQUFNLENBQUM7QUFDcEMsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUMzQixRQUFBLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7WUFFdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3JCLFNBQUE7UUFDRCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFakUsUUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUcsUUFBQSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7OztBQUd0RCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBVSxJQUFJLENBQUMsY0FBZSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzFHLE1BQU0sV0FBVyxHQUFhLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUN2RyxZQUFBLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRixZQUFBLElBQUksY0FBYyxFQUFFO2dCQUNoQixVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEUsZ0JBQUEsSUFBSSxjQUFjLEVBQUUsVUFBVSxLQUFLLE1BQU0sRUFBRTtvQkFDdkMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUN6QixpQkFBQTtBQUFNLHFCQUFBO0FBQ0gsb0JBQUEsY0FBYyxHQUFHO3dCQUNiLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYzt3QkFDbEMsV0FBVztBQUNYLHdCQUFBLFNBQVMsRUFBRSxLQUFLO3dCQUNoQixNQUFNLEVBQUUsY0FBYyxDQUFDLFVBQVU7cUJBQ3BDLENBQUM7QUFDTCxpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQ0ksYUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzFGLFlBQUEsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBc0IsRUFBRSxxQkFBcUIsQ0FBMEIsQ0FBQzs7OztZQUlwSixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUQsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBYSxFQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzNFLFlBQUEsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUlsRixVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEUsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuQyxZQUFBLElBQUksY0FBYyxFQUFFLFVBQVUsS0FBSyxNQUFNLEVBQUU7Z0JBQ3ZDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDekIsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsY0FBYyxHQUFHO29CQUNiLGFBQWEsRUFBRSxVQUFVLENBQUMsT0FBTztvQkFDakMsV0FBVztBQUNYLG9CQUFBLFNBQVMsRUFBRSxLQUFLO29CQUNoQixNQUFNLEVBQUUsY0FBYyxDQUFDLFVBQVU7aUJBQ3BDLENBQUM7QUFDTCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbkIsWUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4QyxTQUFBOztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtBQUN0RCxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsVUFBVSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RSxTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxZQUFZLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUNuSCxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3hFLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3RDO0FBR08sSUFBQSxrQkFBa0IsQ0FBQyxNQUFnQyxFQUFBO1FBQ3ZELE9BQU8sTUFBTSxZQUFZLHFCQUFxQixDQUFDO0tBQ2xEO0FBRUQ7Ozs7QUFJRztBQUNLLElBQUEsb0JBQW9CLENBQUMsTUFBZ0MsRUFBQTtRQUN6RCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1QsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO1FBQ0QsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLElBQUksQ0FBQztLQUM5RTtBQUVPLElBQUEsb0JBQW9CLENBQUMsTUFBZ0MsRUFBQTtRQUN6RCxPQUFPLE1BQU0sWUFBWSxzQkFBc0IsQ0FBQztLQUNuRDtBQUVEOztBQUVHO0FBQ0ssSUFBQSxvQkFBb0IsQ0FBQyxTQUEwQyxFQUFFLFNBQTBDLEVBQUUsUUFBOEMsRUFBQTtBQUMvSixRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEYsUUFBQSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RGLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9HLFFBQUEsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEtBQXFCLEtBQUk7QUFDckUsWUFBQSxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtnQkFDekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQsZ0JBQUEsVUFBVSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDNUIsZ0JBQUEsVUFBVSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFDcEMsZ0JBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsYUFBQTtBQUNMLFNBQUMsQ0FBQztBQUNGLFFBQUEsZUFBZSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDeEQsUUFBQSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxRQUFBLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3pEO0lBR0QsZUFBZSxHQUFtQixFQUFFLENBQUM7QUFFckM7Ozs7QUFJRztBQUNILElBQUEsWUFBWSxDQUFDLFlBQXlCLEVBQUE7UUFDbEMsSUFBSSxZQUFZLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQyxPQUFPO0FBQ1YsU0FBQTtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RCxRQUFBLGNBQWMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBRXJDLFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUYsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDOUYsUUFBQSxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQXFCLEVBQUUsS0FBcUIsS0FBSTtBQUNyRSxZQUFBLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxFQUFFO2dCQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsZ0JBQUEsVUFBVSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFDakMsZ0JBQUEsVUFBVSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFDcEMsZ0JBQUEsVUFBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCLGdCQUFBLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLGFBQUE7QUFDTCxTQUFDLENBQUM7QUFDRixRQUFBLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUMsUUFBQSxlQUFlLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTNDLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7O0tBRXJDO0FBRUQ7O0FBRUc7QUFDSyxJQUFBLGdCQUFnQixDQUFDLEdBQWUsRUFBQTtRQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLSyxlQUFPLENBQUMsSUFBSSxFQUFFO1lBQzNDLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUMvRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFzQixDQUFDO1lBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlELFlBQUEsY0FBYyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFDckMsWUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRS9GLFNBQUE7UUFDRCxNQUFNLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ25FLFFBQUEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTs7O1lBR3JHLElBQUksSUFBSSxDQUFDLGNBQWMsWUFBWSxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLEVBQUU7Z0JBQ3ZGLE1BQU0sU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELGdCQUFBLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQ2hDLGdCQUFBLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLGdCQUFBLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUM1QyxnQkFBQSxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDdkYsT0FBTztBQUNWLGlCQUFBO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pJLGdCQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN0QyxnQkFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUMzQixnQkFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsT0FBTztBQUNWLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QjtBQUVEOztBQUVHO0FBQ0ssSUFBQSxtQkFBbUIsQ0FBQyxHQUFlLEVBQUE7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsUUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQzs7UUFFcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxRQUFBLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7QUFDN0YsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLE9BQU87QUFDVixTQUFBO2FBQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRTtBQUNyRSxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkUsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsSUFBSSxPQUFPLEVBQUU7QUFDVCxZQUFBLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNsQyxZQUFBLFFBQVEsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN2QyxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEcsWUFBQSxJQUFJLEdBQUcsRUFBRTtnQkFDTCxPQUFNO0FBQ1QsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsU0FBQTtLQUNKO0FBRUQ7Ozs7OztBQU1HO0FBQ0ssSUFBQSxnQkFBZ0IsQ0FBQyxZQUEwQixFQUFFLE1BQWdCLEVBQUUsTUFBZ0IsRUFBQTs7O0FBR25GLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUNoRCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7QUFDL0MsU0FBQTtBQUNELFFBQUEsTUFBTSxnQkFBZ0IsR0FBUztZQUMzQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSztBQUM5QixZQUFBLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDaEMsWUFBQSxRQUFRLEVBQUUsQ0FBQztBQUNYLFlBQUEsU0FBUyxFQUFFLENBQUM7U0FDZixDQUFDO1FBQ0YsSUFBSSxZQUFZLFlBQVksb0JBQW9CLEVBQUU7WUFDOUMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRSxTQUFBO1FBQ0QsSUFBSSxZQUFZLFlBQVksZ0JBQWdCLEVBQUU7WUFDMUMsSUFBSSxVQUFVLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQzdELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPO0FBQ0gsb0JBQUEsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLE1BQU07QUFDTixvQkFBQSxrQkFBa0IsRUFBRSxnQkFBZ0I7aUJBQ3ZDLENBQUM7QUFDTCxhQUFBO0FBQ0osU0FBQTthQUFNLElBQUksWUFBWSxZQUFZLGtCQUFrQixFQUFFO1lBQ25ELElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzdELGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMxQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLG9CQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7d0JBQzNDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztxQkFDeEIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNYLG9CQUFBLElBQUksR0FBRyxFQUFFO0FBQ0wsd0JBQUEsT0FBTyxHQUFHLENBQUM7QUFDZCxxQkFBQTtBQUNKLGlCQUFBOztnQkFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBR08sSUFBQSxvQkFBb0IsQ0FBQyxZQUFrQyxFQUFFLE1BQWdCLEVBQUUsUUFBa0IsRUFBQTtBQUNqRyxRQUFBLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUEwQixDQUFDOzs7QUFHdkQsUUFBQSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3hCLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9DLGdCQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE1BQU0sZ0JBQWdCLEdBQVM7WUFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxZQUFBLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFDOUIsWUFBQSxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQ2hDLFlBQUEsUUFBUSxFQUFFLENBQUM7QUFDWCxZQUFBLFNBQVMsRUFBRSxDQUFDO1NBQ2YsQ0FBQztBQUNGLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekcsWUFBQSxJQUFJLEdBQUcsRUFBRTtBQUNMLGdCQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2QsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFHRDs7Ozs7QUFLRztBQUNLLElBQUEsa0JBQWtCLENBQUMsWUFBZ0MsRUFBRSxNQUFnQixFQUFFLFFBQWtCLEVBQUE7UUFDN0YsTUFBTSxnQkFBZ0IsR0FBYSxFQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUE7UUFDekcsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RSxRQUFBLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEUsSUFBSSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQzVELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtBQUN0QixTQUFBLENBQUMsQ0FBQyxDQUFBOztBQUVILFFBQUEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRSxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsWUFBQSxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNqQixNQUFNO0FBQ1QsYUFBQTtBQUNELFlBQUEsSUFBSSxjQUFjLENBQUMsTUFBTSxZQUFZLGtCQUFrQixFQUFFO0FBQ3JELGdCQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZGLGdCQUFBLElBQUksR0FBRyxFQUFFO0FBQ0wsb0JBQUEsT0FBTyxHQUFHLENBQUM7QUFDZCxpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQSxJQUFJLGNBQWMsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUU7b0JBQ3BDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVCxpQkFBQTtBQUFNLHFCQUFBLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUN2RSxvQkFBQSxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDakMsaUJBQUE7QUFBTSxxQkFBQTtvQkFDSCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxpQkFBQTtBQUNELGdCQUFBLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPO29CQUNILE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtvQkFDN0Isa0JBQWtCLEVBQUUsY0FBYyxDQUFDLElBQUk7b0JBQ3ZDLE1BQU07aUJBQ1QsQ0FBQztBQUNMLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBR0Q7O0FBRUc7QUFDSyxJQUFBLGFBQWEsQ0FBQyxHQUFzQixFQUFBO0FBQ3hDLFFBQUEsTUFBTSxNQUFNLEdBQWEsRUFBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBQyxDQUFDO1FBQzFELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7OztRQUcxRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUF5QixDQUFDO1lBQ25FLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRSxJQUFJLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNYLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUN6QyxnQkFBQSxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQzNCLGdCQUFBLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU07YUFDaEMsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDUixNQUFNO0FBQ1QsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLENBQUMsR0FBRyxDQUFDLEtBQUssWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRTdELFFBQUEsTUFBTSxVQUFVLEdBQWEsRUFBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUMsQ0FBQTtRQUMzRyxPQUFPO0FBQ0gsWUFBQSxTQUFTLEVBQUUsTUFBTTtBQUNqQixZQUFBLGlCQUFpQixFQUFFLE1BQU07QUFDekIsWUFBQSxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVU7U0FDYixDQUFBO0tBQ0o7QUFFRDs7Ozs7OztBQU9HO0lBQ0gsT0FBTyxXQUFXLENBQUMsSUFBZ0IsRUFBRSxhQUFzQixFQUFFLEtBQW1CLEVBQUUsVUFBc0IsRUFBRSxNQUFxQixFQUFBO1FBQzNILE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7QUFFN0QsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsWUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQzdELFNBQVM7QUFDWixhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQy9ELFNBQVM7QUFDWixhQUFBO1lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFBLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFlBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7QUFDN0IsWUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDaEIsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsYUFBQTs7Ozs7QUFLSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBR0Q7O0FBRUc7SUFDSyxVQUFVLEdBQUE7QUFDZCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBNEI7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUEwQjtBQUM5QyxTQUFBLENBQUMsQ0FBQztLQUNOO0FBRUQ7Ozs7OztBQU1HO0FBQ0ssSUFBQSxrQkFBa0IsQ0FBQyxZQUEwQixFQUFFLE1BQWdCLEVBQUUsUUFBa0IsRUFBQTtBQUN2RixRQUFBLE1BQU0sZ0JBQWdCLEdBQVM7WUFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxZQUFBLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFDOUIsWUFBQSxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQ2hDLFlBQUEsUUFBUSxFQUFFLENBQUM7QUFDWCxZQUFBLFNBQVMsRUFBRSxDQUFDO1NBQ2YsQ0FBQztRQUNGLElBQUksWUFBWSxZQUFZLGdCQUFnQixFQUFFO1lBQzFDLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMvRCxPQUFPO0FBQ0gsb0JBQUEsTUFBTSxFQUFFLFlBQVk7QUFDcEIsb0JBQUEsa0JBQWtCLEVBQUUsZ0JBQWdCO2lCQUN2QyxDQUFDO0FBQ0wsYUFBQTtBQUNKLFNBQUE7YUFBTSxJQUFJLFlBQVksWUFBWSxrQkFBa0IsRUFBRTtZQUNuRCxJQUFJLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsRUFBRTs7OztBQUkvRCxnQkFBQSxJQUFJLFlBQVksWUFBWSxxQkFBcUIsS0FBSyxVQUFVLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMzTixPQUFPO0FBQ0gsd0JBQUEsTUFBTSxFQUFFLFlBQVk7QUFDcEIsd0JBQUEsa0JBQWtCLEVBQUUsZ0JBQWdCO3FCQUN2QyxDQUFBO0FBQ0osaUJBQUE7QUFDRCxnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxvQkFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFO3dCQUM3QyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDckIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7cUJBQ3hCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDYixvQkFBQSxJQUFJLEdBQUcsRUFBRTtBQUNMLHdCQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2QscUJBQUE7QUFDSixpQkFBQTtnQkFDRCxPQUFPO0FBQ0gsb0JBQUEsTUFBTSxFQUFFLFlBQVk7QUFDcEIsb0JBQUEsa0JBQWtCLEVBQUUsZ0JBQWdCO2lCQUN2QyxDQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFFRDs7QUFFRztBQUNLLElBQUEsWUFBWSxDQUFDLENBQW9CLEVBQUE7UUFDckMsSUFBVSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUN6RCxZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsU0FBQTtBQUFNLGFBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsWUFBWSxnQkFBZ0IsRUFBRTtZQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDMUIsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7SUFDSyxlQUFlLEdBQUE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRTtZQUMzRCxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDOUMsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztBQUMxQyxRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN6RCxRQUFBLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDL0IsUUFBQSxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBc0IsQ0FBQztBQUMxQyxRQUFBLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7QUFDekMsU0FBQTtRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxRQUFrQixLQUFLLENBQUMsWUFBWSxHQUFHO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3BDLFlBQUEsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQ3RDLE9BQU87QUFDVixhQUFBO1lBQ0QsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7QUFDbkIsZ0JBQUEsY0FBYyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDL0IsZ0JBQUEsY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BELGNBQWMsSUFBSSxhQUFhLENBQUM7Z0JBQ2hDLFNBQVMsSUFBSSxhQUFhLENBQUM7QUFDOUIsYUFBQTtpQkFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7QUFDM0IsZ0JBQUEsY0FBYyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLGdCQUFBLGNBQWMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLGNBQWMsSUFBSSxhQUFhLENBQUM7QUFDbkMsaUJBQUE7Z0JBQ0QsU0FBUyxJQUFJLGFBQWEsQ0FBQztBQUM5QixhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLGNBQWMsR0FBRyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsRUFBRTtnQkFDakUsT0FBTztBQUNWLGFBQUE7QUFDRCxZQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ25ELFlBQUEsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNuRCxZQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsU0FBQTthQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzNDLFlBQUEsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLFlBQUEsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7Z0JBQ3BDLE9BQU87QUFDVixhQUFBOztBQUVELFlBQUEsUUFBUSxHQUFHLE1BQU0sS0FBSyxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDdEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQW9CLENBQUM7QUFDakUsWUFBQSxJQUFJLGVBQWUsR0FBRyxZQUFZLENBQUMsYUFBcUMsQ0FBQztBQUN6RSxZQUFBLElBQUksZUFBZSxDQUFDLE9BQU8sS0FBSyxZQUFZLEVBQUU7QUFDMUMsZ0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO2dCQUN6QyxPQUFPO0FBQ1YsYUFBQTtZQUNELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQzs7QUFFcEQsWUFBQSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDckMsT0FBTztBQUNWLGFBQUE7O1lBRUQsSUFBSSw0QkFBNEIsR0FBRyxXQUFXLENBQUMsOEJBQThCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDL0YsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO0FBQ2hCLGdCQUFBLGtCQUFrQixHQUFHLDRCQUE0QixHQUFHLGFBQWEsQ0FBQztBQUNyRSxhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsYUFBYSxDQUFDO0FBQ2xELGFBQUE7O1lBRUQsSUFBSSxrQkFBa0IsSUFBSSw0QkFBNEIsRUFBRTs7Z0JBRXBELGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMxQixhQUFBO0FBQ0QsWUFBQSxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ25ELFlBQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixTQUFBO0tBQ0o7SUFFTyxrQkFBa0IsR0FBQTtBQUN0QixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3RCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0FBQzVDLFNBQUE7QUFDRCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBaUMsQ0FBQztBQUMxRSxRQUFBLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNOLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUNqQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBc0IsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDMUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtBQUM5RCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBcUIsQ0FBQztBQUNqRCxnQkFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtvQkFDbEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQXFCLENBQUM7QUFDbEQsaUJBQUE7QUFDSixhQUFBO1lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFtQixLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFFRDs7QUFFRztBQUNLLElBQUEsYUFBYSxDQUFDLENBQW9CLEVBQUE7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRTtZQUMzRCxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxVQUFVLEdBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUE2RCxDQUFDO0FBQzlHLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7QUFDMUMsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUN0RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdJLFlBQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RCxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLGFBQUE7QUFDRCxZQUFBLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEQsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUNyQixhQUFBOztZQUVELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLGdCQUFBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUNuRCxLQUFLLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQy9DLG9CQUFBLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELGlCQUFBO0FBQU0scUJBQUE7b0JBQ0gsS0FBSyxHQUFHLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNoRCxvQkFBQSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RCxpQkFBQTtBQUNKLGFBQUE7QUFDRCxZQUFBLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO0FBQzNDLFlBQUEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUM7WUFDNUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNoQyxnQkFBQSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNsQyxhQUFBO1lBQ0QsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNqQyxnQkFBQSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxhQUFBO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN0RCxTQUFBO0tBRUo7QUFFRDs7QUFFRztJQUNILFNBQVMsR0FBQTtBQUNMLFFBQUEsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RFLFFBQUEsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNoQyxPQUFPO0FBQ1YsU0FBQTtRQUNELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRSxRQUFBLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDekIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7QUFDbkQsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QixRQUFBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUMvQyxRQUFBLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs7S0FFbkQ7QUFHRDs7QUFFRztJQUNILHFCQUFxQixHQUFBO1FBQ2pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0tBQ2hDO0FBRUQ7O0FBRUc7SUFDSCxtQkFBbUIsR0FBQTtBQUNmLFFBQUEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3JDO0FBRUQ7Ozs7QUFJRztJQUNLLHFCQUFxQixDQUFDLE9BQWdCLElBQUksRUFBQTtBQUM5QyxRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUMxQyxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsUUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUMsUUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLDZCQUE2QixDQUFrQyxDQUFBO1FBQzlILE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN0RSxRQUFRLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsUUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUQsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUMsQ0FBQztBQUMvRCxRQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0tBQzlCO0FBR0Q7O0FBRUc7SUFDSCxnQkFBZ0IsR0FBQTtRQUNaLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4RCxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdELFlBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4RyxZQUFBLElBQUksT0FBTyxFQUFFO2dCQUNULE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO29CQUN6QixPQUFPO0FBQ1YsaUJBQUE7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLE9BQU87QUFDVixhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRDs7QUFFRztJQUNILGlCQUFpQixHQUFBO1FBQ2IsTUFBTSxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNwRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0QsWUFBQSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsOEJBQThCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hHLFlBQUEsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7b0JBQ3pCLE9BQU87QUFDVixpQkFBQTtnQkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU87QUFDVixhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRDs7QUFFRztJQUNILG9CQUFvQixDQUFDLEtBQWMsSUFBSSxFQUFBO0FBQ25DLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO1lBQ2hDLE9BQU87QUFDVixTQUFBO1FBQ0QsSUFBSSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztBQUMzQyxRQUFBLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELFlBQUEsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDckIsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sR0FBRyxHQUFHLE9BQU8sRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztZQUN4SCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU87QUFDVixhQUFBO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNOLGdCQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUNqQyxnQkFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLGdCQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLGdCQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixPQUFPO0FBQ1YsYUFBQTtBQUNKLFNBQUE7S0FDSjtBQUdEOzs7OztBQUtHO0lBQ0ssa0JBQWtCLENBQUMsR0FBZ0IsRUFBRSxNQUFjLEVBQUE7UUFDdkQsSUFBSSxHQUFHLFlBQVksZ0JBQWdCLEVBQUU7QUFDakMsWUFBQSxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztBQUM3QyxTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksR0FBRyxZQUFZLGNBQWMsRUFBRTtBQUMvQixnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDdkIsYUFBQTtBQUNKLFNBQUE7S0FDSjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxZQUFZLENBQUMsUUFBMkIsRUFBQTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDYixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsTUFBTSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsR0FBRyxVQUFVLENBQUM7QUFDM0MsUUFBQSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLFlBQVksMEJBQTBCLENBQStCLENBQUM7QUFDaEosUUFBQSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLFlBQVksMEJBQTBCLENBQStCLENBQUM7UUFDaEosSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ2YsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDckMsU0FBQTtBQUNELFFBQUEsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEUsUUFBQSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7QUFDNUIsWUFBQSxPQUFPLFFBQVEsQ0FBQztBQUNuQixTQUFBO0FBQU0sYUFBQSxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFO0FBQ25DLFlBQUEsT0FBTyxNQUFNLENBQUM7QUFDakIsU0FBQTtBQUFNLGFBQUEsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzFFLFlBQUEsT0FBTyxRQUFRLENBQUM7QUFDbkIsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtLQUNKO0FBRUo7O0FDcnBDRDs7QUFFRztNQUNVLGFBQWEsQ0FBQTtBQXdDRixJQUFBLFNBQUEsQ0FBQTtBQUFxQyxJQUFBLFVBQUEsQ0FBQTtBQUFxQyxJQUFBLGFBQUEsQ0FBQTtBQUF1QyxJQUFBLE1BQUEsQ0FBQTtBQXZDckk7O0FBRUc7SUFDSyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBQSxzQkFBc0IsQ0FBTTs7SUFFNUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDOztBQUV6QixJQUFBLG1CQUFtQixDQUFVOztBQUU3QixJQUFBLG9CQUFvQixDQUFnQzs7QUFFNUQsSUFBQSxZQUFZLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRWpELElBQUEsZ0JBQWdCLEdBQTJCLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRXpELElBQUEsYUFBYSxHQUEyQixJQUFJLE9BQU8sRUFBRSxDQUFDOztBQUV0RCxJQUFBLFlBQVksR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7QUFFNUMsSUFBQSxXQUFXLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRTNDLElBQUEsWUFBWSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDOztBQUU1QyxJQUFBLFdBQVcsR0FBNEIsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7QUFFckQsSUFBQSxVQUFVLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRXBELElBQUEsWUFBWSxHQUE0QixJQUFJLE9BQU8sRUFBRSxDQUFDOztBQUV0RCxJQUFBLFVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7QUFFMUMsSUFBQSxnQkFBZ0IsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7QUFFaEQsSUFBQSxXQUFXLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRTNDLElBQUEsVUFBVSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzFDLElBQUEsU0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLElBQUEsV0FBVyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzNDLElBQUEsV0FBQSxDQUFvQixTQUEyQixFQUFVLFVBQTJCLEVBQVUsYUFBNkIsRUFBVSxNQUFxQixFQUFBO1FBQXRJLElBQVMsQ0FBQSxTQUFBLEdBQVQsU0FBUyxDQUFrQjtRQUFVLElBQVUsQ0FBQSxVQUFBLEdBQVYsVUFBVSxDQUFpQjtRQUFVLElBQWEsQ0FBQSxhQUFBLEdBQWIsYUFBYSxDQUFnQjtRQUFVLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO1FBQ3RKLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFLOztBQUVqRCxTQUFDLENBQUMsQ0FBQTtRQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFLOztBQUVsRCxTQUFDLENBQUMsQ0FBQTtRQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFLO1lBQzlDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QixPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUN2QixPQUFPO0FBQ1YsYUFBQTs7QUFFRCxZQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDakUsZ0JBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDbkIsb0JBQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztBQUMxQixvQkFBQSxhQUFhLEVBQUUsRUFBRTtBQUNqQixvQkFBQSxvQkFBb0IsRUFBRTtBQUNsQix3QkFBQSxPQUFPLEVBQUUsWUFBMkI7QUFDcEMsd0JBQUEsTUFBTSxFQUFFLFdBQVc7QUFDdEIscUJBQUE7QUFDSixpQkFBQSxDQUFDLENBQUM7QUFDSCxnQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0IsYUFBQTtBQUNELFlBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV6QixTQUFDLENBQUMsQ0FBQTtBQUNGLFFBQUEsU0FBUyxDQUFtQixJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQzlFLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM3QixZQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7WUFFakUsSUFBSSxDQUFDLG9CQUFvQixHQUFHO0FBQ3hCLGdCQUFBLE9BQU8sRUFBRSxZQUEyQjtBQUNwQyxnQkFBQSxNQUFNLEVBQUUsV0FBVzthQUN0QixDQUFDO0FBQ04sU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLFNBQVMsQ0FBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUMvRSxZQUFBLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3ZDLE9BQU87QUFDVixhQUFBOzs7Ozs7Ozs7QUFTTCxTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsU0FBUyxDQUFtQixJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJOztBQUc1RSxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0FBQ25CLGdCQUFBLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDMUIsZ0JBQUEsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBNkM7QUFDM0UsYUFBQSxDQUFDLENBQUM7QUFFSCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7QUFhOUIsWUFBQSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDOztBQUVyQyxTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsU0FBUyxDQUFnQixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtZQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RCxZQUFBLFFBQVEsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUEyQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2SSxPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUNuQixnQkFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLGFBQUE7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7QUFDNUMsZ0JBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QixhQUFBO0FBQU0saUJBQUEsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUMzQixnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLGFBQUE7QUFBTSxpQkFBQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUIsYUFBQTtBQUFNLGlCQUFBLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDM0IsZ0JBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN6QixhQUFBO0FBQU0saUJBQUEsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUMzQixnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLGFBQUE7QUFDSSxpQkFBQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEIsYUFBQTtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzNDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQixnQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFCLGFBQUE7QUFBTSxpQkFBQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7aUJBQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO2dCQUMxQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckIsZ0JBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hDLGFBQUE7QUFBTSxpQkFBQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsYUFBQTtBQUNJLGlCQUFBLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDekIsZ0JBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxQixhQUFBO0FBQ0wsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLFNBQVMsQ0FBaUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFHO0FBQzlELFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLFNBQVMsQ0FBaUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFHO0FBQy9ELFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLFNBQVMsQ0FBaUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFHO0FBQzdELFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsU0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELE9BQU8sR0FBQTtBQUNILFFBQUEsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQzlDO0FBRUQ7O0FBRUc7SUFDSCxlQUFlLEdBQUE7QUFDWCxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyRixRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztLQUN0RDtBQUVEOzs7QUFHRztBQUNILElBQUEsaUJBQWlCLENBQUMsUUFBbUQsRUFBQTtBQUNqRSxRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN6RCxRQUFBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7S0FFbEM7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLG1CQUFtQixDQUFDLFVBQW1CLEVBQUE7QUFDbkMsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDakUsUUFBQSxJQUFJLFVBQVUsRUFBRTtBQUNaLFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixTQUFBO0tBQ0o7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGFBQWEsQ0FBQyxLQUFjLEVBQUE7QUFDeEIsUUFBQSxJQUFJLEtBQUssRUFBRTtBQUNQLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUUxQixTQUFBO0FBQU0sYUFBQTs7QUFFSCxZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQy9DLFNBQUE7S0FDSjtBQUlKOztBQ3ZNRDs7QUFFRztNQUNVLGNBQWMsQ0FBQTtBQUlILElBQUEsU0FBQSxDQUFBO0FBQWtDLElBQUEsTUFBQSxDQUFBO0FBQStCLElBQUEsVUFBQSxDQUFBO0FBQXFDLElBQUEsYUFBQSxDQUFBO0FBSGxILElBQUEsY0FBYyxDQUFpQjtBQUMvQixJQUFBLFdBQVcsQ0FBYztBQUVqQyxJQUFBLFdBQUEsQ0FBb0IsU0FBd0IsRUFBVSxNQUFxQixFQUFVLFVBQTJCLEVBQVUsYUFBNEIsRUFBQTtRQUFsSSxJQUFTLENBQUEsU0FBQSxHQUFULFNBQVMsQ0FBZTtRQUFVLElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO1FBQVUsSUFBVSxDQUFBLFVBQUEsR0FBVixVQUFVLENBQWlCO1FBQVUsSUFBYSxDQUFBLGFBQUEsR0FBYixhQUFhLENBQWU7UUFDbEosSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUc7QUFDN0MsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3ZCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDbEQsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQUs7WUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ2xCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQzdDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwQixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUM1QyxZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDOUMsWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3JCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQUs7WUFDekMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0FBQ3ZCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQy9DLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2hDLFNBQUMsQ0FBQyxDQUFDO0tBRU47QUFFRCxJQUFBLFFBQVEsQ0FBQyxJQUFlLEVBQUE7QUFDcEIsUUFBQSxNQUFNLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDZixZQUFBLFNBQVM7QUFDWixTQUFBO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNaLFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLE9BQU87QUFDVixTQUFBOztBQUVELFFBQUEsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUF1QixFQUFFSyx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN4RyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFlBQTJCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDMUUsT0FBTztBQUNWLFNBQUE7O1FBRUQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRSxZQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBNkMsQ0FBQztBQUNoRSxZQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxFQUFFLFlBQVksWUFBWSxnQkFBZ0IsQ0FBQyxFQUFFO0FBQzdDLFlBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUM1QixnQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDbkQsYUFBQTtZQUNELE1BQU0sY0FBYyxHQUFHLFdBQVcsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3SSxJQUFJLGNBQWMsWUFBWSxnQkFBZ0IsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxXQUFXLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RixnQkFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNqRSxnQkFBQSxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ2xGLGdCQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLGFBQUE7WUFDRCxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0M7QUFHRDs7O0FBR0c7QUFDSCxJQUFBLG9CQUFvQixDQUFDLElBQWUsRUFBQTtRQUNoQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsTUFBTSxFQUFFLEdBQUcsTUFBSztZQUNaLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbEUsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNYLGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLGFBQUE7QUFDRCxZQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBNkMsQ0FBQztBQUNoRSxZQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBQzVCLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDaEIsU0FBQyxDQUFBOztBQUVELFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0QztBQUVEOzs7Ozs7O0FBT0c7SUFDSCxzQkFBc0IsQ0FBQyxZQUFxQixFQUFFLFNBQTJCLEVBQUE7QUFDckUsUUFBQSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ25DLE9BQU8sTUFBTSxZQUFZLGVBQWU7ZUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtlQUNwRCxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVM7QUFDekIsZUFBQSxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0tBQ2hHO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLGNBQWMsQ0FBQyxNQUFlLEVBQUUsU0FBQSxHQUFxQyxJQUFJLEVBQUE7QUFDckUsUUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFNLFlBQVksZUFBZSxLQUFLLFNBQVMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7S0FDL0c7QUFFRDs7Ozs7O0FBTUc7QUFDSCxJQUFBLG9CQUFvQixDQUFDLElBQWUsRUFBRSxZQUF5QixFQUFFLFdBQW1CLEVBQUE7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRztBQUM1QyxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBNkMsQ0FBQztRQUNwRSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUVBLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RFLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDbkMsWUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRUEsd0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEcsWUFBQSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNwQixZQUFBLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQzVCLFlBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBTztBQUNWLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLEVBQ0YsWUFBWSxFQUNaLFlBQVksRUFDZixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFQSx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0FBQzdELFlBQUEsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDcEIsWUFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztBQUNoQyxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU87QUFDVixTQUFBO0tBQ0o7QUFHRDs7Ozs7O0FBTUc7QUFDSCxJQUFBLG1CQUFtQixDQUFDLFlBQXlCLEVBQUUsV0FBbUIsRUFBRSxTQUEyQixFQUFBO1FBQzNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEUsUUFBQSxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBeUIsQ0FBQztBQUM1RCxRQUFBLElBQUksWUFBWSxZQUFZLGdCQUFnQixJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO0FBQy9HLFlBQUEsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFxQixDQUFDO0FBQ25ILFlBQUEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxZQUFBLFdBQVcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUNsRCxTQUFBO0FBQ0QsUUFBQSxXQUFXLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7O1FBRXBELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUMxQyxZQUFBLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBb0IsQ0FBQztBQUNoRyxZQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBQSxNQUFNLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JHLFlBQUEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RSxZQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3ZCLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JHLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RixZQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3ZCLFNBQUE7S0FDSjtBQUVEOzs7OztBQUtHO0lBQ0gsbUJBQW1CLENBQUMsWUFBeUIsRUFBRSxNQUFjLEVBQUE7QUFDekQsUUFBQSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwRCxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtBQUMxQyxZQUFBLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFNBQUE7UUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBMkIsQ0FBQztRQUNuRixJQUFJLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDdEQsWUFBQSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQ3ZDLFNBQUE7QUFDRCxRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBRUQ7OztBQUdHO0lBQ0ssNEJBQTRCLEdBQUE7QUFDaEMsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzlCLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDbEQsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUNsRCxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO0FBQzVDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7Ozs7QUFLRztJQUNILGlCQUFpQixDQUFDLFlBQXlCLEVBQUUsV0FBbUIsRUFBQTtBQUM1RCxRQUFBLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtBQUMvRixZQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3ZCLFNBQUE7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQXlCLENBQUM7QUFDNUQsUUFBQSxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUMvRyxZQUFBLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBcUIsQ0FBQztBQUNuSCxZQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBQSxXQUFXLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDbEQsU0FBQTtBQUNELFFBQUEsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3BELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUMxQyxZQUFBLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBb0IsQ0FBQztBQUNoRyxZQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RCxZQUFBLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFNBQUE7QUFBTSxhQUFBO1lBQ0gsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RCxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLHNCQUFzQixDQUFDLFlBQXFCLEVBQUUsU0FBMkIsRUFBRSxTQUEyQixFQUFBO1FBQzdGLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFzQjtRQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsUUFBQSxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUQsUUFBQSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O0FBRTlCLFFBQUEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxPQUFPO1lBQ0gsWUFBWTtZQUNaLFlBQVk7U0FDZixDQUFBO0tBRUo7QUFFTyxJQUFBLGtCQUFrQixDQUFDLFNBQTJCLEVBQUE7QUFDbEQsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRCxRQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN6RCxRQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM3RCxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUdiLGFBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0lBRU8sY0FBYyxDQUFDLElBQXNCLEVBQUUsSUFBZSxFQUFBO0FBQzFELFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7QUFDL0MsUUFBQSxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7QUFDakQsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO0FBQzVCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0FBQ2xELFNBQUE7UUFDRCxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNwRCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQzs7QUFFOUIsUUFBQSxJQUFJLEVBQUUsT0FBTyxZQUFZLGdCQUFnQixDQUFDLEVBQUU7O1lBRXhDLElBQUksV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDckQsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztBQUNyRSxhQUFBO0FBQ0osU0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUU5RCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFNBQUE7S0FDSjtBQUdEOztBQUVHO0FBQ0gsSUFBQSxXQUFXLENBQUMsR0FBa0IsRUFBQTtRQUMxQixNQUFNLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ25FLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDZixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtBQUMxQyxTQUFBO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0QsUUFBQSxZQUFZLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztBQUMvQixRQUFBLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQ25DLFFBQUEsWUFBWSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDL0IsUUFBQSxZQUFZLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUN4QyxRQUFBLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRyxRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDckIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDakMsUUFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RCxTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN4QixTQUFBO0tBQ0o7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGtCQUFrQixDQUFDLEdBQWtCLEVBQUE7UUFDakMsTUFBTSxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRCxRQUFBLFlBQVksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQzVCLFFBQUEsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFDbkMsUUFBQSxZQUFZLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUMvQixRQUFBLFlBQVksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLFFBQUEsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZHLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNyQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxZQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDeEIsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7SUFDSyxhQUFhLEdBQUE7QUFDakIsUUFBQSxNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ2hCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0FBQzVDLFNBQUE7O0FBRUQsUUFBQSxJQUFJLGlCQUEwQixDQUFDO1FBQy9CLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRTs7QUFFOUIsWUFBQSxJQUFJLGFBQWEsQ0FBQyxNQUFNLFlBQVkscUJBQXFCLEVBQUU7QUFDdkQsZ0JBQUEsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztnQkFDekMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGFBQUE7O0FBRUksaUJBQUEsSUFBSSxhQUFhLENBQUMsTUFBTSxZQUFZLG1CQUFtQixFQUFFO0FBQzFELGdCQUFBLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLFlBQVkscUJBQXFCLENBQTBCLENBQUM7QUFDOUksZ0JBQUEsSUFBSSxlQUFlLEVBQUU7b0JBQ2pCLGlCQUFpQixHQUFHLGVBQWUsQ0FBQztvQkFDcEMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGlCQUFBO0FBQU0scUJBQUE7QUFDSCxvQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7QUFDckMsaUJBQUE7QUFDSixhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzVCLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtZQUNILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQTBCLENBQUM7WUFDekYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBMEIsQ0FBQztZQUNyRixJQUFJLFVBQVUsQ0FBQyxjQUFjLEVBQUU7QUFDM0IsZ0JBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFnQixDQUFDO2dCQUNoSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFFdEIsZ0JBQUEsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN6RixvQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTtBQUMxQix3QkFBQSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO3dCQUNwQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDeEIscUJBQUE7QUFDSixpQkFBQTtBQUNKLGFBQUE7QUFBTSxpQkFBQTtBQUNILGdCQUFBLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxNQUFxQixDQUFDO0FBQ3JELGdCQUFBLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDN0MsYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLUSxlQUFPLENBQUMsUUFBUSxFQUFFO0FBQy9DLFlBQUEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBQzVDLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25DLFNBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFDLENBQUM7S0FDekU7QUFFRDs7Ozs7QUFLRztJQUNLLGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsTUFBYyxFQUFBO0FBQzNELFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDZCxZQUFBLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkcsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU87QUFDVixhQUFBO1lBQ0QsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLEVBQUU7QUFDeEQsb0JBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM5RSxpQkFBQTtBQUFNLHFCQUFBO29CQUNILElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLGlCQUFBO0FBQ0osYUFBQTtBQUFNLGlCQUFBOztnQkFFSCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBcUIsQ0FBQztnQkFDNUYsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQXFCLENBQUM7O2dCQUU1RixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDMUQsb0JBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsT0FBTztBQUNWLHFCQUFBO29CQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELGlCQUFBO0FBQU0scUJBQUE7OztvQkFHSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDbEQsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxnQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsb0JBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxpQkFBQTtBQUFNLHFCQUFBO29CQUNILElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsaUJBQUE7QUFDSixhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxZQUFZLHVCQUF1QixJQUFJLE9BQU8sWUFBWSxtQkFBbUIsRUFBRTtBQUM3RixvQkFBQSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDOztBQUUvQixvQkFBQSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNwQyx3QkFBQSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDakIsT0FBTztBQUNWLHFCQUFBO0FBQ0Qsb0JBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLQSxlQUFPLENBQUMsUUFBUSxFQUFFO0FBQ25FLHdCQUFBLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNyQyxPQUFPO0FBQ1YseUJBQUE7QUFDSixxQkFBQTtBQUNKLGlCQUFBO2dCQUNELElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtBQUNwQixvQkFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxPQUFPO0FBQ1YsaUJBQUE7QUFDRCxnQkFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRDs7O0FBR0c7QUFDSyxJQUFBLHFCQUFxQixDQUFDLE9BQWdDLEVBQUE7UUFDMUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBS0EsZUFBTyxDQUFDLFFBQVEsRUFBRTtBQUMvQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7QUFDRCxRQUFBLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQWlDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1YsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7Ozs7O0FBS0c7SUFDSyxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLE1BQWMsRUFBQTtBQUMzRCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxNQUFNLEtBQUssV0FBVyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JELFlBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPO0FBQ1YsYUFBQTtZQUNELElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDakQsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxFQUFFO0FBQ3hELG9CQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsaUJBQUE7QUFBTSxxQkFBQTtvQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsaUJBQUE7QUFDSixhQUFBO0FBQU0saUJBQUE7O2dCQUVILE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFxQixDQUFDO2dCQUM1RixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBcUIsQ0FBQzs7Z0JBRTVGLElBQUksV0FBVyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUMxRCxvQkFBQSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDM0MsT0FBTztBQUNWLHFCQUFBO29CQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELGlCQUFBO0FBQU0scUJBQUE7OztvQkFHSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDbEQsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLGdCQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUM5QixvQkFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLGlCQUFBO0FBQU0scUJBQUE7b0JBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELGlCQUFBO0FBQ0osYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksT0FBTyxDQUFDLE1BQU0sWUFBWSxzQkFBc0IsSUFBSSxPQUFPLFlBQVksbUJBQW1CLEVBQUU7QUFDNUYsb0JBQUEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQWdDLENBQUM7O29CQUV6RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDbEIsd0JBQUEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEMsNEJBQUEsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUN2QyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEIseUJBQUE7QUFBTSw2QkFBQTs0QkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyx5QkFBQTt3QkFDRCxPQUFPO0FBQ1YscUJBQUE7eUJBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDbEQsd0JBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4RCxPQUFPO0FBQ1YscUJBQUE7QUFDSixpQkFBQTtnQkFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7O29CQUVwQixPQUFPO0FBQ1YsaUJBQUE7QUFDRCxnQkFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRDs7OztBQUlHO0FBQ0ssSUFBQSxvQkFBb0IsQ0FBQyxPQUFnQyxFQUFBO1FBQ3pELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUtBLGVBQU8sQ0FBQyxRQUFRLEVBQUU7QUFDL0MsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0tBQy9CO0FBRU8sSUFBQSxZQUFZLENBQUMsSUFBc0IsRUFBRSxNQUFjLEVBQUUsR0FBVyxFQUFBO0FBQ3BFLFFBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ2pELFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUMzQixTQUFBO0tBQ0o7QUFFTyxJQUFBLFlBQVksQ0FBQyxJQUFpQixFQUFBO0FBQ2xDLFFBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFOztBQUV4QyxZQUFBLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQ3RCLE9BQU07QUFDVCxhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEIsU0FBQTtLQUNKO0FBR0Q7Ozs7O0FBS0c7SUFDSyxvQkFBb0IsQ0FBQyxNQUFlLEVBQUUsU0FBMkIsRUFBQTtBQUNyRSxRQUFBLE9BQU8sTUFBTSxDQUFDLE1BQU0sWUFBWSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FFdEo7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsU0FBMkIsRUFBQTtBQUNqRSxRQUFBLE9BQU8sTUFBTSxDQUFDLE1BQU0sWUFBWSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0tBRXZGO0FBR0Q7OztBQUdHO0FBQ0ssSUFBQSxvQkFBb0IsQ0FBQyxNQUFtQixFQUFBO0FBQzVDLFFBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUVLLHdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pELE9BQU87QUFDVixTQUFBOztRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRUEsd0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hCLFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE9BQU87QUFDVixTQUFBOztBQUVELFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRUEsd0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsUUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZDO0FBRUQ7O0FBRUc7QUFDSyxJQUFBLHNCQUFzQixDQUFDLE1BQXdCLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBQTtRQUNoRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUVBLHdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pELE9BQU87QUFDVixTQUFBOztRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRUEsd0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDOUQsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzQixPQUFPO0FBQ1YsU0FBQTs7UUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO0FBQ3BELFlBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRUEsd0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkYsY0FBYyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7QUFDeEQsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7WUFFdEIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0QsTUFBTSxHQUFHLFdBQW9CLENBQUM7QUFDOUIsUUFBQSxJQUFJLFNBQVMsR0FBcUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRUEsd0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4QztJQUdPLHdCQUF3QixDQUFDLE1BQWUsRUFBRSxTQUEyQixFQUFBO0FBQ3pFLFFBQUEsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDNUcsUUFBQSxJQUFJLFlBQVksRUFBRTtZQUNkLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsWUFBQSxJQUFJLFFBQVEsSUFBSSxRQUFRLFlBQVksZ0JBQWdCLEVBQUU7QUFDbEQsZ0JBQUEsT0FBTyxRQUFRLENBQUM7QUFDbkIsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3hDLGdCQUFBLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsZ0JBQUEsT0FBTyxRQUFRLENBQUM7QUFDbkIsYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO1lBQ0gsTUFBTSxFQUNGLFlBQVksRUFDWixZQUFZLEVBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUVBLHdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxZQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3ZCLFNBQUE7S0FDSjtJQUdPLG1CQUFtQixDQUFDLE1BQWUsRUFBRSxTQUEyQixFQUFBO0FBQ3BFLFFBQUEsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUcsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLFlBQUEsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRCxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsU0FBQTtBQUNELFFBQUEsT0FBTyxZQUFZLENBQUM7S0FDdkI7QUFHRDs7OztBQUlHO0FBQ0ssSUFBQSxhQUFhLENBQUMsT0FBb0IsRUFBQTtBQUN0QyxRQUFBLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNWLFlBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRyxZQUFBLElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixPQUFPO0FBQ1YsYUFBQTtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxPQUFPO0FBQ1YsU0FBQTtRQUNELElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTztBQUNWLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xHLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixPQUFPO0FBQ1YsYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLE9BQU87QUFDVixhQUFBO0FBQ0osU0FBQTtLQUNKO0FBR0Q7O0FBRUc7SUFDSCxPQUFPLEdBQUE7QUFDSCxRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFxQixDQUFDO0FBQ2xHLFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O1FBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUN6QixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLFlBQUEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFNBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FFaEQ7QUFFRDs7OztBQUlHO0FBQ0gsSUFBQSxXQUFXLENBQUMsRUFBZ0IsRUFBQTtBQUN4QixRQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQy9DLFFBQUEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN6QztBQUVEOzs7QUFHRztJQUNLLHFCQUFxQixHQUFBO1FBQ3pCLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBcUIsQ0FBQztBQUNsRyxRQUFBLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7O1FBRXZDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxDQUFDLE1BQU0sWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLFlBQVksY0FBYyxDQUFDLEVBQUU7O0FBRTdILFlBQUEsT0FBTyxTQUFTLENBQUM7QUFDcEIsU0FBQTtRQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQWdCLENBQUM7QUFDdEUsUUFBQSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDcEcsUUFBQSxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFxQixDQUFDO0FBQ3RGLFFBQUEsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLFFBQUEsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLFFBQUEsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7QUFHNUQsUUFBQSxPQUFPLFNBQVMsQ0FBQztLQUNwQjtBQUVEOztBQUVHO0FBQ0gsSUFBQSxnQkFBZ0IsQ0FBQyxRQUEwQixFQUFFLFFBQTBCLEVBQUUsV0FBb0IsRUFBQTtBQUN6RixRQUFBLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDdkMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxZQUFBLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLFlBQUEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixTQUFBOztBQUVELFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQixRQUFBLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDeEU7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLFdBQVcsQ0FBQyxLQUE0QixFQUFBO0FBQ3BDLFFBQUEsTUFBTSxFQUFDLGdCQUFnQixFQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsWUFBQSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLEVBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxVQUFVLENBQUM7WUFDNUUsSUFBSSxXQUFXLFlBQVksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMvRCxnQkFBQSxJQUFJLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsaUJBQUE7cUJBQU0sSUFBSSxXQUFXLFlBQVksZ0JBQWdCLEVBQUU7QUFDaEQsb0JBQUEsTUFBTSxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDeEUsaUJBQUE7QUFDSixhQUFBO2lCQUFNLElBQUksV0FBVyxZQUFZLGFBQWEsRUFBRTs7QUFFN0MsZ0JBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFO0FBQ3hDLG9CQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsaUJBQUE7QUFBTSxxQkFBQTs7QUFFSCxvQkFBQSxJQUFJLFdBQVcsWUFBWSxZQUFZLElBQUksaUJBQWlCLEVBQUU7d0JBQzFELFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDckIsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLHFCQUFBOztBQUVJLHlCQUFBLElBQUksV0FBVyxZQUFZLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFO3dCQUN0RSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3JCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QixxQkFBQTtBQUFNLHlCQUFBLElBQUksV0FBVyxZQUFZLGtCQUFrQixJQUFJLGlCQUFpQixFQUFFO3dCQUN2RSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3JCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QixxQkFBQTtBQUFNLHlCQUFBO0FBQ0gsd0JBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoQyxxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7S0FDSjtBQUdEOzs7O0FBSUc7QUFDSyxJQUFBLHFCQUFxQixDQUFDLEtBQTRCLEVBQUE7UUFDdEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRTdELFFBQUEsSUFBSSxXQUFXLEVBQUU7QUFDYixZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTztBQUNWLFNBQUE7O0FBRUksYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLFNBQUE7S0FDSjtBQUVEOztBQUVHO0FBQ0ssSUFBQSxzQkFBc0IsQ0FBQyxLQUE0QixFQUFBO0FBQ3ZELFFBQUEsTUFBTSxFQUFDLGdCQUFnQixFQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsWUFBQSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxZQUFBLE1BQU0sRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3pDLElBQUksV0FBVyxZQUFZLGFBQWEsRUFBRTtnQkFDdEMsSUFBSSxXQUFXLFlBQVksc0JBQXNCLEVBQUU7QUFDL0Msb0JBQUEsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQXlCLENBQUM7O29CQUUzRCxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsd0JBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoQyxxQkFBQTtBQUNKLGlCQUFBO0FBQU0scUJBQUE7QUFDSCxvQkFBQSxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDMUMsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtLQUNKO0FBR0Q7Ozs7Ozs7QUFPRztJQUNILFdBQVcsQ0FBQyxhQUFzQixFQUFFLFlBQW9CLEVBQUUsV0FBb0IsRUFBRSxVQUFrQixFQUFFLEVBQWtCLEVBQUE7UUFDbEgsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLElBQUksYUFBYSxZQUFZLGdCQUFnQixFQUFFO0FBQzNDLFlBQUEsTUFBTSxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRixZQUFBLElBQUksV0FBVyxFQUFFO0FBQ2IsZ0JBQUEsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN2RSxhQUFBO0FBQU0saUJBQUEsSUFBSSxZQUFZLEVBQUU7QUFDckIsZ0JBQUEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBQ3JFLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUN2RixTQUFBO0FBQ0QsUUFBQSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMxQztBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxhQUFhLENBQUMsYUFBc0IsRUFBRSxZQUFvQixFQUFFLFlBQTRCLEVBQUE7QUFDcEYsUUFBQSxJQUFJLE9BQXdCLENBQUM7UUFDN0IsSUFBSSxhQUFhLFlBQVksZ0JBQWdCLEVBQUU7QUFDM0MsWUFBQSxNQUFNLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2hGLFlBQUEsSUFBSSxXQUFXLEVBQUU7QUFDYixnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxvQkFBQSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLG9CQUFBLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLGlCQUFBO0FBQ0osYUFBQTtBQUFNLGlCQUFBLElBQUksWUFBWSxFQUFFO0FBQ3JCLGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLG9CQUFBLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDekIsb0JBQUEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxnQkFBQSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pCLGdCQUFBLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDbkYsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBR0Q7Ozs7OztBQU1HO0FBQ0gsSUFBQSxPQUFPLHFCQUFxQixDQUFDLElBQXNCLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBQTtBQUMzRSxRQUFBLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xELElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUNmLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO1FBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNqRCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDcEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELFFBQUEsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsUUFBQSxJQUFJLGFBQWEsRUFBRTtBQUNmLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxTQUFBO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtBQUNsQixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN6QyxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTNELFFBQUEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2xCLFNBQUE7QUFDRCxRQUFBLE9BQU8sZUFBZSxDQUFDO0tBQzFCO0lBRUQsU0FBUyxDQUFDLElBQXNCLEVBQUUsTUFBYyxFQUFBO0FBQzVDLFFBQUEsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDMUQsUUFBQSxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxPQUFPO0FBQ0gsZ0JBQUEsV0FBVyxFQUFFLElBQUk7QUFDakIsZ0JBQUEsWUFBWSxFQUFFLElBQUk7YUFDckIsQ0FBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPO0FBQ0gsZ0JBQUEsV0FBVyxFQUFFLElBQUk7QUFDakIsZ0JBQUEsWUFBWSxFQUFFLElBQUk7YUFDckIsQ0FBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BELFFBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsU0FBQTtRQUNELElBQUksUUFBUSxHQUE0QixJQUFJLENBQUM7QUFDN0MsUUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFNBQUE7UUFDRCxPQUFPO0FBQ0gsWUFBQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixZQUFBLFlBQVksRUFBRSxTQUFTO1NBQzFCLENBQUE7S0FDSjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLFlBQVksQ0FBQyxFQUFrQixFQUFFLFVBQTRDLEVBQUE7QUFDaEYsUUFBQSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO1lBQ3hCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RCxRQUFBLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQ3pCLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRTtnQkFDM0IsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsYUFBQTtBQUNELFlBQUEsSUFBSSxVQUFVLENBQUMsTUFBTSxZQUFZLGdCQUFnQixFQUFFO0FBQy9DLGdCQUFBLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUMzQyxnQkFBQSxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDdkMsZ0JBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUM1RyxnQkFBQSxJQUFJLGFBQWEsRUFBRTtvQkFDZixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUIsb0JBQUEsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDN0MsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBO1lBQ0gsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUMzQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxJQUFJLFVBQVUsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDL0Msb0JBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLG9CQUFBLElBQUksYUFBYSxFQUFFO3dCQUNmLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMxQix3QkFBQSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHFCQUFBO0FBQU0seUJBQUE7d0JBQ0gsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQscUJBQUE7QUFDSixpQkFBQTtBQUFNLHFCQUFBO29CQUNILGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6RSxpQkFBQTtBQUNKLGFBQUE7WUFDRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxZQUFZLGdCQUFnQixFQUFFO0FBQzdDLG9CQUFBLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekYsb0JBQUEsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUMxQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MscUJBQUE7QUFBTSx5QkFBQTt3QkFDSCxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxxQkFBQTtBQUVKLGlCQUFBO0FBQU0scUJBQUE7b0JBQ0gsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUNsQztBQUVPLElBQUEsT0FBTywwQkFBMEIsQ0FBQyxLQUE0QixFQUFFLFVBQTRDLEVBQUE7UUFDaEgsU0FBUyxDQUFDLDhCQUE4QixDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsS0FBSTtZQUMxRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRTtBQUMxRSxnQkFBQSxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQy9CLGFBQUE7QUFDTCxTQUFDLENBQUMsQ0FBQTtLQUNMO0FBR0QsSUFBQSxPQUFPLFlBQVksQ0FBQyxFQUFrQixFQUFFLFVBQXdDLEVBQUE7QUFDNUUsUUFBQSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRTtBQUNqQyxZQUFBLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVFLFlBQUEsSUFBSSxJQUFJLEVBQUU7QUFDTixnQkFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNSLE9BQU87QUFDVixhQUFBO1lBQ0QsU0FBUyxDQUFDLDhCQUE4QixDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsS0FBSTtBQUMxRCxnQkFBQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7QUFDOUMsb0JBQUEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsaUJBQUE7QUFDTCxhQUFDLENBQUMsQ0FBQTtBQUNMLFNBQUE7S0FFSjtBQUdEOzs7O0FBSUc7QUFDSCxJQUFBLE1BQU0sQ0FBQyxHQUFtQixFQUFBO1FBQ3RCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQixRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQixPQUFPO0FBQ1YsU0FBQTtRQUNELEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFELFFBQUEsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hGLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNyRDtBQUVEOzs7QUFHRztBQUNILElBQUEsS0FBSyxDQUFDLEdBQW1CLEVBQUE7QUFDckIsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQUN4QjtBQUVEOzs7O0FBSUc7QUFDSCxJQUFBLE9BQU8sQ0FBQyxHQUFtQixFQUFBO1FBQ3ZCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ1osWUFBQSxJQUFJLFNBQVMsRUFBRTtBQUNYLGdCQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsYUFBQTtZQUNELE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLFlBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFvQixJQUFJLENBQUMsZUFBZTtRQUN4QyxJQUFJLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFPdEQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU87QUFDVixTQUFBOztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUtMLGVBQU8sQ0FBQyxRQUFRLEVBQUU7QUFDL0MsWUFBQSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7QUFDakYsWUFBQSxJQUFJLFdBQVcsRUFBRTtBQUNiLGdCQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEMsYUFBQTtZQUNELE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsSUFBSSxZQUFZLFlBQVksa0JBQWtCLEVBQUU7WUFDeEYsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztZQUNwQyxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtnQkFDMUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGFBQUE7aUJBQU0sSUFBSSxZQUFZLFlBQVksa0JBQWtCLEVBQUU7O2dCQUVuRCxJQUFJLG1CQUFtQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsSUFBSSxZQUFZLFlBQVksc0JBQXNCLEVBQUU7b0JBQ2xHLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUNoRixvQkFBQSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUE7QUFDbEMsaUJBQUE7QUFBTSxxQkFBQTtBQUNILG9CQUFBLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDL0IsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUNsQixnQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLGFBQUE7QUFDRCxZQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQVksQ0FBQztZQUNuRixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUM7S0FDbEM7SUFFRCxZQUFZLEdBQUE7UUFDUixJQUFJLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDdEQsUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQVksQ0FBQztRQUMvRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUQsUUFBQSxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxTQUFBO0tBRUo7QUFFRDs7O0FBR0c7QUFDSyxJQUFBLGNBQWMsQ0FBQyxJQUFZLEVBQUE7UUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBS0EsZUFBTyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDdkksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDVixnQkFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLGdCQUFBLG9CQUFvQixFQUFFO0FBQ2xCLG9CQUFBLE9BQU8sRUFBRSxZQUFZO0FBQ3JCLG9CQUFBLE1BQU0sRUFBRSxXQUFXO0FBQ3RCLGlCQUFBO0FBQ0osYUFBQSxDQUFDLENBQUE7QUFDTCxTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDL0MsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQXFCLENBQUM7QUFDM0QsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7Z0JBQzNELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDL0QsZ0JBQUEsVUFBVSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsZ0JBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsZ0JBQUEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzVELGFBQUE7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7SUFDSCxzQkFBc0IsR0FBQTtBQUNsQixRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO0FBQ1YsU0FBQTtRQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFxQixDQUFDO1FBQzdGLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7QUFDM0MsUUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRTtBQUM1QixZQUFBLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkIsWUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQixTQUFBO0FBQU0sYUFBQTtBQUNILFlBQUEsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFCO0FBRUQ7O0FBRUc7SUFDSCxhQUFhLEdBQUE7QUFDVCxRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUMxRixRQUFBLElBQUksU0FBUyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNDLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLEVBQUUsR0FBR1IsYUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUMzQyxRQUFBLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1QixRQUFBLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUV2QyxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDekMsUUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRTlELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0FBQzdDLFFBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzFELFFBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzlELFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDVCxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDbkMsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFNUIsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDMUM7SUFFRCxRQUFRLEdBQUE7QUFDSixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLHNCQUFzQixDQUFrQyxDQUFDO0FBQ3JJLFFBQUEsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0csUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUN0QixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUc7QUFDeEIsWUFBQSxNQUFNLEVBQUUsR0FBR0EsYUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUMzQyxZQUFBLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFBLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUV2QyxZQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDekMsWUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFFbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFlBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDL0MsWUFBQSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLFlBQUEsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUM5QyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzdDLFlBQUEsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzlCLFlBQUEsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1RCxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFHakYsU0FBQyxDQUFDLENBQUE7QUFDRixRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBRXZDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGVBQWUsQ0FBQyxJQUFzQixFQUFBOztBQUVsQyxRQUFBLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2QsUUFBQSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkM7QUFFRCxJQUFBLHdCQUF3QixDQUFDLE9BQWdCLEVBQUE7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLFFBQUEsSUFBSSxVQUFVLEVBQUU7QUFDWixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLFNBQUE7QUFBTSxhQUFBO0FBQ0gsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CLFNBQUE7S0FDSjtBQUVELElBQUEsOEJBQThCLENBQUMsT0FBZ0IsRUFBQTtBQUMzQyxRQUFBLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7UUFFakgsSUFBSSxxQkFBcUIsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDeEYsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUIsZ0JBQUEsTUFBTSxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzthQUNqRSxDQUFBO0FBQ0osU0FBQTs7QUFFRCxRQUFBLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoSCxRQUFBLElBQUkscUJBQXFCLEVBQUU7WUFDdkIsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUIsZ0JBQUEsTUFBTSxFQUFFLENBQUM7YUFDWixDQUFBO0FBQ0osU0FBQTs7QUFFRCxRQUFBLElBQUkscUJBQXFCLEVBQUU7WUFDdkIsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUIsZ0JBQUEsTUFBTSxFQUFFLHFCQUFxQixZQUFZLGNBQWMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO2FBQ3ZILENBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQ7OztBQUdHO0FBQ0gsSUFBQSxzQkFBc0IsQ0FBQyxHQUFZLEVBQUE7UUFDL0IsSUFBSSxHQUFHLFlBQVksa0JBQWtCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkQsWUFBQSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNiLFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFNBQUE7S0FDSjtBQUVEOztBQUVHO0lBQ0gsbUJBQW1CLEdBQUE7QUFDZixRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFDNUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLFFBQVEsQ0FBQyxNQUFNLFlBQVksbUJBQW1CLEVBQUU7QUFDaEQsWUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDekMsWUFBQSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakMsWUFBQSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDckMsWUFBQSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4QyxTQUFBO0tBQ0o7QUFHSjs7TUM1NUNZLGFBQWEsQ0FBQTtJQUN0QixPQUFPLEtBQUssQ0FBQyxFQUFrQixFQUFFLFdBQXdCLEVBQUUsTUFBcUIsRUFBRSxXQUFBLEdBQW9DLElBQUksRUFBQTtBQUN0SCxRQUFBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFGLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtBQUMzQixZQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQy9EO0FBRUQ7Ozs7Ozs7QUFPRztJQUNLLE9BQU8sb0JBQW9CLENBQUMsRUFBa0IsRUFBRSxXQUF3QixFQUFFLE1BQXFCLEVBQUUsV0FBQSxHQUFvQyxJQUFJLEVBQUE7QUFDN0ksUUFBQSxNQUFNLEVBQUUsS0FBSyxFQUFDLGVBQWUsRUFBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBQyxHQUFHLFdBQVcsQ0FBQztBQUM5RCxRQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBZ0MsRUFBRSxDQUFDO0FBQ25ELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEMsWUFBQSxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDaEUsVUFBVSxDQUFDLElBQUksQ0FBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELFlBQUEsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDdEMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN4QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBNkIsQ0FBQztZQUNwRSxXQUFXLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0FBQzdCLFlBQUEsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLFlBQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsWUFBQSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixZQUFBLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFlBQUEsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxZQUFBLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFlBQUEsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDZixZQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0IsU0FBQTtBQUNELFFBQUEsT0FBTyxVQUFVLENBQUE7S0FDcEI7QUFFRDs7Ozs7OztBQU9HO0lBQ0gsT0FBTyxpQkFBaUIsQ0FBQyxFQUFrQixFQUFFLFdBQXdCLEVBQUUsTUFBcUIsRUFBRSxXQUFBLEdBQW9DLElBQUksRUFBQTtBQUNsSSxRQUFBLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFFO0FBR0Q7Ozs7QUFJRztBQUNILElBQUEsT0FBTyxhQUFhLENBQUMsRUFBa0IsRUFBRSxXQUF3QixFQUFFLE1BQXFCLEVBQUE7QUFDcEYsUUFBQSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM3RDtBQUNKLENBQUE7QUFHSyxTQUFVLG1CQUFtQixDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsRUFBQTtJQUN0RSxPQUFPLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQWlCTyxNQUFNLENBQUE7Ozs7bUJBSUwsS0FBSyxDQUFBO3dCQUNBLE1BQU0sQ0FBQTs7Ozs7O3VCQU1QLEtBQUssQ0FBQTt3QkFDSixNQUFNLENBQUE7Ozs7Ozs7Ozs7O0tBV3pCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQVNEOzs7OztBQUtHO0FBQ2EsU0FBQSxVQUFVLENBQUMsVUFBdUIsRUFBRSxPQUEwQixFQUFBO0lBQzFFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFzQixDQUFDO0FBQzFFLElBQUEsV0FBVyxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUM7QUFDaEMsSUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDcEMsSUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDL0IsSUFBQSxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDbkMsSUFBQSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLElBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDcEIsUUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU87QUFDVixLQUFBO0FBQ0QsSUFBQSxNQUFNLFNBQVMsR0FBZ0IsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RixJQUFBLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0RCxJQUFBLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVDLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsUUFBQSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQyxRQUFBLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM1RCxLQUFBO0lBQ0QsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELFVBQVUsQ0FBQyxNQUFLO0FBQ1osUUFBQSxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25DLFFBQUEsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDcEQsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUM7QUFFRDs7Ozs7QUFLRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O01DcE1hLGdCQUFnQixDQUFBO0FBQ3pCLElBQUEsT0FBTyxXQUFXLEdBQUE7QUFDZCxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFDbEMsUUFBQSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFDaEMsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdEIsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RCxRQUFBLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFDMUMsUUFBQSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUMxQyxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFDSjs7TUNqQlksZ0JBQWdCLENBQUE7QUFDTixJQUFBLE1BQUEsQ0FBQTtBQUFuQixJQUFBLFdBQUEsQ0FBbUIsTUFBcUIsRUFBQTtRQUFyQixJQUFNLENBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBZTtLQUV2QztBQUNELElBQUEsV0FBVyxDQUF1QjtBQUVsQzs7QUFFRztBQUNILElBQUEsV0FBVyxDQUFDLE9BQWUsRUFBQTtRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEIsUUFBQSxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUk7Z0JBQ0EsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsYUFBQTtBQUFDLFlBQUEsT0FBTyxDQUFDLEVBQUU7QUFDUixnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxhQUFBO0FBRUosU0FBQTs7Ozs7Ozs7Ozs7O0tBWUo7QUFFRDs7QUFFRztJQUNILGNBQWMsR0FBQTtRQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNsQixZQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQUE7S0FDSjtBQUVEOztBQUVHO0lBQ0gsY0FBYyxHQUFBO0FBQ1YsUUFBQSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUM7S0FDeEI7QUFHSjs7TUNoRHFCLHdCQUF3QixDQUFBO0lBQzFDLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBRXBDLEtBQUssR0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzFCO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxVQUEyQyxFQUFBO1FBQzlELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPO0FBQ1YsU0FBQTs7QUFFRCxRQUFBLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNELFFBQUEsSUFBSSxTQUFTLEVBQUU7QUFDWCxZQUFBLElBQUksU0FBUyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDL0IsZ0JBQUEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEMsYUFBQTtBQUFNLGlCQUFBO0FBQ0gsZ0JBQUEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwQyxhQUFBO1lBQ0QsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsUUFBQSxNQUFNLE9BQU8sR0FBb0I7QUFDN0IsWUFBQSxHQUFHLEVBQUUsU0FBZ0I7WUFDckIsR0FBRztZQUNILEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNqQixZQUFBLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLElBQUk7U0FDUCxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTs7Ozs7S0FLNUI7QUFJRCxJQUFBLGFBQWEsQ0FBQyxHQUFXLEVBQUUsTUFBcUIsRUFBRSxJQUFTLEVBQUE7QUFDdkQsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2RCxRQUFBLElBQUksR0FBRyxFQUFFO0FBQ0wsWUFBQSxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN4QixZQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsQyxZQUFBLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLFNBQUE7S0FDSjtJQUVELFlBQVksR0FBQTtBQUNSLFFBQUEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzdDO0FBR0QsSUFBQSxRQUFRLENBQUMsR0FBVyxFQUFBO0FBQ2hCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdkQsT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDO0tBQ25CO0FBRUQ7Ozs7QUFJRztJQUNILG1CQUFtQixHQUFBO0FBQ2YsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtLQUNyRjtBQUNKLENBQUE7QUFFSyxNQUFPLG9CQUFxQixTQUFRLHdCQUF3QixDQUFBO0FBQzlELElBQUEsa0JBQWtCLENBQUMsR0FBVyxFQUFBO0FBQzFCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN4QixRQUFBLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUk7WUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSSxFQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFJLEVBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pFLFNBQUMsQ0FBQyxDQUFDO0tBRU47QUFFSjs7QUNoREQ7O0FBRUc7TUFDVSxhQUFhLENBQUE7QUFjTSxJQUFBLGNBQUEsQ0FBQTtBQUFnRCxJQUFBLFdBQUEsQ0FBQTtJQWI1RSxPQUFPLEdBQVksS0FBSyxDQUFDO0FBQ3pCLElBQUEsVUFBVSxDQUFlO0FBQ2pCLElBQUEsU0FBUyxDQUFtQjs7O0FBR3BDLElBQUEsV0FBVyxDQUFjO0FBQ3pCLElBQUEsV0FBVyxDQUFlO0FBQzFCLElBQUEsV0FBVyxDQUFtQjtBQUM5QixJQUFBLFNBQVMsQ0FBa0I7QUFDM0IsSUFBQSxjQUFjLENBQXVCOztBQUVyQyxJQUFBLGVBQWUsQ0FBdUI7SUFFdEMsV0FBNEIsQ0FBQSxjQUE4QixFQUFrQixXQUF3QixFQUFBO1FBQXhFLElBQWMsQ0FBQSxjQUFBLEdBQWQsY0FBYyxDQUFnQjtRQUFrQixJQUFXLENBQUEsV0FBQSxHQUFYLFdBQVcsQ0FBYTtRQUNoRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBSztBQUM5QyxZQUFBLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQztBQUN6QixTQUFDLENBQUMsQ0FBQztLQUNOO0FBRU0sSUFBQSxrQkFBa0IsQ0FBQyxFQUF1QixFQUFBO0FBQzdDLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDN0I7QUFFRCxJQUFBLElBQVcsUUFBUSxHQUFBO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3pCO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBc0IsRUFBQTtBQUN0QyxRQUFBLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7O1FBTW5CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFLO0FBQy9ELFlBQUEsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDO0FBQ3pCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQUs7QUFDaEUsWUFBQSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUM7QUFDekIsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQUs7WUFDdkIsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFFaEIsZ0JBQUEsSUFBSSxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNiLGdCQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDNUIsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDL0IsU0FBQyxDQUFBO0tBQ0o7SUFFRCxLQUFLLEdBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXpCLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3hCO0FBRUQsSUFBQSxJQUFJLFVBQVUsR0FBQTtRQUNWLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbkU7QUFFRCxJQUFBLGFBQWEsQ0FBQyxHQUFZLEVBQUE7UUFDdEIsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxZQUFZLGVBQWUsSUFBSSxJQUFJLFlBQVksdUJBQXVCLENBQWtCLENBQUM7UUFDcEosT0FBTyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzlEO0FBRUQ7O0FBRUc7SUFDSCxnQkFBZ0IsR0FBQTtBQUNaLFFBQUEsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksWUFBWSxlQUFlLElBQUksSUFBSSxZQUFZLHVCQUF1QixDQUFrQixDQUFDO0tBQ3JKO0FBRUQsSUFBQSxNQUFNLENBQUMsR0FBa0IsRUFBQTtRQUNyQixPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDeEQ7SUFHRCxvQkFBb0IsQ0FBcUUsV0FBZ0IsRUFBRSxTQUFxQixFQUFFLE9BQTBCLEVBQUUsYUFBc0IsS0FBSyxFQUFBO0FBQ3JMLFFBQUEsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDL0osT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxPQUF1QyxDQUFDO1FBQ3JELHVCQUF1QixDQUFDLElBQUksQ0FBQztZQUN6QixXQUFXO1lBQ1gsU0FBUztBQUNULFlBQUEsT0FBTyxFQUFFLElBQUk7WUFDYixVQUFVO0FBQ1YsWUFBQSxHQUFHLEVBQUUsSUFBSTtBQUNaLFNBQUEsQ0FBQyxDQUFBO0tBQ0w7SUFHRCxPQUFPLEdBQUE7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDYixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUM7O0FBRXhCLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUU1QjtBQUVEOztBQUVHO0lBQ0gsa0JBQWtCLEdBQUE7QUFDZCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUN2RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDdEI7QUFFRDs7QUFFRztJQUNLLFdBQVcsR0FBQTtBQUNmLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0Q7QUFHRDs7QUFFRztBQUNILElBQUEsa0JBQWtCLENBQUMsY0FBd0QsRUFBRSxVQUFvRCxFQUFFLEVBQWtCLEVBQUE7O1FBRWpKLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7O0FBR1gsUUFBQSxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7O1FBRXRFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUMzQjtBQUVELElBQUEsSUFBSSxXQUFXLEdBQUE7QUFDWCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxLQUFLRyxrQkFBVSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsU0FBUyxDQUFBO0tBQ2xGO0FBQ0osQ0FBQTtBQXNCRDs7QUFFRztNQUNVLGVBQWUsQ0FBQTtBQUNMLElBQUEsR0FBQSxDQUFBO0FBQTRCLElBQUEsRUFBQSxDQUFBO0lBQS9DLFdBQW1CLENBQUEsR0FBa0IsRUFBVSxFQUFrQixFQUFBO1FBQTlDLElBQUcsQ0FBQSxHQUFBLEdBQUgsR0FBRyxDQUFlO1FBQVUsSUFBRSxDQUFBLEVBQUEsR0FBRixFQUFFLENBQWdCO0tBQ2hFO0lBRUQsZ0JBQWdCLEdBQUE7QUFDWixRQUFBLE1BQU0sV0FBVyxHQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQXFDLENBQUM7QUFDcEgsUUFBQSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakQ7SUFFRCxzQkFBc0IsR0FBQTtBQUNsQixRQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBb0QsQ0FBQztLQUNoSDtBQUVELElBQUEsY0FBYyxDQUFDLEVBQVUsRUFBQTtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQVUsSUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBNkMsQ0FBQztLQUM1STtBQUVELElBQUEsZ0JBQWdCLENBQUMsSUFBWSxFQUFBO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBVSxJQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUE2QyxDQUFDO0tBQ2hKO0FBRUQ7O0FBRUc7SUFDSCxvQkFBb0IsR0FBQTtBQUNoQixRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBeUIsSUFBSSxLQUFLO1lBQ25ELEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNmLFlBQUEsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDekIsU0FBQSxDQUFDLENBQUMsQ0FBQztLQUNQO0FBRUQ7OztBQUdHO0lBQ0gsdUJBQXVCLEdBQUE7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFlBQVksc0JBQXNCLENBQW9ELENBQUM7QUFFcEssUUFBQSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWSxzQkFBc0IsQ0FBa0MsQ0FBQztBQUM3SCxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWSxlQUFlLENBQTJCLENBQUM7O0FBR3hHLFFBQUEsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLGdCQUFnQixDQUE0QixDQUFDOztBQUU1RyxRQUFBLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFtQixJQUFJLEtBQ3RHO0FBQ0ksWUFBQSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFZO0FBQzNCLFlBQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBYztBQUMvQixZQUFBLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWU7WUFDckMsSUFBSTtZQUNKLFFBQVEsRUFBRSxNQUFLO0FBQ1gsZ0JBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDekI7QUFDRCxZQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNkLGdCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDckI7QUFDSixTQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ1IsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQW9CLElBQUksS0FDckU7QUFDSSxZQUFBLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBSztBQUM1RixnQkFBQSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUMxQixhQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ2pCLGdCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDckI7QUFDSixTQUFBLENBQUMsQ0FBQyxDQUFDOztRQUVSLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxHQUFHLG9CQUFvQixFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3BGO0FBRUQ7Ozs7QUFJRztBQUNLLElBQUEscUJBQXFCLENBQUMsYUFBc0MsRUFBQTs7QUFFaEUsUUFBQSxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7O0FBRTVFLFFBQUEsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0gsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFvQixDQUFDLFNBQVMsS0FBSTtBQUN6RSxZQUFBLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3pGLE9BQU87QUFDSCxnQkFBQSxFQUFFLEVBQUUsU0FBUztnQkFDYixJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUNuQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUM3QyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXO0FBQ2pELGdCQUFBLElBQUksRUFBRSxlQUFlO2dCQUNyQixRQUFRLEVBQUUsTUFBSztvQkFDWCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQ3RCLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFDdEMsd0JBQUEsWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pILHFCQUFBO0FBQU0seUJBQUE7QUFDSCx3QkFBQSxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDMUUsd0JBQUEsSUFBSSxpQkFBaUIsRUFBRTtBQUNuQiw0QkFBQSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztBQUN2RCx5QkFBQTtBQUNKLHFCQUFBO0FBRUQsb0JBQUEsT0FBTyxZQUFZLENBQUM7aUJBQ3ZCO0FBQ0QsZ0JBQUEsUUFBUSxFQUFFLENBQUMsR0FBMkIsS0FBSTs7QUFFdEMsb0JBQUEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7QUFDbkMsd0JBQUEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUM7d0JBQzVELE9BQU87QUFDVixxQkFBQTtvQkFDRCxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO0FBQ3RDLHdCQUFBLE1BQU0sUUFBUSxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUVoRSx3QkFBQSxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksSUFBRztBQUMzQiw0QkFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RSx5QkFBQyxDQUFDLENBQUM7QUFDTixxQkFBQTtBQUFNLHlCQUFBO0FBQ0gsd0JBQUEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUc7QUFDM0IsNEJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssR0FBRyxDQUFDO0FBQ3pELHlCQUFDLENBQUMsQ0FBQztBQUNOLHFCQUFBO2lCQUVKO2FBQ0osQ0FBQTtBQUNMLFNBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFtQixJQUFJLEtBQUs7QUFDekUsWUFBQSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLFlBQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUNyQixZQUFBLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDL0IsSUFBSTtZQUNKLFFBQVEsRUFBRSxNQUFLO0FBQ1gsZ0JBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDekI7QUFDRCxZQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUcsS0FBSTtBQUNkLGdCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDckI7QUFDSixTQUFBLENBQUMsQ0FBQyxDQUFDO0FBQ0osUUFBQSxPQUFPLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUM7S0FDOUQ7QUFFRDs7QUFFRztJQUNILGdCQUFnQixHQUFBO0FBQ1osUUFBQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksZUFBZSxDQUEyQixDQUFDO0tBQ2pHO0FBRUQsSUFBQSxtQkFBbUIsQ0FBQyxFQUFVLEVBQUE7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLGVBQWUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQTJCLENBQUM7S0FDdkg7QUFFRDs7QUFFRztJQUNILGFBQWEsR0FBQTtBQUNULFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDOUMsUUFBQSxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFHO1lBQzVCLE1BQU0sUUFBUSxHQUFHLElBQXVCLENBQUM7QUFDekMsWUFBQSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDeEUsT0FBTzs7QUFFSCxnQkFBQSxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNOztBQUU3QixnQkFBQSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFROztBQUVqQyxnQkFBQSxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJOztnQkFFekIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUF3Qjs7QUFFdkMsZ0JBQUEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTs7Z0JBRXJCLE9BQU87YUFDVixDQUFBO0FBQ0wsU0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELGVBQWUsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUFBO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEMsUUFBQSxJQUFJLE9BQU8sRUFBRTtBQUNULFlBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ25CO0lBRUQscUJBQXFCLENBQUMsSUFBWSxFQUFFLEdBQVEsRUFBQTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDM0MsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQ3hCO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLGlCQUFpQixDQUFDLFNBQWlCLEVBQUE7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ3ZGO0FBRUQsSUFBQSxlQUFlLENBQUMsU0FBaUIsRUFBQTtRQUM3QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLGdCQUFnQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBNEIsQ0FBQztLQUMxSjtBQUVEOzs7QUFHRztBQUNILElBQUEsY0FBYyxDQUFDLElBQTBELEVBQUUsWUFBQSxHQUE0QyxXQUFXLEVBQUE7QUFDOUgsUUFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzVFLFFBQUEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNmLFlBQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUc7Z0JBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtBQUM5QixhQUFDLENBQUMsQ0FBQztZQUNILFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDbEIsU0FBQTtBQUNELFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDaEQsUUFBQSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBRztBQUNwQixZQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxZQUFBLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNqQyxnQkFBQSxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsZ0JBQUEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7b0JBQy9CLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRCxpQkFBQTtnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ25DLGFBQUE7QUFDTCxTQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0o7O0FDbmJEOztBQUVHO01BQ1UsZUFBZSxDQUFBO0FBSUwsSUFBQSxNQUFBLENBQUE7SUFIbkIsWUFBWSxHQUEwQixFQUFFLENBQUM7SUFDekMsZUFBZSxHQUFrQyxFQUFFLENBQUM7SUFDcEQsT0FBTyxHQUFZLElBQUksQ0FBQztBQUN4QixJQUFBLFdBQUEsQ0FBbUIsTUFBcUIsRUFBQTtRQUFyQixJQUFNLENBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBZTtLQUFLO0FBRTdDOztBQUVFO0lBQ0YsWUFBWSxHQUFBO0FBQ1IsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBMEIsQ0FBQztBQUN4RyxRQUFBLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQy9FLFFBQUEsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUc7WUFDM0MsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ04sZ0JBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNsQyxhQUFBO0FBQ0QsWUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUNwQyxTQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sZUFBZSxHQUFrQyxFQUFFLENBQUM7QUFDMUQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNFLFlBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBMkIsQ0FBQztZQUN4RyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1YsZ0JBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JDLGFBQUE7QUFDRCxZQUFBLFdBQVcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0QyxZQUFBLFdBQVcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNsQyxZQUFBLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDcEMsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzRSxRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3hCO0FBRUQ7O0FBRUc7SUFDSCxjQUFjLEdBQUE7QUFDVixRQUFBLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUM7QUFDL0UsUUFBQSxJQUFJLFNBQVMsRUFBRTtZQUNYLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtnQkFDbkIsT0FBTztBQUNWLGFBQUE7WUFDRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7O1lBRXZFLElBQUksY0FBYyxZQUFZLGNBQWMsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7Z0JBQ3JGLElBQUksWUFBWSxZQUFZLGdCQUFnQixFQUFFO0FBQzFDLG9CQUFBLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO3dCQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MscUJBQUE7QUFDSixpQkFBQTtBQUFNLHFCQUFBO29CQUNILElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTs7O1lBR0gsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIsT0FBTTtBQUNULGFBQUE7WUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxPQUFNO0FBQ1QsYUFBQTtZQUNELE1BQU0sU0FBUyxHQUFrQyxFQUFFLENBQUM7QUFDcEQsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsZ0JBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFBLE1BQU0sUUFBUSxHQUEyQjtvQkFDckMsU0FBUztvQkFDVCxPQUFPO29CQUNQLGVBQWUsRUFBRSxTQUFTLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQztvQkFDNUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO2lCQUMzRSxDQUFDO0FBQ0YsZ0JBQUEsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUMzQixhQUFBO0FBRUQsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxnQkFBQSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRCxpQkFBQTtxQkFBTSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FLcEM7QUFDSixhQUFBO0FBQ0osU0FBQTtLQUNKO0FBR0Q7OztBQUdHO0FBQ0gsSUFBQSxhQUFhLENBQUMsRUFBVSxFQUFBO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0UsUUFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUMzQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDL0I7QUFFRCxJQUFBLGdCQUFnQixDQUFDLFFBQXdCLEVBQUE7QUFDckMsUUFBQSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUEwQixDQUFDO0FBQ3hHLFFBQUEsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDaEYsUUFBQSxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDMUM7QUFFRDs7QUFFRztJQUNILGdCQUFnQixHQUFBO1FBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUN0QztBQUVEOztBQUVHO0lBQ0gsaUJBQWlCLEdBQUE7QUFDYixRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFHLEVBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxDQUFBO0tBQzNIO0FBRUQ7OztBQUdHO0lBQ0gsb0JBQW9CLEdBQUE7QUFDaEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztLQUN2QjtBQUdKOztBQ3RESyxTQUFVLG1CQUFtQixDQUFDLFNBQXlCLEVBQUE7SUFDekQsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQztBQUMvRCxJQUFBLElBQUksRUFBRSxPQUFPLFlBQVksZ0JBQWdCLENBQUM7QUFBRSxRQUFBLE9BQU8sS0FBSyxDQUFDO0lBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUU7QUFBRSxRQUFBLE9BQU8sS0FBSyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE9BQTJCLENBQUM7QUFDN0MsSUFBQSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQixNQUFNLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFdkYsSUFBQSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsOEJBQThCLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsOEJBQThCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkgsSUFBQSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsSUFBQSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFJO0FBQ3BELFFBQUEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUN4QixZQUFBLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0FBQ3JCLFlBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDekIsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUMvQyxTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQTtBQUNmLEtBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFBLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLElBQUEsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5SyxJQUFBLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFBLE1BQU0sV0FBVyxHQUFHLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztBQUN2RCxJQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDdEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1QyxJQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0IsSUFBQSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBVUQ7Ozs7QUFJRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQVksRUFBRSxXQUFrQixFQUFBO0FBQ25ELElBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLElBQUEsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsUUFBQSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBQSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxXQUFXLEdBQUcsU0FBUyxJQUFJLFdBQVcsSUFBSSxPQUFPLEdBQUcsU0FBUyxFQUFFO1lBQy9ELE9BQU87Z0JBQ0gsS0FBSztBQUNMLGdCQUFBLEdBQUcsRUFBRSxPQUFPO2FBQ2YsQ0FBQTtBQUNKLFNBQUE7UUFDRCxLQUFLLElBQUksT0FBTyxDQUFDO0FBQ3BCLEtBQUE7QUFDRCxJQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQVMsY0FBYyxHQUFBO0FBQ25CLElBQUEsT0FBTyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0FBQ2hELENBQUM7QUFFRDs7O0FBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxLQUE4QixFQUFBO0lBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE1BQU0sU0FBUyxHQUEyQixFQUFFLENBQUM7QUFDN0MsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxRQUFBLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sUUFBUSxHQUFHO0FBQ2IsWUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzdCLEtBQUs7QUFDTCxZQUFBLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzFDLElBQUk7WUFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDbEIsQ0FBQztBQUNGLFFBQUEsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QixRQUFBLEtBQUssSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEtBQUE7QUFDRCxJQUFBLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7OztBQUlHO0FBQ0gsU0FBUyw4QkFBOEIsQ0FBQyxPQUF5QixFQUFFLElBQUksR0FBRyxJQUFJLEVBQUE7SUFDMUUsSUFBSSxRQUFRLEdBQW1CLE9BQU8sQ0FBQztJQUN2QyxNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO0FBQzlDLElBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUM7QUFDMUYsSUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQzFELElBQUEsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxZQUFZLGdCQUFnQixFQUFFOztRQUV4RSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEMsS0FBQTtBQUNELElBQUEsT0FBTyxTQUFTLENBQUM7QUFDckI7O0FDNUxBOztBQUVHO01BQ1Usa0JBQWtCLENBQUE7QUFRUixJQUFBLE1BQUEsQ0FBQTtBQUE4QixJQUFBLE1BQUEsQ0FBQTtJQU5qRCxPQUFPLEdBQTBCLEVBQUUsQ0FBQztJQUNwQyxLQUFLLEdBQVcsQ0FBQyxDQUFDOzs7QUFHbEIsSUFBQSxZQUFZLENBQXVCO0lBRW5DLFdBQW1CLENBQUEsTUFBcUIsRUFBUyxNQUFxQixFQUFBO1FBQW5ELElBQU0sQ0FBQSxNQUFBLEdBQU4sTUFBTSxDQUFlO1FBQVMsSUFBTSxDQUFBLE1BQUEsR0FBTixNQUFNLENBQWU7S0FDckU7QUFFRDs7QUFFRztJQUNILG9CQUFvQixHQUFBOzs7O0FBSWhCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDM0M7SUFFRCxLQUFLLEdBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztLQUM1QjtBQUVEOztBQUVHO0lBQ0gsYUFBYSxHQUFBO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFO1lBQzdDLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTztBQUNWLFNBQUE7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNkLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUNoQixHQUFHO1lBQ0gsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZO0FBQ2xDLFlBQUEsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDdEMsU0FBQSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUU7WUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQUE7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztLQUMvQjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLFFBQVEsQ0FBQyxHQUFvQixFQUFBO0FBQ2pDLFFBQUEsT0FBTyxLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0RoQjtJQUVPLFlBQVksR0FBQTtBQUNoQixRQUFBLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDbEcsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxLQUFLLFVBQVUsR0FBRyxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0csT0FBTztZQUNILFVBQVU7WUFDVixXQUFXO1lBQ1gsUUFBUTtZQUNSLFNBQVM7WUFDVCxRQUFRO1NBQ1gsQ0FBQTtLQUNKO0FBRUQ7O0FBRUc7SUFDSCxJQUFJLEdBQUE7UUFDQSxnQkFBZ0IsQ0FBQyxNQUFLO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNiLFlBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoQyxTQUFDLENBQUMsQ0FBQztLQUNOO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLElBQUksT0FBTyxHQUFBO0FBQ1AsUUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLElBQUksT0FBTyxHQUFBO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQzNDO0FBRUQ7O0FBRUc7SUFDSCxJQUFJLEdBQUE7UUFDQSxnQkFBZ0IsQ0FBQyxNQUFLO0FBQ2xCLFlBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsU0FBQyxDQUFDLENBQUE7S0FDTDtBQUVPLElBQUEsY0FBYyxDQUFDLE9BQXVCLEVBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLEtBQUssTUFBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUMvRSxRQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxPQUFPLEtBQUssTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN4RSxRQUFBLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFHO0FBQ2IsWUFBQSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsRUFBbUMsQ0FBQyxDQUFDO0FBQzVFLGFBQUE7QUFBTSxpQkFBQSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsRUFBc0MsQ0FBQyxDQUFBO0FBQzlFLGFBQUE7QUFBTSxpQkFBQSxJQUFJLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFO0FBQzVCLGdCQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsRUFBdUMsQ0FBQyxDQUFBO0FBQ2hGLGFBQUE7QUFBTSxpQkFBQSxJQUFJLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFO0FBQzVCLGdCQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsRUFBdUMsQ0FBQyxDQUFBO0FBQ2hGLGFBQUE7QUFBTSxpQkFBQSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBbUMsQ0FBQyxDQUFDO0FBQzFFLGFBQUE7QUFDTCxTQUFDLENBQUMsQ0FBQztLQUNOO0FBR0Q7Ozs7QUFJRztBQUNILElBQUEsZ0JBQWdCLENBQUMsS0FBMEIsRUFBQTtBQUN2QyxRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFLO0FBQ2hDLFlBQUEsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDekUsWUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBWSxDQUFDO1lBRXpELE1BQU0sRUFBRSxHQUFHLFVBQVUsS0FBSyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBWSxDQUFDO0FBQ3RGLFlBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDaEMsWUFBQSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1QixZQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxTQUFDLENBQUMsQ0FBQTtLQUNMO0FBRUQ7O0FBRUc7SUFDSCxzQkFBc0IsQ0FBQyxPQUF1QixFQUFFLElBQXVDLEVBQUE7UUFDbkYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVELFFBQUEsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3pELE9BQU8sS0FBSyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBRXRGO0FBRUQ7Ozs7QUFJRztJQUNILHNCQUFzQixDQUFDLE9BQXVCLEVBQUUsSUFBdUMsRUFBQTtRQUNuRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsUUFBQSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDekQsT0FBTyxLQUFLLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDeEY7QUFFRDs7QUFFRztJQUNILG1CQUFtQixDQUFDLE9BQXVCLEVBQUUsSUFBbUMsRUFBQTtRQUM1RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBQSxNQUFNLFdBQVcsR0FBRyxPQUFPLEtBQUssTUFBTSxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUM7O0FBRWpFLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUc7QUFDdkMsWUFBQSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEQsU0FBQyxDQUFDLENBQUE7O1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzlDO0FBRUQ7Ozs7QUFJRztJQUNILHFCQUFxQixDQUFDLE9BQXVCLEVBQUUsSUFBc0MsRUFBQTtRQUNqRixJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZGLFNBQUE7QUFBTSxhQUFBO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hCLFNBQUE7S0FDSjtBQUVEOzs7O0FBSUc7SUFDSCxxQkFBcUIsQ0FBQyxPQUF1QixFQUFFLElBQW1DLEVBQUE7UUFDOUUsSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoQixTQUFBO0FBQU0sYUFBQTtZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RixTQUFBO0tBQ0o7QUFFTyxJQUFBLGVBQWUsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxTQUFpQixFQUFFLElBQWEsRUFBQTtBQUN4RixRQUFBLE1BQU0sY0FBYyxHQUFHLFNBQVMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7UUFFNUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxRQUFBLElBQUksY0FBYyxFQUFFO0FBQ2hCLFlBQUEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RSxTQUFBO0FBQU0sYUFBQTs7QUFFSCxZQUFBLElBQUksS0FBSyxLQUFLLFdBQVcsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRTtBQUM5QixvQkFBQSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEIsT0FBTztBQUNWLGlCQUFBO0FBQU0scUJBQUE7QUFDSCxvQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLGlCQUFBO0FBQ0osYUFBQTtBQUNELFlBQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNsRCxTQUFBO0tBQ0o7QUFFRDs7OztBQUlHO0lBQ0gsV0FBVyxDQUFDLFNBQWlCLEVBQUUsUUFBZ0IsRUFBQTtRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUc7QUFDaEMsWUFBQSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFDLENBQUMsQ0FBQTtLQUNMO0FBRUQsSUFBQSxVQUFVLENBQW9CLEtBQWEsRUFBRSxJQUFBLEdBQWdCLElBQUksRUFBQTtRQUM3RCxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFNLENBQUM7S0FDMUc7QUFDSjs7TUN4UlksZ0JBQWdCLENBQUE7QUE2QkwsSUFBQSxTQUFBLENBQUE7QUFBbUMsSUFBQSxTQUFBLENBQUE7QUFBbUMsSUFBQSxVQUFBLENBQUE7QUFBdUMsSUFBQSxtQkFBQSxDQUFBO0FBQTZDLElBQUEsVUFBQSxDQUFBO0FBQWlHLElBQUEsYUFBQSxDQUFBO0FBNUJ2USxJQUFBLFVBQVUsQ0FBMkI7QUFDN0MsSUFBQSxXQUFXLENBQWM7QUFDekIsSUFBQSxNQUFNLENBQWdCO0FBQ2QsSUFBQSxVQUFVLENBQWtCO0FBQzVCLElBQUEsYUFBYSxDQUFnQjtBQUM3QixJQUFBLGFBQWEsQ0FBZ0I7QUFDckMsSUFBQSxhQUFhLENBQWdCO0FBQ3JCLElBQUEsYUFBYSxDQUFnQjtBQUM3QixJQUFBLGlCQUFpQixDQUFvQjtBQUNyQyxJQUFBLGFBQWEsQ0FBZ0I7QUFDN0IsSUFBQSxjQUFjLENBQWlCO0FBQy9CLElBQUEsaUJBQWlCLENBQW9CO0FBQ3JDLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7QUFDNUMsSUFBQSxZQUFZLENBQXFCO0FBQ2pDLElBQUEsZ0JBQWdCLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsSUFBQSxtQkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNuRCxJQUFBLGtCQUFrQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2xELElBQUEsY0FBYyxDQUFpQjs7QUFFL0IsSUFBQSx3QkFBd0IsR0FBaUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN2RSxJQUFBLGVBQWUsR0FBbUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNoRCxJQUFBLFlBQVksR0FBbUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QyxJQUFBLGlCQUFpQixHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDOztBQUVuRCxJQUFBLGlCQUFpQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDOztBQUVqRCxJQUFBLHVCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3ZELElBQUEsV0FBQSxDQUFvQixTQUF5QixFQUFVLFNBQXlCLEVBQVUsVUFBNkIsRUFBVSxtQkFBbUMsRUFBVSxVQUE2QixFQUFFLFNBQTJCLEVBQUUsVUFBMkIsRUFBVSxhQUE2QixFQUFBO1FBQXhSLElBQVMsQ0FBQSxTQUFBLEdBQVQsU0FBUyxDQUFnQjtRQUFVLElBQVMsQ0FBQSxTQUFBLEdBQVQsU0FBUyxDQUFnQjtRQUFVLElBQVUsQ0FBQSxVQUFBLEdBQVYsVUFBVSxDQUFtQjtRQUFVLElBQW1CLENBQUEsbUJBQUEsR0FBbkIsbUJBQW1CLENBQWdCO1FBQVUsSUFBVSxDQUFBLFVBQUEsR0FBVixVQUFVLENBQW1CO1FBQW9FLElBQWEsQ0FBQSxhQUFBLEdBQWIsYUFBYSxDQUFnQjtBQUN4UyxRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFDakQsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pGLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsa0NBQWtDLENBQUM7QUFDcEUsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztBQUM3QyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBOzs7QUFHdkMsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRztBQUM1QixZQUFBLEtBQUssRUFBRSxJQUFJO0FBQ1gsWUFBQSxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTTtTQUMzQyxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRztBQUN4QixZQUFBLEVBQUUsRUFBRSxNQUFNO0FBQ1YsWUFBQSxJQUFJLEVBQUUsS0FBSztTQUNkLENBQUM7QUFDRixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBNkIsQ0FBQztBQUMxRSxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7QUFDNUQsUUFBQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdHLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4RSxRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3hHLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sS0FBSTtBQUNwRCxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDaEMsU0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDNUMsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzVCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFJO0FBQy9DLFlBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQy9CLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUFJO0FBQ2pELFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUM3QixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUc7QUFDM0MsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzNCLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFHO0FBQ3JELFNBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFLO1lBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtBQUMxQixTQUFDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUk7QUFDekMsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQzFCLFNBQUMsQ0FBQyxDQUFDO0tBQ047QUFFRDs7QUFFRztJQUNILGNBQWMsR0FBQTtBQUNWLFFBQUEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0FBQ2YsUUFBQSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixRQUFBLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7WUFDakMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckQsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUN0QyxZQUFBLE1BQU0sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN6RCxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2QsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNsQixTQUFBO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztBQUN0RyxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDOUI7SUFFRCxlQUFlLEdBQUE7UUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDMUQsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2pFLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNsRSxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSTtBQUM5QixZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBQyxDQUFDO0tBQ0w7SUFFRCxlQUFlLEdBQUE7UUFDWCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO0FBQ2hELFFBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLEdBQUcsR0FBRyxDQUFDO0tBQ3RCO0FBRUQsSUFBQSxTQUFTLENBQXVCOztJQUV4QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFFaEMsZUFBZSxHQUFBO0FBQ1gsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTs7QUFFdkMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQUs7WUFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3ZCLFlBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsWUFBQSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztBQUNyQyxZQUFBLElBQUksRUFBRSxFQUFFO0FBQ0osZ0JBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxnQkFBQSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPO0FBQ1YsYUFBQTtBQUNELFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNsQyxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUM3QyxTQUFDLENBQUM7QUFDRixRQUFBLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBSztZQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwQixhQUFBO0FBQ0wsU0FBQyxDQUFDLENBQUM7S0FDTjtBQUVEOzs7QUFHRztJQUNILGdCQUFnQixHQUFBO0FBQ1osUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDakM7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGNBQWMsQ0FBQyxFQUFjLEVBQUE7QUFDekIsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDbkMsUUFBQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUk7QUFDQSxZQUFBLEVBQUUsRUFBRSxDQUFDO0FBQ1IsU0FBQTtBQUFDLFFBQUEsT0FBTyxDQUFDLEVBQUU7QUFDUixZQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztLQUNoQztBQUdELElBQUEsT0FBTyxDQUFDLElBQTJCLEVBQUE7QUFDL0IsUUFBQVksZ0JBQXNCLENBQUMsTUFBSztBQUN4QixZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlCLFNBQUMsQ0FBQyxDQUFDO0tBQ047QUFFRDs7OztBQUlHO0lBQ0gsYUFBYSxHQUFBO0FBQ1QsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLElBQUksQ0FBQztLQUN4RjtBQUVELElBQUEsVUFBVSxDQUFDLEdBQVUsRUFBQTtBQUNqQixRQUFBLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUF3QixDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDaEQsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBZSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDbkUsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDM0QsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEM7QUFFRDs7O0FBR0c7SUFDSyxlQUFlLEdBQUE7QUFDbkIsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUNsQyxPQUFPO0FBQ1YsU0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQztBQUNwRCxRQUFBLElBQUksT0FBTyxFQUFFO0FBQ1QsWUFBQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEMsWUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdkMsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQy9CLFlBQUFBLGdCQUFzQixDQUFDLE1BQUs7QUFDeEIsZ0JBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQyxhQUFDLENBQUMsQ0FBQztBQUNILFlBQUEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25DLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0I7QUFFRDs7OztBQUlHO0FBQ0ssSUFBQSxXQUFXLENBQUMsT0FBZ0IsRUFBQTtRQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUNoRSxRQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQzlDLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixRQUFBLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvRSxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDOUI7QUFFTyxJQUFBLGNBQWMsQ0FBQyxPQUFpRSxFQUFBO0FBQ3BGLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUNyRTtBQUVEOztBQUVHO0lBQ0ssU0FBUyxHQUFBO1FBQ2IsTUFBTSxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ3hELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtBQUN0QixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNyQyxZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBO1FBQ0QsTUFBTSxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQTRCLENBQUM7QUFDbkYsUUFBQSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUcsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQy9DLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUMsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNmO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsa0JBQWtCLENBQTRCLEdBQU0sRUFBQTtBQUNoRCxRQUFBLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEIsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7WUFDakIsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNuQyxTQUFBO0FBQ0QsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNkO0FBRUQ7OztBQUdHO0lBQ0ssWUFBWSxHQUFBO1FBQ2hCLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDbEUsUUFBQSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzVCLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUtQLGVBQU8sQ0FBQyxNQUFNLEVBQUU7QUFDN0MsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7O1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBS0EsZUFBTyxDQUFDLElBQUksRUFBRTtBQUMzQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLFNBQUE7O1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBS0EsZUFBTyxDQUFDLFFBQVEsRUFBRTtBQUMvQyxZQUFBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDakQsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQzFDLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDaEIsU0FBQTs7QUFFRCxRQUFBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUtBLGVBQU8sQ0FBQyxRQUFRLElBQUksbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ2pHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNwQyxnQkFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7QUFHRztBQUNLLElBQUEsWUFBWSxDQUFDLFNBQXFCLEVBQUE7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN6QyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztLQUN2QztBQUVEOztBQUVHO0FBQ0ssSUFBQSxjQUFjLENBQUMsR0FBZSxFQUFBO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQzlDLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDL0I7QUFFRDs7O0FBR0c7QUFDSyxJQUFBLGlCQUFpQixDQUFDLEdBQWUsRUFBQTtRQUNyQyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsUUFBQSxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUMxQixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQztBQUVEOzs7QUFHRztJQUNILHFCQUFxQixHQUFBO0FBQ2pCLFFBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztBQUM3RCxRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxjQUFjLENBQUM7QUFDdEMsUUFBQSxJQUFJLFlBQVksRUFBRTtBQUNkLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDMUMsZ0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixhQUFBO1lBQ0QsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxlQUFlLENBQTZDLENBQUM7QUFDM0csU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7QUFHRztBQUNILElBQUEsMEJBQTBCLENBQUMsR0FBUSxFQUFBO0FBQy9CLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDN0MsUUFBQSxJQUFJLE9BQU8sRUFBRTtBQUNULFlBQUEsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0IsU0FBQTtLQUNKO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsc0JBQXNCLENBQUMsT0FBb0IsRUFBQTtRQUN2QyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQ3RCLFlBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBQyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUN2RCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUN0RSxPQUFPLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFDLENBQUE7S0FDNUY7QUFFRDs7O0FBR0c7SUFDSCxZQUFZLEdBQUE7QUFDUixRQUFBLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM3RTtJQUVELGdCQUFnQixHQUFBO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNoRCxRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGFBQWEsQ0FBQyxHQUFlLEVBQUE7UUFDekIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRCxRQUFBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsUUFBQSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUNuQyxRQUFBLGFBQWEsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sUUFBUSxHQUFHLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBQyxDQUFDO0FBQ2hHLFFBQUEsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO0tBQ2pGO0lBRUQsY0FBYyxHQUEwQixJQUFJLENBQUM7SUFFN0MscUJBQXFCLEdBQUE7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLElBQUc7WUFDM0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzNCLFNBQUMsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztLQUMxQjtJQUVPLGVBQWUsR0FBQTtRQUNuQixNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUM5QyxRQUFBLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO0FBQ3ZDLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO0FBQ3ZFLFNBQUE7O0FBRUQsUUFBQSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxLQUFLLFVBQVUsRUFBRTtZQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0FBQ2xHLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixTQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3RCO0lBRUQsV0FBVyxDQUFDLE9BQXVDLFNBQVMsRUFBQTtBQUN4RCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxPQUFPLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztRQUNoRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFNBQUE7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7S0FDekI7QUFFRDs7OztBQUlHO0FBQ0gsSUFBQSxLQUFLLENBQUMsS0FBYSxFQUFBOztBQUVmLFFBQUEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUU7QUFDaEQsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDbEQsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMxQjtBQUVEOzs7O0FBSUc7QUFDSyxJQUFBLFVBQVUsQ0FBQyxLQUFhLEVBQUE7QUFDNUIsUUFBQSxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLFFBQUEsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakMsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVPLGVBQWUsR0FBQTtBQUNuQixRQUFBLE1BQU0sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNoRSxRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0tBQ3JEO0lBRUQsa0JBQWtCLEdBQUE7QUFDZCxRQUFBLElBQUksRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQzdELFFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7S0FDakU7QUFHRDs7OztBQUlHO0lBQ0gsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUE7UUFDbEMsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEQsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN2QztBQUVEOztBQUVHO0lBQ0gsYUFBYSxHQUFBO0FBQ1QsUUFBQSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7S0FDNUY7SUFFRCxhQUFhLEdBQUE7QUFDVCxRQUFBLE9BQU8sYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDaEg7QUFFRDs7QUFFRztJQUNILFFBQVEsR0FBQTtBQUNKLFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUN0QixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixZQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUMsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDdkI7QUFFRDs7O0FBR0c7SUFDSCxZQUFZLENBQUMsTUFBOEIsSUFBSSxFQUFBOztRQUUzQyxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7OztBQUdyRCxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUVELE9BQU8sR0FBQTtBQUNILFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDbkMsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDekI7QUFHRDs7O0FBR0c7SUFDSCwwQkFBMEIsR0FBQTtBQUN0QixRQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDM0MsUUFBQSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUU7QUFDMUIsZ0JBQUEsSUFBSSxjQUFjLENBQUMsWUFBWSxZQUFZLGdCQUFnQixFQUFFO0FBQ3pELG9CQUFBLE9BQU8sY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDNUMsaUJBQUE7QUFDSixhQUFBO0FBQ0QsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNmLFNBQUE7UUFDRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtBQUN6RCxRQUFBLElBQUksVUFBVSxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsRUFBRTtBQUMvQyxZQUFBLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDbEMsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELHFCQUFxQixHQUFBO0FBQ2pCLFFBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUMzQyxRQUFBLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFO0FBQ2pELFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDZixTQUFBO0FBQ0QsUUFBQSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQXFCLENBQUM7UUFDNUcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3JCO0FBR0QsSUFBQSxhQUFhLENBQUMsUUFBNEIsRUFBQTtRQUN0QyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEtBQUk7QUFDbkQsWUFBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLFNBQUMsQ0FBQyxDQUFBO0tBQ0w7QUFHRDs7QUFFRztJQUNILGlCQUFpQixHQUFBO0FBQ2IsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUN0RCxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsRUFBRTtZQUMxQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxZQUFBLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztBQUN0RSxZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsb0JBQW9CLENBQUM7WUFFL0QsTUFBTSxXQUFXLEdBQW1CLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFLO2dCQUN6QyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEIsZ0JBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsQyxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO2dCQUNoRSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMxQixpQkFBQTtBQUNMLGFBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBQSxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQUs7Z0JBQ3RCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQixnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO0FBQ3BFLGFBQUMsQ0FBQztBQUNGLFlBQUEsT0FBTyxXQUFXLENBQUM7QUFDdEIsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVEOzs7QUFHRztBQUNILElBQUEsZUFBZSxDQUFDLEtBQWdCLEVBQUE7QUFDNUIsUUFBQSxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQXlCLEtBQUk7QUFDN0MsWUFBQSxTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNoQyxTQUFDLENBQUM7UUFDRixjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDaEU7SUFHRCxXQUFXLEdBQUE7QUFDUCxRQUFBLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0tBQzVDO0FBRUQ7O0FBRUc7SUFDSCxzQkFBc0IsR0FBQTtBQUNsQixRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztLQUNoRDtBQUVEOzs7QUFHRztBQUNILElBQUEsYUFBYSxDQUFDLEVBQVUsRUFBQTtBQUNwQixRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUMvQjtBQUVEOztBQUVHO0lBQ0gsb0JBQW9CLEdBQUE7UUFDaEIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLHNCQUFzQixFQUE0QixDQUFDO0FBQ3BKLFFBQUEsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEMsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7SUFDSCxhQUFhLEdBQUE7QUFDVCxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDdkM7QUFFRDs7QUFFRztJQUNILGdCQUFnQixHQUFBO0FBQ1osUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7S0FDdEM7SUFHRCxRQUFRLEdBQUE7QUFDSixRQUFBLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFvQixDQUFDO0FBQzlHLFFBQUEsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQXNCLENBQUM7UUFDdkMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDcEMsUUFBQSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0FBRUQ7OztBQUdHO0FBQ0gsSUFBQSxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7QUFDN0QsUUFBQU8sZ0JBQXNCLENBQUMsTUFBSztBQUN4QixZQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFlBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLFlBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ3BDLFlBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFNBQUMsQ0FBQyxDQUFDO0tBQ047QUFFRDs7O0FBR0c7SUFDSCxRQUFRLEdBQUE7QUFDSixRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQyxRQUFBLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUN6QztBQUVEOztBQUVHO0lBQ0gsSUFBSSxHQUFBO0FBQ0EsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzVCO0FBRUQ7O0FBRUc7SUFDSCxJQUFJLEdBQUE7QUFDQSxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDNUI7QUFFRDs7QUFFRztJQUNILE9BQU8sR0FBQTtBQUNILFFBQUEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztLQUNwQztBQUVEOztBQUVHO0lBQ0gsT0FBTyxHQUFBO0FBQ0gsUUFBQSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0tBQ3BDO0lBRUQsa0JBQWtCLENBQUMsU0FBK0IsSUFBSSxFQUFBO1FBQ2xELE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDeEMsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksbUJBQW1CLENBQXdCLENBQUM7QUFDakcsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDMUMsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbEMsU0FBQTtLQUNKO0FBRUQsSUFBQSxJQUFJLGdCQUFnQixHQUFBO0FBQ2hCLFFBQUEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO0tBQzlDO0lBRUQsa0JBQWtCLEdBQUE7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO0tBQ2xFO0lBRUQsZUFBZSxHQUFBO0FBQ1gsUUFBQSxPQUFPLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNsRjtJQUVELGVBQWUsR0FBQTtBQUNYLFFBQUEsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuRyxRQUFBLE9BQU8sZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGdCQUFpQyxDQUFDLENBQUM7S0FDOUU7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLGNBQWMsQ0FBQyxXQUF1QixFQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDdEQsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUMvQjtBQUVEOzs7O0FBSUc7SUFDSCxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBQTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDNUMsUUFBQSxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFBLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDN0QsUUFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvRCxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM3QjtBQUVEOztBQUVHO0lBQ0gsbUJBQW1CLEdBQUE7QUFDZixRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztLQUM3QztBQUVEOzs7QUFHRztBQUNILElBQUEsV0FBVyxDQUFDLE9BQWdCLEVBQUE7QUFDeEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxPQUFPLFlBQVksYUFBYSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFzQixDQUFDO0FBQ2pILFFBQUEsSUFBSSxHQUFHLEVBQUU7WUFDTCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBeUIsQ0FBQztBQUN2RyxZQUFBLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNuQyxZQUFBLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RSxZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLFlBQUEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO2dCQUM3SSxPQUFPO0FBQ1YsYUFBQTtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0YsU0FBQTtLQUNKO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLGlCQUFpQixDQUFDLFVBQWdDLEVBQUE7QUFDOUMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDdkIsT0FBTztBQUNWLFNBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakQ7QUFFRDs7Ozs7O0FBTUc7QUFDSCxJQUFBLGFBQWEsQ0FBQyxhQUFzQixFQUFFLFlBQW9CLEVBQUUsWUFBNEIsRUFBQTtBQUNwRixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtBQUMvQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ3ZGO0lBRUQsV0FBVyxHQUFBOztBQUVQLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQyxRQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDekMsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsUUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ2xCLFFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztLQUMvRTtBQUVELElBQUEsY0FBYyxDQUFDLEtBQWEsRUFBQTtBQUN4QixRQUFBLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7S0FDdEY7QUFFRCxJQUFBLFlBQVksQ0FBQyxHQUFZLEVBQUE7QUFDckIsUUFBQSxPQUFPLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0M7QUFFRCxJQUFBLGdCQUFnQixDQUFDLElBQW9CLEVBQUE7QUFDakMsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUMxQixTQUFBO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0tBQzFCO0lBR0QsS0FBSyxHQUFBOztBQUVELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFM0QsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBb0IsQ0FBQzs7QUFFbkYsUUFBQSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLFlBQVksdUJBQXVCLENBQTRCLENBQUM7O1FBRXZILE9BQU8sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFJOztZQUVwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUk7QUFDbkUsZ0JBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7Z0JBRTVCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7O2dCQUVoRCxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDOztnQkFFbEMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkMsYUFBQyxDQUFDLENBQUM7QUFFUCxTQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0o7O0FDMzdCRDs7QUFFRztNQUNVLGVBQWUsQ0FBQTtBQUN4Qjs7O0FBR0c7QUFDSCxJQUFBLFlBQVksQ0FBa0I7SUFFOUIsUUFBUSxHQUFtRCxFQUFFLENBQUM7QUFDOUQ7O0FBRUc7SUFDSCxHQUFHLENBQUMsT0FBd0IsRUFBRSxFQUFVLEVBQUE7QUFDcEMsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7S0FDbEQ7SUFFRCxPQUFPLEdBQUE7QUFDSCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUM1QjtBQUVEOztBQUVHO0lBQ0gsSUFBSSxHQUFBO1FBQ0EsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQyxRQUFBLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxZQUFZLG1CQUFtQixDQUF3QixDQUFDO1FBQ2pHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNsQixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFlBQUEsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDdkQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNDLFlBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWSxtQkFBbUIsQ0FBd0IsQ0FBQTtZQUNyRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ2xDLFNBQUE7QUFDRCxRQUFBLE9BQU8sUUFBUSxDQUFDO0tBQ25CO0FBQ0o7O0FDaENEOztBQUVHO01BQ21CLDBCQUEwQixDQUFBO0FBQzVDLElBQUEsYUFBYSxDQUFnQjtBQUM3QixJQUFBLFdBQVcsQ0FBYztBQUN6QixJQUFBLE1BQU0sQ0FBZ0I7QUFDdEIsSUFBQSxTQUFTLENBQW9CO0FBQzdCLElBQUEsYUFBYSxDQUFnQjtBQUU3QixJQUFBLFdBQUEsR0FBQTtBQUNJLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsa0NBQWtDLENBQUM7QUFDcEUsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztBQUM3QyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsa0JBQWtCLENBQUM7O0FBRXRELFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUc7QUFDNUIsWUFBQSxLQUFLLEVBQUUsSUFBSTtBQUNYLFlBQUEsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRztBQUN4QixZQUFBLEVBQUUsRUFBRSxNQUFNO0FBQ1YsWUFBQSxJQUFJLEVBQUUsS0FBSztTQUNkLENBQUM7QUFDRixRQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsUUFBQSxNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RELFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRSxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMvRSxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEUsUUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFLO0FBQy9CLFNBQUMsQ0FBQztLQUNMO0FBRUQsSUFBQSxNQUFNLEtBQUssQ0FBQyxJQUEyQixFQUFFLFNBQStCLElBQUksRUFBQTtBQUN4RSxRQUFBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNyQixZQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckIsT0FBTztBQUNWLFNBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDNUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUM1QztBQUVEOztBQUVHO0FBQ0gsSUFBQSxNQUFNLGdCQUFnQixDQUFDLElBQTJCLEVBQUUsU0FBK0IsSUFBSSxFQUFBO0FBQ25GLFFBQUEsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RSxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3JCLFlBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNyQixZQUFBLE9BQU8sRUFBRSxDQUFDO0FBQ2IsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUNwRDtBQUVELElBQUEsTUFBTSxhQUFhLENBQUMsSUFBMkIsRUFBRSxTQUErQixJQUFJLEVBQUE7QUFDaEYsUUFBQSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDdEI7QUFFRDs7O0FBR0c7SUFDSyxNQUFNLE9BQU8sQ0FBQyxJQUEyQixFQUFBO0FBQzdDLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzdCLFFBQUEsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUQsUUFBQSxNQUFNLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDdkUsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUNuRDtBQUVELElBQUEsY0FBYyxDQUFDLFVBQXVDLEVBQUUsV0FBQSxHQUFvQyxJQUFJLEVBQUE7QUFDNUYsUUFBQSxNQUFNLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkUsTUFBTSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztBQUNoRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzlDLFNBQVM7QUFDWixhQUFBO0FBQ0QsWUFBQSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRSxZQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDekMsWUFBQSxTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUM3QixZQUFBLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxZQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFlBQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFlBQUEsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxZQUFBLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLFlBQUEsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDZixZQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0IsU0FBQTtBQUNELFFBQUEsT0FBTyxVQUFVLENBQUM7S0FDckI7QUFLSixDQUFBO0FBR0ssTUFBTyxzQkFBdUIsU0FBUSwwQkFBMEIsQ0FBQTtBQUNsRSxJQUFBLGVBQWUsQ0FBQyxPQUFpQyxFQUFFLFdBQXdCLEVBQUUsTUFBcUIsRUFBQTtRQUM5RixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3ZFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDekMsUUFBQSxPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUVELFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFBO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsUUFBQSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN0QyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUE2QixDQUFDO0FBQ3BFLFFBQUEsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUUsT0FBTztZQUNILE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRztTQUMxQixDQUFBO0tBQ0o7QUFDSjs7QUN2SUQ7OztBQUdHO0FBQ1UsTUFBQSxzQkFBc0IsR0FBNEMsQ0FBQyxHQUFHLEtBQVU7QUFDekYsSUFBQSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRSxJQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ1gsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUM1QyxZQUFBLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSTtnQkFDZCxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvRCxnQkFBQSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RyxnQkFBQSxJQUFJLGdCQUFnQixFQUFFO0FBQ2xCLG9CQUFBLGNBQWMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsaUJBQUE7QUFBTSxxQkFBQTtvQkFDSCxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsaUJBQUE7Z0JBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDNUI7QUFDSixTQUFBO0FBQ0osS0FBQSxDQUFDLENBQUM7QUFDUCxFQUFDO0FBRUQ7OztBQUdHO0FBQ1UsTUFBQSxxQkFBcUIsR0FBNEMsQ0FBQyxJQUFJLEtBQVU7QUFDekYsSUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNaLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDdkMsWUFBQSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDYixnQkFBQSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQzNFO0FBQ0osU0FBQTtBQUNKLEtBQUEsQ0FBQyxDQUFDO0FBQ0gsSUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNaLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDdkMsWUFBQSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUk7QUFDYixnQkFBQSxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ25GO0FBQ0osU0FBQTtBQUNKLEtBQUEsQ0FBQyxDQUFDO0FBQ1AsRUFBRTtBQUVXLE1BQUEsbUJBQW1CLEdBQXlDLENBQUMsR0FBRyxLQUFTO0FBQ2xGLElBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDWCxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzNDLFlBQUEsT0FBTyxFQUFDLENBQUMsQ0FBQyxLQUFHO0FBQ1QsZ0JBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUNyQjtBQUNKLFNBQUE7QUFDSixLQUFBLENBQUMsQ0FBQztBQUNQLEVBQUU7QUFFVyxNQUFBLGtCQUFrQixHQUF5QyxDQUFDLEdBQUcsS0FBUztBQUNqRixJQUFBLE1BQU0sRUFBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUMsY0FBYyxFQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hFLElBQUEsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQzFDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDWCxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzVDLGdCQUFBLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSTtvQkFDZCxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkIsb0JBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLDhCQUE4QixDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JHLG9CQUFBLElBQUksT0FBTyxFQUFFO3dCQUNULGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMscUJBQUE7b0JBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN4QixjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzVCO0FBQ0osYUFBQTtBQUNKLFNBQUEsQ0FBQyxDQUFDO0FBQ04sS0FBQTtBQUNELElBQUEsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3pDLFFBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDWCxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDaEQsZ0JBQUEsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFJO0FBQ2Qsb0JBQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtpQkFDdkM7QUFDSixhQUFBO0FBQ0osU0FBQSxDQUFDLENBQUM7QUFDTixLQUFBO0FBQ0QsSUFBQSxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDeEMsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDdkMsZ0JBQUEsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFJO29CQUNkLGNBQWMsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtpQkFDakQ7QUFDSixhQUFBO0FBQ0osU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1gsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTtBQUMzQyxnQkFBQSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUk7QUFDZCxvQkFBQSxTQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2lCQUN4QztBQUNKLGFBQUE7QUFDSixTQUFBLENBQUMsQ0FBQztBQUVOLEtBQUE7QUFDRCxJQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ1gsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN6QyxZQUFBLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSTtBQUNkLGdCQUFBLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RixjQUFjLENBQUMsV0FBVyxFQUFFLENBQUE7YUFDL0I7QUFDSixTQUFBO0FBQ0osS0FBQSxDQUFDLENBQUM7QUFDSCxJQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ1gsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN6QyxZQUFBLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSTtBQUNkLGdCQUFBLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFBO2FBQy9CO0FBQ0osU0FBQTtBQUNKLEtBQUEsQ0FBQyxDQUFDO0lBQ0gsR0FBRyxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsRUFBRTtBQUVGLFNBQVMscUJBQXFCLENBQUMsTUFBeUIsRUFBQTtJQUNwRCxJQUFJLEdBQUcsR0FBc0IsRUFBRSxDQUFDO0FBQ2hDLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFFBQUEsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsU0FBQTtBQUNKLEtBQUE7QUFDRCxJQUFBLE9BQU8sR0FBRyxDQUFDO0FBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
|
17101
|
+
//# sourceMappingURL=index-cjs.js.map
|