ng-virtual-list 15.11.3 → 15.11.4

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.
@@ -1854,19 +1854,10 @@ export class NgVirtualListComponent extends DisposableComponent {
1854
1854
  const scrollHandler = (userAction = false) => {
1855
1855
  const scroller = this._scrollerComponent;
1856
1856
  if (!!scroller) {
1857
- const isVertical = this._isVertical, bounds = this._$bounds.getValue(), listBounds = this._$listBounds.getValue(), scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft), maxScrollSize = isVertical ? (listBounds?.height ?? 0) - (bounds?.height ?? 0) : (listBounds?.width ?? 0) - (bounds?.width ?? 0), actualScrollSize = scrollSize;
1857
+ const isVertical = this._isVertical, scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft), actualScrollSize = scrollSize;
1858
1858
  if (this._readyForShow) {
1859
1859
  if (userAction) {
1860
- if (this._trackBox.isSnappedToStart) {
1861
- if (scrollSize > MIN_PIXELS_FOR_PREVENT_SNAPPING) {
1862
- this._$preventScrollSnapping.next(true);
1863
- }
1864
- }
1865
- if (this._trackBox.isSnappedToEnd) {
1866
- if (scrollSize < (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
1867
- this._$preventScrollSnapping.next(true);
1868
- }
1869
- }
1860
+ this._$preventScrollSnapping.next(true);
1870
1861
  }
1871
1862
  }
1872
1863
  this._$scrollSize.next(actualScrollSize);
@@ -2541,4 +2532,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2541
2532
  }], langTextDir: [{
2542
2533
  type: Input
2543
2534
  }] } });
2544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQ3JJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQzdILHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5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RixlQUFlO3NCQURsQixLQUFLO2dCQW1DRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBa0NGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBcUJGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFzQkYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQTZCRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBNkJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBMEVGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkE2QkYsZUFBZTtzQkFEbEIsS0FBSztnQkE2QkYsaUJBQWlCO3NCQURwQixLQUFLO2dCQWdDRix5QkFBeUI7c0JBRDVCLEtBQUs7Z0JBK0JGLFlBQVk7c0JBRGYsS0FBSztnQkFtREYsYUFBYTtzQkFEaEIsS0FBSztnQkFnQ0YsUUFBUTtzQkFEWCxLQUFLO2dCQThCRixXQUFXO3NCQURkLEtBQUs7Z0JBNEJGLFNBQVM7c0JBRFosS0FBSztnQkE0QkYsY0FBYztzQkFEakIsS0FBSztnQkE0QkYsVUFBVTtzQkFEYixLQUFLO2dCQW9DRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixjQUFjO3NCQURqQixLQUFLO2dCQStCRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBNEJGLE9BQU87c0JBRFYsS0FBSztnQkFxQ1EsbUJBQW1CO3NCQURoQyxLQUFLO2dCQWlDRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLFxyXG4gIE9ic2VydmFibGUsXHJcbiAgb2YsIHNraXAsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0lOU1RBTlQsIENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgQ0xBU1NfTElTVF9WRVJUSUNBTCwgREVGQVVMVF9ESVJFQ1RJT04sIERFRkFVTFRfRFlOQU1JQ19TSVpFLFxyXG4gIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OLCBERUZBVUxUX0lURU1fU0laRSwgREVGQVVMVF9CVUZGRVJfU0laRSwgREVGQVVMVF9MSVNUX1NJWkUsIERFRkFVTFRfU05BUCwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QsXHJcbiAgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIEZPQ1VTLCBUT1BfUFJPUF9OQU1FLCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUX01FVEhPRCwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFLFxyXG4gIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFLCBERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQsIERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQsIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcsXHJcbiAgTU9VU0VfRE9XTiwgVE9VQ0hfU1RBUlQsIERFRkFVTFRfTEFOR19URVhUX0RJUiwgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTiwgREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTLFxyXG4gIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLCBLRVlfRE9XTiwgQkVIQVZJT1JfQVVUTywgREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCwgREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUsIERFRkFVTFRfT1ZFUlNDUk9MTF9FTkFCTEVELFxyXG4gIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9TQ1JPTExfQkVIQVZJT1IsIERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVCwgRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04sIE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTLFxyXG4gIFBSRVBBUkVfSVRFUkFUSU9OUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RILCBST0xFX0xJU1RfQk9YLCBST0xFX0xJU1QsIEtFWV9UQUIsIE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEsXHJcbiAgTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMiwgUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9VUERBVEVfSVRFTVMsIFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gIFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsIFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfQ09MTEFQU0VfSVRFTVMsIE1BWF9OVU1CRVJTX09GX1NLSVBTX0ZPUl9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxLFxyXG4gIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQge1xyXG4gIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbn0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIElTY3JvbGxFdmVudCwgSVNjcm9sbE9wdGlvbnMsIElBbmltYXRpb25QYXJhbXMsIElTaXplLCBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMsXHJcbiAgSVNjcm9sbGluZ1NldHRpbmdzLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50LCBJZCB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25Nb2RlLCBDb2xsZWN0aW9uTW9kZXMsIERpcmVjdGlvbiwgRGlyZWN0aW9ucywgRm9jdXNBbGlnbm1lbnRzLCBNZXRob2RGb3JTZWxlY3RpbmcsIE1ldGhvZHNGb3JTZWxlY3RpbmcsXHJcbiAgU25hcHBpbmdNZXRob2QsIFNuYXBwaW5nTWV0aG9kcywgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMsXHJcbn0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlLCBTY3JvbGxFdmVudCwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsIFRyYWNrQm94IH0gZnJvbSAnLi9jb3JlL3RyYWNrLWJveCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vYmFzZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCQxIH0gZnJvbSAnLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgaXNEaXJlY3Rpb24gfSBmcm9tICcuL3V0aWxzL2lzLWRpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pcy1tZXRob2QtZm9yLXNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi91dGlscy9jbWFwJztcclxuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZUZsb2F0LCB2YWxpZGF0ZUludCwgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSAnLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgY29weVZhbHVlQXNSZWFkb25seSwgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0JztcclxuaW1wb3J0IHsgaXNDb2xsZWN0aW9uTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgTmdTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcnO1xyXG5pbXBvcnQgeyBOZ1ByZXJlbmRlckNvbnRhaW5lciB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1wcmVyZW5kZXItY29udGFpbmVyL25nLXByZXJlbmRlci1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVNjcm9sbFBhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcywgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZSB9IGZyb20gJy4vdXRpbHMvc2NyZWVuLXJlYWRlci1mb3JtYXR0ZXInO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUlkLCB2YWxpZGF0ZUl0ZXJhdGlvbiwgdmFsaWRhdGVTY3JvbGxCZWhhdmlvciwgdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2xpc3QtdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IEVWRU5UX0tFWV9ET1dOLCBLRVlfQVJSX0RPV04sIEtFWV9BUlJfTEVGVCwgS0VZX0FSUl9SSUdIVCwgS0VZX0FSUl9VUCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vY29uc3QnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LXB1YmxpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzcG9zYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFZpcnR1YWwgbGlzdCBjb21wb25lbnQuXHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE1LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnc3R5bGUnOiAncG9zaXRpb246IHJlbGF0aXZlOydcclxuICB9LFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcclxuICBwcm92aWRlcnM6IFtOZ1ZpcnR1YWxMaXN0U2VydmljZSwgTmdWaXJ0dWFsTGlzdFB1YmxpY1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIF9fbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZSA9IGluamVjdChOZ1ZpcnR1YWxMaXN0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ByZXJlbmRlcicsIHsgcmVhZDogTmdQcmVyZW5kZXJDb250YWluZXIgfSlcclxuICBwcml2YXRlIF9wcmVyZW5kZXI6IE5nUHJlcmVuZGVyQ29udGFpbmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdyZW5kZXJlcnNDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIF9saXN0Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzbmFwUmVuZGVyZXJDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIF9zbmFwQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzY3JvbGxlcicsIHsgcmVhZDogTmdTY3JvbGxlckNvbXBvbmVudCB9KVxyXG4gIHByaXZhdGUgX3Njcm9sbGVyQ29tcG9uZW50OiBOZ1Njcm9sbGVyQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxpc3QgPSB0aGlzLl8kbGlzdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgYmVlbiBzY3JvbGxlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBjb21wbGV0ZWQgc2Nyb2xsaW5nLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHZpZXdwb3J0IHNpemUgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblZpZXdwb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2l6ZT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25JdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGw+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4gfCBJZCB8IG51bGw+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gZWxlbWVudHMgYXJlIGNvbGxhcHNlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJZD4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBzdGFydC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNjcm9sbCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxSZWFjaEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNob3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkc2hvdyA9IHRoaXMuXyRzaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGhpY2tuZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaGlja25lc3NUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGhpY2tuZXNzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciB0aGlja25lc3MuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRoaWNrbmVzc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhck1pblNpemUgPSB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJNaW5TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWluaW11bSBzY3JvbGxiYXIgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJNaW5TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyTWluU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyID0gdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRodW1iUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaHVtYlJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxiYXIgY3VzdG9taXphdGlvbiB0ZW1wbGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRodW1iUmVuZGVyZXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGw+KHt9KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUGFyYW1zID0gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaHVtYlBhcmFtc1RyYW5zZm9ybSA9ICh2OiB7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGh1bWJQYXJhbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHNjcm9sbGJhci5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlBhcmFtcyh2OiB7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaHVtYlBhcmFtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaHVtYlBhcmFtcygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2FkaW5nID0gdGhpcy5fJGxvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmdUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsb2FkaW5nXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNjcm9sbEJhciBnb2VzIGludG8gbG9hZGluZyBzdGF0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbG9hZGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbG9hZGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpIGFzIGJvb2xlYW47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHdhaXRGb3JQcmVwYXJhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndhaXRGb3JQcmVwYXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9XQUlUX0ZPUl9QUkVQQVJBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0IHdpbGwgd2FpdCB1bnRpbCB0aGUgbGlzdCBpdGVtcyBhcmUgZnVsbHkgcHJlcGFyZWQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlbS4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB3YWl0Rm9yUHJlcGFyYXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgd2FpdEZvclByZXBhcmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpIGFzIGJvb2xlYW47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNsaWNrRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9DTElDS19ESVNUQU5DRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY2xpY2tEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gc2Nyb2xsIGRpc3RhbmNlIGF0IHdoaWNoIGEgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NsaWNrRGlzdGFuY2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjbGlja0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCA9IHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fRU5EX1RSQU5TSVRJT05fSU5TVEFOVF9PRkZTRVQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBvZmZzZXQgdmFsdWU7IGlmIHRoZSBzY3JvbGwgYXJlYSB2YWx1ZSBpcyBleGNlZWRlZCwgdGhlIHNjcm9sbCBhbmltYXRpb24gd2lsbCBiZSBkaXNhYmxlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RDb2xsZWN0aW9uPihbXSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtcyA9IHRoaXMuXyRpdGVtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KGl0ZW0sIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtICYmICEodmFsaWRhdGVGbG9hdChpdGVtPy5bdHJhY2tCeV0gYXMgbnVtYmVyLCB0cnVlKSB8fCB2YWxpZGF0ZVN0cmluZyhpdGVtPy5bdHJhY2tCeV0gYXMgc3RyaW5nLCB0cnVlLCB0cnVlKSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYElWaXJ0dWFsTGlzdENvbGxlY3Rpb25gIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kZGVmYXVsdEl0ZW1WYWx1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0SXRlbSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGVmYXVsdEl0ZW1WYWx1ZSA9IHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWZhdWx0SXRlbVZhbHVlKHY6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUubmV4dCh2KTtcclxuICB9O1xyXG4gIGdldCBkZWZhdWx0SXRlbVZhbHVlKCkgeyByZXR1cm4gdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYgYXMgYW55LCB0cnVlLCB0cnVlKSB8fCB2YWxpZGF0ZVN0cmluZyh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSkgfHwgdmFsaWRhdGVGbG9hdCh2IGFzIGFueSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0ZWRJZHNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBBcnJheTxJZD4gfCBJZGAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA/IFtdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGVkSWRzKHY6IEFycmF5PElkPiB8IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2VsZWN0ZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNlZElkcyA9IHRoaXMuXyRjb2xsYXBzZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlZElkc1RyYW5zZm9ybSA9ICh2OiBBcnJheTxJZD4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2ICYmIEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoaXRlbSBhcyBhbnkpIHx8IHZhbGlkYXRlRmxvYXQoaXRlbSBhcyBhbnkpO1xyXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNvbGxhcHNlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbGxhcHNlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZWRJZHModjogQXJyYXk8SWQ+KSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGFwc2VkSWRzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdEJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNlbGVjdEJ5Q2xpY2sgPSB0aGlzLl8kc2VsZWN0QnlDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0QnlDbGlja1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdEJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYGZhbHNlYCwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGNvbmZpZy5zZWxlY3QgbWV0aG9kIHBhc3NlZCB0byB0aGUgdGVtcGxhdGU7IFxyXG4gICAqIGlmIGB0cnVlYCwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RCeUNsaWNrKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2VsZWN0QnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0QnlDbGljay5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdEJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0QnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZUJ5Q2xpY2sgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0spO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGFwc2VCeUNsaWNrID0gdGhpcy5fJGNvbGxhcHNlQnlDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VCeUNsaWNrXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYGZhbHNlYCwgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBjb25maWcuY29sbGFwc2UgbWV0aG9kIHBhc3NlZCB0byB0aGUgdGVtcGxhdGU7IFxyXG4gICAqIGlmIGB0cnVlYCwgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGFwc2VCeUNsaWNrKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlQnlDbGljay5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlQnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXAgPSB0aGlzLl8kc25hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBlbGVtZW50cyB3aWxsIHNuYXAuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXAubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsU3RhcnRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsU3RhcnRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBzdGFydCBvZmZzZXQgdmFsdWU7IERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxTdGFydE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsRW5kT2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzY3JvbGwgZW5kIG9mZnNldCB2YWx1ZTsgRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb1N0YXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVBfU0NST0xMVE9fU1RBUlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb1N0YXJ0VHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFNjcm9sbFRvU3RhcnRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgc2Nyb2xsIHdpbGwgYmUgYW5jaG9yZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqIFRoaXMgcHJvcGVydHkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBzbmFwU2Nyb2xsVG9FbmQgcHJvcGVydHkuXHJcbiAgICogVGhhdCBpcywgaWYgc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBpbml0aWFsbHkgc25hcCBcclxuICAgKiB0byB0aGUgYmVnaW5uaW5nOyBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgZW5kLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZC4gXHJcbiAgICogSWYgc25hcFNjcm9sbFRvU3RhcnQgaXMgZGlzYWJsZWQgYW5kIHNuYXBTY3JvbGxUb0VuZCBpcyBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZDsgXHJcbiAgICogaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGJlZ2lubmluZywgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBiZWdpbm5pbmcuIFxyXG4gICAqIElmIGJvdGggc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZGlzYWJsZWQsIHRoZSBsaXN0IHdpbGwgbmV2ZXIgc25hcCB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9TdGFydCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9TdGFydFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9TdGFydCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwU2Nyb2xsVG9FbmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFNjcm9sbFRvRW5kVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFNjcm9sbFRvRW5kXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfU0NST0xMVE9fRU5EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgd2lsbCBiZSBhbmNob3JlZCB0byB0aGUg0YPRgtCyIG9mIHRoZSBsaXN0LiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqIFRoYXQgaXMsIGlmIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgaW5pdGlhbGx5IHNuYXAgXHJcbiAgICogdG8gdGhlIGJlZ2lubmluZzsgaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGVuZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQuIFxyXG4gICAqIElmIHNuYXBTY3JvbGxUb1N0YXJ0IGlzIGRpc2FibGVkIGFuZCBzbmFwU2Nyb2xsVG9FbmQgaXMgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQ7IFxyXG4gICAqIGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBiZWdpbm5pbmcsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgYmVnaW5uaW5nLiBcclxuICAgKiBJZiBib3RoIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGRpc2FibGVkLCB0aGUgbGlzdCB3aWxsIG5ldmVyIHNuYXAgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9FbmRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBTY3JvbGxUb0VuZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9zbmFwU2Nyb2xsVG9Cb3R0b21UcmFuc2Zvcm0gPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHNuYXBTY3JvbGxUb0JvdHRvbSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS4nKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9Cb3R0b20odjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc25hcFNjcm9sbFRvQm90dG9tVHJhbnNmb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJFbmFibGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc2hvd24gb3Igbm90LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFySW50ZXJhY3RpdmUgPSB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFySW50ZXJhY3RpdmVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHNjcm9sbGluZyB1c2luZyB0aGUgc2Nyb2xsYmFyIHdpbGwgYmUgcG9zc2libGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckludGVyYWN0aXZlKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckludGVyYWN0aXZlKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEJlaGF2aW9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxCZWhhdmlvcj4oREVGQVVMVF9TQ1JPTExfQkVIQVZJT1IpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsQmVoYXZpb3IgPSB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJlaGF2aW9yVHJhbnNmb3JtID0gKHY6IFNjcm9sbEJlaGF2aW9yKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsQmVoYXZpb3JcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExfQkVIQVZJT1I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBzY3JvbGxpbmcgYmVoYXZpb3IgZm9yIGFueSBlbGVtZW50IG9uIHRoZSBwYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNtb290aFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEJlaGF2aW9yKHY6IFNjcm9sbEJlaGF2aW9yKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEJlaGF2aW9yLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxCZWhhdmlvclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxCZWhhdmlvcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCZWhhdmlvci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdTZXR0aW5ncyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNjcm9sbGluZ1NldHRpbmdzPihERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxpbmdTZXR0aW5ncyA9IHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsaW5nU2V0dGluZ3NUcmFuc2Zvcm0gPSAodjogSVNjcm9sbGluZ1NldHRpbmdzKTogSVNjcm9sbGluZ1NldHRpbmdzID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkICYmICEhdikge1xyXG4gICAgICBjb25zdCB7IGZyaWN0aW9uYWxGb3JjZSwgbWFzcywgbWF4RGlzdGFuY2UsIG1heER1cmF0aW9uLCBzcGVlZFNjYWxlLCBvcHRpbWl6YXRpb24gfSA9IHY7XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChmcmljdGlvbmFsRm9yY2UsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZnJpY3Rpb25hbEZvcmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1hc3MsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWFzc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChtYXhEaXN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhEaXN0YW5jZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChtYXhEdXJhdGlvbiwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXhEdXJhdGlvblwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVGbG9hdChzcGVlZFNjYWxlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNwZWVkU2NhbGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbihvcHRpbWl6YXRpb24sIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwib3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGluZ1NldHRpbmdzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YCBvciBudWxsLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmcmljdGlvbmFsRm9yY2U6IHYuZnJpY3Rpb25hbEZvcmNlICE9PSB1bmRlZmluZWQgJiYgdi5mcmljdGlvbmFsRm9yY2UgPiAwID8gdi5mcmljdGlvbmFsRm9yY2UgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5mcmljdGlvbmFsRm9yY2UsXHJcbiAgICAgIG1hc3M6IHYubWFzcyAhPT0gdW5kZWZpbmVkICYmIHYubWFzcyA+IDAgPyB2Lm1hc3MgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5tYXNzLFxyXG4gICAgICBtYXhEaXN0YW5jZTogdi5tYXhEaXN0YW5jZSAhPT0gdW5kZWZpbmVkICYmIHYubWF4RGlzdGFuY2UgPiAwID8gdi5tYXhEaXN0YW5jZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1heERpc3RhbmNlLFxyXG4gICAgICBtYXhEdXJhdGlvbjogdi5tYXhEdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHYubWF4RHVyYXRpb24gPiAwID8gdi5tYXhEdXJhdGlvbiA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1heER1cmF0aW9uLFxyXG4gICAgICBzcGVlZFNjYWxlOiB2LnNwZWVkU2NhbGUgIT09IHVuZGVmaW5lZCAmJiB2LnNwZWVkU2NhbGUgPiAwID8gdi5zcGVlZFNjYWxlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1Muc3BlZWRTY2FsZSxcclxuICAgICAgb3B0aW1pemF0aW9uOiB2Lm9wdGltaXphdGlvbiA/PyBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5vcHRpbWl6YXRpb24sXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGluZyBzZXR0aW5ncy5cclxuICAgKiAtIGZyaWN0aW9uYWxGb3JjZSAtIEZyaWN0aW9uYWwgZm9yY2UuIERlZmF1bHQgdmFsdWUgaXMgMC4wMzUuXHJcbiAgICogLSBtYXNzIC0gTWFzcy4gRGVmYXVsdCB2YWx1ZSBpcyAwLjAwNS5cclxuICAgKiAtIG1heERpc3RhbmNlIC0gTWF4aW11bSBzY3JvbGxpbmcgZGlzdGFuY2UuIERlZmF1bHQgdmFsdWUgaXMgMTI1MDAuXHJcbiAgICogLSBtYXhEdXJhdGlvbiAtIE1heGltdW0gYW5pbWF0aW9uIGR1cmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDQwMDAuXHJcbiAgICogLSBzcGVlZFNjYWxlIC0gU3BlZWQgc2NhbGUuIERlZmF1bHQgdmFsdWUgaXMgMTUuXHJcbiAgICogLSBvcHRpbWl6YXRpb24gLSBFbmFibGVzIHNjcm9sbGluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGluZ1NldHRpbmdzKHY6IElTY3JvbGxpbmdTZXR0aW5ncykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsaW5nU2V0dGluZ3NUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsaW5nU2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYW5pbWF0aW9uUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQW5pbWF0aW9uUGFyYW1zPihERUZBVUxUX0FOSU1BVElPTl9QQVJBTVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkYW5pbWF0aW9uUGFyYW1zID0gdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtID0gKHY6IElBbmltYXRpb25QYXJhbXMpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJhbmltYXRpb25QYXJhbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0aW9uIHBhcmFtZXRlcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwieyBzY3JvbGxUb0l0ZW06IDUwLCBuYXZpZ2F0ZVRvSXRlbTogMTUwLCBuYXZpZ2F0ZUJ5S2V5Ym9hcmQ6IDUwIH1cIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhbmltYXRpb25QYXJhbXModjogSUFuaW1hdGlvblBhcmFtcykge1xyXG4gICAgaWYgKHRoaXMuXyRhbmltYXRpb25QYXJhbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2FuaW1hdGlvblBhcmFtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgYW5pbWF0aW9uUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRvdmVyc2Nyb2xsRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkb3ZlcnNjcm9sbEVuYWJsZWQgPSB0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwib3ZlcnNjcm9sbEVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfT1ZFUlNDUk9MTF9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBvdmVyc2Nyb2xsIChyZS1zY3JvbGwpIGZlYXR1cmUgd2lsbCB3b3JrLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBvdmVyc2Nyb2xsRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9vdmVyc2Nyb2xsRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBvdmVyc2Nyb2xsRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGVyaW1lbnRhbCFcclxuICAgKiBFbmFibGVzIGJ1ZmZlciBvcHRpbWl6YXRpb24uXHJcbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBpZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiBhcmUgbm90IGFkZGVkIG9yIHVwZGF0ZWQuIE90aGVyd2lzZSwgYXJ0aWZhY3RzIGluIHRoZSBmb3JtIG9mIHR3aXRjaGluZyBvZiB0aGUgc2Nyb2xsIGFyZWEgYXJlIHBvc3NpYmxlLlxyXG4gICAqIFdvcmtzIG9ubHkgaWYgdGhlIHByb3BlcnR5IGR5bmFtaWMgPSB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2VuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG4gICAgaWYgKHYgJiYgISh0eXBlb2Ygdi5lbGVtZW50UmVmID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygdi5jcmVhdGVFbWJlZGRlZFZpZXcgPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIFwiaXRlbVJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgVGVtcGxhdGVSZWZgLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgKiBSZW5kZXJpbmcgZWxlbWVudCB0ZW1wbGF0ZS5cclxuICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1SZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVJlbmRlcmVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtUmVuZGVyZXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbUNvbmZpZ01hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcD4oe30pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbUNvbmZpZ01hcCA9IHRoaXMuXyRpdGVtQ29uZmlnTWFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtQ29uZmlnTWFwVHJhbnNmb3JtID0gKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaWQgaW4gdikge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaWRdO1xyXG4gICAgICAgICAgaWYgKCFpdGVtIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5jb2xsYXBzYWJsZSwgdHJ1ZSkgfHxcclxuICAgICAgICAgICAgIXZhbGlkYXRlQm9vbGVhbihpdGVtLnNlbGVjdGFibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICEoaXRlbS5zdGlja3kgPT09IHVuZGVmaW5lZCB8fCBpdGVtLnN0aWNreSA9PT0gMCB8fCBpdGVtLnN0aWNreSA9PT0gMSB8fCBpdGVtLnN0aWNreSA9PT0gMilcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiaXRlbUNvbmZpZ01hcFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXBgLicpO1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGBzdGlja3lgIHBvc2l0aW9uLCBgY29sbGFwc2FibGVgIGFuZCBgc2VsZWN0YWJsZWAgZm9yIHRoZSBsaXN0IGl0ZW0gZWxlbWVudC4gSWYgYHN0aWNreWAgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIGAwYCwgdGhlbiBgc3RpY2t5YCBwb3NpdGlvbiBpcyBhcHBsaWVkLiBcclxuICAgKiBJZiB0aGUgYHN0aWNreWAgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGAwYCwgdGhlbiB0aGUgYHN0aWNreWAgcG9zaXRpb24gbW9kZSBpcyBlbmFibGVkIGZvciB0aGUgZWxlbWVudC4gYDFgIC0gcG9zaXRpb24gc3RhcnQsIGAyYCAtIHBvc2l0aW9uIGVuZC5cclxuICAgKiAgRGVmYXVsdCB2YWx1ZSBpcyBgMGAuXHJcbiAgICogYHNlbGVjdGFibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZCBvciBub3QuIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqIGBjb2xsYXBzYWJsZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCBhIGBzdGlja3lgIHByb3BlcnR5IGdyZWF0ZXIgdGhhbiB6ZXJvIGNhbiBjb2xsYXBzZSBhbmRcclxuICAgKiAgY29sbGFwc2UgZWxlbWVudHMgaW4gZnJvbnQgdGhhdCBkbyBub3QgaGF2ZSBhIGBzdGlja3lgIHByb3BlcnR5LlxyXG4gICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE1LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbW9kZWxzL2l0ZW0tY29uZmlnLW1hcC5tb2RlbC50c1xyXG4gICAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAgICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbUNvbmZpZ01hcCh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1Db25maWdNYXBUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1Db25maWdNYXAubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtQ29uZmlnTWFwKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1Db25maWdNYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1TaXplVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0lURU1fU0laRTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWwgPSBOdW1iZXIodik7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbCkgfHwgdmFsIDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHZhbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBkaXJlY3Rpb24gPSAndmVydGljYWwnLCB0aGVuIHRoZSBoZWlnaHQgb2YgYSB0eXBpY2FsIGVsZW1lbnQuIElmIGRpcmVjdGlvbiA9ICdob3Jpem9udGFsJywgdGhlbiB0aGUgd2lkdGggb2YgYSB0eXBpY2FsIGVsZW1lbnQuXHJcbiAgICogSWYgdGhlIGR5bmFtaWNTaXplIHByb3BlcnR5IGlzIHRydWUsIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBcclxuICAgKiB0byBhZGp1c3QgdGhlIHNpemVzIG9mIHRoZSBpdGVtcyBpbiB0aGUgdW5hbGxvY2F0ZWQgYXJlYS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZHluYW1pY1NpemVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImR5bmFtaWNTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RZTkFNSUNfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0ZW1zIGluIHRoZSBsaXN0IG1heSBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCB0byBhZGp1c3RcclxuICAgKiB0aGUgc2l6ZXMgb2YgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkeW5hbWljU2l6ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9keW5hbWljU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uVHJhbnNmb3JtID0gKHY6IERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ2hvcml6b250YWwnIHx8IHYgPT09ICd2ZXJ0aWNhbCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSBgaG9yaXpvbnRhbGAgb3IgYHZlcnRpY2FsYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRElSRUNUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBwbGFjZWQuIERlZmF1bHQgdmFsdWUgaXMgXCJ2ZXJ0aWNhbFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpcmVjdGlvbih2OiBEaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9kaXJlY3Rpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGVjdGlvbk1vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbGxlY3Rpb25Nb2RlPihERUZBVUxUX0NPTExFQ1RJT05fTU9ERSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsZWN0aW9uTW9kZSA9IHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0gPSAodjogQ29sbGVjdGlvbk1vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub3JtYWwnIHx8IHYgPT09ICdsYXp5Jyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImRpcmVjdGlvblwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBub3JtYWxgIG9yIGBsYXp5YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEVDVElPTl9NT0RFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgYWN0aW9uIG1vZGVzIGZvciBjb2xsZWN0aW9uIGVsZW1lbnRzLiBEZWZhdWx0IHZhbHVlIGlzIFwibm9ybWFsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGVjdGlvbk1vZGUodjogQ29sbGVjdGlvbk1vZGUpIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxlY3Rpb25Nb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxlY3Rpb25Nb2RlKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGJ1ZmZlclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2J1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJidWZmZXJTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQlVGRkVSX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGJ1ZmZlclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2J1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGJ1ZmZlclNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBidWZmZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWF4QnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01BWF9CVUZGRVJfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhCdWZmZXJTaXplID0gdGhpcy5fJG1heEJ1ZmZlclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgdmFsID0gdjtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heEJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICB2YWwgPSBERUZBVUxUX01BWF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5fJGJ1ZmZlclNpemUuZ2V0VmFsdWUoKTtcclxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPD0gYnVmZmVyU2l6ZSkge1xyXG4gICAgICByZXR1cm4gYnVmZmVyU2l6ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAxMDAuXHJcbiAgICogSWYgbWF4QnVmZmVyU2l6ZSBpcyBzZXQgdG8gYmUgZ3JlYXRlciB0aGFuIGJ1ZmZlclNpemUsIHRoZW4gYWRhcHRpdmUgYnVmZmVyIG1vZGUgaXMgZW5hYmxlZC5cclxuICAgKiBUaGUgZ3JlYXRlciB0aGUgc2Nyb2xsIHNpemUsIHRoZSBtb3JlIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgZm9yIHJlbmRlcmluZy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhCdWZmZXJTaXplKHY6IG51bWJlcikge1xyXG4gICAgY29uc3QgdmFsID0gdGhpcy5fbWF4QnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuICAgIGlmICh0aGlzLl8kbWF4QnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2YWwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRtYXhCdWZmZXJTaXplLm5leHQodmFsKTtcclxuICB9O1xyXG4gIGdldCBtYXhCdWZmZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcHBpbmdNZXRob2QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNuYXBwaW5nTWV0aG9kPihERUZBVUxUX1NOQVBQSU5HX01FVEhPRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcHBpbmdNZXRob2RUcmFuc2Zvcm0gPSAodjogU25hcHBpbmdNZXRob2QpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09IFNuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRCB8fCB2ID09PSBTbmFwcGluZ01ldGhvZHMuU1RBTkRBUlQpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgXCJzbmFwcGluZ01ldGhvZFwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlICcke1NuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRH0nIG9yICcke1NuYXBwaW5nTWV0aG9kcy5TVEFOREFSVH0nLmApO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQUElOR19NRVRIT0Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTbmFwcGluZyBtZXRob2QuIERlZmF1bHQgdmFsdWUgaXMgJ3N0YW5kYXJ0Jy5cclxuICAgKiAnc3RhbmRhcnQnIC0gQ2xhc3NpYyBncm91cCB2aXN1YWxpemF0aW9uLlxyXG4gICAqICdhZHZhbmNlZCcgLSBBIG1hc2sgaXMgYXBwbGllZCB0byB0aGUgdmlld3BvcnQgYXJlYSBzbyB0aGF0IHRoZSBiYWNrZ3JvdW5kIGlzIGRpc3BsYXllZCB1bmRlcm5lYXRoIHRoZSBhdHRhY2hlZCBncm91cC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwcGluZ01ldGhvZCh2OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcHBpbmdNZXRob2RUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcHBpbmdNZXRob2QoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbWV0aG9kRm9yU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RGb3JTZWxlY3Rpbmc+KERFRkFVTFRfU0VMRUNUX01FVEhPRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtZXRob2RGb3JTZWxlY3RpbmcgPSB0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tZXRob2RGb3JTZWxlY3RpbmdUcmFuc2Zvcm0gPSAodjogTWV0aG9kRm9yU2VsZWN0aW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9uZScgfHwgdiA9PT0gJ3NlbGVjdCcgfHwgdiA9PT0gJ211bHRpLXNlbGVjdCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtZXRob2RGb3JTZWxlY3RpbmdcIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSBgbm9uZWAsIGBzZWxlY3RgIG9yIGBtdWx0aS1zZWxlY3RgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TRUxFQ1RfTUVUSE9EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuIERlZmF1bHQgdmFsdWUgaXMgJ25vbmUnLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1ldGhvZEZvclNlbGVjdGluZyh2OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tZXRob2RGb3JTZWxlY3RpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1ldGhvZEZvclNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kdHJhY2tCeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihUUkFDS19CWV9QUk9QRVJUWV9OQU1FKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHRyYWNrQnkgPSB0aGlzLl8kdHJhY2tCeS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfdHJhY2tCeVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInRyYWNrQnlcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBieSB3aGljaCB0cmFja2luZyBpcyBwZXJmb3JtZWRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl90cmFja0J5VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyR0cmFja0J5Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgdHJhY2tCeSgpIHsgcmV0dXJuIHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCk7IH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcmVlblJlYWRlck1lc3NhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2NyZWVuUmVhZGVyTWVzc2FnZSA9IHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JlZW5SZWFkZXJNZXNzYWdlVHJhbnNmb3JtID0gKHY6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2NyZWVuUmVhZGVyTWVzc2FnZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lc3NhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXHJcbiAgICogVGhlIG1lc3NhZ2UgZm9ybWF0IGlzOiBcInNvbWUgdGV4dCAkMSBzb21lIHRleHQgJDJcIixcclxuICAgKiB3aGVyZSAkMSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbixcclxuICAgKiAkMiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHNjcmVlbiBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvdGVjdGVkIHNldCBzY3JlZW5SZWFkZXJNZXNzYWdlKHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JlZW5SZWFkZXJNZXNzYWdlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgZ2V0IHNjcmVlblJlYWRlck1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFKTtcclxuICBwcm90ZWN0ZWQgJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihERUZBVUxUX0xBTkdfVEVYVF9ESVIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2xhbmdUZXh0RGlyVHJhbnNmb3JtID0gKHY6IFRleHREaXJlY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsYW5nVGV4dERpclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0xBTkdfVEVYVF9ESVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmb3IgdGhlIGxvY2FsZS5cclxuICAgKiBDYW4gYmUgZWl0aGVyIFwibHRyXCIgKGxlZnQtdG8tcmlnaHQpIG9yIFwicnRsXCIgKHJpZ2h0LXRvLWxlZnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xhbmdUZXh0RGlyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNOb3RTZWxlY3RpbmcgPSB0aGlzLmdldElzTm90U2VsZWN0aW5nKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzU2luZ2xlU2VsZWN0aW5nID0gdGhpcy5nZXRJc1NpbmdsZVNlbGVjdGluZygpO1xyXG5cclxuICBwcml2YXRlIF9pc011bHRpU2VsZWN0aW5nID0gdGhpcy5nZXRJc011bHRpU2VsZWN0aW5nKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDogYm9vbGVhbiA9IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGlzVmVydGljYWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNWZXJ0aWNhbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfJGlzVmVydGljYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgcHJvdGVjdGVkICRpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHByb3RlY3RlZCAkY2xhc3NlcyA9IHRoaXMuXyRjbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcmVuZGVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCAkcHJlcmVuZGVyRW5hYmxlZCA9IHRoaXMuXyRwcmVyZW5kZXJFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZEl0ZW1JZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG5cclxuICBwcml2YXRlIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50Pj4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgJGJvdW5kczogT2JzZXJ2YWJsZTxJU2l6ZSB8IG51bGw+ID0gdGhpcy5fJGJvdW5kcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEVuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBzY3JvbGxlciA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpLCBib3VuZHMgPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCksIHNuYXBwZWRDb21wb25lbnRzID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgaWYgKGxpc3QgJiYgc2Nyb2xsZXIgJiYgc25hcHBlZENvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29tcCBvZiBzbmFwcGVkQ29tcG9uZW50cykge1xyXG4gICAgICAgIGlmICghIWNvbXApIHtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhckxlbmd0aCA9IGAke2lzVmVydGljYWwgPyBsaXN0Qm91bmRzLndpZHRoIDogbGlzdEJvdW5kcy5oZWlnaHR9JHtQWH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTtcclxuICAgICAgaWYgKHNuYXBwaW5nTWV0aG9kID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQpIHtcclxuICAgICAgICBjb25zdCBzbmFwcGVkQ29tcG9uZW50ID0gc25hcHBlZENvbXBvbmVudHM/LlswXS5pbnN0YW5jZTtcclxuICAgICAgICBpZiAoISFzbmFwcGVkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcyA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGh9ICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aH0gMCBaXCIpYDtcclxuXHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoOiBzV2lkdGgsIGhlaWdodDogc0hlaWdodCB9ID0gc25hcHBlZENvbXBvbmVudC5nZXRCb3VuZHMoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50ID0gc2Nyb2xsZXIubmF0aXZlRWxlbWVudCwgZGVsdGEgPSBzbmFwcGVkQ29tcG9uZW50Lml0ZW0/Lm1lYXN1cmVzLmRlbHRhID8/IDAsXHJcbiAgICAgICAgICAgIHNjcm9sbEJhclNpemUgPSB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7XHJcblxyXG4gICAgICAgICAgbGV0IGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgbGVmdCA9IDA7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplICsgMjtcclxuICAgICAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAobGFuZ1RleHREaXIgPT09IFRleHREaXJlY3Rpb25zLlJUTCkge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdCA9IHNXaWR0aDtcclxuICAgICAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICAgICAgdG9wID0gMDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7d2lkdGh9IDAgTCAke3dpZHRofSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgMCBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IG51bWJlciwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUixcclxuICAgIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pID0+IHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSEsIHsgd2lkdGg6IGVsZW1lbnRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50SGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxyXG4gICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICBlbGVtZW50U2l6ZSA9IGlzVmVydGljYWwgPyBlbGVtZW50SGVpZ2h0IDogZWxlbWVudFdpZHRoO1xyXG4gICAgICBsZXQgcG9zOiBudW1iZXIgPSBOdW1iZXIuTmFOO1xyXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuU1RBUlQ6IHtcclxuICAgICAgICAgIHBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUjoge1xyXG4gICAgICAgICAgcG9zID0gcG9zaXRpb24gLSAodmlld3BvcnRTaXplIC0gZWxlbWVudFNpemUpICogLjU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuRU5EOiB7XHJcbiAgICAgICAgICBwb3MgPSBwb3NpdGlvbiAtICh2aWV3cG9ydFNpemUgLSBlbGVtZW50U2l6ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gc2Nyb2xsZXI/LnNjcm9sbFdpZHRoID8/IDAsIHNjcm9sbEhlaWdodCA9IHNjcm9sbGVyPy5zY3JvbGxIZWlnaHQgPz8gMDtcclxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgaWYgKHBvcyA8IDApIHtcclxuICAgICAgICAgICAgcG9zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwb3MgPiBzY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgcG9zID0gc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocG9zIDwgMCkge1xyXG4gICAgICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcyA+IHNjcm9sbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHBvcyA9IHNjcm9sbFdpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBwb3MsIGJlaGF2aW9yLFxyXG4gICAgICAgICAgZmlyZVVwZGF0ZTogdHJ1ZSwgYmxlbmRpbmc6IHRydWUsIHVzZXJBY3Rpb246IHRydWUsIGR1cmF0aW9uOiB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCkubmF2aWdhdGVUb0l0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY3JvbGxlci5yZWZyZXNoKGZhbHNlKTtcclxuICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcbiAgcHJvdGVjdGVkIGdldCBpdGVtQ29tcG9uZW50Q2xhc3MoKSB7IHJldHVybiB0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3M7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHVwZGF0ZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHVwZGF0ZSA9IHRoaXMuXyR1cGRhdGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvRXhlY3V0b3IgPSBuZXcgU3ViamVjdDxJU2Nyb2xsUGFyYW1zPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsVG9FeGVjdXRvciA9IHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsaW5nVG8gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbCA9IG5ldyBTdWJqZWN0PElTY3JvbGxFdmVudD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsID0gdGhpcy5fJHNjcm9sbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5ICR0aWNrID0gdGhpcy5fJHRpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRmaXJlVXBkYXRlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGZpcmVVcGRhdGUgPSB0aGlzLl8kZmlyZVVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGVOZXh0RnJhbWUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZU5leHRGcmFtZSA9IHRoaXMuXyRmaXJlVXBkYXRlTmV4dEZyYW1lLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJldmVudFNjcm9sbFNuYXBwaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF91cGRhdGVJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGF0ZVVwZGF0ZUluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVkID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGNhY2hhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXJlbmRlcj8uYWN0aXZlID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBwcmVyZW5kZXJhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpICYmICh0aGlzLl90cmFja0JveD8uaXNTbmFwcGVkVG9FbmQgPz8gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgJGRlc3Ryb3kgPSB0aGlzLl8kZGVzdHJveS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemU6IG51bWJlciwgc2Nyb2xsU2l6ZTogbnVtYmVyLCBjYWNoZVZlcnNpb246IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodG90YWxTaXplID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT047XHJcbiAgICB9XHJcbiAgICBpZiAodG90YWxTaXplIDwgc2Nyb2xsU2l6ZSkge1xyXG4gICAgICB0aGlzLl9zY3JvbGxTdGF0ZVVwZGF0ZUluZGV4ID0gdGhpcy5fc2Nyb2xsU3RhdGVVcGRhdGVJbmRleCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgPyAwIDogdGhpcy5fc2Nyb2xsU3RhdGVVcGRhdGVJbmRleCArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7dGhpcy5fc2Nyb2xsU3RhdGVVcGRhdGVJbmRleH1fJHt0b3RhbFNpemV9XyR7c2Nyb2xsU2l6ZX1fJHtjYWNoZVZlcnNpb259YDtcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDEgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxO1xyXG4gICAgdGhpcy5faWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl9pZCwgdGhpcy5fdHJhY2tCb3gpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuYW5pbWF0aW9uUGFyYW1zID0gdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpO1xyXG5cclxuICAgIGNvbnN0ICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy4kc25hcFNjcm9sbFRvRW5kO1xyXG4gICAgY29tYmluZUxhdGVzdChbJGR5bmFtaWNTaXplLCAkc25hcFNjcm9sbFRvRW5kXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2R5bmFtaWNTaXplLCBzbmFwU2Nyb2xsVG9FbmRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHByZXJlbmRlckVuYWJsZWQubmV4dChkeW5hbWljU2l6ZSAmJiBzbmFwU2Nyb2xsVG9FbmQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kdGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8udGljaygpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kdGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrQm91bmRzT2ZFbGVtZW50cygpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py50aWNrKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRkaXJlY3Rpb24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgbWFwKHYgPT4gdGhpcy5pc1ZlcnRpY2FsKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc1ZlcnRpY2FsLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBoYXNVc2VyQWN0aW9uID0gZmFsc2UsIGhhc1Njcm9sbGJhclVzZXJBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsZXIubmV4dCh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVmlld3BvcnQpO1xyXG4gICAgdGhpcy5fJGxpc3QubmV4dCh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgJHJlc2l6ZVZpZXdwb3J0ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQhLiRyZXNpemVWaWV3cG9ydCxcclxuICAgICAgJHJlc2l6ZUNvbnRlbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCEuJHJlc2l6ZUNvbnRlbnQhO1xyXG5cclxuICAgICRyZXNpemVWaWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh2KTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZXNpemUodHJ1ZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkcmVzaXplQ29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRsaXN0Qm91bmRzLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVzaXplKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnk7XHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UudHJhY2tCeSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5kaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxlci5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxWaWV3cG9ydCk7XHJcbiAgICB0aGlzLl8kbGlzdC5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxDb250ZW50KTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRmb2N1c0l0ZW0ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbGlzdCA9IHRoaXMuJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwcmV2ZW50S2V5Ym9hcmRFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCwgaXNWZXJ0aWNhbDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksIHNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgc2Nyb2xsV2VpZ2h0ID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGlmIChzY3JvbGxhYmxlIHx8IHNjcm9sbFNpemUgPD0gc2Nyb2xsU3RhcnRPZmZzZXQgfHwgc2Nyb2xsU2l6ZSA+PSBzY3JvbGxXZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghIWV2ZW50ICYmIGV2ZW50LmNhbmNlbGFibGUpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZWxlbWVudCA9PiAhIWVsZW1lbnQpLFxyXG4gICAgICBzd2l0Y2hNYXAoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCBFVkVOVF9LRVlfRE9XTikucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1VQOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLiRzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAkc2Nyb2xsYmFyVGhpY2tuZXNzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoc2Nyb2xsYmFyVGhpY2tuZXNzID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbEJhclNpemUgPSBzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRmaXJlVXBkYXRlTmV4dEZyYW1lLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvSXRlbSA9IHRoaXMuJHNjcm9sbFRvLnBpcGUodGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSkpLFxyXG4gICAgICAkbW91c2VEb3duID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgTU9VU0VfRE9XTikucGlwZSh0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSksXHJcbiAgICAgICR0b3VjaFN0YXJ0ID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgVE9VQ0hfU1RBUlQpLnBpcGUodGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSkpO1xyXG5cclxuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgS0VZX0RPV04pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZSA9PiBlLmtleSA9PT0gS0VZX1RBQiksXHJcbiAgICAgIHN3aXRjaE1hcChlID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgRk9DVVMpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGRlbGF5KDApLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCRzY3JvbGxUb0l0ZW0pLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCRtb3VzZURvd24pLFxyXG4gICAgICAgICAgdGFrZVVudGlsKCR0b3VjaFN0YXJ0KSxcclxuICAgICAgICAgIHRhcChlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1c0ZpcnN0RWxlbWVudCgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChvcHRpb25zID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvU3RhcnQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUby5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBpZCwgY2IsIG9wdGlvbnMgfSA9IHBhcmFtcyE7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUbyhpZCwgY2IsIG9wdGlvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9FbmQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChvcHRpb25zID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRW5kKG51bGwsIG9wdGlvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5sYW5nVGV4dERpciA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY2xpY2tEaXN0YW5jZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJlcmVuZGVyQ29udGFpbmVyID0gb2YodGhpcy5fcHJlcmVuZGVyKTtcclxuXHJcbiAgICBjb25zdCAkcHJlcmVuZGVyID0gJHByZXJlbmRlckNvbnRhaW5lci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgc3dpdGNoTWFwKHYgPT4gdiEuJHJlbmRlciksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0ICRmaXJlVXBkYXRlID0gdGhpcy4kZmlyZVVwZGF0ZTtcclxuICAgICRmaXJlVXBkYXRlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdXBkYXRlID0gdGhpcy4kdXBkYXRlLFxyXG4gICAgICByZW5kZXJTdGFiaWxpemVyID0gKG9wdGlvbnM/OiBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMpID0+IHtcclxuICAgICAgICBsZXQgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTixcclxuICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICBjb25zdCBwcmVwYXJlSXRlcmF0aW9ucyA9IG9wdGlvbnM/LnByZXBhcmVJdGVyYXRpb25zID8/IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aCA9IG9wdGlvbnM/LnByZXBhcmVSZXVwZGF0ZUxlbmd0aCA/PyBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEg7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT047XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiAkdXBkYXRlLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgodikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCgocmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPT09IEVNUFRZX1NDUk9MTF9TVEFURV9WRVJTSU9OKSB8fCAocmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gIT09IHYpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAocmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPCBwcmVwYXJlSXRlcmF0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IEVNUFRZX1NDUk9MTF9TVEFURV9WRVJTSU9OKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID09PSB2KSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucyA8IHByZXBhcmVSZXVwZGF0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zKys7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKVxyXG4gICAgICB9O1xyXG4gICAgY29uc3QgJGluaXRpYWxSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlMsXHJcbiAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RILFxyXG4gICAgfSksXHJcbiAgICAgICR1cGRhdGVJdGVtc1JlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgfSksXHJcbiAgICAgICRjaHVua0xvYWRpbmdSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgIH0pLFxyXG4gICAgICAkY29sbGFwc2VJdGVtc1JlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9DT0xMQVBTRV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgICAgIH0pLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcyxcclxuICAgICAgJGR5bmFtaWNTaXplID0gdGhpcy4kZHluYW1pY1NpemUsXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuJHNuYXBTY3JvbGxUb1N0YXJ0LFxyXG4gICAgICAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy4kc25hcFNjcm9sbFRvRW5kLFxyXG4gICAgICAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy4kd2FpdEZvclByZXBhcmF0aW9uO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRwcmVyZW5kZXJDb250YWluZXIsICRkeW5hbWljU2l6ZSwgJHNuYXBTY3JvbGxUb1N0YXJ0LCAkc25hcFNjcm9sbFRvRW5kLCAkd2FpdEZvclByZXBhcmF0aW9uXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcigoW3ByZXJlbmRlckNvbnRhaW5lcl0pID0+ICEhcHJlcmVuZGVyQ29udGFpbmVyKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBzd2l0Y2hNYXAoKFtwcmVyZW5kZXJDb250YWluZXIsIGR5bmFtaWNTaXplLCBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCB3YWl0Rm9yUHJlcGFyYXRpb25dKSA9PiB7XHJcbiAgICAgICAgaWYgKCEhZHluYW1pY1NpemUgJiYgIXNuYXBTY3JvbGxUb1N0YXJ0ICYmICEhc25hcFNjcm9sbFRvRW5kICYmICEhd2FpdEZvclByZXBhcmF0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gJGl0ZW1zLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBMZW5ndGggPSBwPy5sZW5ndGggPz8gMCwgY0xlbmd0aCA9IGM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhKChjTGVuZ3RoID4gMCkgfHwgKHBMZW5ndGggIT09IGNMZW5ndGggJiYgKHBMZW5ndGggPT09IDAgfHwgY0xlbmd0aCA9PT0gMCkpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLml0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy53YWl0Rm9yUHJlcGFyYXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAod2FpdEZvclByZXBhcmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghdikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9mZigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3Qgd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy53YWl0Rm9yUHJlcGFyYXRpb247XHJcbiAgICAgICAgICAgICAgaWYgKHdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vbih0aGlzLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAkaW5pdGlhbFJlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Rm9yU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICByZXR1cm4gJGl0ZW1zLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICB0YXAoaXRlbXMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlQ2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLml0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHY/Lmxlbmd0aCA+IDApLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRwcmVyZW5kZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcChjYWNoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVmcmVzaENhY2hlKGNhY2hlKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jYWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRmb2N1c2VkSWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kZm9jdXNlZEVsZW1lbnQubmV4dCh2ID8/IG51bGwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlbGVtZW50ID0+ICEhZWxlbWVudCksXHJcbiAgICAgIHRhcChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRkZWZhdWx0SXRlbVZhbHVlID0gdGhpcy4kZGVmYXVsdEl0ZW1WYWx1ZSxcclxuICAgICAgJHNlbGVjdEJ5Q2xpY2sgPSB0aGlzLiRzZWxlY3RCeUNsaWNrLFxyXG4gICAgICAkY29sbGFwc2VCeUNsaWNrID0gdGhpcy4kY29sbGFwc2VCeUNsaWNrLFxyXG4gICAgICAkaXNTY3JvbGxTdGFydCA9IHRoaXMuXyRpc1Njcm9sbFN0YXJ0LmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXNTY3JvbGxFbmQgPSB0aGlzLl8kaXNTY3JvbGxFbmQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRzY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuJHNjcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAkc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy4kc2Nyb2xsRW5kT2Zmc2V0LFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNuYXBTY3JvbGxUb1N0YXJ0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9TdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcFNjcm9sbFRvRW5kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9FbmQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzVmVydGljYWwgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5keW5hbWljID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkZWZhdWx0SXRlbVZhbHVlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5kZWZhdWx0SXRlbVZhbHVlID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxTdGFydE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxFbmRPZmZzZXQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRW5kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiAmJiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hFbmQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RCeUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb2xsYXBzZUJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlQnlDbGljayA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnRyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLiRib3VuZHMucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuJHNjcm9sbFNpemUsXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJGJ1ZmZlclNpemUgPSB0aGlzLiRidWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRtYXhCdWZmZXJTaXplID0gdGhpcy4kbWF4QnVmZmVyU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbUNvbmZpZ01hcCA9IHRoaXMuJGl0ZW1Db25maWdNYXAucGlwZShcclxuICAgICAgICBtYXAodiA9PiAhdiA/IHt9IDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwID0gdGhpcy4kc25hcCxcclxuICAgICAgJGlzTGF6eSA9IHRoaXMuJGNvbGxlY3Rpb25Nb2RlLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc0xhenkodiB8fCBERUZBVUxUX0NPTExFQ1RJT05fTU9ERSkpLFxyXG4gICAgICApLFxyXG4gICAgICAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IHRoaXMuJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpLFxyXG4gICAgICApLFxyXG4gICAgICAkbWV0aG9kRm9yU2VsZWN0aW5nID0gdGhpcy4kbWV0aG9kRm9yU2VsZWN0aW5nLFxyXG4gICAgICAkc2VsZWN0ZWRJZHMgPSB0aGlzLiRzZWxlY3RlZElkcyxcclxuICAgICAgJGNvbGxhcHNlZElkcyA9IHRoaXMuJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IEFycmF5LmlzQXJyYXkodikgPyB2IDogW10pLFxyXG4gICAgICApLFxyXG4gICAgICAkY29sbGFwc2VkSXRlbUlkcyA9IHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRhY3R1YWxJdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICApLFxyXG4gICAgICAkc2NyZWVuUmVhZGVyTWVzc2FnZSA9IHRoaXMuJHNjcmVlblJlYWRlck1lc3NhZ2UsXHJcbiAgICAgICRkaXNwbGF5SXRlbXMgPSB0aGlzLl9zZXJ2aWNlLiRkaXNwbGF5SXRlbXMsXHJcbiAgICAgICRjYWNoZVZlcnNpb24gPSB0aGlzLl9zZXJ2aWNlLiRjYWNoZVZlcnNpb247XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGRpc3BsYXlJdGVtcywgJHNjcmVlblJlYWRlck1lc3NhZ2UsICRpc1ZlcnRpY2FsLCAkc2Nyb2xsU2l6ZSwgJGJvdW5kc10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2l0ZW1zLCBzY3JlZW5SZWFkZXJNZXNzYWdlLCBpc1ZlcnRpY2FsLCBzY3JvbGxTaXplLCBib3VuZHNdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UubmV4dChcclxuICAgICAgICAgIGZvcm1hdFNjcmVlblJlYWRlck1lc3NhZ2UoaXRlbXMsIHNjcmVlblJlYWRlck1lc3NhZ2UsIHNjcm9sbFNpemUsIGlzVmVydGljYWwsIGJvdW5kcyEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc0xhenkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc0xhenkgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1zQ29tcG9zaXRpb24gPSAkaXRlbXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChpdGVtcyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoWyRjb2xsYXBzZWRJdGVtSWRzLCAkaXRlbUNvbmZpZ01hcCwgJHRyYWNrQnldKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKFtjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnldKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnkgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgJGl0ZW1zQ29tcG9zaXRpb24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5IH0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgISh0aGlzLmNhY2hhYmxlICYmICF0aGlzLl9jYWNoZWQgJiZcclxuICAgICAgICAgICF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICR1cGRhdGVJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnkgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnkgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhpZGRlbkl0ZW1zID0gbmV3IENNYXA8SWQsIGJvb2xlYW4+KCk7XHJcblxyXG4gICAgICAgIGxldCBpc0NvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgZ3JvdXAgPSAoaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwKSA+IDAsIGNvbGxhcHNlZCA9IGNvbGxhcHNlZElkcy5pbmNsdWRlcyhpZCk7XHJcbiAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaXNDb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICBoaWRkZW5JdGVtcy5zZXQoaWQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxJdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XTtcclxuICAgICAgICAgIGlmIChoaWRkZW5JdGVtcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWN0dWFsSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxJdGVtcy5uZXh0KGFjdHVhbEl0ZW1zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRvZ2dsZUNsYXNzTmFtZShlbCwgdiA/IENMQVNTX0xJU1RfVkVSVElDQUwgOiBDTEFTU19MSVNUX0hPUklaT05UQUwsIHYgPyBDTEFTU19MSVNUX0hPUklaT05UQUwgOiBDTEFTU19MSVNUX1ZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbWV0aG9kRm9yU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNOb3RTZWxlY3RpbmcgPSB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgUk9MRV9MSVNUX0JPWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgUk9MRV9MSVNUX0JPWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgUk9MRV9MSVNUKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UubWV0aG9kT2ZTZWxlY3RpbmcgPSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJldmVudFNjcm9sbFNuYXBwaW5nID0gdGhpcy4kcHJldmVudFNjcm9sbFNuYXBwaW5nO1xyXG5cclxuICAgICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAkY29sbGFwc2VJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG5cclxuICAgIGxldCBpc0NodW5rTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3QgJGxvYWRpbmcgPSB0aGlzLiRsb2FkaW5nO1xyXG4gICAgJGxvYWRpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICF2KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICBpc0NodW5rTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKCEhc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICBzY3JvbGxiYXIuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgc2Nyb2xsYmFyLnJlZnJlc2hTY3JvbGxiYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICRhY3R1YWxJdGVtcy5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGVOZXh0RnJhbWUubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+ICRjaHVua0xvYWRpbmdSZW5kZXJTdGFiaWxpemVyLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzQ2h1bmtMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDYWNoZUNodW5rSW5mbygpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGJhciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmICghIXNjcm9sbGJhcikge1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsYmFyLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGJhci5yZWZyZXNoU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcblxyXG4gICAgJGxvYWRpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlID0gKHBhcmFtczoge1xyXG4gICAgICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiwgc25hcFNjcm9sbFRvRW5kOiBib29sZWFuOyBib3VuZHM6IElTaXplOyBsaXN0Qm91bmRzOiBJU2l6ZTsgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7XHJcbiAgICAgIGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uPE9iamVjdD47IGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA7IHNjcm9sbFNpemU6IG51bWJlcjsgaXRlbVNpemU6IG51bWJlcjtcclxuICAgICAgYnVmZmVyU2l6ZTogbnVtYmVyOyBtYXhCdWZmZXJTaXplOiBudW1iZXI7IHNuYXA6IGJvb2xlYW47IGlzVmVydGljYWw6IGJvb2xlYW47IGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuOyBjYWNoZVZlcnNpb246IG51bWJlcjsgdXNlckFjdGlvbjogYm9vbGVhbjsgY29sbGFwc2VkSWRzOiBBcnJheTxJZD47XHJcbiAgICB9LCBvcHRpbWl6YXRpb246IGJvb2xlYW4gPSBmYWxzZSwgcmV1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSxcclxuICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uLCBjb2xsYXBzZWRJZHMsXHJcbiAgICAgIH0gPSBwYXJhbXM7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCBjb2xsYXBzYWJsZSA9IGNvbGxhcHNlZElkcy5sZW5ndGggPiAwLCBjYWNoYWJsZSA9IHRoaXMuY2FjaGFibGUsIGNhY2hlZCA9IHRoaXMuX2NhY2hlZCwgd2FpdGluZ0NhY2hlID0gY2FjaGFibGUgJiYgIWNhY2hlZCxcclxuICAgICAgICAgIGVtaXRVcGRhdGUgPSAhdGhpcy5fcmVhZHlGb3JTaG93IHx8IHdhaXRpbmdDYWNoZSB8fCBjb2xsYXBzYWJsZSB8fCBpc0NodW5rTG9hZGluZztcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93IHx8IChjYWNoYWJsZSAmJiBjYWNoZWQpKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5zY3JvbGxMZWZ0ID8/IDApLFxyXG4gICAgICAgICAgICBmaXJlVXBkYXRlID0gZW1pdFVwZGF0ZSB8fCByZXVwZGF0ZSB8fCAoIW9wdGltaXphdGlvbiAmJiAhdXNlckFjdGlvbikgfHwgdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgJiYgc25hcFNjcm9sbFRvRW5kID8gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoID8/IDApIDpcclxuICAgICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbExlZnQgPz8gMCksXHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcywgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCksXHJcbiAgICAgICAgICAgIG9wdHM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc25hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvRW5kICYmICF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXM6IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogY2FsY3VsYXRlZFRvdGFsU2l6ZTEgfSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplIH0pO1xyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNjcm9sbGVyLnRvdGFsU2l6ZSA9IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLl8kdG90YWxTaXplLm5leHQodG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgIHRoaXMuc25hcHBpbmdIYW5kbGVyKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA9IE1hdGgucm91bmQoYWN0dWFsU2Nyb2xsU2l6ZSArIGRlbHRhKSxcclxuICAgICAgICAgICAgcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBNYXRoLnJvdW5kKHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpLFxyXG4gICAgICAgICAgICByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSA9IE1hdGgucm91bmQodG90YWxTaXplIC0gdmlld3BvcnRTaXplKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuZGVsdGEgPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICBpZiAoKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQpIHx8XHJcbiAgICAgICAgICAgIChzbmFwU2Nyb2xsVG9TdGFydCAmJiBjdXJyZW50U2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKSkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNjcm9sbFNpemUgIT09IHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiAwLCB1c2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgZmlyZVVwZGF0ZTogdHJ1ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQodGhpcy5nZXRTY3JvbGxTdGF0ZVZlcnNpb24odG90YWxTaXplLCB0aGlzLl9pc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgY2FjaGVWZXJzaW9uKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoKHNuYXBTY3JvbGxUb0VuZCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkgfHwgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQgJiYgIXNjcm9sbGVyLnNjcm9sbGFibGUpIHx8XHJcbiAgICAgICAgICAgIChzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICsgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORyA+PSByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgKHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID49IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgKyBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgICBmaXJlVXBkYXRlOiB0cnVlLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCwgdXNlckFjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYmxlbmRpbmc6IGZhbHNlLCBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25QYXJhbXMuc2Nyb2xsVG9JdGVtLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyR1cGRhdGUubmV4dCh0aGlzLmdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LCBjYWNoZVZlcnNpb24pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT09IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgJiZcclxuICAgICAgICAgICAgKChzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID49IDAgJiYgc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA8IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlKSB8fFxyXG4gICAgICAgICAgICAgIChzY3JvbGxTaXplICE9PSByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSB8fCBjdXJyZW50U2Nyb2xsU2l6ZSAhPT0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlLCBibGVuZGluZzogdHJ1ZSwgdXNlckFjdGlvbixcclxuICAgICAgICAgICAgICBmaXJlVXBkYXRlLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCwgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQodGhpcy5nZXRTY3JvbGxTdGF0ZVZlcnNpb24odG90YWxTaXplLCB0aGlzLl9pc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgY2FjaGVWZXJzaW9uKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KHRoaXMuZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQsIGNhY2hlVmVyc2lvbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgcHJldkl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICBjb25zdCBkZWJvdW5jZWRVcGRhdGUgPSBkZWJvdW5jZSh1cGRhdGUsIDAsIE1BWF9OVU1CRVJTX09GX1NLSVBTX0ZPUl9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxKTtcclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzbmFwU2Nyb2xsVG9TdGFydCwgJHNuYXBTY3JvbGxUb0VuZCwgJGJvdW5kcywgJGxpc3RCb3VuZHMsICRzY3JvbGxFbmRPZmZzZXQsICRhY3R1YWxJdGVtcywgJGl0ZW1Db25maWdNYXAsICRzY3JvbGxTaXplLCAkaXRlbVNpemUsXHJcbiAgICAgICRjb2xsYXBzZWRJdGVtSWRzLCAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbiwgdGhpcy4kZmlyZVVwZGF0ZSxcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtcclxuICAgICAgICBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHMsIGxpc3RCb3VuZHMsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLFxyXG4gICAgICAgIGNvbGxhcHNlZElkcywgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAocHJldkl0ZW1zICE9PSBpdGVtcykge1xyXG4gICAgICAgICAgaXRlbXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHByZXZJdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZW5hYmxlZE9wdGltaXphdGlvbiA9IHRoaXMuc2Nyb2xsaW5nU2V0dGluZ3M/Lm9wdGltaXphdGlvbiA/PyBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5vcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50LCB2ZWxvY2l0eSA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5hdmVyYWdlVmVsb2NpdHkgPz8gMCxcclxuICAgICAgICAgIG1heFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gKHNjcm9sbGVyPy5zY3JvbGxIZWlnaHQgfHwgMCkgOiAoc2Nyb2xsZXI/LnNjcm9sbFdpZHRoID8/IDApLFxyXG4gICAgICAgICAgaXNFZGdlcyA9IHNjcm9sbFNpemUgPT09IDAgfHwgc2Nyb2xsU2l6ZSA9PT0gbWF4U2Nyb2xsU2l6ZSwgaXNTY3JvbGxpbmcgPSB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKSxcclxuICAgICAgICAgIHVzZURlYm91bmNlZFVwZGF0ZSA9IGR5bmFtaWNTaXplICYmICFpdGVtc0NoYW5nZWQgJiYgaGFzVXNlckFjdGlvbiAmJiAhaXNTY3JvbGxpbmcgJiYgKHZlbG9jaXR5ID4gMCAmJiB2ZWxvY2l0eSA8IE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpLFxyXG4gICAgICAgICAgcmVyZW5kZXJPcHRpbWl6YXRpb24gPSBlbmFibGVkT3B0aW1pemF0aW9uICYmIGR5bmFtaWNTaXplICYmICFpdGVtc0NoYW5nZWQgJiYgKGhhc1VzZXJBY3Rpb24gfHwgaGFzU2Nyb2xsYmFyVXNlckFjdGlvbikgJiYgIWlzRWRnZXMgJiYgdmVsb2NpdHkgPiAwICYmXHJcbiAgICAgICAgICAgICh2ZWxvY2l0eSA+IE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDIgfHwgaGFzVXNlckFjdGlvbik7XHJcbiAgICAgICAgaWYgKGVuYWJsZWRPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgIGlmICh1c2VEZWJvdW5jZWRVcGRhdGUpIHtcclxuICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgICAgIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kcywgbGlzdEJvdW5kcywgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIGNvbGxhcHNlZElkcyxcclxuICAgICAgICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgICB9LCByZXJlbmRlck9wdGltaXphdGlvbiwgaXRlbXNDaGFuZ2VkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzU2Nyb2xsaW5nKSB7XHJcbiAgICAgICAgICB1cGRhdGUoe1xyXG4gICAgICAgICAgICBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHM6IGJvdW5kcyEsIGxpc3RCb3VuZHM6IGxpc3RCb3VuZHMhLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgY29sbGFwc2VkSWRzLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgfSwgcmVyZW5kZXJPcHRpbWl6YXRpb24sIGl0ZW1zQ2hhbmdlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGVyID0gdGhpcy4kc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKSxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQhLiRzY3JvbGwsXHJcbiAgICAgICRzY3JvbGxlclNjcm9sbEVuZCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50IS4kc2Nyb2xsRW5kLFxyXG4gICAgICAkc2Nyb2xsYmFyU2Nyb2xsID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQhLiRzY3JvbGxiYXJTY3JvbGw7XHJcblxyXG4gICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9ICh1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpLCBsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgIHNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyAobGlzdEJvdW5kcz8uaGVpZ2h0ID8/IDApIC0gKGJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKGxpc3RCb3VuZHM/LndpZHRoID8/IDApIC0gKGJvdW5kcz8ud2lkdGggPz8gMCksXHJcbiAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgaWYgKHVzZXJBY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQpIHtcclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA+IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPCAobWF4U2Nyb2xsU2l6ZSAtIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGJhclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGhhc1Njcm9sbGJhclVzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgaGFzVXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGhhc1VzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoc2Nyb2xsZXJFbCAmJiBzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbEVuZC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICBoYXNVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHNjcm9sbGVyRWwgJiYgc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsVG8gPSB0aGlzLiRzY3JvbGxUbyxcclxuICAgICAgJHNjcm9sbFRvRXhlY3V0b3IgPSB0aGlzLiRzY3JvbGxUb0V4ZWN1dG9yO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzY3JvbGxlciwgJHRyYWNrQnksICRzY3JvbGxUb10pLnBpcGUoXHJcbiAgICAgIGZpbHRlcigoW3Njcm9sbGVyXSkgPT4gc2Nyb2xsZXIgIT09IHVuZGVmaW5lZCksXHJcbiAgICAgIG1hcCgoW3Njcm9sbGVyLCB0cmFja0J5LCBldmVudF0pID0+ICh7IHNjcm9sbGVyOiBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkpLFxyXG4gICAgICB0YXAoKHsgZXZlbnQgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxpbmdUby5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQoZXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFRvRXhlY3V0b3IucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQsIGl0ZXJhdGlvbiA9IDAsIGJsZW5kaW5nID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlLCBzY3JvbGxDYWxsZWQgPSBmYWxzZSwgY2IsXHJcbiAgICAgICAgICB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9IGl0ZXJhdGlvbiArIDEsIGZpbmlzaGVkID0gbmV4dEl0ZXJhdGlvbiA+PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGZpcmVVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZywgc2Nyb2xsQ2FsbGVkLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZSwgc25hcFNjcm9sbFRvRW5kID0gdGhpcy5zbmFwU2Nyb2xsVG9FbmQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2Nyb2xsU2l6ZSA9IHNuYXBTY3JvbGxUb0VuZCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCA/XHJcbiAgICAgICAgICAgICAgICAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFdpZHRoKSA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgICAgICB9KSwgZGVsdGExID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnRvdGFsU2l6ZSA9IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlkIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgc2Nyb2xsQ2FsbGVkLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vdENoYW5nZWQgPSBzY3JvbGxTaXplID09PSBjdXJyZW50U2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgJiYgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcixcclxuICAgICAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmxlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHtcclxuICAgICAgICAgICAgICAgICAgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgc2Nyb2xsQ2FsbGVkLCBjYlxyXG4gICAgICAgICAgICAgICAgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBzY3JvbGxDYWxsZWQsIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RyYWNrQnldID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW50U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpbmRleCAqIHRoaXMuaXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGZpcmVVcGRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsIGJsZW5kaW5nLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2ZpbmlzaGVkLCBwYXJhbXNdKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyYW1zID0gcGFyYW1zIGFzIElTY3JvbGxQYXJhbXMgJiB7IHNjcm9sbENhbGxlZDogYm9vbGVhbjsgfTtcclxuICAgICAgICBpZiAoIWZpbmlzaGVkICYmICFzY3JvbGxQYXJhbXM/LnNjcm9sbENhbGxlZCkge1xyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IubmV4dChwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsaW5nVG8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnJlZnJlc2goZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgc2Nyb2xsUGFyYW1zPy5jYj8uKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbVJlbmRlcmVyID0gdGhpcy4kaXRlbVJlbmRlcmVyO1xyXG5cclxuICAgICRpdGVtUmVuZGVyZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYm91bmRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAoYm91bmRzID0+IHtcclxuICAgICAgICBjb25zdCBzaXplOiBJU2l6ZSA9IHsgd2lkdGg6IGJvdW5kcyEud2lkdGggPz8gMCwgaGVpZ2h0OiBib3VuZHMhLmhlaWdodCA/PyAwIH07XHJcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seShzaXplKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRpdGVtQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVTZWxlY3RpbmcgfHwgKHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0ZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQgPj0gMikge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuY29sbGFwc2VkSWRzO1xyXG4gICAgICAgICAgaWYgKChpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA9PT0gMiAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kZGVzdHJveS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQWZ0ZXJSZXNpemUodXBkYXRlID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc25hcHBpbmdIYW5kbGVyKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgJiYgdXBkYXRlKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlYmFsZSA9IHRoaXMuX3JlYWR5Rm9yU2hvdztcclxuICAgICAgICBpZiAodXBkYXRlYmFsZSkge1xyXG4gICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbGVyLnJlZnJlc2godXBkYXRlYmFsZSwgdXBkYXRlYmFsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCkge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3RyYWNrQm94LmNoZWNrQm91bmRzT2ZFbGVtZW50cygpO1xyXG4gICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgY29uc3QgcmVhZHlGb3JTaG93ID0gdGhpcy5fcmVhZHlGb3JTaG93LFxyXG4gICAgICAgIGlzU2Nyb2xsaW5nID0gdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXModHJ1ZSwgcmVhZHlGb3JTaG93ICYmICFpc1Njcm9sbGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNuYXBwaW5nSGFuZGxlcigpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgIG1heFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoID8/IDApLFxyXG4gICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5zY3JvbGxMZWZ0ID8/IDAsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoc2Nyb2xsU2l6ZSk7XHJcbiAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgJiYgIXRoaXMuX2lzTG9hZGluZykge1xyXG4gICAgICAgIGlmIChtYXhTY3JvbGxTaXplID49IDApIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKTtcclxuICAgICAgICAgIGlmIChpc1Njcm9sbFN0YXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpc1Njcm9sbEVuZCA9IChhY3R1YWxTY3JvbGxTaXplID49IChtYXhTY3JvbGxTaXplIC0gTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpO1xyXG4gICAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoaXNTY3JvbGxFbmQpO1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICBjb25zdCBzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuc25hcFNjcm9sbFRvRW5kO1xyXG4gICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBlbWl0U2Nyb2xsRXZlbnQoaXNTY3JvbGxFbmQ6IGJvb2xlYW4gPSBmYWxzZSwgdXBkYXRlOiBib29sZWFuID0gdHJ1ZSwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXJFbCAmJiBzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsV2lkdGgpLFxyXG4gICAgICAgIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgIGN1cnJlbnRTY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSBjdXJyZW50U2Nyb2xsU2l6ZSA+IHNjcm9sbFNpemUgPyAtMSA6IGN1cnJlbnRTY3JvbGxTaXplIDwgc2Nyb2xsU2l6ZSA/IDEgOiAwO1xyXG4gICAgICBjb25zdCBpdGVtc1JhbmdlID0gZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zKHRoaXMuX3NlcnZpY2UuZGlzcGxheUl0ZW1zLCB0aGlzLnNjcm9sbFN0YXJ0T2Zmc2V0LCB0aGlzLnNjcm9sbEVuZE9mZnNldCxcclxuICAgICAgICBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMpLFxyXG4gICAgICAgIGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uLCBjb250YWluZXI6IHNjcm9sbGVyRWwsXHJcbiAgICAgICAgICBsaXN0OiB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpIS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICBkZWx0YU9mTmV3SXRlbXM6IHRoaXMuX3RyYWNrQm94LmRlbHRhT2ZOZXdJdGVtcywgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICBpdGVtc1JhbmdlLFxyXG4gICAgICAgICAgaXNFbmQ6ICFzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxhYmxlIHx8IHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kIHx8IChNYXRoLnJvdW5kKHNjcm9sbFNpemUpID09PSBNYXRoLnJvdW5kKG1heFNjcm9sbFNpemUpKSxcclxuICAgICAgICAgIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLnNuYXBwaW5nTWV0aG9kO1xyXG4gICAgcmV0dXJuIGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZChtZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc05vdFNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5OT05FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTaW5nbGVTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZztcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNNdWx0aVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5NVUxUSV9TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1ZlcnRpY2FsKGQ/OiBEaXJlY3Rpb24pIHtcclxuICAgIGNvbnN0IGRpciA9IGQgfHwgdGhpcy5kaXJlY3Rpb247XHJcbiAgICByZXR1cm4gaXNEaXJlY3Rpb24oZGlyLCBEaXJlY3Rpb25zLlZFUlRJQ0FMKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNMYXp5KG0/OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxlY3Rpb25Nb2RlKG1vZGUsIENvbGxlY3Rpb25Nb2Rlcy5MQVpZKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgaWYgKCFkaXNwbGF5SXRlbXMgfHwgIXRoaXMuX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh7fSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCkge1xyXG4gICAgICBpZiAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA8IE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA8IE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLml0ZW1SZW5kZXJlcjtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cztcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcik7XHJcbiAgICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94Lml0ZW1zID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgIGNvbnN0IGxpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBpZiAoISFsaXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGRvTWFwOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICBmb3IgKGxldCBsID0gY29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gY29tcG9uZW50c1tpXTtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmluc3RhbmNlLmlkO1xyXG4gICAgICAgICAgaXRlbS5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgICAgICAgZG9NYXBbaWRdID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKGNvbXBvbmVudHMubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IGxpc3RDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29uc3QgaWQgPSBjb21wLmluc3RhbmNlLmlkO1xyXG4gICAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLml0ZW1SZW5kZXJlcjtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBwcm9wID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgIHNpemUgPSB0b3RhbFNpemU7XHJcbiAgICBpZiAobCAmJiBwYXJzZUludChsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0pICE9PSBzaXplKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSA9IGAke3NpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1cyhpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNCeUlkKGlkLCBhbGlnbiwgdGhpcy5zY3JvbGxCZWhhdmlvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICghdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9TdGFydChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGl0ZW1zID0gdGhpcy5pdGVtcywgZmlyc3RJdGVtID0gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zWzBdID8/IG51bGwgOiBudWxsLCBpZCA9IGZpcnN0SXRlbT8uW3RyYWNrQnldID8/IG51bGwsXHJcbiAgICAgIGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBpZiAoISFmaXJzdEl0ZW0pIHtcclxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICBpZCwgYmVoYXZpb3IsIGJsZW5kaW5nLCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmRJdGVtKGNiPzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSAob3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCkgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXSwgaWQgPSBsYXRJdGVtW3RyYWNrQnldLFxyXG4gICAgICBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICBpZiAoIXRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvRmluYWxpemUoaWQ6IElkLCBmb2N1c2VkOiBib29sZWFuLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgRm9jdXNBbGlnbm1lbnRzLk5PTkUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNiPy4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjbGVhbnVwKCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcbiAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcbiAgICB0aGlzLnRyYWNraW5nKCk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgY2xlYXJpbmcgdGhlIGNhY2hlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYWNoZUNsZWFuKCkge1xyXG4gICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5keW5hbWljU2l6ZSkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jYWNoZUNsZWFuKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVyZW5kZXJDb250YWluZXIgPSB0aGlzLl9wcmVyZW5kZXI7XHJcbiAgICBpZiAoISFwcmVyZW5kZXJDb250YWluZXIpIHtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIHByZXJlbmRlckNvbnRhaW5lci5vZmYoKTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCgwKTtcclxuICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoMCk7XHJcbiAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBwcmV2ZW50U25hcHBpbmcgbWV0aG9kLlxyXG4gICAqL1xyXG4gIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kKCkge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1RoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBwcmV2ZW50U25hcHBpbmcgbWV0aG9kLicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudHMgdGhlIGxpc3QgZnJvbSBzbmFwcGluZyB0byBpdHMgc3RhcnQgb3IgZW5kIGVkZ2UuXHJcbiAgICovXHJcbiAgcHJldmVudFNuYXBwaW5nKCkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgIHNjcm9sbGVyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLl8kZGVzdHJveS5uZXh0KCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlSWQgPSB0aGlzLl91cGRhdGVJZDtcclxuICAgIGlmICh1cGRhdGVJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUlkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5fc2VydmljZS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fdHJhY2tCb3gpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cIm5ndmxfX3NjcmVlbi1yZWFkZXJcIj5cclxuICB7eyAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSB8IGFzeW5jIH19XHJcbjwvZGl2PlxyXG5cclxuPG5nLXByZXJlbmRlci1jb250YWluZXIgI3ByZXJlbmRlciBbYm91bmRzXT1cIigkYm91bmRzIHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZHluYW1pY109XCIoJGR5bmFtaWNTaXplIHwgYXN5bmMpIVwiIFtpc1ZlcnRpY2FsXT1cIigkaXNWZXJ0aWNhbCB8IGFzeW5jKSFcIlxyXG4gIFtpdGVtU2l6ZV09XCIoJGl0ZW1TaXplIHwgYXN5bmMpIVwiIFt0cmFja0J5XT1cIigkdHJhY2tCeSB8IGFzeW5jKSFcIiBbaXRlbVJlbmRlcmVyXT1cIigkaXRlbVJlbmRlcmVyIHwgYXN5bmMpIVwiXHJcbiAgW3N0YXJ0T2Zmc2V0XT1cIigkc2Nyb2xsU3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2VuZE9mZnNldF09XCIoJHNjcm9sbEVuZE9mZnNldCB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJFbmFibGVkXT1cIihzY3JvbGxlci4kc2Nyb2xsYmFyU2hvdyB8IGFzeW5jKSFcIlxyXG4gIFtlbmFibGVkXT1cIigkcHJlcmVuZGVyRW5hYmxlZCB8IGFzeW5jKSFcIj48L25nLXByZXJlbmRlci1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiJHNuYXAgfCBhc3luY1wiPlxyXG4gIDxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiICNzbmFwcGVkQ29udGFpbmVyIGNsYXNzPVwibmd2bF9fc25hcHBlZC1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgPGRpdiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctc2Nyb2xsZXIgY2xhc3M9XCJuZ3ZsX19saXN0LXNjcm9sbGVyXCIgI3Njcm9sbGVyIFtjbGFzc2VzXT1cIigkY2xhc3NlcyB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHNjcm9sbFN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZW5kT2Zmc2V0XT1cIigkc2Nyb2xsRW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJUaHVtYlJlbmRlcmVyXT1cIigkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJUaGlja25lc3NdPVwiKCRzY3JvbGxiYXJUaGlja25lc3MgfCBhc3luYykhXCIgW3Njcm9sbGJhclRodW1iUGFyYW1zXT1cIigkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgfCBhc3luYylcIlxyXG4gIFtmb2N1c2VkRWxlbWVudF09XCIoJGZvY3VzZWRFbGVtZW50IHwgYXN5bmMpIVwiIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIlxyXG4gIFtvdmVyc2Nyb2xsRW5hYmxlZF09XCIoJG92ZXJzY3JvbGxFbmFibGVkIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJFbmFibGVkXT1cIigkc2Nyb2xsYmFyRW5hYmxlZCB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJJbnRlcmFjdGl2ZV09XCIoJHNjcm9sbGJhckludGVyYWN0aXZlIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJNaW5TaXplXT1cIigkc2Nyb2xsYmFyTWluU2l6ZSB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxCZWhhdmlvcl09XCIoJHNjcm9sbEJlaGF2aW9yIHwgYXN5bmMpIVwiIFtzY3JvbGxpbmdTZXR0aW5nc109XCIoJHNjcm9sbGluZ1NldHRpbmdzIHwgYXN5bmMpIVwiPlxyXG4gIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1zY3JvbGxlcj4iXX0=
2535
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQ3JJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQzdILHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUMzSCw2QkFBNkIsRUFBRSw2Q0FBNkMsRUFBRSx5QkFBeUIsRUFBRSwrQkFBK0IsRUFDeEksVUFBVSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFDakksMEJBQTBCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSx5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFDekksd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQ3pJLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGlEQUFpRCxFQUNySSxpREFBaUQsRUFBRSxtQ0FBbUMsRUFBRSw0Q0FBNEMsRUFDcEkscUNBQXFDLEVBQUUsOENBQThDLEVBQUUsa0RBQWtELEVBQ3pJLDBCQUEwQixHQUMzQixNQUFNLFNBQVMsQ0FBQztBQVVqQixPQUFPLEVBQ1csZUFBZSxFQUFhLFVBQVUsRUFBRSxlQUFlLEVBQXNCLG1CQUFtQixFQUNoRyxlQUFlLEVBQWlCLGNBQWMsR0FDL0QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBcUQsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFNUcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pILE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQUVuRTs7Ozs7OztHQU9HO0FBWUgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG1CQUFtQjtJQUs3RDs7T0FFRztJQUNILElBQUksRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFzRjdCOztPQUVHO0lBQ0gsSUFDSSxrQkFBa0IsQ0FBQyxDQUFTO1FBQzlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM5QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGtCQUFrQixLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWV6RTs7T0FFRztJQUNILElBQ0ksZ0JBQWdCLENBQUMsQ0FBUztRQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQVksQ0FBQyxDQUFDLENBQUM7SUFlL0U7O09BRUc7SUFDSCxJQUNJLHNCQUFzQixDQUFDLENBQTBCO1FBQ25ELElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNsRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLHNCQUFzQixLQUFLLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWVqRjs7T0FFRztJQUNILElBQ0ksb0JBQW9CLENBQUMsQ0FBcUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hELE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZTdFOztPQUVHO0lBQ0gsSUFDSSxPQUFPLENBQUMsQ0FBVTtRQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFhLENBQUMsQ0FBQyxDQUFDO0lBZTlEOztPQUVHO0lBQ0gsSUFDSSxrQkFBa0IsQ0FBQyxDQUFVO1FBQy9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM5QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGtCQUFrQixLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBYSxDQUFDLENBQUMsQ0FBQztJQWVwRjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQVM7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN6QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBWSxDQUFDLENBQUMsQ0FBQztJQWV6RTs7T0FFRztJQUNILElBQ0ksZ0NBQWdDLENBQUMsQ0FBUztRQUM1QyxJQUFJLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUQsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxnQ0FBZ0MsS0FBSyxPQUFPLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUE4QnJHOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsQ0FBeUI7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQTRCLENBQUMsQ0FBQyxDQUFDO0lBS3pFLElBQ0ksZ0JBQWdCLENBQUMsQ0FBMEI7UUFDN0MsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzVDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQTBCckU7O09BRUc7SUFDSCxJQUNJLFdBQVcsQ0FBQyxDQUF3QjtRQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBMEIzRDs7T0FFRztJQUNILElBQ0ksWUFBWSxDQUFDLENBQVk7UUFDM0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWU3RDs7O09BR0c7SUFDSCxJQUNJLGFBQWEsQ0FBQyxDQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFlL0Q7OztPQUdHO0lBQ0gsSUFDSSxlQUFlLENBQUMsQ0FBVTtRQUM1QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZW5FOztPQUVHO0lBQ0gsSUFDSSxJQUFJLENBQUMsQ0FBVTtRQUNqQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWU3Qzs7T0FFRztJQUNILElBQ0ksaUJBQWlCLENBQUMsQ0FBUztRQUM3QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDN0MsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxpQkFBaUIsS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFldkU7O09BRUc7SUFDSCxJQUNJLGVBQWUsQ0FBQyxDQUFTO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFlbkU7Ozs7Ozs7O09BUUc7SUFDSCxJQUNJLGlCQUFpQixDQUFDLENBQVU7UUFDOUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzdDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZXZFOzs7Ozs7O09BT0c7SUFDSCxJQUNJLGVBQWUsQ0FBQyxDQUFVO1FBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFNbkU7OztPQUdHO0lBQ0gsSUFDSSxrQkFBa0IsQ0FBQyxDQUFVO1FBQy9CLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFlRDs7T0FFRztJQUNILElBQ0ksZ0JBQWdCLENBQUMsQ0FBVTtRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFlckU7O09BRUc7SUFDSCxJQUNJLG9CQUFvQixDQUFDLENBQVU7UUFDakMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hELE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZTdFOztPQUVHO0lBQ0gsSUFDSSxjQUFjLENBQUMsQ0FBaUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQXNEakU7Ozs7Ozs7O09BUUc7SUFDSCxJQUNJLGlCQUFpQixDQUFDLENBQXFCO1FBQ3pDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWV2RTs7T0FFRztJQUNILElBQ0ksZUFBZSxDQUFDLENBQW1CO1FBQ3JDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFlbkU7O09BRUc7SUFDSCxJQUNJLGlCQUFpQixDQUFDLENBQVU7UUFDOUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzdDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZXZFOzs7OztPQUtHO0lBQ0gsSUFDSSx5QkFBeUIsQ0FBQyxDQUFVO1FBQ3RDLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNyRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWlCdkY7O01BRUU7SUFDRixJQUNJLFlBQVksQ0FBQyxDQUFtQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFzQixDQUFDLENBQUMsQ0FBQztJQTZCakY7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQTRCO1FBQzVDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFnQi9EOzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxDQUFTO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFjckQ7Ozs7T0FJRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQVU7UUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWMzRDs7T0FFRztJQUNILElBQ0ksU0FBUyxDQUFDLENBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNyQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWN2RDs7T0FFRztJQUNILElBQ0ksY0FBYyxDQUFDLENBQWlCO1FBQ2xDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMxQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFjakU7O09BRUc7SUFDSCxJQUNJLFVBQVUsQ0FBQyxDQUFTO1FBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFvQnpEOzs7O09BSUc7SUFDSCxJQUNJLGFBQWEsQ0FBQyxDQUFTO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWMvRDs7OztPQUlHO0lBQ0gsSUFDSSxjQUFjLENBQUMsQ0FBaUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQWNqRTs7Ozs7T0FLRztJQUNILElBQ0ksa0JBQWtCLENBQUMsQ0FBcUI7UUFDMUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzlDLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBY3pFOztPQUVHO0lBQ0gsSUFDSSxPQUFPLENBQUMsQ0FBUztRQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBb0JuRDs7Ozs7T0FLRztJQUNILElBQ2MsbUJBQW1CLENBQUMsQ0FBUztRQUN6QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0MsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBYyxtQkFBbUIsS0FBSyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFrQnJGOzs7T0FHRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQWdCO1FBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFXM0QsSUFBYyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBb0pELElBQWMsa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBZ0R2RSxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQWMsYUFBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBS1MscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFlBQW9CO1FBQ3pGLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sMEJBQTBCLENBQUM7U0FDbkM7UUFDRCxJQUFJLFNBQVMsR0FBRyxVQUFVLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztTQUNoSTtRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLElBQUksU0FBUyxJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBQUEsQ0FBQztJQUVGO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFwZ0RGLFFBQUcsR0FBVyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7UUFPOUMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBY3hDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBeUMsU0FBUyxDQUFDLENBQUM7UUFDekUsY0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUF5QyxTQUFTLENBQUMsQ0FBQztRQUNyRSxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0RDs7V0FFRztRQUVILGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUU1Qzs7V0FFRztRQUVILGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFL0M7O1dBRUc7UUFFSCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBRTdDOztXQUVHO1FBRUgsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBc0MsQ0FBQztRQUVyRTs7V0FFRztRQUVILGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUVyRDs7V0FFRztRQUVILGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBRTNDOztXQUVHO1FBRUgsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7V0FFRztRQUVILHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFcEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBDLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFTLDJCQUEyQixDQUFDLENBQUM7UUFDckUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTFFLGlDQUE0QixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVuQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztnQkFDOUUsT0FBTywyQkFBMkIsQ0FBQzthQUNwQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFTLDBCQUEwQixDQUFDLENBQUM7UUFDbEUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRFLCtCQUEwQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDakQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTdCLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO2dCQUM1RSxPQUFPLDBCQUEwQixDQUFDO2FBQ25DO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7UUFpQk0sNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQTBCLElBQUksQ0FBQyxDQUFDO1FBQ25FLDRCQUF1QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsRixxQ0FBZ0MsR0FBRyxDQUFDLENBQTBCLEVBQUUsRUFBRTtZQUN4RSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztnQkFDbEYsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFxQyxFQUFFLENBQUMsQ0FBQztRQUMxRSwwQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFOUUsbUNBQThCLEdBQUcsQ0FBQyxDQUFxQyxFQUFFLEVBQUU7WUFDakYsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEQsc0JBQWlCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3ZFLHdCQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxRSxpQ0FBNEIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztnQkFDL0UsT0FBTyw0QkFBNEIsQ0FBQzthQUNyQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsc0JBQXNCLENBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFaEUsNEJBQXVCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7Z0JBQ3pFLE9BQU8sc0JBQXNCLENBQUM7YUFDL0I7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSx1Q0FBa0MsR0FBRyxJQUFJLGVBQWUsQ0FBUyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3JHLHNDQUFpQyxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0RywrQ0FBMEMsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQ2pFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztnQkFDNUYsT0FBTyw2Q0FBNkMsQ0FBQzthQUN0RDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFDL0MsV0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFaEQsb0JBQWUsR0FBRyxDQUFDLENBQXlCLEVBQUUsRUFBRTtZQUN0RCxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsRUFBRTtvQkFDTCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN4QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xCLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxLQUFLLEVBQUU7NEJBQ1QsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0NBQ3RILEtBQUssR0FBRyxLQUFLLENBQUM7Z0NBQ2QsTUFBTTs2QkFDUDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7Z0JBQzNGLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBMEIsSUFBSSxDQUFDLENBQUM7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBWXRFLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXdCLElBQUksQ0FBQyxDQUFDO1FBQ3RELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU1RCwwQkFBcUIsR0FBRyxDQUFDLENBQXdCLEVBQUUsRUFBRTtZQUMzRCxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pILElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3hDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbEIsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBVyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ1YsTUFBTTt5QkFDUDtxQkFDRjtpQkFDRjthQUNGO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7Z0JBQ3pGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUMzQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLENBQUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlELDJCQUFzQixHQUFHLENBQUMsQ0FBWSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDeEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixLQUFLLEdBQUcsY0FBYyxDQUFDLElBQVcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFXLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxDQUFDLEtBQUssRUFBRTs0QkFDVixNQUFNO3lCQUNQO3FCQUNGO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztnQkFDMUYsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsdUJBQXVCLENBQUMsQ0FBQztRQUM3RCxtQkFBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFaEUsNEJBQXVCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUMvQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7Z0JBQzFFLE9BQU8sdUJBQXVCLENBQUM7YUFDaEM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWtCTSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRSw4QkFBeUIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztnQkFDNUUsT0FBTyx5QkFBeUIsQ0FBQzthQUNsQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBa0JNLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxZQUFZLENBQUMsQ0FBQztRQUN6QyxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU5QyxtQkFBYyxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLFlBQVksQ0FBQzthQUNyQjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzFDLHVCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4RSxnQ0FBMkIsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQ2xELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFbkMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEUsOEJBQXlCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUNoRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO2dCQUMzRSxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7UUFpQk0sd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsMkJBQTJCLENBQUMsQ0FBQztRQUNyRSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEUsZ0NBQTJCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUNuRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7Z0JBQzlFLE9BQU8sMkJBQTJCLENBQUM7YUFDcEM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQXVCTSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRSw4QkFBeUIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztnQkFDNUUsT0FBTyx5QkFBeUIsQ0FBQzthQUNsQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBc0JNLGlDQUE0QixHQUFHLEdBQUcsRUFBRTtZQUMxQyxNQUFNLEtBQUssQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQztRQVdNLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLHlCQUF5QixDQUFDLENBQUM7UUFDbEUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRFLCtCQUEwQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztnQkFDN0UsT0FBTyx5QkFBeUIsQ0FBQzthQUNsQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLDZCQUE2QixDQUFDLENBQUM7UUFDMUUsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlFLG1DQUE4QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztnQkFDakYsT0FBTyw2QkFBNkIsQ0FBQzthQUN0QztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JFLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxFLDZCQUF3QixHQUFHLENBQUMsQ0FBaUIsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTVDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLHVCQUF1QixDQUFDO2FBQ2hDO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7UUFpQk0sd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQXFCLDBCQUEwQixDQUFDLENBQUM7UUFDL0UsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhFLGdDQUEyQixHQUFHLENBQUMsQ0FBcUIsRUFBc0IsRUFBRTtZQUNsRixJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hGLEtBQUssR0FBRyxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztvQkFDMUYsT0FBTywwQkFBMEIsQ0FBQztpQkFDbkM7Z0JBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO29CQUMvRSxPQUFPLDBCQUEwQixDQUFDO2lCQUNuQztnQkFDRCxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7b0JBQ3RGLE9BQU8sMEJBQTBCLENBQUM7aUJBQ25DO2dCQUNELEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztvQkFDdEYsT0FBTywwQkFBMEIsQ0FBQztpQkFDbkM7Z0JBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO29CQUNyRixPQUFPLDBCQUEwQixDQUFDO2lCQUNuQztnQkFDRCxLQUFLLEdBQUcsZUFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7b0JBQ3hGLE9BQU8sMEJBQTBCLENBQUM7aUJBQ25DO2FBQ0Y7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztnQkFDckYsT0FBTywwQkFBMEIsQ0FBQzthQUNuQztZQUNELE9BQU87Z0JBQ0wsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxlQUFlO2dCQUMxSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLElBQUk7Z0JBQ25GLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsV0FBVztnQkFDdEgsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXO2dCQUN0SCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLFVBQVU7Z0JBQ2pILFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLDBCQUEwQixDQUFDLFlBQVk7YUFDeEUsQ0FBQztRQUNKLENBQUMsQ0FBQztRQXVCTSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsd0JBQXdCLENBQUMsQ0FBQztRQUN6RSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEUsOEJBQXlCLEdBQUcsQ0FBQyxDQUFtQixFQUFFLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7Z0JBQzNFLE9BQU8sd0JBQXdCLENBQUM7YUFDakM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSwwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BFLHVCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4RSxnQ0FBMkIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7Z0JBQzlFLE9BQU8sMEJBQTBCLENBQUM7YUFDbkM7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3JGLCtCQUEwQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4Rix3Q0FBbUMsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQzNELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztnQkFDdEYsT0FBTyxtQ0FBbUMsQ0FBQzthQUM1QztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBb0JNLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQStCLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLGtCQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU5RCwyQkFBc0IsR0FBRyxDQUFDLENBQW1CLEVBQUUsRUFBRTtZQUN2RCxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsa0JBQWtCLEtBQUssVUFBVSxDQUFDLEVBQUU7Z0JBQzFGLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDZjtZQUVELElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsTUFBTSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQzthQUM1RTtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBQzFELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRSw0QkFBdUIsR0FBRyxDQUFDLENBQTRCLEVBQUUsRUFBRTtZQUNqRSxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLEVBQUU7b0JBQ0wsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLElBQUk7NEJBQ1AsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7NEJBQ3hDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDOzRCQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDM0Y7NEJBQ0EsS0FBSyxHQUFHLEtBQUssQ0FBQzs0QkFDZCxNQUFNO3lCQUNQO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztnQkFDNUYsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBeUJNLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBUyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELGNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRELHVCQUFrQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO2dCQUNuRixPQUFPLGlCQUFpQixDQUFDO2FBQzFCO1lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztRQW1CTSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsaUJBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVELDBCQUFxQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLG9CQUFvQixDQUFDO2FBQzdCO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7UUFtQk0sZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBWSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhELHdCQUFtQixHQUFHLENBQUMsQ0FBWSxFQUFFLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7Z0JBQzNGLE9BQU8saUJBQWlCLENBQUM7YUFDMUI7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsRSw2QkFBd0IsR0FBRyxDQUFDLENBQWlCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztnQkFDbkYsT0FBTyx1QkFBdUIsQ0FBQzthQUNoQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBaUJNLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFMUQseUJBQW9CLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7Z0JBQ3RFLE9BQU8sbUJBQW1CLENBQUM7YUFDNUI7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQWlCTSxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFTLHVCQUF1QixDQUFDLENBQUM7UUFDNUQsbUJBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWhFLDRCQUF1QixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztnQkFDekUsR0FBRyxHQUFHLHVCQUF1QixDQUFDO2FBQy9CO1lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDMUMsT0FBTyxVQUFVLENBQUM7YUFDbkI7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztRQWtCTSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxvQkFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsRSw2QkFBd0IsR0FBRyxDQUFDLENBQWlCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsZUFBZSxDQUFDLFFBQVEsU0FBUyxlQUFlLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztnQkFDcEksT0FBTyx1QkFBdUIsQ0FBQzthQUNoQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBbUJNLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFxQixxQkFBcUIsQ0FBQyxDQUFDO1FBQzNFLHdCQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxRSxpQ0FBNEIsR0FBRyxDQUFDLENBQXFCLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO2dCQUM1RyxPQUFPLHFCQUFxQixDQUFDO2FBQzlCO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7UUFvQk0sY0FBUyxHQUFHLElBQUksZUFBZSxDQUFTLHNCQUFzQixDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEQsc0JBQWlCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sc0JBQXNCLENBQUM7YUFDL0I7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztRQXVCTSwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3hFLHlCQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU1RSxrQ0FBNkIsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztnQkFDL0UsT0FBTyw2QkFBNkIsQ0FBQzthQUN0QztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBb0JNLG1DQUE4QixHQUFHLElBQUksZUFBZSxDQUFTLDZCQUE2QixDQUFDLENBQUM7UUFDMUYsa0NBQTZCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJGLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWdCLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsaUJBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVELDBCQUFxQixHQUFHLENBQUMsQ0FBZ0IsRUFBRSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztnQkFDdkUsT0FBTyxxQkFBcUIsQ0FBQzthQUM5QjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO1FBa0JNLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFM0MsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFakQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFL0MsOEJBQXlCLEdBQVksSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFeEUsZ0JBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFJbkMsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFZLElBQUksQ0FBQyxDQUFDO1FBQ3RELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpELGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0MsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdkQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTdELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXhELHVCQUFrQixHQUFzRCxFQUFFLENBQUM7UUFFM0UsOEJBQXlCLEdBQXNELEVBQUUsQ0FBQztRQUVsRixhQUFRLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7UUFDakQsWUFBTyxHQUE2QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRW5FLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFN0MsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZSxJQUFJLENBQUMsQ0FBQztRQUV2RCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxRCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRXJELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFcEQsbUNBQThCLEdBQUcsR0FBRyxFQUFFO1lBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQ2xLLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBRTdGLEtBQUssTUFBTSxJQUFJLElBQUksaUJBQWlCLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztxQkFDM0Y7aUJBQ0Y7Z0JBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLGNBQWMsS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO29CQUMvQyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUN6RCxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDdEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFFekcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLFFBQVEsQ0FBQzt3QkFFeE8sTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQ2hHLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBRXZELElBQUksSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsTUFBYyxDQUFDO3dCQUM3RCxJQUFJLFVBQVUsRUFBRTs0QkFDZCxJQUFJLEdBQUcsQ0FBQyxDQUFDOzRCQUNULEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQzs0QkFDbEMsR0FBRyxHQUFHLE9BQU8sQ0FBQzs0QkFDZCxNQUFNLEdBQUcsTUFBTSxDQUFDOzRCQUNoQixJQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsR0FBRyxFQUFFO2dDQUN0QyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsTUFBTSxNQUFNLEtBQUssSUFBSSxNQUFNLE1BQU0sS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU0sYUFBYSxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU0sYUFBYSxRQUFRLENBQUM7NkJBQ3hLO2lDQUFNO2dDQUNMLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLGFBQWEsR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLE1BQU0sS0FBSyxJQUFJLE1BQU0sTUFBTSxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUM7NkJBQ3hKO3lCQUNGOzZCQUFNOzRCQUNMLElBQUksR0FBRyxNQUFNLENBQUM7NEJBQ2QsS0FBSyxHQUFHLEtBQUssQ0FBQzs0QkFDZCxHQUFHLEdBQUcsQ0FBQyxDQUFDOzRCQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDOzRCQUNoQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLEtBQUssUUFBUSxLQUFLLElBQUksTUFBTSxRQUFRLE1BQU0sWUFBWSxLQUFLLFFBQVEsQ0FBQzt5QkFDakg7cUJBQ0Y7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQztRQUVNLDJCQUFzQixHQUEwQixJQUFJLENBQUM7UUFFckQsY0FBUyxHQUFHLENBQUMsT0FBb0IsRUFBRSxRQUFnQixFQUFFLFFBQXdCLGVBQWUsQ0FBQyxNQUFNLEVBQ3pHLFdBQTJCLGFBQWEsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNkLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUNuSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDN0IsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQzFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUMxRCxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUM3QixRQUFRLEtBQUssRUFBRTtvQkFDYixLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDMUIsR0FBRyxHQUFHLFFBQVEsQ0FBQzt3QkFDZixNQUFNO3FCQUNQO29CQUNELEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMzQixHQUFHLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbkQsTUFBTTtxQkFDUDtvQkFDRCxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsR0FBRyxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQzt3QkFDOUMsTUFBTTtxQkFDUDtvQkFDRCxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxDQUFDO3dCQUNQLE1BQU07cUJBQ1A7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3RCLE1BQU0sV0FBVyxHQUFHLFFBQVEsRUFBRSxXQUFXLElBQUksQ0FBQyxFQUFFLFlBQVksR0FBRyxRQUFRLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQztvQkFDM0YsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOzRCQUNYLEdBQUcsR0FBRyxDQUFDLENBQUM7eUJBQ1Q7d0JBQ0QsSUFBSSxHQUFHLEdBQUcsWUFBWSxFQUFFOzRCQUN0QixHQUFHLEdBQUcsWUFBWSxDQUFDO3lCQUNwQjtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7NEJBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQzt5QkFDVDt3QkFDRCxJQUFJLEdBQUcsR0FBRyxXQUFXLEVBQUU7NEJBQ3JCLEdBQUcsR0FBRyxXQUFXLENBQUM7eUJBQ25CO3FCQUNGO29CQUVELElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNDLE1BQU0sTUFBTSxHQUFvQjt3QkFDOUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRO3dCQUNsRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLGNBQWM7cUJBQy9HLENBQUM7b0JBQ0YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDM0I7YUFDRjtRQUNILENBQUMsQ0FBQTtRQUVPLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUVsRTs7V0FFRztRQUNLLHdCQUFtQixHQUE4QywwQkFBMEIsQ0FBQztRQUdwRzs7V0FFRztRQUNLLG1CQUFjLEdBQTBCLFFBQVEsQ0FBQztRQUV6RDs7V0FFRztRQUNLLGNBQVMsR0FBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQUN4QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU3Qyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQUN2QyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEUsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVwRCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWdCLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEMsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDNUIsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU1RSw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuRCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFJaEYsNEJBQXVCLEdBQVcsQ0FBQyxDQUFDO1FBRXBDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVVuQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QixhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQWN4RCxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsZ0JBQWdCO1lBQy9GLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7UUFFM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWxFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ3BDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxhQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxlQUFlLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxhQUFhLEdBQUcsS0FBSyxFQUFFLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUUxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXpELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxlQUFlLEVBQzlELGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQW1CLENBQUMsY0FBZSxDQUFDO1FBRTVELGVBQWUsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsY0FBYyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsUUFBUSxDQUFDLElBQUksQ0FDWCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRTNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBRSxDQUFDLGFBQWEsQ0FBQyxFQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFvQixFQUFFLFVBQW1CLEVBQUUsRUFBRTtZQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNkLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUssRUFDdEcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDbEUsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDM0UsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLGlCQUFpQixJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUU7b0JBQy9FLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO3dCQUMvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzt3QkFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUN4QjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsS0FBSyxDQUFDLElBQUksQ0FDUixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQzVCLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQixPQUFPLFNBQVMsQ0FBZ0IsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDM0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNaLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRTtvQkFDYixLQUFLLFlBQVk7d0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7NEJBQ3BCLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQzFDO3dCQUNELE1BQU07b0JBQ1IsS0FBSyxVQUFVO3dCQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDbkIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDMUM7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLGFBQWE7d0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFOzRCQUNwQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUMxQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssWUFBWTt3QkFDZixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7NEJBQ25CLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQzFDO3dCQUNELE1BQU07aUJBQ1Q7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRCxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUN0RSxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQ3RHLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUzRyxTQUFTLENBQWdCLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEVBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNaLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDMUQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFDeEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUNyQixTQUFTLENBQUMsV0FBVyxDQUFDLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLENBQzNCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2YsYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFDMUIsZ0JBQWdCLEdBQUcsQ0FBQyxPQUFrQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxzQ0FBc0MsR0FBRywwQkFBMEIsRUFDckUsZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxFQUFFLGlCQUFpQixJQUFJLGtCQUFrQixFQUN4RSxxQkFBcUIsR0FBRyxPQUFPLEVBQUUscUJBQXFCLElBQUksMkJBQTJCLENBQUM7WUFDeEYsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLHNDQUFzQyxHQUFHLDBCQUEwQixDQUFDO2dCQUNwRSxnQ0FBZ0MsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsQ0FBQyxzQ0FBc0MsS0FBSywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQzdILENBQUMsZ0NBQWdDLEdBQUcsaUJBQWlCLENBQUMsRUFBRTt3QkFDeEQsSUFBSSxDQUFDLEtBQUssMEJBQTBCLEVBQUU7NEJBQ3BDLHNDQUFzQyxHQUFHLENBQUMsQ0FBQzt5QkFDNUM7d0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNsQjtvQkFDRCxJQUFJLHNDQUFzQyxLQUFLLENBQUMsRUFBRTt3QkFDaEQsSUFBSSxnQ0FBZ0MsR0FBRyxxQkFBcUIsRUFBRTs0QkFDNUQsZ0NBQWdDLEVBQUUsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzlCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNsQjtxQkFDRjtvQkFDRCxzQ0FBc0MsR0FBRyxDQUFDLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLG9CQUFvQixFQUFFLENBQ3ZCLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQyxDQUFDO1FBQ0osTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUNoRCxpQkFBaUIsRUFBRSxrQkFBa0I7WUFDckMscUJBQXFCLEVBQUUsMkJBQTJCO1NBQ25ELENBQUMsRUFDQSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQztZQUM5QyxpQkFBaUIsRUFBRSxtQ0FBbUM7WUFDdEQscUJBQXFCLEVBQUUsNENBQTRDO1NBQ3BFLENBQUMsRUFDRiw2QkFBNkIsR0FBRyxnQkFBZ0IsQ0FBQztZQUMvQyxpQkFBaUIsRUFBRSxtQ0FBbUM7WUFDdEQscUJBQXFCLEVBQUUsNENBQTRDO1NBQ3BFLENBQUMsRUFDRiw4QkFBOEIsR0FBRyxnQkFBZ0IsQ0FBQztZQUNoRCxpQkFBaUIsRUFBRSxxQ0FBcUM7WUFDeEQscUJBQXFCLEVBQUUsOENBQThDO1NBQ3RFLENBQUMsRUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFDcEIsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ2hDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFDNUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUN4QyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFakQsYUFBYSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hILFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQ3RELFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ3RHLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFO2dCQUNwRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDeEMsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNOLElBQUksQ0FBQyxDQUFDLEVBQUU7d0JBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLEVBQUU7NEJBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt5QkFDbkM7d0JBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7d0JBQ2xELElBQUksaUJBQWlCLEVBQUU7NEJBQ3JCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7NEJBQ25DLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO3lCQUNuQzt3QkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDeEI7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDbkQsSUFBSSxrQkFBa0IsRUFBRTs0QkFDdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dDQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQ0FDckIsa0JBQW1CLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDcEM7eUJBQ0Y7d0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDWixJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTs0QkFDdEIsa0JBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7eUJBQzNCO3dCQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNsQjtvQkFDRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbkQsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7NEJBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNyQixrQkFBbUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNwQzt3QkFDRCxPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7NEJBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzRCQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RCLGtCQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDOzZCQUMzQjs0QkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs0QkFDMUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7NEJBQ2xELElBQUksaUJBQWlCLEVBQUU7Z0NBQ3JCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7NkJBQ25DOzRCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFDO3FCQUNIO29CQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDdEIsa0JBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7cUJBQzNCO29CQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLElBQUksZUFBZSxFQUFFO3dCQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7cUJBQ25DO29CQUNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNsRCxJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNuQztvQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtpQkFBTTtnQkFDTCxrQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNsQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDbEQsSUFBSSxpQkFBaUIsRUFBRTs0QkFDckIsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt5QkFDcEM7d0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3pCO29CQUNELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDeEMsb0JBQW9CLEVBQUUsRUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNQLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7cUJBQ3JDO3lCQUFNLElBQUksZUFBZSxFQUFFO3dCQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7cUJBQ25DO29CQUNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNsRCxJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNuQztvQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ3ZCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM5QjtZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsS0FBSyxDQUFDLElBQUksQ0FDUixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQzVCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQzlDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUNwQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3hDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxFQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsRUFDaEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUM1QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3hDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUNyRCxDQUFDO1FBRUosa0JBQWtCLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsZ0JBQWdCLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFdBQVcsQ0FBQyxJQUFJLENBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsaUJBQWlCLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsa0JBQWtCLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsY0FBYyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDdEMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFlBQVksQ0FBQyxJQUFJLENBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsY0FBYyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsUUFBUSxDQUFDLElBQUksQ0FDWCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsRUFDQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2pELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDakMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pDLEVBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzFDLEVBQ0QsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzFDLEVBQ0QsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEIsRUFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQ3ZELEVBQ0QsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUM1RCxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsQ0FBQyxDQUN6RSxFQUNELG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFDOUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDcEMsRUFDRCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNwQyxFQUNELFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbkQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNoQixFQUNELG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFDaEQsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUMzQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFFOUMsYUFBYSxDQUFDLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFGLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQ3RDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU8sQ0FBQyxDQUN2RixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE9BQU8sQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQixPQUFPLGFBQWEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEUsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNuRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUMvRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDcEUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUN0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBZSxDQUFDO1lBRTVDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0gsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsV0FBVyxHQUFHLFNBQVMsQ0FBQztpQkFDekI7cUJBQU07b0JBQ0wsSUFBSSxXQUFXLEVBQUU7d0JBQ2YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQzNCO2lCQUNGO2FBQ0Y7WUFFRCxNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3ZCLFNBQVM7aUJBQ1Y7Z0JBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QjtZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxXQUFXLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxHQUFnQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUN2RCxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEgsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1IsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDO2FBQ3pFO2lCQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxFQUFFO2dCQUNsRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDUixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUM7YUFDbkU7aUJBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDekQsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNSLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUNwQztnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQzthQUNqRTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUUzRCxzQkFBc0IsQ0FBQyxJQUFJLENBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLDhCQUE4QixDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFHZCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixRQUFRLENBQUMsSUFBSSxDQUNYLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNmLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2YsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUM5QjtZQUNELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO29CQUNmLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDMUIsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBR2QsUUFBUSxDQUFDLElBQUksQ0FDWCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekM7UUFDSCxDQUFDLENBQUMsRUFDRixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUtmLEVBQUUsZUFBd0IsS0FBSyxFQUFFLFdBQW9CLEtBQUssRUFBRSxFQUFFO1lBQzdELE1BQU0sRUFDSixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUNuSCxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxHQUM1SCxHQUFHLE1BQU0sQ0FBQztZQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFDOUgsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxZQUFZLElBQUksV0FBVyxJQUFJLGNBQWMsQ0FBQztnQkFDcEYsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxFQUFFO29CQUM5QyxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFDekYsVUFBVSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3pHLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFDakUsWUFBMEMsQ0FBQztvQkFFN0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsWUFBWSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUM1RSxJQUFJLEdBQXVFO3dCQUN6RSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRO3dCQUM1RCxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUseUJBQXlCO3FCQUN6RixDQUFDO29CQUVKLElBQUksZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDMUMsTUFBTSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQzt3QkFDbkcsWUFBWSxHQUFHLHNCQUFzQixDQUFDO3dCQUN0QyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7cUJBQ2xDO3lCQUFNO3dCQUNMLE1BQU0sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM3SSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7d0JBQ3RDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztxQkFDakM7b0JBRUQsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7b0JBRS9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUVqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7b0JBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUU1QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBRWpELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFFaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFDaEMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsRUFDaEUsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxFQUN4RSw2QkFBNkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQztvQkFFdkUsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3FCQUM5QjtvQkFFRCxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFFdkIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3hELENBQUMsaUJBQWlCLElBQUksaUJBQWlCLElBQUksK0JBQStCLENBQUMsRUFBRTt3QkFDN0UsSUFBSSxpQkFBaUIsS0FBSyxnQ0FBZ0MsRUFBRTs0QkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFFNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7NkJBQy9DOzRCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDOzRCQUMzQixNQUFNLE1BQU0sR0FBb0I7Z0NBQzlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVO2dDQUM1RCxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0I7Z0NBQzVDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWTs2QkFDN0QsQ0FBQzs0QkFDRixRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzdCLElBQUksVUFBVSxFQUFFO2dDQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDOzZCQUN0STt5QkFDRjt3QkFDRCxPQUFPO3FCQUNSO29CQUVELElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLElBQUksZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzt3QkFDdkgsQ0FBQyx5QkFBeUIsR0FBRywrQkFBK0IsSUFBSSw2QkFBNkIsQ0FBQzt3QkFDOUYsQ0FBQyxnQ0FBZ0MsSUFBSSx5QkFBeUIsR0FBRywrQkFBK0IsQ0FBQyxFQUFFO3dCQUNuRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs0QkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3lCQUNuQzt3QkFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7NEJBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzt5QkFDMUM7d0JBQ0QsTUFBTSxNQUFNLEdBQW9COzRCQUM5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSw2QkFBNkI7NEJBQzVFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxLQUFLOzRCQUMvRCxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVk7eUJBQzdELENBQUM7d0JBQ0YsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM3QixJQUFJLFVBQVUsRUFBRTs0QkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDdEk7d0JBQ0QsT0FBTztxQkFDUjtvQkFFRCxJQUFJLFVBQVUsS0FBSyx5QkFBeUI7d0JBQzFDLENBQUMsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLElBQUkseUJBQXlCLEdBQUcsNkJBQTZCLENBQUM7NEJBQzVGLENBQUMsVUFBVSxLQUFLLDZCQUE2QixJQUFJLGlCQUFpQixLQUFLLHlCQUF5QixDQUFDLENBQUMsRUFBRTt3QkFDdEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFFNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFOzRCQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7eUJBQy9DO3dCQUNELE1BQU0sTUFBTSxHQUFvQjs0QkFDOUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVOzRCQUNwRyxVQUFVLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVk7eUJBQ3BGLENBQUM7d0JBQ0YsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxVQUFVLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7eUJBQ3RJO3dCQUNELE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBQ0QsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ3RJO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLFNBQVMsR0FBMkIsRUFBRSxDQUFDO1FBQzNDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLGtEQUFrRCxDQUFDLENBQUM7UUFDaEcsYUFBYSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTO1lBQy9JLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlJLENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FDSCxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUNuSCxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxZQUFZLEVBQ2hILEVBQUUsRUFBRTtZQUNILElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUU7Z0JBQ3ZCLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDbkI7WUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLElBQUksMEJBQTBCLENBQUMsWUFBWSxFQUN6RyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxJQUFJLENBQUMsRUFDNUYsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLEVBQ3pGLE9BQU8sR0FBRyxVQUFVLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxhQUFhLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQ3ZHLGtCQUFrQixHQUFHLFdBQVcsSUFBSSxDQUFDLFlBQVksSUFBSSxhQUFhLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxpREFBaUQsQ0FBQyxFQUNwSyxvQkFBb0IsR0FBRyxtQkFBbUIsSUFBSSxXQUFXLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxhQUFhLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLEdBQUcsQ0FBQztnQkFDakosQ0FBQyxRQUFRLEdBQUcsaURBQWlELElBQUksYUFBYSxDQUFDLENBQUM7WUFDcEYsSUFBSSxtQkFBbUIsRUFBRTtnQkFDdkIsSUFBSSxrQkFBa0IsRUFBRTtvQkFDdEIsZUFBZSxDQUFDLE9BQU8sQ0FBQzt3QkFDdEIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxZQUFZO3dCQUNqSSxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYTtxQkFDN0gsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDdkMsT0FBTztpQkFDUjtnQkFFRCxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0I7WUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixNQUFNLENBQUM7b0JBQ0wsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVk7b0JBQ3ZKLFVBQVUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhO2lCQUM3SCxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxhQUFhLENBQUMsRUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLEVBQ0MsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxPQUFPLEVBQ2xELGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxVQUFVLEVBQ3hELGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUUvRCxNQUFNLGFBQWEsR0FBRyxDQUFDLGFBQXNCLEtBQUssRUFBRSxFQUFFO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFDdkcsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO2dCQUVoQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3RCLElBQUksVUFBVSxFQUFFO3dCQUNkLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3pDO2lCQUNGO2dCQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDMUM7UUFDSCxDQUFDLENBQUM7UUFFRixTQUFTLENBQUMsSUFBSSxDQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNmLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUMxRyxJQUFJLFVBQVUsSUFBSSxpQkFBaUIsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztpQkFDaEU7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLFVBQVUsRUFBRTt3QkFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3pDO3dCQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUU7NEJBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3pDO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxTQUFTLENBQUMsSUFBSSxDQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzlCLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixhQUFhLEdBQUcsVUFBVSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRyxJQUFJLFVBQVUsSUFBSSxpQkFBaUIsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM3RDtZQUNELGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsU0FBUyxDQUFDLElBQUksQ0FDWixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzlCLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixhQUFhLEdBQUcsVUFBVSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRyxJQUFJLFVBQVUsSUFBSSxpQkFBaUIsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM1RDtZQUNELGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFDOUIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTdDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFDOUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUM3RSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsaUJBQWlCLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQ3ZFLEVBQ0UsRUFBRSxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFDbkMsZUFBZSxHQUFHLEtBQUssRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FDbEQsR0FBRyxLQUFLLENBQUM7WUFDWixNQUFNLGFBQWEsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxhQUFhLElBQUksd0JBQXdCLEVBQUUsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUU5RyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdkIsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRztZQUVELGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7b0JBRXZHLElBQUksV0FBVyxFQUFFO3dCQUNmLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsRUFDM0csYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQ3hHLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQzNGLElBQUksR0FBc0U7NEJBQ3hFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFROzRCQUNqRyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7NEJBQzlELFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7NEJBQ3JGLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHlCQUF5Qjt5QkFDM0YsQ0FBQzt3QkFFSixJQUFJLFVBQVUsR0FBRyxlQUFlLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQzs0QkFDakUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDL0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFFMUQsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7NEJBQ3JCLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNwRzt3QkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUU1QixNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTs0QkFDeEYsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTt5QkFDbEUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFFbEMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzt3QkFFeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO3dCQUV4QyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsR0FBRyxNQUFNLENBQUM7d0JBRTNDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUU1QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBRWpELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFFaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUV2QixVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDMUgsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7NEJBQ3JCLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNwRzt3QkFDRCxNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUssaUJBQWlCLENBQUM7d0JBQ3BELElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxHQUFHLHdCQUF3QixFQUFFOzRCQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDOzRCQUM1QixNQUFNLE1BQU0sR0FBb0I7Z0NBQzlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZ0JBQWtDO2dDQUN2RyxVQUFVLEVBQUUsUUFBUTs2QkFDckIsQ0FBQzs0QkFDRixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDdEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0NBQ25CLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVE7b0NBQ3RDLGVBQWUsRUFBRSxhQUFhLEdBQUcsd0JBQXdCLEVBQUUsWUFBWSxFQUFFLEVBQUU7aUNBQzVFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDcEI7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDekMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hHO3FCQUNGO3lCQUFNO3dCQUNMLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzVELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFOzRCQUNkLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQ2pDLGlCQUFpQixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUM3RixVQUFVLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7NEJBQ3JDLElBQUksaUJBQWlCLEtBQUssVUFBVSxFQUFFO2dDQUNwQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUN4QyxNQUFNLE1BQU0sR0FBb0I7b0NBQzlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVTtvQ0FDM0UsUUFBUSxFQUFFLGdCQUFrQyxFQUFFLFFBQVE7aUNBQ3ZELENBQUM7Z0NBQ0YsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ3RDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQ2pGO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUN6QixNQUFNLFlBQVksR0FBRyxNQUFvRCxDQUFDO1lBQzFFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQXVCLENBQUMsQ0FBQztnQkFDdEQsT0FBTzthQUNSO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4QyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUV6QyxhQUFhLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxPQUFPLENBQUMsSUFBSSxDQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sSUFBSSxHQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLHNCQUFzQixHQUFHLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLHNCQUFzQixJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN0RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekUsQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxFQUFFO29CQUM1RyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1lBQ0QsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLHNCQUFzQixFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsWUFBWSxDQUFDLElBQUksQ0FDZixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoQyxJQUFJLHVCQUF1QixJQUFJLENBQUMsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHVCQUF1QixLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLEVBQUU7b0JBQ2hILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlDO2FBQ0Y7WUFDRCxJQUFJLHVCQUF1QixHQUFHLENBQUMsRUFBRTtnQkFDL0IsdUJBQXVCLEVBQUUsQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSztRQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDdEMsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzFDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQ3JDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUNoQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUMvRixVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQzVFLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDMUMsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFO29CQUN0QixNQUFNLGFBQWEsR0FBRyxDQUFDLGdCQUFnQixJQUFJLCtCQUErQixDQUFDLENBQUM7b0JBQzVFLElBQUksYUFBYSxFQUFFO3dCQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3FCQUNwQzt5QkFBTTt3QkFDTCxNQUFNLFdBQVcsR0FBRyxDQUFDLGdCQUFnQixJQUFJLENBQUMsYUFBYSxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQzt3QkFDNUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztxQkFDMUM7aUJBQ0Y7YUFDRjtpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ25DO3FCQUFNLElBQUksaUJBQWlCLElBQUksZUFBZSxFQUFFO29CQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUNwQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUNwQzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBQUEsQ0FBQztJQUVNLGVBQWUsQ0FBQyxjQUF1QixLQUFLLEVBQUUsU0FBa0IsSUFBSSxFQUFFLGFBQXNCLEtBQUs7UUFDdkcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQzFHLElBQUksVUFBVSxJQUFJLGlCQUFpQixFQUFFO1lBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUN6SCxhQUFhLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQzdGLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsRUFDeEcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdHLE1BQU0sVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUNsSCxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUMvQixLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVTtnQkFDaEUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQ3hFLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVO2dCQUMzRCxVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMvSCxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0I7WUFFRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUFDLENBQWtCO1FBQ3BELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3hDLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLENBQXNCO1FBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDNUMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLG9CQUFvQixDQUFDLENBQXNCO1FBQ2pELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDNUMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLG1CQUFtQixDQUFDLENBQXNCO1FBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDNUMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFhO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFrQjtRQUNsQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN0QyxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFlBQWlEO1FBQ3JGLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9DLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyw2QkFBNkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ25HLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyw2QkFBNkIsRUFBRTtvQkFDNUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUM3QixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztvQkFDekUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO29CQUN0RixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVEO2FBQ0Y7U0FDRjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUVwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUVoRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFNUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQTZCLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLElBQUksRUFBRTtvQkFDUixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDM0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDZjthQUNGO1lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDM0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixDQUFDLEVBQUUsQ0FBQzthQUNMO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxVQUFtQixFQUFFLFNBQWlCO1FBQzVELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFDdEYsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsRUFBTTtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxFQUFNLEVBQUUsUUFBd0IsZUFBZSxDQUFDLElBQUk7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEVBQU0sRUFBRSxLQUEwQixJQUFJLEVBQUUsVUFBaUMsSUFBSTtRQUNwRixNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUNwRCxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQ3JDLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksRUFDbEMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUMxSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQTBCLElBQUksRUFBRSxVQUFpQyxJQUFJO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksZ0JBQWdCLEVBQ3BELFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssRUFDckMsT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxFQUNsQyxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDdEMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUN6SSxlQUFlLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO29CQUMxSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFlLEVBQUUsT0FBd0I7UUFDdkQsTUFBTSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBMEIsSUFBSSxFQUFFLFVBQWlDLElBQUk7UUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixDQUFtQixFQUN4RSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQ3JDLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksRUFDbEMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3RDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQy9ILGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEtBQUssd0JBQXdCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDMUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxFQUFNLEVBQUUsT0FBZ0IsRUFBRSxFQUF1QjtRQUN4RSxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0M7U0FDRjtRQUNELElBQUksT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO1lBQzVCLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDUjtJQUNILENBQUM7SUFFUyxPQUFPO1FBQ2YsTUFBTSxZQUFZLEdBQWlDLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7UUFDeEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ08sVUFBVTtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM3QjtRQUNELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRTtZQUN4QixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUI7UUFDckIsTUFBTSxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRVEsV0FBVztRQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1QjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNqQjtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDakI7U0FDRjtJQUNILENBQUM7O0FBenVHYywrQkFBUSxHQUFXLENBQUMsQ0FBQztvSEFEekIsc0JBQXNCO3dHQUF0QixzQkFBc0IsOHVEQUZ0QixDQUFDLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDLDhHQWM3QixvQkFBb0Isa0hBR1gsZ0JBQWdCLHFIQUdiLGdCQUFnQix5R0FHN0IsbUJBQW1CLG9EQ3BHcEQsZzhEQTRCYzs0RkRtREQsc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLGlCQUFpQixRQUdyQjt3QkFDSixPQUFPLEVBQUUscUJBQXFCO3FCQUMvQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsU0FBUyxhQUMvQixDQUFDLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDOzBFQWVyRCxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFJOUMsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUluRCxpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRELGtCQUFrQjtzQkFEekIsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7Z0JBYXBELFFBQVE7c0JBRFAsTUFBTTtnQkFPUCxXQUFXO3NCQURWLE1BQU07Z0JBT1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBT1AsV0FBVztzQkFEVixNQUFNO2dCQU9QLFFBQVE7c0JBRFAsTUFBTTtnQkFPUCxVQUFVO3NCQURULE1BQU07Z0JBT1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQU9QLGdCQUFnQjtzQkFEZixNQUFNO2dCQXVCSCxrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBNkJGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkE2QkYsc0JBQXNCO3NCQUR6QixLQUFLO2dCQTZCRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBNkJGLE9BQU87c0JBRFYsS0FBSztnQkE2QkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQTZCRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixnQ0FBZ0M7c0JBRG5DLEtBQUs7Z0JBNENGLEtBQUs7c0JBRFIsS0FBSztnQkFnQkYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQXNDRixXQUFXO3NCQURkLEtBQUs7Z0JBd0NGLFlBQVk7c0JBRGYsS0FBSztnQkE4QkYsYUFBYTtzQkFEaEIsS0FBSztnQkE4QkYsZUFBZTtzQkFEbEIsS0FBSztnQkE2QkYsSUFBSTtzQkFEUCxLQUFLO2dCQTZCRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBNkJGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBbUNGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFrQ0YsZUFBZTtzQkFEbEIsS0FBSztnQkFxQkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQXNCRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBNkJGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkE2QkYsY0FBYztzQkFEakIsS0FBSztnQkEwRUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQTZCRixlQUFlO3NCQURsQixLQUFLO2dCQTZCRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBZ0NGLHlCQUF5QjtzQkFENUIsS0FBSztnQkErQkYsWUFBWTtzQkFEZixLQUFLO2dCQW1ERixhQUFhO3NCQURoQixLQUFLO2dCQWdDRixRQUFRO3NCQURYLEtBQUs7Z0JBOEJGLFdBQVc7c0JBRGQsS0FBSztnQkE0QkYsU0FBUztzQkFEWixLQUFLO2dCQTRCRixjQUFjO3NCQURqQixLQUFLO2dCQTRCRixVQUFVO3NCQURiLEtBQUs7Z0JBb0NGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNkJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBK0JGLGtCQUFrQjtzQkFEckIsS0FBSztnQkE0QkYsT0FBTztzQkFEVixLQUFLO2dCQXFDUSxtQkFBbUI7c0JBRGhDLEtBQUs7Z0JBaUNGLFdBQVc7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsXHJcbiAgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBvZiwgc2tpcCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCBDTEFTU19MSVNUX1ZFUlRJQ0FMLCBERUZBVUxUX0RJUkVDVElPTiwgREVGQVVMVF9EWU5BTUlDX1NJWkUsXHJcbiAgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLCBERUZBVUxUX0JVRkZFUl9TSVpFLCBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9TTkFQLCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCxcclxuICBIRUlHSFRfUFJPUF9OQU1FLCBMRUZUX1BST1BfTkFNRSwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBQWCwgRk9DVVMsIFRPUF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxuICBERUZBVUxUX01BWF9CVUZGRVJfU0laRSwgREVGQVVMVF9TRUxFQ1RfTUVUSE9ELCBERUZBVUxUX1NFTEVDVF9CWV9DTElDSywgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSywgREVGQVVMVF9DT0xMRUNUSU9OX01PREUsXHJcbiAgREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UsIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORCwgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORyxcclxuICBNT1VTRV9ET1dOLCBUT1VDSF9TVEFSVCwgREVGQVVMVF9MQU5HX1RFWFRfRElSLCBERUZBVUxUX0NMSUNLX0RJU1RBTkNFLCBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsIEtFWV9ET1dOLCBCRUhBVklPUl9BVVRPLCBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVELCBERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSwgREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9BTklNQVRJT05fUEFSQU1TLCBERUZBVUxUX1NDUk9MTF9CRUhBVklPUiwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJULCBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTiwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMsXHJcbiAgUFJFUEFSRV9JVEVSQVRJT05TLCBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEgsIFJPTEVfTElTVF9CT1gsIFJPTEVfTElTVCwgS0VZX1RBQiwgTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSxcclxuICBNQVhfVkVMT0NJVFlfRk9SX1NDUk9MTF9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwyLCBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9DT0xMQVBTRV9JVEVNUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9DT0xMQVBTRV9JVEVNUywgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEsXHJcbiAgREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7XHJcbiAgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxufSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgSVNjcm9sbEV2ZW50LCBJU2Nyb2xsT3B0aW9ucywgSUFuaW1hdGlvblBhcmFtcywgSVNpemUsIElSZW5kZXJTdGFiaWxpemVyT3B0aW9ucyxcclxuICBJU2Nyb2xsaW5nU2V0dGluZ3MsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29sbGVjdGlvbk1vZGUsIENvbGxlY3Rpb25Nb2RlcywgRGlyZWN0aW9uLCBEaXJlY3Rpb25zLCBGb2N1c0FsaWdubWVudHMsIE1ldGhvZEZvclNlbGVjdGluZywgTWV0aG9kc0ZvclNlbGVjdGluZyxcclxuICBTbmFwcGluZ01ldGhvZCwgU25hcHBpbmdNZXRob2RzLCBUZXh0RGlyZWN0aW9uLCBUZXh0RGlyZWN0aW9ucyxcclxufSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgZGVib3VuY2UsIFNjcm9sbEV2ZW50LCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVHJhY2tCb3ggfSBmcm9tICcuL2NvcmUvdHJhY2stYm94JztcclxuaW1wb3J0IHsgaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkIH0gZnJvbSAnLi91dGlscy9zbmFwcGluZy1tZXRob2QnO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9iYXNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50JDEgfSBmcm9tICcuL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0RpcmVjdGlvbiB9IGZyb20gJy4vdXRpbHMvaXMtZGlyZWN0aW9uJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFNlcnZpY2UgfSBmcm9tICcuL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNNZXRob2RGb3JTZWxlY3RpbmcgfSBmcm9tICcuL3V0aWxzL2lzLW1ldGhvZC1mb3Itc2VsZWN0aW5nJztcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9tZXRob2QtZm9yLXNlbGVjdGluZy10eXBlcyc7XHJcbmltcG9ydCB7IENNYXAgfSBmcm9tICcuL3V0aWxzL2NtYXAnO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUJvb2xlYW4sIHZhbGlkYXRlRmxvYXQsIHZhbGlkYXRlSW50LCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBjb3B5VmFsdWVBc1JlYWRvbmx5LCBvYmplY3RBc1JlYWRvbmx5IH0gZnJvbSAnLi91dGlscy9vYmplY3QnO1xyXG5pbXBvcnQgeyBpc0NvbGxlY3Rpb25Nb2RlIH0gZnJvbSAnLi91dGlscy9pcy1jb2xsZWN0aW9uLW1vZGUnO1xyXG5pbXBvcnQgeyBOZ1Njcm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcyB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldyc7XHJcbmltcG9ydCB7IE5nUHJlcmVuZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXByZXJlbmRlci1jb250YWluZXIvbmctcHJlcmVuZGVyLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsUGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zLCBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlIH0gZnJvbSAnLi91dGlscy9zY3JlZW4tcmVhZGVyLWZvcm1hdHRlcic7XHJcbmltcG9ydCB7IHZhbGlkYXRlSWQsIHZhbGlkYXRlSXRlcmF0aW9uLCB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yLCB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgRVZFTlRfS0VZX0RPV04sIEtFWV9BUlJfRE9XTiwgS0VZX0FSUl9MRUZULCBLRVlfQVJSX1JJR0hULCBLRVlfQVJSX1VQIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9jb25zdCc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3QtcHVibGljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTUueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdzdHlsZSc6ICdwb3NpdGlvbjogcmVsYXRpdmU7J1xyXG4gIH0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG4gIHByb3ZpZGVyczogW05nVmlydHVhbExpc3RTZXJ2aWNlLCBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX19uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAvKipcclxuICAgKiBSZWFkb25seS4gUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKi9cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9zZXJ2aWNlID0gaW5qZWN0KE5nVmlydHVhbExpc3RTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncHJlcmVuZGVyJywgeyByZWFkOiBOZ1ByZXJlbmRlckNvbnRhaW5lciB9KVxyXG4gIHByaXZhdGUgX3ByZXJlbmRlcjogTmdQcmVyZW5kZXJDb250YWluZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX2xpc3RDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGVyJywgeyByZWFkOiBOZ1Njcm9sbGVyQ29tcG9uZW50IH0pXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsZXJDb21wb25lbnQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxlciA9IHRoaXMuXyRzY3JvbGxlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbGlzdCA9IHRoaXMuXyRsaXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPiB8IElkIHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgY29sbGFwc2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIHN0YXJ0LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsUmVhY2hTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIGVuZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRzaG93ID0gdGhpcy5fJHNob3cuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGlja25lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRoaWNrbmVzc1RyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaGlja25lc3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsYmFyIHRoaWNrbmVzcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaGlja25lc3ModjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGhpY2tuZXNzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaGlja25lc3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhck1pblNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJNaW5TaXplVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhck1pblNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNaW5pbXVtIHNjcm9sbGJhciBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhck1pblNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJNaW5TaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuZ2V0VmFsdWUoKSBhcyBudW1iZXI7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGh1bWJSZW5kZXJlclRyYW5zZm9ybSA9ICh2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRodW1iUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciBjdXN0b21pemF0aW9uIHRlbXBsYXRlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGh1bWJSZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbD4oe30pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRodW1iUGFyYW1zVHJhbnNmb3JtID0gKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaHVtYlBhcmFtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgc2Nyb2xsYmFyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRodW1iUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxvYWRpbmcgPSB0aGlzLl8kbG9hZGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZ1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxvYWRpbmdcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYHRydWVgLCB0aGUgc2Nyb2xsQmFyIGdvZXMgaW50byBsb2FkaW5nIHN0YXRlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9sb2FkaW5nVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsb2FkaW5nLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbG9hZGluZygpIHsgcmV0dXJuIHRoaXMuXyRsb2FkaW5nLmdldFZhbHVlKCkgYXMgYm9vbGVhbjsgfVxyXG5cclxuICBwcml2YXRlIF8kd2FpdEZvclByZXBhcmF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3dhaXRGb3JQcmVwYXJhdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwid2FpdEZvclByZXBhcmF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSwgaXQgd2lsbCB3YWl0IHVudGlsIHRoZSBsaXN0IGl0ZW1zIGFyZSBmdWxseSBwcmVwYXJlZCBiZWZvcmUgZGlzcGxheWluZyB0aGVtLi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHdhaXRGb3JQcmVwYXJhdGlvbih2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fd2FpdEZvclByZXBhcmF0aW9uVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB3YWl0Rm9yUHJlcGFyYXRpb24oKSB7IHJldHVybiB0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmdldFZhbHVlKCkgYXMgYm9vbGVhbjsgfVxyXG5cclxuICBwcml2YXRlIF8kY2xpY2tEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0NMSUNLX0RJU1RBTkNFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNsaWNrRGlzdGFuY2UgPSB0aGlzLl8kY2xpY2tEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tEaXN0YW5jZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjbGlja0Rpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBzY3JvbGwgZGlzdGFuY2UgYXQgd2hpY2ggYSBjbGljayBldmVudCBpcyB0cmlnZ2VyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xpY2tEaXN0YW5jZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY2xpY2tEaXN0YW5jZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNsaWNrRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpIGFzIG51bWJlcjsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0ID0gdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG9mZnNldCB2YWx1ZTsgaWYgdGhlIHNjcm9sbCBhcmVhIHZhbHVlIGlzIGV4Y2VlZGVkLCB0aGUgc2Nyb2xsIGFuaW1hdGlvbiB3aWxsIGJlIGRpc2FibGVkLiBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1zID0gdGhpcy5fJGl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtc1RyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVPYmplY3QoaXRlbSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgISh2YWxpZGF0ZUZsb2F0KGl0ZW0/Llt0cmFja0J5XSBhcyBudW1iZXIsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKGl0ZW0/Llt0cmFja0J5XSBhcyBzdHJpbmcsIHRydWUsIHRydWUpKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1zXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbmAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSBhcyBJVmlydHVhbExpc3RDb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkZWZhdWx0SXRlbVZhbHVlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkZWZhdWx0SXRlbVZhbHVlID0gdGhpcy5fJGRlZmF1bHRJdGVtVmFsdWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRlZmF1bHRJdGVtVmFsdWUodjogSVZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IGRlZmF1bHRJdGVtVmFsdWUoKSB7IHJldHVybiB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZElkc1RyYW5zZm9ybSA9ICh2OiBBcnJheTxJZD4gfCBJZCB8IG51bGwpID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiBhcyBhbnksIHRydWUsIHRydWUpIHx8IHZhbGlkYXRlU3RyaW5nKHYgYXMgYW55LCB0cnVlLCB0cnVlKSB8fCB2YWxpZGF0ZUZsb2F0KHYgYXMgYW55LCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RlZElkc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEFycmF5PElkPiB8IElkYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0aW5nID8gW10gOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0ZWRJZHModjogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzZWxlY3RlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2VkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYgJiYgQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyhpdGVtIGFzIGFueSkgfHwgdmFsaWRhdGVGbG9hdChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiY29sbGFwc2VkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+YCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sbGFwc2VkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlZElkcyh2OiBBcnJheTxJZD4pIHtcclxuICAgIGlmICh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGNvbGxhcHNlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0QnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0spO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0QnlDbGljayA9IHRoaXMuXyRzZWxlY3RCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2VsZWN0QnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnLnNlbGVjdCBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0QnlDbGljaygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlQnlDbGljayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZUJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZUJ5Q2xpY2tcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgZmFsc2VgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIGNvbmZpZy5jb2xsYXBzZSBtZXRob2QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0ZTsgXHJcbiAgICogaWYgYHRydWVgLCB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgYnkgY2xpY2tpbmcgb24gaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsYXBzZUJ5Q2xpY2sodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGFwc2VCeUNsaWNrKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlQnlDbGljay5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcCA9IHRoaXMuXyRzbmFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXAoKSB7IHJldHVybiB0aGlzLl8kc25hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxTdGFydE9mZnNldFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIHN0YXJ0IG9mZnNldCB2YWx1ZTsgRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxTdGFydE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEVuZE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxFbmRPZmZzZXRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNjcm9sbCBlbmQgb2Zmc2V0IHZhbHVlOyBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEVuZE9mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxFbmRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbEVuZE9mZnNldCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxFbmRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFNjcm9sbFRvU3RhcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9TQ1JPTExUT19TVEFSVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFNjcm9sbFRvU3RhcnRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwU2Nyb2xsVG9TdGFydFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJUO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgd2lsbCBiZSBhbmNob3JlZCB0byB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICogVGhpcyBwcm9wZXJ0eSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS5cclxuICAgKiBUaGF0IGlzLCBpZiBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIGluaXRpYWxseSBzbmFwIFxyXG4gICAqIHRvIHRoZSBiZWdpbm5pbmc7IGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBlbmQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kLiBcclxuICAgKiBJZiBzbmFwU2Nyb2xsVG9TdGFydCBpcyBkaXNhYmxlZCBhbmQgc25hcFNjcm9sbFRvRW5kIGlzIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgZW5kOyBcclxuICAgKiBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgYmVnaW5uaW5nLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGJlZ2lubmluZy4gXHJcbiAgICogSWYgYm90aCBzbmFwU2Nyb2xsVG9TdGFydCBhbmQgc25hcFNjcm9sbFRvRW5kIGFyZSBkaXNhYmxlZCwgdGhlIGxpc3Qgd2lsbCBuZXZlciBzbmFwIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBTY3JvbGxUb1N0YXJ0KHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBTY3JvbGxUb1N0YXJ0VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBTY3JvbGxUb1N0YXJ0KCkgeyByZXR1cm4gdGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBTY3JvbGxUb0VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwU2Nyb2xsVG9FbmRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwU2Nyb2xsVG9FbmRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCB3aWxsIGJlIGFuY2hvcmVkIHRvIHRoZSDRg9GC0LIgb2YgdGhlIGxpc3QuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICogVGhhdCBpcywgaWYgc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBpbml0aWFsbHkgc25hcCBcclxuICAgKiB0byB0aGUgYmVnaW5uaW5nOyBpZiB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJhciB0byB0aGUgZW5kLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZC4gXHJcbiAgICogSWYgc25hcFNjcm9sbFRvU3RhcnQgaXMgZGlzYWJsZWQgYW5kIHNuYXBTY3JvbGxUb0VuZCBpcyBlbmFibGVkLCB0aGUgbGlzdCB3aWxsIHNuYXAgdG8gdGhlIGVuZDsgXHJcbiAgICogaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGJlZ2lubmluZywgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBiZWdpbm5pbmcuIFxyXG4gICAqIElmIGJvdGggc25hcFNjcm9sbFRvU3RhcnQgYW5kIHNuYXBTY3JvbGxUb0VuZCBhcmUgZGlzYWJsZWQsIHRoZSBsaXN0IHdpbGwgbmV2ZXIgc25hcCB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9FbmQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBTY3JvbGxUb0VuZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFNjcm9sbFRvRW5kLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFNjcm9sbFRvRW5kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3NuYXBTY3JvbGxUb0JvdHRvbVRyYW5zZm9ybSA9ICgpID0+IHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc25hcFNjcm9sbFRvQm90dG9tIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LicpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBTY3JvbGxUb0JvdHRvbSh2OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zbmFwU2Nyb2xsVG9Cb3R0b21UcmFuc2Zvcm0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVEKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyRW5hYmxlZFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhckVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbGJhciBpcyBzaG93biBvciBub3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckVuYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckludGVyYWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFySW50ZXJhY3RpdmVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJJbnRlcmFjdGl2ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgc2Nyb2xsaW5nIHVzaW5nIHRoZSBzY3JvbGxiYXIgd2lsbCBiZSBwb3NzaWJsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFySW50ZXJhY3RpdmVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFySW50ZXJhY3RpdmUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsQmVoYXZpb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcm9sbEJlaGF2aW9yPihERUZBVUxUX1NDUk9MTF9CRUhBVklPUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxCZWhhdmlvciA9IHRoaXMuXyRzY3JvbGxCZWhhdmlvci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmVoYXZpb3JUcmFuc2Zvcm0gPSAodjogU2Nyb2xsQmVoYXZpb3IpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxCZWhhdmlvclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTF9CRUhBVklPUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBmb3IgYW55IGVsZW1lbnQgb24gdGhlIHBhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwic21vb3RoXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsQmVoYXZpb3IodjogU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsQmVoYXZpb3IuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbEJlaGF2aW9yVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxCZWhhdmlvci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbEJlaGF2aW9yKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEJlaGF2aW9yLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGluZ1NldHRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2Nyb2xsaW5nU2V0dGluZ3M+KERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGluZ1NldHRpbmdzID0gdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxpbmdTZXR0aW5nc1RyYW5zZm9ybSA9ICh2OiBJU2Nyb2xsaW5nU2V0dGluZ3MpOiBJU2Nyb2xsaW5nU2V0dGluZ3MgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQgJiYgISF2KSB7XHJcbiAgICAgIGNvbnN0IHsgZnJpY3Rpb25hbEZvcmNlLCBtYXNzLCBtYXhEaXN0YW5jZSwgbWF4RHVyYXRpb24sIHNwZWVkU2NhbGUsIG9wdGltaXphdGlvbiB9ID0gdjtcclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KGZyaWN0aW9uYWxGb3JjZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJmcmljdGlvbmFsRm9yY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQobWFzcywgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXNzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heERpc3RhbmNlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heERpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heER1cmF0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heER1cmF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHNwZWVkU2NhbGUsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3BlZWRTY2FsZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKG9wdGltaXphdGlvbiwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsaW5nU2V0dGluZ3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgIG9yIG51bGwuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZyaWN0aW9uYWxGb3JjZTogdi5mcmljdGlvbmFsRm9yY2UgIT09IHVuZGVmaW5lZCAmJiB2LmZyaWN0aW9uYWxGb3JjZSA+IDAgPyB2LmZyaWN0aW9uYWxGb3JjZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLmZyaWN0aW9uYWxGb3JjZSxcclxuICAgICAgbWFzczogdi5tYXNzICE9PSB1bmRlZmluZWQgJiYgdi5tYXNzID4gMCA/IHYubWFzcyA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1hc3MsXHJcbiAgICAgIG1heERpc3RhbmNlOiB2Lm1heERpc3RhbmNlICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEaXN0YW5jZSA+IDAgPyB2Lm1heERpc3RhbmNlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RGlzdGFuY2UsXHJcbiAgICAgIG1heER1cmF0aW9uOiB2Lm1heER1cmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEdXJhdGlvbiA+IDAgPyB2Lm1heER1cmF0aW9uIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RHVyYXRpb24sXHJcbiAgICAgIHNwZWVkU2NhbGU6IHYuc3BlZWRTY2FsZSAhPT0gdW5kZWZpbmVkICYmIHYuc3BlZWRTY2FsZSA+IDAgPyB2LnNwZWVkU2NhbGUgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5zcGVlZFNjYWxlLFxyXG4gICAgICBvcHRpbWl6YXRpb246IHYub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsaW5nIHNldHRpbmdzLlxyXG4gICAqIC0gZnJpY3Rpb25hbEZvcmNlIC0gRnJpY3Rpb25hbCBmb3JjZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLjAzNS5cclxuICAgKiAtIG1hc3MgLSBNYXNzLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDA1LlxyXG4gICAqIC0gbWF4RGlzdGFuY2UgLSBNYXhpbXVtIHNjcm9sbGluZyBkaXN0YW5jZS4gRGVmYXVsdCB2YWx1ZSBpcyAxMjUwMC5cclxuICAgKiAtIG1heER1cmF0aW9uIC0gTWF4aW11bSBhbmltYXRpb24gZHVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgNDAwMC5cclxuICAgKiAtIHNwZWVkU2NhbGUgLSBTcGVlZCBzY2FsZS4gRGVmYXVsdCB2YWx1ZSBpcyAxNS5cclxuICAgKiAtIG9wdGltaXphdGlvbiAtIEVuYWJsZXMgc2Nyb2xsaW5nIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsaW5nU2V0dGluZ3ModjogSVNjcm9sbGluZ1NldHRpbmdzKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxpbmdTZXR0aW5nc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxpbmdTZXR0aW5ncygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhbmltYXRpb25QYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElBbmltYXRpb25QYXJhbXM+KERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRhbmltYXRpb25QYXJhbXMgPSB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25QYXJhbXNUcmFuc2Zvcm0gPSAodjogSUFuaW1hdGlvblBhcmFtcykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImFuaW1hdGlvblBhcmFtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gcGFyYW1ldGVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ7IHNjcm9sbFRvSXRlbTogNTAsIG5hdmlnYXRlVG9JdGVtOiAxNTAsIG5hdmlnYXRlQnlLZXlib2FyZDogNTAgfVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFuaW1hdGlvblBhcmFtcyh2OiBJQW5pbWF0aW9uUGFyYW1zKSB7XHJcbiAgICBpZiAodGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbmltYXRpb25QYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbmltYXRpb25QYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJzY3JvbGxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVyc2Nyb2xsRW5hYmxlZCA9IHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcnNjcm9sbEVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVyc2Nyb2xsRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG92ZXJzY3JvbGwgKHJlLXNjcm9sbCkgZmVhdHVyZSB3aWxsIHdvcmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJzY3JvbGxFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG92ZXJzY3JvbGxFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodiAmJiAhKHR5cGVvZiB2LmVsZW1lbnRSZWYgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2LmNyZWF0ZUVtYmVkZGVkVmlldyA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJpdGVtUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBUZW1wbGF0ZVJlZmAuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAqIFJlbmRlcmluZyBlbGVtZW50IHRlbXBsYXRlLlxyXG4gICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1SZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSBhcyBUZW1wbGF0ZVJlZjxhbnk+OyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtQ29uZmlnTWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwPih7fSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtQ29uZmlnTWFwID0gdGhpcy5fJGl0ZW1Db25maWdNYXAuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1Db25maWdNYXBUcmFuc2Zvcm0gPSAodjogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBmb3IgKGxldCBpZCBpbiB2KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpZF07XHJcbiAgICAgICAgICBpZiAoIWl0ZW0gfHxcclxuICAgICAgICAgICAgIXZhbGlkYXRlQm9vbGVhbihpdGVtLmNvbGxhcHNhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uc2VsZWN0YWJsZSwgdHJ1ZSkgfHxcclxuICAgICAgICAgICAgIShpdGVtLnN0aWNreSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0uc3RpY2t5ID09PSAwIHx8IGl0ZW0uc3RpY2t5ID09PSAxIHx8IGl0ZW0uc3RpY2t5ID09PSAyKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJpdGVtQ29uZmlnTWFwXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcGAuJyk7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgYHN0aWNreWAgcG9zaXRpb24sIGBjb2xsYXBzYWJsZWAgYW5kIGBzZWxlY3RhYmxlYCBmb3IgdGhlIGxpc3QgaXRlbSBlbGVtZW50LiBJZiBgc3RpY2t5YCBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gYDBgLCB0aGVuIGBzdGlja3lgIHBvc2l0aW9uIGlzIGFwcGxpZWQuIFxyXG4gICAqIElmIHRoZSBgc3RpY2t5YCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gYDBgLCB0aGVuIHRoZSBgc3RpY2t5YCBwb3NpdGlvbiBtb2RlIGlzIGVuYWJsZWQgZm9yIHRoZSBlbGVtZW50LiBgMWAgLSBwb3NpdGlvbiBzdGFydCwgYDJgIC0gcG9zaXRpb24gZW5kLlxyXG4gICAqICBEZWZhdWx0IHZhbHVlIGlzIGAwYC5cclxuICAgKiBgc2VsZWN0YWJsZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICogYGNvbGxhcHNhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIGEgYHN0aWNreWAgcHJvcGVydHkgZ3JlYXRlciB0aGFuIHplcm8gY2FuIGNvbGxhcHNlIGFuZFxyXG4gICAqICBjb2xsYXBzZSBlbGVtZW50cyBpbiBmcm9udCB0aGF0IGRvIG5vdCBoYXZlIGEgYHN0aWNreWAgcHJvcGVydHkuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTUueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1Db25maWdNYXAoKSB7IHJldHVybiB0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbCA9IE51bWJlcih2KTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZiB0aGUgZHluYW1pY1NpemUgcHJvcGVydHkgaXMgdHJ1ZSwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGl0ZW1TaXplIHByb3BlcnR5IFxyXG4gICAqIHRvIGFkanVzdCB0aGUgc2l6ZXMgb2YgdGhlIGl0ZW1zIGluIHRoZSB1bmFsbG9jYXRlZCBhcmVhLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVNpemVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVNpemUoKSB7IHJldHVybiB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZHluYW1pY1NpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRFlOQU1JQ19TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGR5bmFtaWNTaXplID0gdGhpcy5fJGR5bmFtaWNTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9keW5hbWljU2l6ZVRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZHluYW1pY1NpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRFlOQU1JQ19TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSwgaXRlbXMgaW4gdGhlIGxpc3QgbWF5IGhhdmUgZGlmZmVyZW50IHNpemVzLCBhbmQgdGhlIGl0ZW1TaXplIHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIHRvIGFkanVzdFxyXG4gICAqIHRoZSBzaXplcyBvZiBpdGVtcyBpbiB0aGUgdW5hbGxvY2F0ZWQgYXJlYS5cclxuICAgKiBJZiBmYWxzZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBoYXZlIGEgZml4ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1TaXplIHByb3BlcnR5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGR5bmFtaWNTaXplKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2R5bmFtaWNTaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkeW5hbWljU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGR5bmFtaWNTaXplKCkgeyByZXR1cm4gdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlyZWN0aW9uPihERUZBVUxUX0RJUkVDVElPTik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9kaXJlY3Rpb25UcmFuc2Zvcm0gPSAodjogRGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnaG9yaXpvbnRhbCcgfHwgdiA9PT0gJ3ZlcnRpY2FsJyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImRpcmVjdGlvblwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVJFQ1RJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpcmVjdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgZGlyZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsZWN0aW9uTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sbGVjdGlvbk1vZGU+KERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxlY3Rpb25Nb2RlID0gdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsZWN0aW9uTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2xhenknKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiZGlyZWN0aW9uXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGVjdGlvbk1vZGUoKSB7IHJldHVybiB0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1heEJ1ZmZlclNpemUgPSB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4QnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGxldCB2YWwgPSB2O1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4QnVmZmVyU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHZhbCA9IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpO1xyXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA8PSBidWZmZXJTaXplKSB7XHJcbiAgICAgIHJldHVybiBidWZmZXJTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDEwMC5cclxuICAgKiBJZiBtYXhCdWZmZXJTaXplIGlzIHNldCB0byBiZSBncmVhdGVyIHRoYW4gYnVmZmVyU2l6ZSwgdGhlbiBhZGFwdGl2ZSBidWZmZXIgbW9kZSBpcyBlbmFibGVkLlxyXG4gICAqIFRoZSBncmVhdGVyIHRoZSBzY3JvbGwgc2l6ZSwgdGhlIG1vcmUgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCBmb3IgcmVuZGVyaW5nLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heEJ1ZmZlclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9tYXhCdWZmZXJTaXplVHJhbnNmb3JtKHYpO1xyXG4gICAgaWYgKHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCkgPT09IHZhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJG1heEJ1ZmZlclNpemUubmV4dCh2YWwpO1xyXG4gIH07XHJcbiAgZ2V0IG1heEJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ01ldGhvZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSA9ICh2OiBTbmFwcGluZ01ldGhvZCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEIHx8IHYgPT09IFNuYXBwaW5nTWV0aG9kcy5TVEFOREFSVCk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZSBcInNuYXBwaW5nTWV0aG9kXCIgcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGUgdmFsdWUgJyR7U25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEfScgb3IgJyR7U25hcHBpbmdNZXRob2RzLlNUQU5EQVJUfScuYCk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBQSU5HX01FVEhPRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC4gRGVmYXVsdCB2YWx1ZSBpcyAnc3RhbmRhcnQnLlxyXG4gICAqICdzdGFuZGFydCcgLSBDbGFzc2ljIGdyb3VwIHZpc3VhbGl6YXRpb24uXHJcbiAgICogJ2FkdmFuY2VkJyAtIEEgbWFzayBpcyBhcHBsaWVkIHRvIHRoZSB2aWV3cG9ydCBhcmVhIHNvIHRoYXQgdGhlIGJhY2tncm91bmQgaXMgZGlzcGxheWVkIHVuZGVybmVhdGggdGhlIGF0dGFjaGVkIGdyb3VwLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwcGluZ01ldGhvZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdNZXRob2QubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwcGluZ01ldGhvZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtZXRob2RGb3JTZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1ldGhvZEZvclNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21ldGhvZEZvclNlbGVjdGluZ1RyYW5zZm9ybSA9ICh2OiBNZXRob2RGb3JTZWxlY3RpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub25lJyB8fCB2ID09PSAnc2VsZWN0JyB8fCB2ID09PSAnbXVsdGktc2VsZWN0Jyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1ldGhvZEZvclNlbGVjdGluZ1wiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlIGBub25lYCwgYHNlbGVjdGAgb3IgYG11bHRpLXNlbGVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NFTEVDVF9NRVRIT0Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiAgTWV0aG9kIGZvciBzZWxlY3RpbmcgbGlzdCBpdGVtcy4gRGVmYXVsdCB2YWx1ZSBpcyAnbm9uZScuXHJcbiAgICogJ3NlbGVjdCcgLSBMaXN0IGl0ZW1zIGFyZSBzZWxlY3RlZCBvbmUgYnkgb25lLlxyXG4gICAqICdtdWx0aS1zZWxlY3QnIC0gTXVsdGlwbGUgc2VsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICogJ25vbmUnIC0gTGlzdCBpdGVtcyBhcmUgbm90IHNlbGVjdGFibGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWV0aG9kRm9yU2VsZWN0aW5nKHY6IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgaWYgKHRoaXMuXyRtZXRob2RGb3JTZWxlY3RpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21ldGhvZEZvclNlbGVjdGluZ1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbWV0aG9kRm9yU2VsZWN0aW5nLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbWV0aG9kRm9yU2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5fJG1ldGhvZEZvclNlbGVjdGluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyR0cmFja0J5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFRSQUNLX0JZX1BST1BFUlRZX05BTUUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF90cmFja0J5VHJhbnNmb3JtID0gKHY6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwidHJhY2tCeVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3RyYWNrQnlUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JlZW5SZWFkZXJNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NjcmVlblJlYWRlck1lc3NhZ2VUcmFuc2Zvcm0gPSAodjogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JlZW5SZWFkZXJNZXNzYWdlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSBmb3Igc2NyZWVuIHJlYWRlci5cclxuICAgKiBUaGUgbWVzc2FnZSBmb3JtYXQgaXM6IFwic29tZSB0ZXh0ICQxIHNvbWUgdGV4dCAkMlwiLFxyXG4gICAqIHdoZXJlICQxIGlzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHNjcmVlbiBjb2xsZWN0aW9uLFxyXG4gICAqICQyIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwcm90ZWN0ZWQgc2V0IHNjcmVlblJlYWRlck1lc3NhZ2Uodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NjcmVlblJlYWRlck1lc3NhZ2VUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBnZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JlZW5SZWFkZXJNZXNzYWdlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UpO1xyXG4gIHByb3RlY3RlZCAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KERFRkFVTFRfTEFOR19URVhUX0RJUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXJUcmFuc2Zvcm0gPSAodjogVGV4dERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxhbmdUZXh0RGlyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTEFOR19URVhUX0RJUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGZvciB0aGUgbG9jYWxlLlxyXG4gICAqIENhbiBiZSBlaXRoZXIgXCJsdHJcIiAobGVmdC10by1yaWdodCkgb3IgXCJydGxcIiAocmlnaHQtdG8tbGVmdCkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbGFuZ1RleHREaXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbGFuZ1RleHREaXIoKSB7IHJldHVybiB0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc05vdFNlbGVjdGluZyA9IHRoaXMuZ2V0SXNOb3RTZWxlY3RpbmcoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3RpbmcgPSB0aGlzLmdldElzU2luZ2xlU2VsZWN0aW5nKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlTZWxlY3RpbmcgPSB0aGlzLmdldElzTXVsdGlTZWxlY3RpbmcoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNWZXJ0aWNhbCA9IHRoaXMuZ2V0SXNWZXJ0aWNhbCgpO1xyXG4gIHByb3RlY3RlZCBnZXQgaXNWZXJ0aWNhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1ZlcnRpY2FsO1xyXG4gIH1cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5pc1ZlcnRpY2FsKTtcclxuICBwcm90ZWN0ZWQgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcHJvdGVjdGVkICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmVyZW5kZXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRwcmVyZW5kZXJFbmFibGVkID0gdGhpcy5fJHByZXJlbmRlckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF8kYm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkYm91bmRzOiBPYnNlcnZhYmxlPElTaXplIHwgbnVsbD4gPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdG90YWxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kbGlzdEJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbFN0YXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGlzU2Nyb2xsRW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCksIHNjcm9sbGVyID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCksIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSwgc25hcHBlZENvbXBvbmVudHMgPSB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHM7XHJcbiAgICBpZiAobGlzdCAmJiBzY3JvbGxlciAmJiBzbmFwcGVkQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBjb21wIG9mIHNuYXBwZWRDb21wb25lbnRzKSB7XHJcbiAgICAgICAgaWYgKCEhY29tcCkge1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5nZXRWYWx1ZSgpO1xyXG4gICAgICBpZiAoc25hcHBpbmdNZXRob2QgPT09IFNuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXBwZWRDb21wb25lbnQgPSBzbmFwcGVkQ29tcG9uZW50cz8uWzBdLmluc3RhbmNlO1xyXG4gICAgICAgIGlmICghIXNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LCBsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpO1xyXG5cclxuICAgICAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aH0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRofSAwIFpcIilgO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IHNXaWR0aCwgaGVpZ2h0OiBzSGVpZ2h0IH0gPSBzbmFwcGVkQ29tcG9uZW50LmdldEJvdW5kcygpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQgPSBzY3JvbGxlci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMCxcclxuICAgICAgICAgICAgc2Nyb2xsQmFyU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgICAgICBsZXQgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICAgICAgcmlnaHQgPSB3aWR0aCAtIHNjcm9sbEJhclNpemUgKyAyO1xyXG4gICAgICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgICAgICBib3R0b20gPSBoZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmIChsYW5nVGV4dERpciA9PT0gVGV4dERpcmVjdGlvbnMuUlRMKSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHt0b3AgKyBkZWx0YX0gTCAke3Njcm9sbEJhclNpemV9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAwIFpcIilgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwICR7dG9wICsgZGVsdGF9IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIEwgJHtyaWdodH0gMCBMICR7cmlnaHR9ICR7dG9wICsgZGVsdGF9IFpcIilgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0ID0gc1dpZHRoO1xyXG4gICAgICAgICAgICByaWdodCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0b3AgPSAwO1xyXG4gICAgICAgICAgICBib3R0b20gPSBoZWlnaHQgLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gJHt3aWR0aH0gMCBMICR7d2lkdGh9ICR7Ym90dG9tfSBMIDAgJHtib3R0b219IEwgMCAwIEwgJHt3aWR0aH0gMCBaXCIpYDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZm9jdXNJdGVtID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogbnVtYmVyLCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSLFxyXG4gICAgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTykgPT4ge1xyXG4gICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpISwgeyB3aWR0aDogZWxlbWVudFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnRIZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXHJcbiAgICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgIGVsZW1lbnRTaXplID0gaXNWZXJ0aWNhbCA/IGVsZW1lbnRIZWlnaHQgOiBlbGVtZW50V2lkdGg7XHJcbiAgICAgIGxldCBwb3M6IG51bWJlciA9IE51bWJlci5OYU47XHJcbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5TVEFSVDoge1xyXG4gICAgICAgICAgcG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICBwb3MgPSBwb3NpdGlvbiAtICh2aWV3cG9ydFNpemUgLSBlbGVtZW50U2l6ZSkgKiAuNTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5FTkQ6IHtcclxuICAgICAgICAgIHBvcyA9IHBvc2l0aW9uIC0gKHZpZXdwb3J0U2l6ZSAtIGVsZW1lbnRTaXplKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIEZvY3VzQWxpZ25tZW50cy5OT05FOlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIU51bWJlci5pc05hTihwb3MpKSB7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsV2lkdGggPSBzY3JvbGxlcj8uc2Nyb2xsV2lkdGggPz8gMCwgc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsZXI/LnNjcm9sbEhlaWdodCA/PyAwO1xyXG4gICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICBpZiAocG9zIDwgMCkge1xyXG4gICAgICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcyA+IHNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgICBwb3MgPSBzY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChwb3MgPCAwKSB7XHJcbiAgICAgICAgICAgIHBvcyA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocG9zID4gc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgICAgICAgcG9zID0gc2Nyb2xsV2lkdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHBvcywgYmVoYXZpb3IsXHJcbiAgICAgICAgICBmaXJlVXBkYXRlOiB0cnVlLCBibGVuZGluZzogdHJ1ZSwgdXNlckFjdGlvbjogdHJ1ZSwgZHVyYXRpb246IHRoaXMuXyRhbmltYXRpb25QYXJhbXMuZ2V0VmFsdWUoKS5uYXZpZ2F0ZVRvSXRlbSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNjcm9sbGVyLnJlZnJlc2goZmFsc2UpO1xyXG4gICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIG9mIHRoZSBlbGVtZW50IGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2l0ZW1Db21wb25lbnRDbGFzczogQ29tcG9uZW50JDE8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gPSBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudDtcclxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Db21wb25lbnRDbGFzcygpIHsgcmV0dXJuIHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzczsgfVxyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIHRyYWNrQm94XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3hDbGFzczogQ29tcG9uZW50JDE8VHJhY2tCb3g+ID0gVHJhY2tCb3g7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpY3Rpb25hcnkgb2YgZWxlbWVudCBzaXplcyBieSB0aGVpciBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCA9IG5ldyB0aGlzLl90cmFja0JveENsYXNzKHRoaXMuXyR0cmFja0J5LmdldFZhbHVlKCkpO1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdXBkYXRlID0gdGhpcy5fJHVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFBhcmFtcz4oKTtcclxuICBwcm90ZWN0ZWQgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FeGVjdXRvciA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdUbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8SVNjcm9sbEV2ZW50PigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZSA9IHRoaXMuXyRmaXJlVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZmlyZVVwZGF0ZU5leHRGcmFtZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRmaXJlVXBkYXRlTmV4dEZyYW1lID0gdGhpcy5fJGZpcmVVcGRhdGVOZXh0RnJhbWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHByZXZlbnRTY3JvbGxTbmFwcGluZyA9IHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbFN0YXRlVXBkYXRlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX3JlYWR5Rm9yU2hvdyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY2FjaGFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJlcmVuZGVyPy5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHByZXJlbmRlcmFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgJiYgKHRoaXMuX3RyYWNrQm94Py5pc1NuYXBwZWRUb0VuZCA/PyBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSAkZGVzdHJveSA9IHRoaXMuXyRkZXN0cm95LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZTogbnVtYmVyLCBzY3JvbGxTaXplOiBudW1iZXIsIGNhY2hlVmVyc2lvbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh0b3RhbFNpemUgPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTjtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbFNpemUgPCBzY3JvbGxTaXplKSB7XHJcbiAgICAgIHRoaXMuX3Njcm9sbFN0YXRlVXBkYXRlSW5kZXggPSB0aGlzLl9zY3JvbGxTdGF0ZVVwZGF0ZUluZGV4ID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA/IDAgOiB0aGlzLl9zY3JvbGxTdGF0ZVVwZGF0ZUluZGV4ICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHt0aGlzLl9zY3JvbGxTdGF0ZVVwZGF0ZUluZGV4fV8ke3RvdGFsU2l6ZX1fJHtzY3JvbGxTaXplfV8ke2NhY2hlVmVyc2lvbn1gO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5pbml0aWFsaXplKHRoaXMuX2lkLCB0aGlzLl90cmFja0JveCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5hbmltYXRpb25QYXJhbXMgPSB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCk7XHJcblxyXG4gICAgY29uc3QgJGR5bmFtaWNTaXplID0gdGhpcy4kZHluYW1pY1NpemUsXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLiRzbmFwU2Nyb2xsVG9FbmQ7XHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9FbmRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbZHluYW1pY1NpemUsIHNuYXBTY3JvbGxUb0VuZF0pID0+IHtcclxuICAgICAgICB0aGlzLl8kcHJlcmVuZGVyRW5hYmxlZC5uZXh0KGR5bmFtaWNTaXplICYmIHNuYXBTY3JvbGxUb0VuZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR0aWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py50aWNrKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR0aWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnRpY2soKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBtYXAodiA9PiB0aGlzLmlzVmVydGljYWwpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzVmVydGljYWwubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IGhhc1VzZXJBY3Rpb24gPSBmYWxzZSwgaGFzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxlci5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxWaWV3cG9ydCk7XHJcbiAgICB0aGlzLl8kbGlzdC5uZXh0KHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxDb250ZW50KTtcclxuXHJcbiAgICBjb25zdCAkcmVzaXplVmlld3BvcnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCEuJHJlc2l6ZVZpZXdwb3J0LFxyXG4gICAgICAkcmVzaXplQ29udGVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50IS4kcmVzaXplQ29udGVudCE7XHJcblxyXG4gICAgJHJlc2l6ZVZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGJvdW5kcy5uZXh0KHYpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlc2l6ZSh0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRyZXNpemVDb250ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGxpc3RCb3VuZHMubmV4dCh2KTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZXNpemUoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR0cmFja0J5ID0gdGhpcy4kdHJhY2tCeTtcclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS50cmFja0J5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGVyLm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFZpZXdwb3J0KTtcclxuICAgIHRoaXMuXyRsaXN0Lm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbENvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChwYXJhbXMpID0+IHtcclxuICAgICAgICBjb25zdCB7IGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IgfSA9IHBhcmFtcztcclxuICAgICAgICB0aGlzLmZvY3VzSXRlbShlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRsaXN0ID0gdGhpcy4kbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgbWFwKHYgPT4gdiEubmF0aXZlRWxlbWVudCksXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHByZXZlbnRLZXlib2FyZEV2ZW50ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpc1ZlcnRpY2FsOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kc2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSwgc2Nyb2xsYWJsZSA9IHNjcm9sbGVyLnNjcm9sbGFibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQsXHJcbiAgICAgICAgICBzY3JvbGxXZWlnaHQgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGg7XHJcbiAgICAgICAgaWYgKHNjcm9sbGFibGUgfHwgc2Nyb2xsU2l6ZSA8PSBzY3JvbGxTdGFydE9mZnNldCB8fCBzY3JvbGxTaXplID49IHNjcm9sbFdlaWdodCkge1xyXG4gICAgICAgICAgaWYgKCEhZXZlbnQgJiYgZXZlbnQuY2FuY2VsYWJsZSkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlbGVtZW50ID0+ICEhZWxlbWVudCksXHJcbiAgICAgIHN3aXRjaE1hcChlbGVtZW50ID0+IHtcclxuICAgICAgICByZXR1cm4gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGVsZW1lbnQsIEVWRU5UX0tFWV9ET1dOKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcclxuICAgICAgICAgICAgICBjYXNlIEtFWV9BUlJfTEVGVDpcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXZlbnRLZXlib2FyZEV2ZW50KGUsIHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIEtFWV9BUlJfVVA6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXZlbnRLZXlib2FyZEV2ZW50KGUsIHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIEtFWV9BUlJfUklHSFQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0RPV046XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXZlbnRLZXlib2FyZEV2ZW50KGUsIHRoaXMuaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuJHNjcm9sbGJhclRoaWNrbmVzcztcclxuICAgICRzY3JvbGxiYXJUaGlja25lc3MucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcChzY3JvbGxiYXJUaGlja25lc3MgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2Nyb2xsQmFyU2l6ZSA9IHNjcm9sbGJhclRoaWNrbmVzcztcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGZpcmVVcGRhdGVOZXh0RnJhbWUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsVG9JdGVtID0gdGhpcy4kc2Nyb2xsVG8ucGlwZSh0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSksXHJcbiAgICAgICRtb3VzZURvd24gPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBNT1VTRV9ET1dOKS5waXBlKHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpKSxcclxuICAgICAgJHRvdWNoU3RhcnQgPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBUT1VDSF9TVEFSVCkucGlwZSh0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSk7XHJcblxyXG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCBLRVlfRE9XTikucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlID0+IGUua2V5ID09PSBLRVlfVEFCKSxcclxuICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVUykucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHNjcm9sbFRvSXRlbSksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJG1vdXNlRG93biksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoU3RhcnQpLFxyXG4gICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzRmlyc3RFbGVtZW50KCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9TdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TdGFydChudWxsLCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAocGFyYW1zID0+IHtcclxuICAgICAgICBjb25zdCB7IGlkLCBjYiwgb3B0aW9ucyB9ID0gcGFyYW1zITtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKGlkLCBjYiwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUb0VuZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9FbmQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kbGFuZ1RleHREaXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmxhbmdUZXh0RGlyID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5jbGlja0Rpc3RhbmNlID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVyZW5kZXJDb250YWluZXIgPSBvZih0aGlzLl9wcmVyZW5kZXIpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVyZW5kZXIgPSAkcHJlcmVuZGVyQ29udGFpbmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB2IS4kcmVuZGVyKSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgJGZpcmVVcGRhdGUgPSB0aGlzLiRmaXJlVXBkYXRlO1xyXG4gICAgJGZpcmVVcGRhdGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICBoYXNVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR1cGRhdGUgPSB0aGlzLiR1cGRhdGUsXHJcbiAgICAgIHJlbmRlclN0YWJpbGl6ZXIgPSAob3B0aW9ucz86IElSZW5kZXJTdGFiaWxpemVyT3B0aW9ucykgPT4ge1xyXG4gICAgICAgIGxldCByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IEVNUFRZX1NDUk9MTF9TVEFURV9WRVJTSU9OLFxyXG4gICAgICAgICAgcmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPSAwO1xyXG4gICAgICAgIGNvbnN0IHByZXBhcmVJdGVyYXRpb25zID0gb3B0aW9ucz8ucHJlcGFyZUl0ZXJhdGlvbnMgPz8gUFJFUEFSRV9JVEVSQVRJT05TLFxyXG4gICAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoID0gb3B0aW9ucz8ucHJlcGFyZVJldXBkYXRlTGVuZ3RoID8/IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSDtcclxuICAgICAgICByZXR1cm4gb2YobnVsbCkucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTjtcclxuICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuICR1cGRhdGUucGlwZShcclxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9PT0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04pIHx8IChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiAhPT0gdikpICYmXHJcbiAgICAgICAgICAgICAgICAgIChyZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucyA8IHByZXBhcmVJdGVyYXRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodiAhPT0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPT09IHYpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zIDwgcHJlcGFyZVJldXBkYXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMrKztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApXHJcbiAgICAgIH07XHJcbiAgICBjb25zdCAkaW5pdGlhbFJlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEgsXHJcbiAgICB9KSxcclxuICAgICAgJHVwZGF0ZUl0ZW1zUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGNodW5rTG9hZGluZ1JlbmRlclN0YWJpbGl6ZXIgPSByZW5kZXJTdGFiaWxpemVyKHtcclxuICAgICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgfSksXHJcbiAgICAgICRjb2xsYXBzZUl0ZW1zUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9DT0xMQVBTRV9JVEVNUyxcclxuICAgICAgfSksXHJcbiAgICAgICRpdGVtcyA9IHRoaXMuJGl0ZW1zLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJHNuYXBTY3JvbGxUb1N0YXJ0ID0gdGhpcy4kc25hcFNjcm9sbFRvU3RhcnQsXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLiRzbmFwU2Nyb2xsVG9FbmQsXHJcbiAgICAgICR3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLiR3YWl0Rm9yUHJlcGFyYXRpb247XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHByZXJlbmRlckNvbnRhaW5lciwgJGR5bmFtaWNTaXplLCAkc25hcFNjcm9sbFRvU3RhcnQsICRzbmFwU2Nyb2xsVG9FbmQsICR3YWl0Rm9yUHJlcGFyYXRpb25dKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbcHJlcmVuZGVyQ29udGFpbmVyXSkgPT4gISFwcmVyZW5kZXJDb250YWluZXIpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHN3aXRjaE1hcCgoW3ByZXJlbmRlckNvbnRhaW5lciwgZHluYW1pY1NpemUsIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIHdhaXRGb3JQcmVwYXJhdGlvbl0pID0+IHtcclxuICAgICAgICBpZiAoISFkeW5hbWljU2l6ZSAmJiAhc25hcFNjcm9sbFRvU3RhcnQgJiYgISFzbmFwU2Nyb2xsVG9FbmQgJiYgISF3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiAkaXRlbXMucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcExlbmd0aCA9IHA/Lmxlbmd0aCA/PyAwLCBjTGVuZ3RoID0gYz8ubGVuZ3RoID8/IDA7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEoKGNMZW5ndGggPiAwKSB8fCAocExlbmd0aCAhPT0gY0xlbmd0aCAmJiAocExlbmd0aCA9PT0gMCB8fCBjTGVuZ3RoID09PSAwKSkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGFwKGl0ZW1zID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZXNldENvbGxlY3Rpb24oaXRlbXMsIHRoaXMuaXRlbVNpemUpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGkgPT4gb2YoKGkgPz8gW10pLmxlbmd0aCA+IDApKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghdikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Rm9yU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLndhaXRGb3JQcmVwYXJhdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCF2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub2ZmKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9yUHJlcGFyYXRpb24gPSB0aGlzLndhaXRGb3JQcmVwYXJhdGlvbjtcclxuICAgICAgICAgICAgICBpZiAod2FpdEZvclByZXBhcmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICRpbml0aWFsUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl8kY2xhc3Nlcy5uZXh0KHsgcHJlcGFyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJHNob3cubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9mZigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgIHJldHVybiAkaXRlbXMucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZXNldENvbGxlY3Rpb24oaXRlbXMsIHRoaXMuaXRlbVNpemUpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGkgPT4gb2YoKGkgPz8gW10pLmxlbmd0aCA+IDApKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXRlbXMucGlwZShcclxuICAgICAgbWFwKHYgPT4gdj8ubGVuZ3RoID4gMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKGNhY2hlID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZWZyZXNoQ2FjaGUoY2FjaGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzZWRJZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYgPz8gbnVsbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KSxcclxuICAgICAgdGFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLiRkZWZhdWx0SXRlbVZhbHVlLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRoaXMuJHNlbGVjdEJ5Q2xpY2ssXHJcbiAgICAgICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLiRjb2xsYXBzZUJ5Q2xpY2ssXHJcbiAgICAgICRpc1Njcm9sbFN0YXJ0ID0gdGhpcy5fJGlzU2Nyb2xsU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpc1Njcm9sbEVuZCA9IHRoaXMuXyRpc1Njcm9sbEVuZC5hc09ic2VydmFibGUoKSxcclxuICAgICAgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy4kc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRzY3JvbGxFbmRPZmZzZXQsXHJcbiAgICAgICRpc1ZlcnRpY2FsID0gdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1ZlcnRpY2FsKHYgfHwgREVGQVVMVF9ESVJFQ1RJT04pKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAkc25hcFNjcm9sbFRvU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNuYXBTY3JvbGxUb1N0YXJ0ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwU2Nyb2xsVG9FbmQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNuYXBTY3JvbGxUb0VuZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuaXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmR5bmFtaWMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRlZmF1bHRJdGVtVmFsdWUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmRlZmF1bHRJdGVtVmFsdWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFN0YXJ0T2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl9zZXJ2aWNlLnNjcm9sbEVuZE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNTY3JvbGxTdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc2tpcCgxKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYgJiYgdGhpcy5fcmVhZHlGb3JTaG93KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaFN0YXJ0LmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNTY3JvbGxFbmQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuJGJvdW5kcy5waXBlKFxyXG4gICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgKSxcclxuICAgICAgJGxpc3RCb3VuZHMgPSB0aGlzLl8kbGlzdEJvdW5kcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICAgICksICRzY3JvbGxTaXplID0gdGhpcy4kc2Nyb2xsU2l6ZSxcclxuICAgICAgJGl0ZW1TaXplID0gdGhpcy4kaXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtQ29uZmlnTWFwID0gdGhpcy4kaXRlbUNvbmZpZ01hcC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+ICF2ID8ge30gOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJHNuYXAgPSB0aGlzLiRzbmFwLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRtZXRob2RGb3JTZWxlY3RpbmcgPSB0aGlzLiRtZXRob2RGb3JTZWxlY3RpbmcsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzZWRJdGVtSWRzID0gdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGFjdHVhbEl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JlZW5SZWFkZXJNZXNzYWdlID0gdGhpcy4kc2NyZWVuUmVhZGVyTWVzc2FnZSxcclxuICAgICAgJGRpc3BsYXlJdGVtcyA9IHRoaXMuX3NlcnZpY2UuJGRpc3BsYXlJdGVtcyxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuX3NlcnZpY2UuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZGlzcGxheUl0ZW1zLCAkc2NyZWVuUmVhZGVyTWVzc2FnZSwgJGlzVmVydGljYWwsICRzY3JvbGxTaXplLCAkYm91bmRzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbaXRlbXMsIHNjcmVlblJlYWRlck1lc3NhZ2UsIGlzVmVydGljYWwsIHNjcm9sbFNpemUsIGJvdW5kc10pID0+IHtcclxuICAgICAgICB0aGlzLl8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZS5uZXh0KFxyXG4gICAgICAgICAgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZShpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzISlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzTGF6eS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzTGF6eSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbXNDb21wb3NpdGlvbiA9ICRpdGVtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcclxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbJGNvbGxhcHNlZEl0ZW1JZHMsICRpdGVtQ29uZmlnTWFwLCAkdHJhY2tCeV0pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoW2NvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeV0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICAkaXRlbXNDb21wb3NpdGlvbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnkgfSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAhKHRoaXMuY2FjaGFibGUgJiYgIXRoaXMuX2NhY2hlZCAmJlxyXG4gICAgICAgICAgIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJHVwZGF0ZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGlkZGVuSXRlbXMgPSBuZXcgQ01hcDxJZCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldLCBncm91cCA9IChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDApID4gMCwgY29sbGFwc2VkID0gY29sbGFwc2VkSWRzLmluY2x1ZGVzKGlkKTtcclxuICAgICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnNldChpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbEl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKGhpZGRlbkl0ZW1zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY3R1YWxJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1zLm5leHQoYWN0dWFsSXRlbXMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdiA/IENMQVNTX0xJU1RfSE9SSVpPTlRBTCA6IENMQVNTX0xJU1RfVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5fdHJhY2tCb3guaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRtZXRob2RGb3JTZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuXyRsaXN0LmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBST0xFX0xJU1RfQk9YKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UubWV0aG9kT2ZTZWxlY3RpbmcgPSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTVVMVElfU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1NpbmdsZVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNOb3RTZWxlY3RpbmcgPSB0aGlzLl9pc011bHRpU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBST0xFX0xJU1RfQk9YKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UubWV0aG9kT2ZTZWxlY3RpbmcgPSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc05vdFNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNOb3RTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3RpbmcgPSB0aGlzLl9pc011bHRpU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBST0xFX0xJU1QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSB0aGlzLiRwcmV2ZW50U2Nyb2xsU25hcHBpbmc7XHJcblxyXG4gICAgJHByZXZlbnRTY3JvbGxTbmFwcGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSXRlbUlkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRjb2xsYXBzZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcblxyXG4gICAgbGV0IGlzQ2h1bmtMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCAkbG9hZGluZyA9IHRoaXMuJGxvYWRpbmc7XHJcbiAgICAkbG9hZGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc2tpcCgxKSxcclxuICAgICAgZmlsdGVyKHYgPT4gIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIGlzQ2h1bmtMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBzY3JvbGxiYXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoISFzY3JvbGxiYXIpIHtcclxuICAgICAgICAgIHNjcm9sbGJhci5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICBzY3JvbGxiYXIucmVmcmVzaFNjcm9sbGJhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJGFjdHVhbEl0ZW1zLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZU5leHRGcmFtZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gJGNodW5rTG9hZGluZ1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaXNDaHVua0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZXNldENhY2hlQ2h1bmtJbmZvKCk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYmFyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxiYXIuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsYmFyLnJlZnJlc2hTY3JvbGxiYXIoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuXHJcbiAgICAkbG9hZGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc2tpcCgxKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGUgPSAocGFyYW1zOiB7XHJcbiAgICAgIHNuYXBTY3JvbGxUb1N0YXJ0OiBib29sZWFuLCBzbmFwU2Nyb2xsVG9FbmQ6IGJvb2xlYW47IGJvdW5kczogSVNpemU7IGxpc3RCb3VuZHM6IElTaXplOyBzY3JvbGxFbmRPZmZzZXQ6IG51bWJlcjtcclxuICAgICAgaXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb248T2JqZWN0PjsgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcDsgc2Nyb2xsU2l6ZTogbnVtYmVyOyBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgICBidWZmZXJTaXplOiBudW1iZXI7IG1heEJ1ZmZlclNpemU6IG51bWJlcjsgc25hcDogYm9vbGVhbjsgaXNWZXJ0aWNhbDogYm9vbGVhbjsgZHluYW1pY1NpemU6IGJvb2xlYW47XHJcbiAgICAgIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IGJvb2xlYW47IGNhY2hlVmVyc2lvbjogbnVtYmVyOyB1c2VyQWN0aW9uOiBib29sZWFuOyBjb2xsYXBzZWRJZHM6IEFycmF5PElkPjtcclxuICAgIH0sIG9wdGltaXphdGlvbjogYm9vbGVhbiA9IGZhbHNlLCByZXVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHMsIGxpc3RCb3VuZHMsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLFxyXG4gICAgICAgIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sIHVzZXJBY3Rpb24sIGNvbGxhcHNlZElkcyxcclxuICAgICAgfSA9IHBhcmFtcztcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XHJcbiAgICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IGNvbGxhcHNhYmxlID0gY29sbGFwc2VkSWRzLmxlbmd0aCA+IDAsIGNhY2hhYmxlID0gdGhpcy5jYWNoYWJsZSwgY2FjaGVkID0gdGhpcy5fY2FjaGVkLCB3YWl0aW5nQ2FjaGUgPSBjYWNoYWJsZSAmJiAhY2FjaGVkLFxyXG4gICAgICAgICAgZW1pdFVwZGF0ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgd2FpdGluZ0NhY2hlIHx8IGNvbGxhcHNhYmxlIHx8IGlzQ2h1bmtMb2FkaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgfHwgKGNhY2hhYmxlICYmIGNhY2hlZCkpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbExlZnQgPz8gMCksXHJcbiAgICAgICAgICAgIGZpcmVVcGRhdGUgPSBlbWl0VXBkYXRlIHx8IHJldXBkYXRlIHx8ICghb3B0aW1pemF0aW9uICYmICF1c2VyQWN0aW9uKSB8fCB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gIXRoaXMuX3JlYWR5Rm9yU2hvdyAmJiBzbmFwU2Nyb2xsVG9FbmQgPyAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPz8gMCkgOlxyXG4gICAgICAgICAgICAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCA/PyAwKSxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzLCB2aWV3cG9ydFNpemUgPSAoaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoKSxcclxuICAgICAgICAgICAgb3B0czogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgICBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBzbmFwLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9FbmQgJiYgIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSB9ID1cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUgfSk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemUxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXM6IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogY2FsY3VsYXRlZFRvdGFsU2l6ZSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgb3B0cyk7XHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIudG90YWxTaXplID0gdG90YWxTaXplO1xyXG5cclxuICAgICAgICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCh0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgICBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gTWF0aC5yb3VuZChhY3R1YWxTY3JvbGxTaXplICsgZGVsdGEpLFxyXG4gICAgICAgICAgICByb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA9IE1hdGgucm91bmQoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSksXHJcbiAgICAgICAgICAgIHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlID0gTWF0aC5yb3VuZCh0b3RhbFNpemUgLSB2aWV3cG9ydFNpemUpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzY3JvbGxlci5kZWx0YSA9IGRlbHRhO1xyXG5cclxuICAgICAgICAgIGlmICgoc25hcFNjcm9sbFRvU3RhcnQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCkgfHxcclxuICAgICAgICAgICAgKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIGN1cnJlbnRTY3JvbGxTaXplIDw9IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2Nyb2xsU2l6ZSAhPT0gcm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IDAsIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBmaXJlVXBkYXRlOiB0cnVlLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgICAgICAgICAgIGJsZW5kaW5nOiBmYWxzZSwgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyR1cGRhdGUubmV4dCh0aGlzLmdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LCBjYWNoZVZlcnNpb24pKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICgoc25hcFNjcm9sbFRvRW5kICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB8fCAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCAmJiAhc2Nyb2xsZXIuc2Nyb2xsYWJsZSkgfHxcclxuICAgICAgICAgICAgKHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgKyBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HID49IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlKSB8fFxyXG4gICAgICAgICAgICAocm91bmRlZFNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPj0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSArIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlLFxyXG4gICAgICAgICAgICAgIGZpcmVVcGRhdGU6IHRydWUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCB1c2VyQWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICBibGVuZGluZzogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KHRoaXMuZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQsIGNhY2hlVmVyc2lvbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPT0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSAmJlxyXG4gICAgICAgICAgICAoKHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPj0gMCAmJiBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlIDwgcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUpIHx8XHJcbiAgICAgICAgICAgICAgKHNjcm9sbFNpemUgIT09IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlIHx8IGN1cnJlbnRTY3JvbGxTaXplICE9PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCB1c2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUsIGJsZW5kaW5nOiB0cnVlLCB1c2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgIGZpcmVVcGRhdGUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25QYXJhbXMuc2Nyb2xsVG9JdGVtLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyR1cGRhdGUubmV4dCh0aGlzLmdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LCBjYWNoZVZlcnNpb24pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQodGhpcy5nZXRTY3JvbGxTdGF0ZVZlcnNpb24odG90YWxTaXplLCB0aGlzLl9pc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgY2FjaGVWZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBwcmV2SXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZSA9IGRlYm91bmNlKHVwZGF0ZSwgMCwgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpO1xyXG4gICAgY29tYmluZUxhdGVzdChbJHNuYXBTY3JvbGxUb1N0YXJ0LCAkc25hcFNjcm9sbFRvRW5kLCAkYm91bmRzLCAkbGlzdEJvdW5kcywgJHNjcm9sbEVuZE9mZnNldCwgJGFjdHVhbEl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHNjcm9sbFNpemUsICRpdGVtU2l6ZSxcclxuICAgICAgJGNvbGxhcHNlZEl0ZW1JZHMsICRidWZmZXJTaXplLCAkbWF4QnVmZmVyU2l6ZSwgJHNuYXAsICRpc1ZlcnRpY2FsLCAkZHluYW1pY1NpemUsICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCAkY2FjaGVWZXJzaW9uLCB0aGlzLiRmaXJlVXBkYXRlLFxyXG4gICAgXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW1xyXG4gICAgICAgIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kcywgbGlzdEJvdW5kcywgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzbmFwLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgY2FjaGVWZXJzaW9uLFxyXG4gICAgICBdKSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW1zQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChwcmV2SXRlbXMgIT09IGl0ZW1zKSB7XHJcbiAgICAgICAgICBpdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcHJldkl0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbmFibGVkT3B0aW1pemF0aW9uID0gdGhpcy5zY3JvbGxpbmdTZXR0aW5ncz8ub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgICAgICAgIHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQsIHZlbG9jaXR5ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LmF2ZXJhZ2VWZWxvY2l0eSA/PyAwLFxyXG4gICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyAoc2Nyb2xsZXI/LnNjcm9sbEhlaWdodCB8fCAwKSA6IChzY3JvbGxlcj8uc2Nyb2xsV2lkdGggPz8gMCksXHJcbiAgICAgICAgICBpc0VkZ2VzID0gc2Nyb2xsU2l6ZSA9PT0gMCB8fCBzY3JvbGxTaXplID09PSBtYXhTY3JvbGxTaXplLCBpc1Njcm9sbGluZyA9IHRoaXMuXyRzY3JvbGxpbmdUby5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgdXNlRGVib3VuY2VkVXBkYXRlID0gZHluYW1pY1NpemUgJiYgIWl0ZW1zQ2hhbmdlZCAmJiBoYXNVc2VyQWN0aW9uICYmICFpc1Njcm9sbGluZyAmJiAodmVsb2NpdHkgPiAwICYmIHZlbG9jaXR5IDwgTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSksXHJcbiAgICAgICAgICByZXJlbmRlck9wdGltaXphdGlvbiA9IGVuYWJsZWRPcHRpbWl6YXRpb24gJiYgZHluYW1pY1NpemUgJiYgIWl0ZW1zQ2hhbmdlZCAmJiAoaGFzVXNlckFjdGlvbiB8fCBoYXNTY3JvbGxiYXJVc2VyQWN0aW9uKSAmJiAhaXNFZGdlcyAmJiB2ZWxvY2l0eSA+IDAgJiZcclxuICAgICAgICAgICAgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMiB8fCBoYXNVc2VyQWN0aW9uKTtcclxuICAgICAgICBpZiAoZW5hYmxlZE9wdGltaXphdGlvbikge1xyXG4gICAgICAgICAgaWYgKHVzZURlYm91bmNlZFVwZGF0ZSkge1xyXG4gICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZXhlY3V0ZSh7XHJcbiAgICAgICAgICAgICAgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgY29sbGFwc2VkSWRzLFxyXG4gICAgICAgICAgICAgIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sIHVzZXJBY3Rpb246IGhhc1VzZXJBY3Rpb24sXHJcbiAgICAgICAgICAgIH0sIHJlcmVuZGVyT3B0aW1pemF0aW9uLCBpdGVtc0NoYW5nZWQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNTY3JvbGxpbmcpIHtcclxuICAgICAgICAgIHVwZGF0ZSh7XHJcbiAgICAgICAgICAgIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLCBjb2xsYXBzZWRJZHMsXHJcbiAgICAgICAgICAgIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sIHVzZXJBY3Rpb246IGhhc1VzZXJBY3Rpb24sXHJcbiAgICAgICAgICB9LCByZXJlbmRlck9wdGltaXphdGlvbiwgaXRlbXNDaGFuZ2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsZXIgPSB0aGlzLiRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgbWFwKHYgPT4gdiEubmF0aXZlRWxlbWVudCksXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJTY3JvbGwgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCEuJHNjcm9sbCxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsRW5kID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQhLiRzY3JvbGxFbmQsXHJcbiAgICAgICRzY3JvbGxiYXJTY3JvbGwgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCEuJHNjcm9sbGJhclNjcm9sbDtcclxuXHJcbiAgICBjb25zdCBzY3JvbGxIYW5kbGVyID0gKHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICBpZiAodXNlckFjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGJhclNjcm9sbC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGhhc1Njcm9sbGJhclVzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgaGFzVXNlckFjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHtcclxuICAgICAgICByZXR1cm4gJHNjcm9sbGVyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHVzZXJBY3Rpb24gPT4ge1xyXG4gICAgICAgIGhhc1VzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoc2Nyb2xsZXJFbCAmJiBzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbEVuZC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICBoYXNVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHNjcm9sbGVyRWwgJiYgc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsVG8gPSB0aGlzLiRzY3JvbGxUbyxcclxuICAgICAgJHNjcm9sbFRvRXhlY3V0b3IgPSB0aGlzLiRzY3JvbGxUb0V4ZWN1dG9yO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzY3JvbGxlciwgJHRyYWNrQnksICRzY3JvbGxUb10pLnBpcGUoXHJcbiAgICAgIGZpbHRlcigoW3Njcm9sbGVyXSkgPT4gc2Nyb2xsZXIgIT09IHVuZGVmaW5lZCksXHJcbiAgICAgIG1hcCgoW3Njcm9sbGVyLCB0cmFja0J5LCBldmVudF0pID0+ICh7IHNjcm9sbGVyOiBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkpLFxyXG4gICAgICB0YXAoKHsgZXZlbnQgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxpbmdUby5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQoZXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbFRvRXhlY3V0b3IucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcChldmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQsIGl0ZXJhdGlvbiA9IDAsIGJsZW5kaW5nID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlLCBzY3JvbGxDYWxsZWQgPSBmYWxzZSwgY2IsXHJcbiAgICAgICAgICB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9IGl0ZXJhdGlvbiArIDEsIGZpbmlzaGVkID0gbmV4dEl0ZXJhdGlvbiA+PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGZpcmVVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZywgc2Nyb2xsQ2FsbGVkLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZSwgc25hcFNjcm9sbFRvRW5kID0gdGhpcy5zbmFwU2Nyb2xsVG9FbmQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLFxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2Nyb2xsU2l6ZSA9IHNuYXBTY3JvbGxUb0VuZCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCA/XHJcbiAgICAgICAgICAgICAgICAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFdpZHRoKSA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgICAgICB9KSwgZGVsdGExID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnRvdGFsU2l6ZSA9IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlkIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgc2Nyb2xsQ2FsbGVkLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vdENoYW5nZWQgPSBzY3JvbGxTaXplID09PSBjdXJyZW50U2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgJiYgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcixcclxuICAgICAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmxlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHtcclxuICAgICAgICAgICAgICAgICAgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgc2Nyb2xsQ2FsbGVkLCBjYlxyXG4gICAgICAgICAgICAgICAgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBzY3JvbGxDYWxsZWQsIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RyYWNrQnldID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW50U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgPSBpbmRleCAqIHRoaXMuaXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGZpcmVVcGRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IsIGJsZW5kaW5nLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIHNjcm9sbENhbGxlZCwgY2IgfV0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2ZpbmlzaGVkLCBwYXJhbXNdKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyYW1zID0gcGFyYW1zIGFzIElTY3JvbGxQYXJhbXMgJiB7IHNjcm9sbENhbGxlZDogYm9vbGVhbjsgfTtcclxuICAgICAgICBpZiAoIWZpbmlzaGVkICYmICFzY3JvbGxQYXJhbXM/LnNjcm9sbENhbGxlZCkge1xyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IubmV4dChwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsaW5nVG8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnJlZnJlc2goZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgc2Nyb2xsUGFyYW1zPy5jYj8uKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbVJlbmRlcmVyID0gdGhpcy4kaXRlbVJlbmRlcmVyO1xyXG5cclxuICAgICRpdGVtUmVuZGVyZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYm91bmRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAoYm91bmRzID0+IHtcclxuICAgICAgICBjb25zdCBzaXplOiBJU2l6ZSA9IHsgd2lkdGg6IGJvdW5kcyEud2lkdGggPz8gMCwgaGVpZ2h0OiBib3VuZHMhLmhlaWdodCA/PyAwIH07XHJcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seShzaXplKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRpdGVtQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVTZWxlY3RpbmcgfHwgKHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0ZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQgPj0gMikge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuY29sbGFwc2VkSWRzO1xyXG4gICAgICAgICAgaWYgKChpc0NvbGxhcHNlZElkc0ZpcnN0RW1pdCA9PT0gMiAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNDb2xsYXBzZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kZGVzdHJveS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQWZ0ZXJSZXNpemUodXBkYXRlID0gZmFsc2UpIHtcclxuICAgIHRoaXMuc25hcHBpbmdIYW5kbGVyKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgJiYgdXBkYXRlKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlYmFsZSA9IHRoaXMuX3JlYWR5Rm9yU2hvdztcclxuICAgICAgICBpZiAodXBkYXRlYmFsZSkge1xyXG4gICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbGVyLnJlZnJlc2godXBkYXRlYmFsZSwgdXBkYXRlYmFsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCkge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3RyYWNrQm94LmNoZWNrQm91bmRzT2ZFbGVtZW50cygpO1xyXG4gICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgY29uc3QgcmVhZHlGb3JTaG93ID0gdGhpcy5fcmVhZHlGb3JTaG93LFxyXG4gICAgICAgIGlzU2Nyb2xsaW5nID0gdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXModHJ1ZSwgcmVhZHlGb3JTaG93ICYmICFpc1Njcm9sbGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNuYXBwaW5nSGFuZGxlcigpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgIG1heFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoID8/IDApLFxyXG4gICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wID8/IDAgOiBzY3JvbGxlci5zY3JvbGxMZWZ0ID8/IDAsXHJcbiAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoc2Nyb2xsU2l6ZSk7XHJcbiAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgJiYgIXRoaXMuX2lzTG9hZGluZykge1xyXG4gICAgICAgIGlmIChtYXhTY3JvbGxTaXplID49IDApIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKTtcclxuICAgICAgICAgIGlmIChpc1Njcm9sbFN0YXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpc1Njcm9sbEVuZCA9IChhY3R1YWxTY3JvbGxTaXplID49IChtYXhTY3JvbGxTaXplIC0gTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpO1xyXG4gICAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoaXNTY3JvbGxFbmQpO1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICBjb25zdCBzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuc25hcFNjcm9sbFRvRW5kO1xyXG4gICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBlbWl0U2Nyb2xsRXZlbnQoaXNTY3JvbGxFbmQ6IGJvb2xlYW4gPSBmYWxzZSwgdXBkYXRlOiBib29sZWFuID0gdHJ1ZSwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXJFbCAmJiBzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsV2lkdGgpLFxyXG4gICAgICAgIGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHg6IDAsIHk6IDAsIHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgIGN1cnJlbnRTY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSBjdXJyZW50U2Nyb2xsU2l6ZSA+IHNjcm9sbFNpemUgPyAtMSA6IGN1cnJlbnRTY3JvbGxTaXplIDwgc2Nyb2xsU2l6ZSA/IDEgOiAwO1xyXG4gICAgICBjb25zdCBpdGVtc1JhbmdlID0gZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zKHRoaXMuX3NlcnZpY2UuZGlzcGxheUl0ZW1zLCB0aGlzLnNjcm9sbFN0YXJ0T2Zmc2V0LCB0aGlzLnNjcm9sbEVuZE9mZnNldCxcclxuICAgICAgICBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMpLFxyXG4gICAgICAgIGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uLCBjb250YWluZXI6IHNjcm9sbGVyRWwsXHJcbiAgICAgICAgICBsaXN0OiB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpIS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICBkZWx0YU9mTmV3SXRlbXM6IHRoaXMuX3RyYWNrQm94LmRlbHRhT2ZOZXdJdGVtcywgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICBpdGVtc1JhbmdlLFxyXG4gICAgICAgICAgaXNFbmQ6ICFzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxhYmxlIHx8IHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kIHx8IChNYXRoLnJvdW5kKHNjcm9sbFNpemUpID09PSBNYXRoLnJvdW5kKG1heFNjcm9sbFNpemUpKSxcclxuICAgICAgICAgIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLnNuYXBwaW5nTWV0aG9kO1xyXG4gICAgcmV0dXJuIGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZChtZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc05vdFNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5OT05FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTaW5nbGVTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZztcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNNdWx0aVNlbGVjdGluZyhtPzogTWV0aG9kRm9yU2VsZWN0aW5nKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMubWV0aG9kRm9yU2VsZWN0aW5nO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5NVUxUSV9TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1ZlcnRpY2FsKGQ/OiBEaXJlY3Rpb24pIHtcclxuICAgIGNvbnN0IGRpciA9IGQgfHwgdGhpcy5kaXJlY3Rpb247XHJcbiAgICByZXR1cm4gaXNEaXJlY3Rpb24oZGlyLCBEaXJlY3Rpb25zLlZFUlRJQ0FMKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNMYXp5KG0/OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxlY3Rpb25Nb2RlKG1vZGUsIENvbGxlY3Rpb25Nb2Rlcy5MQVpZKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgaWYgKCFkaXNwbGF5SXRlbXMgfHwgIXRoaXMuX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh7fSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCkge1xyXG4gICAgICBpZiAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA8IE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA8IE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLml0ZW1SZW5kZXJlcjtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cztcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcik7XHJcbiAgICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94Lml0ZW1zID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgIGNvbnN0IGxpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBpZiAoISFsaXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGRvTWFwOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICBmb3IgKGxldCBsID0gY29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gY29tcG9uZW50c1tpXTtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmluc3RhbmNlLmlkO1xyXG4gICAgICAgICAgaXRlbS5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgICAgICAgZG9NYXBbaWRdID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKGNvbXBvbmVudHMubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IGxpc3RDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29uc3QgaWQgPSBjb21wLmluc3RhbmNlLmlkO1xyXG4gICAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLml0ZW1SZW5kZXJlcjtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBwcm9wID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgIHNpemUgPSB0b3RhbFNpemU7XHJcbiAgICBpZiAobCAmJiBwYXJzZUludChsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0pICE9PSBzaXplKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSA9IGAke3NpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1cyhpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNCeUlkKGlkLCBhbGlnbiwgdGhpcy5zY3JvbGxCZWhhdmlvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICghdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9TdGFydChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGl0ZW1zID0gdGhpcy5pdGVtcywgZmlyc3RJdGVtID0gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zWzBdID8/IG51bGwgOiBudWxsLCBpZCA9IGZpcnN0SXRlbT8uW3RyYWNrQnldID8/IG51bGwsXHJcbiAgICAgIGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBpZiAoISFmaXJzdEl0ZW0pIHtcclxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICBpZCwgYmVoYXZpb3IsIGJsZW5kaW5nLCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmRJdGVtKGNiPzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSAob3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCkgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXSwgaWQgPSBsYXRJdGVtW3RyYWNrQnldLFxyXG4gICAgICBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICBpZiAoIXRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvRmluYWxpemUoaWQ6IElkLCBmb2N1c2VkOiBib29sZWFuLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgRm9jdXNBbGlnbm1lbnRzLk5PTkUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNiPy4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjbGVhbnVwKCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcbiAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcbiAgICB0aGlzLnRyYWNraW5nKCk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgY2xlYXJpbmcgdGhlIGNhY2hlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYWNoZUNsZWFuKCkge1xyXG4gICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5keW5hbWljU2l6ZSkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jYWNoZUNsZWFuKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVyZW5kZXJDb250YWluZXIgPSB0aGlzLl9wcmVyZW5kZXI7XHJcbiAgICBpZiAoISFwcmVyZW5kZXJDb250YWluZXIpIHtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIHByZXJlbmRlckNvbnRhaW5lci5vZmYoKTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCgwKTtcclxuICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoMCk7XHJcbiAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBwcmV2ZW50U25hcHBpbmcgbWV0aG9kLlxyXG4gICAqL1xyXG4gIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kKCkge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1RoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBwcmV2ZW50U25hcHBpbmcgbWV0aG9kLicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJldmVudHMgdGhlIGxpc3QgZnJvbSBzbmFwcGluZyB0byBpdHMgc3RhcnQgb3IgZW5kIGVkZ2UuXHJcbiAgICovXHJcbiAgcHJldmVudFNuYXBwaW5nKCkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgaWYgKHNjcm9sbGVyKSB7XHJcbiAgICAgIHNjcm9sbGVyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLl8kZGVzdHJveS5uZXh0KCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlSWQgPSB0aGlzLl91cGRhdGVJZDtcclxuICAgIGlmICh1cGRhdGVJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUlkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5fc2VydmljZS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fdHJhY2tCb3gpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cIm5ndmxfX3NjcmVlbi1yZWFkZXJcIj5cclxuICB7eyAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSB8IGFzeW5jIH19XHJcbjwvZGl2PlxyXG5cclxuPG5nLXByZXJlbmRlci1jb250YWluZXIgI3ByZXJlbmRlciBbYm91bmRzXT1cIigkYm91bmRzIHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZHluYW1pY109XCIoJGR5bmFtaWNTaXplIHwgYXN5bmMpIVwiIFtpc1ZlcnRpY2FsXT1cIigkaXNWZXJ0aWNhbCB8IGFzeW5jKSFcIlxyXG4gIFtpdGVtU2l6ZV09XCIoJGl0ZW1TaXplIHwgYXN5bmMpIVwiIFt0cmFja0J5XT1cIigkdHJhY2tCeSB8IGFzeW5jKSFcIiBbaXRlbVJlbmRlcmVyXT1cIigkaXRlbVJlbmRlcmVyIHwgYXN5bmMpIVwiXHJcbiAgW3N0YXJ0T2Zmc2V0XT1cIigkc2Nyb2xsU3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2VuZE9mZnNldF09XCIoJHNjcm9sbEVuZE9mZnNldCB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJFbmFibGVkXT1cIihzY3JvbGxlci4kc2Nyb2xsYmFyU2hvdyB8IGFzeW5jKSFcIlxyXG4gIFtlbmFibGVkXT1cIigkcHJlcmVuZGVyRW5hYmxlZCB8IGFzeW5jKSFcIj48L25nLXByZXJlbmRlci1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiJHNuYXAgfCBhc3luY1wiPlxyXG4gIDxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiICNzbmFwcGVkQ29udGFpbmVyIGNsYXNzPVwibmd2bF9fc25hcHBlZC1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgPGRpdiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctc2Nyb2xsZXIgY2xhc3M9XCJuZ3ZsX19saXN0LXNjcm9sbGVyXCIgI3Njcm9sbGVyIFtjbGFzc2VzXT1cIigkY2xhc3NlcyB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHNjcm9sbFN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZW5kT2Zmc2V0XT1cIigkc2Nyb2xsRW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJUaHVtYlJlbmRlcmVyXT1cIigkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJUaGlja25lc3NdPVwiKCRzY3JvbGxiYXJUaGlja25lc3MgfCBhc3luYykhXCIgW3Njcm9sbGJhclRodW1iUGFyYW1zXT1cIigkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgfCBhc3luYylcIlxyXG4gIFtmb2N1c2VkRWxlbWVudF09XCIoJGZvY3VzZWRFbGVtZW50IHwgYXN5bmMpIVwiIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIlxyXG4gIFtvdmVyc2Nyb2xsRW5hYmxlZF09XCIoJG92ZXJzY3JvbGxFbmFibGVkIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJFbmFibGVkXT1cIigkc2Nyb2xsYmFyRW5hYmxlZCB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJJbnRlcmFjdGl2ZV09XCIoJHNjcm9sbGJhckludGVyYWN0aXZlIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJNaW5TaXplXT1cIigkc2Nyb2xsYmFyTWluU2l6ZSB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxCZWhhdmlvcl09XCIoJHNjcm9sbEJlaGF2aW9yIHwgYXN5bmMpIVwiIFtzY3JvbGxpbmdTZXR0aW5nc109XCIoJHNjcm9sbGluZ1NldHRpbmdzIHwgYXN5bmMpIVwiPlxyXG4gIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1zY3JvbGxlcj4iXX0=