qms-angular 1.1.68 → 1.1.70
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/bundles/qms-angular.umd.js +17 -9
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/jointJS/bpmn/bpmn.custom.function.js +1 -2
- package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +5 -3
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +14 -7
- package/fesm2015/qms-angular.js +17 -9
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +3 -2
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +372 -607
- package/src/assets/qms-ckeditor-plugin/build/translations/af.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ast.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/az.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ca.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/da.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/el.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/eo.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/es.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/et.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/eu.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/gu.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/he.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/id.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/it.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/kk.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/km.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/kn.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ms.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/no.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/oc.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pt.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/si.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/th.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tt.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +0 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +0 -1
@@ -526,7 +526,6 @@ function overwriteBPMNPool() {
|
|
526
526
|
bpmn2.Pool.prototype.autoresize = function (flags) {
|
527
527
|
var minSize = this.getMinimalSize();
|
528
528
|
var currentSize = this.attributes.size;
|
529
|
-
this.resize(Math.max(minSize.width, currentSize.width), Math.max(minSize.height, currentSize.height), flags);
|
530
529
|
//QMS-3572: customization
|
531
530
|
if (flags.propertyPath) {
|
532
531
|
if (flags.propertyPath.includes('sublanes') && !flags.propertyPath.includes('label')) {
|
@@ -1332,4 +1331,4 @@ const BPMNCustomFunction = {
|
|
1332
1331
|
};
|
1333
1332
|
export default BPMNCustomFunction;
|
1334
1333
|
export { ɵ0 };
|
1335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtbi5jdXN0b20uZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbW1vbi9qb2ludEpTL2JwbW4vYnBtbi5jdXN0b20uZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFLNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUVwQixNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFckUsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQzlCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUM7O0FBRUYsU0FBUyx5QkFBeUI7SUFDOUIscUJBQXFCLEVBQUUsQ0FBQztJQUN4QixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsc0JBQXNCLEVBQUUsQ0FBQztJQUN6Qix1QkFBdUIsRUFBRSxDQUFDO0lBQzFCLHlCQUF5QixFQUFFLENBQUM7SUFDNUIsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLGlCQUFpQixFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQzVDLElBQUksRUFBRSxLQUFLO1FBQ1gsSUFBSSxFQUFFLEtBQUs7UUFDWCxrQkFBa0Is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b0JBQ3hCLFdBQVcsRUFBRSxFQUFFO2lCQUNsQjthQUNKO1NBRUosRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0tBQzNDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0Qix5QkFBeUIsRUFBRSxDQUFDO0lBQzVCLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHO0lBQ3ZCLGlCQUFpQjtDQUNwQixDQUFDO0FBRUYsZUFBZSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZhclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xuY29uc3QgaGFzJDIgPSBfLmhhcztcblxuY29uc3Qgc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZCA9IGpvaW50LmVudi50ZXN0KCdzdmdmb3JlaWdub2JqZWN0Jyk7XG5cbmNvbnN0IGlzT2JqZWN0JDEgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xufTtcblxuZnVuY3Rpb24gb3ZlcndyaXRlQ3VzdG9tU2hhcGVBdHRycygpIHtcbiAgICBvdmVyd3JpdGVCUE1OQWN0aXZpdHkoKTtcbiAgICBvdmVyd3JpdGVCUE1ORXZlbnQoKTtcbiAgICBvdmVyd3JpdGVCUE1OR2F0ZXdheSgpO1xuICAgIG92ZXJ3cml0ZUJQTU5EYXRhU3RvcmUoKTtcbiAgICBvdmVyd3JpdGVCUE1ORGF0YU9iamVjdCgpO1xuICAgIG92ZXJ3cml0ZUJQTU5Db252ZXJzYXRpb24oKTtcbiAgICBvdmVyd3JpdGVCUE1OR3JvdXAoKTtcbiAgICBvdmVyd3JpdGVBbm5vdGF0aW9uKCk7XG4gICAgb3ZlcndyaXRlQlBNTlBvb2woKTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQlBNTkFjdGl2aXR5KCkge1xuICAgIGJwbW4yLkFjdGl2aXR5LnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmWTogJzUwJScsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICB0ZXh0VmVydGljYWxBbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICB0ZXh0V3JhcDoge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0FjdGl2aXR5Jyk7XG5cbiAgICBhZGRMYWJlbFBvc2l0aW9uQXR0cmlidXRlKCdBY3Rpdml0eScsXG4gICAgICAgIGZ1bmN0aW9uICh3aWR0aFNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAod2lkdGhTaXplIC8gMikgLSAxMDtcbiAgICAgICAgfVxuICAgICAgICAsIG51bGwpO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1ORXZlbnQoKSB7XG4gICAgYnBtbjIuRXZlbnQucHJvdG90eXBlLmRlZmF1bHRzLmF0dHJzLmxhYmVsID0ge1xuICAgICAgICByZWZEeTogMTAsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICB0ZXh0VmVydGljYWxBbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnRXZlbnQnKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0V2ZW50Jyk7XG5cbiAgICBicG1uMi5FdmVudC5wcm90b3R5cGUubWFya3VwID0gW3tcbiAgICAgICAgdGFnTmFtZTogJ2VsbGlwc2UnLFxuICAgICAgICBzZWxlY3RvcjogJ2JhY2tncm91bmQnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnaW1hZ2UnLFxuICAgICAgICBzZWxlY3RvcjogJ2ljb24nXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAncGF0aCcsXG4gICAgICAgIHNlbGVjdG9yOiAnYm9yZGVyJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGFnTmFtZTogJ3RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsJ1xuICAgIH1dO1xuXG4gICAgYWRkTGFiZWxQb3NpdGlvbkF0dHJpYnV0ZSgnRXZlbnQnLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OR2F0ZXdheSgpIHtcbiAgICBicG1uMi5HYXRld2F5LnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmRHk6IDEwLFxuICAgICAgICByZWZYOiAnNTAlJyxcbiAgICAgICAgdGV4dFZlcnRpY2FsQW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0dhdGV3YXknKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0dhdGV3YXknKTtcblxuICAgIGJwbW4yLkdhdGV3YXkucHJvdG90eXBlLm1hcmt1cCA9IFt7XG4gICAgICAgIHRhZ05hbWU6ICdwb2x5Z29uJyxcbiAgICAgICAgc2VsZWN0b3I6ICdib2R5J1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ2ltYWdlJyxcbiAgICAgICAgc2VsZWN0b3I6ICdpY29uJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0dhdGV3YXknLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1ORGF0YVN0b3JlKCkge1xuICAgIGJwbW4yLkRhdGFTdG9yZS5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHRleHRWZXJ0aWNhbEFuY2hvcjogJ3RvcCcsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICByZWZZOiAnMTAwJScsXG4gICAgICAgIHJlZlkyOiAxMCxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBmaWxsOiAnIzMzMzMzMycsXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnRGF0YVN0b3JlJyk7XG4gICAgYWRkTGFiZWxCYWNrZ3JvdW5kQXR0cmlidXRlKCdEYXRhU3RvcmUnKTtcblxuICAgIGJwbW4yLkRhdGFTdG9yZS5wcm90b3R5cGUubWFya3VwID0gW3tcbiAgICAgICAgdGFnTmFtZTogJ3BhdGgnLFxuICAgICAgICBzZWxlY3RvcjogJ2JvZHknXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnZWxsaXBzZScsXG4gICAgICAgIHNlbGVjdG9yOiAndG9wJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0RhdGFTdG9yZScsIG51bGwsIGZ1bmN0aW9uIChoZWlnaHRTaXplKSB7XG4gICAgICAgIHJldHVybiAoLSBoZWlnaHRTaXplIC8gMikudG9TdHJpbmcoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQlBNTkRhdGFPYmplY3QoKSB7XG4gICAgYnBtbjIuRGF0YU9iamVjdC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZlk6ICcxMDAlJyxcbiAgICAgICAgcmVmWTI6IDEwLFxuICAgICAgICByZWZYOiAnNTAlJyxcbiAgICAgICAgdGV4dFZlcnRpY2FsQW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0RhdGFPYmplY3QnKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0RhdGFPYmplY3QnKTtcblxuICAgIGJwbW4yLkRhdGFPYmplY3QucHJvdG90eXBlLm1hcmt1cCA9IFt7XG4gICAgICAgIHRhZ05hbWU6ICdwYXRoJyxcbiAgICAgICAgc2VsZWN0b3I6ICdib2R5J1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICdpbWFnZScsXG4gICAgICAgIHNlbGVjdG9yOiAnZGF0YVR5cGVJY29uJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ2ltYWdlJyxcbiAgICAgICAgc2VsZWN0b3I6ICdjb2xsZWN0aW9uSWNvbidcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0RhdGFPYmplY3QnLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OQ29udmVyc2F0aW9uKCkge1xuICAgIGJwbW4yLkNvbnZlcnNhdGlvbi5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZkR5OiAxMCxcbiAgICAgICAgcmVmWDogJzUwJScsXG4gICAgICAgIHRleHRWZXJ0aWNhbEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICAgICAgbGFiZWxQb3NpdGlvbjogdHJ1ZVxuICAgIH07XG5cbiAgICBhZGRUZXh0QXR0cmlidXRlKCdDb252ZXJzYXRpb24nKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0NvbnZlcnNhdGlvbicpO1xuXG4gICAgYnBtbjIuQ29udmVyc2F0aW9uLnByb3RvdHlwZS5tYXJrdXAgPSBbe1xuICAgICAgICB0YWdOYW1lOiAncG9seWdvbicsXG4gICAgICAgIHNlbGVjdG9yOiAnYm9keSdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICdyZWN0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbEJhY2tncm91bmQnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAndGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnbGFiZWwnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnZycsXG4gICAgICAgIHNlbGVjdG9yOiAnbWFya2VycydcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0NvbnZlcnNhdGlvbicsIG51bGwsIGZ1bmN0aW9uIChoZWlnaHRTaXplKSB7XG4gICAgICAgIHJldHVybiAoLSAoaGVpZ2h0U2l6ZSArIDIwKSAvIDIpLnRvU3RyaW5nKCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG92ZXJ3cml0ZUJQTU5Hcm91cCgpIHtcbiAgICBicG1uMi5Hcm91cC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZlk6IDYsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIHRleHRXcmFwOiB7XG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnR3JvdXAnKTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0dyb3VwJyxcbiAgICAgICAgZnVuY3Rpb24gKHdpZHRoU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh3aWR0aFNpemUgLyAyKSAtIDEwO1xuICAgICAgICB9LFxuICAgICAgICBudWxsXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQW5ub3RhdGlvbigpIHtcbiAgICBicG1uMi5Bbm5vdGF0aW9uLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmWTogNixcbiAgICAgICAgcmVmWDogNCxcbiAgICAgICAgdGV4dEFuY2hvcjogJ3N0YXJ0JyxcbiAgICAgICAgZm9udEZhbWlseTogJ0NhbGlicmknLFxuICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgIHRleHRXcmFwOiB7XG4gICAgICAgICAgICB3aWR0aDogLTEyLFxuICAgICAgICAgICAgaGVpZ2h0OiAtMTIsXG4gICAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWxQb3NpdGlvbjogdHJ1ZVxuICAgIH07XG5cbiAgICBicG1uMi5Bbm5vdGF0aW9uLmF0dHJpYnV0ZXNbJ2xhYmVsLXBvc2l0aW9uJ10gPSB7XG4gICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbiAoXywgcmVmQkJveCwgbm9kZSkge1xuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgbW9kZWwgPSByZWYubW9kZWw7XG4gICAgICAgICAgICB2YXIgd2lkdGhTaXplID0gbW9kZWwuYXR0cmlidXRlcy5zaXplLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhhbGZTaXplID0gd2lkdGhTaXplIC8gMjtcbiAgICAgICAgICAgIHZhciByZWZYID0gMDtcbiAgICAgICAgICAgIHZhciByZWZZID0gNjtcbiAgICAgICAgICAgIGlmIChtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZYID0gd2lkdGhTaXplIC0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmWCA9IGhhbGZTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlggPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZYID0gd2lkdGhTaXplIC0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgKGpvaW50LmcuUG9pbnQgYXMgYW55KShyZWZYLCByZWZZKTtcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5nLlBvaW50KHJlZlgsIHJlZlkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OUG9vbCgpIHtcbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYW5lTGFiZWxzLmZvbnRGYW1pbHkgPSAnQ2FsaWJyaSc7XG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubWlsZXN0b25lTGFiZWxzLmZvbnRGYW1pbHkgPSAnQ2FsaWJyaSc7XG5cblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmJ1aWxkTWFya3VwID0gZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXBlcy5icG1uMi5Qb29sOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1hcmt1cCA9IGpvaW50LnV0aWwuY2xvbmVEZWVwKHRoaXMubWFya3VwKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1hcmt1cCkpIGVycm9yKCdFeHBlY3RzIFByb3RvdHlwZSBKU09OIE1hcmt1cC4nKTtcblxuICAgICAgICAvLyBRTVMtMzU3MjogQ3VzdG9taXphdGlvblxuICAgICAgICBpZiAob3B0ICYmIG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aC5pbmNsdWRlcygnbGFuZXMnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyAmJiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubGFuZXMgJiYgdGhpcy5hdHRyaWJ1dGVzICYmIHRoaXMuYXR0cmlidXRlcy5sYW5lcyAmJiBvcHQgJiYgb3B0LnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVbmRlZmluZWRTaXplKCdsYW5lcycsIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgJiYgdGhpcy5pc1VuZGVmaW5lZFNpemUoJ2xhbmVzJywgdGhpcy5hdHRyaWJ1dGVzKSAmJiB0aGlzLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID09PSB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0TGFuZVNpemUodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0ICYmIG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aC5pbmNsdWRlcygnbWlsZXN0b25lcycpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzICYmIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcy5taWxlc3RvbmVzICYmIHRoaXMuYXR0cmlidXRlcyAmJiB0aGlzLmF0dHJpYnV0ZXMubWlsZXN0b25lcyAmJiBvcHQgJiYgb3B0LnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVbmRlZmluZWRTaXplKCdtaWxlc3RvbmVzJywgdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKSAmJiB0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbWlsZXN0b25lcycsIHRoaXMuYXR0cmlidXRlcykgJiYgdGhpcy5hdHRyaWJ1dGVzLm1pbGVzdG9uZXMubGVuZ3RoID09PSB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0TWlsZXN0b25lU2l6ZSh0aGlzLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhbmVzID0gdGhpcy5hdHRyaWJ1dGVzLmxhbmVzIHx8IFt7fV07XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYW5lcykpIGVycm9yKCdFeHBlY3RzIGxhbmVzIHRvIGJlIGFuIGFycmF5LicpO1xuICAgICAgICBjb25zdCBtaWxlc3RvbmVzID0gdGhpcy5hdHRyaWJ1dGVzLm1pbGVzdG9uZXMgfHwgW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtaWxlc3RvbmVzKSkgZXJyb3IoJ0V4cGVjdHMgbWlsZXN0b25lcyB0byBiZSBhbiBhcnJheS4nKTtcbiAgICAgICAgY29uc3QgbWV0cmljczogYW55ID0gdGhpcy5tZXRyaWNzID0ge307XG4gICAgICAgIG1ldHJpY3MubGFuZXMgPSB7fTtcbiAgICAgICAgbWV0cmljcy5sYW5lc05hbWVDYWNoZSA9IHt9O1xuICAgICAgICBtZXRyaWNzLm1pbGVzdG9uZXNOYW1lQ2FjaGUgPSB7fTtcbiAgICAgICAgbWV0cmljcy5taWxlc3RvbmVzID0ge307XG4gICAgICAgIG1ldHJpY3MudG90YWxUYWtlbkhlaWdodFNwYWNlID0gMDtcbiAgICAgICAgbWV0cmljcy50b3BMYW5lR3JvdXBzQ291bnQgPSBsYW5lcy5sZW5ndGg7XG4gICAgICAgIG1ldHJpY3MucGFkZGluZyA9IGpvaW50LnV0aWwubm9ybWFsaXplU2lkZXModGhpcy5hdHRyaWJ1dGVzLnBhZGRpbmcpO1xuICAgICAgICB0aGlzLmJ1aWxkTGFuZXNNYXJrdXBSZWN1cnNpdmVseShsYW5lcywgbWFya3VwLCBudWxsLCAxLCAwKTtcbiAgICAgICAgdGhpcy5idWlsZE1pbGVzdG9uZXMobWlsZXN0b25lcywgbWFya3VwKTtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBqb2ludC51dGlsLmFzc2lnbih7XG4gICAgICAgICAgICBwb29sOiB0aGlzLmlkLFxuICAgICAgICAgICAgZHJ5OiB0cnVlXG4gICAgICAgIH0sIG9wdCk7XG4gICAgICAgIHRoaXMuc2V0KCdtYXJrdXAnLCBtYXJrdXAsIGZsYWdzKTtcbiAgICAgICAgaWYgKGZsYWdzLmF1dG9SZXNpemUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9yZXNpemUoZmxhZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmlzVW5kZWZpbmVkU2l6ZSA9IGZ1bmN0aW9uICh0eXBlLCBhdHRyaWJ1dGVzLCBsYW5lSWQpIHtcbiAgICAgICAgbGV0IGJSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdsYW5lcyc6XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYlJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N1YmxhbmVzJzpcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDAgJiYgbGFuZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYW5lICYmIGxhbmUuc3VibGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUuc3VibGFuZXMuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWlsZXN0b25lcyc6XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5taWxlc3RvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5taWxlc3RvbmVzLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJSZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiUmVzdWx0O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRUb3RhbExhbmVIZWlnaHQgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGUuc2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfTtcbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRUb3RhbFN1YkxhbmVIZWlnaHQgPSBmdW5jdGlvbiAobGFuZUlkLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGlmIChsYW5lSWQgJiYgYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgICAgICBpZiAobGFuZSAmJiBsYW5lLnN1YmxhbmVzKSB7XG4gICAgICAgICAgICAgICAgbGFuZS5zdWJsYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmdldFRvdGFsTWlsZXN0b25lc1dpZHRoID0gZnVuY3Rpb24gKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5taWxlc3RvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gZS5zaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuZ2V0TGFuZUhlaWdodEJ5SWQgPSBmdW5jdGlvbiAobGFuZUlkLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCBsYW5lU2l6ZSA9IDA7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGxhbmVJZCkge1xuICAgICAgICAgICAgbGFuZVNpemUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc2l6ZSA/IGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zaXplIDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFuZVNpemU7XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmdldE1heExhbmVIZWlnaHQgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgaWYgKGwuc2l6ZSAmJiBsLnNpemUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBtYXggPSBsLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5zZXREZWZhdWx0TGFuZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZ2V0TWF4TGFuZUhlaWdodChhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiYgIWZsYWdzLnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5wcm9wZXJ0eVZhbHVlID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc2l6ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRNYXhTdWJMYW5lSGVpZ2h0ID0gZnVuY3Rpb24gKGF0dHJpYnV0ZXMsIGxhbmVJZCkge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgY29uc3QgbGFuZSA9IGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXTtcbiAgICAgICAgbGFuZS5zdWJsYW5lcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgaWYgKHMuc2l6ZSAmJiBzLnNpemUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBtYXggPSBzLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5zZXREZWZhdWx0U3ViTGFuZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgbGFuZUlkLCBmbGFncykge1xuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gdGhpcy5nZXRNYXhTdWJMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMsIGxhbmVJZCk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGZsYWdzICYmICFmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MucHJvcGVydHlWYWx1ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zdWJsYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc2l6ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRNYXhNaWxlc3RvbmVXaWR0aCA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICBhdHRyaWJ1dGVzLm1pbGVzdG9uZXMuZm9yRWFjaChtID0+IHtcbiAgICAgICAgICAgIGlmIChtLnNpemUgJiYgbS5zaXplID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gbS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuc2V0RGVmYXVsdE1pbGVzdG9uZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZ2V0TWF4TWlsZXN0b25lV2lkdGgoYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiYgIWZsYWdzLnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5wcm9wZXJ0eVZhbHVlID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlcy5taWxlc3RvbmVzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5zaXplID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLnJlQnVpbGRMYW5lcyA9IGZ1bmN0aW9uIChtaW5TaXplLCBjdXJyZW50U2l6ZSwgYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIGFsbCBsYW5lIGhhcyB2YWx1ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCBhdHRyaWJ1dGVzKSAmJiBmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBtYXhIZWlnaHQsIGZsYWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYWxsIGxhbmUgaGFzIHZhbHVlIGFuZCBhZGQgbmV3IGxhbmVcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExhbmVTaXplKGF0dHJpYnV0ZXMsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmdldFRvdGFsTGFuZUhlaWdodChhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIG1heEhlaWdodCwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGRvZXNudCBoYXZlIHZhbHVlXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUucmVCdWlsZFN1YkxhbmVzID0gZnVuY3Rpb24gKG1pblNpemUsIGN1cnJlbnRTaXplLCBhdHRyaWJ1dGVzLCBmbGFncykge1xuICAgICAgICBpZiAoIWZsYWdzICYmIGZsYWdzLnByb3BlcnR5UGF0aEFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFuZUlkID0gZmxhZ3MucHJvcGVydHlQYXRoQXJyYXlbMV07XG4gICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgIGlmICghbGFuZS5zdWJsYW5lcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGxhbmVJZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnc3VibGFuZXMnLCBhdHRyaWJ1dGVzLCBsYW5lSWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFuZUhlaWdodCA9IHRoaXMuZ2V0TGFuZUhlaWdodEJ5SWQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJMYW5lSGVpZ2h0ID0gdGhpcy5nZXRUb3RhbFN1YkxhbmVIZWlnaHQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViTGFuZUhlaWdodCAhPT0gbGFuZUhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc2l6ZSA9IHN1YkxhbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoJ2xhbmVzJywgYXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBtYXhIZWlnaHQsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNVbmRlZmluZWRTaXplKCdzdWJsYW5lcycsIGF0dHJpYnV0ZXMsIGxhbmVJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYW5lSGVpZ2h0ID0gdGhpcy5nZXRMYW5lSGVpZ2h0QnlJZChsYW5lSWQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBzdWJMYW5lSGVpZ2h0ID0gdGhpcy5nZXRUb3RhbFN1YkxhbmVIZWlnaHQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobGFuZUhlaWdodCA9PT0gc3ViTGFuZUhlaWdodCAmJiBsYW5lSGVpZ2h0ICE9PSAwICYmIHN1YkxhbmVIZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3ViTGFuZVNpemUoYXR0cmlidXRlcywgbGFuZUlkLCBmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgIHN1YkxhbmVIZWlnaHQgPSB0aGlzLmdldFRvdGFsU3ViTGFuZUhlaWdodChsYW5lSWQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTGFuZUhlaWdodCAhPT0gbGFuZUhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnNpemUgPSBzdWJMYW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCBhdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKE1hdGgubWF4KG1pblNpemUud2lkdGgsIGN1cnJlbnRTaXplLndpZHRoKSwgbWF4SGVpZ2h0LCBmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUucmVCdWlsZE1pbGVzdG9uZXMgPSBmdW5jdGlvbiAobWluU2l6ZSwgY3VycmVudFNpemUsIGF0dHJpYnV0ZXMsIGZsYWdzKSB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBhbGwgbGFuZSBoYXMgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoJ21pbGVzdG9uZXMnLCBhdHRyaWJ1dGVzKSAmJiBmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1heFdpZHRoID0gdGhpcy5nZXRUb3RhbE1pbGVzdG9uZXNXaWR0aChhdHRyaWJ1dGVzKSArIGF0dHJpYnV0ZXMucGFkZGluZy5sZWZ0O1xuICAgICAgICAgICAgICAgIG1heFdpZHRoID0gbWF4V2lkdGggPiBhdHRyaWJ1dGVzLnBhZGRpbmcubGVmdCA/IG1heFdpZHRoIDogdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzLnNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUobWF4V2lkdGgsIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2FsbCBsYW5lIGhhcyB2YWx1ZSBhbmQgYWRkIG5ldyBsYW5lXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcyAmJiAhdGhpcy5pc1VuZGVmaW5lZFNpemUoJ21pbGVzdG9uZXMnLCB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpICYmIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggPiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggJiYgZmxhZ3MucHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdE1pbGVzdG9uZVNpemUoYXR0cmlidXRlcywgZmxhZ3MpO1xuICAgICAgICAgICAgICAgIGxldCBtYXhXaWR0aCA9IHRoaXMuZ2V0VG90YWxNaWxlc3RvbmVzV2lkdGgoYXR0cmlidXRlcykgKyBhdHRyaWJ1dGVzLnBhZGRpbmcubGVmdDtcbiAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IG1heFdpZHRoID4gYXR0cmlidXRlcy5wYWRkaW5nLmxlZnQgPyBtYXhXaWR0aCA6IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcy5zaXplLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKG1heFdpZHRoLCBNYXRoLm1heChtaW5TaXplLmhlaWdodCwgY3VycmVudFNpemUuaGVpZ2h0KSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGRvZXNudCBoYXZlIHZhbHVlXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuYXV0b3Jlc2l6ZSA9IGZ1bmN0aW9uIChmbGFncykge1xuICAgICAgICB2YXIgbWluU2l6ZSA9IHRoaXMuZ2V0TWluaW1hbFNpemUoKTtcbiAgICAgICAgdmFyIGN1cnJlbnRTaXplID0gdGhpcy5hdHRyaWJ1dGVzLnNpemU7XG4gICAgICAgIHRoaXMucmVzaXplKE1hdGgubWF4KG1pblNpemUud2lkdGgsIGN1cnJlbnRTaXplLndpZHRoKSwgTWF0aC5tYXgobWluU2l6ZS5oZWlnaHQsIGN1cnJlbnRTaXplLmhlaWdodCksIGZsYWdzKTtcbiAgICAgICAgLy9RTVMtMzU3MjogY3VzdG9taXphdGlvblxuICAgICAgICBpZiAoZmxhZ3MucHJvcGVydHlQYXRoKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MucHJvcGVydHlQYXRoLmluY2x1ZGVzKCdzdWJsYW5lcycpICYmICFmbGFncy5wcm9wZXJ0eVBhdGguaW5jbHVkZXMoJ2xhYmVsJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlQnVpbGRTdWJMYW5lcyhtaW5TaXplLCBjdXJyZW50U2l6ZSwgdGhpcy5hdHRyaWJ1dGVzLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmbGFncy5wcm9wZXJ0eVBhdGguaW5jbHVkZXMoJ2xhbmVzJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlQnVpbGRMYW5lcyhtaW5TaXplLCBjdXJyZW50U2l6ZSwgdGhpcy5hdHRyaWJ1dGVzLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmbGFncy5wcm9wZXJ0eVBhdGguaW5jbHVkZXMoJ21pbGVzdG9uZXMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVCdWlsZE1pbGVzdG9uZXMobWluU2l6ZSwgY3VycmVudFNpemUsIHRoaXMuYXR0cmlidXRlcywgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBNYXRoLm1heChtaW5TaXplLmhlaWdodCwgY3VycmVudFNpemUuaGVpZ2h0KSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBNYXRoLm1heChtaW5TaXplLmhlaWdodCwgY3VycmVudFNpemUuaGVpZ2h0KSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmdldE1pbGVzdG9uZUhlaWdodCA9IGZ1bmN0aW9uIChtaWxlc3RvbmVHcm91cElkKSB7XG4gICAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgICB2YXIgbWV0cmljcyA9IHJlZi5tZXRyaWNzO1xuICAgICAgICB2YXIgbWlsZXN0b25lQ2FjaGUgPSBtZXRyaWNzLm1pbGVzdG9uZXNbbWlsZXN0b25lR3JvdXBJZF07XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobWlsZXN0b25lQ2FjaGUubWlsZXN0b25lc1NpemUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWlsZXN0b25lQ2FjaGUubWlsZXN0b25lc1NpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5hdHRyaWJ1dGVzWydsYW5lLWxhYmVsJ10gPSB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG9wdCwgcmVmQkJveCwgbm9kZSwgYXR0cnMpIHtcbiAgICAgICAgICAgIGlmICgham9pbnQudXRpbC5pc1BsYWluT2JqZWN0KG9wdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBtb2RlbFxuICAgICAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBsYW5lR3JvdXBJZCA9IG5vZGUuZ2V0QXR0cmlidXRlKCdsYW5lLWdyb3VwLWlkJyk7XG4gICAgICAgICAgICBjb25zdCBsYW5lR3JvdXBDYWNoZSA9IG1vZGVsLm1ldHJpY3MubGFuZXNbbGFuZUdyb3VwSWRdO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gbGFuZUdyb3VwQ2FjaGUuaGVhZGVyU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gbW9kZWwuZ2V0TGFuZUhlaWdodChsYW5lR3JvdXBJZCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gbGFuZUdyb3VwQ2FjaGUubGFiZWw7XG4gICAgICAgICAgICByZXR1cm4gbGFiZWxUZXh0V3JhcCh0aGlzLCBsYW5lR3JvdXBJZCwgb3B0LCBub2RlLCBhdHRycywgd2lkdGgsIGhlaWdodCwgdGV4dCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5hdHRyaWJ1dGVzWydsYWJlbC1wb3NpdGlvbiddID0ge1xuICAgICAgICBwb3NpdGlvbjogZnVuY3Rpb24gKF8sIHJlZkJCb3gsIG5vZGUsIGF0dHJzKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgbGFuZUdyb3VwSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnbGFuZS1ncm91cC1pZCcpO1xuICAgICAgICAgICAgY29uc3QgbGFuZUdyb3VwQ2FjaGUgPSBtb2RlbC5tZXRyaWNzLmxhbmVzW2xhbmVHcm91cElkXTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gbGFuZUdyb3VwQ2FjaGUuaGVhZGVyU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IG1vZGVsLmdldExhbmVIZWlnaHQobGFuZUdyb3VwSWQpO1xuXG4gICAgICAgICAgICBjb25zdCBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgICAgICAgIC8vIFFNUy0zNTcyOiBjdXN0b21pemF0aW9uXG4gICAgICAgICAgICBpZiAobW9kZWwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhbmVMYWJlbEFuY2hvciA9IG1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1sndGV4dC1hbmNob3InXTtcbiAgICAgICAgICAgICAgICBpZiAobGFuZUxhYmVsQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGFuZUxhYmVsQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGhhbGZXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGhhbGZXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGFsZkhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaGFsZldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBoZWlnaHQgLSA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaGFsZldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBoYWxmSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGhhbGZXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGhhbGZIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5hdHRyaWJ1dGVzWydtaWxlc3RvbmUtbGFiZWwnXSA9IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAob3B0LCBfLCBub2RlLCBhdHRycykge1xuICAgICAgICAgICAgaWYgKCFqb2ludC51dGlsLmlzUGxhaW5PYmplY3Qob3B0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IG1pbGVzdG9uZUxhYmVsSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnbWlsZXN0b25lLWdyb3VwLWlkJyk7XG4gICAgICAgICAgICBjb25zdCBtaWxlc3RvbmVMYWJlbENhY2hlID0gbW9kZWwubWV0cmljcy5taWxlc3RvbmVzW21pbGVzdG9uZUxhYmVsSWRdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBtb2RlbC5nZXRNaWxlc3RvbmVXaWR0aChtaWxlc3RvbmVMYWJlbElkKTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IG1vZGVsLmF0dHJpYnV0ZXMubWlsZXN0b25lc1NpemU7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gbWlsZXN0b25lTGFiZWxDYWNoZS5sYWJlbDtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbFRleHRXcmFwKHRoaXMsIG51bGwsIG9wdCwgbm9kZSwgYXR0cnMsIHdpZHRoLCBoZWlnaHQsIHRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnBtbjIuUG9vbC5hdHRyaWJ1dGVzWydtaWxlc3RvbmUtbGFiZWwtcG9zaXRpb24nXSA9IHtcbiAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uIChfLCByZWZCQm94LCBub2RlLCBhdHRycykge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IG1pbGVzdG9uZUdyb3VwSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnbWlsZXN0b25lLWdyb3VwLWlkJyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IG1vZGVsLmdldE1pbGVzdG9uZVdpZHRoKG1pbGVzdG9uZUdyb3VwSWQpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gbW9kZWwuYXR0cmlidXRlcy5taWxlc3RvbmVzU2l6ZTtcblxuICAgICAgICAgICAgY29uc3QgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cbiAgICAgICAgICAgIHZhciByaWdodFBhZGRpbmcgPSBtb2RlbC5hdHRyaWJ1dGVzLm1pbGVzdG9uZUxhYmVsUmlnaHRQYWRkaW5nO1xuICAgICAgICAgICAgaWYgKG1vZGVsLmF0dHJpYnV0ZXMubWlsZXN0b25lcykge1xuICAgICAgICAgICAgICAgIHZhciBtaWxlc3RvbmVMYWJlbHNBbmNob3IgPSBtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLm1pbGVzdG9uZUxhYmVsc1sndGV4dC1hbmNob3InXTtcbiAgICAgICAgICAgICAgICBpZiAobWlsZXN0b25lTGFiZWxzQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWlsZXN0b25lTGFiZWxzQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHdpZHRoIC0gcmlnaHRQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBoYWxmSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogd2lkdGggLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBoYWxmSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiByaWdodFBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGhhbGZIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB3aWR0aCAtIHJpZ2h0UGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGFsZkhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuSGVhZGVyZWRQb29sLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5oZWFkZXJMYWJlbC5mb250RmFtaWx5ID0gJ0NhbGlicmknO1xufVxuXG5cbmZ1bmN0aW9uIGFkZFRleHRBdHRyaWJ1dGUoa2V5OiBhbnkpIHtcbiAgICBicG1uMltrZXldLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy50ZXh0ID0ge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgdGV4dEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogNSxcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdDYWxpYnJpJyxcbiAgICAgICAgICAgIGZvbnRTaXplOiAxMlxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoa2V5OiBhbnkpIHtcbiAgICBicG1uMltrZXldLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbEJhY2tncm91bmQgPSB7XG4gICAgICAgIHJlZjogJ2xhYmVsJyxcbiAgICAgICAgZmlsbDogJyNmZmYnLFxuICAgICAgICByeDogMyxcbiAgICAgICAgcnk6IDMsXG4gICAgICAgIHJlZldpZHRoOiAxLFxuICAgICAgICByZWZIZWlnaHQ6IDEsXG4gICAgICAgIHJlZlg6IDAsXG4gICAgICAgIHJlZlk6IDBcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoa2V5OiBhbnksIGhhbGZTaWRlPzogKHJlc3VsdD86IGFueSkgPT4gbnVtYmVyLCB0ZXh0SW5zaWRlQ2FsYz86IChyZXN1bHQ/OiBhbnkpID0+IHN0cmluZykge1xuICAgIGJwbW4yW2tleV0uYXR0cmlidXRlc1snbGFiZWwtcG9zaXRpb24nXSA9IHtcbiAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uIChfLCByZWZCQm94LCBub2RlKSB7XG4gICAgICAgICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgICAgICAgIHZhciBtb2RlbCA9IHJlZi5tb2RlbDtcbiAgICAgICAgICAgIHZhciB3aWR0aFNpemUgPSBtb2RlbC5hdHRyaWJ1dGVzLnNpemUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0U2l6ZSA9IG1vZGVsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgaGFsZlNpemUgPSBoYWxmU2lkZSA/IGhhbGZTaWRlKHdpZHRoU2l6ZSkgOiB3aWR0aFNpemUgLyAyO1xuICAgICAgICAgICAgdmFyIHJlZlggPSAwO1xuICAgICAgICAgICAgdmFyIHJlZlkgPSAnNTAlJztcbiAgICAgICAgICAgIGlmIChtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLnRleHQuc3R5bGVbJ3RleHQtaW5zaWRlJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dEluc2lkZUNhbGMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmWSA9IHRleHRJbnNpZGVDYWxjKGhlaWdodFNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlZlkgPSAnNTAlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmWCA9IHNldFhQb3RpdGlvblRleHRBbGlnbihtb2RlbCwgcmVmWCwgaGFsZlNpemUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IGpvaW50LmcuUG9pbnQocmVmWCwgcmVmWSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldFhQb3RpdGlvblRleHRBbGlnbihtb2RlbDogYW55LCByZWZYOiBhbnksIGhhbGZTaXplOiBhbnkpIHtcbiAgICBpZiAobW9kZWwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZWwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHJlZlggPSBoYWxmU2l6ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgcmVmWCA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgICAgcmVmWCA9IC0gaGFsZlNpemU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJlZlggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZlg7XG59XG5cbmZ1bmN0aW9uIGxhYmVsVGV4dFdyYXAoZWxlbWVudFZpZXcsIGxhbmVHcm91cElkLCBvcHQsIG5vZGUsIGF0dHJzLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0KSB7XG4gICAgY29uc3QgYXR0cnNDb3B5ID0gam9pbnQudXRpbC5jbG9uZShhdHRycyk7XG4gICAgY29uc3Qge1xuICAgICAgICBsZWZ0LFxuICAgICAgICByaWdodCxcbiAgICAgICAgdG9wLFxuICAgICAgICBib3R0b21cbiAgICB9ID0gam9pbnQudXRpbC5ub3JtYWxpemVTaWRlcyhhdHRyc1snbGFiZWwtbWFyZ2luJ10pO1xuICAgIGNvbnN0IGJib3ggPSBqb2ludC5nLlJlY3QobGVmdCwgdG9wLCB3aWR0aCAtIGxlZnQgLSByaWdodCwgaGVpZ2h0IC0gdG9wIC0gYm90dG9tKTtcbiAgICBsZXQgdGV4dEF0dHJpYnV0ZTtcbiAgICBsZXQgdGV4dFZhbHVlO1xuICAgIGlmIChvcHQudGV4dFdyYXApIHtcbiAgICAgICAgdGV4dEF0dHJpYnV0ZSA9ICd0ZXh0LXdyYXAnO1xuICAgICAgICB0ZXh0VmFsdWUgPSB7XG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgZWxsaXBzaXM6IG9wdC5lbGxpcHNpc1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRBdHRyaWJ1dGUgPSAndGV4dCc7XG4gICAgICAgIHRleHRWYWx1ZSA9IHRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGxhbmVHcm91cElkKSB7XG4gICAgICAgIC8vIFFNUy00OTY5OiBJbXBsZW1lbnQgU3VwcG9ydCBkaWZmZXJlbnQgZm9udCBzaXplIGZvciBsYW5lIGhlYWRlclxuICAgICAgICAvLyBDYXNlIDE6IENoYW5nZSBjb21tb24gZm9udC1mYW1pbHkgYW5kIGZvbnQtc2l6ZVxuICAgICAgICBsZXQgcHJlQ29tbW9uRm9udFNpemUgPSBlbGVtZW50Vmlldy5tb2RlbC5fcHJldmlvdXNBdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnRTaXplJ107XG4gICAgICAgIGxldCBwcmVDb21tb25Gb250RmFtaWx5ID0gZWxlbWVudFZpZXcubW9kZWwuX3ByZXZpb3VzQXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250RmFtaWx5J107XG4gICAgICAgIGlmIChlbGVtZW50Vmlldy5tb2RlbC5fcHJldmlvdXNBdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnQtc2l6ZSddKSB7XG4gICAgICAgICAgICBwcmVDb21tb25Gb250U2l6ZSA9IGVsZW1lbnRWaWV3Lm1vZGVsLl9wcmV2aW91c0F0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1zaXplJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLl9wcmV2aW91c0F0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1mYW1pbHknXSkge1xuICAgICAgICAgICAgcHJlQ29tbW9uRm9udEZhbWlseSA9IGVsZW1lbnRWaWV3Lm1vZGVsLl9wcmV2aW91c0F0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1mYW1pbHknXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJDb21tb25Gb250U2l6ZSA9IGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udFNpemUnXTtcbiAgICAgICAgbGV0IGN1ckNvbW1vbkZvbnRGYW1pbHkgPSBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnRGYW1pbHknXTtcbiAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1zaXplJ10pIHtcbiAgICAgICAgICAgIGN1ckNvbW1vbkZvbnRTaXplID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250LXNpemUnXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250LWZhbWlseSddKSB7XG4gICAgICAgICAgICBjdXJDb21tb25Gb250RmFtaWx5ID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250LWZhbWlseSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZUNvbW1vbkZvbnRTaXplICE9PSBjdXJDb21tb25Gb250U2l6ZSkge1xuICAgICAgICAgICAgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGVbJ2ZvbnQtc2l6ZSddID0gY3VyQ29tbW9uRm9udFNpemU7XG4gICAgICAgICAgICAgICAgaWYgKGUuc3VibGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5zdWJsYW5lcy5mb3JFYWNoKHNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlWydmb250LXNpemUnXSA9IGN1ckNvbW1vbkZvbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVDb21tb25Gb250RmFtaWx5ICE9PSBjdXJDb21tb25Gb250RmFtaWx5KSB7XG4gICAgICAgICAgICBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZVsnZm9udC1mYW1pbHknXSA9IGN1ckNvbW1vbkZvbnRGYW1pbHk7XG4gICAgICAgICAgICAgICAgaWYgKGUuc3VibGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5zdWJsYW5lcy5mb3JFYWNoKHNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlWydmb250LWZhbWlseSddID0gY3VyQ29tbW9uRm9udEZhbWlseTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYXNlIDI6IENoYW5nZSBsYW5lIGFuZCBzdWJsYW5lIGZvbnQtZmFtaWx5IGFuZCBmb250LXNpemVcbiAgICAgICAgbGV0IGZvbnRTaXplID0gYXR0cnNbJ2ZvbnQtc2l6ZSddID8gYXR0cnNbJ2ZvbnQtc2l6ZSddIDogYXR0cnNbJ2ZvbnRTaXplJ107XG4gICAgICAgIGxldCBmb250RmFtaWx5ID0gYXR0cnNbJ2ZvbnQtZmFtaWx5J10gPyBhdHRyc1snZm9udC1mYW1pbHknXSA6IGF0dHJzWydmb250RmFtaWx5J107XG4gICAgICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgICAgICAgIGZvbnRTaXplID0gJzE0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvbnRGYW1pbHkpIHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHkgPSAnQ2FsaWJyaSc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFuZUFycmF5ID0gbGFuZUdyb3VwSWQuc3BsaXQoJ18nKTtcbiAgICAgICAgbGV0IGxhbmVJZCA9IDA7XG4gICAgICAgIGxldCBzdWJMYW5lSWQgPSAwO1xuICAgICAgICBpZiAobGFuZUFycmF5Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgbGFuZUlkID0gbGFuZUFycmF5WzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9sYW5lIGhhbmRsaW5nXG4gICAgICAgIGlmIChlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzICYmIGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXVsnZm9udC1zaXplJ10pIHtcbiAgICAgICAgICAgIGZvbnRTaXplID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdWydmb250LXNpemUnXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcyAmJiBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF1bJ2ZvbnQtZmFtaWx5J10pIHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHkgPSBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF1bJ2ZvbnQtZmFtaWx5J107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJMYW4gaGFuZGxpbmdcbiAgICAgICAgaWYgKGxhbmVBcnJheS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGxhbmVJZCA9IGxhbmVBcnJheVsxXTtcbiAgICAgICAgICAgIHN1YkxhbmVJZCA9IGxhbmVBcnJheVsyXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcyAmJiBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc3VibGFuZXMgJiYgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnN1YmxhbmVzW3N1YkxhbmVJZF1bJ2ZvbnQtc2l6ZSddKSB7XG4gICAgICAgICAgICAgICAgZm9udFNpemUgPSBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc3VibGFuZXNbc3ViTGFuZUlkXVsnZm9udC1zaXplJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcyAmJiBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc3VibGFuZXMgJiYgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdWydmb250LWZhbWlseSddKSB7XG4gICAgICAgICAgICAgICAgZm9udEZhbWlseSA9IGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zdWJsYW5lc1tzdWJMYW5lSWRdWydmb250LWZhbWlseSddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChub2RlLmlkKTtcbiAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgIGh0bWwuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZSArICdweCc7XG4gICAgICAgICAgICBodG1sLnN0eWxlLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxlbWVudFZpZXcuZ2V0QXR0cmlidXRlRGVmaW5pdGlvbih0ZXh0QXR0cmlidXRlKS5zZXQuY2FsbChlbGVtZW50VmlldywgdGV4dFZhbHVlLCBiYm94LCBub2RlLCBhdHRyc0NvcHkpO1xufVxuXG5mdW5jdGlvbiBhZGRDdXN0b21TaGFwZSgpIHtcblxuICAgIHZhciBNZXNzYWdlID0gY3VzdG9tTWVzc2FnZVNoYXBlKCk7XG4gICAgdmFyIENob3Jlb2dyYXBoeVZpZXcgPSBjdXN0b21DaG9yZW9ncmFwaHlWaWV3KCk7XG4gICAgdmFyIENob3Jlb2dyYXBoeSA9IGN1c3RvbUNob3Jlb2dyYXBoeVNoYXBlKCk7XG4gICAgam9pbnQuc2hhcGVzLmJwbW4gPSB7XG4gICAgICAgIENob3Jlb2dyYXBoeVZpZXc6IENob3Jlb2dyYXBoeVZpZXcsXG4gICAgICAgIENob3Jlb2dyYXBoeTogQ2hvcmVvZ3JhcGh5LFxuICAgICAgICBNZXNzYWdlOiBNZXNzYWdlXG4gICAgfVxufVxuXG5mdW5jdGlvbiBjdXN0b21DaG9yZW9ncmFwaHlWaWV3KCkge1xuICAgIHZhciBCUE1ORWxlbWVudFZpZXcgPSBqb2ludC5kaWEuRWxlbWVudFZpZXcuZXh0ZW5kKCk7XG5cbiAgICBCUE1ORWxlbWVudFZpZXcucHJvdG90eXBlLnVwZGF0ZVJlbGF0aXZlQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChub2RlLCBhdHRycywgcmVmQkJveCwgb3B0KSB7XG4gICAgICAgIG9wdCB8fCAob3B0ID0ge30pO1xuXG4gICAgICAgIHZhciBhdHRyTmFtZSwgYXR0clZhbCwgZGVmO1xuICAgICAgICB2YXIgcmF3QXR0cnMgPSBhdHRycy5yYXcgfHwge307XG4gICAgICAgIHZhciBub2RlQXR0cnMgPSBhdHRycy5ub3JtYWwgfHwge307XG4gICAgICAgIHZhciBzZXRBdHRycyA9IGF0dHJzLnNldDtcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0cnMgPSBhdHRycy5wb3NpdGlvbjtcbiAgICAgICAgdmFyIG9mZnNldEF0dHJzID0gYXR0cnMub2Zmc2V0O1xuXG4gICAgICAgIGZvciAoYXR0ck5hbWUgaW4gc2V0QXR0cnMpIHtcbiAgICAgICAgICAgIGF0dHJWYWwgPSBzZXRBdHRyc1thdHRyTmFtZV07XG4gICAgICAgICAgICBkZWYgPSB0aGlzLmdldEF0dHJpYnV0ZURlZmluaXRpb24oYXR0ck5hbWUpO1xuICAgICAgICAgICAgLy8gU0VUIC0gc2V0IGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYXR0cmlidXRlcyB0byBiZSBzZXQgb24gdGhlIG5vZGUsXG4gICAgICAgICAgICAvLyB3aGljaCB3aWxsIGFmZmVjdCB0aGUgbm9kZSBkaW1lbnNpb25zIGJhc2VkIG9uIHRoZSByZWZlcmVuY2UgYm91bmRpbmdcbiAgICAgICAgICAgIC8vIGJveC4gZS5nLiBgd2lkdGhgLCBgaGVpZ2h0YCwgYGRgLCBgcnhgLCBgcnlgLCBgcG9pbnRzXG4gICAgICAgICAgICBpZiAoIWF0dHJWYWwpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBzZXRSZXN1bHQgPSBkZWYuc2V0LmNhbGwodGhpcywgYXR0clZhbCwgcmVmQkJveC5jbG9uZSgpLCBub2RlLCByYXdBdHRycyk7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QkMShzZXRSZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgam9pbnQudXRpbC5hc3NpZ24obm9kZUF0dHJzLCBzZXRSZXN1bHQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZXRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGVBdHRyc1thdHRyTmFtZV0gPSBzZXRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzZXR0aW5nIHRoZSBgdHJhbnNmb3JtYCBhdHRyaWJ1dGUgb24gSFRNTEVsZW1lbnRzXG4gICAgICAgICAgICAvLyB2aWEgYG5vZGUuc3R5bGUudHJhbnNmb3JtID0gJ21hdHJpeCguLi4pJztgIHdvdWxkIGludHJvZHVjZVxuICAgICAgICAgICAgLy8gYSBicmVha2luZyBjaGFuZ2UgKGUuZy4gYmFzaWMuVGV4dEJsb2NrKS5cbiAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUF0dHJpYnV0ZXMobm9kZSwgbm9kZUF0dHJzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmaW5hbCB0cmFuc2xhdGlvbiBvZiB0aGUgc3ViZWxlbWVudC5cbiAgICAgICAgdmFyIG5vZGVUcmFuc2Zvcm0gPSBub2RlQXR0cnMudHJhbnNmb3JtO1xuICAgICAgICB2YXIgbm9kZU1hdHJpeCA9IGpvaW50LlYudHJhbnNmb3JtU3RyaW5nVG9NYXRyaXgobm9kZVRyYW5zZm9ybSk7XG4gICAgICAgIHZhciBub2RlUG9zaXRpb24gPSBqb2ludC5nLlBvaW50KG5vZGVNYXRyaXguZSwgbm9kZU1hdHJpeC5mKTtcbiAgICAgICAgaWYgKG5vZGVUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIG5vZGVBdHRycyA9IGpvaW50LnV0aWwub21pdChub2RlQXR0cnMsICd0cmFuc2Zvcm0nKTtcbiAgICAgICAgICAgIG5vZGVNYXRyaXguZSA9IG5vZGVNYXRyaXguZiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgbm9kZSBzY2FsZSBkZXRlcm1pbmVkIGJ5IHRoZSBzY2FsYWJsZSBncm91cFxuICAgICAgICAvLyBvbmx5IGlmIGxhdGVyIG5lZWRlZC5cbiAgICAgICAgdmFyIHN4LCBzeSwgdHJhbnNsYXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbkF0dHJzIHx8IG9mZnNldEF0dHJzKSB7XG4gICAgICAgICAgICB2YXIgbm9kZVNjYWxlID0gdGhpcy5nZXROb2RlU2NhbGUobm9kZSwgb3B0LnNjYWxhYmxlTm9kZSk7XG4gICAgICAgICAgICBzeCA9IG5vZGVTY2FsZS5zeDtcbiAgICAgICAgICAgIHN5ID0gbm9kZVNjYWxlLnN5O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBvc2l0aW9uZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChhdHRyTmFtZSBpbiBwb3NpdGlvbkF0dHJzKSB7XG4gICAgICAgICAgICBhdHRyVmFsID0gcG9zaXRpb25BdHRyc1thdHRyTmFtZV07XG4gICAgICAgICAgICBkZWYgPSB0aGlzLmdldEF0dHJpYnV0ZURlZmluaXRpb24oYXR0ck5hbWUpO1xuICAgICAgICAgICAgLy8gUE9TSVRJT04gLSBwb3NpdGlvbiBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgcG9pbnQgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBib3VuZGluZyBib3guIFRoZSBkZWZhdWx0IHBvc2l0aW9uIG9mIHRoZSBub2RlIGlzIHg6MCwgeTowIG9mXG4gICAgICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIGJvdW5kaW5nIGJveCBvciBjb3VsZCBiZSBmdXJ0aGVyIHNwZWNpZnkgYnkgc29tZVxuICAgICAgICAgICAgLy8gU1ZHIGF0dHJpYnV0ZXMgZS5nLiBgeGAsIGB5YFxuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBkZWYucG9zaXRpb24uY2FsbCh0aGlzLCBhdHRyVmFsLCByZWZCQm94LmNsb25lKCksIG5vZGUsIHJhd0F0dHJzKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgICAgIG5vZGVQb3NpdGlvbi5vZmZzZXQoam9pbnQuZy5Qb2ludCh0cmFuc2xhdGlvbikuc2NhbGUoc3gsIHN5KSk7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZCB8fCAocG9zaXRpb25lZCA9IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIG5vZGUgYm91bmRpbmcgYm94IGNvdWxkIGRlcGVuZCBvbiB0aGUgYHNpemVgIHNldCBmcm9tIHRoZSBwcmV2aW91cyBsb29wLlxuICAgICAgICAvLyBIZXJlIHdlIGtub3csIHRoYXQgYWxsIHRoZSBzaXplIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFscmVhZHkgc2V0LlxuICAgICAgICB0aGlzLnNldE5vZGVBdHRyaWJ1dGVzKG5vZGUsIG5vZGVBdHRycyk7XG5cbiAgICAgICAgdmFyIG9mZnNldGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChvZmZzZXRBdHRycykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgaXMgdmlzaWJsZVxuICAgICAgICAgICAgdmFyIG5vZGVCb3VuZGluZ1JlY3QgPSB0aGlzLmdldE5vZGVCb3VuZGluZ1JlY3Qobm9kZSk7XG4gICAgICAgICAgICBpZiAobm9kZUJvdW5kaW5nUmVjdC53aWR0aCA+IDAgJiYgbm9kZUJvdW5kaW5nUmVjdC5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGVCQm94ID0gam9pbnQuVi50cmFuc2Zvcm1SZWN0KG5vZGVCb3VuZGluZ1JlY3QsIG5vZGVNYXRyaXgpLnNjYWxlKDEgLyBzeCwgMSAvIHN5KTtcbiAgICAgICAgICAgICAgICBmb3IgKGF0dHJOYW1lIGluIG9mZnNldEF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJWYWwgPSBvZmZzZXRBdHRyc1thdHRyTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGRlZiA9IHRoaXMuZ2V0QXR0cmlidXRlRGVmaW5pdGlvbihhdHRyTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9GRlNFVCAtIG9mZnNldCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgcG9pbnQgZnJvbSB0aGUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAvLyBib3VuZGluZyBib3guIFRoZSBkZWZhdWx0IG9mZnNldCBwb2ludCBpcyB4OjAsIHk6MCAob3JpZ2luKSBvciBjb3VsZCBiZSBmdXJ0aGVyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgd2l0aCBzb21lIFNWRyBhdHRyaWJ1dGVzIGUuZy4gYHRleHQtYW5jaG9yYCwgYGN4YCwgYGN5YFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IGRlZi5vZmZzZXQuY2FsbCh0aGlzLCBhdHRyVmFsLCBub2RlQkJveCwgbm9kZSwgcmF3QXR0cnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQb3NpdGlvbi5vZmZzZXQoam9pbnQuZy5Qb2ludCh0cmFuc2xhdGlvbikuc2NhbGUoc3gsIHN5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRlZCB8fCAob2Zmc2V0ZWQgPSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIG5vdCB0b3VjaCBub2RlJ3MgdHJhbnNmb3JtIGF0dHJpYnV0ZSBpZiB0aGVyZSBpcyBubyB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICAgICAgICBpZiAobm9kZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uZWQgfHwgb2Zmc2V0ZWQpIHtcbiAgICAgICAgICAgIC8vIFJvdW5kIHRoZSBjb29yZGluYXRlcyB0byAxIGRlY2ltYWwgcG9pbnQuXG4gICAgICAgICAgICBub2RlUG9zaXRpb24ucm91bmQoMSk7XG4gICAgICAgICAgICBub2RlTWF0cml4LmUgPSBub2RlUG9zaXRpb24ueDtcbiAgICAgICAgICAgIG5vZGVNYXRyaXguZiA9IG5vZGVQb3NpdGlvbi55O1xuICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGpvaW50LlYubWF0cml4VG9UcmFuc2Zvcm1TdHJpbmcobm9kZU1hdHJpeCkpO1xuICAgICAgICAgICAgLy8gVE9ETzogc3RvcmUgbm9kZU1hdHJpeCBtZXRyaWNzP1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIFRleHRCbG9ja1ZpZXcgaW1wbGVtZW50cyB0aGUgZmFsbGJhY2sgZm9yIElFIHdoZW4gbm8gZm9yZWlnbk9iamVjdCBleGlzdHMgYW5kXG4gICAgLy8gdGhlIHRleHQgbmVlZHMgdG8gYmUgbWFudWFsbHkgYnJva2VuLlxuICAgIHZhciBUZXh0QmxvY2tWaWV3ID0gQlBNTkVsZW1lbnRWaWV3LmV4dGVuZCh7XG5cbiAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlczogc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZFxuICAgICAgICAgICAgPyBCUE1ORWxlbWVudFZpZXcucHJvdG90eXBlLnByZXNlbnRhdGlvbkF0dHJpYnV0ZXNcbiAgICAgICAgICAgIDogQlBNTkVsZW1lbnRWaWV3LmFkZFByZXNlbnRhdGlvbkF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFsnQ09OVEVOVCddLFxuICAgICAgICAgICAgICAgIHNpemU6IFsnQ09OVEVOVCddXG4gICAgICAgICAgICB9KSxcblxuICAgICAgICBpbml0RmxhZzogWydSRU5ERVInLCAnQ09OVEVOVCddLFxuXG4gICAgICAgIGNvbmZpcm1VcGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IEJQTU5FbGVtZW50Vmlldy5wcm90b3R5cGUuY29uZmlybVVwZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmxhZyhmbGFncywgJ0NPTlRFTlQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgICAgICBmbGFncyA9IHRoaXMucmVtb3ZlRmxhZyhmbGFncywgJ0NPTlRFTlQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFncztcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChfLCByZW5kZXJpbmdPbmx5QXR0cnMpIHtcblxuICAgICAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbDtcblxuICAgICAgICAgICAgaWYgKCFzdmdGb3JlaWduT2JqZWN0U3VwcG9ydGVkKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXZlcnl0aGluZyBidXQgdGhlIGNvbnRlbnQgZmlyc3QuXG4gICAgICAgICAgICAgICAgdmFyIG5vVGV4dEF0dHJzID0gam9pbnQudXRpbC5vbWl0KHJlbmRlcmluZ09ubHlBdHRycyB8fCBtb2RlbC5nZXQoJ2F0dHJzJyksICcuY29udGVudCcpO1xuICAgICAgICAgICAgICAgIEJQTU5FbGVtZW50Vmlldy5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgbW9kZWwsIG5vVGV4dEF0dHJzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVuZGVyaW5nT25seUF0dHJzIHx8IGhhcyQyKHJlbmRlcmluZ09ubHlBdHRycywgJy5jb250ZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50IGl0c2VsZi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50KG1vZGVsLCByZW5kZXJpbmdPbmx5QXR0cnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIEJQTU5FbGVtZW50Vmlldy5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgbW9kZWwsIHJlbmRlcmluZ09ubHlBdHRycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24gKGNlbGwsIHJlbmRlcmluZ09ubHlBdHRycykge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgdGhlIHRleHQgYXR0cmlidXRlc1xuICAgICAgICAgICAgdmFyIHRleHRBdHRycyA9IGpvaW50LnV0aWwubWVyZ2Uoe30sIChyZW5kZXJpbmdPbmx5QXR0cnMgfHwgY2VsbC5nZXQoJ2F0dHJzJykpWycuY29udGVudCddKTtcblxuICAgICAgICAgICAgdGV4dEF0dHJzID0gam9pbnQudXRpbC5vbWl0KHRleHRBdHRycywgJ3RleHQnKTtcblxuICAgICAgICAgICAgLy8gQnJlYWsgdGhlIGNvbnRlbnQgdG8gZml0IHRoZSBlbGVtZW50IHNpemUgdGFraW5nIGludG8gYWNjb3VudCB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gc2V0IG9uIHRoZSBtb2RlbC5cbiAgICAgICAgICAgIHZhciB0ZXh0ID0gam9pbnQudXRpbC5icmVha1RleHQoY2VsbC5nZXQoJ2NvbnRlbnQnKSwgY2VsbC5nZXQoJ3NpemUnKSwgdGV4dEF0dHJzLCB7XG4gICAgICAgICAgICAgICAgLy8gbWVhc3VyaW5nIHNhbmRib3ggc3ZnIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgc3ZnRG9jdW1lbnQ6IHRoaXMucGFwZXIuc3ZnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGF0dHJzIHdpdGggc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIG1vZGVsIGF0dHJzIHsgdGV4dDogeyAqdGV4dEF0dHJpYnV0ZXMqIH19XG4gICAgICAgICAgICB2YXIgYXR0cnMgPSBqb2ludC51dGlsLnNldEJ5UGF0aCh7fSwgJy5jb250ZW50JywgdGV4dEF0dHJzLCAnLycpO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRleHQgYXR0cmlidXRlIHdpdGggdGhlIG9uZSB3ZSBqdXN0IHByb2Nlc3NlZC5cbiAgICAgICAgICAgIGF0dHJzWycuY29udGVudCddLnRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgdXNpbmcgcmVuZGVyaW5nT25seUF0dHJpYnV0ZXMgcGFyYW1ldGVyLlxuICAgICAgICAgICAgQlBNTkVsZW1lbnRWaWV3LnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBjZWxsLCBhdHRycyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDaG9yZW9ncmFwaHlWaWV3ID0gVGV4dEJsb2NrVmlldy5leHRlbmQoe1xuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6cGFydGljaXBhbnRzJywgZnVuY3Rpb24gKGNlbGwsIHBhcnRpY2lwYW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFydGljaXBhbnRzKHBhcnRpY2lwYW50cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTppbml0aWF0aW5nUGFydGljaXBhbnQnLCB0aGlzLmxheW91dEFuZFVwZGF0ZSk7XG4gICAgICAgICAgICBqb2ludC5zaGFwZXMuYmFzaWMuVGV4dEJsb2NrVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKCFqb2ludC5lbnYudGVzdCgnc3ZnZm9yZWlnbm9iamVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gQXR0YWNoIG91ciBvd24gaGFuZGxlciBmb3IgY29udGVudCBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyBvbmUgd2lsbCB0YWtlIHRoZSBwYXJ0aWNpcGFudCBhdHRyaWJ1dGVzIGludG8gYWNjb3VudC5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcodGhpcy5tb2RlbCwgJ2NoYW5nZTpjb250ZW50JykubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTpjb250ZW50JywgZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50KGNlbGwsIHRoaXMucGFydGljaXBhbnRzQXR0cnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SGVpZ2h0OiAyMFxuICAgICAgICB9LFxuXG4gICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZXM6IFRleHRCbG9ja1ZpZXcuYWRkUHJlc2VudGF0aW9uQXR0cmlidXRlcyh7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudHM6ICdQQVJUSUNJUEFOVFMnLFxuICAgICAgICAgICAgaW5pdGlhdGluZ1BhcnRpY2lwYW50OiAnSU5JVF9QQVJUSUNJUEFOVCcsXG4gICAgICAgIH0pLFxuXG4gICAgICAgIGluaXRGbGFnOiBbJ1BBUlRJQ0lQQU5UUyddLmNvbmNhdChUZXh0QmxvY2tWaWV3LnByb3RvdHlwZS5pbml0RmxhZyksXG5cbiAgICAgICAgY29uZmlybVVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZsYWcgPSBUZXh0QmxvY2tWaWV3LnByb3RvdHlwZS5jb25maXJtVXBkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNGbGFnKGZsYWcsICdQQVJUSUNJUEFOVFMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFydGljaXBhbnRzKHRoaXMubW9kZWwuZ2V0KCdwYXJ0aWNpcGFudHMnKSk7XG4gICAgICAgICAgICAgICAgZmxhZyA9IHRoaXMucmVtb3ZlRmxhZyhmbGFnLCBbJ1BBUlRJQ0lQQU5UUycsICdJTklUX1BBUlRJQ0lQQU5UJ10pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmxhZyhmbGFnLCAnSU5JVF9QQVJUSUNJUEFOVCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRBbmRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICBmbGFnID0gdGhpcy5yZW1vdmVGbGFnKGZsYWcsICdJTklUX1BBUlRJQ0lQQU5UJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZztcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMucGFydGljaXBhbnRzQXR0cnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdXBkYXRlLiBXZSByZW5kZXIgdGhlIHBhcnRpY2lwYW50cy5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJ0aWNpcGFudHModGhpcy5tb2RlbC5nZXQoJ3BhcnRpY2lwYW50cycpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sYXlvdXRBbmRVcGRhdGUoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZXNldCBwYXJ0aWNpcGFudHMgY2FjaGUgd2hlbiBgZGlydHk6IHRydWVgIGZsYWcgdXNlZCBpbiBgYXR0cnMoKWAuXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgam9pbnQuZGlhLkVsZW1lbnRWaWV3LnByb3RvdHlwZS5yZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW5kZXJNYXJrdXA6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgam9pbnQuZGlhLkVsZW1lbnRWaWV3LnByb3RvdHlwZS5yZW5kZXJNYXJrdXAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgLy8gYSBob2xkZXIgZm9yIGFsbCB0aGUgbGFuZXNcbiAgICAgICAgICAgIHRoaXMuJHBhcnRpY2lwYW50cyA9IHRoaXMuJCgnLnBhcnRpY2lwYW50cycpO1xuXG4gICAgICAgICAgICAvLyBBbiBTVkcgZWxlbWVudCBmb3IgdGhlIGxhbmVcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRNYXJrdXAgPSBqb2ludC5WKHRoaXMubW9kZWwucGFydGljaXBhbnRNYXJrdXApO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbmRlclBhcnRpY2lwYW50czogZnVuY3Rpb24gKHBhcnRpY2lwYW50cykge1xuXG4gICAgICAgICAgICB0aGlzLiRwYXJ0aWNpcGFudHMuZW1wdHkoKTtcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnMgPSB7fTtcblxuICAgICAgICAgICAgam9pbnQudXRpbC50b0FycmF5KHBhcnRpY2lwYW50cykuZm9yRWFjaChmdW5jdGlvbiAocGFydGljaXBhbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICdwYXJ0aWNpcGFudF8nICsgaW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJy4nICsgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1tzZWxlY3RvciArICcgLnBhcnRpY2lwYW50LXJlY3QnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm9wdGlvbnMucGFydGljaXBhbnRIZWlnaHRcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1tzZWxlY3RvciArICcgLnBhcnRpY2lwYW50LWxhYmVsJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMuJHBhcnRpY2lwYW50cy5hcHBlbmQodGhpcy5wYXJ0aWNpcGFudE1hcmt1cC5jbG9uZSgpLmFkZENsYXNzKGNsYXNzTmFtZSkubm9kZSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5sYXlvdXRBbmRVcGRhdGUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBsYXlvdXRBbmRVcGRhdGU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgdmFyIHBhcnRpY2lwYW50cyA9IHRoaXMubW9kZWwuZ2V0KCdwYXJ0aWNpcGFudHMnKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnRpY2lwYW50cy5sZW5ndGg7XG5cbiAgICAgICAgICAgIHZhciBwSGVpZ2h0ID0gdGhpcy5vcHRpb25zLnBhcnRpY2lwYW50SGVpZ2h0O1xuICAgICAgICAgICAgdmFyIGVIZWlnaHQgPSB0aGlzLm1vZGVsLmdldCgnc2l6ZScpLmhlaWdodDtcbiAgICAgICAgICAgIHZhciBiSGVpZ2h0ID0gTWF0aC5tYXgoMCwgZUhlaWdodCAtIChwSGVpZ2h0ICogY291bnQpKTtcblxuICAgICAgICAgICAgdmFyIG9mZnNldFkgPSAwO1xuXG4gICAgICAgICAgICB2YXIgaW5pdGlhdG9yID0gdGhpcy5tb2RlbC5nZXQoJ2luaXRpYXRpbmdQYXJ0aWNpcGFudCcpO1xuXG4gICAgICAgICAgICAvLyBpbml0aWF0b3IgaW5kZXhcbiAgICAgICAgICAgIHZhciBpID0gTWF0aC5tYXgoam9pbnQudXRpbC5pc051bWJlcihpbml0aWF0b3IpID8gTWF0aC5hYnMoaW5pdGlhdG9yKSA6IHBhcnRpY2lwYW50cy5pbmRleE9mKGluaXRpYXRvciksIDApO1xuXG4gICAgICAgICAgICAvLyBib2R5IHBvc2l0aW9uIGluZGV4XG4gICAgICAgICAgICB2YXIgYiA9IE1hdGgubWluKGksIGNvdW50IC0gMik7XG5cbiAgICAgICAgICAgIGpvaW50LnV0aWwudG9BcnJheShwYXJ0aWNpcGFudHMpLmZvckVhY2goZnVuY3Rpb24gKHBhcnRpY2lwYW50LCBpbmRleCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJy5wYXJ0aWNpcGFudF8nICsgaW5kZXg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzW3NlbGVjdG9yXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsJyArIG9mZnNldFkgKyAnKSdcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1tzZWxlY3RvciArICcgLnBhcnRpY2lwYW50LXJlY3QnXS5maWxsID0gKGkgPT0gaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5hdHRyKCcuYm9keS9maWxsJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmF0dHIoJy5wYXJ0aWNpcGFudC1yZWN0L2ZpbGwnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbc2VsZWN0b3IgKyAnIC5wYXJ0aWNpcGFudC1yZWN0J10uc3Ryb2tlID0gKGkgPT0gaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5hdHRyKCcuYm9keS9zdHJva2UnKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuYXR0cignLnBhcnRpY2lwYW50LXJlY3Qvc3Ryb2tlJyk7XG5cbiAgICAgICAgICAgICAgICBvZmZzZXRZICs9IHBIZWlnaHQgKyAoYiA9PSBpbmRleCA/IGJIZWlnaHQgOiAwKTtcblxuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBzdWItcHJvY2VzcyBpY29uIHBvc2l0aW9uXG4gICAgICAgICAgICB2YXIgc3AgPSBjb3VudCA8IDIgPyAwIDogYiAtIGNvdW50ICsgMTtcblxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1snLnN1Yi1wcm9jZXNzJ10gPSB7XG4gICAgICAgICAgICAgICAgJ3JlZi1keSc6IE1hdGgubWF4KC1lSGVpZ2h0LCBzcCAqIHBIZWlnaHQgLSAzMClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIENoYW5nZSB0ZXh0IGNvbnRlbnQgcG9zaXRpb24gaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGFydGljaXBhbnQgYm9keVxuICAgICAgICAgICAgdmFyIGMgPSBjb3VudCA8IDIgPyAwIDogYiArIDE7XG5cbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbJy5mb2JqIGRpdiddID0ge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogYkhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogcEhlaWdodCAqIGNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZSBqdXN0IElFIGZhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzWycuY29udGVudCddID0ge1xuICAgICAgICAgICAgICAgICdyZWYteSc6IHBIZWlnaHQgKiBjICsgYkhlaWdodCAvIDJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHBhcnRpY2lwYW50cyBhdHRyaWJ1dGVzIHRvIGJlIHN0b3JlZCBvbiBtb2RlbC5cbiAgICAgICAgICAgIC8vIFRoYXQncyB3aHkgd2UgYXJlIHVzaW5nIHJlbmRlcmluZ09ubHlBdHRycyBwYXJhbWV0ZXIgaW4gRWxlbWVudFZpZXcudXBkYXRlXG4gICAgICAgICAgICB2YXIgYXR0cnMgPSBqb2ludC51dGlsLm1lcmdlKHt9LCB0aGlzLm1vZGVsLmdldCgnYXR0cnMnKSwgdGhpcy5wYXJ0aWNpcGFudHNBdHRycyB8fCB7fSk7XG5cbiAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAvLyBUaGUgdGV4dCBpcyBzZXQgYnkgYC5jb250ZW50L2h0bWxgIG5vdyAobGVhdmluZyB0aGlzIGluIHRoZSBhdHRycyB3b3VsZCByZXN1bHRcbiAgICAgICAgICAgIC8vIGluIG5vdCBiZWluZyBhYmxlIHRvIGNoYW5nZSBjb250ZW50KS5cbiAgICAgICAgICAgIGpvaW50LnV0aWwudW5zZXRCeVBhdGgoYXR0cnMsICdkaXYvaHRtbCcpO1xuXG4gICAgICAgICAgICBUZXh0QmxvY2tWaWV3LnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCB0aGlzLm1vZGVsLCBhdHRycyk7XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgam9pbnQuc2hhcGVzLmJhc2ljLlRleHRCbG9ja1ZpZXcgPSBUZXh0QmxvY2tWaWV3O1xuXG4gICAgcmV0dXJuIENob3Jlb2dyYXBoeVZpZXc7XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUNob3Jlb2dyYXBoeVNoYXBlKCkge1xuICAgIC8vIEJQTU4xIFxuICAgIGlmICgham9pbnQuc2hhcGVzLmJhc2ljLkdlbmVyaWMpIHtcbiAgICAgICAgam9pbnQuc2hhcGVzLmJhc2ljLkdlbmVyaWMgPSBqb2ludC5kaWEuRWxlbWVudC5kZWZpbmUoJ2Jhc2ljLkdlbmVyaWMnLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICcuJzogeyBmaWxsOiAnI2ZmZmZmZicsIHN0cm9rZTogJ25vbmUnIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7O1xuICAgIH1cblxuICAgIGNvbnN0IE9sZFRleHRCbG9jayA9IGpvaW50LnNoYXBlcy5iYXNpYy5HZW5lcmljLmRlZmluZSgnYmFzaWMuVGV4dEJsb2NrJywge1xuICAgICAgICAvLyBzZWUgam9pbnQuY3NzIGZvciBtb3JlIGVsZW1lbnQgc3R5bGVzXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICByZWN0OiB7XG4gICAgICAgICAgICAgICAgZmlsbDogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDAwMDAnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnIzAwMDAwMCcsXG4gICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IDE0LFxuICAgICAgICAgICAgICAgICdmb250LWZhbWlseSc6ICdBcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcuY29udGVudCc6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnZXhhbXBsZScsXG4gICAgICAgICAgICAgICAgJ3JlZi14JzogLjUsXG4gICAgICAgICAgICAgICAgJ3JlZi15JzogLjUsXG4gICAgICAgICAgICAgICAgJ3ktYWxpZ25tZW50JzogJ21pZGRsZScsXG4gICAgICAgICAgICAgICAgJ3gtYWxpZ25tZW50JzogJ21pZGRsZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudDogJydcbiAgICB9LCB7XG4gICAgICAgIG1hcmt1cDogW1xuICAgICAgICAgICAgJzxnIGNsYXNzPVwicm90YXRhYmxlXCI+JyxcbiAgICAgICAgICAgICc8ZyBjbGFzcz1cInNjYWxhYmxlXCI+PHJlY3QvPjwvZz4nLFxuICAgICAgICAgICAgc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZFxuICAgICAgICAgICAgICAgID8gJzxmb3JlaWduT2JqZWN0IGNsYXNzPVwiZm9ialwiPjxib2R5IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPjxkaXYgY2xhc3M9XCJjb250ZW50XCIvPjwvYm9keT48L2ZvcmVpZ25PYmplY3Q+J1xuICAgICAgICAgICAgICAgIDogJzx0ZXh0IGNsYXNzPVwiY29udGVudFwiLz4nLFxuICAgICAgICAgICAgJzwvZz4nXG4gICAgICAgIF0uam9pbignJyksXG5cbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLCAnY2hhbmdlOnNpemUnLCB0aGlzLnVwZGF0ZVNpemUpO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLCAnY2hhbmdlOmNvbnRlbnQnLCB0aGlzLnVwZGF0ZUNvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTaXplKHRoaXMsIHRoaXMuZ2V0KCdzaXplJykpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50KHRoaXMsIHRoaXMuZ2V0KCdjb250ZW50JykpO1xuICAgICAgICAgICAgam9pbnQuc2hhcGVzLmJhc2ljLkdlbmVyaWMucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGVTaXplOiBmdW5jdGlvbiAoY2VsbCwgc2l6ZSkge1xuXG4gICAgICAgICAgICAvLyBTZWxlY3RvciBgZm9yZWlnbk9iamVjdCcgZG9lc24ndCB3b3JrIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdlJ3JlIHVzaW5nIGNsYXNzIHNlbGVjdG9yIGluc3RlYWQuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNsb25lIHNpemUgYXMgd2UgZG9uJ3Qgd2FudCBhdHRyaWJ1dGVzLmRpdi5zdHlsZSB0byBiZSBzYW1lIG9iamVjdCBhcyBhdHRyaWJ1dGVzLnNpemUuXG4gICAgICAgICAgICB0aGlzLmF0dHIoe1xuICAgICAgICAgICAgICAgICcuZm9iaic6IGpvaW50LnV0aWwuYXNzaWduKHt9LCBzaXplKSxcbiAgICAgICAgICAgICAgICBkaXY6IHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IGpvaW50LnV0aWwuYXNzaWduKHt9LCBzaXplKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uIChjZWxsLCBjb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIENvbnRlbnQgZWxlbWVudCBpcyBhIDxkaXY+IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyKHtcbiAgICAgICAgICAgICAgICAgICAgJy5jb250ZW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogam9pbnQudXRpbC5zYW5pdGl6ZUhUTUwoY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLy8gQ29udGVudCBlbGVtZW50IGlzIGEgPHRleHQ+IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIGRvbid0IGhhdmUgaW5uZXJIVE1MIGF0dHJpYnV0ZS5cbiAgICAgICAgICAgICAgICB0aGlzLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAnLmNvbnRlbnQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBIZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTpcbiAgICAgICAgc2V0Rm9yZWlnbk9iamVjdFNpemU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVTaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gSGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6XG4gICAgICAgIHNldERpdkNvbnRlbnQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBTdWJQcm9jZXNzSW50ZXJmYWNlID0ge1xuXG4gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgLy8gU2VlIEljb25JbnRlcmZhY2UuaW5pdGlhbGl6ZSgpXG4gICAgICAgICAgICB0aGlzLl9wYXJlbnQgPSAodGhpcy5fcGFyZW50IHx8IHRoaXMpLmNvbnN0cnVjdG9yLl9fc3VwZXJfXztcblxuICAgICAgICAgICAgdGhpcy5fcGFyZW50LmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLCAnY2hhbmdlOnN1YlByb2Nlc3MnLCB0aGlzLl9vblN1YlByb2Nlc3NDaGFuZ2UpO1xuXG4gICAgICAgICAgICB0aGlzLl9vblN1YlByb2Nlc3NDaGFuZ2UodGhpcywgdGhpcy5nZXQoJ3N1YlByb2Nlc3MnKSB8fCBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfb25TdWJQcm9jZXNzQ2hhbmdlOiBmdW5jdGlvbiAoY2VsbCwgc3ViUHJvY2Vzcykge1xuXG4gICAgICAgICAgICBjZWxsLmF0dHIoe1xuICAgICAgICAgICAgICAgICcuc3ViLXByb2Nlc3MnOiB7XG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IHN1YlByb2Nlc3MgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtc3ViLXByb2Nlc3MnOiBzdWJQcm9jZXNzIHx8ICcnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvLyBDaG9yZW9ncmFweVxuXG4gICAgdmFyIENob3Jlb2dyYXBoeSA9IE9sZFRleHRCbG9jay5leHRlbmQoe1xuICAgICAgICBtYXJrdXA6IFtcbiAgICAgICAgICAgICc8ZyBjbGFzcz1cInJvdGF0YWJsZVwiPicsXG4gICAgICAgICAgICAnPGcgY2xhc3M9XCJzY2FsYWJsZVwiPjxyZWN0IGNsYXNzPVwiYm9keVwiLz48L2c+JyxcbiAgICAgICAgICAgIGpvaW50LmVudi50ZXN0KCdzdmdmb3JlaWdub2JqZWN0JykgPyAnPGZvcmVpZ25PYmplY3QgY2xhc3M9XCJmb2JqXCI+PGJvZHkgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGRpdiBjbGFzcz1cImNvbnRlbnRcIi8+PC9ib2R5PjwvZm9yZWlnbk9iamVjdD4nIDogJzx0ZXh0IGNsYXNzPVwiY29udGVudFwiLz4nLFxuICAgICAgICAgICAgJzx0ZXh0IGNsYXNzPVwibGFiZWxcIi8+PHBhdGggY2xhc3M9XCJzdWItcHJvY2Vzc1wiLz48ZyBjbGFzcz1cInBhcnRpY2lwYW50c1wiLz4nLFxuICAgICAgICAgICAgJzwvZz4nXG4gICAgICAgIF0uam9pbignJyksXG5cbiAgICAgICAgcGFydGljaXBhbnRNYXJrdXA6ICc8ZyBjbGFzcz1cInBhcnRpY2lwYW50XCI+PHJlY3QgY2xhc3M9XCJwYXJ0aWNpcGFudC1yZWN0XCIvPjx0ZXh0IGNsYXNzPVwicGFydGljaXBhbnQtbGFiZWxcIi8+PC9nPicsXG5cbiAgICAgICAgZGVmYXVsdHM6IGpvaW50LnV0aWwuZGVlcFN1cHBsZW1lbnQoe1xuXG4gICAgICAgICAgICB0eXBlOiAnYnBtbi5DaG9yZW9ncmFwaHknLFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHdpZHRoOiA2MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDgwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIChUT0RPISk6IGFzIHdlIGRvbid0IGhhdmUgaW5kZXhlcyBvbiBhdHRyaWJ1dGVzIHlldCAodG8gZGV0ZXJtaW5lIHRoZSBvcmRlclxuICAgICAgICAgICAgICAgIC8vIG9mIGFwcGx5aW5nIGF0dHJpYnV0ZXMpIHdlIGhhdmUgdG8gcmVpbnRyb2R1Y2UgdGhlIHJlY3QgYXR0cmlidXRlIGFnYWluXG4gICAgICAgICAgICAgICAgLy8gc28gaXQgY2hhbmdlcyB0aGUgXCJvcmRlclwiIGhvdyB0aGUgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLlxuICAgICAgICAgICAgICAgIC8vIEl0J3MgbmVjZXNzYXJ5IHRvIGFwcGx5IGFsbCBgcmVjdGAgYXR0cmlidXRlcyBiZWZvcmUgd2UgYXBwbHkgJy5ib2R5JyBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgc3Ryb2tlIGFuZCBmaWxsIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICAgICAgICAgICAgcmVjdDoge30sXG4gICAgICAgICAgICAgICAgJy5ib2R5Jzoge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNjAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogODAsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcubGFiZWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogJy5ib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi14JzogLjUsXG4gICAgICAgICAgICAgICAgICAgICdyZWYtZHknOiA1LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZScsXG4gICAgICAgICAgICAgICAgICAgICdmb250LWZhbWlseSc6ICdDYWxpYnJpJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IDEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLnBhcnRpY2lwYW50LXJlY3QnOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2FhYWFhYScsXG4gICAgICAgICAgICAgICAgICAgIHJlZjogJy5ib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi13aWR0aCc6IDFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcucGFydGljaXBhbnQtbGFiZWwnOiB7XG4gICAgICAgICAgICAgICAgICAgICd0ZXh0LWFuY2hvcic6ICdtaWRkbGUnLFxuICAgICAgICAgICAgICAgICAgICByZWY6ICcucGFydGljaXBhbnRfMCAucGFydGljaXBhbnQtcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICdyZWYteCc6IC41LFxuICAgICAgICAgICAgICAgICAgICAncmVmLXknOiAuNSxcbiAgICAgICAgICAgICAgICAgICAgJ3ktYWxpZ25tZW50JzogJ21pZGRsZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcuc3ViLXByb2Nlc3MnOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6ICdNIDAgMCBMIDMwIDAgMzAgMzAgMCAzMCB6IE0gMTUgNCBMIDE1IDI2IE0gNCAxNSBMIDI2IDE1JyxcbiAgICAgICAgICAgICAgICAgICAgcmVmOiAnLmJvZHknLFxuICAgICAgICAgICAgICAgICAgICAncmVmLXgnOiAwLjUsXG4gICAgICAgICAgICAgICAgICAgICdyZWYtZHknOiAtMzAsXG4gICAgICAgICAgICAgICAgICAgICd4LWFsaWdubWVudCc6ICdtaWRkbGUnLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwMDAwJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5mb2JqIGRpdic6IHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdDYWxpYnJpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcGFydGljaXBhbnRzOiBbXSxcbiAgICAgICAgICAgIGluaXRpYXRpbmdQYXJ0aWNpcGFudDogMCAvLyBpbmRleCAobnVtYmVyKSBvciBwYXJ0aWNpcGFudCBuYW1lIChzdHJpbmcpXG5cbiAgICAgICAgfSwgT2xkVGV4dEJsb2NrLnByb3RvdHlwZS5kZWZhdWx0cylcblxuICAgIH0pLmV4dGVuZChTdWJQcm9jZXNzSW50ZXJmYWNlKTtcblxuICAgIGpvaW50LnNoYXBlcy5iYXNpYy5UZXh0QmxvY2sgPSBPbGRUZXh0QmxvY2s7XG5cbiAgICByZXR1cm4gQ2hvcmVvZ3JhcGh5O1xufVxuXG5mdW5jdGlvbiBjdXN0b21NZXNzYWdlU2hhcGUoKSB7XG4gICAgdmFyIE1lc3NhZ2UgPSBqb2ludC5kaWEuRWxlbWVudC5leHRlbmQoe1xuXG4gICAgICAgIG1hcmt1cDogJzxnIGNsYXNzPVwicm90YXRhYmxlXCI+PGcgY2xhc3M9XCJzY2FsYWJsZVwiPjxwb2x5Z29uIGNsYXNzPVwiYm9keVwiLz48L2c+PHRleHQgY2xhc3M9XCJsYWJlbFwiLz48L2c+JyxcblxuICAgICAgICBkZWZhdWx0czogam9pbnQudXRpbC5kZWVwU3VwcGxlbWVudCh7XG5cbiAgICAgICAgICAgIHR5cGU6ICdicG1uLk1lc3NhZ2UnLFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHdpZHRoOiA2MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAnLmJvZHknOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50czogJzAsMCA2MCwwIDYwLDQwIDAsNDAgMCwwIDYwLDAgMzAsMjAgMCwwJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5sYWJlbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiAnLmJvZHknLFxuICAgICAgICAgICAgICAgICAgICAncmVmLXgnOiAuNSxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi1keSc6IDUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAndGV4dC1hbmNob3InOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogJ0NhbGlicmknLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogMTJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwgam9pbnQuZGlhLkVsZW1lbnQucHJvdG90eXBlLmRlZmF1bHRzKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIE1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUpvaW50SlNCUE1OKCkge1xuICAgIG92ZXJ3cml0ZUN1c3RvbVNoYXBlQXR0cnMoKTtcbiAgICBhZGRDdXN0b21TaGFwZSgpO1xufVxuXG5jb25zdCBCUE1OQ3VzdG9tRnVuY3Rpb24gPSB7XG4gICAgY3VzdG9tSm9pbnRKU0JQTU4sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCUE1OQ3VzdG9tRnVuY3Rpb247XG4iXX0=
|
1334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtbi5jdXN0b20uZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbW1vbi9qb2ludEpTL2JwbW4vYnBtbi5jdXN0b20uZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFLNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUVwQixNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFckUsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQzlCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUM7O0FBRUYsU0FBUyx5QkFBeUI7SUFDOUIscUJBQXFCLEVBQUUsQ0FBQztJQUN4QixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsc0JBQXNCLEVBQUUsQ0FBQztJQUN6Qix1QkFBdUIsRUFBRSxDQUFDO0lBQzFCLHlCQUF5QixFQUFFLENBQUM7SUFDNUIsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLGlCQUFpQixFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQzVDLElBQUksRUFBRSxLQUFLO1FBQ1gsSUFBSSxFQUFFLEtBQUs7UUFDWCxrQkFBa0IsRUFBRSxRQUFRO1FBQzVCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxJQUFJO1NBQ2pCO1FBQ0QsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQztJQUVGLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTdCLHlCQUF5QixDQUFDLFVBQVUsRUFDaEMsVUFBVSxTQUFTO1FBQ2YsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQyxFQUNDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGtCQUFrQjtJQUN2QixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRztRQUN6QyxLQUFLLEVBQUUsRUFBRTtRQUNULElBQUksRUFBRSxLQUFLO1FBQ1gsa0JBQWtCLEVBQUUsUUFBUTtRQUM1QixVQUFVLEVBQUUsTUFBTTtRQUNsQixhQUFhLEVBQUUsSUFBSTtLQUN0QixDQUFDO0lBRUYsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsUUFBUSxFQUFFLFlBQVk7U0FDekIsRUFBRTtZQUNDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxNQUFNO1NBQ25CLEVBQUU7WUFDQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ3JCLEVBQUU7WUFDQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFFBQVEsRUFBRSxpQkFBaUI7U0FDOUI7UUFDRDtZQUNJLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLE9BQU87U0FDcEIsQ0FBQyxDQUFDO0lBRUgseUJBQXlCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLFVBQVU7UUFDekQsT0FBTyxDQUFDLENBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBUyxvQkFBb0I7SUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUc7UUFDM0MsS0FBSyxFQUFFLEVBQUU7UUFDVCxJQUFJLEVBQUUsS0FBSztRQUNYLGtCQUFrQixFQUFFLFFBQVE7UUFDNUIsVUFBVSxFQUFFLE1BQU07UUFDbEIsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQztJQUVGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXZDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVEsRUFBRSxNQUFNO1NBQ25CLEVBQUU7WUFDQyxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsTUFBTTtTQUNuQixFQUFFO1lBQ0MsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsaUJBQWlCO1NBQzlCLEVBQUU7WUFDQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFFBQVEsRUFBRSxPQUFPO1NBQ3BCLENBQUMsQ0FBQztJQUVILHlCQUF5QixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxVQUFVO1FBQzNELE9BQU8sQ0FBQyxDQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFNBQVMsc0JBQXNCO0lBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQzdDLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsSUFBSSxFQUFFLEtBQUs7UUFDWCxJQUFJLEVBQUUsTUFBTTtRQUNaLEtBQUssRUFBRSxFQUFFO1FBQ1QsVUFBVSxFQUFFLE1BQU07UUFDbEIsSUFBSSxFQUFFLFNBQVM7UUFDZixhQUFhLEVBQUUsSUFBSTtLQUN0QixDQUFDO0lBRUYsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsMkJBQTJCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFekMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDaEMsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsTUFBTTtTQUNuQixFQUFFO1lBQ0MsT0FBTyxFQUFFLFNBQVM7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDbEIsRUFBRTtZQUNDLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLGlCQUFpQjtTQUM5QixFQUFFO1lBQ0MsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsT0FBTztTQUNwQixDQUFDLENBQUM7SUFFSCx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsVUFBVTtRQUM3RCxPQUFPLENBQUMsQ0FBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBUyx1QkFBdUI7SUFDNUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUc7UUFDOUMsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsRUFBRTtRQUNULElBQUksRUFBRSxLQUFLO1FBQ1gsa0JBQWtCLEVBQUUsUUFBUTtRQUM1QixVQUFVLEVBQUUsTUFBTTtRQUNsQixhQUFhLEVBQUUsSUFBSTtLQUN0QixDQUFDO0lBRUYsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakMsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsTUFBTTtTQUNuQixFQUFFO1lBQ0MsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsaUJBQWlCO1NBQzlCLEVBQUU7WUFDQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFFBQVEsRUFBRSxPQUFPO1NBQ3BCLEVBQUU7WUFDQyxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsY0FBYztTQUMzQixFQUFFO1lBQ0MsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLGdCQUFnQjtTQUM3QixDQUFDLENBQUM7SUFFSCx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsVUFBVTtRQUM5RCxPQUFPLENBQUMsQ0FBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLHlCQUF5QjtJQUM5QixLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRztRQUNoRCxLQUFLLEVBQUUsRUFBRTtRQUNULElBQUksRUFBRSxLQUFLO1FBQ1gsa0JBQWtCLEVBQUUsUUFBUTtRQUM1QixVQUFVLEVBQUUsTUFBTTtRQUNsQixhQUFhLEVBQUUsSUFBSTtLQUN0QixDQUFDO0lBRUYsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsMkJBQTJCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFNUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbkMsT0FBTyxFQUFFLFNBQVM7WUFDbEIsUUFBUSxFQUFFLE1BQU07U0FDbkIsRUFBRTtZQUNDLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLGlCQUFpQjtTQUM5QixFQUFFO1lBQ0MsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsT0FBTztTQUNwQixFQUFFO1lBQ0MsT0FBTyxFQUFFLEdBQUc7WUFDWixRQUFRLEVBQUUsU0FBUztTQUN0QixDQUFDLENBQUM7SUFFSCx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsVUFBVTtRQUNoRSxPQUFPLENBQUMsQ0FBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLGtCQUFrQjtJQUN2QixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRztRQUN6QyxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksRUFBRSxLQUFLO1FBQ1gsVUFBVSxFQUFFLE1BQU07UUFDbEIsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxJQUFJO1NBQ2pCO1FBQ0QsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQztJQUVGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTFCLHlCQUF5QixDQUFDLE9BQU8sRUFDN0IsVUFBVSxTQUFTO1FBQ2YsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQyxFQUNELElBQUksQ0FDUCxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQ3hCLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQzlDLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSSxFQUFFLENBQUM7UUFDUCxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDVixNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLElBQUk7U0FDakI7UUFDRCxhQUFhLEVBQUUsSUFBSTtLQUN0QixDQUFDO0lBRUYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRztRQUM1QyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUk7WUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN0QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDNUMsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7WUFDYixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7WUFDYixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDN0MsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ2pELEtBQUssS0FBSzt3QkFDTixJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFDckIsTUFBTTtvQkFDVixLQUFLLFFBQVE7d0JBQ1QsSUFBSSxHQUFHLFFBQVEsQ0FBQzt3QkFDaEIsTUFBTTtvQkFDVixLQUFLLE9BQU87d0JBQ1IsSUFBSSxHQUFHLENBQUMsQ0FBQzt3QkFDVCxNQUFNO29CQUNWO3dCQUNJLElBQUksR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixNQUFNO2lCQUNiO2FBQ0o7WUFDRCxpREFBaUQ7WUFDakQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNKLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxpQkFBaUI7SUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUN0RSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBRzNFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLEdBQUc7UUFDNUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxPQUFPO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRXBFLDBCQUEwQjtRQUMxQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9ELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtnQkFDcEksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7b0JBQzNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzVDO2FBQ0o7U0FDSjthQUNJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUM5SSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDMU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDakQ7YUFDSjtTQUNKO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxPQUFPLEdBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDdkMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNiLEdBQUcsRUFBRSxJQUFJO1NBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDTCxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU07UUFDckUsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxPQUFPO2dCQUNSLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTs0QkFDVCxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNmLE9BQU8sS0FBSyxDQUFDO3lCQUNoQjt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsTUFBTTtZQUNWLEtBQUssVUFBVTtnQkFDWCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxFQUFFO29CQUNyRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7NEJBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dDQUNULE9BQU8sR0FBRyxJQUFJLENBQUM7Z0NBQ2YsT0FBTyxLQUFLLENBQUM7NkJBQ2hCOzRCQUNELE9BQU8sSUFBSSxDQUFDO3dCQUNoQixDQUFDLENBQUMsQ0FBQztxQkFDTjtpQkFDSjtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxZQUFZO2dCQUNiLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDaEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTs0QkFDVCxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNmLE9BQU8sS0FBSyxDQUFDO3lCQUNoQjt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsTUFBTTtZQUNWO2dCQUNJLE1BQU07U0FDYjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsVUFBVTtRQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDUixLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDbkI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEdBQUcsVUFBVSxNQUFNLEVBQUUsVUFBVTtRQUNyRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE1BQU0sSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDUixLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztxQkFDbkI7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxVQUFVO1FBQy9ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoRCxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNSLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNuQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLE1BQU0sRUFBRSxVQUFVO1FBQ2pFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUU7WUFDdEIsUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxVQUFVO1FBQ3hELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRTtnQkFDeEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDaEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxVQUFVLEVBQUUsS0FBSztRQUNqRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7YUFDbkM7WUFDRCxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ1QsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7aUJBQ3RCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLFVBQVUsVUFBVSxFQUFFLE1BQU07UUFDbkUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUU7Z0JBQ3hCLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLO1FBQzVFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7YUFDbkM7WUFDRCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNULENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2lCQUN0QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLFVBQVU7UUFDNUQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO2dCQUN4QixHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNoQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLFVBQVUsRUFBRSxLQUFLO1FBQ3RFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUMvQixLQUFLLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQzthQUNuQztZQUNELFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDVCxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztpQkFDdEI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFVBQVUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSztRQUNqRixJQUFJLFVBQVUsSUFBSSxLQUFLLEVBQUU7WUFDckIscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUNuRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDN0U7WUFDRCxxQ0FBcUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDbEksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzdFO1lBQ0QsaUNBQWlDO2lCQUM1QjtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoSDtTQUNKO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFVBQVUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSztRQUNwRixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUNuQyxPQUFPO1NBQ1Y7UUFDRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDckUsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFO29CQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7b0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTt3QkFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUM3RTtpQkFDSjthQUNKO2lCQUNJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLFVBQVUsS0FBSyxhQUFhLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFO29CQUN6RSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdEQsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQy9ELElBQUksYUFBYSxLQUFLLFVBQVUsRUFBRTt3QkFDOUIsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO3dCQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7NEJBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzt5QkFDN0U7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLO1FBQ3RGLElBQUksVUFBVSxJQUFJLEtBQUssRUFBRTtZQUNyQixxQkFBcUI7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDbEYsUUFBUSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5RTtZQUNELHFDQUFxQztpQkFDaEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtnQkFDL00sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNsRixRQUFRLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUMvRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsaUNBQWlDO2lCQUM1QjtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoSDtTQUNKO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztRQUM3QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkMseUJBQXlCO1FBQ3pCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xGLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3RFO2lCQUNJLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ25FO2lCQUNJLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEU7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEg7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEg7SUFDTCxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLGdCQUFnQjtRQUNoRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDZixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzFCLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hELE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQztTQUN4QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHO1FBQ2xDLEdBQUcsRUFBRSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUs7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxFQUNGLEtBQUssRUFDUixHQUFHLElBQUksQ0FBQztZQUNULE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDbEMsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25GLENBQUM7S0FDSixDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRztRQUN0QyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLO1lBQ3ZDLE1BQU0sRUFDRixLQUFLLEVBQ1IsR0FBRyxJQUFJLENBQUM7WUFDVCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUIsMEJBQTBCO1lBQzFCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLGVBQWUsRUFBRTtvQkFDakIsUUFBUSxlQUFlLEVBQUU7d0JBQ3JCLEtBQUssS0FBSzs0QkFDTixPQUFPO2dDQUNILENBQUMsRUFBRSxTQUFTO2dDQUNaLENBQUMsRUFBRSxDQUFDOzZCQUNQLENBQUM7d0JBQ04sS0FBSyxRQUFROzRCQUNULE9BQU87Z0NBQ0gsQ0FBQyxFQUFFLFNBQVM7Z0NBQ1osQ0FBQyxFQUFFLFVBQVU7NkJBQ2hCLENBQUM7d0JBQ04sS0FBSyxPQUFPOzRCQUNSLE9BQU87Z0NBQ0gsQ0FBQyxFQUFFLFNBQVM7Z0NBQ1osQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDOzZCQUNoQixDQUFDO3dCQUNOOzRCQUNJLE9BQU87Z0NBQ0gsQ0FBQyxFQUFFLFNBQVM7Z0NBQ1osQ0FBQyxFQUFFLFVBQVU7NkJBQ2hCLENBQUM7cUJBQ1Q7aUJBQ0o7cUJBQ0k7b0JBQ0QsT0FBTzt3QkFDSCxDQUFDLEVBQUUsU0FBUzt3QkFDWixDQUFDLEVBQUUsVUFBVTtxQkFDaEIsQ0FBQztpQkFDTDthQUNKO1FBQ0wsQ0FBQztLQUNKLENBQUM7SUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZDLEdBQUcsRUFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUs7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxFQUNGLEtBQUssRUFDUixHQUFHLElBQUksQ0FBQztZQUNULE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFDdkMsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVFLENBQUM7S0FDSixDQUFBO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsR0FBRztRQUNoRCxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLO1lBQ3ZDLE1BQU0sRUFDRixLQUFLLEVBQ1IsR0FBRyxJQUFJLENBQUM7WUFDVCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUUvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRTlCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUM7WUFDL0QsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDN0IsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xGLElBQUkscUJBQXFCLEVBQUU7b0JBQ3ZCLFFBQVEscUJBQXFCLEVBQUU7d0JBQzNCLEtBQUssS0FBSzs0QkFDTixPQUFPO2dDQUNILENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWTtnQ0FDdkIsQ0FBQyxFQUFFLFVBQVU7NkJBQ2hCLENBQUM7d0JBQ04sS0FBSyxRQUFROzRCQUNULE9BQU87Z0NBQ0gsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO2dDQUNaLENBQUMsRUFBRSxVQUFVOzZCQUNoQixDQUFDO3dCQUNOLEtBQUssT0FBTzs0QkFDUixPQUFPO2dDQUNILENBQUMsRUFBRSxZQUFZO2dDQUNmLENBQUMsRUFBRSxVQUFVOzZCQUNoQixDQUFDO3dCQUNOOzRCQUNJLE9BQU87Z0NBQ0gsQ0FBQyxFQUFFLEtBQUssR0FBRyxZQUFZO2dDQUN2QixDQUFDLEVBQUUsVUFBVTs2QkFDaEIsQ0FBQztxQkFDVDtpQkFDSjthQUNKO1FBQ0wsQ0FBQztLQUNKLENBQUM7SUFFRixLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ25GLENBQUM7QUFHRCxTQUFTLGdCQUFnQixDQUFDLEdBQVE7SUFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRztRQUN2QyxLQUFLLEVBQUU7WUFDSCxVQUFVLEVBQUUsUUFBUTtZQUNwQixXQUFXLEVBQUUsQ0FBQztZQUNkLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFFBQVEsRUFBRSxFQUFFO1NBQ2Y7S0FDSixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUMsR0FBUTtJQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHO1FBQ2xELEdBQUcsRUFBRSxPQUFPO1FBQ1osSUFBSSxFQUFFLE1BQU07UUFDWixFQUFFLEVBQUUsQ0FBQztRQUNMLEVBQUUsRUFBRSxDQUFDO1FBQ0wsUUFBUSxFQUFFLENBQUM7UUFDWCxTQUFTLEVBQUUsQ0FBQztRQUNaLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSSxFQUFFLENBQUM7S0FDVixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsR0FBUSxFQUFFLFFBQW1DLEVBQUUsY0FBeUM7SUFDdkgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3RDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSTtZQUNoQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3RCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM1QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDOUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxjQUFjLEVBQUU7b0JBQ2hCLElBQUksR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3JDO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQTthQUNmO1lBQ0QsSUFBSSxHQUFHLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFcEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO0tBQ0osQ0FBQTtBQUNMLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQVUsRUFBRSxJQUFTLEVBQUUsUUFBYTtJQUMvRCxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbEQsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3RELEtBQUssS0FBSztnQkFDTixJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNoQixNQUFNO1lBQ1YsS0FBSyxRQUFRO2dCQUNULElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsTUFBTTtZQUNWLEtBQUssT0FBTztnQkFDUixJQUFJLEdBQUcsQ0FBRSxRQUFRLENBQUM7Z0JBQ2xCLE1BQU07WUFDVjtnQkFDSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNULE1BQU07U0FDYjtLQUNKO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJO0lBQ2xGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFDRixJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFDSCxNQUFNLEVBQ1QsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDbEYsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxTQUFTLENBQUM7SUFDZCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7UUFDZCxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQzVCLFNBQVMsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1NBQ3pCLENBQUM7S0FDTDtTQUFNO1FBQ0gsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUN2QixTQUFTLEdBQUcsSUFBSSxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxXQUFXLEVBQUU7UUFDYixrRUFBa0U7UUFDbEUsa0RBQWtEO1FBQ2xELElBQUksaUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLElBQUksbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9GLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JFLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzRjtRQUNELElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3ZFLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvRjtRQUVELElBQUksaUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRixJQUFJLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEYsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzVELGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEY7UUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDOUQsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0RjtRQUVELElBQUksaUJBQWlCLEtBQUssaUJBQWlCLEVBQUU7WUFDekMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO2dCQUNuQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQ1osQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7d0JBQ3BCLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztvQkFDeEMsQ0FBQyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxtQkFBbUIsS0FBSyxtQkFBbUIsRUFBRTtZQUM3QyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzQyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDWixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDcEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCw0REFBNEQ7UUFDNUQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFVBQVUsR0FBRyxTQUFTLENBQUM7U0FDMUI7UUFDRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFFRCxlQUFlO1FBQ2YsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9GLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMxRTtRQUVELGtCQUFrQjtRQUNsQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixtQ0FBbUM7WUFDbkMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUMxSyxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTthQUN6RjtZQUNELG1DQUFtQztZQUNuQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDeEosVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDOUY7U0FDSjtRQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDdEM7S0FDSjtJQUVELFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RyxDQUFDO0FBRUQsU0FBUyxjQUFjO0lBRW5CLElBQUksT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0IsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hELElBQUksWUFBWSxHQUFHLHVCQUF1QixFQUFFLENBQUM7SUFDN0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDaEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLFlBQVksRUFBRSxZQUFZO1FBQzFCLE9BQU8sRUFBRSxPQUFPO0tBQ25CLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxzQkFBc0I7SUFDM0IsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFckQsZUFBZSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsR0FBRyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUc7UUFDcEYsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRWxCLElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7UUFDM0IsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN6QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFL0IsS0FBSyxRQUFRLElBQUksUUFBUSxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxxRUFBcUU7WUFDckUsd0VBQXdFO1lBQ3hFLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBQ3JCLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RSxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzNDO2lCQUFNLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUNuQztTQUNKO1FBRUQsSUFBSSxJQUFJLFlBQVksV0FBVyxFQUFFO1lBQzdCLDBEQUEwRDtZQUMxRCw4REFBOEQ7WUFDOUQsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNWO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDeEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLGFBQWEsRUFBRTtZQUNmLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEQsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQztRQUVELHdEQUF3RDtRQUN4RCx3QkFBd0I7UUFDeEIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQztRQUN4QixJQUFJLGFBQWEsSUFBSSxXQUFXLEVBQUU7WUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFELEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xCLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEtBQUssUUFBUSxJQUFJLGFBQWEsRUFBRTtZQUM1QixPQUFPLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsOERBQThEO1lBQzlELDBFQUEwRTtZQUMxRSxpRUFBaUU7WUFDakUsK0JBQStCO1lBQy9CLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEYsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELFVBQVUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBRUQsK0VBQStFO1FBQy9FLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLFdBQVcsRUFBRTtZQUNiLCtCQUErQjtZQUMvQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixLQUFLLFFBQVEsSUFBSSxXQUFXLEVBQUU7b0JBQzFCLE9BQU8sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLGtFQUFrRTtvQkFDbEUsa0ZBQWtGO29CQUNsRixrRUFBa0U7b0JBQ2xFLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3ZFLElBQUksV0FBVyxFQUFFO3dCQUNiLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM5RCxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7cUJBQ2pDO2lCQUNKO2FBQ0o7U0FDSjtRQUVELGlGQUFpRjtRQUNqRixJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRTtZQUN2RCw0Q0FBNEM7WUFDNUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixVQUFVLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDOUIsVUFBVSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RSxrQ0FBa0M7U0FDckM7SUFDTCxDQUFDLENBQUM7SUFFRixnRkFBZ0Y7SUFDaEYsd0NBQXdDO0lBQ3hDLElBQUksYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFdkMsc0JBQXNCLEVBQUUseUJBQXlCO1lBQzdDLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtZQUNsRCxDQUFDLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNwQixDQUFDO1FBRU4sUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUUvQixhQUFhLEVBQUU7WUFDWCxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDN0M7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLGtCQUFrQjtZQUVuQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRXZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFFNUIsMkNBQTJDO2dCQUMzQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUN4RixlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFaEUsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDOUQsNkJBQTZCO29CQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2lCQUNqRDthQUVKO2lCQUFNO2dCQUVILGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDMUU7UUFDTCxDQUFDO1FBRUQsYUFBYSxFQUFFLFVBQVUsSUFBSSxFQUFFLGtCQUFrQjtZQUM3QyxxQ0FBcUM7WUFDckMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFFNUYsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUvQywrRUFBK0U7WUFDL0Usb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUU7Z0JBQzlFLGlDQUFpQztnQkFDakMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRzthQUM5QixDQUFDLENBQUM7WUFFSCwwRkFBMEY7WUFDMUYsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFakUseURBQXlEO1lBQ3pELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRTlCLDJEQUEyRDtZQUMzRCxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBRUgsSUFBSSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ3hDLFVBQVUsRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxVQUFVLElBQUksRUFBRSxZQUFZO2dCQUN6RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hGLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3JDLDZDQUE2QztnQkFDN0MsaUVBQWlFO2dCQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLElBQUk7b0JBQ2xHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRTtZQUNMLGlCQUFpQixFQUFFLEVBQUU7U0FDeEI7UUFFRCxzQkFBc0IsRUFBRSxhQUFhLENBQUMseUJBQXlCLENBQUM7WUFDNUQsWUFBWSxFQUFFLGNBQWM7WUFDNUIscUJBQXFCLEVBQUUsa0JBQWtCO1NBQzVDLENBQUM7UUFFRixRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFbkUsYUFBYSxFQUFFO1lBQ1gsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDbkUsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUNwRDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLEVBQUU7WUFFSixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7Z0JBQ3RDLDZEQUE2RDtnQkFDN0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzthQUNsRTtZQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV2QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxFQUFFO1lBQ0osc0VBQXNFO1lBQ3RFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7WUFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxZQUFZLEVBQUU7WUFFVixLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFcEUsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUU3Qyw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxrQkFBa0IsRUFBRSxVQUFVLFlBQVk7WUFFdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBRTVCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFdBQVcsRUFBRSxLQUFLO2dCQUNqRSxJQUFJLFNBQVMsR0FBRyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLFFBQVEsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO2dCQUUvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLEdBQUc7b0JBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQjtpQkFDekMsQ0FBQztnQkFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDLEdBQUc7b0JBQ3ZELElBQUksRUFBRSxXQUFXO2lCQUNwQixDQUFDO2dCQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkYsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRVQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxlQUFlLEVBQUU7WUFFYixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEQsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUVoQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV2RCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFFaEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUV4RCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU1RyxzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRS9CLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFdBQVcsRUFBRSxLQUFLO2dCQUVqRSxJQUFJLFFBQVEsR0FBRyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUV2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQy9CLFNBQVMsRUFBRSxjQUFjLEdBQUcsT0FBTyxHQUFHLEdBQUc7aUJBQzVDLENBQUM7Z0JBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUVoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDekUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztvQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBRWxELE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBELENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVULGdDQUFnQztZQUNoQyxJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsR0FBRztnQkFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7YUFDbEQsQ0FBQztZQUVGLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxHQUFHO2dCQUNsQyxLQUFLLEVBQUU7b0JBQ0gsTUFBTSxFQUFFLE9BQU87b0JBQ2YsVUFBVSxFQUFFLE9BQU8sR0FBRyxDQUFDO2lCQUMxQjthQUNKLENBQUM7WUFDRixpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNqQyxPQUFPLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQzthQUNyQyxDQUFDO1lBRUYsbUVBQW1FO1lBQ25FLDZFQUE2RTtZQUM3RSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhGLDBCQUEwQjtZQUMxQixpRkFBaUY7WUFDakYsd0NBQXdDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUUxQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsQ0FBQztLQUVKLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFFakQsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyx1QkFBdUI7SUFDNUIsU0FBUztJQUNULElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDbkUsS0FBSyxFQUFFO2dCQUNILEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTthQUMzQztTQUNKLENBQUMsQ0FBQztRQUFBLENBQUM7S0FDUDtJQUVELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7UUFDdEUsd0NBQXdDO1FBQ3hDLEtBQUssRUFBRTtZQUNILElBQUksRUFBRTtnQkFDRixJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsU0FBUztnQkFDakIsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLEdBQUc7YUFDZDtZQUNELElBQUksRUFBRTtnQkFDRixJQUFJLEVBQUUsU0FBUztnQkFDZixXQUFXLEVBQUUsRUFBRTtnQkFDZixhQUFhLEVBQUUsOEJBQThCO2FBQ2hEO1lBQ0QsVUFBVSxFQUFFO2dCQUNSLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLGFBQWEsRUFBRSxRQUFRO2dCQUN2QixhQUFhLEVBQUUsUUFBUTthQUMxQjtTQUNKO1FBQ0QsT0FBTyxFQUFFLEVBQUU7S0FDZCxFQUFFO1FBQ0MsTUFBTSxFQUFFO1lBQ0osdUJBQXVCO1lBQ3ZCLGlDQUFpQztZQUNqQyx5QkFBeUI7Z0JBQ3JCLENBQUMsQ0FBQyxzSEFBc0g7Z0JBQ3hILENBQUMsQ0FBQyx5QkFBeUI7WUFDL0IsTUFBTTtTQUNULENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUVWLFVBQVUsRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFLElBQUk7WUFFNUIsaUdBQWlHO1lBQ2pHLG9HQUFvRztZQUNwRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO2dCQUNwQyxHQUFHLEVBQUU7b0JBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7aUJBQ3JDO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELGFBQWEsRUFBRSxVQUFVLElBQUksRUFBRSxPQUFPO1lBQ2xDLElBQUkseUJBQXlCLEVBQUU7Z0JBQzNCLHNDQUFzQztnQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDTixVQUFVLEVBQUU7d0JBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztxQkFDekM7aUJBQ0osQ0FBQyxDQUFDO2FBRU47aUJBQU07Z0JBRUgsdUNBQXVDO2dCQUN2QywrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ04sVUFBVSxFQUFFO3dCQUNSLElBQUksRUFBRSxPQUFPO3FCQUNoQjtpQkFDSixDQUFDLENBQUM7YUFDTjtRQUNMLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsb0JBQW9CLEVBQUU7WUFFbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsYUFBYSxFQUFFO1lBRVgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7S0FDSixDQUFDLENBQUM7SUFFSCxJQUFJLG1CQUFtQixHQUFHO1FBRXRCLFVBQVUsRUFBRTtZQUVSLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1lBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxtQkFBbUIsRUFBRSxVQUFVLElBQUksRUFBRSxVQUFVO1lBRTNDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ04sY0FBYyxFQUFFO29CQUNaLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtvQkFDN0Msa0JBQWtCLEVBQUUsVUFBVSxJQUFJLEVBQUU7aUJBQ3ZDO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQztLQUNKLENBQUM7SUFHRixjQUFjO0lBRWQsSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDSix1QkFBdUI7WUFDdkIsOENBQThDO1lBQzlDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLHNIQUFzSCxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7WUFDdkwsMkVBQTJFO1lBQzNFLE1BQU07U0FDVCxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFVixpQkFBaUIsRUFBRSw4RkFBOEY7UUFFakgsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBRWhDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFO2dCQUNGLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxFQUFFO2FBQ2I7WUFDRCxLQUFLLEVBQUU7Z0JBQ0gsbUZBQW1GO2dCQUNuRiwwRUFBMEU7Z0JBQzFFLDhEQUE4RDtnQkFDOUQsb0ZBQW9GO2dCQUNwRixxREFBcUQ7Z0JBQ3JELElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRTtvQkFDTCxLQUFLLEVBQUUsRUFBRTtvQkFDVCxNQUFNLEVBQUUsRUFBRTtvQkFDVixNQUFNLEVBQUUsU0FBUztvQkFDakIsSUFBSSxFQUFFLFNBQVM7aUJBQ2xCO2dCQUNELFFBQVEsRUFBRTtvQkFDTixHQUFHLEVBQUUsT0FBTztvQkFDWixPQUFPLEVBQUUsRUFBRTtvQkFDWCxRQUFRLEVBQUUsQ0FBQztvQkFDWCxJQUFJLEVBQUUsRUFBRTtvQkFDUixhQUFhLEVBQUUsUUFBUTtvQkFDdkIsYUFBYSxFQUFFLFNBQVM7b0JBQ3hCLFdBQVcsRUFBRSxFQUFFO2lCQUNsQjtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDakIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLElBQUksRUFBRSxTQUFTO29CQUNmLEdBQUcsRUFBRSxPQUFPO29CQUNaLFdBQVcsRUFBRSxDQUFDO2lCQUNqQjtnQkFDRCxvQkFBb0IsRUFBRTtvQkFDbEIsYUFBYSxFQUFFLFFBQVE7b0JBQ3ZCLEdBQUcsRUFBRSxrQ0FBa0M7b0JBQ3ZDLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLGFBQWEsRUFBRSxRQUFRO2lCQUMxQjtnQkFDRCxjQUFjLEVBQUU7b0JBQ1osQ0FBQyxFQUFFLHlEQUF5RDtvQkFDNUQsR0FBRyxFQUFFLE9BQU87b0JBQ1osT0FBTyxFQUFFLEdBQUc7b0JBQ1osUUFBUSxFQUFFLENBQUMsRUFBRTtvQkFDYixhQUFhLEVBQUUsUUFBUTtvQkFDdkIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO2lCQUNwQjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1QsS0FBSyxFQUFFO3dCQUNILFNBQVMsRUFBRSxRQUFRO3dCQUNuQixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsU0FBUzt3QkFDckIsUUFBUSxFQUFFLEVBQUU7cUJBQ2Y7aUJBQ0o7YUFDSjtZQUVELFlBQVksRUFBRSxFQUFFO1lBQ2hCLHFCQUFxQixFQUFFLENBQUMsQ0FBQyw4Q0FBOEM7U0FFMUUsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztLQUV0QyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFL0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztJQUU1QyxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRW5DLE1BQU0sRUFBRSwrRkFBK0Y7UUFFdkcsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBRWhDLElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRTtnQkFDRixLQUFLLEVBQUUsRUFBRTtnQkFDVCxNQUFNLEVBQUUsRUFBRTthQUNiO1lBQ0QsS0FBSyxFQUFFO2dCQUNILE9BQU8sRUFBRTtvQkFDTCxNQUFNLEVBQUUsd0NBQXdDO29CQUNoRCxNQUFNLEVBQUUsU0FBUztvQkFDakIsSUFBSSxFQUFFLFNBQVM7aUJBQ2xCO2dCQUNELFFBQVEsRUFBRTtvQkFDTixHQUFHLEVBQUUsT0FBTztvQkFDWixPQUFPLEVBQUUsRUFBRTtvQkFDWCxRQUFRLEVBQUUsQ0FBQztvQkFDWCxJQUFJLEVBQUUsRUFBRTtvQkFDUixhQUFhLEVBQUUsUUFBUTtvQkFDdkIsYUFBYSxFQUFFLFNBQVM7b0JBQ3hCLFdBQVcsRUFBRSxFQUFFO2lCQUNsQjthQUNKO1NBRUosRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0tBQzNDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0Qix5QkFBeUIsRUFBRSxDQUFDO0lBQzVCLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHO0lBQ3ZCLGlCQUFpQjtDQUNwQixDQUFDO0FBRUYsZUFBZSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZhclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xuY29uc3QgaGFzJDIgPSBfLmhhcztcblxuY29uc3Qgc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZCA9IGpvaW50LmVudi50ZXN0KCdzdmdmb3JlaWdub2JqZWN0Jyk7XG5cbmNvbnN0IGlzT2JqZWN0JDEgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xufTtcblxuZnVuY3Rpb24gb3ZlcndyaXRlQ3VzdG9tU2hhcGVBdHRycygpIHtcbiAgICBvdmVyd3JpdGVCUE1OQWN0aXZpdHkoKTtcbiAgICBvdmVyd3JpdGVCUE1ORXZlbnQoKTtcbiAgICBvdmVyd3JpdGVCUE1OR2F0ZXdheSgpO1xuICAgIG92ZXJ3cml0ZUJQTU5EYXRhU3RvcmUoKTtcbiAgICBvdmVyd3JpdGVCUE1ORGF0YU9iamVjdCgpO1xuICAgIG92ZXJ3cml0ZUJQTU5Db252ZXJzYXRpb24oKTtcbiAgICBvdmVyd3JpdGVCUE1OR3JvdXAoKTtcbiAgICBvdmVyd3JpdGVBbm5vdGF0aW9uKCk7XG4gICAgb3ZlcndyaXRlQlBNTlBvb2woKTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQlBNTkFjdGl2aXR5KCkge1xuICAgIGJwbW4yLkFjdGl2aXR5LnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmWTogJzUwJScsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICB0ZXh0VmVydGljYWxBbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICB0ZXh0V3JhcDoge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0FjdGl2aXR5Jyk7XG5cbiAgICBhZGRMYWJlbFBvc2l0aW9uQXR0cmlidXRlKCdBY3Rpdml0eScsXG4gICAgICAgIGZ1bmN0aW9uICh3aWR0aFNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAod2lkdGhTaXplIC8gMikgLSAxMDtcbiAgICAgICAgfVxuICAgICAgICAsIG51bGwpO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1ORXZlbnQoKSB7XG4gICAgYnBtbjIuRXZlbnQucHJvdG90eXBlLmRlZmF1bHRzLmF0dHJzLmxhYmVsID0ge1xuICAgICAgICByZWZEeTogMTAsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICB0ZXh0VmVydGljYWxBbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnRXZlbnQnKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0V2ZW50Jyk7XG5cbiAgICBicG1uMi5FdmVudC5wcm90b3R5cGUubWFya3VwID0gW3tcbiAgICAgICAgdGFnTmFtZTogJ2VsbGlwc2UnLFxuICAgICAgICBzZWxlY3RvcjogJ2JhY2tncm91bmQnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnaW1hZ2UnLFxuICAgICAgICBzZWxlY3RvcjogJ2ljb24nXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAncGF0aCcsXG4gICAgICAgIHNlbGVjdG9yOiAnYm9yZGVyJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGFnTmFtZTogJ3RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsJ1xuICAgIH1dO1xuXG4gICAgYWRkTGFiZWxQb3NpdGlvbkF0dHJpYnV0ZSgnRXZlbnQnLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OR2F0ZXdheSgpIHtcbiAgICBicG1uMi5HYXRld2F5LnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmRHk6IDEwLFxuICAgICAgICByZWZYOiAnNTAlJyxcbiAgICAgICAgdGV4dFZlcnRpY2FsQW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0dhdGV3YXknKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0dhdGV3YXknKTtcblxuICAgIGJwbW4yLkdhdGV3YXkucHJvdG90eXBlLm1hcmt1cCA9IFt7XG4gICAgICAgIHRhZ05hbWU6ICdwb2x5Z29uJyxcbiAgICAgICAgc2VsZWN0b3I6ICdib2R5J1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ2ltYWdlJyxcbiAgICAgICAgc2VsZWN0b3I6ICdpY29uJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0dhdGV3YXknLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1ORGF0YVN0b3JlKCkge1xuICAgIGJwbW4yLkRhdGFTdG9yZS5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHRleHRWZXJ0aWNhbEFuY2hvcjogJ3RvcCcsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICByZWZZOiAnMTAwJScsXG4gICAgICAgIHJlZlkyOiAxMCxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBmaWxsOiAnIzMzMzMzMycsXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnRGF0YVN0b3JlJyk7XG4gICAgYWRkTGFiZWxCYWNrZ3JvdW5kQXR0cmlidXRlKCdEYXRhU3RvcmUnKTtcblxuICAgIGJwbW4yLkRhdGFTdG9yZS5wcm90b3R5cGUubWFya3VwID0gW3tcbiAgICAgICAgdGFnTmFtZTogJ3BhdGgnLFxuICAgICAgICBzZWxlY3RvcjogJ2JvZHknXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnZWxsaXBzZScsXG4gICAgICAgIHNlbGVjdG9yOiAndG9wJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0RhdGFTdG9yZScsIG51bGwsIGZ1bmN0aW9uIChoZWlnaHRTaXplKSB7XG4gICAgICAgIHJldHVybiAoLSBoZWlnaHRTaXplIC8gMikudG9TdHJpbmcoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQlBNTkRhdGFPYmplY3QoKSB7XG4gICAgYnBtbjIuRGF0YU9iamVjdC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZlk6ICcxMDAlJyxcbiAgICAgICAgcmVmWTI6IDEwLFxuICAgICAgICByZWZYOiAnNTAlJyxcbiAgICAgICAgdGV4dFZlcnRpY2FsQW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICBsYWJlbFBvc2l0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGFkZFRleHRBdHRyaWJ1dGUoJ0RhdGFPYmplY3QnKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0RhdGFPYmplY3QnKTtcblxuICAgIGJwbW4yLkRhdGFPYmplY3QucHJvdG90eXBlLm1hcmt1cCA9IFt7XG4gICAgICAgIHRhZ05hbWU6ICdwYXRoJyxcbiAgICAgICAgc2VsZWN0b3I6ICdib2R5J1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ3JlY3QnLFxuICAgICAgICBzZWxlY3RvcjogJ2xhYmVsQmFja2dyb3VuZCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbCdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICdpbWFnZScsXG4gICAgICAgIHNlbGVjdG9yOiAnZGF0YVR5cGVJY29uJ1xuICAgIH0sIHtcbiAgICAgICAgdGFnTmFtZTogJ2ltYWdlJyxcbiAgICAgICAgc2VsZWN0b3I6ICdjb2xsZWN0aW9uSWNvbidcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0RhdGFPYmplY3QnLCBudWxsLCBmdW5jdGlvbiAoaGVpZ2h0U2l6ZSkge1xuICAgICAgICByZXR1cm4gKC0gKGhlaWdodFNpemUgKyAyMCkgLyAyKS50b1N0cmluZygpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OQ29udmVyc2F0aW9uKCkge1xuICAgIGJwbW4yLkNvbnZlcnNhdGlvbi5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZkR5OiAxMCxcbiAgICAgICAgcmVmWDogJzUwJScsXG4gICAgICAgIHRleHRWZXJ0aWNhbEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICAgICAgbGFiZWxQb3NpdGlvbjogdHJ1ZVxuICAgIH07XG5cbiAgICBhZGRUZXh0QXR0cmlidXRlKCdDb252ZXJzYXRpb24nKTtcbiAgICBhZGRMYWJlbEJhY2tncm91bmRBdHRyaWJ1dGUoJ0NvbnZlcnNhdGlvbicpO1xuXG4gICAgYnBtbjIuQ29udmVyc2F0aW9uLnByb3RvdHlwZS5tYXJrdXAgPSBbe1xuICAgICAgICB0YWdOYW1lOiAncG9seWdvbicsXG4gICAgICAgIHNlbGVjdG9yOiAnYm9keSdcbiAgICB9LCB7XG4gICAgICAgIHRhZ05hbWU6ICdyZWN0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdsYWJlbEJhY2tncm91bmQnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAndGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnbGFiZWwnXG4gICAgfSwge1xuICAgICAgICB0YWdOYW1lOiAnZycsXG4gICAgICAgIHNlbGVjdG9yOiAnbWFya2VycydcbiAgICB9XTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0NvbnZlcnNhdGlvbicsIG51bGwsIGZ1bmN0aW9uIChoZWlnaHRTaXplKSB7XG4gICAgICAgIHJldHVybiAoLSAoaGVpZ2h0U2l6ZSArIDIwKSAvIDIpLnRvU3RyaW5nKCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG92ZXJ3cml0ZUJQTU5Hcm91cCgpIHtcbiAgICBicG1uMi5Hcm91cC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWwgPSB7XG4gICAgICAgIHJlZlk6IDYsXG4gICAgICAgIHJlZlg6ICc1MCUnLFxuICAgICAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgIHRleHRXcmFwOiB7XG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsUG9zaXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgYWRkVGV4dEF0dHJpYnV0ZSgnR3JvdXAnKTtcblxuICAgIGFkZExhYmVsUG9zaXRpb25BdHRyaWJ1dGUoJ0dyb3VwJyxcbiAgICAgICAgZnVuY3Rpb24gKHdpZHRoU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh3aWR0aFNpemUgLyAyKSAtIDEwO1xuICAgICAgICB9LFxuICAgICAgICBudWxsXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlQW5ub3RhdGlvbigpIHtcbiAgICBicG1uMi5Bbm5vdGF0aW9uLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYWJlbCA9IHtcbiAgICAgICAgcmVmWTogNixcbiAgICAgICAgcmVmWDogNCxcbiAgICAgICAgdGV4dEFuY2hvcjogJ3N0YXJ0JyxcbiAgICAgICAgZm9udEZhbWlseTogJ0NhbGlicmknLFxuICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgIHRleHRXcmFwOiB7XG4gICAgICAgICAgICB3aWR0aDogLTEyLFxuICAgICAgICAgICAgaGVpZ2h0OiAtMTIsXG4gICAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWxQb3NpdGlvbjogdHJ1ZVxuICAgIH07XG5cbiAgICBicG1uMi5Bbm5vdGF0aW9uLmF0dHJpYnV0ZXNbJ2xhYmVsLXBvc2l0aW9uJ10gPSB7XG4gICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbiAoXywgcmVmQkJveCwgbm9kZSkge1xuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgbW9kZWwgPSByZWYubW9kZWw7XG4gICAgICAgICAgICB2YXIgd2lkdGhTaXplID0gbW9kZWwuYXR0cmlidXRlcy5zaXplLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhhbGZTaXplID0gd2lkdGhTaXplIC8gMjtcbiAgICAgICAgICAgIHZhciByZWZYID0gMDtcbiAgICAgICAgICAgIHZhciByZWZZID0gNjtcbiAgICAgICAgICAgIGlmIChtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0LWFuY2hvciddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZYID0gd2lkdGhTaXplIC0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmWCA9IGhhbGZTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlggPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZYID0gd2lkdGhTaXplIC0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgKGpvaW50LmcuUG9pbnQgYXMgYW55KShyZWZYLCByZWZZKTtcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5nLlBvaW50KHJlZlgsIHJlZlkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVCUE1OUG9vbCgpIHtcbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5kZWZhdWx0cy5hdHRycy5sYW5lTGFiZWxzLmZvbnRGYW1pbHkgPSAnQ2FsaWJyaSc7XG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubWlsZXN0b25lTGFiZWxzLmZvbnRGYW1pbHkgPSAnQ2FsaWJyaSc7XG5cblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmJ1aWxkTWFya3VwID0gZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXBlcy5icG1uMi5Qb29sOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1hcmt1cCA9IGpvaW50LnV0aWwuY2xvbmVEZWVwKHRoaXMubWFya3VwKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1hcmt1cCkpIGVycm9yKCdFeHBlY3RzIFByb3RvdHlwZSBKU09OIE1hcmt1cC4nKTtcblxuICAgICAgICAvLyBRTVMtMzU3MjogQ3VzdG9taXphdGlvblxuICAgICAgICBpZiAob3B0ICYmIG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aC5pbmNsdWRlcygnbGFuZXMnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyAmJiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubGFuZXMgJiYgdGhpcy5hdHRyaWJ1dGVzICYmIHRoaXMuYXR0cmlidXRlcy5sYW5lcyAmJiBvcHQgJiYgb3B0LnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVbmRlZmluZWRTaXplKCdsYW5lcycsIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgJiYgdGhpcy5pc1VuZGVmaW5lZFNpemUoJ2xhbmVzJywgdGhpcy5hdHRyaWJ1dGVzKSAmJiB0aGlzLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID09PSB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0TGFuZVNpemUodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0ICYmIG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aC5pbmNsdWRlcygnbWlsZXN0b25lcycpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzICYmIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcy5taWxlc3RvbmVzICYmIHRoaXMuYXR0cmlidXRlcyAmJiB0aGlzLmF0dHJpYnV0ZXMubWlsZXN0b25lcyAmJiBvcHQgJiYgb3B0LnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVbmRlZmluZWRTaXplKCdtaWxlc3RvbmVzJywgdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKSAmJiB0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbWlsZXN0b25lcycsIHRoaXMuYXR0cmlidXRlcykgJiYgdGhpcy5hdHRyaWJ1dGVzLm1pbGVzdG9uZXMubGVuZ3RoID09PSB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0TWlsZXN0b25lU2l6ZSh0aGlzLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhbmVzID0gdGhpcy5hdHRyaWJ1dGVzLmxhbmVzIHx8IFt7fV07XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYW5lcykpIGVycm9yKCdFeHBlY3RzIGxhbmVzIHRvIGJlIGFuIGFycmF5LicpO1xuICAgICAgICBjb25zdCBtaWxlc3RvbmVzID0gdGhpcy5hdHRyaWJ1dGVzLm1pbGVzdG9uZXMgfHwgW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtaWxlc3RvbmVzKSkgZXJyb3IoJ0V4cGVjdHMgbWlsZXN0b25lcyB0byBiZSBhbiBhcnJheS4nKTtcbiAgICAgICAgY29uc3QgbWV0cmljczogYW55ID0gdGhpcy5tZXRyaWNzID0ge307XG4gICAgICAgIG1ldHJpY3MubGFuZXMgPSB7fTtcbiAgICAgICAgbWV0cmljcy5sYW5lc05hbWVDYWNoZSA9IHt9O1xuICAgICAgICBtZXRyaWNzLm1pbGVzdG9uZXNOYW1lQ2FjaGUgPSB7fTtcbiAgICAgICAgbWV0cmljcy5taWxlc3RvbmVzID0ge307XG4gICAgICAgIG1ldHJpY3MudG90YWxUYWtlbkhlaWdodFNwYWNlID0gMDtcbiAgICAgICAgbWV0cmljcy50b3BMYW5lR3JvdXBzQ291bnQgPSBsYW5lcy5sZW5ndGg7XG4gICAgICAgIG1ldHJpY3MucGFkZGluZyA9IGpvaW50LnV0aWwubm9ybWFsaXplU2lkZXModGhpcy5hdHRyaWJ1dGVzLnBhZGRpbmcpO1xuICAgICAgICB0aGlzLmJ1aWxkTGFuZXNNYXJrdXBSZWN1cnNpdmVseShsYW5lcywgbWFya3VwLCBudWxsLCAxLCAwKTtcbiAgICAgICAgdGhpcy5idWlsZE1pbGVzdG9uZXMobWlsZXN0b25lcywgbWFya3VwKTtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBqb2ludC51dGlsLmFzc2lnbih7XG4gICAgICAgICAgICBwb29sOiB0aGlzLmlkLFxuICAgICAgICAgICAgZHJ5OiB0cnVlXG4gICAgICAgIH0sIG9wdCk7XG4gICAgICAgIHRoaXMuc2V0KCdtYXJrdXAnLCBtYXJrdXAsIGZsYWdzKTtcbiAgICAgICAgaWYgKGZsYWdzLmF1dG9SZXNpemUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9yZXNpemUoZmxhZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmlzVW5kZWZpbmVkU2l6ZSA9IGZ1bmN0aW9uICh0eXBlLCBhdHRyaWJ1dGVzLCBsYW5lSWQpIHtcbiAgICAgICAgbGV0IGJSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdsYW5lcyc6XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYlJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N1YmxhbmVzJzpcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDAgJiYgbGFuZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYW5lICYmIGxhbmUuc3VibGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUuc3VibGFuZXMuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWlsZXN0b25lcyc6XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5taWxlc3RvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5taWxlc3RvbmVzLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJSZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiUmVzdWx0O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRUb3RhbExhbmVIZWlnaHQgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGUuc2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfTtcbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRUb3RhbFN1YkxhbmVIZWlnaHQgPSBmdW5jdGlvbiAobGFuZUlkLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGlmIChsYW5lSWQgJiYgYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgICAgICBpZiAobGFuZSAmJiBsYW5lLnN1YmxhbmVzKSB7XG4gICAgICAgICAgICAgICAgbGFuZS5zdWJsYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmdldFRvdGFsTWlsZXN0b25lc1dpZHRoID0gZnVuY3Rpb24gKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5taWxlc3RvbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gZS5zaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuZ2V0TGFuZUhlaWdodEJ5SWQgPSBmdW5jdGlvbiAobGFuZUlkLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCBsYW5lU2l6ZSA9IDA7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGxhbmVJZCkge1xuICAgICAgICAgICAgbGFuZVNpemUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc2l6ZSA/IGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zaXplIDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFuZVNpemU7XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLmdldE1heExhbmVIZWlnaHQgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgaWYgKGwuc2l6ZSAmJiBsLnNpemUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBtYXggPSBsLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5zZXREZWZhdWx0TGFuZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZ2V0TWF4TGFuZUhlaWdodChhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiYgIWZsYWdzLnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5wcm9wZXJ0eVZhbHVlID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc2l6ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRNYXhTdWJMYW5lSGVpZ2h0ID0gZnVuY3Rpb24gKGF0dHJpYnV0ZXMsIGxhbmVJZCkge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgY29uc3QgbGFuZSA9IGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXTtcbiAgICAgICAgbGFuZS5zdWJsYW5lcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgaWYgKHMuc2l6ZSAmJiBzLnNpemUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBtYXggPSBzLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5zZXREZWZhdWx0U3ViTGFuZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgbGFuZUlkLCBmbGFncykge1xuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gdGhpcy5nZXRNYXhTdWJMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMsIGxhbmVJZCk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGZsYWdzICYmICFmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MucHJvcGVydHlWYWx1ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zdWJsYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc2l6ZSA9IG1heEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRNYXhNaWxlc3RvbmVXaWR0aCA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICBhdHRyaWJ1dGVzLm1pbGVzdG9uZXMuZm9yRWFjaChtID0+IHtcbiAgICAgICAgICAgIGlmIChtLnNpemUgJiYgbS5zaXplID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gbS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuc2V0RGVmYXVsdE1pbGVzdG9uZVNpemUgPSBmdW5jdGlvbiAoYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IHRoaXMuZ2V0TWF4TWlsZXN0b25lV2lkdGgoYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiYgIWZsYWdzLnByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5wcm9wZXJ0eVZhbHVlID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlcy5taWxlc3RvbmVzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5zaXplID0gbWF4SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wucHJvdG90eXBlLnJlQnVpbGRMYW5lcyA9IGZ1bmN0aW9uIChtaW5TaXplLCBjdXJyZW50U2l6ZSwgYXR0cmlidXRlcywgZmxhZ3MpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIGFsbCBsYW5lIGhhcyB2YWx1ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCBhdHRyaWJ1dGVzKSAmJiBmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBtYXhIZWlnaHQsIGZsYWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYWxsIGxhbmUgaGFzIHZhbHVlIGFuZCBhZGQgbmV3IGxhbmVcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExhbmVTaXplKGF0dHJpYnV0ZXMsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmdldFRvdGFsTGFuZUhlaWdodChhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIG1heEhlaWdodCwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGRvZXNudCBoYXZlIHZhbHVlXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUucmVCdWlsZFN1YkxhbmVzID0gZnVuY3Rpb24gKG1pblNpemUsIGN1cnJlbnRTaXplLCBhdHRyaWJ1dGVzLCBmbGFncykge1xuICAgICAgICBpZiAoIWZsYWdzICYmIGZsYWdzLnByb3BlcnR5UGF0aEFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFuZUlkID0gZmxhZ3MucHJvcGVydHlQYXRoQXJyYXlbMV07XG4gICAgICAgIGNvbnN0IGxhbmUgPSBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF07XG4gICAgICAgIGlmICghbGFuZS5zdWJsYW5lcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGxhbmVJZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnc3VibGFuZXMnLCBhdHRyaWJ1dGVzLCBsYW5lSWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFuZUhlaWdodCA9IHRoaXMuZ2V0TGFuZUhlaWdodEJ5SWQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJMYW5lSGVpZ2h0ID0gdGhpcy5nZXRUb3RhbFN1YkxhbmVIZWlnaHQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViTGFuZUhlaWdodCAhPT0gbGFuZUhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc2l6ZSA9IHN1YkxhbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoJ2xhbmVzJywgYXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoTWF0aC5tYXgobWluU2l6ZS53aWR0aCwgY3VycmVudFNpemUud2lkdGgpLCBtYXhIZWlnaHQsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNVbmRlZmluZWRTaXplKCdzdWJsYW5lcycsIGF0dHJpYnV0ZXMsIGxhbmVJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYW5lSGVpZ2h0ID0gdGhpcy5nZXRMYW5lSGVpZ2h0QnlJZChsYW5lSWQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBzdWJMYW5lSGVpZ2h0ID0gdGhpcy5nZXRUb3RhbFN1YkxhbmVIZWlnaHQobGFuZUlkLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobGFuZUhlaWdodCA9PT0gc3ViTGFuZUhlaWdodCAmJiBsYW5lSGVpZ2h0ICE9PSAwICYmIHN1YkxhbmVIZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3ViTGFuZVNpemUoYXR0cmlidXRlcywgbGFuZUlkLCBmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgIHN1YkxhbmVIZWlnaHQgPSB0aGlzLmdldFRvdGFsU3ViTGFuZUhlaWdodChsYW5lSWQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTGFuZUhlaWdodCAhPT0gbGFuZUhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnNpemUgPSBzdWJMYW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZSgnbGFuZXMnLCBhdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKE1hdGgubWF4KG1pblNpemUud2lkdGgsIGN1cnJlbnRTaXplLndpZHRoKSwgbWF4SGVpZ2h0LCBmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUucmVCdWlsZE1pbGVzdG9uZXMgPSBmdW5jdGlvbiAobWluU2l6ZSwgY3VycmVudFNpemUsIGF0dHJpYnV0ZXMsIGZsYWdzKSB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBhbGwgbGFuZSBoYXMgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoJ21pbGVzdG9uZXMnLCBhdHRyaWJ1dGVzKSAmJiBmbGFncy5wcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1heFdpZHRoID0gdGhpcy5nZXRUb3RhbE1pbGVzdG9uZXNXaWR0aChhdHRyaWJ1dGVzKSArIGF0dHJpYnV0ZXMucGFkZGluZy5sZWZ0O1xuICAgICAgICAgICAgICAgIG1heFdpZHRoID0gbWF4V2lkdGggPiBhdHRyaWJ1dGVzLnBhZGRpbmcubGVmdCA/IG1heFdpZHRoIDogdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzLnNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUobWF4V2lkdGgsIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2FsbCBsYW5lIGhhcyB2YWx1ZSBhbmQgYWRkIG5ldyBsYW5lXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcyAmJiAhdGhpcy5pc1VuZGVmaW5lZFNpemUoJ21pbGVzdG9uZXMnLCB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpICYmIGF0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggPiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMubWlsZXN0b25lcy5sZW5ndGggJiYgZmxhZ3MucHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdE1pbGVzdG9uZVNpemUoYXR0cmlidXRlcywgZmxhZ3MpO1xuICAgICAgICAgICAgICAgIGxldCBtYXhXaWR0aCA9IHRoaXMuZ2V0VG90YWxNaWxlc3RvbmVzV2lkdGgoYXR0cmlidXRlcykgKyBhdHRyaWJ1dGVzLnBhZGRpbmcubGVmdDtcbiAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IG1heFdpZHRoID4gYXR0cmlidXRlcy5wYWRkaW5nLmxlZnQgPyBtYXhXaWR0aCA6IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcy5zaXplLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKG1heFdpZHRoLCBNYXRoLm1heChtaW5TaXplLmhlaWdodCwgY3VycmVudFNpemUuaGVpZ2h0KSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGRvZXNudCBoYXZlIHZhbHVlXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZShNYXRoLm1heChtaW5TaXplLndpZHRoLCBjdXJyZW50U2l6ZS53aWR0aCksIE1hdGgubWF4KG1pblNpemUuaGVpZ2h0LCBjdXJyZW50U2l6ZS5oZWlnaHQpLCBmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYnBtbjIuUG9vbC5wcm90b3R5cGUuYXV0b3Jlc2l6ZSA9IGZ1bmN0aW9uIChmbGFncykge1xuICAgICAgICB2YXIgbWluU2l6ZSA9IHRoaXMuZ2V0TWluaW1hbFNpemUoKTtcbiAgICAgICAgdmFyIGN1cnJlbnRTaXplID0gdGhpcy5hdHRyaWJ1dGVzLnNpemU7XG4gICAgICAgIC8vUU1TLTM1NzI6IGN1c3RvbWl6YXRpb25cbiAgICAgICAgaWYgKGZsYWdzLnByb3BlcnR5UGF0aCkge1xuICAgICAgICAgICAgaWYgKGZsYWdzLnByb3BlcnR5UGF0aC5pbmNsdWRlcygnc3VibGFuZXMnKSAmJiAhZmxhZ3MucHJvcGVydHlQYXRoLmluY2x1ZGVzKCdsYWJlbCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZUJ1aWxkU3ViTGFuZXMobWluU2l6ZSwgY3VycmVudFNpemUsIHRoaXMuYXR0cmlidXRlcywgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MucHJvcGVydHlQYXRoLmluY2x1ZGVzKCdsYW5lcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZUJ1aWxkTGFuZXMobWluU2l6ZSwgY3VycmVudFNpemUsIHRoaXMuYXR0cmlidXRlcywgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MucHJvcGVydHlQYXRoLmluY2x1ZGVzKCdtaWxlc3RvbmVzJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlQnVpbGRNaWxlc3RvbmVzKG1pblNpemUsIGN1cnJlbnRTaXplLCB0aGlzLmF0dHJpYnV0ZXMsIGZsYWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKE1hdGgubWF4KG1pblNpemUud2lkdGgsIGN1cnJlbnRTaXplLndpZHRoKSwgTWF0aC5tYXgobWluU2l6ZS5oZWlnaHQsIGN1cnJlbnRTaXplLmhlaWdodCksIGZsYWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplKE1hdGgubWF4KG1pblNpemUud2lkdGgsIGN1cnJlbnRTaXplLndpZHRoKSwgTWF0aC5tYXgobWluU2l6ZS5oZWlnaHQsIGN1cnJlbnRTaXplLmhlaWdodCksIGZsYWdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBicG1uMi5Qb29sLnByb3RvdHlwZS5nZXRNaWxlc3RvbmVIZWlnaHQgPSBmdW5jdGlvbiAobWlsZXN0b25lR3JvdXBJZCkge1xuICAgICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgICAgdmFyIG1ldHJpY3MgPSByZWYubWV0cmljcztcbiAgICAgICAgdmFyIG1pbGVzdG9uZUNhY2hlID0gbWV0cmljcy5taWxlc3RvbmVzW21pbGVzdG9uZUdyb3VwSWRdO1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGVzdG9uZUNhY2hlLm1pbGVzdG9uZXNTaXplKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1pbGVzdG9uZUNhY2hlLm1pbGVzdG9uZXNTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wuYXR0cmlidXRlc1snbGFuZS1sYWJlbCddID0ge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcHQsIHJlZkJCb3gsIG5vZGUsIGF0dHJzKSB7XG4gICAgICAgICAgICBpZiAoIWpvaW50LnV0aWwuaXNQbGFpbk9iamVjdChvcHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgbGFuZUdyb3VwSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnbGFuZS1ncm91cC1pZCcpO1xuICAgICAgICAgICAgY29uc3QgbGFuZUdyb3VwQ2FjaGUgPSBtb2RlbC5tZXRyaWNzLmxhbmVzW2xhbmVHcm91cElkXTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGxhbmVHcm91cENhY2hlLmhlYWRlclNpemU7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IG1vZGVsLmdldExhbmVIZWlnaHQobGFuZUdyb3VwSWQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGxhbmVHcm91cENhY2hlLmxhYmVsO1xuICAgICAgICAgICAgcmV0dXJuIGxhYmVsVGV4dFdyYXAodGhpcywgbGFuZUdyb3VwSWQsIG9wdCwgbm9kZSwgYXR0cnMsIHdpZHRoLCBoZWlnaHQsIHRleHQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wuYXR0cmlidXRlc1snbGFiZWwtcG9zaXRpb24nXSA9IHtcbiAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uIChfLCByZWZCQm94LCBub2RlLCBhdHRycykge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGxhbmVHcm91cElkID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmUtZ3JvdXAtaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGxhbmVHcm91cENhY2hlID0gbW9kZWwubWV0cmljcy5sYW5lc1tsYW5lR3JvdXBJZF07XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGxhbmVHcm91cENhY2hlLmhlYWRlclNpemU7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBtb2RlbC5nZXRMYW5lSGVpZ2h0KGxhbmVHcm91cElkKTtcblxuICAgICAgICAgICAgY29uc3QgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgICAgICAgICBjb25zdCBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICAgICAgICAvLyBRTVMtMzU3MjogY3VzdG9taXphdGlvblxuICAgICAgICAgICAgaWYgKG1vZGVsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBsYW5lTGFiZWxBbmNob3IgPSBtb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ3RleHQtYW5jaG9yJ107XG4gICAgICAgICAgICAgICAgaWYgKGxhbmVMYWJlbEFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhbmVMYWJlbEFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBoYWxmV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBoYWxmV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGhhbGZIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGhhbGZXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGVpZ2h0IC0gOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGhhbGZXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGFsZkhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBoYWxmV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBoYWxmSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLlBvb2wuYXR0cmlidXRlc1snbWlsZXN0b25lLWxhYmVsJ10gPSB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG9wdCwgXywgbm9kZSwgYXR0cnMpIHtcbiAgICAgICAgICAgIGlmICgham9pbnQudXRpbC5pc1BsYWluT2JqZWN0KG9wdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBtb2RlbFxuICAgICAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBtaWxlc3RvbmVMYWJlbElkID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ21pbGVzdG9uZS1ncm91cC1pZCcpO1xuICAgICAgICAgICAgY29uc3QgbWlsZXN0b25lTGFiZWxDYWNoZSA9IG1vZGVsLm1ldHJpY3MubWlsZXN0b25lc1ttaWxlc3RvbmVMYWJlbElkXTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gbW9kZWwuZ2V0TWlsZXN0b25lV2lkdGgobWlsZXN0b25lTGFiZWxJZCk7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBtb2RlbC5hdHRyaWJ1dGVzLm1pbGVzdG9uZXNTaXplO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG1pbGVzdG9uZUxhYmVsQ2FjaGUubGFiZWw7XG4gICAgICAgICAgICByZXR1cm4gbGFiZWxUZXh0V3JhcCh0aGlzLCBudWxsLCBvcHQsIG5vZGUsIGF0dHJzLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJwbW4yLlBvb2wuYXR0cmlidXRlc1snbWlsZXN0b25lLWxhYmVsLXBvc2l0aW9uJ10gPSB7XG4gICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbiAoXywgcmVmQkJveCwgbm9kZSwgYXR0cnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBtb2RlbFxuICAgICAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBtaWxlc3RvbmVHcm91cElkID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ21pbGVzdG9uZS1ncm91cC1pZCcpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBtb2RlbC5nZXRNaWxlc3RvbmVXaWR0aChtaWxlc3RvbmVHcm91cElkKTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IG1vZGVsLmF0dHJpYnV0ZXMubWlsZXN0b25lc1NpemU7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gICAgICAgICAgICB2YXIgcmlnaHRQYWRkaW5nID0gbW9kZWwuYXR0cmlidXRlcy5taWxlc3RvbmVMYWJlbFJpZ2h0UGFkZGluZztcbiAgICAgICAgICAgIGlmIChtb2RlbC5hdHRyaWJ1dGVzLm1pbGVzdG9uZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlsZXN0b25lTGFiZWxzQW5jaG9yID0gbW9kZWwuYXR0cmlidXRlcy5hdHRycy5taWxlc3RvbmVMYWJlbHNbJ3RleHQtYW5jaG9yJ107XG4gICAgICAgICAgICAgICAgaWYgKG1pbGVzdG9uZUxhYmVsc0FuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1pbGVzdG9uZUxhYmVsc0FuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB3aWR0aCAtIHJpZ2h0UGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGFsZkhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHdpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaGFsZkhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogcmlnaHRQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBoYWxmSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogd2lkdGggLSByaWdodFBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGhhbGZIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJwbW4yLkhlYWRlcmVkUG9vbC5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMuaGVhZGVyTGFiZWwuZm9udEZhbWlseSA9ICdDYWxpYnJpJztcbn1cblxuXG5mdW5jdGlvbiBhZGRUZXh0QXR0cmlidXRlKGtleTogYW55KSB7XG4gICAgYnBtbjJba2V5XS5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMudGV4dCA9IHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHRleHRBbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgICAgICAgICBmb250RmFtaWx5OiAnQ2FsaWJyaScsXG4gICAgICAgICAgICBmb250U2l6ZTogMTJcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkTGFiZWxCYWNrZ3JvdW5kQXR0cmlidXRlKGtleTogYW55KSB7XG4gICAgYnBtbjJba2V5XS5wcm90b3R5cGUuZGVmYXVsdHMuYXR0cnMubGFiZWxCYWNrZ3JvdW5kID0ge1xuICAgICAgICByZWY6ICdsYWJlbCcsXG4gICAgICAgIGZpbGw6ICcjZmZmJyxcbiAgICAgICAgcng6IDMsXG4gICAgICAgIHJ5OiAzLFxuICAgICAgICByZWZXaWR0aDogMSxcbiAgICAgICAgcmVmSGVpZ2h0OiAxLFxuICAgICAgICByZWZYOiAwLFxuICAgICAgICByZWZZOiAwXG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRMYWJlbFBvc2l0aW9uQXR0cmlidXRlKGtleTogYW55LCBoYWxmU2lkZT86IChyZXN1bHQ/OiBhbnkpID0+IG51bWJlciwgdGV4dEluc2lkZUNhbGM/OiAocmVzdWx0PzogYW55KSA9PiBzdHJpbmcpIHtcbiAgICBicG1uMltrZXldLmF0dHJpYnV0ZXNbJ2xhYmVsLXBvc2l0aW9uJ10gPSB7XG4gICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbiAoXywgcmVmQkJveCwgbm9kZSkge1xuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgbW9kZWwgPSByZWYubW9kZWw7XG4gICAgICAgICAgICB2YXIgd2lkdGhTaXplID0gbW9kZWwuYXR0cmlidXRlcy5zaXplLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodFNpemUgPSBtb2RlbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIGhhbGZTaXplID0gaGFsZlNpZGUgPyBoYWxmU2lkZSh3aWR0aFNpemUpIDogd2lkdGhTaXplIC8gMjtcbiAgICAgICAgICAgIHZhciByZWZYID0gMDtcbiAgICAgICAgICAgIHZhciByZWZZID0gJzUwJSc7XG4gICAgICAgICAgICBpZiAobW9kZWwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRJbnNpZGVDYWxjKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlkgPSB0ZXh0SW5zaWRlQ2FsYyhoZWlnaHRTaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWZZID0gJzUwJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZlggPSBzZXRYUG90aXRpb25UZXh0QWxpZ24obW9kZWwsIHJlZlgsIGhhbGZTaXplKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBqb2ludC5nLlBvaW50KHJlZlgsIHJlZlkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRYUG90aXRpb25UZXh0QWxpZ24obW9kZWw6IGFueSwgcmVmWDogYW55LCBoYWxmU2l6ZTogYW55KSB7XG4gICAgaWYgKG1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1hbmNob3InXSkge1xuICAgICAgICBzd2l0Y2ggKG1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1hbmNob3InXSkge1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICByZWZYID0gaGFsZlNpemU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgICAgIHJlZlggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgIHJlZlggPSAtIGhhbGZTaXplO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZWZYID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZYO1xufVxuXG5mdW5jdGlvbiBsYWJlbFRleHRXcmFwKGVsZW1lbnRWaWV3LCBsYW5lR3JvdXBJZCwgb3B0LCBub2RlLCBhdHRycywgd2lkdGgsIGhlaWdodCwgdGV4dCkge1xuICAgIGNvbnN0IGF0dHJzQ29weSA9IGpvaW50LnV0aWwuY2xvbmUoYXR0cnMpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfSA9IGpvaW50LnV0aWwubm9ybWFsaXplU2lkZXMoYXR0cnNbJ2xhYmVsLW1hcmdpbiddKTtcbiAgICBjb25zdCBiYm94ID0gam9pbnQuZy5SZWN0KGxlZnQsIHRvcCwgd2lkdGggLSBsZWZ0IC0gcmlnaHQsIGhlaWdodCAtIHRvcCAtIGJvdHRvbSk7XG4gICAgbGV0IHRleHRBdHRyaWJ1dGU7XG4gICAgbGV0IHRleHRWYWx1ZTtcbiAgICBpZiAob3B0LnRleHRXcmFwKSB7XG4gICAgICAgIHRleHRBdHRyaWJ1dGUgPSAndGV4dC13cmFwJztcbiAgICAgICAgdGV4dFZhbHVlID0ge1xuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIGVsbGlwc2lzOiBvcHQuZWxsaXBzaXNcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0QXR0cmlidXRlID0gJ3RleHQnO1xuICAgICAgICB0ZXh0VmFsdWUgPSB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChsYW5lR3JvdXBJZCkge1xuICAgICAgICAvLyBRTVMtNDk2OTogSW1wbGVtZW50IFN1cHBvcnQgZGlmZmVyZW50IGZvbnQgc2l6ZSBmb3IgbGFuZSBoZWFkZXJcbiAgICAgICAgLy8gQ2FzZSAxOiBDaGFuZ2UgY29tbW9uIGZvbnQtZmFtaWx5IGFuZCBmb250LXNpemVcbiAgICAgICAgbGV0IHByZUNvbW1vbkZvbnRTaXplID0gZWxlbWVudFZpZXcubW9kZWwuX3ByZXZpb3VzQXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250U2l6ZSddO1xuICAgICAgICBsZXQgcHJlQ29tbW9uRm9udEZhbWlseSA9IGVsZW1lbnRWaWV3Lm1vZGVsLl9wcmV2aW91c0F0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udEZhbWlseSddO1xuICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuX3ByZXZpb3VzQXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250LXNpemUnXSkge1xuICAgICAgICAgICAgcHJlQ29tbW9uRm9udFNpemUgPSBlbGVtZW50Vmlldy5tb2RlbC5fcHJldmlvdXNBdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnQtc2l6ZSddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Vmlldy5tb2RlbC5fcHJldmlvdXNBdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnQtZmFtaWx5J10pIHtcbiAgICAgICAgICAgIHByZUNvbW1vbkZvbnRGYW1pbHkgPSBlbGVtZW50Vmlldy5tb2RlbC5fcHJldmlvdXNBdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnQtZmFtaWx5J107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VyQ29tbW9uRm9udFNpemUgPSBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnRTaXplJ107XG4gICAgICAgIGxldCBjdXJDb21tb25Gb250RmFtaWx5ID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5hdHRycy5sYW5lTGFiZWxzWydmb250RmFtaWx5J107XG4gICAgICAgIGlmIChlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmF0dHJzLmxhbmVMYWJlbHNbJ2ZvbnQtc2l6ZSddKSB7XG4gICAgICAgICAgICBjdXJDb21tb25Gb250U2l6ZSA9IGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1zaXplJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1mYW1pbHknXSkge1xuICAgICAgICAgICAgY3VyQ29tbW9uRm9udEZhbWlseSA9IGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuYXR0cnMubGFuZUxhYmVsc1snZm9udC1mYW1pbHknXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVDb21tb25Gb250U2l6ZSAhPT0gY3VyQ29tbW9uRm9udFNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgICAgICBlWydmb250LXNpemUnXSA9IGN1ckNvbW1vbkZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGlmIChlLnN1YmxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3VibGFuZXMuZm9yRWFjaChzZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZVsnZm9udC1zaXplJ10gPSBjdXJDb21tb25Gb250U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlQ29tbW9uRm9udEZhbWlseSAhPT0gY3VyQ29tbW9uRm9udEZhbWlseSkge1xuICAgICAgICAgICAgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGVbJ2ZvbnQtZmFtaWx5J10gPSBjdXJDb21tb25Gb250RmFtaWx5O1xuICAgICAgICAgICAgICAgIGlmIChlLnN1YmxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3VibGFuZXMuZm9yRWFjaChzZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZVsnZm9udC1mYW1pbHknXSA9IGN1ckNvbW1vbkZvbnRGYW1pbHk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FzZSAyOiBDaGFuZ2UgbGFuZSBhbmQgc3VibGFuZSBmb250LWZhbWlseSBhbmQgZm9udC1zaXplXG4gICAgICAgIGxldCBmb250U2l6ZSA9IGF0dHJzWydmb250LXNpemUnXSA/IGF0dHJzWydmb250LXNpemUnXSA6IGF0dHJzWydmb250U2l6ZSddO1xuICAgICAgICBsZXQgZm9udEZhbWlseSA9IGF0dHJzWydmb250LWZhbWlseSddID8gYXR0cnNbJ2ZvbnQtZmFtaWx5J10gOiBhdHRyc1snZm9udEZhbWlseSddO1xuICAgICAgICBpZiAoIWZvbnRTaXplKSB7XG4gICAgICAgICAgICBmb250U2l6ZSA9ICcxNCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb250RmFtaWx5KSB7XG4gICAgICAgICAgICBmb250RmFtaWx5ID0gJ0NhbGlicmknO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhbmVBcnJheSA9IGxhbmVHcm91cElkLnNwbGl0KCdfJyk7XG4gICAgICAgIGxldCBsYW5lSWQgPSAwO1xuICAgICAgICBsZXQgc3ViTGFuZUlkID0gMDtcbiAgICAgICAgaWYgKGxhbmVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGxhbmVJZCA9IGxhbmVBcnJheVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vbGFuZSBoYW5kbGluZ1xuICAgICAgICBpZiAoZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lcyAmJiBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF1bJ2ZvbnQtc2l6ZSddKSB7XG4gICAgICAgICAgICBmb250U2l6ZSA9IGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXVsnZm9udC1zaXplJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXMgJiYgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdWydmb250LWZhbWlseSddKSB7XG4gICAgICAgICAgICBmb250RmFtaWx5ID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdWydmb250LWZhbWlseSddO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ViTGFuIGhhbmRsaW5nXG4gICAgICAgIGlmIChsYW5lQXJyYXkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBsYW5lSWQgPSBsYW5lQXJyYXlbMV07XG4gICAgICAgICAgICBzdWJMYW5lSWQgPSBsYW5lQXJyYXlbMl07XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXMgJiYgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnN1YmxhbmVzICYmIGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXS5zdWJsYW5lc1tzdWJMYW5lSWRdWydmb250LXNpemUnXSkge1xuICAgICAgICAgICAgICAgIGZvbnRTaXplID0gZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnN1YmxhbmVzW3N1YkxhbmVJZF1bJ2ZvbnQtc2l6ZSddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgaWYgKGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXMgJiYgZWxlbWVudFZpZXcubW9kZWwuYXR0cmlidXRlcy5sYW5lc1tsYW5lSWRdLnN1YmxhbmVzICYmIGVsZW1lbnRWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMubGFuZXNbbGFuZUlkXVsnZm9udC1mYW1pbHknXSkge1xuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHkgPSBlbGVtZW50Vmlldy5tb2RlbC5hdHRyaWJ1dGVzLmxhbmVzW2xhbmVJZF0uc3VibGFuZXNbc3ViTGFuZUlkXVsnZm9udC1mYW1pbHknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobm9kZS5pZCk7XG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICBodG1sLnN0eWxlLmZvbnRTaXplID0gZm9udFNpemUgKyAncHgnO1xuICAgICAgICAgICAgaHRtbC5zdHlsZS5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnRWaWV3LmdldEF0dHJpYnV0ZURlZmluaXRpb24odGV4dEF0dHJpYnV0ZSkuc2V0LmNhbGwoZWxlbWVudFZpZXcsIHRleHRWYWx1ZSwgYmJveCwgbm9kZSwgYXR0cnNDb3B5KTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tU2hhcGUoKSB7XG5cbiAgICB2YXIgTWVzc2FnZSA9IGN1c3RvbU1lc3NhZ2VTaGFwZSgpO1xuICAgIHZhciBDaG9yZW9ncmFwaHlWaWV3ID0gY3VzdG9tQ2hvcmVvZ3JhcGh5VmlldygpO1xuICAgIHZhciBDaG9yZW9ncmFwaHkgPSBjdXN0b21DaG9yZW9ncmFwaHlTaGFwZSgpO1xuICAgIGpvaW50LnNoYXBlcy5icG1uID0ge1xuICAgICAgICBDaG9yZW9ncmFwaHlWaWV3OiBDaG9yZW9ncmFwaHlWaWV3LFxuICAgICAgICBDaG9yZW9ncmFwaHk6IENob3Jlb2dyYXBoeSxcbiAgICAgICAgTWVzc2FnZTogTWVzc2FnZVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY3VzdG9tQ2hvcmVvZ3JhcGh5VmlldygpIHtcbiAgICB2YXIgQlBNTkVsZW1lbnRWaWV3ID0gam9pbnQuZGlhLkVsZW1lbnRWaWV3LmV4dGVuZCgpO1xuXG4gICAgQlBNTkVsZW1lbnRWaWV3LnByb3RvdHlwZS51cGRhdGVSZWxhdGl2ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAobm9kZSwgYXR0cnMsIHJlZkJCb3gsIG9wdCkge1xuICAgICAgICBvcHQgfHwgKG9wdCA9IHt9KTtcblxuICAgICAgICB2YXIgYXR0ck5hbWUsIGF0dHJWYWwsIGRlZjtcbiAgICAgICAgdmFyIHJhd0F0dHJzID0gYXR0cnMucmF3IHx8IHt9O1xuICAgICAgICB2YXIgbm9kZUF0dHJzID0gYXR0cnMubm9ybWFsIHx8IHt9O1xuICAgICAgICB2YXIgc2V0QXR0cnMgPSBhdHRycy5zZXQ7XG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHJzID0gYXR0cnMucG9zaXRpb247XG4gICAgICAgIHZhciBvZmZzZXRBdHRycyA9IGF0dHJzLm9mZnNldDtcblxuICAgICAgICBmb3IgKGF0dHJOYW1lIGluIHNldEF0dHJzKSB7XG4gICAgICAgICAgICBhdHRyVmFsID0gc2V0QXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgZGVmID0gdGhpcy5nZXRBdHRyaWJ1dGVEZWZpbml0aW9uKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIC8vIFNFVCAtIHNldCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGF0dHJpYnV0ZXMgdG8gYmUgc2V0IG9uIHRoZSBub2RlLFxuICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBhZmZlY3QgdGhlIG5vZGUgZGltZW5zaW9ucyBiYXNlZCBvbiB0aGUgcmVmZXJlbmNlIGJvdW5kaW5nXG4gICAgICAgICAgICAvLyBib3guIGUuZy4gYHdpZHRoYCwgYGhlaWdodGAsIGBkYCwgYHJ4YCwgYHJ5YCwgYHBvaW50c1xuICAgICAgICAgICAgaWYgKCFhdHRyVmFsKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgc2V0UmVzdWx0ID0gZGVmLnNldC5jYWxsKHRoaXMsIGF0dHJWYWwsIHJlZkJCb3guY2xvbmUoKSwgbm9kZSwgcmF3QXR0cnMpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0JDEoc2V0UmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGpvaW50LnV0aWwuYXNzaWduKG5vZGVBdHRycywgc2V0UmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0UmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlQXR0cnNbYXR0ck5hbWVdID0gc2V0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gVE9ETzogc2V0dGluZyB0aGUgYHRyYW5zZm9ybWAgYXR0cmlidXRlIG9uIEhUTUxFbGVtZW50c1xuICAgICAgICAgICAgLy8gdmlhIGBub2RlLnN0eWxlLnRyYW5zZm9ybSA9ICdtYXRyaXgoLi4uKSc7YCB3b3VsZCBpbnRyb2R1Y2VcbiAgICAgICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlIChlLmcuIGJhc2ljLlRleHRCbG9jaykuXG4gICAgICAgICAgICB0aGlzLnNldE5vZGVBdHRyaWJ1dGVzKG5vZGUsIG5vZGVBdHRycyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmluYWwgdHJhbnNsYXRpb24gb2YgdGhlIHN1YmVsZW1lbnQuXG4gICAgICAgIHZhciBub2RlVHJhbnNmb3JtID0gbm9kZUF0dHJzLnRyYW5zZm9ybTtcbiAgICAgICAgdmFyIG5vZGVNYXRyaXggPSBqb2ludC5WLnRyYW5zZm9ybVN0cmluZ1RvTWF0cml4KG5vZGVUcmFuc2Zvcm0pO1xuICAgICAgICB2YXIgbm9kZVBvc2l0aW9uID0gam9pbnQuZy5Qb2ludChub2RlTWF0cml4LmUsIG5vZGVNYXRyaXguZik7XG4gICAgICAgIGlmIChub2RlVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICBub2RlQXR0cnMgPSBqb2ludC51dGlsLm9taXQobm9kZUF0dHJzLCAndHJhbnNmb3JtJyk7XG4gICAgICAgICAgICBub2RlTWF0cml4LmUgPSBub2RlTWF0cml4LmYgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIG5vZGUgc2NhbGUgZGV0ZXJtaW5lZCBieSB0aGUgc2NhbGFibGUgZ3JvdXBcbiAgICAgICAgLy8gb25seSBpZiBsYXRlciBuZWVkZWQuXG4gICAgICAgIHZhciBzeCwgc3ksIHRyYW5zbGF0aW9uO1xuICAgICAgICBpZiAocG9zaXRpb25BdHRycyB8fCBvZmZzZXRBdHRycykge1xuICAgICAgICAgICAgdmFyIG5vZGVTY2FsZSA9IHRoaXMuZ2V0Tm9kZVNjYWxlKG5vZGUsIG9wdC5zY2FsYWJsZU5vZGUpO1xuICAgICAgICAgICAgc3ggPSBub2RlU2NhbGUuc3g7XG4gICAgICAgICAgICBzeSA9IG5vZGVTY2FsZS5zeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwb3NpdGlvbmVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoYXR0ck5hbWUgaW4gcG9zaXRpb25BdHRycykge1xuICAgICAgICAgICAgYXR0clZhbCA9IHBvc2l0aW9uQXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgZGVmID0gdGhpcy5nZXRBdHRyaWJ1dGVEZWZpbml0aW9uKGF0dHJOYW1lKTtcbiAgICAgICAgICAgIC8vIFBPU0lUSU9OIC0gcG9zaXRpb24gZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIHBvaW50IGZyb20gdGhlXG4gICAgICAgICAgICAvLyByZWZlcmVuY2UgYm91bmRpbmcgYm94LiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgbm9kZSBpcyB4OjAsIHk6MCBvZlxuICAgICAgICAgICAgLy8gdGhlIHJlZmVyZW5jZSBib3VuZGluZyBib3ggb3IgY291bGQgYmUgZnVydGhlciBzcGVjaWZ5IGJ5IHNvbWVcbiAgICAgICAgICAgIC8vIFNWRyBhdHRyaWJ1dGVzIGUuZy4gYHhgLCBgeWBcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gZGVmLnBvc2l0aW9uLmNhbGwodGhpcywgYXR0clZhbCwgcmVmQkJveC5jbG9uZSgpLCBub2RlLCByYXdBdHRycyk7XG4gICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICBub2RlUG9zaXRpb24ub2Zmc2V0KGpvaW50LmcuUG9pbnQodHJhbnNsYXRpb24pLnNjYWxlKHN4LCBzeSkpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgfHwgKHBvc2l0aW9uZWQgPSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBub2RlIGJvdW5kaW5nIGJveCBjb3VsZCBkZXBlbmQgb24gdGhlIGBzaXplYCBzZXQgZnJvbSB0aGUgcHJldmlvdXMgbG9vcC5cbiAgICAgICAgLy8gSGVyZSB3ZSBrbm93LCB0aGF0IGFsbCB0aGUgc2l6ZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhbHJlYWR5IHNldC5cbiAgICAgICAgdGhpcy5zZXROb2RlQXR0cmlidXRlcyhub2RlLCBub2RlQXR0cnMpO1xuXG4gICAgICAgIHZhciBvZmZzZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAob2Zmc2V0QXR0cnMpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGlzIHZpc2libGVcbiAgICAgICAgICAgIHZhciBub2RlQm91bmRpbmdSZWN0ID0gdGhpcy5nZXROb2RlQm91bmRpbmdSZWN0KG5vZGUpO1xuICAgICAgICAgICAgaWYgKG5vZGVCb3VuZGluZ1JlY3Qud2lkdGggPiAwICYmIG5vZGVCb3VuZGluZ1JlY3QuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBub2RlQkJveCA9IGpvaW50LlYudHJhbnNmb3JtUmVjdChub2RlQm91bmRpbmdSZWN0LCBub2RlTWF0cml4KS5zY2FsZSgxIC8gc3gsIDEgLyBzeSk7XG4gICAgICAgICAgICAgICAgZm9yIChhdHRyTmFtZSBpbiBvZmZzZXRBdHRycykge1xuICAgICAgICAgICAgICAgICAgICBhdHRyVmFsID0gb2Zmc2V0QXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBkZWYgPSB0aGlzLmdldEF0dHJpYnV0ZURlZmluaXRpb24oYXR0ck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPRkZTRVQgLSBvZmZzZXQgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIHBvaW50IGZyb20gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gYm91bmRpbmcgYm94LiBUaGUgZGVmYXVsdCBvZmZzZXQgcG9pbnQgaXMgeDowLCB5OjAgKG9yaWdpbikgb3IgY291bGQgYmUgZnVydGhlclxuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZ5IHdpdGggc29tZSBTVkcgYXR0cmlidXRlcyBlLmcuIGB0ZXh0LWFuY2hvcmAsIGBjeGAsIGBjeWBcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBkZWYub2Zmc2V0LmNhbGwodGhpcywgYXR0clZhbCwgbm9kZUJCb3gsIG5vZGUsIHJhd0F0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlUG9zaXRpb24ub2Zmc2V0KGpvaW50LmcuUG9pbnQodHJhbnNsYXRpb24pLnNjYWxlKHN4LCBzeSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ZWQgfHwgKG9mZnNldGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyBub3QgdG91Y2ggbm9kZSdzIHRyYW5zZm9ybSBhdHRyaWJ1dGUgaWYgdGhlcmUgaXMgbm8gdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAgICAgICAgaWYgKG5vZGVUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbmVkIHx8IG9mZnNldGVkKSB7XG4gICAgICAgICAgICAvLyBSb3VuZCB0aGUgY29vcmRpbmF0ZXMgdG8gMSBkZWNpbWFsIHBvaW50LlxuICAgICAgICAgICAgbm9kZVBvc2l0aW9uLnJvdW5kKDEpO1xuICAgICAgICAgICAgbm9kZU1hdHJpeC5lID0gbm9kZVBvc2l0aW9uLng7XG4gICAgICAgICAgICBub2RlTWF0cml4LmYgPSBub2RlUG9zaXRpb24ueTtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBqb2ludC5WLm1hdHJpeFRvVHJhbnNmb3JtU3RyaW5nKG5vZGVNYXRyaXgpKTtcbiAgICAgICAgICAgIC8vIFRPRE86IHN0b3JlIG5vZGVNYXRyaXggbWV0cmljcz9cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBUZXh0QmxvY2tWaWV3IGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIGZvciBJRSB3aGVuIG5vIGZvcmVpZ25PYmplY3QgZXhpc3RzIGFuZFxuICAgIC8vIHRoZSB0ZXh0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGJyb2tlbi5cbiAgICB2YXIgVGV4dEJsb2NrVmlldyA9IEJQTU5FbGVtZW50Vmlldy5leHRlbmQoe1xuXG4gICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZXM6IHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0ZWRcbiAgICAgICAgICAgID8gQlBNTkVsZW1lbnRWaWV3LnByb3RvdHlwZS5wcmVzZW50YXRpb25BdHRyaWJ1dGVzXG4gICAgICAgICAgICA6IEJQTU5FbGVtZW50Vmlldy5hZGRQcmVzZW50YXRpb25BdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBbJ0NPTlRFTlQnXSxcbiAgICAgICAgICAgICAgICBzaXplOiBbJ0NPTlRFTlQnXVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgaW5pdEZsYWc6IFsnUkVOREVSJywgJ0NPTlRFTlQnXSxcblxuICAgICAgICBjb25maXJtVXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBCUE1ORWxlbWVudFZpZXcucHJvdG90eXBlLmNvbmZpcm1VcGRhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZsYWcoZmxhZ3MsICdDT05URU5UJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICAgICAgZmxhZ3MgPSB0aGlzLnJlbW92ZUZsYWcoZmxhZ3MsICdDT05URU5UJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZ3M7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAoXywgcmVuZGVyaW5nT25seUF0dHJzKSB7XG5cbiAgICAgICAgICAgIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgICAgICAgICAgIGlmICghc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnRlZCkge1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV2ZXJ5dGhpbmcgYnV0IHRoZSBjb250ZW50IGZpcnN0LlxuICAgICAgICAgICAgICAgIHZhciBub1RleHRBdHRycyA9IGpvaW50LnV0aWwub21pdChyZW5kZXJpbmdPbmx5QXR0cnMgfHwgbW9kZWwuZ2V0KCdhdHRycycpLCAnLmNvbnRlbnQnKTtcbiAgICAgICAgICAgICAgICBCUE1ORWxlbWVudFZpZXcucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMsIG1vZGVsLCBub1RleHRBdHRycyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmluZ09ubHlBdHRycyB8fCBoYXMkMihyZW5kZXJpbmdPbmx5QXR0cnMsICcuY29udGVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudCBpdHNlbGYuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudChtb2RlbCwgcmVuZGVyaW5nT25seUF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBCUE1ORWxlbWVudFZpZXcucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMsIG1vZGVsLCByZW5kZXJpbmdPbmx5QXR0cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uIChjZWxsLCByZW5kZXJpbmdPbmx5QXR0cnMpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIHRoZSB0ZXh0IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIHZhciB0ZXh0QXR0cnMgPSBqb2ludC51dGlsLm1lcmdlKHt9LCAocmVuZGVyaW5nT25seUF0dHJzIHx8IGNlbGwuZ2V0KCdhdHRycycpKVsnLmNvbnRlbnQnXSk7XG5cbiAgICAgICAgICAgIHRleHRBdHRycyA9IGpvaW50LnV0aWwub21pdCh0ZXh0QXR0cnMsICd0ZXh0Jyk7XG5cbiAgICAgICAgICAgIC8vIEJyZWFrIHRoZSBjb250ZW50IHRvIGZpdCB0aGUgZWxlbWVudCBzaXplIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC8vIHNldCBvbiB0aGUgbW9kZWwuXG4gICAgICAgICAgICB2YXIgdGV4dCA9IGpvaW50LnV0aWwuYnJlYWtUZXh0KGNlbGwuZ2V0KCdjb250ZW50JyksIGNlbGwuZ2V0KCdzaXplJyksIHRleHRBdHRycywge1xuICAgICAgICAgICAgICAgIC8vIG1lYXN1cmluZyBzYW5kYm94IHN2ZyBkb2N1bWVudFxuICAgICAgICAgICAgICAgIHN2Z0RvY3VtZW50OiB0aGlzLnBhcGVyLnN2Z1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhdHRycyB3aXRoIHNhbWUgc3RydWN0dXJlIGFzIHRoZSBtb2RlbCBhdHRycyB7IHRleHQ6IHsgKnRleHRBdHRyaWJ1dGVzKiB9fVxuICAgICAgICAgICAgdmFyIGF0dHJzID0gam9pbnQudXRpbC5zZXRCeVBhdGgoe30sICcuY29udGVudCcsIHRleHRBdHRycywgJy8nKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0ZXh0IGF0dHJpYnV0ZSB3aXRoIHRoZSBvbmUgd2UganVzdCBwcm9jZXNzZWQuXG4gICAgICAgICAgICBhdHRyc1snLmNvbnRlbnQnXS50ZXh0ID0gdGV4dDtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB2aWV3IHVzaW5nIHJlbmRlcmluZ09ubHlBdHRyaWJ1dGVzIHBhcmFtZXRlci5cbiAgICAgICAgICAgIEJQTU5FbGVtZW50Vmlldy5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgY2VsbCwgYXR0cnMpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgQ2hvcmVvZ3JhcGh5VmlldyA9IFRleHRCbG9ja1ZpZXcuZXh0ZW5kKHtcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnBhcnRpY2lwYW50cycsIGZ1bmN0aW9uIChjZWxsLCBwYXJ0aWNpcGFudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6aW5pdGlhdGluZ1BhcnRpY2lwYW50JywgdGhpcy5sYXlvdXRBbmRVcGRhdGUpO1xuICAgICAgICAgICAgam9pbnQuc2hhcGVzLmJhc2ljLlRleHRCbG9ja1ZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICgham9pbnQuZW52LnRlc3QoJ3N2Z2ZvcmVpZ25vYmplY3QnKSkge1xuICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBvdXIgb3duIGhhbmRsZXIgZm9yIGNvbnRlbnQgY2hhbmdlLlxuICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgb25lIHdpbGwgdGFrZSB0aGUgcGFydGljaXBhbnQgYXR0cmlidXRlcyBpbnRvIGFjY291bnQuXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKHRoaXMubW9kZWwsICdjaGFuZ2U6Y29udGVudCcpLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6Y29udGVudCcsIGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudChjZWxsLCB0aGlzLnBhcnRpY2lwYW50c0F0dHJzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudEhlaWdodDogMjBcbiAgICAgICAgfSxcblxuICAgICAgICBwcmVzZW50YXRpb25BdHRyaWJ1dGVzOiBUZXh0QmxvY2tWaWV3LmFkZFByZXNlbnRhdGlvbkF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgcGFydGljaXBhbnRzOiAnUEFSVElDSVBBTlRTJyxcbiAgICAgICAgICAgIGluaXRpYXRpbmdQYXJ0aWNpcGFudDogJ0lOSVRfUEFSVElDSVBBTlQnLFxuICAgICAgICB9KSxcblxuICAgICAgICBpbml0RmxhZzogWydQQVJUSUNJUEFOVFMnXS5jb25jYXQoVGV4dEJsb2NrVmlldy5wcm90b3R5cGUuaW5pdEZsYWcpLFxuXG4gICAgICAgIGNvbmZpcm1VcGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmbGFnID0gVGV4dEJsb2NrVmlldy5wcm90b3R5cGUuY29uZmlybVVwZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmxhZyhmbGFnLCAnUEFSVElDSVBBTlRTJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBhcnRpY2lwYW50cyh0aGlzLm1vZGVsLmdldCgncGFydGljaXBhbnRzJykpO1xuICAgICAgICAgICAgICAgIGZsYWcgPSB0aGlzLnJlbW92ZUZsYWcoZmxhZywgWydQQVJUSUNJUEFOVFMnLCAnSU5JVF9QQVJUSUNJUEFOVCddKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmxhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZsYWcoZmxhZywgJ0lOSVRfUEFSVElDSVBBTlQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0QW5kVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgZmxhZyA9IHRoaXMucmVtb3ZlRmxhZyhmbGFnLCAnSU5JVF9QQVJUSUNJUEFOVCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYWc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2lwYW50c0F0dHJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHVwZGF0ZS4gV2UgcmVuZGVyIHRoZSBwYXJ0aWNpcGFudHMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFydGljaXBhbnRzKHRoaXMubW9kZWwuZ2V0KCdwYXJ0aWNpcGFudHMnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubGF5b3V0QW5kVXBkYXRlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gUmVzZXQgcGFydGljaXBhbnRzIGNhY2hlIHdoZW4gYGRpcnR5OiB0cnVlYCBmbGFnIHVzZWQgaW4gYGF0dHJzKClgLlxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGpvaW50LmRpYS5FbGVtZW50Vmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVuZGVyTWFya3VwOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGpvaW50LmRpYS5FbGVtZW50Vmlldy5wcm90b3R5cGUucmVuZGVyTWFya3VwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIC8vIGEgaG9sZGVyIGZvciBhbGwgdGhlIGxhbmVzXG4gICAgICAgICAgICB0aGlzLiRwYXJ0aWNpcGFudHMgPSB0aGlzLiQoJy5wYXJ0aWNpcGFudHMnKTtcblxuICAgICAgICAgICAgLy8gQW4gU1ZHIGVsZW1lbnQgZm9yIHRoZSBsYW5lXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50TWFya3VwID0gam9pbnQuVih0aGlzLm1vZGVsLnBhcnRpY2lwYW50TWFya3VwKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW5kZXJQYXJ0aWNpcGFudHM6IGZ1bmN0aW9uIChwYXJ0aWNpcGFudHMpIHtcblxuICAgICAgICAgICAgdGhpcy4kcGFydGljaXBhbnRzLmVtcHR5KCk7XG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzID0ge307XG5cbiAgICAgICAgICAgIGpvaW50LnV0aWwudG9BcnJheShwYXJ0aWNpcGFudHMpLmZvckVhY2goZnVuY3Rpb24gKHBhcnRpY2lwYW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAncGFydGljaXBhbnRfJyArIGluZGV4O1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcuJyArIGNsYXNzTmFtZTtcblxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbc2VsZWN0b3IgKyAnIC5wYXJ0aWNpcGFudC1yZWN0J10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5vcHRpb25zLnBhcnRpY2lwYW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbc2VsZWN0b3IgKyAnIC5wYXJ0aWNpcGFudC1sYWJlbCddID0ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwYXJ0aWNpcGFudFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRwYXJ0aWNpcGFudHMuYXBwZW5kKHRoaXMucGFydGljaXBhbnRNYXJrdXAuY2xvbmUoKS5hZGRDbGFzcyhjbGFzc05hbWUpLm5vZGUpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHRoaXMubGF5b3V0QW5kVXBkYXRlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbGF5b3V0QW5kVXBkYXRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIHZhciBwYXJ0aWNpcGFudHMgPSB0aGlzLm1vZGVsLmdldCgncGFydGljaXBhbnRzJykgfHwgW107XG4gICAgICAgICAgICB2YXIgY291bnQgPSBwYXJ0aWNpcGFudHMubGVuZ3RoO1xuXG4gICAgICAgICAgICB2YXIgcEhlaWdodCA9IHRoaXMub3B0aW9ucy5wYXJ0aWNpcGFudEhlaWdodDtcbiAgICAgICAgICAgIHZhciBlSGVpZ2h0ID0gdGhpcy5tb2RlbC5nZXQoJ3NpemUnKS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgYkhlaWdodCA9IE1hdGgubWF4KDAsIGVIZWlnaHQgLSAocEhlaWdodCAqIGNvdW50KSk7XG5cbiAgICAgICAgICAgIHZhciBvZmZzZXRZID0gMDtcblxuICAgICAgICAgICAgdmFyIGluaXRpYXRvciA9IHRoaXMubW9kZWwuZ2V0KCdpbml0aWF0aW5nUGFydGljaXBhbnQnKTtcblxuICAgICAgICAgICAgLy8gaW5pdGlhdG9yIGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IE1hdGgubWF4KGpvaW50LnV0aWwuaXNOdW1iZXIoaW5pdGlhdG9yKSA/IE1hdGguYWJzKGluaXRpYXRvcikgOiBwYXJ0aWNpcGFudHMuaW5kZXhPZihpbml0aWF0b3IpLCAwKTtcblxuICAgICAgICAgICAgLy8gYm9keSBwb3NpdGlvbiBpbmRleFxuICAgICAgICAgICAgdmFyIGIgPSBNYXRoLm1pbihpLCBjb3VudCAtIDIpO1xuXG4gICAgICAgICAgICBqb2ludC51dGlsLnRvQXJyYXkocGFydGljaXBhbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0aWNpcGFudCwgaW5kZXgpIHtcblxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcucGFydGljaXBhbnRfJyArIGluZGV4O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1tzZWxlY3Rvcl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCcgKyBvZmZzZXRZICsgJyknXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbc2VsZWN0b3IgKyAnIC5wYXJ0aWNpcGFudC1yZWN0J10uZmlsbCA9IChpID09IGluZGV4KVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuYXR0cignLmJvZHkvZmlsbCcpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5hdHRyKCcucGFydGljaXBhbnQtcmVjdC9maWxsJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzW3NlbGVjdG9yICsgJyAucGFydGljaXBhbnQtcmVjdCddLnN0cm9rZSA9IChpID09IGluZGV4KVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuYXR0cignLmJvZHkvc3Ryb2tlJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmF0dHIoJy5wYXJ0aWNpcGFudC1yZWN0L3N0cm9rZScpO1xuXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSArPSBwSGVpZ2h0ICsgKGIgPT0gaW5kZXggPyBiSGVpZ2h0IDogMCk7XG5cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICAvLyBzZXQgc3ViLXByb2Nlc3MgaWNvbiBwb3NpdGlvblxuICAgICAgICAgICAgdmFyIHNwID0gY291bnQgPCAyID8gMCA6IGIgLSBjb3VudCArIDE7XG5cbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQXR0cnNbJy5zdWItcHJvY2VzcyddID0ge1xuICAgICAgICAgICAgICAgICdyZWYtZHknOiBNYXRoLm1heCgtZUhlaWdodCwgc3AgKiBwSGVpZ2h0IC0gMzApXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBDaGFuZ2UgdGV4dCBjb250ZW50IHBvc2l0aW9uIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBhcnRpY2lwYW50IGJvZHlcbiAgICAgICAgICAgIHZhciBjID0gY291bnQgPCAyID8gMCA6IGIgKyAxO1xuXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50c0F0dHJzWycuZm9iaiBkaXYnXSA9IHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGJIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IHBIZWlnaHQgKiBjXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFNhbWUgYXMgYWJvdmUganVzdCBJRSBmYWxsYmFja1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNBdHRyc1snLmNvbnRlbnQnXSA9IHtcbiAgICAgICAgICAgICAgICAncmVmLXknOiBwSGVpZ2h0ICogYyArIGJIZWlnaHQgLyAyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBwYXJ0aWNpcGFudHMgYXR0cmlidXRlcyB0byBiZSBzdG9yZWQgb24gbW9kZWwuXG4gICAgICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIGFyZSB1c2luZyByZW5kZXJpbmdPbmx5QXR0cnMgcGFyYW1ldGVyIGluIEVsZW1lbnRWaWV3LnVwZGF0ZVxuICAgICAgICAgICAgdmFyIGF0dHJzID0gam9pbnQudXRpbC5tZXJnZSh7fSwgdGhpcy5tb2RlbC5nZXQoJ2F0dHJzJyksIHRoaXMucGFydGljaXBhbnRzQXR0cnMgfHwge30pO1xuXG4gICAgICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgLy8gVGhlIHRleHQgaXMgc2V0IGJ5IGAuY29udGVudC9odG1sYCBub3cgKGxlYXZpbmcgdGhpcyBpbiB0aGUgYXR0cnMgd291bGQgcmVzdWx0XG4gICAgICAgICAgICAvLyBpbiBub3QgYmVpbmcgYWJsZSB0byBjaGFuZ2UgY29udGVudCkuXG4gICAgICAgICAgICBqb2ludC51dGlsLnVuc2V0QnlQYXRoKGF0dHJzLCAnZGl2L2h0bWwnKTtcblxuICAgICAgICAgICAgVGV4dEJsb2NrVmlldy5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgdGhpcy5tb2RlbCwgYXR0cnMpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIGpvaW50LnNoYXBlcy5iYXNpYy5UZXh0QmxvY2tWaWV3ID0gVGV4dEJsb2NrVmlldztcblxuICAgIHJldHVybiBDaG9yZW9ncmFwaHlWaWV3O1xufVxuXG5mdW5jdGlvbiBjdXN0b21DaG9yZW9ncmFwaHlTaGFwZSgpIHtcbiAgICAvLyBCUE1OMSBcbiAgICBpZiAoIWpvaW50LnNoYXBlcy5iYXNpYy5HZW5lcmljKSB7XG4gICAgICAgIGpvaW50LnNoYXBlcy5iYXNpYy5HZW5lcmljID0gam9pbnQuZGlhLkVsZW1lbnQuZGVmaW5lKCdiYXNpYy5HZW5lcmljJywge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAnLic6IHsgZmlsbDogJyNmZmZmZmYnLCBzdHJva2U6ICdub25lJyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOztcbiAgICB9XG5cbiAgICBjb25zdCBPbGRUZXh0QmxvY2sgPSBqb2ludC5zaGFwZXMuYmFzaWMuR2VuZXJpYy5kZWZpbmUoJ2Jhc2ljLlRleHRCbG9jaycsIHtcbiAgICAgICAgLy8gc2VlIGpvaW50LmNzcyBmb3IgbW9yZSBlbGVtZW50IHN0eWxlc1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgcmVjdDoge1xuICAgICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwMDAwJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgICAgZmlsbDogJyMwMDAwMDAnLFxuICAgICAgICAgICAgICAgICdmb250LXNpemUnOiAxNCxcbiAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiAnQXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnLmNvbnRlbnQnOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ2V4YW1wbGUnLFxuICAgICAgICAgICAgICAgICdyZWYteCc6IC41LFxuICAgICAgICAgICAgICAgICdyZWYteSc6IC41LFxuICAgICAgICAgICAgICAgICd5LWFsaWdubWVudCc6ICdtaWRkbGUnLFxuICAgICAgICAgICAgICAgICd4LWFsaWdubWVudCc6ICdtaWRkbGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgfSwge1xuICAgICAgICBtYXJrdXA6IFtcbiAgICAgICAgICAgICc8ZyBjbGFzcz1cInJvdGF0YWJsZVwiPicsXG4gICAgICAgICAgICAnPGcgY2xhc3M9XCJzY2FsYWJsZVwiPjxyZWN0Lz48L2c+JyxcbiAgICAgICAgICAgIHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICA/ICc8Zm9yZWlnbk9iamVjdCBjbGFzcz1cImZvYmpcIj48Ym9keSB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48ZGl2IGNsYXNzPVwiY29udGVudFwiLz48L2JvZHk+PC9mb3JlaWduT2JqZWN0PidcbiAgICAgICAgICAgICAgICA6ICc8dGV4dCBjbGFzcz1cImNvbnRlbnRcIi8+JyxcbiAgICAgICAgICAgICc8L2c+J1xuICAgICAgICBdLmpvaW4oJycpLFxuXG4gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcywgJ2NoYW5nZTpzaXplJywgdGhpcy51cGRhdGVTaXplKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcywgJ2NoYW5nZTpjb250ZW50JywgdGhpcy51cGRhdGVDb250ZW50KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSh0aGlzLCB0aGlzLmdldCgnc2l6ZScpKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudCh0aGlzLCB0aGlzLmdldCgnY29udGVudCcpKTtcbiAgICAgICAgICAgIGpvaW50LnNoYXBlcy5iYXNpYy5HZW5lcmljLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gKGNlbGwsIHNpemUpIHtcblxuICAgICAgICAgICAgLy8gU2VsZWN0b3IgYGZvcmVpZ25PYmplY3QnIGRvZXNuJ3Qgd29yayBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3ZSdyZSB1c2luZyBjbGFzcyBzZWxlY3RvciBpbnN0ZWFkLlxuICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjbG9uZSBzaXplIGFzIHdlIGRvbid0IHdhbnQgYXR0cmlidXRlcy5kaXYuc3R5bGUgdG8gYmUgc2FtZSBvYmplY3QgYXMgYXR0cmlidXRlcy5zaXplLlxuICAgICAgICAgICAgdGhpcy5hdHRyKHtcbiAgICAgICAgICAgICAgICAnLmZvYmonOiBqb2ludC51dGlsLmFzc2lnbih7fSwgc2l6ZSksXG4gICAgICAgICAgICAgICAgZGl2OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBqb2ludC51dGlsLmFzc2lnbih7fSwgc2l6ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGVDb250ZW50OiBmdW5jdGlvbiAoY2VsbCwgY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBDb250ZW50IGVsZW1lbnQgaXMgYSA8ZGl2PiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cih7XG4gICAgICAgICAgICAgICAgICAgICcuY29udGVudCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGpvaW50LnV0aWwuc2FuaXRpemVIVE1MKGNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnQgZWxlbWVudCBpcyBhIDx0ZXh0PiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFNWRyBlbGVtZW50cyBkb24ndCBoYXZlIGlubmVySFRNTCBhdHRyaWJ1dGUuXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyKHtcbiAgICAgICAgICAgICAgICAgICAgJy5jb250ZW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogY29udGVudFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gSGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6XG4gICAgICAgIHNldEZvcmVpZ25PYmplY3RTaXplOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIEhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OlxuICAgICAgICBzZXREaXZDb250ZW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgU3ViUHJvY2Vzc0ludGVyZmFjZSA9IHtcblxuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIFNlZSBJY29uSW50ZXJmYWNlLmluaXRpYWxpemUoKVxuICAgICAgICAgICAgdGhpcy5fcGFyZW50ID0gKHRoaXMuX3BhcmVudCB8fCB0aGlzKS5jb25zdHJ1Y3Rvci5fX3N1cGVyX187XG5cbiAgICAgICAgICAgIHRoaXMuX3BhcmVudC5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcywgJ2NoYW5nZTpzdWJQcm9jZXNzJywgdGhpcy5fb25TdWJQcm9jZXNzQ2hhbmdlKTtcblxuICAgICAgICAgICAgdGhpcy5fb25TdWJQcm9jZXNzQ2hhbmdlKHRoaXMsIHRoaXMuZ2V0KCdzdWJQcm9jZXNzJykgfHwgbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX29uU3ViUHJvY2Vzc0NoYW5nZTogZnVuY3Rpb24gKGNlbGwsIHN1YlByb2Nlc3MpIHtcblxuICAgICAgICAgICAgY2VsbC5hdHRyKHtcbiAgICAgICAgICAgICAgICAnLnN1Yi1wcm9jZXNzJzoge1xuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBzdWJQcm9jZXNzID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICdkYXRhLXN1Yi1wcm9jZXNzJzogc3ViUHJvY2VzcyB8fCAnJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLy8gQ2hvcmVvZ3JhcHlcblxuICAgIHZhciBDaG9yZW9ncmFwaHkgPSBPbGRUZXh0QmxvY2suZXh0ZW5kKHtcbiAgICAgICAgbWFya3VwOiBbXG4gICAgICAgICAgICAnPGcgY2xhc3M9XCJyb3RhdGFibGVcIj4nLFxuICAgICAgICAgICAgJzxnIGNsYXNzPVwic2NhbGFibGVcIj48cmVjdCBjbGFzcz1cImJvZHlcIi8+PC9nPicsXG4gICAgICAgICAgICBqb2ludC5lbnYudGVzdCgnc3ZnZm9yZWlnbm9iamVjdCcpID8gJzxmb3JlaWduT2JqZWN0IGNsYXNzPVwiZm9ialwiPjxib2R5IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPjxkaXYgY2xhc3M9XCJjb250ZW50XCIvPjwvYm9keT48L2ZvcmVpZ25PYmplY3Q+JyA6ICc8dGV4dCBjbGFzcz1cImNvbnRlbnRcIi8+JyxcbiAgICAgICAgICAgICc8dGV4dCBjbGFzcz1cImxhYmVsXCIvPjxwYXRoIGNsYXNzPVwic3ViLXByb2Nlc3NcIi8+PGcgY2xhc3M9XCJwYXJ0aWNpcGFudHNcIi8+JyxcbiAgICAgICAgICAgICc8L2c+J1xuICAgICAgICBdLmpvaW4oJycpLFxuXG4gICAgICAgIHBhcnRpY2lwYW50TWFya3VwOiAnPGcgY2xhc3M9XCJwYXJ0aWNpcGFudFwiPjxyZWN0IGNsYXNzPVwicGFydGljaXBhbnQtcmVjdFwiLz48dGV4dCBjbGFzcz1cInBhcnRpY2lwYW50LWxhYmVsXCIvPjwvZz4nLFxuXG4gICAgICAgIGRlZmF1bHRzOiBqb2ludC51dGlsLmRlZXBTdXBwbGVtZW50KHtcblxuICAgICAgICAgICAgdHlwZTogJ2JwbW4uQ2hvcmVvZ3JhcGh5JyxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA4MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgLy8gSEFDSyAoVE9ETyEpOiBhcyB3ZSBkb24ndCBoYXZlIGluZGV4ZXMgb24gYXR0cmlidXRlcyB5ZXQgKHRvIGRldGVybWluZSB0aGUgb3JkZXJcbiAgICAgICAgICAgICAgICAvLyBvZiBhcHBseWluZyBhdHRyaWJ1dGVzKSB3ZSBoYXZlIHRvIHJlaW50cm9kdWNlIHRoZSByZWN0IGF0dHJpYnV0ZSBhZ2FpblxuICAgICAgICAgICAgICAgIC8vIHNvIGl0IGNoYW5nZXMgdGhlIFwib3JkZXJcIiBob3cgdGhlIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZC5cbiAgICAgICAgICAgICAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0byBhcHBseSBhbGwgYHJlY3RgIGF0dHJpYnV0ZXMgYmVmb3JlIHdlIGFwcGx5ICcuYm9keScgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugb3VyIHN0cm9rZSBhbmQgZmlsbCB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgICAgICAgICAgICAgIHJlY3Q6IHt9LFxuICAgICAgICAgICAgICAgICcuYm9keSc6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDYwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDgwLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNmZmZmZmYnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLmxhYmVsJzoge1xuICAgICAgICAgICAgICAgICAgICByZWY6ICcuYm9keScsXG4gICAgICAgICAgICAgICAgICAgICdyZWYteCc6IC41LFxuICAgICAgICAgICAgICAgICAgICAncmVmLWR5JzogNSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0LWFuY2hvcic6ICdtaWRkbGUnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiAnQ2FsaWJyaScsXG4gICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5wYXJ0aWNpcGFudC1yZWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNhYWFhYWEnLFxuICAgICAgICAgICAgICAgICAgICByZWY6ICcuYm9keScsXG4gICAgICAgICAgICAgICAgICAgICdyZWYtd2lkdGgnOiAxXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLnBhcnRpY2lwYW50LWxhYmVsJzoge1xuICAgICAgICAgICAgICAgICAgICAndGV4dC1hbmNob3InOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgcmVmOiAnLnBhcnRpY2lwYW50XzAgLnBhcnRpY2lwYW50LXJlY3QnLFxuICAgICAgICAgICAgICAgICAgICAncmVmLXgnOiAuNSxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi15JzogLjUsXG4gICAgICAgICAgICAgICAgICAgICd5LWFsaWdubWVudCc6ICdtaWRkbGUnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLnN1Yi1wcm9jZXNzJzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAnTSAwIDAgTCAzMCAwIDMwIDMwIDAgMzAgeiBNIDE1IDQgTCAxNSAyNiBNIDQgMTUgTCAyNiAxNScsXG4gICAgICAgICAgICAgICAgICAgIHJlZjogJy5ib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi14JzogMC41LFxuICAgICAgICAgICAgICAgICAgICAncmVmLWR5JzogLTMwLFxuICAgICAgICAgICAgICAgICAgICAneC1hbGlnbm1lbnQnOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMDAwMCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcuZm9iaiBkaXYnOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnQ2FsaWJyaScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBhcnRpY2lwYW50czogW10sXG4gICAgICAgICAgICBpbml0aWF0aW5nUGFydGljaXBhbnQ6IDAgLy8gaW5kZXggKG51bWJlcikgb3IgcGFydGljaXBhbnQgbmFtZSAoc3RyaW5nKVxuXG4gICAgICAgIH0sIE9sZFRleHRCbG9jay5wcm90b3R5cGUuZGVmYXVsdHMpXG5cbiAgICB9KS5leHRlbmQoU3ViUHJvY2Vzc0ludGVyZmFjZSk7XG5cbiAgICBqb2ludC5zaGFwZXMuYmFzaWMuVGV4dEJsb2NrID0gT2xkVGV4dEJsb2NrO1xuXG4gICAgcmV0dXJuIENob3Jlb2dyYXBoeTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tTWVzc2FnZVNoYXBlKCkge1xuICAgIHZhciBNZXNzYWdlID0gam9pbnQuZGlhLkVsZW1lbnQuZXh0ZW5kKHtcblxuICAgICAgICBtYXJrdXA6ICc8ZyBjbGFzcz1cInJvdGF0YWJsZVwiPjxnIGNsYXNzPVwic2NhbGFibGVcIj48cG9seWdvbiBjbGFzcz1cImJvZHlcIi8+PC9nPjx0ZXh0IGNsYXNzPVwibGFiZWxcIi8+PC9nPicsXG5cbiAgICAgICAgZGVmYXVsdHM6IGpvaW50LnV0aWwuZGVlcFN1cHBsZW1lbnQoe1xuXG4gICAgICAgICAgICB0eXBlOiAnYnBtbi5NZXNzYWdlJyxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgJy5ib2R5Jzoge1xuICAgICAgICAgICAgICAgICAgICBwb2ludHM6ICcwLDAgNjAsMCA2MCw0MCAwLDQwIDAsMCA2MCwwIDMwLDIwIDAsMCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcubGFiZWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogJy5ib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JlZi14JzogLjUsXG4gICAgICAgICAgICAgICAgICAgICdyZWYtZHknOiA1LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZScsXG4gICAgICAgICAgICAgICAgICAgICdmb250LWZhbWlseSc6ICdDYWxpYnJpJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IDEyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIGpvaW50LmRpYS5FbGVtZW50LnByb3RvdHlwZS5kZWZhdWx0cylcbiAgICB9KTtcblxuICAgIHJldHVybiBNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBjdXN0b21Kb2ludEpTQlBNTigpIHtcbiAgICBvdmVyd3JpdGVDdXN0b21TaGFwZUF0dHJzKCk7XG4gICAgYWRkQ3VzdG9tU2hhcGUoKTtcbn1cblxuY29uc3QgQlBNTkN1c3RvbUZ1bmN0aW9uID0ge1xuICAgIGN1c3RvbUpvaW50SlNCUE1OLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQlBNTkN1c3RvbUZ1bmN0aW9uO1xuIl19
|