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.
Files changed (74) hide show
  1. package/bundles/qms-angular.umd.js +17 -9
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/jointJS/bpmn/bpmn.custom.function.js +1 -2
  4. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +5 -3
  5. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +14 -7
  6. package/fesm2015/qms-angular.js +17 -9
  7. package/fesm2015/qms-angular.js.map +1 -1
  8. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +3 -2
  9. package/package.json +1 -1
  10. package/qms-angular.metadata.json +1 -1
  11. package/src/assets/qms-ckeditor-plugin/package-lock.json +372 -607
  12. package/src/assets/qms-ckeditor-plugin/build/translations/af.js +0 -1
  13. package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +0 -1
  14. package/src/assets/qms-ckeditor-plugin/build/translations/ast.js +0 -1
  15. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +0 -1
  16. package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +0 -1
  17. package/src/assets/qms-ckeditor-plugin/build/translations/ca.js +0 -1
  18. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +0 -1
  19. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +0 -1
  20. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +0 -1
  21. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +0 -1
  22. package/src/assets/qms-ckeditor-plugin/build/translations/el.js +0 -1
  23. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +0 -1
  24. package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +0 -1
  25. package/src/assets/qms-ckeditor-plugin/build/translations/eo.js +0 -1
  26. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +0 -1
  27. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +0 -1
  28. package/src/assets/qms-ckeditor-plugin/build/translations/eu.js +0 -1
  29. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +0 -1
  30. package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +0 -1
  31. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +0 -1
  32. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +0 -1
  33. package/src/assets/qms-ckeditor-plugin/build/translations/gu.js +0 -1
  34. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +0 -1
  35. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +0 -1
  36. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +0 -1
  37. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +0 -1
  38. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +0 -1
  39. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +0 -1
  40. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +0 -1
  41. package/src/assets/qms-ckeditor-plugin/build/translations/kk.js +0 -1
  42. package/src/assets/qms-ckeditor-plugin/build/translations/km.js +0 -1
  43. package/src/assets/qms-ckeditor-plugin/build/translations/kn.js +0 -1
  44. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +0 -1
  45. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +0 -1
  46. package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +0 -1
  47. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +0 -1
  48. package/src/assets/qms-ckeditor-plugin/build/translations/ms.js +0 -1
  49. package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +0 -1
  50. package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +0 -1
  51. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +0 -1
  52. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +0 -1
  53. package/src/assets/qms-ckeditor-plugin/build/translations/oc.js +0 -1
  54. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +0 -1
  55. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +0 -1
  56. package/src/assets/qms-ckeditor-plugin/build/translations/pt.js +0 -1
  57. package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +0 -1
  58. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +0 -1
  59. package/src/assets/qms-ckeditor-plugin/build/translations/si.js +0 -1
  60. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +0 -1
  61. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +0 -1
  62. package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +0 -1
  63. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +0 -1
  64. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +0 -1
  65. package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +0 -1
  66. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +0 -1
  67. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +0 -1
  68. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +0 -1
  69. package/src/assets/qms-ckeditor-plugin/build/translations/tt.js +0 -1
  70. package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +0 -1
  71. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +0 -1
  72. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +0 -1
  73. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +0 -1
  74. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +0 -1
@@ -345,8 +345,10 @@ export class SelectDepartmentTreeComponent {
345
345
  const checkExistInResult = (node) => this.resultSelected.findIndex(x => x.id === node.id) > -1;
346
346
  if (added.length) {
347
347
  let selectedNode = null;
348
- this.isPushingChildNodes.emit(true);
349
348
  const allChildNode = [];
349
+ if (added.length > 1) {
350
+ this.isPushingChildNodes.emit(true);
351
+ }
350
352
  added.forEach(node => {
351
353
  allChildNode.push(Object.assign({}, node));
352
354
  const nestedNode = _.cloneDeep(this.convertToNestedNode(node));
@@ -585,7 +587,7 @@ export class SelectDepartmentTreeComponent {
585
587
  const nestedNode = this.convertToNestedNode(node);
586
588
  nestedNode.isGroup = false;
587
589
  });
588
- this.checkListSelection.deselect(...this.treeControl.dataNodes.filter(x => x.disabled));
590
+ this.checkListSelection.deselect(...this.treeControl.dataNodes.filter(x => !x.disabled));
589
591
  return;
590
592
  }
591
593
  ;
@@ -1335,4 +1337,4 @@ SelectDepartmentTreeComponent.propDecorators = {
1335
1337
  cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }],
1336
1338
  paginatorSearch: [{ type: ViewChild, args: ['paginatorSearch',] }]
1337
1339
  };
1338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWtCLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN00sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUs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b0M7OzsyQkFzQjFDLEtBQUs7cUJBR0wsS0FBSztxQkFDTCxLQUFLOzJCQUNMLEtBQUs7NEJBZ0JMLE1BQU07a0NBQ04sTUFBTTtpQ0FDTixNQUFNO3VDQUNOLE1BQU07K0JBQ04sTUFBTTtnQ0FDTixNQUFNOzhCQUNOLE1BQU07cUNBQ04sTUFBTTt3Q0FDTixNQUFNO3NDQUNOLE1BQU07a0NBQ04sTUFBTTt1Q0FFTixTQUFTLFNBQUMsd0JBQXdCOzhCQUNsQyxTQUFTLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUsIFFNU1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBbmltYXRpb25UcmVlRGVwYXJ0bWVudCB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW0gfSBmcm9tICcuL2VudW0vbW9kZS1kZXBhcnRtZW50LXRyZWUtdmlldy5lbnVtJztcbmltcG9ydCB7IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1wYWdpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29uZmlnJztcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Rpb24tY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLWdsb2JhbC5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIElIYW5kbGluZ0V2ZW50TGF6eSB7XG4gIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xuICBjaGVja0l0ZW1TZWFyY2g6IGJvb2xlYW47XG4gIGNoZWNrTm9kZTogYm9vbGVhbjtcbiAgZXhwYW5kOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgQW5pbWF0aW9uVHJlZURlcGFydG1lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgTEFORzogYW55O1xuICByZWFkb25seSBzcGlubmVyQXJyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg2KS5maWxsKDApO1xuICBASW5wdXQoKSBzZXQgcm93c1NrZWxldG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmFyclNrZWxldG9uID0gbmV3IEFycmF5KHZhbHVlKS5maWxsKDApO1xuICB9XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwdmgnO1xuICBASW5wdXQoKSBjb25maWc6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XG4gIEBJbnB1dCgpIG1heFdpZHRoTm9kZTogbnVtYmVyID0gNjUwO1xuICBpc0luY2x1ZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXQgZGVwYXJ0bWVudFJvb3RzKCkge1xuICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcbiAgICAgIHJldHVybjtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5sZXZlbCA9PT0gMCk7XG4gIH1cblxuICBnZXQgaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICB9XG5cbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luZ1NlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPj4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tOb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gIEBPdXRwdXQoKSBvbkxvYWRNb3JlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNoZWNrSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXRlOiBib29sZWFuLCBpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVJbmNsdWRlQ2hpbGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGlzUHVzaGluZ0NoaWxkTm9kZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICBAVmlld0NoaWxkKCdwYWdpbmF0b3JTZWFyY2gnKSBwYWdpbmF0b3JTZWFyY2g6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcblxuICByZWFkb25seSBNT0RFX1ZJRVdfRU5VTSA9IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bTtcbiAgSVRFTV9TSVpFID0gNTA7XG4gIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZXN1bHRTZWFyY2hTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICByZXN1bHRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICByZWFkb25seSBnZXREYXRhVHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU1RyZWVOb2RlW10+KFtdKTtcbiAgcmVhZG9ubHkgc2VhcmNoRGVwYXJ0bWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+PihuZXcgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4oKSk7XG4gIHJlc3VsdFNlYXJjaDogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsW10gPSBbXTtcblxuICBnZXQgY3VycmVudFRyZWVEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmdldERhdGFUcmVlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgfVxuXG4gIGdldCBpbmRldGVybWluYXRlU2VhcmNoUmVzdWx0KCkge1xuICAgIHJldHVybiAhdGhpcy5pc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCAmJiAhIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5zb21lKHggPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZCh4KSk7XG4gIH1cblxuICByZWFkb25seSBnZXRJbmRleFZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZWFkb25seSBzY3JvbGxUb05vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGdldEFjdGl2ZU5vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICctLSc7XG5cbiAgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gUGFnaW5hdGlvblNpemU7XG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xuICBDVVJSRU5UX1BBR0VTSVpFOiBudW1iZXIgPSAxMDtcbiAgcmVhZG9ubHkgbmVzdGVkVHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gIHJlYWRvbmx5IGZsYXRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TRmxhdE5vZGVUcmVlLCBRTVNUcmVlTm9kZT4oKTtcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFFNU0ZsYXROb2RlVHJlZT4odHJ1ZSk7XG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWw+KHRydWUpO1xuICB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT47XG4gIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG4gIGRhdGFTb3VyY2U6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcblxuICBkYXRhU291cmNlVHJlZVNlYXJjaDogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuICBwcml2YXRlIF9zZWxlY3RlZExpc3Q6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFFNU0ZsYXROb2RlVHJlZVtdPigpO1xuXG4gIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZ01vcmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgdW50aWxEZXN0cm95TG9hZE1vcmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2Zvcm1lciA9IChub2RlOiBRTVNUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XG4gICAgZmxhdE5vZGUuaWQgPSBub2RlLmlkO1xuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSB8fCBub2RlLmV4cGFuZGFibGU7XG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcbiAgICBmbGF0Tm9kZS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgZmxhdE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xuICAgIGZsYXROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcbiAgICBmbGF0Tm9kZS5kaXNhYmxlZCA9IG5vZGUuZGlzYWJsZWQ7XG4gICAgZmxhdE5vZGUuaXNHcm91cCA9IG5vZGUuaXNHcm91cDtcbiAgICBmbGF0Tm9kZS5ncm91cElkID0gbm9kZS5ncm91cElkO1xuICAgIGZsYXROb2RlLmV4dGVybmFsTmFtZSA9IG5vZGUuZXh0ZXJuYWxOYW1lO1xuICAgIGZsYXROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XG4gICAgZmxhdE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xuICAgIGZsYXROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XG4gICAgZmxhdE5vZGUuZXhwYW5kSWNvbiA9IG5vZGUuZXhwYW5kSWNvbjtcblxuICAgIHRoaXMuZmxhdFRyZWVOb2RlTWFwLnNldChmbGF0Tm9kZSwgbm9kZSk7XG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xuICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0TGV2ZWwgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlPy5sZXZlbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2V0Q2hpbGQgPSAobm9kZTogUU1TVHJlZU5vZGUpID0+IG5vZGUuY2hpbGRyZW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xuICAgIGNoZWNrQWxsU2VhcmNoOiBmYWxzZSxcbiAgICBjaGVja0l0ZW1TZWFyY2g6IGZhbHNlLFxuICAgIGNoZWNrTm9kZTogZmFsc2UsXG4gICAgZXhwYW5kOiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBsb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7XG4gIHNvdXJjZV9vYmplY3QgPSB7fSBhcyBRTVNUcmVlTm9kZTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgZWxlUmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyB0cmFuczogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB0cmVlRGVwYXJ0bWVudFNlcnZpY2U6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZVxuICApIHtcbiAgICAvLyBJbml0IHRyZWUgZGF0YVxuICAgIHRoaXMuZ2V0RGF0YVRyZWUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIC8vIFJlZ2lzdGVyIGljb25cbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuXG4gICAgdGhpcy50cmFucy5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnMuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2hhbmRsZVNlYXJjaEV2ZW50KCk7XG4gICAgdGhpcy5faGFuZGxlQWN0aXZlTm9kZUV2ZW50KCk7XG4gICAgdGhpcy5faGFuZGxlSXRlbVNlbGVjdGlvbkNoYW5nZWQoKTtcblxuICAgIHRoaXMuZ2V0TG9hZGluZyQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIHJlcyA/IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5lbmFibGUoKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldEluZGV4VmlldyQucGlwZShcbiAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm5nVW5zdWJzY3JpYmUsIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSksXG4gICAgICB0YXAoXyA9PiB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRoaXMuY29uZmlnLmxhenkpKSxcbiAgICAgIGRlbGF5KDcwMCksXG4gICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmXG4gICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCksXG4gICAgICAgICAgICAgICAgbWFwKF8gPT4gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykpLFxuICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbeDEsIHgyXSkgPT4geDEgPiB4MiAmJiB4MiA8IDE0MCksXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgdGFwKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TG9hZGluZ01vcmUkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlc3Ryb3lMb2FkTW9yZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZE1vcmVFdmVudC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCB0YXAoXyA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICB0aGlzLl9pbml0VHJlZURhdGEoKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2FjdGlvbiBmb3IgbGF6eSBjb25maWdcbiAgICB0aGlzLl9pbml0TGlzdFNlbGVjdGVkKCk7XG4gICAgdGhpcy5faGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkRlc3Ryb3lMb2FkTW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5uZXh0KCk7XG4gICAgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRUcmVlRGF0YSgpIHtcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcih0aGlzLl90cmFuc2Zvcm1lciwgdGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUsIHRoaXMuX2dldENoaWxkKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XG5cbiAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0ICYmIHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGggPT09IDEgJiYgIXRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXS5pZCkge1xuICAgICAgdGhpcy5jb25maWcudHJlZURhdGEucHVzaCh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3RbMF0pO1xuICAgIH1cblxuICAgIGNvbnN0IF90cmVlRGF0YUlucHV0OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnRyZWVEYXRhKVxuXG4gICAgaWYgKCFfdHJlZURhdGFJbnB1dC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShfdHJlZURhdGFJbnB1dCk7XG5cbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRyZWVEYXRhKTtcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlTGlzdFNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubWFwKHggPT4gKHsgLi4ueCwgcGFyZW50SWQ6IHguZ3JvdXBJZCB9KSkpO1xuXG4gICAgdGhpcy5leGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtczogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgcmVNYXBUcmVlTm9kZSA9IChpdGVtOiBRTVNUcmVlTm9kZSwgY2xlYXJHcm91cElkOiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09IGl0ZW0uaWQpO1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICBub2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XG4gICAgICAgIG5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLm5lc3RlZE5vZGUsXG4gICAgICAgICAgZ3JvdXBJZDogY2xlYXJHcm91cElkID8gbnVsbCA6IGl0ZW0uZ3JvdXBJZCxcbiAgICAgICAgICBpc0dyb3VwOiBpdGVtLmlzR3JvdXAsXG4gICAgICAgICAgY2hpbGRDb3VudDogbmVzdGVkTm9kZS5jaGlsZENvdW50ID8/IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aCxcbiAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmVlTm9kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09IGl0ZW0uaWQpO1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goeyAuLi5yZU1hcFRyZWVOb2RlKGl0ZW0sIHRydWUpLCBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbi5tYXAoeCA9PiByZU1hcFRyZWVOb2RlKHgpKSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRMaXN0U2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0KTtcbiAgICAvL0NvbnZlcnQgYXJyYXkgc2VsZWN0ZWRMaXN0IGludG8gbmVzdGVkIGFycmF5IGFzIDEgbGV2ZWwgZm9ybVxuICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3RbaV07XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKS5maWx0ZXIoeCA9PiB4Lmdyb3VwSWQgPT0gaXRlbS5pZCk7XG4gICAgICBpdGVtLmNoaWxkcmVuID0gcmVzdWx0O1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZEluZGV4KHggPT4gcmVzdWx0LnNvbWUoeDEgPT4geDEuaWQgPT09IHguaWQpKVxuICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgY29udGludWU7XG4gICAgICBpbmRleFJlbW92ZS5wdXNoKGluZGV4KTtcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbHRlcigoXywgaW5kZXgpID0+ICFpbmRleFJlbW92ZS5pbmNsdWRlcyhpbmRleCkpO1xuXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnRoaXMuX3NlbGVjdGVkTGlzdCk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIC8vIGhhbmRsZSBzZWxlY3RlZCBsaXN0IHdoZW4gZGF0YSBub2RlcyBjaGFuZ2VcbiAgcHJpdmF0ZSBfaGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgIHRhcChkYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXRlbS5wYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlKVxuICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBlbGVtZW50LmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeDEgPT4geDEuaWQgPT09IGVsZW1lbnQuaWQpKTtcbiAgICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ID0gZGVzY2VuZGFudHMuZmlsdGVyKHggPT4gaXRlbS5jaGlsZHJlbi5tYXAoeDEgPT4geDEuaWQpLmluY2x1ZGVzKHguaWQpKTtcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbVNlbGVjdC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdC5mb3JFYWNoKF9pdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX25lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoX2l0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5jaGlsZHJlblswXS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5pdGVtU2VsZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2UgZm9yIGxhenkgbW9kZSwgZG8gc29tZSB0aGluZyBiZWZvcmUgaW5pdCBsaXN0IG5vZGUgc2VsZWN0ZWRcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQoY2FsbGJhY2s/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xuICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQubmV4dCgpO1xuICB9XG5cbiAgLy9IYW5kbGUgaXRlbSBzZWxlY3Rpb24gY2hhbmdlZFxuICBwcml2YXRlIF9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5jaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgYWRkZWQsIHJlbW92ZWQgfSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY2hlY2tFeGlzdEluUmVzdWx0ID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSB8IFFNU1RyZWVOb2RlKTogYm9vbGVhbiA9PiB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpID4gLTE7XG4gICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWROb2RlID0gbnVsbDtcblxuICAgICAgICAgIHRoaXMuaXNQdXNoaW5nQ2hpbGROb2Rlcy5lbWl0KHRydWUpO1xuICAgICAgICAgIGNvbnN0IGFsbENoaWxkTm9kZTogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICAgXG4gICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGFsbENoaWxkTm9kZS5wdXNoKHsuLi5ub2RlfSk7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSlcbiAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWROb2RlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC5maW5kKHggPT4geC5pc0dyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0R3JvdXA6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAoc2VsZWN0ZWROb2RlKTtcblxuICAgICAgICAgICAgICBpZiAoISFleGlzdEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhdEV4aXN0R3JvdXAgPSB0aGlzLmdldE5vZGVCeUlkKGV4aXN0R3JvdXAuaWQpO1xuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0R3JvdXAuaWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBSZXN1bHQgJiYgIWdyb3VwUmVzdWx0LmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuaXNHcm91cCA9IGV4aXN0R3JvdXAuaXNHcm91cDtcbiAgICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmNoaWxkcmVuLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzUHVzaGluZ05vZGUoYWxsQ2hpbGROb2RlLCBncm91cFJlc3VsdC5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBSZXN1bHRdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maWx0ZXIoaXRlbSA9PiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShmbGF0RXhpc3RHcm91cCkubWFwKHggPT4geC5pZCkuaW5jbHVkZXMoaXRlbS5pZCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY2hlY2tFeGlzdEluUmVzdWx0KG5vZGUpKXtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKG5lc3RlZE5vZGUpO1xuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCBbbmVzdGVkTm9kZV0pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9IG51bGwpO1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnNwbGljZSh0aGlzLnJlc3VsdFNlbGVjdGVkLmluZGV4T2YoX2l0ZW0pLCAxKTtcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmdyb3VwSWQpO1xuICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgncmVtb3ZlZCcsIFtfaXRlbV0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuY29uY2F0KG5vZGUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgICBjb25zdCBfbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZClcbiAgICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBfbm9kZS5pZCkgJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUoX25vZGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSBncm91cC5jaGlsZHJlbi5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShncm91cC5jaGlsZHJlbi5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5jb25maWcubW92ZUxvY2F0aW9uTW9kZSkge1xuICAgICAgICAgIC8vIGFkZCBzZWxlY3RlZCBub2RlIHRvIGNoZWNrZWQgbm9kZSBpbiBzZWFyY2hcbiAgICAgICAgICBjb25zdCBmaW5kQWxsQ2hpbGRyZW4gPSAocGFyZW50SWQ6IHN0cmluZywgbm9kZXM6IGFueSk6IGFueVtdID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmROb2RlQnlJZChwYXJlbnRJZCwgbm9kZXMpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZE5vZGUgfHwgIWZvdW5kTm9kZT8uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZT8uY2hpbGRyZW47XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGZpbmROb2RlQnlJZCA9IChpZDogc3RyaW5nLCBub2RlczogYW55KTogYW55IHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBpZiAobm9kZS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmROb2RlQnlJZChpZCwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTm9kZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfTtcblxuXG4gICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgICAgICAgIGxldCBzZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xuXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgbGV0IGNoaWxkcmVuT2ZDaGVja2VkTm9kZSA9IFtdO1xuICAgICAgICAgIGNoaWxkcmVuT2ZDaGVja2VkTm9kZSA9IGZpbmRBbGxDaGlsZHJlbih0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZFswXS5pZCwgdGhpcy5jdXJyZW50VHJlZURhdGEpO1xuXG5cbiAgICAgICAgICBzZWxlY3RlZExpc3RbMF0ucGFyZW50SWQgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZFswXS5pZDtcbiAgICAgICAgICBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUudW5zaGlmdChzZWxlY3RlZExpc3RbMF0pO1xuXG4gICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IGNoaWxkcmVuT2ZDaGVja2VkTm9kZS5maWx0ZXIoKHYsIGksIGEpID0+IGEuZmluZEluZGV4KHYyID0+IFsnaWQnLCAncGFyZW50SWQnXS5ldmVyeShrID0+IHYyW2tdID09PSB2W2tdKSkgPT09IGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoc3RhdGU6ICdyZW1vdmVkJyB8ICd1cGRhdGVkJyB8ICdhZGRlZCcsIGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgcmVtb3ZlZDogZGF0YSxcbiAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgdXBkYXRlZDogW10sXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYXRlZCc6XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICB1cGRhdGVkOiBkYXRhLFxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgYWRkZWQ6IGRhdGEsXG4gICAgICAgICAgdXBkYXRlZDogW10sXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNlYXJjaEV2ZW50KCkge1xuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaCA9IFtdO1xuICAgICAgICB0aGlzLkNVUlJFTlRfUEFHRVNJWkUgPSByZXN1bHQucGFnZVNpemU7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMudGV4dFNlYXJjaFN1YmplY3QkLm5leHQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYltdID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgICBsb2NhdGlvbiA9IGl0ZW0ucGF0aD8ubWFwKHggPT4gKHsgbmFtZTogeCB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gbm9kZSA/IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKSA6IFtdO1xuICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhcmVudHMubGVuZ3RoID8gcGFyZW50cy5tYXAoKHgpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKS5yZXZlcnNlKCkgOiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVzdWx0U2VhcmNoLnB1c2goe1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCAhdGhpcy5jb25maWcubGF6eSAmJiB0aGlzLmNvbmZpZy5jaGVja1NlYXJjaE1hcHBpbmdUcmVlICYmICFub2RlLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogW1xuICAgICAgICAgICAgICAgIC4uLmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyQ2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoV2hlbkhhbmRsZSlcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcbiAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKSB7XG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKCh2YWwpID0+IHtcbiAgICAgIGNvbnN0IGRlbGF5VGltaW5nID0gdGhpcy5nZXRJbmRleFZpZXckLnZhbHVlID09PSAxID8gNzAwIDogMDtcbiAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDApO1xuICAgICAgcmV0dXJuIG9mKHZhbCkucGlwZShkZWxheShkZWxheVRpbWluZyksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKTtcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAodmFsID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHZhbDtcbiAgICAgIHJldHVybiB0aW1lcigxNTAwKTtcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9ICctLSc7XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURhdGFUcmVlKGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcbiAgICB0aGlzLmdldERhdGFUcmVlJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgc2V0TG9hZGluZ1N0YXRlTm9kZShpc0xvYWRpbmc6IGJvb2xlYW4sIG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpXG4gICAgICByZXR1cm47XG4gICAgbm9kZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgfVxuXG4gIG9uRXhwYW5kTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBpZiAoIW5vZGU/LmV4cGFuZGFibGUpIHJldHVybjtcbiAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XG4gICAgfVxuICAgIHRoaXMub25FeHBhbmROb2RlRXZlbnQuZW1pdChub2RlKTtcbiAgfVxuXG4gIG9uT3B0aW9uU2VhcmNoU2VsZWN0ZWQodmFsdWU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZCh2YWx1ZS5pZCk7XG4gICAgaWYgKCFmbGF0Tm9kZSkgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xuICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShmbGF0Tm9kZS5pZCk7XG4gIH1cblxuICBvbkNoZWNrQWxsUm9vdFRyZWVOb2RlKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSB8fCAhdGhpcy5jb25maWcuYWN0aXZlU2VsZWN0QWxsTm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCkge1xuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgaWYgKG5vZGUuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4udGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5kaXNhYmxlZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgdGhpcy5kZXBhcnRtZW50Um9vdHMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XG4gICAgICAgIHRoaXMub25DaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwICYmIHRoaXMuaXNDaGVja0FsbChub2RlKSB8fCAhbm9kZS5leHBhbmRhYmxlKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XG4gICAgICBpZiAoIW5lc3RlZE5vZGUuaXNHcm91cCkge1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbW92ZVRvTG9jYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChvLCBmbikgPT4ge1xuICAgICAgZm9yIChjb25zdCBrIGluIG8pIHtcbiAgICAgICAgY29uc3QgcmVzID0gZm4uYXBwbHkodGhpcywgW28sIGtdKTtcblxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAob1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1trXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHRyYXZlcnNlKG9ba10sIGZuKTtcbiAgICAgICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaWNlX3NvdXJjZSA9IChvYmosIHByZWRpY2F0ZSkgPT5cbiAgICAgIHRyYXZlcnNlKFxuICAgICAgICBvYmosXG4gICAgICAgIChvLCBrKSA9PiB7XG4gICAgICAgICAgbGV0IG1faW5kZXggPSAtMTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2tdKSkge1xuICAgICAgICAgICAgbV9pbmRleCA9IG9ba10uZmluZEluZGV4KChvKSA9PiBwcmVkaWNhdGUobywgaykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtX2luZGV4ICE9PSAtMSA/IG9ba10uc3BsaWNlKG1faW5kZXgsIDEpWzBdIDogZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgZmluZF90YXJnZXRfYXJyYXkgPSAob2JqLCBwcmVkaWNhdGUpID0+XG4gICAgICB0cmF2ZXJzZShcbiAgICAgICAgb2JqLFxuICAgICAgICAobywgaykgPT4gKHByZWRpY2F0ZShvLCBrKSA/IG8uY2hpbGRyZW4gOiBmYWxzZSlcbiAgICAgICk7XG5cbiAgICBjb25zdCBmaW5kUGFyZW50ID0gKG5vZGVJZCwgbm9kZXMpID0+IHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuaWQgPT09IG5vZGVJZCkge1xuICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBmaW5kUGFyZW50KG5vZGVJZCwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XG5cbiAgICBjb25zdCBzb3VyY2VfaWQgPSBzZWxlY3RlZExpc3RbMF0uaWQ7XG5cbiAgICAvLyBzb3VyY2UgbXVzdCB0byBoYXZlIGZvciBtb3ZlbWVudFxuICAgIHRoaXMuc291cmNlX29iamVjdCA9IHNwbGljZV9zb3VyY2UodGhpcy5jdXJyZW50VHJlZURhdGEsIChvYmopID0+IG9iaj8uaWQgPT09IHNvdXJjZV9pZCk7XG5cbiAgICBpZiAoIXRoaXMuc291cmNlX29iamVjdCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRUcmVlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jdXJyZW50VHJlZURhdGFbaV07XG4gICAgICAgIGlmIChlbGVtZW50LmlkID09PSBzb3VyY2VfaWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QgPSBlbGVtZW50O1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpLCAxKTs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoaWxkJzpcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpPy5jaGlsZHJlbi51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5pZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRfYXJyYXkgPSBmaW5kX3RhcmdldF9hcnJheSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gbm9kZT8uaWQpO1xuICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUuaWQ7XG4gICAgICAgICAgdGFyZ2V0X2FycmF5LnVuc2hpZnQodGhpcy5zb3VyY2Vfb2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2libGluZyc6XG4gICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuY3VycmVudFRyZWVEYXRhLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpICsgMTtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpZHgsIDAsIHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5X3BhcmVudCA9IGZpbmRfdGFyZ2V0X2FycmF5KHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBwYXJlbnROb2RlPy5pZCk7XG4gICAgICAgICAgY29uc3Qgbm9kZV9pZHggPSB0YXJnZXRfYXJyYXlfcGFyZW50LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgdGFyZ2V0X2FycmF5X3BhcmVudC5zcGxpY2Uobm9kZV9pZHggKyAxLCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICBjb25zdCBuZXdMb2NhdGlvbiA9IGZpbmRQYXJlbnQodGhpcy5zb3VyY2Vfb2JqZWN0LmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IG5ld0xvY2F0aW9uO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBzZXREZXN0aW5hdGlvbkxvY2F0aW9uKG5vZGUsIHR5cGUpIHtcbiAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBub2RlLmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpO1xuICAgIHRoaXMubW92ZVRvTG9jYXRpb24odHJlZU5vZGUsIHR5cGUpO1xuICB9XG5cblxuICBvbkNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGZpcmVFdmVudENoZWNrTm9kZTogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSByZXR1cm47XG5cbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5kaXNhYmxlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZmlyZUV2ZW50Q2hlY2tOb2RlKVxuICAgICAgdGhpcy5vbkNoZWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSkge1xuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVUcmVlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IG5vZGVJZCk7XG4gICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoaWQ6IHN0cmluZywgLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaWQpO1xuICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghbm9kZVRyZWUpIHtcbiAgICAgIHRoaXMuZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICBleHRlcm5hbE5hbWU6IGl0ZW0uZXh0ZXJuYWxOYW1lLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9IGFzIFFNU1RyZWVOb2RlXTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICByZVNlbGVjdFNlbGVjdGlvbihub2RlSWQsIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKSk7XG4gICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3sgLi4ubmVzdGVkTm9kZSwgY2hpbGRyZW46IFtdIH1dO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgcmVTZWxlY3RTZWxlY3Rpb24obmVzdGVkTm9kZS5pZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcbiAgfVxuXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XG4gICAgaWYgKHBhcmVudHM/Lmxlbmd0aCkge1xuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHBhcmVudCkpXG4gICAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGUocGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XG4gICAgICBpZiAoIWl0ZW0pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdCgncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xuICB9XG5cbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcbiAgICBpZiAoIW5vZGVzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4ubm9kZXMpO1xuICB9XG5cbiAgb25EZXNlbGVjdE5vZGUoLi4ubm9kZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLm5vZGVzKTtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlcyBhIHZhbHVlIGJldHdlZW4gc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcbiAgICovXG4gIG9uVG9nZ2xlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgfVxuXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gICAgcmV0dXJuICghIWNoaWxkU2VsZWN0ZWQubGVuZ3RoICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcbiAgICByZXR1cm4gbGlzdENoZWNrLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGUgY2hlY2sgbm9kZSBvZiB0cmVlXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgZG8gc29tZXRoaW5nIGJlZm9yZSBoYW5kbGUgY2hlY2sgbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgb25CZWZvcmVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBjYWxsYmFjaz86IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IHRydWU7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXG4gICAgICBjb25zdCBhbGxQYXJlbk5vZGVJZHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkubWFwKHggPT4geC5pZCk7XG4gICAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlzR3JvdXAgJiYgYWxsUGFyZW5Ob2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XG4gICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cD8uaWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHgpO1xuICAgICAgICBfbm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwID8gZXhpc3RlZEdyb3VwLmlkIDogbm9kZS5pZDtcbiAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbi5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBfc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICBfc2VsZWN0ZWRJbmRleCA+IC0xICYmIHRoaXMuX3NlbGVjdGVkTGlzdC5zcGxpY2UoX3NlbGVjdGVkSW5kZXgsIDEpO1xuICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNlbGVjdE5vZGVzKTtcbiAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIG5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgfVxuXG4gIGdldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgdGhlIGRhdGEgbm9kZSdzIHN1YnRyZWUgb2YgZGVzY2VuZGVudCBkYXRhIG5vZGVzLlxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKGZsYXROb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xuICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcbiAgfVxuXG4gIGNvbnZlcnRUb05lc3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TVHJlZU5vZGUge1xuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XG4gIH1cblxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLmdldChub2RlKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIGNvbnN0IGxpc3RQYXJlbnQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdFBhcmVudDtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSByZXR1cm47XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xuICAgIGlmICghIWl0ZW0uaXRlbUljb25TdmcpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5zdmc7XG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbEludG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcbiAgICB0aGlzLm9uRXhwYW5kTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XG4gICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgfVxuXG4gIG9uU2VhcmNoKCkge1xuICAgIGlmICghdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSB8fCB0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlPy50cmltKCkgPT09ICcnKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnNldEluZGV4VmlldygxKTtcbiAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMucGFnaW5hdG9yU2VhcmNoLmNoYW5nZVBhZ2UoMCk7XG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcbiAgfVxuXG4gIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCQubmV4dChkYXRhKTtcbiAgfVxuXG4gIG9uQ2xpY2tSZXN1bHRJdGVtKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvTm9kZShub2RlLmlkKTtcbiAgICB9XG4gIH1cblxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGlmIChpdGVtLmRpc2FibGVkIHx8IHRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi50aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGl0ZW0uaWQpKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBhc3luYyBvbkJlZm9yZUNoZWNrSXRlbVNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIGNhbGxiYWNrPzogKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XG4gICAgLy8gaG9sZCBzdGF0ZSBiZWZvcmUgY2FsbCBtZXRob2QgY2FsbGJhY2sgdG8gcHJldmVudCBsb3N0IGl0J3Mgc3RhdGUgdW5leHBlY3RlZFxuICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhpdGVtKTtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xuICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgYXdhaXQgY2FsbGJhY2sodGhpcy5yZXN1bHRTZWFyY2gpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XG4gICAgaWYgKCEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgdGhpcy5yZXN1bHRTZWFyY2guZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xuICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIHN0YXRlOiBib29sZWFuID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCkpIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgIGlmICghIWN1cnJlbnROb2RlKSB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY3VycmVudE5vZGUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoaXRlbS5pZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdChzdGF0ZSA/ICdhZGQnIDogJ3JlbW92ZScsIGl0ZW0sIHRoaXMuX3NlbGVjdGVkTGlzdCwgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBpc1NlbGVjdEl0ZW1TZWFyY2goaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlOiAnYWRkJyB8ICdyZW1vdmUnLCBpdGVtOiBRTVNUcmVlTm9kZSwgLi4uc2VsZWN0ZWRMaXN0czogUU1TVHJlZU5vZGVbXVtdKSB7XG4gICAgaWYgKCFpdGVtKVxuICAgICAgcmV0dXJuO1xuICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xuICAgICAgY29uc3QgaXRlbUV4aXN0ZWQgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmdyb3VwSWQpO1xuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5jaGlsZHJlbi5zb21lKHgxID0+IHgxLmlkID09PSBpdGVtLmlkKSk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZWN0ZWRMaXN0LnNwbGljZShzZWxlY3RlZExpc3QuaW5kZXhPZihpdGVtRXhpc3RlZCksIDEpO1xuICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3Rpb25TZWFyY2ggPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gaXRlbUV4aXN0ZWQuaWQpO1xuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uU2VsZWN0QWxsU2VhcmNoUmVzdWx0KGNoZWNrZWQpIHtcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuY29uZmlnLmhhbmRsZUNoZWNrQWxsSXRlbVNlYXJjaCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGNvbnN0IGNhblNlbGVjdCA9ICghIXRyZWVOb2RlIHx8IHRoaXMuY29uZmlnLmxhenkpO1xuICAgICAgICAgIGlmICghY2FuU2VsZWN0KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IF9pdGVtU2VsZWN0aW9ucyA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGlmIChfaXRlbVNlbGVjdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4uX2l0ZW1TZWxlY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkgfHwgIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaClcbiAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtLCBjaGVja2VkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQWxsSXRlbVNlYXJjaEV2ZW50LmVtaXQoY2hlY2tlZCk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVjYm94QWxsU2VhcmNoKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHguZGlzYWJsZWQpO1xuICB9XG5cbiAgb25QYWdpbmdTZWFyY2hSZXN1bHQodmFsOiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5vblBhZ2luZ1NlYXJjaEV2ZW50LmVtaXQodmFsKTtcbiAgfVxuXG4gIHNjcm9sbFRvTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgfVxuXG4gIHNldEluZGV4VmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ID09PSAxICYmIHRoaXMuY29uZmlnLnJlc2V0VG9nZ2xlSW5jbHVkZUNoaWxkV2hlbkNoYW5nZVZpZXcpIHtcbiAgICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5nZXRJbmRleFZpZXckLm5leHQoaW5kZXgpO1xuICB9XG5cbiAgY2FuQWN0aXZlTm9kZUV4dGVybmFsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICByZXR1cm4gIWFsbFBhcmVudCB8fCBhbGxQYXJlbnQuZXZlcnkoaXRlbSA9PiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpO1xuICB9XG5cbiAgZ2V0SGVpZ2h0U3R5bGVSZWZOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZUVsZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLm1hdC10cmVlLW5vZGUjbWF0LW5vZGUtJHtub2RlSWR9YCkgYXMgRWxlbWVudDtcbiAgICByZXR1cm4gYCR7bm9kZUVsZT8uY2xpZW50SGVpZ2h0IHx8IDB9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZVN0b3JhZ2Uobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0ZWROb2RlJywgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICB9XG5cbiAgc2V0RGVmYXVsdFBhZ2luYXRvclNpemUob3B0aW9uczogbnVtYmVyW10pIHtcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBvcHRpb25zO1xuICB9XG5cbiAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgLyoqXG4gICAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZSBmb3IgbGF6eSBsb2FkIGNoaWxkcmVuIG9mIG5vZGVcbiAgICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdXBkYXRlLiBpZiBub2RlIGlzIG51bGwgZGF0YSBhdXRvIGluc2VydCBhcyByb290c1xuICAgICAgICogQHBhcmFtIGRhdGEgbGlzdCBjaGlsZHJlbiB0byB1cGRhdGUgbm9kZS5cbiAgICAgICAqIEBwYXJhbSBtb2RlIGRlZmF1bHQgaXMgdXBkYXRlIHRoYXQgcmVwbGFjZSBjdXJyZW50IGxpc3QgY2hpbGRyZW4gYnkgbmV3IGxpc3QgY2hpbGRyZW4gLCBpZiBtb2RlID0gJ2luc2VydCcgd2lsbCBpbnNlcnQgbmV3IHZhbHVlcyB0byBsaXN0IGNoaWxkcmVuIGV4aXN0ZWQgYmVmb3JlLlxuICAqL1xuICB1cGRhdGVDaGlsZE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10sIG1vZGU6ICdpbnNlcnQnIHwgJ3VwZGF0ZScgPSAndXBkYXRlJykge1xuICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgIGNvbnN0IGRhdGFOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpLmZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IG5vZGUuaWQpO1xuICAgIGlmICghbmVzdGVkTm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgJ2luc2VydCc6XG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4ucHVzaCguLi5kYXRhTm9kZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBkYXRhTm9kZXM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICBjb25zdCBfbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZS5pZCk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKF9ub2RlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkW2ldO1xuICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGl0ZW0uaWQpO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcbiAgICAgIGlmICghZGVzY2VuZGFudHMubGVuZ3RoKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGVzY2VuZGFudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkZXNjZW5kYW50c1tqXTtcbiAgICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGNoaWxkLmlkKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQoW19ub2RlLCAuLi5ub2Rlc10pO1xuICB9XG5cbiAgLy9yZS1zZWxlY3Qgd2hlbiB1cGRhdGUgY2hpbGRyZW4gb2Ygbm9kZVxuICBwcml2YXRlIF9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGV4aXN0SW5TZWxlY3Rpb24gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PSBub2RlLmlkKTtcbiAgICBpZiAoZXhpc3RJblNlbGVjdGlvbilcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGV4aXN0SW5TZWxlY3Rpb24pO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgfVxuXG4gIGNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGFsbFBhcmVudFtpXTtcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhwYXJlbnQpO1xuICAgICAgcGFyZW50LmlzTG9hZGluZyA9IGRlc2NlbmRhbnRzLnNvbWUoeCA9PiB4LmlzTG9hZGluZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpZCkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Um9vdE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhbGxQYXJlbnQucG9wKCk7XG4gIH1cblxuICBhZGRSb290VHJlZShkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdKSB7XG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0cmVlTm9kZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKTtcbiAgICAvLyByZS1jaGVjayByb290IHdhcyBleGlzdGVkIGluIHRyZWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWVOb2RlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlRGF0YVtpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgaWYgKCEhbm9kZSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChkYXRhKTtcbiAgfVxuXG4gIGdldENoZWNrZWRTdGF0dXNOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIHJldHVybiB0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpO1xuICB9XG5cbiAgdXBkYXRlTm9kZUluZm9ybWF0aW9uKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGxldCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgIGlmICghbmVzdGVkTm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICBuZXN0ZWROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XG4gICAgbmVzdGVkTm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcbiAgICBuZXN0ZWROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFJlc3VsdERhdGEobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3Qgbm9kZVJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCgoeCkgPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgaWYgKG5vZGVSZXN1bHQpIHtcbiAgICAgIG5vZGVSZXN1bHQuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICAgIG5vZGVSZXN1bHQuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XG4gICAgfVxuICB9XG5cbiAgY2FsbENoZWNrTm9kZU91dHNpZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIC8vdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudChhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlO1xuICAgIGFjdGlvbigpO1xuICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlO1xuICB9XG5cbiAgaXNEaXNhYmxlZE5vZGUgPSAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09IG5vZGVJZCk/LmRpc2FibGVkO1xuXG4gIGlzUHVzaGluZ05vZGUoYWxsQ2hpbGROb2RlOiBRTVNUcmVlTm9kZVtdLGNvdW50Q2hpbGRyZW5QdXNoaW5nPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5pc1B1c2hpbmdDaGlsZE5vZGVzLmVtaXQodHJ1ZSk7XG4gICAgaWYgKGFsbENoaWxkTm9kZT8ubGVuZ3RoID09IGNvdW50Q2hpbGRyZW5QdXNoaW5nKSB7XG4gICAgICB0aGlzLmlzUHVzaGluZ0NoaWxkTm9kZXMuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
1340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWtCdkcsTUFBTSxPQUFPLDZCQUE2QjtJQW1JeEMsWUFDVSxLQUF3QixFQUN4QixZQUEwQixFQUMxQixjQUFzQyxFQUN0QyxZQUE2QixFQUM3QixNQUFrQixFQUNuQixLQUE4QixFQUM5QixPQUFnQixFQUNoQixnQkFBa0MsRUFDakMscUJBQTJEO1FBUjNELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQztRQTFJNUQsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUkxQixXQUFNLEdBQVcsTUFBTSxDQUFDO1FBQ3hCLFdBQU0sR0FBa0MsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQzVFLGlCQUFZLEdBQVcsR0FBRyxDQUFDO1FBQ3BDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQWV6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUN2RCw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUNqRixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN2RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0MsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7UUFDbkcsOEJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN4RCw0QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3RELHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFLbkQsbUJBQWMsR0FBRywyQkFBMkIsQ0FBQztRQUN0RCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ04sa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzdDLHlCQUFvQixHQUFrQixFQUFFLENBQUM7UUFDekMsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUE0QyxJQUFJLHdCQUF3QixFQUFtQixDQUFDLENBQUM7UUFDN0ksaUJBQVksR0FBa0MsRUFBRSxDQUFDO1FBY3hDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUMzQyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3JELGVBQVUsR0FBVyxJQUFJLENBQUM7UUFFakIsb0JBQWUsR0FBRyxjQUFjLENBQUM7UUFDMUMscUJBQWdCLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUM1RCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQzFELHVCQUFrQixHQUFHLElBQUksY0FBYyxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUMvRCw2QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsSUFBSSxDQUFDLENBQUM7UUFNbEYsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBQ3pCLHFDQUFnQyxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBRXJGLHNCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzVDLDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUQsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDWCxpQkFBWSxHQUFHLENBQUMsSUFBaUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2RSxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzVHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMxQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdEMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN0RCxRQUFRLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1lBQzVFLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDcEUsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBRXRDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMzQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUE7UUFFZ0IsYUFBUSxHQUFHLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssQ0FBQztRQUNsRCxjQUFTLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pELGlCQUFZLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNFLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWhELHdCQUFtQixHQUF1QjtZQUN6RCxjQUFjLEVBQUUsS0FBSztZQUNyQixlQUFlLEVBQUUsS0FBSztZQUN0QixTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUE7UUFFTyw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxFQUFpQixDQUFDO1FBMHdDbEMsbUJBQWMsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLDBDQUFFLFFBQVEsQ0FBQSxFQUFBLENBQUM7UUE1dkN4RyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLFlBQVk7YUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNsQixPQUFPO1lBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxnQkFBZ0I7UUFDaEIsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxjQUFjLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25FLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEUsY0FBYyxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RCxjQUFjLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBMUtELElBQWEsWUFBWSxDQUFDLEtBQWE7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUtELElBQUksZUFBZTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDbkIsT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksOEJBQThCO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUEwQkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQsSUFBSSx5QkFBeUI7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakosQ0FBQztJQXFIRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNyRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQ1YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFDYixJQUFJLENBQUMsd0JBQXdCO29CQUMzQixJQUFJLENBQUMsd0JBQXdCLENBQUMsbUJBQW1CO3lCQUM5QyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDckUsUUFBUSxFQUFFLEVBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUN6QyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDTixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSzs0QkFDNUIsT0FBTzt3QkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7NEJBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDOzRCQUN6QixPQUFPO3lCQUNSO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQyxDQUFDLENBQUMsQ0FBQzt5QkFDSixTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBQ0Qsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFrQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxNQUFNLGNBQWMsR0FBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTNFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUN4QixPQUFPO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUNsQyxPQUFPO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGlDQUFNLENBQUMsS0FBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBRyxDQUFDLENBQUMsQ0FBQztRQUVuSSxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sYUFBYSxHQUFrQixFQUFFLENBQUM7WUFDeEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFpQixFQUFFLGVBQXdCLEtBQUssRUFBRSxFQUFFOztnQkFDekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLHVDQUNLLFVBQVUsS0FDYixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNyQixVQUFVLEVBQUUsTUFBQSxVQUFVLENBQUMsVUFBVSxtQ0FBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUM1RSxRQUFRLEVBQUUsRUFBRSxJQUNiO1lBQ0gsQ0FBQyxDQUFBO1lBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxJQUFJO29CQUNQLE9BQU87Z0JBQ1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxhQUFhLENBQUMsSUFBSSxpQ0FBTSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFHLENBQUM7WUFDM0csQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUYsOERBQThEO1FBQzlELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNsRixJQUFJLEtBQUssR0FBRyxDQUFDO2dCQUNYLFNBQVM7WUFDWCxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCw4Q0FBOEM7SUFDdEMsK0JBQStCO1FBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdDQUFnQztpQkFDbEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO29CQUM1QixPQUFPO2dCQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3ZDLElBQUksSUFBSTs0QkFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7cUJBQ2pDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLEtBQUksTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFBLEVBQUEsQ0FBQyxDQUFDO29CQUMvRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUU7d0JBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxJQUFJOzRCQUNQLFNBQVM7d0JBQ1gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNsRCxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ2xDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTs0QkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQ0FDdkIsU0FBUzs0QkFDWCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUMxRixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07Z0NBQ3BCLFNBQVM7NEJBQ1gsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQ0FDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUNwRCxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dDQUMvQyxXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDOUIsQ0FBQyxDQUFDLENBQUM7NEJBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO3lCQUMvQztxQkFDRjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKLFNBQVMsRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDRyx3QkFBd0IsQ0FBQyxRQUFxQzs7WUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtnQkFDbkIsT0FBTztZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBQ1osTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEMsQ0FBQztLQUFBO0lBRUQsK0JBQStCO0lBQ3ZCLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLHlCQUF5QjtnQkFDaEMsT0FBTztZQUNULE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFtQyxFQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUV4QixNQUFNLFlBQVksR0FBa0IsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyQztnQkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQixZQUFZLENBQUMsSUFBSSxtQkFBSyxJQUFJLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxVQUFVLEdBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzVFLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDOzZCQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNsRCxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7NEJBQ2xDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDbEMsT0FBTyxVQUFVLENBQUM7d0JBQ3BCLENBQUMsQ0FBQzs2QkFDRCxPQUFPLEVBQUU7NkJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUN6QjtvQkFDRCxVQUFVLENBQUMsR0FBRyxFQUFFOzt3QkFDZCxVQUFVLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTs0QkFDbkIsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO3dCQUNsRSxNQUFNLFVBQVUsR0FBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFFMUQsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFOzRCQUNoQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDdkQsVUFBVSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDOzRCQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUMxRSxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0NBQzFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQ0FDekMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0NBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQUEsV0FBVyxDQUFDLFFBQVEsMENBQUUsTUFBTSxDQUFDLENBQUM7NkJBQ2hFOzRCQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN4SixPQUFPO3lCQUNSO3dCQUNELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUM7NEJBQzNCLE9BQU87eUJBQ1I7d0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ04sT0FBTztnQkFDVCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO3dCQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsS0FBSzs0QkFBRSxPQUFPO3dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLEtBQUs7NEJBQUUsT0FBTzt3QkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMxQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO3dCQUN2QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUM5RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RCxJQUFJLENBQUMsS0FBSztnQ0FBRSxPQUFPOzRCQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7eUJBQ3REO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2pGLDhDQUE4QztnQkFDOUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEtBQVUsRUFBUyxFQUFFO29CQUM5RCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsUUFBUSxDQUFBLEVBQUU7d0JBQ3RDLE9BQU8sRUFBRSxDQUFDO3FCQUNYO29CQUNELE9BQU8sU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFFBQVEsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBVSxFQUFFLEtBQVUsRUFBbUIsRUFBRTtvQkFDL0QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7d0JBQ3hCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQ2xCLE9BQU8sSUFBSSxDQUFDO3lCQUNiO3dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs0QkFDakIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ2xELElBQUksU0FBUyxFQUFFO2dDQUNiLE9BQU8sU0FBUyxDQUFDOzZCQUNsQjt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDO2dCQUdGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFMUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO29CQUFFLE9BQU87Z0JBQ2pDLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixxQkFBcUIsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUc1RyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRS9DLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN6STtZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDJCQUEyQixDQUFDLEtBQXNDLEVBQUUsSUFBbUI7UUFDN0YsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztvQkFDakMsT0FBTyxFQUFFLElBQUk7b0JBQ2IsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO2lCQUN0RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCxLQUFLLEVBQUUsRUFBRTtvQkFDVCxPQUFPLEVBQUUsSUFBSTtvQkFDYixNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQ3RELENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxFQUFFO29CQUNYLEtBQUssRUFBRSxJQUFJO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDdEQsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUjtnQkFDRSxPQUFPO1NBQ1Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUI7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztvQkFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZDLElBQUksUUFBUSxHQUFtQyxFQUFFLENBQUM7b0JBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7d0JBQ3BCLFFBQVEsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQW1DLENBQUEsQ0FBQyxLQUFJLEVBQUUsQ0FBQztxQkFDckY7eUJBQ0k7d0JBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEQsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQzlDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTs0QkFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7eUJBQ29CLENBQUEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7cUJBQ3BEO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxpQ0FDakIsSUFBSSxLQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLElBQUksRUFDM0YsUUFBUSxFQUFFOzRCQUNSLEdBQUcsUUFBUTs0QkFDWDtnQ0FDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJOzZCQUNoQjt5QkFDRixFQUNELFNBQVMsRUFBRSxLQUFLLElBQ2hCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHVDQUF1QztvQkFDckQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzRSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQzthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFtQjtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBa0IsRUFBRSxNQUFjO1FBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFDUCxPQUFPO1FBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBcUI7UUFDaEMsSUFBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFVBQVUsQ0FBQTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNwRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFzQjtRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7WUFDN0QsT0FBTztRQUNULElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFDZixPQUFPO2dCQUNULE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RixPQUFPO1NBQ1I7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFDZixPQUFPO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM1RCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDakUsT0FBTztZQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7aUJBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsT0FBTzthQUNSO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXFCLEVBQUUsSUFBWTs7UUFDaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDekIsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5DLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sR0FBRyxDQUFDO2lCQUNaO2dCQUNELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUU7b0JBQzVDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQy9CLElBQUksR0FBRzt3QkFBRSxPQUFPLEdBQUcsQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUMsQ0FBQTtRQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQ3ZDLFFBQVEsQ0FDTixHQUFHLEVBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDUCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFFRCxPQUFPLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVQLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDM0MsUUFBUSxDQUNOLEdBQUcsRUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ2pELENBQUM7UUFFSixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFO29CQUN0QixPQUFPLEtBQUssQ0FBQztpQkFDZDtxQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwRCxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsT0FBTyxNQUFNLENBQUM7cUJBQ2Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFBO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFckMsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEVBQUUsTUFBSyxTQUFTLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO29CQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUEsQ0FBQztpQkFDcEM7YUFDRjtTQUNGO1FBRUQsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixNQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLDBDQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUN2QztxQkFBTTtvQkFDTCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxFQUFFLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEVBQUUsQ0FBQSxDQUFDLENBQUM7b0JBQzVGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMxQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN6RDtxQkFBTTtvQkFDTCxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEVBQUUsT0FBSyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsRUFBRSxDQUFBLENBQUMsQ0FBQztvQkFDekcsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzVDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ2pFO2dCQUNELE1BQU07WUFFUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUdELFdBQVcsQ0FBQyxJQUFxQixFQUFFLHFCQUE4QixJQUFJO1FBRW5FLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBRXpDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDeEIsT0FBTztRQUNULElBQUksa0JBQWtCO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFO1lBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3BHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUM3RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsRUFBVSxFQUFFLEdBQUcsTUFBNkIsRUFBUSxFQUFFO1lBQy9FLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3pCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUM7d0JBQ3JCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQy9CLFFBQVEsRUFBRSxFQUFFO3FCQUNFLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQ0FBTSxVQUFVLEtBQUUsUUFBUSxFQUFFLEVBQUUsSUFBRyxDQUFDO1lBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBcUI7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sRUFBRTtZQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJO2dCQUNQLE9BQU87WUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQUcsT0FBaUI7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDZixPQUFPO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBRyxPQUFpQjtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNmLE9BQU87UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxNQUFjO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFDUCxPQUFPO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQXFCO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBcUI7UUFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0csaUJBQWlCLENBQUMsSUFBcUIsRUFBRSxRQUEwRDs7WUFDdkcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVELGVBQWUsQ0FBQyxJQUFxQjtRQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxzQkFBc0I7WUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVoRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMzQixVQUFVLENBQUMsT0FBTyxHQUFHLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxFQUFFLENBQUE7Z0JBQ3JDLE9BQU87YUFDUjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRSxVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDbEIsT0FBTztZQUNULFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87U0FDUjtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0UsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDbkQsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekMsT0FBTztJQUNULENBQUM7SUFFTyxTQUFTLENBQUMsSUFBcUI7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXFCO1FBQ2xDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQXFCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLElBQXFCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQ1gsT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxZQUErQjtRQUMxRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFpQixDQUFDO0lBQzdELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXFCO1FBQ3BDLE1BQU0sVUFBVSxHQUFzQixFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxPQUFPLE1BQU0sRUFBRTtZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQXFCO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxZQUFZLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLEVBQUU7Z0JBQzdDLE9BQU8sV0FBVyxDQUFDO2FBQ3BCO1NBQ0Y7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFxQjtRQUNuQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQ3JELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUNuRCxPQUFPO0lBQ1QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0I7WUFDaEMsT0FBTztRQUNULElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVE7O1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLDBDQUFFLElBQUksRUFBRSxNQUFLLEVBQUU7WUFDOUUsT0FBTztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUN2QixPQUFPO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBK0M7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBaUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFrQztRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWlDO1FBQ3ZELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMzQixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hIO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDOUI7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDckQsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU87YUFDUjtZQUNELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUssdUJBQXVCLENBQUMsSUFBaUMsRUFBRSxRQUFzRTs7WUFDckksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDaEQsK0VBQStFO1lBQy9FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVLLHNCQUFzQixDQUFDLFFBQXlDOztZQUNwRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMvQyxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUNaLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUMzQixPQUFPO1lBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDO0tBQUE7SUFFRCx5QkFBeUIsQ0FBQyxJQUFpQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztnQkFDL0IsTUFBTSx1QkFBdUIsR0FBRyxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFJLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztnQkFDNUgsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsSUFBaUMsRUFBRSxRQUFpQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDakIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztvQkFDakQsT0FBTztnQkFDVCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2xELE1BQU0sVUFBVSxHQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNuRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDN0M7YUFDRjtpQkFDSTtnQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUF1QixFQUFFLElBQWlCLEVBQUUsR0FBRyxhQUE4QjtRQUN2RyxJQUFJLENBQUMsSUFBSTtZQUNQLE9BQU87UUFDVCxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RCxRQUFRLEtBQUssRUFBRTtnQkFDYixLQUFLLEtBQUs7b0JBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNoQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3pCO3dCQUNELENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekUsT0FBTztxQkFDUjtvQkFDRCxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QyxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNoQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMvRSxJQUFJLENBQUMsS0FBSzs0QkFDUixPQUFPO3dCQUNULE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzlELElBQUksS0FBSyxHQUFHLENBQUM7NEJBQ1gsT0FBTzt3QkFDVCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLE9BQU87cUJBQ1I7b0JBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RHLG1CQUFtQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDbkYsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFPO1FBQzdCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU87UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUU7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRO29CQUNmLFNBQVM7Z0JBQ1gsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzlFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsU0FBUzt3QkFDWixTQUFTO29CQUNYLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvRjtxQkFDSTtvQkFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3RixJQUFJLGVBQWUsQ0FBQyxNQUFNO3dCQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7aUJBQzlEO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjO29CQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Y7UUFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFjO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLDJCQUEyQixNQUFNLEVBQUUsQ0FBWSxDQUFDO1FBQ3hHLE9BQU8sR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLEtBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBb0IsQ0FBQztJQUM3RSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBcUI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBaUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUFxQjtRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7TUFLRTtJQUNGLGlCQUFpQixDQUFDLElBQXFCLEVBQUUsT0FBMEIsRUFBRSxFQUFFLE9BQTRCLFFBQVE7UUFDekcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFVBQVU7WUFDYixPQUFPO1FBQ1QsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLFFBQVE7Z0JBQ1gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxVQUFVLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixTQUFTO1lBQ1gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUN0QztTQUNGO1FBQ0QsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxzQkFBc0IsQ0FBQyxNQUFjO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuRCxPQUFPO1FBQ1QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksZ0JBQWdCO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFxQjtRQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ25CLE9BQU87UUFDVCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDOUUsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFxQjtRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ25CLE9BQU8sU0FBUyxDQUFDO1FBQ25CLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBMEIsRUFBRTtRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDZCxPQUFPO1FBQ1QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLG9DQUFvQztRQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsSUFBSTtnQkFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQXFCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxVQUFVLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1FBQzlFLFVBQVUsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDeEUsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQXFCO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQXFCO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsNkJBQTZCO0lBQy9CLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxNQUFrQjtRQUN2RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBSUQsYUFBYSxDQUFDLFlBQTJCLEVBQUUsb0JBQTZCO1FBQ3RFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxNQUFNLEtBQUksb0JBQW9CLEVBQUU7WUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7OztZQTE1Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLG90Z0JBQXNEO2dCQUV0RCxVQUFVLEVBQUU7b0JBQ1YsdUJBQXVCO2lCQUN4QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXRDa0UsaUJBQWlCO1lBSzNFLFlBQVk7WUFPWixzQkFBc0I7WUFWdEIsZUFBZTtZQUZ5RSxVQUFVO1lBV2xHLHVCQUF1QjtZQWR2QixPQUFPO1lBRzZJLGdCQUFnQjtZQXFCcEssb0NBQW9DOzs7MkJBc0IxQyxLQUFLO3FCQUdMLEtBQUs7cUJBQ0wsS0FBSzsyQkFDTCxLQUFLOzRCQWdCTCxNQUFNO2tDQUNOLE1BQU07aUNBQ04sTUFBTTt1Q0FDTixNQUFNOytCQUNOLE1BQU07Z0NBQ04sTUFBTTs4QkFDTixNQUFNO3FDQUNOLE1BQU07d0NBQ04sTUFBTTtzQ0FDTixNQUFNO2tDQUNOLE1BQU07dUNBRU4sU0FBUyxTQUFDLHdCQUF3Qjs4QkFDbEMsU0FBUyxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgcGFpcndpc2UsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFFNU0ZsYXROb2RlVHJlZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2l6ZSwgUU1TUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLXBhZ2luYXRvcic7XG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IEFuaW1hdGlvblRyZWVEZXBhcnRtZW50IH0gZnJvbSAnLi9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bSB9IGZyb20gJy4vZW51bS9tb2RlLWRlcGFydG1lbnQtdHJlZS12aWV3LmVudW0nO1xuaW1wb3J0IHsgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXBhZ2luZy5tb2RlbCc7XG5pbXBvcnQgeyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iLCBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtc2VhcmNoLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UgfSBmcm9tICcuL21vZGVsL3NlbGVjdGlvbi1jaGFuZ2UubW9kZWwnO1xuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUtZ2xvYmFsLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSUhhbmRsaW5nRXZlbnRMYXp5IHtcbiAgY2hlY2tBbGxTZWFyY2g6IGJvb2xlYW47XG4gIGNoZWNrSXRlbVNlYXJjaDogYm9vbGVhbjtcbiAgY2hlY2tOb2RlOiBib29sZWFuO1xuICBleHBhbmQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICBBbmltYXRpb25UcmVlRGVwYXJ0bWVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBMQU5HOiBhbnk7XG4gIHJlYWRvbmx5IHNwaW5uZXJBcnIgPSBuZXcgQXJyYXkoMTIpLmZpbGwoMCk7XG4gIGFyclNrZWxldG9uID0gbmV3IEFycmF5KDYpLmZpbGwoMCk7XG4gIEBJbnB1dCgpIHNldCByb3dzU2tlbGV0b24odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuYXJyU2tlbGV0b24gPSBuZXcgQXJyYXkodmFsdWUpLmZpbGwoMCk7XG4gIH1cbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNTB2aCc7XG4gIEBJbnB1dCgpIGNvbmZpZzogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgPSBuZXcgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcoKTtcbiAgQElucHV0KCkgbWF4V2lkdGhOb2RlOiBudW1iZXIgPSA2NTA7XG4gIGlzSW5jbHVkZUNoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XG4gIGdldCBkZXBhcnRtZW50Um9vdHMoKSB7XG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKVxuICAgICAgcmV0dXJuO1xuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIobm9kZSA9PiBub2RlLmxldmVsID09PSAwKTtcbiAgfVxuXG4gIGdldCBpc0FsbERlcGFydG1lbnRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnRyZWVDb250cm9sICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmV2ZXJ5KG5vZGUgPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XG4gIH1cblxuICBnZXQgaXNJbmRldGVybWluYXRlQ2hlY2tib3hBbGxUcmVlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uUGFnaW5nU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uVmFsdWVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TVHJlZU5vZGVbXT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+PigpO1xuICBAT3V0cHV0KCkgb25DaGVja05vZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TRmxhdE5vZGVUcmVlPigpO1xuICBAT3V0cHV0KCkgb25FeHBhbmROb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgQE91dHB1dCgpIG9uTG9hZE1vcmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhdGU6IGJvb2xlYW4sIGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCB9PigpO1xuICBAT3V0cHV0KCkgb25DaGVja0FsbEl0ZW1TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHRvZ2dsZUluY2x1ZGVDaGlsZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaXNQdXNoaW5nQ2hpbGROb2RlcyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvclNlYXJjaCcpIHBhZ2luYXRvclNlYXJjaDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xuICBJVEVNX1NJWkUgPSA1MDtcbiAgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlc3VsdFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlYWRvbmx5IGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xuICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcbiAgcmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xuXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVRyZWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xuICB9XG5cbiAgZ2V0IGluZGV0ZXJtaW5hdGVTZWFyY2hSZXN1bHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNjcm9sbFRvTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZ2V0QWN0aXZlTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJy0tJztcblxuICByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSBQYWdpbmF0aW9uU2l6ZTtcbiAgUEFHRV9TSVpFX09QVElPTjogbnVtYmVyW10gPSBbNSwgMTAsIDE1LCAyMCwgMjUsIDEwMF07XG4gIENVUlJFTlRfUEFHRVNJWkU6IG51bWJlciA9IDEwO1xuICByZWFkb25seSBuZXN0ZWRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgcmVhZG9ubHkgZmxhdFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNGbGF0Tm9kZVRyZWUsIFFNU1RyZWVOb2RlPigpO1xuICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8UU1TRmxhdE5vZGVUcmVlPih0cnVlKTtcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoID0gbmV3IFNlbGVjdGlvbk1vZGVsPERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbD4odHJ1ZSk7XG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPjtcbiAgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcbiAgZGF0YVNvdXJjZTogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuXG4gIGRhdGFTb3VyY2VUcmVlU2VhcmNoOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG4gIHByaXZhdGUgX3NlbGVjdGVkTGlzdDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UU1TRmxhdE5vZGVUcmVlW10+KCk7XG5cbiAgZm9ybVNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICByZWFkb25seSBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBnZXRMb2FkaW5nTW9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSB1bnRpbERlc3Ryb3lMb2FkTW9yZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSB0ZXh0U2VhcmNoU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmNvbnZlcnRUb0ZsYXROb2RlKG5vZGUpIHx8IG5ldyBRTVNGbGF0Tm9kZVRyZWUoKTtcbiAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XG4gICAgZmxhdE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICBmbGF0Tm9kZS5leHBhbmRhYmxlID0gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB8fCAoISFub2RlLmNoaWxkQ291bnQpIHx8IG5vZGUuZXhwYW5kYWJsZTtcbiAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xuICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgZmxhdE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xuICAgIGZsYXROb2RlLmlzRmlsZSA9IG5vZGUuaXNGaWxlO1xuICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcbiAgICBmbGF0Tm9kZS5pc0dyb3VwID0gbm9kZS5pc0dyb3VwO1xuICAgIGZsYXROb2RlLmdyb3VwSWQgPSBub2RlLmdyb3VwSWQ7XG4gICAgZmxhdE5vZGUuZXh0ZXJuYWxOYW1lID0gbm9kZS5leHRlcm5hbE5hbWU7XG4gICAgZmxhdE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICBmbGF0Tm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XG4gICAgZmxhdE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgICBmbGF0Tm9kZS5leHBhbmRJY29uID0gbm9kZS5leHBhbmRJY29uO1xuXG4gICAgdGhpcy5mbGF0VHJlZU5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcbiAgICB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLnNldChub2RlLCBmbGF0Tm9kZSk7XG4gICAgcmV0dXJuIGZsYXROb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9nZXRDaGlsZCA9IChub2RlOiBRTVNUcmVlTm9kZSkgPT4gbm9kZS5jaGlsZHJlbjtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0V4cGFuZGFibGUgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxpbmdMYXp5T2JqZWN0OiBJSGFuZGxpbmdFdmVudExhenkgPSB7XG4gICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxuICAgIGNoZWNrSXRlbVNlYXJjaDogZmFsc2UsXG4gICAgY2hlY2tOb2RlOiBmYWxzZSxcbiAgICBleHBhbmQ6IGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcbiAgc291cmNlX29iamVjdCA9IHt9IGFzIFFNU1RyZWVOb2RlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXG4gICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIHRyYW5zOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHRyZWVEZXBhcnRtZW50U2VydmljZTogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXQgdHJlZSBkYXRhXG4gICAgdGhpcy5nZXREYXRhVHJlZSRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgLy8gUmVnaXN0ZXIgaWNvblxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG5cbiAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFucy5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5faGFuZGxlU2VhcmNoRXZlbnQoKTtcbiAgICB0aGlzLl9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKTtcbiAgICB0aGlzLl9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgcmVzID8gdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmVuYWJsZSgpO1xuICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0SW5kZXhWaWV3JC5waXBlKFxuICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMubmdVbnN1YnNjcmliZSwgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQpKSxcbiAgICAgIHRhcChfID0+IHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodGhpcy5jb25maWcubGF6eSkpLFxuICAgICAgZGVsYXkoNzAwKSxcbiAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiZcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2VcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSxcbiAgICAgICAgICAgICAgICBtYXAoXyA9PiB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSksXG4gICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFt4MSwgeDJdKSA9PiB4MSA+IHgyICYmIHgyIDwgMTQwKSxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMb2FkaW5nTW9yZSQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVzdHJveUxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkTW9yZUV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHRhcChfID0+IHtcbiAgICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IHRoaXMuY29uZmlnLmlzSW5jbHVkZUNoaWxkcmVuO1xuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xuICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xuICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vYWN0aW9uIGZvciBsYXp5IGNvbmZpZ1xuICAgIHRoaXMuX2luaXRMaXN0U2VsZWN0ZWQoKTtcbiAgICB0aGlzLl9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uRGVzdHJveUxvYWRNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkLm5leHQoKTtcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCB0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSwgdGhpcy5fZ2V0Q2hpbGQpO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QgJiYgdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0WzBdLmlkKSB7XG4gICAgICB0aGlzLmNvbmZpZy50cmVlRGF0YS5wdXNoKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXSk7XG4gICAgfVxuXG4gICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXG5cbiAgICBpZiAoIV90cmVlRGF0YUlucHV0Lmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKF90cmVlRGF0YUlucHV0KTtcblxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodHJlZURhdGEpO1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVMaXN0U2VsZWN0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHRyZWVOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5tYXAoeCA9PiAoeyAuLi54LCBwYXJlbnRJZDogeC5ncm91cElkIH0pKSk7XG5cbiAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICBjb25zdCByZU1hcFRyZWVOb2RlID0gKGl0ZW06IFFNU1RyZWVOb2RlLCBjbGVhckdyb3VwSWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIG5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgbm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ubmVzdGVkTm9kZSxcbiAgICAgICAgICBncm91cElkOiBjbGVhckdyb3VwSWQgPyBudWxsIDogaXRlbS5ncm91cElkLFxuICAgICAgICAgIGlzR3JvdXA6IGl0ZW0uaXNHcm91cCxcbiAgICAgICAgICBjaGlsZENvdW50OiBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPz8gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh7IC4uLnJlTWFwVHJlZU5vZGUoaXRlbSwgdHJ1ZSksIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuLm1hcCh4ID0+IHJlTWFwVHJlZU5vZGUoeCkpIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcubW92ZUxvY2F0aW9uTW9kZSkge1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4uc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdExpc3RTZWxlY3RlZCgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xuICAgIC8vQ29udmVydCBhcnJheSBzZWxlY3RlZExpc3QgaW50byBuZXN0ZWQgYXJyYXkgYXMgMSBsZXZlbCBmb3JtXG4gICAgY29uc3QgaW5kZXhSZW1vdmUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdFtpXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pLmZpbHRlcih4ID0+IHguZ3JvdXBJZCA9PSBpdGVtLmlkKTtcbiAgICAgIGl0ZW0uY2hpbGRyZW4gPSByZXN1bHQ7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiByZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpXG4gICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGluZGV4UmVtb3ZlLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLl9zZWxlY3RlZExpc3QuZmlsdGVyKChfLCBpbmRleCkgPT4gIWluZGV4UmVtb3ZlLmluY2x1ZGVzKGluZGV4KSk7XG5cbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4udGhpcy5fc2VsZWN0ZWRMaXN0KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNlbGVjdGVkIGxpc3Qgd2hlbiBkYXRhIG5vZGVzIGNoYW5nZVxuICBwcml2YXRlIF9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUpXG4gICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGVsZW1lbnQuaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh4MSA9PiB4MS5pZCA9PT0gZWxlbWVudC5pZCkpO1xuICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3QgPSBkZXNjZW5kYW50cy5maWx0ZXIoeCA9PiBpdGVtLmNoaWxkcmVuLm1hcCh4MSA9PiB4MS5pZCkuaW5jbHVkZXMoeC5pZCkpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtU2VsZWN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0LmZvckVhY2goX2l0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShfaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmNoaWxkcmVuWzBdLmdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLml0ZW1TZWxlY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHVzZSBmb3IgbGF6eSBtb2RlLCBkbyBzb21lIHRoaW5nIGJlZm9yZSBpbml0IGxpc3Qgbm9kZSBzZWxlY3RlZFxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIG9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZChjYWxsYmFjaz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjaygpO1xuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5uZXh0KCk7XG4gIH1cblxuICAvL0hhbmRsZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VkXG4gIHByaXZhdGUgX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBhZGRlZCwgcmVtb3ZlZCB9KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIGxldCBzZWxlY3RlZE5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgY29uc3QgYWxsQ2hpbGROb2RlOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQdXNoaW5nQ2hpbGROb2Rlcy5lbWl0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgYWxsQ2hpbGROb2RlLnB1c2goey4uLm5vZGV9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGU6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAodGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZSA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZE5vZGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLmZpbmQoeCA9PiB4LmlzR3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RHcm91cDogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcChzZWxlY3RlZE5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmICghIWV4aXN0R3JvdXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0RXhpc3RHcm91cCA9IHRoaXMuZ2V0Tm9kZUJ5SWQoZXhpc3RHcm91cC5pZCk7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RHcm91cC5pZDtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGV4aXN0R3JvdXAuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cFJlc3VsdCAmJiAhZ3JvdXBSZXN1bHQuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5pc0dyb3VwID0gZXhpc3RHcm91cC5pc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuY2hpbGRyZW4ucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNQdXNoaW5nTm9kZShhbGxDaGlsZE5vZGUsIGdyb3VwUmVzdWx0LmNoaWxkcmVuPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cFJlc3VsdF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjaGVja0V4aXN0SW5SZXN1bHQobm9kZSkpe1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgncmVtb3ZlZCcsIFtfaXRlbV0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuZ3JvdXBJZCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5jb25jYXQobm9kZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKVxuICAgICAgICAgICAgICBpZiAoZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IF9ub2RlLmlkKSAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShfbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGdyb3VwLmNoaWxkcmVuLmluZGV4T2YoX2l0ZW0pLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XG4gICAgICAgICAgLy8gYWRkIHNlbGVjdGVkIG5vZGUgdG8gY2hlY2tlZCBub2RlIGluIHNlYXJjaFxuICAgICAgICAgIGNvbnN0IGZpbmRBbGxDaGlsZHJlbiA9IChwYXJlbnRJZDogc3RyaW5nLCBub2RlczogYW55KTogYW55W10gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm91bmROb2RlID0gZmluZE5vZGVCeUlkKHBhcmVudElkLCBub2Rlcyk7XG4gICAgICAgICAgICBpZiAoIWZvdW5kTm9kZSB8fCAhZm91bmROb2RlPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm91bmROb2RlPy5jaGlsZHJlbjtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZmluZE5vZGVCeUlkID0gKGlkOiBzdHJpbmcsIG5vZGVzOiBhbnkpOiBhbnkgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmROb2RlID0gZmluZE5vZGVCeUlkKGlkLCBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9O1xuXG5cbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICBsZXQgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gW107XG4gICAgICAgICAgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gZmluZEFsbENoaWxkcmVuKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cblxuICAgICAgICAgIHNlbGVjdGVkTGlzdFswXS5wYXJlbnRJZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkO1xuICAgICAgICAgIGNoaWxkcmVuT2ZDaGVja2VkTm9kZS51bnNoaWZ0KHNlbGVjdGVkTGlzdFswXSk7XG5cbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gY2hpbGRyZW5PZkNoZWNrZWROb2RlLmZpbHRlcigodiwgaSwgYSkgPT4gYS5maW5kSW5kZXgodjIgPT4gWydpZCcsICdwYXJlbnRJZCddLmV2ZXJ5KGsgPT4gdjJba10gPT09IHZba10pKSA9PT0gaSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudChzdGF0ZTogJ3JlbW92ZWQnIHwgJ3VwZGF0ZWQnIHwgJ2FkZGVkJywgZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBkYXRhLFxuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cGRhdGVkJzpcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHVwZGF0ZWQ6IGRhdGEsXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICBhZGRlZDogZGF0YSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHRoaXMucmVzdWx0U2VhcmNoID0gW107XG4gICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy50ZXh0U2VhcmNoU3ViamVjdCQubmV4dCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgbGV0IGxvY2F0aW9uOiBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iW10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gaXRlbS5wYXRoPy5tYXAoeCA9PiAoeyBuYW1lOiB4IH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpIHx8IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBub2RlID8gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpIDogW107XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gcGFyZW50cy5sZW5ndGggPyBwYXJlbnRzLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgIH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpLnJldmVyc2UoKSA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2gucHVzaCh7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBbXG4gICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuY2xlYXJDaGVja0xpc3RTZWxlY3Rpb25TZWFyY2hXaGVuSGFuZGxlKVxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xuICAgICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpIHtcbiAgICB0aGlzLnNjcm9sbFRvTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAoKHZhbCkgPT4ge1xuICAgICAgY29uc3QgZGVsYXlUaW1pbmcgPSB0aGlzLmdldEluZGV4VmlldyQudmFsdWUgPT09IDEgPyA3MDAgOiAwO1xuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XG4gICAgICByZXR1cm4gb2YodmFsKS5waXBlKGRlbGF5KGRlbGF5VGltaW5nKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpO1xuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCh2YWwgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xuICAgICAgcmV0dXJuIHRpbWVyKDE1MDApO1xuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gJy0tJztcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHRoaXMuZ2V0RGF0YVRyZWUkLm5leHQoZGF0YSk7XG4gIH1cblxuICBzZXRMb2FkaW5nU3RhdGVOb2RlKGlzTG9hZGluZzogYm9vbGVhbiwgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghbm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBub2RlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICB9XG5cbiAgb25FeHBhbmROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghbm9kZT8uZXhwYW5kYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICB9XG4gICAgdGhpcy5vbkV4cGFuZE5vZGVFdmVudC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25PcHRpb25TZWFyY2hTZWxlY3RlZCh2YWx1ZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKHZhbHVlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcbiAgfVxuXG4gIG9uQ2hlY2tBbGxSb290VHJlZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lIHx8ICF0aGlzLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxOb2RlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZS5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi50aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgdGhpcy5kZXBhcnRtZW50Um9vdHMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XG4gICAgICAgIHRoaXMub25DaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwICYmIHRoaXMuaXNDaGVja0FsbChub2RlKSB8fCAhbm9kZS5leHBhbmRhYmxlKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XG4gICAgICBpZiAoIW5lc3RlZE5vZGUuaXNHcm91cCkge1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbW92ZVRvTG9jYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChvLCBmbikgPT4ge1xuICAgICAgZm9yIChjb25zdCBrIGluIG8pIHtcbiAgICAgICAgY29uc3QgcmVzID0gZm4uYXBwbHkodGhpcywgW28sIGtdKTtcblxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAob1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1trXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHRyYXZlcnNlKG9ba10sIGZuKTtcbiAgICAgICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaWNlX3NvdXJjZSA9IChvYmosIHByZWRpY2F0ZSkgPT5cbiAgICAgIHRyYXZlcnNlKFxuICAgICAgICBvYmosXG4gICAgICAgIChvLCBrKSA9PiB7XG4gICAgICAgICAgbGV0IG1faW5kZXggPSAtMTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2tdKSkge1xuICAgICAgICAgICAgbV9pbmRleCA9IG9ba10uZmluZEluZGV4KChvKSA9PiBwcmVkaWNhdGUobywgaykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtX2luZGV4ICE9PSAtMSA/IG9ba10uc3BsaWNlKG1faW5kZXgsIDEpWzBdIDogZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgZmluZF90YXJnZXRfYXJyYXkgPSAob2JqLCBwcmVkaWNhdGUpID0+XG4gICAgICB0cmF2ZXJzZShcbiAgICAgICAgb2JqLFxuICAgICAgICAobywgaykgPT4gKHByZWRpY2F0ZShvLCBrKSA/IG8uY2hpbGRyZW4gOiBmYWxzZSlcbiAgICAgICk7XG5cbiAgICBjb25zdCBmaW5kUGFyZW50ID0gKG5vZGVJZCwgbm9kZXMpID0+IHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuaWQgPT09IG5vZGVJZCkge1xuICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBmaW5kUGFyZW50KG5vZGVJZCwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XG5cbiAgICBjb25zdCBzb3VyY2VfaWQgPSBzZWxlY3RlZExpc3RbMF0uaWQ7XG5cbiAgICAvLyBzb3VyY2UgbXVzdCB0byBoYXZlIGZvciBtb3ZlbWVudFxuICAgIHRoaXMuc291cmNlX29iamVjdCA9IHNwbGljZV9zb3VyY2UodGhpcy5jdXJyZW50VHJlZURhdGEsIChvYmopID0+IG9iaj8uaWQgPT09IHNvdXJjZV9pZCk7XG5cbiAgICBpZiAoIXRoaXMuc291cmNlX29iamVjdCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRUcmVlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jdXJyZW50VHJlZURhdGFbaV07XG4gICAgICAgIGlmIChlbGVtZW50LmlkID09PSBzb3VyY2VfaWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QgPSBlbGVtZW50O1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpLCAxKTs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoaWxkJzpcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpPy5jaGlsZHJlbi51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5pZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRfYXJyYXkgPSBmaW5kX3RhcmdldF9hcnJheSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gbm9kZT8uaWQpO1xuICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUuaWQ7XG4gICAgICAgICAgdGFyZ2V0X2FycmF5LnVuc2hpZnQodGhpcy5zb3VyY2Vfb2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2libGluZyc6XG4gICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuY3VycmVudFRyZWVEYXRhLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpICsgMTtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpZHgsIDAsIHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5X3BhcmVudCA9IGZpbmRfdGFyZ2V0X2FycmF5KHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBwYXJlbnROb2RlPy5pZCk7XG4gICAgICAgICAgY29uc3Qgbm9kZV9pZHggPSB0YXJnZXRfYXJyYXlfcGFyZW50LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgdGFyZ2V0X2FycmF5X3BhcmVudC5zcGxpY2Uobm9kZV9pZHggKyAxLCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICBjb25zdCBuZXdMb2NhdGlvbiA9IGZpbmRQYXJlbnQodGhpcy5zb3VyY2Vfb2JqZWN0LmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IG5ld0xvY2F0aW9uO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBzZXREZXN0aW5hdGlvbkxvY2F0aW9uKG5vZGUsIHR5cGUpIHtcbiAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBub2RlLmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpO1xuICAgIHRoaXMubW92ZVRvTG9jYXRpb24odHJlZU5vZGUsIHR5cGUpO1xuICB9XG5cblxuICBvbkNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGZpcmVFdmVudENoZWNrTm9kZTogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSByZXR1cm47XG5cbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5kaXNhYmxlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZmlyZUV2ZW50Q2hlY2tOb2RlKVxuICAgICAgdGhpcy5vbkNoZWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSkge1xuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVUcmVlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IG5vZGVJZCk7XG4gICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoaWQ6IHN0cmluZywgLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaWQpO1xuICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghbm9kZVRyZWUpIHtcbiAgICAgIHRoaXMuZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICBleHRlcm5hbE5hbWU6IGl0ZW0uZXh0ZXJuYWxOYW1lLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9IGFzIFFNU1RyZWVOb2RlXTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICByZVNlbGVjdFNlbGVjdGlvbihub2RlSWQsIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKSk7XG4gICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3sgLi4ubmVzdGVkTm9kZSwgY2hpbGRyZW46IFtdIH1dO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgcmVTZWxlY3RTZWxlY3Rpb24obmVzdGVkTm9kZS5pZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcbiAgfVxuXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XG4gICAgaWYgKHBhcmVudHM/Lmxlbmd0aCkge1xuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHBhcmVudCkpXG4gICAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGUocGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XG4gICAgICBpZiAoIWl0ZW0pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdCgncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xuICB9XG5cbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcbiAgICBpZiAoIW5vZGVzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4ubm9kZXMpO1xuICB9XG5cbiAgb25EZXNlbGVjdE5vZGUoLi4ubm9kZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLm5vZGVzKTtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlcyBhIHZhbHVlIGJldHdlZW4gc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcbiAgICovXG4gIG9uVG9nZ2xlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgfVxuXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gICAgcmV0dXJuICghIWNoaWxkU2VsZWN0ZWQubGVuZ3RoICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcbiAgICByZXR1cm4gbGlzdENoZWNrLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGUgY2hlY2sgbm9kZSBvZiB0cmVlXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgZG8gc29tZXRoaW5nIGJlZm9yZSBoYW5kbGUgY2hlY2sgbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgb25CZWZvcmVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBjYWxsYmFjaz86IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IHRydWU7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXG4gICAgICBjb25zdCBhbGxQYXJlbk5vZGVJZHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkubWFwKHggPT4geC5pZCk7XG4gICAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlzR3JvdXAgJiYgYWxsUGFyZW5Ob2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XG4gICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cD8uaWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHgpO1xuICAgICAgICBfbm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwID8gZXhpc3RlZEdyb3VwLmlkIDogbm9kZS5pZDtcbiAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbi5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBfc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICBfc2VsZWN0ZWRJbmRleCA+IC0xICYmIHRoaXMuX3NlbGVjdGVkTGlzdC5zcGxpY2UoX3NlbGVjdGVkSW5kZXgsIDEpO1xuICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNlbGVjdE5vZGVzKTtcbiAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIG5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgfVxuXG4gIGdldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgdGhlIGRhdGEgbm9kZSdzIHN1YnRyZWUgb2YgZGVzY2VuZGVudCBkYXRhIG5vZGVzLlxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKGZsYXROb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xuICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcbiAgfVxuXG4gIGNvbnZlcnRUb05lc3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TVHJlZU5vZGUge1xuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XG4gIH1cblxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLmdldChub2RlKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIGNvbnN0IGxpc3RQYXJlbnQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdFBhcmVudDtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSByZXR1cm47XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xuICAgIGlmICghIWl0ZW0uaXRlbUljb25TdmcpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5zdmc7XG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbEludG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcbiAgICB0aGlzLm9uRXhwYW5kTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XG4gICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgfVxuXG4gIG9uU2VhcmNoKCkge1xuICAgIGlmICghdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSB8fCB0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlPy50cmltKCkgPT09ICcnKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnNldEluZGV4VmlldygxKTtcbiAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMucGFnaW5hdG9yU2VhcmNoLmNoYW5nZVBhZ2UoMCk7XG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcbiAgfVxuXG4gIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCQubmV4dChkYXRhKTtcbiAgfVxuXG4gIG9uQ2xpY2tSZXN1bHRJdGVtKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvTm9kZShub2RlLmlkKTtcbiAgICB9XG4gIH1cblxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGlmIChpdGVtLmRpc2FibGVkIHx8IHRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi50aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGl0ZW0uaWQpKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBhc3luYyBvbkJlZm9yZUNoZWNrSXRlbVNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIGNhbGxiYWNrPzogKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XG4gICAgLy8gaG9sZCBzdGF0ZSBiZWZvcmUgY2FsbCBtZXRob2QgY2FsbGJhY2sgdG8gcHJldmVudCBsb3N0IGl0J3Mgc3RhdGUgdW5leHBlY3RlZFxuICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhpdGVtKTtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xuICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgYXdhaXQgY2FsbGJhY2sodGhpcy5yZXN1bHRTZWFyY2gpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XG4gICAgaWYgKCEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgdGhpcy5yZXN1bHRTZWFyY2guZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xuICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIHN0YXRlOiBib29sZWFuID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCkpIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgIGlmICghIWN1cnJlbnROb2RlKSB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY3VycmVudE5vZGUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoaXRlbS5pZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdChzdGF0ZSA/ICdhZGQnIDogJ3JlbW92ZScsIGl0ZW0sIHRoaXMuX3NlbGVjdGVkTGlzdCwgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBpc1NlbGVjdEl0ZW1TZWFyY2goaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlOiAnYWRkJyB8ICdyZW1vdmUnLCBpdGVtOiBRTVNUcmVlTm9kZSwgLi4uc2VsZWN0ZWRMaXN0czogUU1TVHJlZU5vZGVbXVtdKSB7XG4gICAgaWYgKCFpdGVtKVxuICAgICAgcmV0dXJuO1xuICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xuICAgICAgY29uc3QgaXRlbUV4aXN0ZWQgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmdyb3VwSWQpO1xuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5jaGlsZHJlbi5zb21lKHgxID0+IHgxLmlkID09PSBpdGVtLmlkKSk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZWN0ZWRMaXN0LnNwbGljZShzZWxlY3RlZExpc3QuaW5kZXhPZihpdGVtRXhpc3RlZCksIDEpO1xuICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3Rpb25TZWFyY2ggPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gaXRlbUV4aXN0ZWQuaWQpO1xuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uU2VsZWN0QWxsU2VhcmNoUmVzdWx0KGNoZWNrZWQpIHtcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuY29uZmlnLmhhbmRsZUNoZWNrQWxsSXRlbVNlYXJjaCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGNvbnN0IGNhblNlbGVjdCA9ICghIXRyZWVOb2RlIHx8IHRoaXMuY29uZmlnLmxhenkpO1xuICAgICAgICAgIGlmICghY2FuU2VsZWN0KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IF9pdGVtU2VsZWN0aW9ucyA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGlmIChfaXRlbVNlbGVjdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4uX2l0ZW1TZWxlY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkgfHwgIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaClcbiAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtLCBjaGVja2VkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQWxsSXRlbVNlYXJjaEV2ZW50LmVtaXQoY2hlY2tlZCk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVjYm94QWxsU2VhcmNoKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHguZGlzYWJsZWQpO1xuICB9XG5cbiAgb25QYWdpbmdTZWFyY2hSZXN1bHQodmFsOiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5vblBhZ2luZ1NlYXJjaEV2ZW50LmVtaXQodmFsKTtcbiAgfVxuXG4gIHNjcm9sbFRvTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgfVxuXG4gIHNldEluZGV4VmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ID09PSAxICYmIHRoaXMuY29uZmlnLnJlc2V0VG9nZ2xlSW5jbHVkZUNoaWxkV2hlbkNoYW5nZVZpZXcpIHtcbiAgICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5nZXRJbmRleFZpZXckLm5leHQoaW5kZXgpO1xuICB9XG5cbiAgY2FuQWN0aXZlTm9kZUV4dGVybmFsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICByZXR1cm4gIWFsbFBhcmVudCB8fCBhbGxQYXJlbnQuZXZlcnkoaXRlbSA9PiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpO1xuICB9XG5cbiAgZ2V0SGVpZ2h0U3R5bGVSZWZOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZUVsZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLm1hdC10cmVlLW5vZGUjbWF0LW5vZGUtJHtub2RlSWR9YCkgYXMgRWxlbWVudDtcbiAgICByZXR1cm4gYCR7bm9kZUVsZT8uY2xpZW50SGVpZ2h0IHx8IDB9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZVN0b3JhZ2Uobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0ZWROb2RlJywgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICB9XG5cbiAgc2V0RGVmYXVsdFBhZ2luYXRvclNpemUob3B0aW9uczogbnVtYmVyW10pIHtcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBvcHRpb25zO1xuICB9XG5cbiAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgLyoqXG4gICAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZSBmb3IgbGF6eSBsb2FkIGNoaWxkcmVuIG9mIG5vZGVcbiAgICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdXBkYXRlLiBpZiBub2RlIGlzIG51bGwgZGF0YSBhdXRvIGluc2VydCBhcyByb290c1xuICAgICAgICogQHBhcmFtIGRhdGEgbGlzdCBjaGlsZHJlbiB0byB1cGRhdGUgbm9kZS5cbiAgICAgICAqIEBwYXJhbSBtb2RlIGRlZmF1bHQgaXMgdXBkYXRlIHRoYXQgcmVwbGFjZSBjdXJyZW50IGxpc3QgY2hpbGRyZW4gYnkgbmV3IGxpc3QgY2hpbGRyZW4gLCBpZiBtb2RlID0gJ2luc2VydCcgd2lsbCBpbnNlcnQgbmV3IHZhbHVlcyB0byBsaXN0IGNoaWxkcmVuIGV4aXN0ZWQgYmVmb3JlLlxuICAqL1xuICB1cGRhdGVDaGlsZE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10sIG1vZGU6ICdpbnNlcnQnIHwgJ3VwZGF0ZScgPSAndXBkYXRlJykge1xuICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgIGNvbnN0IGRhdGFOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpLmZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IG5vZGUuaWQpO1xuICAgIGlmICghbmVzdGVkTm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgJ2luc2VydCc6XG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4ucHVzaCguLi5kYXRhTm9kZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBkYXRhTm9kZXM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICBjb25zdCBfbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZS5pZCk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKF9ub2RlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkW2ldO1xuICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGl0ZW0uaWQpO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcbiAgICAgIGlmICghZGVzY2VuZGFudHMubGVuZ3RoKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGVzY2VuZGFudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkZXNjZW5kYW50c1tqXTtcbiAgICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGNoaWxkLmlkKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQoW19ub2RlLCAuLi5ub2Rlc10pO1xuICB9XG5cbiAgLy9yZS1zZWxlY3Qgd2hlbiB1cGRhdGUgY2hpbGRyZW4gb2Ygbm9kZVxuICBwcml2YXRlIF9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGV4aXN0SW5TZWxlY3Rpb24gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PSBub2RlLmlkKTtcbiAgICBpZiAoZXhpc3RJblNlbGVjdGlvbilcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGV4aXN0SW5TZWxlY3Rpb24pO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgfVxuXG4gIGNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGFsbFBhcmVudFtpXTtcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhwYXJlbnQpO1xuICAgICAgcGFyZW50LmlzTG9hZGluZyA9IGRlc2NlbmRhbnRzLnNvbWUoeCA9PiB4LmlzTG9hZGluZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpZCkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Um9vdE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhbGxQYXJlbnQucG9wKCk7XG4gIH1cblxuICBhZGRSb290VHJlZShkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdKSB7XG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0cmVlTm9kZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKTtcbiAgICAvLyByZS1jaGVjayByb290IHdhcyBleGlzdGVkIGluIHRyZWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWVOb2RlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlRGF0YVtpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgaWYgKCEhbm9kZSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW5vZGUpXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChkYXRhKTtcbiAgfVxuXG4gIGdldENoZWNrZWRTdGF0dXNOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIHJldHVybiB0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpO1xuICB9XG5cbiAgdXBkYXRlTm9kZUluZm9ybWF0aW9uKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGxldCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgIGlmICghbmVzdGVkTm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICBuZXN0ZWROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XG4gICAgbmVzdGVkTm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcbiAgICBuZXN0ZWROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFJlc3VsdERhdGEobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3Qgbm9kZVJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCgoeCkgPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgaWYgKG5vZGVSZXN1bHQpIHtcbiAgICAgIG5vZGVSZXN1bHQuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICAgIG5vZGVSZXN1bHQuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XG4gICAgfVxuICB9XG5cbiAgY2FsbENoZWNrTm9kZU91dHNpZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIC8vdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudChhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlO1xuICAgIGFjdGlvbigpO1xuICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlO1xuICB9XG5cbiAgaXNEaXNhYmxlZE5vZGUgPSAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09IG5vZGVJZCk/LmRpc2FibGVkO1xuXG4gIGlzUHVzaGluZ05vZGUoYWxsQ2hpbGROb2RlOiBRTVNUcmVlTm9kZVtdLCBjb3VudENoaWxkcmVuUHVzaGluZz86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaXNQdXNoaW5nQ2hpbGROb2Rlcy5lbWl0KHRydWUpO1xuICAgIGlmIChhbGxDaGlsZE5vZGU/Lmxlbmd0aCA9PSBjb3VudENoaWxkcmVuUHVzaGluZykge1xuICAgICAgdGhpcy5pc1B1c2hpbmdDaGlsZE5vZGVzLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19