@vcd/sdk 15.0.5 → 15.0.6

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.
@@ -77,6 +77,10 @@ export interface AuthTokenHolderService {
77
77
  * The authentication token.
78
78
  */
79
79
  token: string;
80
+ /**
81
+ * JWT token
82
+ */
83
+ jwt?: string;
80
84
  }
81
85
  export declare const AuthTokenHolderService: {
82
86
  token: string;
@@ -3,7 +3,7 @@ import { HttpHeaders } from '@angular/common/http';
3
3
  import { BehaviorSubject, merge, of, ReplaySubject, throwError } from 'rxjs';
4
4
  import { catchError, concatMap, filter, map, share, skipWhile, switchMap, tap, withLatestFrom } from 'rxjs/operators';
5
5
  import { TaskType } from '@vcd/bindings/vcloud/api/rest/schema_v1_5';
6
- import { API_ROOT_URL, AuthTokenHolderService, SESSION_ORG_ID, SESSION_SCOPE } from '../container-hooks';
6
+ import { API_ROOT_URL, AuthTokenHolderService, SESSION_ORG_ID, SESSION_SCOPE } from '../../common/container-hooks';
7
7
  import { VcdTransferClient } from './vcd.transfer.client';
8
8
  import { HTTP_HEADERS } from './constants';
9
9
  import { ClientError, ClientErrorType } from "./types";
@@ -599,4 +599,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
599
599
  }], ctorParameters: function () { return [{ type: i1.VcdHttpClient }, { type: i0.Injector }, { type: i2.VcdSdkConfig, decorators: [{
600
600
  type: Optional
601
601
  }] }]; } });
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLmFwaS5jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvY2xpZW50L3ZjZC5hcGkuY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSCxPQUFPLEVBT0wsUUFBUSxFQUNULE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdkcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV6QyxPQUFPLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7OztBQUVyRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUdsRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBRXJDLCtCQUErQjtBQUUvQjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE1BQWM7SUFDbEQsTUFBTSxPQUFPLEdBQWUsRUFBRSxDQUFDO0lBRS9C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bkMsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUNyQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3BGLENBQUM7O3lHQXB6QlEsWUFBWTs2R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQXlERSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgc2hhcmUsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBdXRob3JpemVkTG9jYXRpb25UeXBlLFxuICBFbnRpdHlSZWZlcmVuY2VUeXBlLFxuICBFbnRpdHlUeXBlLFxuICBMaW5rVHlwZSxcbiAgUmVzb3VyY2VUeXBlLFxuICBTZXNzaW9uVHlwZSxcbiAgVGFza1R5cGVcbn0gZnJvbSAnQHZjZC9iaW5kaW5ncy92Y2xvdWQvYXBpL3Jlc3Qvc2NoZW1hX3YxXzUnO1xuaW1wb3J0IHtTdXBwb3J0ZWRWZXJzaW9uc1R5cGV9IGZyb20gJ0B2Y2QvYmluZGluZ3MvdmNsb3VkL2FwaS9yZXN0L3NjaGVtYS92ZXJzaW9uaW5nJztcbmltcG9ydCB7QWNjZXNzaWJsZUxvY2F0aW9uLCBBY2Nlc3NpYmxlTG9jYXRpb25zLCBTZXNzaW9ufSBmcm9tICcuLi9vcGVuYXBpJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L2luZGV4JztcbmltcG9ydCB7QVBJX1JPT1RfVVJMLCBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCBTRVNTSU9OX09SR19JRCwgU0VTU0lPTl9TQ09QRX0gZnJvbSAnLi4vY29udGFpbmVyLWhvb2tzJztcbmltcG9ydCB7VmNkSHR0cENsaWVudH0gZnJvbSAnLi92Y2QuaHR0cC5jbGllbnQnO1xuaW1wb3J0IHtWY2RUcmFuc2ZlckNsaWVudH0gZnJvbSAnLi92Y2QudHJhbnNmZXIuY2xpZW50JztcbmltcG9ydCB7SFRUUF9IRUFERVJTfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1ZjZFNka0NvbmZpZ30gZnJvbSBcIi4uLy4uL2NvcmUvcGx1Z2luLm1vZHVsZVwiO1xuaW1wb3J0IHtDbGllbnRFcnJvciwgQ2xpZW50RXJyb3JUeXBlfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgVFJBTlNGRVJfTElOS19SRUwgPSAndXBsb2FkOmRlZmF1bHQnO1xuZXhwb3J0IHR5cGUgTmF2aWdhYmxlID0gUmVzb3VyY2VUeXBlIHwgeyBsaW5rPzogTGlua1R5cGVbXSB9O1xuXG5leHBvcnQgY29uc3QgSEFURU9BU19IRUFERVIgPSAnTGluayc7XG5cbi8vIHRzbGludDpkaXNhYmxlOnZhcmlhYmxlLW5hbWVcblxuLyoqXG4gKiBQYXJzZSBvdXQgTGluayBoZWFkZXJzIHVzaW5nIGEgdmVyeSBsYXppbHkgaW1wbGVtZW50ZWQgcHVsbCBwYXJzZXJcbiAqIEBwYXJhbSBoZWFkZXIgJzx1cmwxPjtuYW1lMT1cInZhbHVlMVwiLG5hbWUyPVwidmFsdWUyXCIsPHVybDI+O25hbWUzPVwidmFsdWUzLHZhbHVlNFwiJ1xuICogQHJldHVybnMgcGFyc2VkIGxpbmsgaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIZWFkZXJIYXRlb2FzTGlua3MoaGVhZGVyOiBzdHJpbmcpOiBMaW5rVHlwZVtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBMaW5rVHlwZVtdID0gW107XG5cbiAgICBpZiAoIWhlYWRlcikge1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJGaWVsZE1hcHBpbmdzOiB7W2tleTogc3RyaW5nXToga2V5b2YgTGlua1R5cGV9ID0ge1xuICAgICAgICBocmVmOiAnaHJlZicsXG4gICAgICAgIG1vZGVsOiAndHlwZScsXG4gICAgICAgIHRpdGxlOiAnaWQnLFxuICAgICAgICByZWw6ICdyZWwnXG4gICAgfTtcbiAgICBsZXQgdG9rZW5JbmRleCA9IC0xO1xuXG4gICAgZnVuY3Rpb24gcGVlayh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZih0b2tlbiwgdG9rZW5JbmRleCArIDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQodG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBwZWVrKHRva2VuKTtcbiAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7aGVhZGVyLCB0b2tlbiwgdG9rZW5JbmRleH0pKTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICByZXR1cm4gdG9rZW5JbmRleDtcbiAgICB9XG5cbiAgICB3aGlsZSAocGVlaygnPCcpID4gLTEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhyZWZTdGFydCA9IG5leHQoJzwnKTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWZFbmQgPSBuZXh0KCc+Jyk7XG4gICAgICAgICAgICBjb25zdCBocmVmID0gaGVhZGVyLnN1YnN0cmluZyhocmVmU3RhcnQgKyAxLCBocmVmRW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogTGlua1R5cGUgPSB7aHJlZiwgdHlwZTogbnVsbCwgaWQ6IG51bGwsIHJlbDogbnVsbCwgdkNsb3VkRXh0ZW5zaW9uOiBbXX07XG4gICAgICAgICAgICBsZXQgY29tbWEgPSBwZWVrKCcsJyk7XG4gICAgICAgICAgICBsZXQgc2VtaWNvbG9uID0gcGVlaygnOycpO1xuICAgICAgICAgICAgd2hpbGUgKChzZW1pY29sb24gPiAtMSAmJiBjb21tYSA+IC0xICYmIHNlbWljb2xvbiA8IGNvbW1hKSB8fCAoc2VtaWNvbG9uID4gLTEgJiYgY29tbWEgPT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IG5leHQoJzsnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lRW5kID0gbmV4dCgnPScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBoZWFkZXIuc3Vic3RyaW5nKG5hbWVTdGFydCArIDEsIG5hbWVFbmQpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBuZXh0KCdcIicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRW5kID0gbmV4dCgnXCInKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zdWJzdHJpbmcodmFsdWVTdGFydCArIDEsIHZhbHVlRW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWROYW1lID0gaGVhZGVyRmllbGRNYXBwaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFttYXBwZWROYW1lXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgYXMgYW55O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21tYSA9IHBlZWsoJywnKTtcbiAgICAgICAgICAgICAgICBzZW1pY29sb24gPSBwZWVrKCc7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgIC8vIFdlIHdpbGwgdHJ5IHRoZSBuZXh0IG9uZS4uLlxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBlbnVtIExpbmtSZWxUeXBlIHtcbiAgICBhZGQgPSAnYWRkJyxcbiAgICByZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBlZGl0ID0gJ2VkaXQnLFxufVxuXG4vKipcbiAqIEEgYmFzaWMgY2xpZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJcy5cbiAqXG4gKiBBIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBwbHVnaW4gY2FuIGdldCBhIHJlZmVyZW5jZSB0byB0aGlzIGNsaWVudCBieSB1c2luZyBhbmd1bGFyIGluamVjdGlvbi5cbiAqIGBgYFxuICogICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNkQXBpOiBWY2RBcGlDbGllbnQpIHt9XG4gKiBgYGBcbiAqXG4gKiBWY2RBcGlDbGllbnQgcmV1c2VzIHRoZSBhdXRoZW50aWNhdGlvbiBmcm9tIHRoZSBWQ0QgcGxhdGZvcm0gc28gaW4gZ2VuZXJhbCB0aGVyZSBpc1xuICogbm8gbmVlZCBvZiBhbiBleHBsaWNpdCBhdXRoZW50aWNhdGlvbi9sb2dpbi5cbiAqXG4gKiBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50IHRoZXJlIGFyZSB0d28gQVBJczpcbiAqIDEuIERlcHJlY2F0ZWQgbGVnYWN5IEFQSSB0aGF0IGlzIHVzaW5nIHRoZSBgYXBpL3Nlc3Npb25gIGVuZHBvaW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlbHNcbiAqIDIuIE5ld2x5IGFkZGVkIEFQSSB0aGF0IGlzIHVzaW5nIHRoZSBgY2xvdWRhcGlgIGVuZHBvaW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlbHNcbiAqXG4gKiBOb3RlIHRoYXQgaWYgYSBwbHVnaW4gcGVyZm9ybXMgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGhlbnRpY2F0aW9uIGNhbGwgdGhyb3VnaFxuICoge0BsaW5rIFZjZEFwaUNsaWVudCNzZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9ufSBvciB7QGxpbmsgVmNkQXBpQ2xpZW50I2Nsb3VkQXBpTG9naW59XG4gKiBmcm9tIHRoYXQgbW9tZW50IG9uIHRoZSBWY2RBcGlDbGllbnQgdXNlcyBvbmx5IGNsb3VkIGFwaSBzZXNzaW9uIG1hbmFnZW1lbnQuXG4gKiBUaGlzIG1lYW5zIGNhbGxzIHRvIHtAbGluayBWY2RBcGlDbGllbnQjc2V0QXV0aGVudGljYXRpb259IG9yIHtAbGluayBWY2RBcGlDbGllbnQjbG9naW59IGhhdmUgbm8gZWZmZWN0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmNkQXBpQ2xpZW50IHtcbiAgICBzZXQgYmFzZVVybChfYmFzZVVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSBfYmFzZVVybDtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IudmVyc2lvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9uZWdvdGlhdGVWZXJzaW9uOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHJpdmF0ZSBfYmFzZVVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBWY2RBcGlDbGllbnQjX2Nsb3VkQXBpU2Vzc2lvbn1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXNzaW9uOiBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvblR5cGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uVHlwZT4obnVsbCk7XG4gICAgcHJpdmF0ZSBfc2Vzc2lvbk9ic2VydmFibGU6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+ID0gdGhpcy5fc2Vzc2lvbi5hc09ic2VydmFibGUoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXBXaGlsZShzZXNzaW9uID0+ICFzZXNzaW9uKVxuICAgICAgICApO1xuICAgIHByaXZhdGUgX2dldFNlc3Npb246IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+O1xuXG4gICAgLyoqXG4gICAgICogQ2xvdWRBcGkgU2Vzc2lvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2Nsb3VkQXBpU2Vzc2lvbjogQmVoYXZpb3JTdWJqZWN0PFNlc3Npb24+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uPihudWxsKTtcbiAgICBwcml2YXRlIF9jbG91ZEFwaVNlc3Npb25PYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFNlc3Npb24+ID0gdGhpcy5fY2xvdWRBcGlTZXNzaW9uLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc2tpcFdoaWxlKHNlc3Npb24gPT4gIXNlc3Npb24pXG4gICAgICAgICk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYnNlcnZhYmxlIGhhcyBhIHNwZWNpYWwgcHVycG9zZSB3aGVuIGRvaW5nIGF1dG9tYXRpYyBsb2dpbiBkdXJpbmcgdGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLlxuICAgICAqIEl0IGFsbG93cyBiYWNrZW5kIGNhbGwgb25seSBhZnRlciBhbiBBUEkgdmVyc2lvbiBpcyBzZXQuXG4gICAgICogSXQgYWxzbyBlbnN1cmVzIHRoYXQgYSBiYWNrZW5kIGNhbGwgdG8gZ2V0IHRoZSBjdXJyZW50IHNlc3Npb24gaXMgZG9uZSBvbmNlIHByaW9yIHRvIGFueSBvdGhlciBjYWxscy5cbiAgICAgKlxuICAgICAqIEluIGNhc2Ugb2YgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdCB0aGVyZSBpcyBubyBuZWVkIG9mIHRoaXMgb2JzZXJ2YWJsZVxuICAgICAqIHNpbmNlIHRoaXMgYXV0aCByZXF1ZXN0IHdpbGwgcmV0cmlldmUgdGhlIHNlc3Npb24gaXRzZWxmXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0Q2xvdWRBcGlTZXNzaW9uOiBPYnNlcnZhYmxlPFNlc3Npb24+O1xuXG4gICAgcHJpdmF0ZSBfY2xvdWRBcGlTZXNzaW9uTGlua3M6IEJlaGF2aW9yU3ViamVjdDxMaW5rVHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlua1R5cGVbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkLCBsYXp5IGxvYWRlZCBvYnNlcnZhYmxlIG9mIHRoZSBBY2Nlc3NpYmxlTG9jYXRpb24gYXJyYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnM6IE9ic2VydmFibGU8QWNjZXNzaWJsZUxvY2F0aW9uW10+O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIGlmIGl0IGlzIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBsb2dpbi5cbiAgICAgKiBJbiB0aGlzIGNhc2UgdGhlIG9sZCBBUEkgKC9hcGkvc2Vzc2lvbikgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0Nsb3VkQXBpTG9naW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHJpdmF0ZSBodHRwOiBWY2RIdHRwQ2xpZW50LFxuICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZz86IFZjZFNka0NvbmZpZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fYmFzZVVybCA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFQSV9ST09UX1VSTCk7XG5cbiAgICAgICAgbGV0IG5lZ290aWF0ZWRWZXJzaW9uOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZz8uYXBpVmVyc2lvbikge1xuICAgICAgICAgICAgbmVnb3RpYXRlZFZlcnNpb24gPSBvZih0aGlzLmNvbmZpZy5hcGlWZXJzaW9uKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgodmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZlcnNpb24odmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVnb3RpYXRlZFZlcnNpb24gPSB0aGlzLmh0dHAuZ2V0PFN1cHBvcnRlZFZlcnNpb25zVHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL3ZlcnNpb25zYCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodmVyc2lvbnMgPT4gdGhpcy5uZWdvdGlhdGVWZXJzaW9uKHZlcnNpb25zKSksXG4gICAgICAgICAgICAgICAgdGFwKHZlcnNpb24gPT4gdGhpcy5zZXRWZXJzaW9uKHZlcnNpb24pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uZWdvdGlhdGVWZXJzaW9uID0gbmVnb3RpYXRlZFZlcnNpb24ucGlwZShcbiAgICAgICAgICAgIHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b2tlbkhvbGRlcjogQXV0aFRva2VuSG9sZGVyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhUb2tlbkhvbGRlclNlcnZpY2UsIHsgdG9rZW46ICcnIH0pO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRva2VuSG9sZGVyLmp3dCA/IGBCZWFyZXIgJHt0b2tlbkhvbGRlci5qd3R9YCA6IHRva2VuSG9sZGVyLnRva2VuO1xuICAgICAgICB0aGlzLl9nZXRTZXNzaW9uID0gdGhpcy5zZXRBdXRoZW50aWNhdGlvbih0b2tlbilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uID0gdGhpcy5zZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKHRva2VuKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLCByZXNldE9uRXJyb3I6IGZhbHNlLCByZXNldE9uQ29tcGxldGU6IGZhbHNlLCByZXNldE9uUmVmQ291bnRaZXJvOiBmYWxzZSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGxvZ2luXG4gICAgICAgIHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbmVnb3RpYXRlVmVyc2lvbihzZXJ2ZXJWZXJzaW9uczogU3VwcG9ydGVkVmVyc2lvbnNUeXBlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnM6IHN0cmluZ1tdID0gc2VydmVyVmVyc2lvbnMudmVyc2lvbkluZm8ubWFwKHZlcnNpb25JbmZvID0+IHZlcnNpb25JbmZvLnZlcnNpb24pO1xuXG4gICAgICAgIC8vIERlZmF1bHQgQVBJIFZlcnNpb24gdXNlZCBpcyB0aGUgTGF0ZXN0IEFQSSBWZXJzaW9uIGluIFZNd2FyZSBDbG91ZCBEaXJlY3RvclxuICAgICAgICByZXR1cm4gc3VwcG9ydGVkVmVyc2lvbnNbc3VwcG9ydGVkVmVyc2lvbnMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBlbnN1cmUgdGhhdCBwcmlvciB0byBzZW5kaW5nIGFueSBjYWxsIHRvIHRoZSBiYWNrZW5kXG4gICAgICogdGhlIHZlcnNpb24gaGFzIGJlZW4gc2V0IGFuZCB0aGUgY3VycmVudCBzZXNzaW9uIGhhcyBiZWVuIHJldHJpZXZlZC5cbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQgZHVyaW5nIHRoZSBhdXRvbWF0aWMgYXV0aGVudGljYXRpb24gdGhhdCBpcyBkb25lIGR1cmluZyB0aGVcbiAgICAgKiBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiwgd2hlbiB0aGUgcGx1Z2luIGlzIG5vdCByZXF1aXJlZCB0byBwZXJmb3JtIGl0cyBvd24gZXhwbGljaXQgYXV0aGVudGljYXRpb25cbiAgICAgKiBidXQgcmF0aGVyIHRoZSBvbmVzIGZyb20gdGhlIHVuZGVybHlpbmcgZnJhbWV3b3JrIGlzIHVzZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCk6IE9ic2VydmFibGU8dHJ1ZT4ge1xuICAgICAgICByZXR1cm4gKHRoaXMudmVyc2lvbiA/IG9mKHRoaXMudmVyc2lvbikgOiB0aGlzLl9uZWdvdGlhdGVWZXJzaW9uKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIGNsb3VkIGFwaSBsb2dpbiB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIC9hcGkvc2Vzc2lvbiBzZXNzaW9uXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiA/IG9mKG51bGwpIDogdGhpcy5fZ2V0U2Vzc2lvbiksXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGNsb3VkIGFwaSBmYWlsdXJlIHdlIGRvIG5vdCB3YW50IHRvIHByZXZlbnQgZnVydGhlciBleGVjdXRpb25cbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY29uc2lkZXJhdGlvbnMgc2luY2UgdGhpcyBtYXkgYmUgYSBjYXNlXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gY2xvdWQgYXBpIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZSkgPT4gb2YodHJ1ZSkpKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEZvciB1c2UgY2FzZXMgd2ljaCBzb2xlbHkgZGVwZW5kcyBvbiBjbG91ZGFwaSB3aXRob3V0IGFueSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICogdGhlcmUgc2hvdWxkIGJlIG5vIGRlcGVuZGVuY2Ugb24gdGhlIG9sZCAvYXBpIGVuZHBvaW50IGF0IGFsbFxuICAgICAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0Q29udGV4dENsb3VkQXBpT25seSgpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZlcnNpb24gPyBvZih0aGlzLnZlcnNpb24pIDogdGhpcy5fbmVnb3RpYXRlVmVyc2lvbikucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb24pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlcnNpb24oX3ZlcnNpb246IHN0cmluZyk6IFZjZEFwaUNsaWVudCB7XG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLnZlcnNpb24gPSBfdmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLCB0aGF0IGFsbG93cyBhIHByb3ZpZGVyIHVzZXIgdG8gZXhlY3V0ZSBBUEkgcmVxdWVzdHNcbiAgICAgKiBpbiB0aGUgc2NvcGUgb2YgYSBzcGVjaWZpYyB0ZW5hbnQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBleGVjdXRlIHNpbmdsZSBBUEkgcmVxdWVzdCBpbiBzY29wZSBvZiBzcGVjaWZpYyB0ZW5hbnQgeW91IGNhbiBkbyBpdFxuICAgICAqIGJ5IHBhc3NpbmcgXCJYLVZNV0FSRS1WQ0xPVUQtVEVOQU5ULUNPTlRFWFRcIiBoZWFkZXIgdG8gdGhlIHNwZWNpZmljIEFQSSBSZXF1ZXN0LlxuICAgICAqXG4gICAgICogVGhpcyBzY29waW5nIGlzIGF2YWlsYWJsZSB0byBxdWVyeS1iYXNlZCBBUEkgY2FsbHMgYW5kIHRvIGJ1bGsgR0VUIGNhbGxzIGluIHRoZVxuICAgICAqIC9jbG91ZGFwaSBzcGFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3RBcyBhbiBlbnRpdHlSZWYgb2YgdGhlIHRlbmFudCAob3JnYW5pemF0aW9uKSB0byBzY29wZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGluXG4gICAgICogIHRoZSBWY2RBcGlDbGllbnQsIG9yIG51bGwvbm8gcGFyYW1ldGVyIHRvIHJlbW92ZSB0ZW5hbnQtc3BlY2lmaWMgc2NvcGluZ1xuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZjZEFwaUNsaWVudCBpbnN0YW5jZSAoZm9yIGNoYWluaW5nKVxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RBcyhhY3RBczogRW50aXR5UmVmZXJlbmNlVHlwZSA9IG51bGwpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hY3RBcyA9ICFhY3RBcyA/IG51bGwgOiBhY3RBcy5pZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBWY2RBcGlDbGllbnQjc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbn1cbiAgICAgKlxuICAgICAqIFNldHMgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuIHRvIHVzZSBmb3IgdGhlIFZjZEFwaUNsaWVudC5cbiAgICAgKlxuICAgICAqIEFmdGVyIHNldHRpbmcgdGhlIHRva2VuLCB0aGUgY2xpZW50IHdpbGwgZ2V0IHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXV0aGVudGljYXRpb24gdGhlIGF1dGhlbnRpY2F0aW9uIHN0cmluZyAodG8gYmUgdXNlZCBpbiBlaXRoZXIgdGhlICdBdXRob3JpemF0aW9uJ1xuICAgICAqICBvciAneC12Y2xvdWQtYXV0aG9yaXphdGlvbicgaGVhZGVyKVxuICAgICAqIEByZXR1cm5zIHRoZSBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdG9rZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xvdWRBcGlMb2dpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09ubHkgY2xvdWQgYXBpIGF1dGggaXMgYWxsb3dlZCBzaW5jZSBpdCB3YXMgYWxyZWFkeSB1c2VkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9IGF1dGhlbnRpY2F0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTZXNzaW9uVHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL3Nlc3Npb25gKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcChzZXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgYWN0QXMgZm9yIHByb3ZpZGVyIGluIHRlbmFudCBzY29wZVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5vcmcgPT09ICdTeXN0ZW0nICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fU0NPUEUpID09PSAndGVuYW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXV0b21hdGljIGFjdEFzIG9ubHkgd29ya3MgaW4gdmVyc2lvbnMgPj05LjVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RBcyh7aWQ6IHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fT1JHX0lEKX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gU0VTU0lPTl9PUkdfSUQgc2V0IGluIGNvbnRhaW5lci4gQXV0b21hdGljIGFjdEFzIGlzIGRpc2FibGVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKHNlc3Npb24gPT4gdGhpcy5fc2Vzc2lvbi5uZXh0KHNlc3Npb24pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbiB0byB1c2UgZm9yIHRoZSBWY2RBcGlDbGllbnQuXG4gICAgICpcbiAgICAgKiBBZnRlciBzZXR0aW5nIHRoZSB0b2tlbiwgdGhlIGNsaWVudCB3aWxsIGdldCB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGF1dGhlbnRpY2F0aW9uIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcgKHRvIGJlIHVzZWQgaW4gZWl0aGVyIHRoZSAnQXV0aG9yaXphdGlvbidcbiAgICAgKiAgb3IgJ3gtdmNsb3VkLWF1dGhvcml6YXRpb24nIGhlYWRlcilcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHNlc3Npb24gb2JzZXJ2YWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gICAgICovXG4gICAgcHVibGljIHNldENsb3VkQXBpQXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICB0aGlzLm9uQmVmb3JlQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBvZih0cnVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBhcyBwYXJ0IG9mIHRoZSBvYnNlcnZhYmxlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgY2FsbGVyIGhhcyBzdWJzY3JpYmVkIHRvIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gYXV0aGVudGljYXRpb24pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFNlc3Npb24+KGAke3RoaXMuX2Jhc2VVcmx9L2Nsb3VkYXBpLzEuMC4wL3Nlc3Npb25zL2N1cnJlbnRgLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3VkQXBpQXV0aGVudGljYXRpb24oKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlTG9nZ2luZygpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAubG9nZ2luZ0ludGVyY2VwdG9yLmVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgVmNkQXBpQ2xpZW50I2Nsb3VkQXBpTG9naW59XG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gYXV0aGVudGljYXRlXG4gICAgICogQHBhcmFtIHRlbmFudCB0aGUgb3JnYW5pemF0aW9uIHRoZSB1c2VyIGJlbG9uZ3MgdG9cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlclxuICAgICAqIEByZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIGdpdmVuIGNyZWRlbnRpYWxzXG4gICAgICovXG4gICAgcHVibGljIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHRlbmFudDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4ge1xuICAgICAgICBpZiAodGhpcy5faXNDbG91ZEFwaUxvZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignT25seSBjbG91ZCBhcGkgYXV0aCBpcyBhbGxvd2VkIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHVzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRoU3RyaW5nOiBzdHJpbmcgPSBidG9hKGAke3VzZXJuYW1lfUAke3RlbmFudH06JHtwYXNzd29yZH1gKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2Vzc2lvblR5cGU+KFxuICAgICAgICAgICAgYCR7dGhpcy5fYmFzZVVybH0vYXBpL3Nlc3Npb25zYCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHthdXRoU3RyaW5nfWB9KVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gYCR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC10b2tlbi10eXBlJyl9ICR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC1hY2Nlc3MtdG9rZW4nKX1gXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICAgICAgdGFwKHNlc3Npb24gPT4gdGhpcy5fc2Vzc2lvbi5uZXh0KHNlc3Npb24pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXV0aGVudGljYXRlZCBzZXNzaW9uIGZvciB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgZGF0YSB1c2luZyBjbG91ZCBhcGkgZW5kcG9pbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gYXV0aGVudGljYXRlXG4gICAgICogQHBhcmFtIHRlbmFudCB0aGUgb3JnYW5pemF0aW9uIHRoZSB1c2VyIGJlbG9uZ3MgdG9cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlclxuICAgICAqIEByZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIGdpdmVuIGNyZWRlbnRpYWxzXG4gICAgICovXG4gICAgcHVibGljIGNsb3VkQXBpTG9naW4odXNlcm5hbWU6IHN0cmluZywgdGVuYW50OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNsb3VkQXBpQXV0aGVudGljYXRpb24oKTtcblxuICAgICAgICBjb25zdCBhdXRoU3RyaW5nOiBzdHJpbmcgPSBidG9hKGAke3VzZXJuYW1lfUAke3RlbmFudH06JHtwYXNzd29yZH1gKTtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuX2Jhc2VVcmx9L2Nsb3VkYXBpLzEuMC4wL3Nlc3Npb25zYDtcbiAgICAgICAgaWYgKHRlbmFudC50b0xvd2VyQ2FzZSgpID09PSAnc3lzdGVtJykge1xuICAgICAgICAgICAgdXJsICs9ICcvcHJvdmlkZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTZXNzaW9uPihcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBbSFRUUF9IRUFERVJTLkF1dGhvcml6YXRpb25dOiBgQmFzaWMgJHthdXRoU3RyaW5nfWAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPFNlc3Npb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYCR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC10b2tlbi10eXBlJyl9ICR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC1hY2Nlc3MtdG9rZW4nKX1gO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gdG9rZW47XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMub25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBpcyBuZWNlc3NhcnkgdG8ga25vdyBpZiBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0IHdhcyBkb25lLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGlzIGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3MsIHByb3BlcnRpZXMgZXRjLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25CZWZvcmVDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Q6XG4gICAgICAgIC8vIFNldCB0aGUgZmxhZyBfaXNDbG91ZEFwaUxvZ2luIGluIG9yZGVyIHRvIGtub3cgdGhhdCBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aGVudGljYXRpb24gaXMgZG9uZVxuICAgICAgICAvLyBUaGlzIHdpbGwgaGVscCB1cyBza2lwIGNvZGUgcmVsYXRlZCB0byB0aGUgb2xkIGFwaSwgaS5lLiB3ZSBzaG91bGQgbm90IGFsbG93IGV4cGxpY2l0IG1peCBvZiBib3RoIHRoZSBhcGktc1xuICAgICAgICB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPSB0cnVlO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Q6XG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgb2YgX2dldENsb3VkQXBpU2Vzc2lvbiBvYnNlcnZhYmxlIHdoaWNoIGlzIG5lZWRlZCBpbiB0aGUgYXV0b21hdGljIGxvZ2luIGR1cmluZyB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgIC8vIFRoZSBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0IHdpbGwgcmV0cmlldmUgdGhlIHNlc3Npb24uXG4gICAgICAgIHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbiA9IG9mKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBUaGlzIGluY2x1ZGVzIGdldHRpbmcgSEFURU9BUyBsaW5rcywgc2V0dGluZyB0aGUgc2Vzc2lvbiwgaGFuZGxpbmcgZXJyb3JzIGV0Yy5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpOiAoc291cmNlOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxTZXNzaW9uPj4pID0+IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICByZXR1cm4gKHNvdXJjZSkgPT4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3A6IEh0dHBSZXNwb25zZTxTZXNzaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBIQVRFT0FTIGxpbmtzXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDbG91ZEFwaVNlc3Npb25MaW5rcyhwYXJzZUhlYWRlckhhdGVvYXNMaW5rcyhyZXNwLmhlYWRlcnMuZ2V0KEhBVEVPQVNfSEVBREVSKSkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gcGFyc2luZyBzZXNzaW9uIEhBVEVPQVMgbGlua3M6JywgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocmVzcCA9PiByZXNwLmJvZHkpLFxuICAgICAgICAgICAgdGFwKChzZXNzaW9uOiBTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgYWN0QXNcbiAgICAgICAgICAgICAgICB0aGlzLmFjdEFzKG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IGFjdEFzIGZvciBwcm92aWRlciBpbiB0ZW5hbnQgc2NvcGVcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5vcmcgJiYgc2Vzc2lvbi5vcmcubmFtZSA9PT0gJ1N5c3RlbScgJiYgdGhpcy5pbmplY3Rvci5nZXQoU0VTU0lPTl9TQ09QRSkgPT09ICd0ZW5hbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEF1dG9tYXRpYyBhY3RBcyBvbmx5IHdvcmtzIGluIHZlcnNpb25zID49OS41XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdEFzKHsgaWQ6IHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fT1JHX0lEKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBTRVNTSU9OX09SR19JRCBzZXQgaW4gY29udGFpbmVyLiBBdXRvbWF0aWMgYWN0QXMgaXMgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoc2Vzc2lvbjogU2Vzc2lvbikgPT4gdGhpcy5fY2xvdWRBcGlTZXNzaW9uLm5leHQoc2Vzc2lvbikpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsb3VkQXBpQXV0aGVudGljYXRpb25FcnJvcigpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIHNvIHRoYXQgYW55IHN1YnNlcXVlbnQgYmFja2VuZCBjYWxscyBhcmUgbm90IGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSAnJztcbiAgICAgICAgLy8gX2dldENsb3VkQXBpU2Vzc2lvbiBpcyBpbiB0aGUgY2VudGVyIG9mIGFueSBiYWNrZW5kIGNhbGwsIG51bGxpZnkgaXQgaW4gb3JkZXIgbm90IHRvIHByZXZlbnQgdGhvc2UgY2FsbHNcbiAgICAgICAgLy8gc2luY2UgaXQgaXMgZWFzaWVyIHRvIHRyb3VibGVzaG9vdCBmYWlsaW5nIGJhY2tlbmQgcmF0aGVyIHRoYW4gbm8gY2FsbFxuICAgICAgICB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb24gPSBvZihudWxsKTtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGxpbmtzXG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzLm5leHQoW10pO1xuICAgICAgICAvLyBDbGVhciB0aGUgc2Vzc2lvblxuICAgICAgICB0aGlzLl9jbG91ZEFwaVNlc3Npb24ubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENsb3VkQXBpU2Vzc2lvbkxpbmtzKGxpbmtzOiBMaW5rVHlwZVtdKSB7XG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzLm5leHQobGlua3MgfHwgW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQ8VD4oZW5kcG9pbnQ6IHN0cmluZywgIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgey4uLm9wdGlvbnN9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGlzdDxUPihlbmRwb2ludDogc3RyaW5nLCBxdWVyeUJ1aWxkZXI/OiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBib29sZWFuIHwgQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KTtcblxuICAgICAgICBpZiAocXVlcnlCdWlsZGVyKSB7XG4gICAgICAgICAgICB1cmwgPSBgJHt1cmx9JHtxdWVyeUJ1aWxkZXIuZ2V0Q2xvdWRBUEkoKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG11bHRpc2l0ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odXJsLCB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IF9tdWx0aXNpdGU6IHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpIH0pIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLmFwcGVuZChcIl9tdWx0aXNpdGVcIiwgdGhpcy5wYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHVybCwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmdldDxUPih1cmwsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlU3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucG9zdDxUPihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVBc3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsgLi4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChyZXNwb25zZSA9PiB0aGlzLm1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlLCAnUE9TVCcpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmFuc2Zlckxpbms8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgdHJhbnNmZXJSZWw6IHN0cmluZyA9IFRSQU5TRkVSX0xJTktfUkVMKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QodGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgaXRlbSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlczogSHR0cFJlc3BvbnNlPFQgJiBOYXZpZ2FibGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckxpbmtzOiBMaW5rVHlwZVtdID0gcmVzLmhlYWRlcnMuaGFzKEhBVEVPQVNfSEVBREVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUhlYWRlckhhdGVvYXNMaW5rcyhyZXMuaGVhZGVycy5nZXQoSEFURU9BU19IRUFERVIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua3M6IExpbmtUeXBlW10gPSByZXMuYm9keSA/IChyZXMuYm9keS5saW5rIHx8IFtdKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gWy4uLmhlYWRlckxpbmtzLCAuLi5saW5rc11cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChsKSA9PiBsLnJlbCA9PT0gdHJhbnNmZXJSZWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlc3BvbnNlIGZyb20gJHtlbmRwb2ludH0gZGlkIG5vdCBjb250YWluIGEgdHJhbnNmZXIgbGlua2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudEVycm9yVHlwZS5IYXRlb2FzTGlua01pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmsuaHJlZjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnRUcmFuc2ZlcjxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCB0cmFuc2ZlclJlbDogc3RyaW5nID0gVFJBTlNGRVJfTElOS19SRUwpOiBPYnNlcnZhYmxlPFZjZFRyYW5zZmVyQ2xpZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyTGluayhlbmRwb2ludCwgaXRlbSwgdHJhbnNmZXJSZWwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHRyYW5zZmVyVXJsKSA9PiBuZXcgVmNkVHJhbnNmZXJDbGllbnQodGhpcy5odHRwLCB0cmFuc2ZlclVybCkpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTeW5jPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5wdXQ8VD4oXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsgLi4ub3B0aW9ucyB9XG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVBc3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucHV0KFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB7IC4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjb25jYXRNYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBSZXNwb25zZVRvVGFzayhyZXNwb25zZSwgJ1BVVCcpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVTeW5jKGVuZHBvaW50OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVBc3luYyhlbmRwb2ludDogc3RyaW5nLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLCB7IC4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSkpLFxuICAgICAgICAgICAgY29uY2F0TWFwKHJlc3BvbnNlID0+IHRoaXMubWFwUmVzcG9uc2VUb1Rhc2socmVzcG9uc2UsICdERUxFVEUnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiwgaHR0cFZlcmI6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuaGFzKCdMb2NhdGlvbicpICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUYXNrVHlwZT4ocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xvY2F0aW9uJykpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmJvZHkgJiYgcmVzcG9uc2UuYm9keS50eXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL3ZuZC52bXdhcmUudmNsb3VkLnRhc2srJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2s6IFRhc2tUeXBlID0gT2JqZWN0LmFzc2lnbihuZXcgVGFza1R5cGUoKSwgcmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICByZXR1cm4gb2YodGFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ2xpZW50RXJyb3IoXG4gICAgICAgICAgYEFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHdhcyBtYWRlIHRvIFske2h0dHBWZXJifSAke3Jlc3BvbnNlLnVybH1dLCBidXQgbm8gdGFzayB3YXMgcmV0dXJuZWQuICBUaGUgb3BlcmF0aW9uIG1heSBzdGlsbCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bC5gLFxuICAgICAgICAgICAgQ2xpZW50RXJyb3JUeXBlLlRhc2tMaW5rTWlzc2luZ1xuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW50aXR5PFQgZXh0ZW5kcyBFbnRpdHlSZWZlcmVuY2VUeXBlPihlbnRpdHlSZWY6IEVudGl0eVJlZmVyZW5jZVR5cGUpOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgZ2V0RW50aXR5PFQgZXh0ZW5kcyBFbnRpdHlSZWZlcmVuY2VUeXBlPih1cm46IHN0cmluZyk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4oZW50aXR5UmVmT3JVcm46IEVudGl0eVJlZmVyZW5jZVR5cGUgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzb2x2ZXI6IE9ic2VydmFibGU8RW50aXR5VHlwZT4gPSB0eXBlb2YgZW50aXR5UmVmT3JVcm4gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL2VudGl0eS8ke2VudGl0eVJlZk9yVXJufWApIDpcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL2VudGl0eS91cm46dmNsb3VkOiR7ZW50aXR5UmVmT3JVcm4udHlwZX06JHtlbnRpdHlSZWZPclVybi5pZH1gKTtcblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBlbnRpdHlSZXNvbHZlciksXG4gICAgICAgICAgICBjb25jYXRNYXAoZW50aXR5ID0+IHRoaXMuaHR0cC5nZXQ8VD4oYCR7ZW50aXR5LmxpbmtbMF0uaHJlZn1gKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlVGFzayh0YXNrOiBUYXNrVHlwZSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VGFza1R5cGU+KHRhc2suaHJlZiwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Rhc2tDb21wbGV0ZSh0YXNrOiBUYXNrVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gWydzdWNjZXNzJywgJ2Vycm9yJywgJ2NhbmNlbGVkJywgJ2Fib3J0ZWQnXS5pbmRleE9mKHRhc2suc3RhdHVzKSA+IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGl0ZW06IE5hdmlnYWJsZSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhpdGVtLCAncmVtb3ZlJywgbnVsbCk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgICAgICBgTm8gJ3JlbW92ZScgbGluayBmb3Igc3BlY2lmaWVkIHJlc291cmNlLmAsXG4gICAgICAgICAgICAgIENsaWVudEVycm9yVHlwZS5IYXRlb2FzTGlua01pc3NpbmdcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmRlbGV0ZTxUYXNrVHlwZT4obGluay5ocmVmLCB7IC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIFF1ZXJ5LkJ1aWxkZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVpbGRlciBBbiBkZWZpbml0aW9uIG9mIHRoZSBxdWVyeSB0byBjb25zdHJ1Y3QgKHR5cGUsIGZpbHRlciwgcGFnZSBzaXplLCBldGMuKVxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIGEgcXVlcnkgcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIHF1ZXJ5PFQ+KGJ1aWxkZXI6IFF1ZXJ5LkJ1aWxkZXIsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgUXVlcnkuQnVpbGRlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWlsZGVyIEFuIGRlZmluaXRpb24gb2YgdGhlIHF1ZXJ5IHRvIGNvbnN0cnVjdCAodHlwZSwgZmlsdGVyLCBwYWdlIHNpemUsIGV0Yy4pXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIGEgcXVlcnkgcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBxdWVyeTxUPihidWlsZGVyOiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgcXVlcnk8VD4oYnVpbGRlcjogUXVlcnkuQnVpbGRlciwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2UoYCR7dGhpcy5fYmFzZVVybH0vYXBpL3F1ZXJ5JHtidWlsZGVyLmdldCgpfWAsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIGZpcnN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdmaXJzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgICAgICBgTm8gJ2ZpcnN0UGFnZScgbGluayBmb3Igc3BlY2lmaWVkIHF1ZXJ5LmAsXG4gICAgICAgICAgICAgIENsaWVudEVycm9yVHlwZS5IYXRlb2FzTGlua01pc3NpbmdcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRmlyc3RQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ2ZpcnN0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIHRoZSBzZXQgb2Ygc2l0ZSBsb2NhdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGUgcXVlcnkgZmFub3V0XG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgcHJldmlvdXNQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgbGluazogTGlua1R5cGUgPSB0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ3ByZXZpb3VzUGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgIGBObyAncHJldmlvdXNQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCxcbiAgICAgICAgICAgICAgQ2xpZW50RXJyb3JUeXBlLkhhdGVvYXNMaW5rTWlzc2luZ1xuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZShsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1ByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhyZXN1bHQsICdwcmV2aW91c1BhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbmV4dCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgbmV4dCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgbmV4dCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbmV4dCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgbmV4dFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgbmV4dFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICduZXh0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgIGBObyAnbmV4dFBhZ2UnIGxpbmsgZm9yIHNwZWNpZmllZCBxdWVyeS5gLFxuICAgICAgICAgICAgICBDbGllbnRFcnJvclR5cGUuSGF0ZW9hc0xpbmtNaXNzaW5nXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlPFQ+KGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzTmV4dFBhZ2U8VD4ocmVzdWx0OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsocmVzdWx0LCAnbmV4dFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIGxhc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBsYXN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgbGFzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgbGFzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgbGFzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdsYXN0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgIGBObyAnbGFzdFBhZ2UnIGxpbmsgZm9yIHNwZWNpZmllZCBxdWVyeS5gLFxuICAgICAgICAgICAgICBDbGllbnRFcnJvclR5cGUuSGF0ZW9hc0xpbmtNaXNzaW5nXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZShsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0xhc3RQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ2xhc3RQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UXVlcnlQYWdlPFQ+KGhyZWY6IHN0cmluZywgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAobXVsdGlzaXRlKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPihocmVmLCB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IF9tdWx0aXNpdGU6IHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpIH0pIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuYXBwZW5kKFwiX211bHRpc2l0ZVwiLCB0aGlzLnBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oaHJlZiwgeyAuLi5vcHRpb25zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KGhyZWYsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0byBwZXJmb3JtIGFjdGlvbiBhdmFpbGFiaWxpdHkgY2hlY2sgYmVmb3JlIGNhbGxpbmcgdGhlIEFQSVxuICAgKiBAcGFyYW0gaXRlbSAtIHRoZSBuYXZpZ2FibGUgaXRlbSAoY29udGFpbmluZyBsaW5rIGNvbGxlY3Rpb24pXG4gICAqIEBwYXJhbSBsaW5rUmVsVHlwZSAtIHRoZSBsaW5rIHJlbCB0eXBlLCBwYXNzIGVpdGhlciBMaW5rUmVsVHlwZSBvciBzdHJpbmdcbiAgICogQHBhcmFtIGVudGl0eVJlZlR5cGUgLSB0aGUgZW50aXR5IHJlZmVyZW5jZSB0eXBlXG4gICAqL1xuICAgIHB1YmxpYyBjYW5QZXJmb3JtQWN0aW9uKGl0ZW06IE5hdmlnYWJsZSwgbGlua1JlbFR5cGU6IExpbmtSZWxUeXBlIHwgc3RyaW5nLCBlbnRpdHlSZWZUeXBlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsoaXRlbSwgbGlua1JlbFR5cGUsIGVudGl0eVJlZlR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZExpbmsoaXRlbTogTmF2aWdhYmxlLCByZWw6IHN0cmluZywgdHlwZTogc3RyaW5nKTogTGlua1R5cGUge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ubGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtLmxpbmsuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluay5yZWwuaW5jbHVkZXMocmVsKSAmJiBsaW5rLnR5cGUgPT09IHR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaW5rLnJlbC5pbmNsdWRlcyhyZWwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlOiBib29sZWFuIHwgQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtdWx0aXNpdGUgPT09ICdib29sZWFuJyA/IChtdWx0aXNpdGUgPyAnZ2xvYmFsJyA6ICdsb2NhbCcpIDogbXVsdGlzaXRlLm1hcChzaXRlID0+IHNpdGUubG9jYXRpb25JZCkuam9pbignLCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBjbG91ZEFwaVNlc3Npb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlc3Npb24oKTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9zZXNzaW9uT2JzZXJ2YWJsZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgU2Vzc2lvbiBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHVibGljIGdldCBjbG91ZEFwaVNlc3Npb24oKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHRDbG91ZEFwaU9ubHkoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbk9ic2VydmFibGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VybmFtZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG91ZEFwaVNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi51c2VyICYmIHNlc3Npb24udXNlci5uYW1lKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5faXNDbG91ZEFwaUxvZ2luKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLnVzZXIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9yZ2FuaXphdGlvbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLmNsb3VkQXBpU2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9pc0Nsb3VkQXBpTG9naW4pLFxuICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi5vcmcgJiYgc2Vzc2lvbi5vcmcubmFtZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLm9yZylcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgY2xvdWRBcGlMb2NhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG9jYXRpb24oKTogT2JzZXJ2YWJsZTxBdXRob3JpemVkTG9jYXRpb25UeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ucGlwZShcbiAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24uYXV0aG9yaXplZExvY2F0aW9ucy5sb2NhdGlvbi5maW5kKGxvY2F0aW9uID0+IGxvY2F0aW9uLmxvY2F0aW9uSWQgPT09IHNlc3Npb24ubG9jYXRpb25JZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbG9jYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICovXG4gICAgcHVibGljIGdldCBjbG91ZEFwaUxvY2F0aW9uKCk6IE9ic2VydmFibGU8QWNjZXNzaWJsZUxvY2F0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb3VkQXBpU2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgY2FjaGluZyBmb3IgZ2V0dGluZyBBY2Nlc3NpYmxlTG9jYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucyA9IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIEFjY2Vzc2libGVMb2NhdGlvbnMgbGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgobGlua3MpID0+IHRoaXMuZmluZExpbmsoeyBsaW5rOiBsaW5rcyB9LCAnZG93bicsICdBY2Nlc3NpYmxlTG9jYXRpb25zJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZldGNoIEFjY2Vzc2libGVMb2NhdGlvbnMgZnJvbSB0aGUgYmFja2VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobGluazogTGlua1R5cGUpID0+IGxpbmsgPyB0aGlzLmh0dHAuZ2V0PEFjY2Vzc2libGVMb2NhdGlvbnM+KGxpbmsuaHJlZikgOiBvZihudWxsKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSB3aXRoIGFsbCBsb2NhdGlvbnMgKHdoYXQgaWYgdGhlcmUgYXJlIG1hbnkgcGFnZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChhY2Nlc3NpYmxlTG9jYXRpb25zOiBBY2Nlc3NpYmxlTG9jYXRpb25zKSA9PiBhY2Nlc3NpYmxlTG9jYXRpb25zICYmIGFjY2Vzc2libGVMb2NhdGlvbnMudmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLCByZXNldE9uRXJyb3I6IGZhbHNlLCByZXNldE9uQ29tcGxldGU6IGZhbHNlLCByZXNldE9uUmVmQ291bnRaZXJvOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucztcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBOZWVkIHRvIGhhdmUgdGhlIHNlc3Npb24gaW4gb3JkZXIgdG8gZ2V0IGl0cyBsb2NhdGlvblxuICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jbG91ZEFwaVNlc3Npb24pLFxuICAgICAgICAgICAgLy8gRmluZCB0aGUgbG9jYXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHNlc3Npb25cbiAgICAgICAgICAgIG1hcCgoW2FjY2Vzc2libGVMb2NhdGlvbnMsIHNlc3Npb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3NpYmxlTG9jYXRpb25zIHx8ICFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uTG9jYXRpb24gPSBzZXNzaW9uLmxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbkxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXNzaWJsZUxvY2F0aW9ucy5maW5kKGxvY2F0aW9uID0+IGxvY2F0aW9uLmxvY2F0aW9uSWQgPT09IHNlc3Npb25Mb2NhdGlvbik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9jYXRpb24oc2Vzc2lvbjogU2Vzc2lvblR5cGUpOiBBdXRob3JpemVkTG9jYXRpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uYXV0aG9yaXplZExvY2F0aW9ucy5sb2NhdGlvbi5maW5kKGxvY2F0aW9uID0+IGxvY2F0aW9uLmxvY2F0aW9uSWQgPT09IHNlc3Npb24ubG9jYXRpb25JZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIGVuZHBvaW50IHVybC4gSWYgdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLCB0aGVuIHJldHVybiBpdCBhcyBpdCBpcyB3aXRob3V0XG4gICAgICogYW55IG1vZGlmaWNhdGlvbnMsIG90aGVyd2lzZSBjb25zaWRlciBpdCBhcyBhIHJlbGF0aXZlIG9uZSBhbmQgcHJlcGVuZCB0aGUgYmFzZVVybCBhcyBkZWZpbmVkIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYnVpbGRFbmRwb2ludFVybChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVuZHBvaW50LmluZGV4T2YoJzovLycpID4gLTEgPyBlbmRwb2ludCA6IGAke3RoaXMuX2Jhc2VVcmx9LyR7ZW5kcG9pbnR9YDtcbiAgICB9XG5cbn1cbiJdfQ==
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLmFwaS5jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvY2xpZW50L3ZjZC5hcGkuY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSCxPQUFPLEVBT0wsUUFBUSxFQUNULE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFakgsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV6QyxPQUFPLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7OztBQUVyRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUdsRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBRXJDLCtCQUErQjtBQUUvQjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE1BQWM7SUFDbEQsTUFBTSxPQUFPLEdBQWUsRUFBRSxDQUFDO0lBRS9CLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDVCxPQUFPLE9BQU8sQ0FBQztLQUNsQjtJQUVELE1BQU0sbUJBQW1CLEdBQW9DO1FBQ3pELElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixLQUFLLEVBQUUsSUFBSTtRQUNYLEdBQUcsRUFBRSxLQUFLO0tBQ2IsQ0FBQztJQUNGLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXBCLFNBQVMsSUFBSSxDQUFDLEtBQWE7UUFDdkIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFNBQVMsSUFBSSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsSUFBSTtZQUNBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sTUFBTSxHQUFhLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUMsQ0FBQztZQUN0RixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekQsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksVUFBVSxFQUFFO29CQUNaLGFBQWE7b0JBQ2IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBUSxDQUFDO2lCQUN6RDtnQkFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QjtRQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUcsOEJBQThCO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEI7S0FDSjtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ25CLDBCQUFXLENBQUE7SUFDWCxnQ0FBaUIsQ0FBQTtJQUNqQiw0QkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFDckIsSUFBSSxPQUFPLENBQUMsUUFBZ0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQThDRCxZQUNnQixJQUFtQixFQUNuQixRQUFrQixFQUNOLE1BQXFCO1FBRmpDLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNOLFdBQU0sR0FBTixNQUFNLENBQWU7UUE1Q2pEOztXQUVHO1FBQ0ssYUFBUSxHQUFpQyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUNoRix1QkFBa0IsR0FBNEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7YUFDN0UsSUFBSSxDQUNELFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQ2pDLENBQUM7UUFHTjs7V0FFRztRQUNLLHFCQUFnQixHQUE2QixJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNoRiwrQkFBMEIsR0FBd0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRTthQUN6RixJQUFJLENBQ0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDakMsQ0FBQztRQVdFLDBCQUFxQixHQUFnQyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQU9qRzs7O1dBR0c7UUFDSyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFPN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxJQUFJLGlCQUFxQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUU7WUFDekIsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FDTCxDQUFDO1NBQ0w7YUFBTTtZQUNILGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDMUYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDM0MsQ0FBQztTQUNMO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FDM0MsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUM1SCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQTJCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDaEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2FBQzNDLElBQUksQ0FDRCxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQzVILENBQUM7UUFFTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQzthQUMzRCxJQUFJLENBQ0QsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUM1SCxDQUFDO1FBQ04sMENBQTBDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGNBQXFDO1FBQzFELE1BQU0saUJBQWlCLEdBQWEsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkcsOEVBQThFO1FBQzlFLE9BQU8saUJBQWlCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxzQkFBc0I7UUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUM1RCxJQUFJO1FBQ0QsaUZBQWlGO1FBQ2pGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUNwRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQywyRUFBMkU7WUFDM0UscUVBQXFFO1lBQ3JFLG1FQUFtRTthQUNsRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFTDs7OztPQUlHO0lBQ0ssa0NBQWtDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQ2xFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FDNUMsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksS0FBSyxDQUFDLFFBQTZCLElBQUk7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxpQkFBaUIsQ0FBQyxjQUFzQjtRQUMzQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixPQUFPLFVBQVUsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHVEQUF1RDtZQUN2RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDM0UsK0NBQStDO2dCQUMvQyxJQUFJO29CQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2lCQUN2RDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDUixPQUFPLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7UUFDTCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM5QyxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSx5QkFBeUIsQ0FBQyxjQUFzQjtRQUNuRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUV0QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7YUFDVixJQUFJO1FBQ0Qsa0hBQWtIO1FBQ2xILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsRUFDOUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsa0NBQWtDLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUN2SDthQUNBLElBQUksQ0FDRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FDbEMsQ0FBQztJQUNWLENBQUM7SUFFTSxhQUFhO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSyxDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLFFBQWdCO1FBQzNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7U0FDakY7UUFDRCxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDakIsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLEVBQy9CLElBQUksRUFDSjtZQUNJLE9BQU8sRUFBRSxVQUFVO1lBQ25CLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxTQUFTLFVBQVUsRUFBRSxFQUFDLENBQUM7U0FDcEUsQ0FDSjthQUNBLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUEyQixFQUFFLEVBQUU7UUFDaEMsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQ3ZLLEVBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM5QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM5QyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxhQUFhLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDbkUsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFFdEMsTUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLEdBQUcsUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsMEJBQTBCLENBQUM7UUFDckQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFO1lBQ25DLEdBQUcsSUFBSSxXQUFXLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNqQixHQUFHLEVBQ0gsSUFBSSxFQUNKO1lBQ0ksT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUUsRUFBRSxDQUFDO1NBQ3BGLENBQ0osQ0FBQyxJQUFJLENBQ0YsR0FBRyxDQUFDLENBQUMsUUFBK0IsRUFBRSxFQUFFO1lBQ3BDLDJDQUEyQztZQUMzQyxNQUFNLEtBQUssR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO1lBQzlILElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUMvRCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FDbEMsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSyw4QkFBOEI7UUFDbEMsaURBQWlEO1FBQ2pELGdHQUFnRztRQUNoRyw4R0FBOEc7UUFDOUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixpREFBaUQ7UUFDakQsbUlBQW1JO1FBQ25JLGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0I7UUFDNUIsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLENBQUMsSUFBMkIsRUFBRSxFQUFFO1lBQ2hDLG9CQUFvQjtZQUNwQixJQUFJO2dCQUNBLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0Y7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9EO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN0QixHQUFHLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDckIsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsdURBQXVEO1lBQ3ZELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUMvRiwrQ0FBK0M7Z0JBQy9DLElBQUk7b0JBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3pEO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQztpQkFDcEY7YUFDSjtRQUNMLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDOUQsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztZQUNyQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLDZCQUE2QjtRQUNqQyxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hELDJHQUEyRztRQUMzRyx5RUFBeUU7UUFDekUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBaUI7UUFDN0MsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sR0FBRyxDQUFJLFFBQWdCLEVBQUcsT0FBbUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FDbkYsQ0FBQztJQUNOLENBQUM7SUFFTSxJQUFJLENBQUksUUFBZ0IsRUFBRSxZQUE0QixFQUFFLFNBQThDLEVBQUUsT0FBbUM7UUFDOUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFDLElBQUksWUFBWSxFQUFFO1lBQ2QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1NBQy9DO1FBRUQsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ25IO2lCQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRTtnQkFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNoRDtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsT0FBbUM7UUFDL0UsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUMvQixJQUFJLEVBQ0osRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUNmLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLFdBQVcsQ0FBSSxRQUFnQixFQUFFLElBQU8sRUFBRSxPQUFtQztRQUNoRixPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQy9CLElBQUksRUFDSixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FDdEMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDbEUsQ0FBQztJQUNOLENBQUM7SUFFTSxlQUFlLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsY0FBc0IsaUJBQWlCO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNwRSxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsR0FBZ0MsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sV0FBVyxHQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxLQUFLLEdBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7aUJBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLE1BQU0sSUFBSSxXQUFXLENBQ25CLGlCQUFpQixRQUFRLGtDQUFrQyxFQUMzRCxlQUFlLENBQUMsa0JBQWtCLENBQ25DLENBQUM7YUFDTDtZQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQztJQUVNLGFBQWEsQ0FBSSxRQUFnQixFQUFFLElBQU8sRUFBRSxjQUFzQixpQkFBaUI7UUFDdEYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO2FBQ25ELElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUN0RSxDQUFDO0lBQ1YsQ0FBQztJQUVNLFVBQVUsQ0FBSSxRQUFnQixFQUFFLElBQU8sRUFBRSxPQUFtQztRQUMvRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQy9CLElBQUksRUFDSixFQUFFLEdBQUcsT0FBTyxFQUFFLENBQ2pCLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLFdBQVcsQ0FBSSxRQUFnQixFQUFFLElBQU8sRUFBRSxPQUFtQztRQUVoRixPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQy9CLElBQUksRUFDSixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FDdEMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDakUsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUFtQztRQUNuRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUMzRixDQUFDO0lBQ04sQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQW1DO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFDdkcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUNwRSxDQUFDO0lBQ04sQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQTJCLEVBQUUsUUFBZ0I7UUFDbkUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDcEU7YUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHFDQUFxQyxDQUFDLEVBQUU7WUFDOUYsTUFBTSxJQUFJLEdBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNyQyx3Q0FBd0MsUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLDZFQUE2RSxFQUMzSSxlQUFlLENBQUMsZUFBZSxDQUNsQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBS00sU0FBUyxDQUFnQyxjQUE0QztRQUN4RixNQUFNLGNBQWMsR0FBMkIsT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSxHQUFHLElBQUksQ0FBQyxRQUFRLDBCQUEwQixjQUFjLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBILE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2xFLENBQUM7SUFDTixDQUFDO0lBRU0sVUFBVSxDQUFDLElBQWMsRUFBRSxPQUFtQztRQUNqRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFXLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNOLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBYztRQUNoQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sVUFBVSxDQUFDLElBQWUsRUFBRSxPQUFtQztRQUNsRSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNyQywwQ0FBMEMsRUFDMUMsZUFBZSxDQUFDLGtCQUFrQixDQUNuQyxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ04sQ0FBQztJQW1CTSxLQUFLLENBQUksT0FBc0IsRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsYUFBYSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQW1CTSxTQUFTLENBQUksTUFBUyxFQUFFLFNBQWUsRUFBRSxPQUFtQztRQUMvRSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQ3JDLDBDQUEwQyxFQUMxQyxlQUFlLENBQUMsa0JBQWtCLENBQ25DLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxZQUFZLENBQUksTUFBUztRQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBbUJNLFlBQVksQ0FBSSxNQUFTLEVBQUUsU0FBZSxFQUFFLE9BQW1DO1FBQ2xGLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRyxNQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FDckMsNkNBQTZDLEVBQzdDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FDakMsQ0FBQyxDQUFDO1NBQ1I7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGVBQWUsQ0FBSSxNQUFTO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRyxNQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFtQk0sUUFBUSxDQUFJLE1BQVMsRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDOUUsTUFBTSxJQUFJLEdBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFHLE1BQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNyQyx5Q0FBeUMsRUFDekMsZUFBZSxDQUFDLGtCQUFrQixDQUNqQyxDQUFDLENBQUM7U0FDUjtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sV0FBVyxDQUFJLE1BQVM7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFHLE1BQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQW1CTSxRQUFRLENBQUksTUFBUyxFQUFFLFNBQWUsRUFBRSxPQUFtQztRQUM5RSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQ3JDLHlDQUF5QyxFQUN6QyxlQUFlLENBQUMsa0JBQWtCLENBQ25DLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxXQUFXLENBQUksTUFBUztRQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sWUFBWSxDQUFJLElBQVksRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDdEYsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQ25IO2lCQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRTtnQkFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUNoRDtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNOLENBQUM7SUFFSDs7Ozs7T0FLRztJQUNNLGdCQUFnQixDQUFDLElBQWUsRUFBRSxXQUFpQyxFQUFFLGFBQXNCO1FBQzlGLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWUsRUFBRSxHQUFXLEVBQUUsSUFBWTtRQUN2RCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLElBQUksRUFBRTtnQkFDTixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO2FBQ3ZEO1lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxTQUE2QztRQUNyRSxPQUFPLE9BQU8sU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hJLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQzNDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxJQUFJLENBQ2pELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLEtBQUssQ0FDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDckIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUMvRCxFQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNiLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUMxQyxDQUNKLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sS0FBSyxDQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQzdELEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ3BDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQ3pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDcEgsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUNwQyxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMscUJBQXFCO3FCQUN6RCxJQUFJO2dCQUNELG1DQUFtQztnQkFDbkMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2dCQUM3RSw2Q0FBNkM7Z0JBQzdDLFNBQVMsQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlGLGtFQUFrRTtnQkFDbEUsR0FBRyxDQUFDLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUN2RztxQkFDQSxJQUFJLENBQ0QsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUM1SCxDQUFDO2FBQ1Q7WUFDRCxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztRQUM3QyxDQUFDLENBQUM7UUFFRix3REFBd0Q7UUFDeEQsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDcEMscURBQXFEO1FBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBb0I7UUFDbkMsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUNyQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3BGLENBQUM7O3lHQXB6QlEsWUFBWTs2R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQXlERSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgc2hhcmUsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBdXRob3JpemVkTG9jYXRpb25UeXBlLFxuICBFbnRpdHlSZWZlcmVuY2VUeXBlLFxuICBFbnRpdHlUeXBlLFxuICBMaW5rVHlwZSxcbiAgUmVzb3VyY2VUeXBlLFxuICBTZXNzaW9uVHlwZSxcbiAgVGFza1R5cGVcbn0gZnJvbSAnQHZjZC9iaW5kaW5ncy92Y2xvdWQvYXBpL3Jlc3Qvc2NoZW1hX3YxXzUnO1xuaW1wb3J0IHtTdXBwb3J0ZWRWZXJzaW9uc1R5cGV9IGZyb20gJ0B2Y2QvYmluZGluZ3MvdmNsb3VkL2FwaS9yZXN0L3NjaGVtYS92ZXJzaW9uaW5nJztcbmltcG9ydCB7QWNjZXNzaWJsZUxvY2F0aW9uLCBBY2Nlc3NpYmxlTG9jYXRpb25zLCBTZXNzaW9ufSBmcm9tICcuLi9vcGVuYXBpJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L2luZGV4JztcbmltcG9ydCB7QVBJX1JPT1RfVVJMLCBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCBTRVNTSU9OX09SR19JRCwgU0VTU0lPTl9TQ09QRX0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbnRhaW5lci1ob29rcyc7XG5pbXBvcnQge1ZjZEh0dHBDbGllbnR9IGZyb20gJy4vdmNkLmh0dHAuY2xpZW50JztcbmltcG9ydCB7VmNkVHJhbnNmZXJDbGllbnR9IGZyb20gJy4vdmNkLnRyYW5zZmVyLmNsaWVudCc7XG5pbXBvcnQge0hUVFBfSEVBREVSU30gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtWY2RTZGtDb25maWd9IGZyb20gXCIuLi8uLi9jb3JlL3BsdWdpbi5tb2R1bGVcIjtcbmltcG9ydCB7Q2xpZW50RXJyb3IsIENsaWVudEVycm9yVHlwZX0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IFRSQU5TRkVSX0xJTktfUkVMID0gJ3VwbG9hZDpkZWZhdWx0JztcbmV4cG9ydCB0eXBlIE5hdmlnYWJsZSA9IFJlc291cmNlVHlwZSB8IHsgbGluaz86IExpbmtUeXBlW10gfTtcblxuZXhwb3J0IGNvbnN0IEhBVEVPQVNfSEVBREVSID0gJ0xpbmsnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTp2YXJpYWJsZS1uYW1lXG5cbi8qKlxuICogUGFyc2Ugb3V0IExpbmsgaGVhZGVycyB1c2luZyBhIHZlcnkgbGF6aWx5IGltcGxlbWVudGVkIHB1bGwgcGFyc2VyXG4gKiBAcGFyYW0gaGVhZGVyICc8dXJsMT47bmFtZTE9XCJ2YWx1ZTFcIixuYW1lMj1cInZhbHVlMlwiLDx1cmwyPjtuYW1lMz1cInZhbHVlMyx2YWx1ZTRcIidcbiAqIEByZXR1cm5zIHBhcnNlZCBsaW5rIGhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSGVhZGVySGF0ZW9hc0xpbmtzKGhlYWRlcjogc3RyaW5nKTogTGlua1R5cGVbXSB7XG4gICAgY29uc3QgcmVzdWx0czogTGlua1R5cGVbXSA9IFtdO1xuXG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyRmllbGRNYXBwaW5nczoge1trZXk6IHN0cmluZ106IGtleW9mIExpbmtUeXBlfSA9IHtcbiAgICAgICAgaHJlZjogJ2hyZWYnLFxuICAgICAgICBtb2RlbDogJ3R5cGUnLFxuICAgICAgICB0aXRsZTogJ2lkJyxcbiAgICAgICAgcmVsOiAncmVsJ1xuICAgIH07XG4gICAgbGV0IHRva2VuSW5kZXggPSAtMTtcblxuICAgIGZ1bmN0aW9uIHBlZWsodG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YodG9rZW4sIHRva2VuSW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXh0KHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gcGVlayh0b2tlbik7XG4gICAgICAgIGlmIChuZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe2hlYWRlciwgdG9rZW4sIHRva2VuSW5kZXh9KSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5JbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgcmV0dXJuIHRva2VuSW5kZXg7XG4gICAgfVxuXG4gICAgd2hpbGUgKHBlZWsoJzwnKSA+IC0xKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBocmVmU3RhcnQgPSBuZXh0KCc8Jyk7XG4gICAgICAgICAgICBjb25zdCBocmVmRW5kID0gbmV4dCgnPicpO1xuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGhlYWRlci5zdWJzdHJpbmcoaHJlZlN0YXJ0ICsgMSwgaHJlZkVuZCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IExpbmtUeXBlID0ge2hyZWYsIHR5cGU6IG51bGwsIGlkOiBudWxsLCByZWw6IG51bGwsIHZDbG91ZEV4dGVuc2lvbjogW119O1xuICAgICAgICAgICAgbGV0IGNvbW1hID0gcGVlaygnLCcpO1xuICAgICAgICAgICAgbGV0IHNlbWljb2xvbiA9IHBlZWsoJzsnKTtcbiAgICAgICAgICAgIHdoaWxlICgoc2VtaWNvbG9uID4gLTEgJiYgY29tbWEgPiAtMSAmJiBzZW1pY29sb24gPCBjb21tYSkgfHwgKHNlbWljb2xvbiA+IC0xICYmIGNvbW1hID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lU3RhcnQgPSBuZXh0KCc7Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZUVuZCA9IG5leHQoJz0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gaGVhZGVyLnN1YnN0cmluZyhuYW1lU3RhcnQgKyAxLCBuYW1lRW5kKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gbmV4dCgnXCInKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUVuZCA9IG5leHQoJ1wiJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc3Vic3RyaW5nKHZhbHVlU3RhcnQgKyAxLCB2YWx1ZUVuZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkTmFtZSA9IGhlYWRlckZpZWxkTWFwcGluZ3NbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbWFwcGVkTmFtZV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpIGFzIGFueTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tbWEgPSBwZWVrKCcsJyk7XG4gICAgICAgICAgICAgICAgc2VtaWNvbG9uID0gcGVlaygnOycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7ICAvLyBXZSB3aWxsIHRyeSB0aGUgbmV4dCBvbmUuLi5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgZW51bSBMaW5rUmVsVHlwZSB7XG4gICAgYWRkID0gJ2FkZCcsXG4gICAgcmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgZWRpdCA9ICdlZGl0Jyxcbn1cblxuLyoqXG4gKiBBIGJhc2ljIGNsaWVudCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSXMuXG4gKlxuICogQSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgcGx1Z2luIGNhbiBnZXQgYSByZWZlcmVuY2UgdG8gdGhpcyBjbGllbnQgYnkgdXNpbmcgYW5ndWxhciBpbmplY3Rpb24uXG4gKiBgYGBcbiAqICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZjZEFwaTogVmNkQXBpQ2xpZW50KSB7fVxuICogYGBgXG4gKlxuICogVmNkQXBpQ2xpZW50IHJldXNlcyB0aGUgYXV0aGVudGljYXRpb24gZnJvbSB0aGUgVkNEIHBsYXRmb3JtIHNvIGluIGdlbmVyYWwgdGhlcmUgaXNcbiAqIG5vIG5lZWQgb2YgYW4gZXhwbGljaXQgYXV0aGVudGljYXRpb24vbG9naW4uXG4gKlxuICogV2hlbiBkZWFsaW5nIHdpdGggdGhlIHNlc3Npb24gbWFuYWdlbWVudCB0aGVyZSBhcmUgdHdvIEFQSXM6XG4gKiAxLiBEZXByZWNhdGVkIGxlZ2FjeSBBUEkgdGhhdCBpcyB1c2luZyB0aGUgYGFwaS9zZXNzaW9uYCBlbmRwb2ludCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWxzXG4gKiAyLiBOZXdseSBhZGRlZCBBUEkgdGhhdCBpcyB1c2luZyB0aGUgYGNsb3VkYXBpYCBlbmRwb2ludCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWxzXG4gKlxuICogTm90ZSB0aGF0IGlmIGEgcGx1Z2luIHBlcmZvcm1zIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoZW50aWNhdGlvbiBjYWxsIHRocm91Z2hcbiAqIHtAbGluayBWY2RBcGlDbGllbnQjc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbn0gb3Ige0BsaW5rIFZjZEFwaUNsaWVudCNjbG91ZEFwaUxvZ2lufVxuICogZnJvbSB0aGF0IG1vbWVudCBvbiB0aGUgVmNkQXBpQ2xpZW50IHVzZXMgb25seSBjbG91ZCBhcGkgc2Vzc2lvbiBtYW5hZ2VtZW50LlxuICogVGhpcyBtZWFucyBjYWxscyB0byB7QGxpbmsgVmNkQXBpQ2xpZW50I3NldEF1dGhlbnRpY2F0aW9ufSBvciB7QGxpbmsgVmNkQXBpQ2xpZW50I2xvZ2lufSBoYXZlIG5vIGVmZmVjdC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZjZEFwaUNsaWVudCB7XG4gICAgc2V0IGJhc2VVcmwoX2Jhc2VVcmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9iYXNlVXJsID0gX2Jhc2VVcmw7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLnZlcnNpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbmVnb3RpYXRlVmVyc2lvbjogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIHByaXZhdGUgX2Jhc2VVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgVmNkQXBpQ2xpZW50I19jbG91ZEFwaVNlc3Npb259XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogQmVoYXZpb3JTdWJqZWN0PFNlc3Npb25UeXBlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvblR5cGU+KG51bGwpO1xuICAgIHByaXZhdGUgX3Nlc3Npb25PYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFNlc3Npb25UeXBlPiA9IHRoaXMuX3Nlc3Npb24uYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBza2lwV2hpbGUoc2Vzc2lvbiA9PiAhc2Vzc2lvbilcbiAgICAgICAgKTtcbiAgICBwcml2YXRlIF9nZXRTZXNzaW9uOiBPYnNlcnZhYmxlPFNlc3Npb25UeXBlPjtcblxuICAgIC8qKlxuICAgICAqIENsb3VkQXBpIFNlc3Npb25cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jbG91ZEFwaVNlc3Npb246IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvbj4obnVsbCk7XG4gICAgcHJpdmF0ZSBfY2xvdWRBcGlTZXNzaW9uT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxTZXNzaW9uPiA9IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbi5hc09ic2VydmFibGUoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXBXaGlsZShzZXNzaW9uID0+ICFzZXNzaW9uKVxuICAgICAgICApO1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBoYXMgYSBzcGVjaWFsIHB1cnBvc2Ugd2hlbiBkb2luZyBhdXRvbWF0aWMgbG9naW4gZHVyaW5nIHRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbi5cbiAgICAgKiBJdCBhbGxvd3MgYmFja2VuZCBjYWxsIG9ubHkgYWZ0ZXIgYW4gQVBJIHZlcnNpb24gaXMgc2V0LlxuICAgICAqIEl0IGFsc28gZW5zdXJlcyB0aGF0IGEgYmFja2VuZCBjYWxsIHRvIGdldCB0aGUgY3VycmVudCBzZXNzaW9uIGlzIGRvbmUgb25jZSBwcmlvciB0byBhbnkgb3RoZXIgY2FsbHMuXG4gICAgICpcbiAgICAgKiBJbiBjYXNlIG9mIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3QgdGhlcmUgaXMgbm8gbmVlZCBvZiB0aGlzIG9ic2VydmFibGVcbiAgICAgKiBzaW5jZSB0aGlzIGF1dGggcmVxdWVzdCB3aWxsIHJldHJpZXZlIHRoZSBzZXNzaW9uIGl0c2VsZlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldENsb3VkQXBpU2Vzc2lvbjogT2JzZXJ2YWJsZTxTZXNzaW9uPjtcblxuICAgIHByaXZhdGUgX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzOiBCZWhhdmlvclN1YmplY3Q8TGlua1R5cGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExpbmtUeXBlW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIENhY2hlZCwgbGF6eSBsb2FkZWQgb2JzZXJ2YWJsZSBvZiB0aGUgQWNjZXNzaWJsZUxvY2F0aW9uIGFycmF5XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zOiBPYnNlcnZhYmxlPEFjY2Vzc2libGVMb2NhdGlvbltdPjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyBpZiBpdCBpcyBhbiBleHBsaWNpdCBjbG91ZCBhcGkgbG9naW4uXG4gICAgICogSW4gdGhpcyBjYXNlIHRoZSBvbGQgQVBJICgvYXBpL3Nlc3Npb24pIHNob3VsZCBub3QgYmUgdXNlZCBhdCBhbGwuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNDbG91ZEFwaUxvZ2luID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHByaXZhdGUgaHR0cDogVmNkSHR0cENsaWVudCxcbiAgICAgICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWc/OiBWY2RTZGtDb25maWcsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSB0aGlzLmluamVjdG9yLmdldChBUElfUk9PVF9VUkwpO1xuXG4gICAgICAgIGxldCBuZWdvdGlhdGVkVmVyc2lvbjogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmFwaVZlcnNpb24pIHtcbiAgICAgICAgICAgIG5lZ290aWF0ZWRWZXJzaW9uID0gb2YodGhpcy5jb25maWcuYXBpVmVyc2lvbikucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZ290aWF0ZWRWZXJzaW9uID0gdGhpcy5odHRwLmdldDxTdXBwb3J0ZWRWZXJzaW9uc1R5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS92ZXJzaW9uc2ApLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHZlcnNpb25zID0+IHRoaXMubmVnb3RpYXRlVmVyc2lvbih2ZXJzaW9ucykpLFxuICAgICAgICAgICAgICAgIHRhcCh2ZXJzaW9uID0+IHRoaXMuc2V0VmVyc2lvbih2ZXJzaW9uKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmVnb3RpYXRlVmVyc2lvbiA9IG5lZ290aWF0ZWRWZXJzaW9uLnBpcGUoXG4gICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5Ib2xkZXI6IEF1dGhUb2tlbkhvbGRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCB7IHRva2VuOiAnJyB9KTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbkhvbGRlci5qd3QgPyBgQmVhcmVyICR7dG9rZW5Ib2xkZXIuand0fWAgOiB0b2tlbkhvbGRlci50b2tlbjtcbiAgICAgICAgdGhpcy5fZ2V0U2Vzc2lvbiA9IHRoaXMuc2V0QXV0aGVudGljYXRpb24odG9rZW4pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbiA9IHRoaXMuc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbih0b2tlbilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBsb2dpblxuICAgICAgICB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5lZ290aWF0ZVZlcnNpb24oc2VydmVyVmVyc2lvbnM6IFN1cHBvcnRlZFZlcnNpb25zVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFZlcnNpb25zOiBzdHJpbmdbXSA9IHNlcnZlclZlcnNpb25zLnZlcnNpb25JbmZvLm1hcCh2ZXJzaW9uSW5mbyA9PiB2ZXJzaW9uSW5mby52ZXJzaW9uKTtcblxuICAgICAgICAvLyBEZWZhdWx0IEFQSSBWZXJzaW9uIHVzZWQgaXMgdGhlIExhdGVzdCBBUEkgVmVyc2lvbiBpbiBWTXdhcmUgQ2xvdWQgRGlyZWN0b3JcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZFZlcnNpb25zW3N1cHBvcnRlZFZlcnNpb25zLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZW5zdXJlIHRoYXQgcHJpb3IgdG8gc2VuZGluZyBhbnkgY2FsbCB0byB0aGUgYmFja2VuZFxuICAgICAqIHRoZSB2ZXJzaW9uIGhhcyBiZWVuIHNldCBhbmQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBoYXMgYmVlbiByZXRyaWV2ZWQuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGR1cmluZyB0aGUgYXV0b21hdGljIGF1dGhlbnRpY2F0aW9uIHRoYXQgaXMgZG9uZSBkdXJpbmcgdGhlXG4gICAgICogY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24sIHdoZW4gdGhlIHBsdWdpbiBpcyBub3QgcmVxdWlyZWQgdG8gcGVyZm9ybSBpdHMgb3duIGV4cGxpY2l0IGF1dGhlbnRpY2F0aW9uXG4gICAgICogYnV0IHJhdGhlciB0aGUgb25lcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGZyYW1ld29yayBpcyB1c2VkLlxuICAgICAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpOiBPYnNlcnZhYmxlPHRydWU+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZlcnNpb24gPyBvZih0aGlzLnZlcnNpb24pIDogdGhpcy5fbmVnb3RpYXRlVmVyc2lvbilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBjbG91ZCBhcGkgbG9naW4gd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSAvYXBpL3Nlc3Npb24gc2Vzc2lvblxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPyBvZihudWxsKSA6IHRoaXMuX2dldFNlc3Npb24pLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBjbG91ZCBhcGkgZmFpbHVyZSB3ZSBkbyBub3Qgd2FudCB0byBwcmV2ZW50IGZ1cnRoZXIgZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIHNpbmNlIHRoaXMgbWF5IGJlIGEgY2FzZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGNsb3VkIGFwaSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCBmb3IgdGhlIHNwZWNpZmllZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGUpID0+IG9mKHRydWUpKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBGb3IgdXNlIGNhc2VzIHdpY2ggc29sZWx5IGRlcGVuZHMgb24gY2xvdWRhcGkgd2l0aG91dCBhbnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqIHRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmNlIG9uIHRoZSBvbGQgL2FwaSBlbmRwb2ludCBhdCBhbGxcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlUmVxdWVzdENvbnRleHRDbG91ZEFwaU9ubHkoKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHJldHVybiAodGhpcy52ZXJzaW9uID8gb2YodGhpcy52ZXJzaW9uKSA6IHRoaXMuX25lZ290aWF0ZVZlcnNpb24pLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWZXJzaW9uKF92ZXJzaW9uOiBzdHJpbmcpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci52ZXJzaW9uID0gX3ZlcnNpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdsb2JhbCBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZSwgdGhhdCBhbGxvd3MgYSBwcm92aWRlciB1c2VyIHRvIGV4ZWN1dGUgQVBJIHJlcXVlc3RzXG4gICAgICogaW4gdGhlIHNjb3BlIG9mIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gZXhlY3V0ZSBzaW5nbGUgQVBJIHJlcXVlc3QgaW4gc2NvcGUgb2Ygc3BlY2lmaWMgdGVuYW50IHlvdSBjYW4gZG8gaXRcbiAgICAgKiBieSBwYXNzaW5nIFwiWC1WTVdBUkUtVkNMT1VELVRFTkFOVC1DT05URVhUXCIgaGVhZGVyIHRvIHRoZSBzcGVjaWZpYyBBUEkgUmVxdWVzdC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2NvcGluZyBpcyBhdmFpbGFibGUgdG8gcXVlcnktYmFzZWQgQVBJIGNhbGxzIGFuZCB0byBidWxrIEdFVCBjYWxscyBpbiB0aGVcbiAgICAgKiAvY2xvdWRhcGkgc3BhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0QXMgYW4gZW50aXR5UmVmIG9mIHRoZSB0ZW5hbnQgKG9yZ2FuaXphdGlvbikgdG8gc2NvcGUgc3Vic2VxdWVudCBjYWxscyB0byBpblxuICAgICAqICB0aGUgVmNkQXBpQ2xpZW50LCBvciBudWxsL25vIHBhcmFtZXRlciB0byByZW1vdmUgdGVuYW50LXNwZWNpZmljIHNjb3BpbmdcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWY2RBcGlDbGllbnQgaW5zdGFuY2UgKGZvciBjaGFpbmluZylcbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0QXMoYWN0QXM6IEVudGl0eVJlZmVyZW5jZVR5cGUgPSBudWxsKTogVmNkQXBpQ2xpZW50IHtcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYWN0QXMgPSAhYWN0QXMgPyBudWxsIDogYWN0QXMuaWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgVmNkQXBpQ2xpZW50I3NldENsb3VkQXBpQXV0aGVudGljYXRpb259XG4gICAgICpcbiAgICAgKiBTZXRzIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbiB0byB1c2UgZm9yIHRoZSBWY2RBcGlDbGllbnQuXG4gICAgICpcbiAgICAgKiBBZnRlciBzZXR0aW5nIHRoZSB0b2tlbiwgdGhlIGNsaWVudCB3aWxsIGdldCB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGF1dGhlbnRpY2F0aW9uIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcgKHRvIGJlIHVzZWQgaW4gZWl0aGVyIHRoZSAnQXV0aG9yaXphdGlvbidcbiAgICAgKiAgb3IgJ3gtdmNsb3VkLWF1dGhvcml6YXRpb24nIGhlYWRlcilcbiAgICAgKiBAcmV0dXJucyB0aGUgc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gICAgICovXG4gICAgcHVibGljIHNldEF1dGhlbnRpY2F0aW9uKGF1dGhlbnRpY2F0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb25UeXBlPiB7XG4gICAgICAgIGlmICh0aGlzLl9pc0Nsb3VkQXBpTG9naW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdPbmx5IGNsb3VkIGFwaSBhdXRoIGlzIGFsbG93ZWQgc2luY2UgaXQgd2FzIGFscmVhZHkgdXNlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSBhdXRoZW50aWNhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2Vzc2lvblR5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9zZXNzaW9uYCkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoc2Vzc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IGFjdEFzIGZvciBwcm92aWRlciBpbiB0ZW5hbnQgc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24ub3JnID09PSAnU3lzdGVtJyAmJiB0aGlzLmluamVjdG9yLmdldChTRVNTSU9OX1NDT1BFKSA9PT0gJ3RlbmFudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF1dG9tYXRpYyBhY3RBcyBvbmx5IHdvcmtzIGluIHZlcnNpb25zID49OS41XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0QXMoe2lkOiB0aGlzLmluamVjdG9yLmdldChTRVNTSU9OX09SR19JRCl9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIFNFU1NJT05fT1JHX0lEIHNldCBpbiBjb250YWluZXIuIEF1dG9tYXRpYyBhY3RBcyBpcyBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRhcChzZXNzaW9uID0+IHRoaXMuX3Nlc3Npb24ubmV4dChzZXNzaW9uKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXV0aGVudGljYXRpb24gdG9rZW4gdG8gdXNlIGZvciB0aGUgVmNkQXBpQ2xpZW50LlxuICAgICAqXG4gICAgICogQWZ0ZXIgc2V0dGluZyB0aGUgdG9rZW4sIHRoZSBjbGllbnQgd2lsbCBnZXQgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgICAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0aGVudGljYXRlZCB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhdXRoZW50aWNhdGlvbiB0aGUgYXV0aGVudGljYXRpb24gc3RyaW5nICh0byBiZSB1c2VkIGluIGVpdGhlciB0aGUgJ0F1dGhvcml6YXRpb24nXG4gICAgICogIG9yICd4LXZjbG91ZC1hdXRob3JpemF0aW9uJyBoZWFkZXIpXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBzZXNzaW9uIG9ic2VydmFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKGF1dGhlbnRpY2F0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNsb3VkQXBpQXV0aGVudGljYXRpb24oKTtcblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgYXV0aGVudGljYXRpb24gYXMgcGFydCBvZiB0aGUgb2JzZXJ2YWJsZSBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGNhbGxlciBoYXMgc3Vic2NyaWJlZCB0byB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9IGF1dGhlbnRpY2F0aW9uKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5odHRwLmdldDxTZXNzaW9uPihgJHt0aGlzLl9iYXNlVXJsfS9jbG91ZGFwaS8xLjAuMC9zZXNzaW9ucy9jdXJyZW50YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRoaXMub25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuYWJsZUxvZ2dpbmcoKTogVmNkQXBpQ2xpZW50IHtcbiAgICAgICAgdGhpcy5odHRwLmxvZ2dpbmdJbnRlcmNlcHRvci5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFZjZEFwaUNsaWVudCNjbG91ZEFwaUxvZ2lufVxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBhdXRoZW50aWNhdGVkIHNlc3Npb24gZm9yIHRoZSBzcGVjaWZpZWQgY3JlZGVudGlhbCBkYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXJuYW1lIHRoZSBuYW1lIG9mIHRoZSB1c2VyIHRvIGF1dGhlbnRpY2F0ZVxuICAgICAqIEBwYXJhbSB0ZW5hbnQgdGhlIG9yZ2FuaXphdGlvbiB0aGUgdXNlciBiZWxvbmdzIHRvXG4gICAgICogQHBhcmFtIHBhc3N3b3JkIHRoZSBwYXNzd29yZCBmb3IgdGhlIHVzZXJcbiAgICAgKiBAcmV0dXJucyBhbiBhdXRoZW50aWNhdGVkIHNlc3Npb24gZm9yIHRoZSBnaXZlbiBjcmVkZW50aWFsc1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCB0ZW5hbnQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xvdWRBcGlMb2dpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09ubHkgY2xvdWQgYXBpIGF1dGggaXMgYWxsb3dlZCBzaW5jZSBpdCB3YXMgYWxyZWFkeSB1c2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXV0aFN0cmluZzogc3RyaW5nID0gYnRvYShgJHt1c2VybmFtZX1AJHt0ZW5hbnR9OiR7cGFzc3dvcmR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNlc3Npb25UeXBlPihcbiAgICAgICAgICAgIGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9zZXNzaW9uc2AsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7YXV0aFN0cmluZ31gfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PlxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9IGAke3Jlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXZtd2FyZS12Y2xvdWQtdG9rZW4tdHlwZScpfSAke3Jlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXZtd2FyZS12Y2xvdWQtYWNjZXNzLXRva2VuJyl9YFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5ib2R5KSxcbiAgICAgICAgICAgIHRhcChzZXNzaW9uID0+IHRoaXMuX3Nlc3Npb24ubmV4dChzZXNzaW9uKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIGRhdGEgdXNpbmcgY2xvdWQgYXBpIGVuZHBvaW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXJuYW1lIHRoZSBuYW1lIG9mIHRoZSB1c2VyIHRvIGF1dGhlbnRpY2F0ZVxuICAgICAqIEBwYXJhbSB0ZW5hbnQgdGhlIG9yZ2FuaXphdGlvbiB0aGUgdXNlciBiZWxvbmdzIHRvXG4gICAgICogQHBhcmFtIHBhc3N3b3JkIHRoZSBwYXNzd29yZCBmb3IgdGhlIHVzZXJcbiAgICAgKiBAcmV0dXJucyBhbiBhdXRoZW50aWNhdGVkIHNlc3Npb24gZm9yIHRoZSBnaXZlbiBjcmVkZW50aWFsc1xuICAgICAqL1xuICAgIHB1YmxpYyBjbG91ZEFwaUxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHRlbmFudDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHRoaXMub25CZWZvcmVDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgYXV0aFN0cmluZzogc3RyaW5nID0gYnRvYShgJHt1c2VybmFtZX1AJHt0ZW5hbnR9OiR7cGFzc3dvcmR9YCk7XG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLl9iYXNlVXJsfS9jbG91ZGFwaS8xLjAuMC9zZXNzaW9uc2A7XG4gICAgICAgIGlmICh0ZW5hbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3N5c3RlbScpIHtcbiAgICAgICAgICAgIHVybCArPSAnL3Byb3ZpZGVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2Vzc2lvbj4oXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgW0hUVFBfSEVBREVSUy5BdXRob3JpemF0aW9uXTogYEJhc2ljICR7YXV0aFN0cmluZ31gIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICkucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxTZXNzaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IGAke3Jlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXZtd2FyZS12Y2xvdWQtdG9rZW4tdHlwZScpfSAke3Jlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXZtd2FyZS12Y2xvdWQtYWNjZXNzLXRva2VuJyl9YDtcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9IHRva2VuO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLm9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXQgaXMgbmVjZXNzYXJ5IHRvIGtub3cgaWYgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdCB3YXMgZG9uZS5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyBieSBzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLCBwcm9wZXJ0aWVzIGV0Yy5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQmVmb3JlQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0OlxuICAgICAgICAvLyBTZXQgdGhlIGZsYWcgX2lzQ2xvdWRBcGlMb2dpbiBpbiBvcmRlciB0byBrbm93IHRoYXQgZXhwbGljaXQgY2xvdWQgYXBpIGF1dGhlbnRpY2F0aW9uIGlzIGRvbmVcbiAgICAgICAgLy8gVGhpcyB3aWxsIGhlbHAgdXMgc2tpcCBjb2RlIHJlbGF0ZWQgdG8gdGhlIG9sZCBhcGksIGkuZS4gd2Ugc2hvdWxkIG5vdCBhbGxvdyBleHBsaWNpdCBtaXggb2YgYm90aCB0aGUgYXBpLXNcbiAgICAgICAgdGhpcy5faXNDbG91ZEFwaUxvZ2luID0gdHJ1ZTtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0OlxuICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIG9mIF9nZXRDbG91ZEFwaVNlc3Npb24gb2JzZXJ2YWJsZSB3aGljaCBpcyBuZWVkZWQgaW4gdGhlIGF1dG9tYXRpYyBsb2dpbiBkdXJpbmcgdGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLlxuICAgICAgICAvLyBUaGUgZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdCB3aWxsIHJldHJpZXZlIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb24gPSBvZihudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgYXV0aGVudGljYXRpb24uXG4gICAgICogVGhpcyBpbmNsdWRlcyBnZXR0aW5nIEhBVEVPQVMgbGlua3MsIHNldHRpbmcgdGhlIHNlc3Npb24sIGhhbmRsaW5nIGVycm9ycyBldGMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkNsb3VkQXBpQXV0aGVudGljYXRpb24oKTogKHNvdXJjZTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8U2Vzc2lvbj4+KSA9PiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgcmV0dXJuIChzb3VyY2UpID0+IHNvdXJjZS5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXNwOiBIdHRwUmVzcG9uc2U8U2Vzc2lvbj4pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgSEFURU9BUyBsaW5rc1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2xvdWRBcGlTZXNzaW9uTGlua3MocGFyc2VIZWFkZXJIYXRlb2FzTGlua3MocmVzcC5oZWFkZXJzLmdldChIQVRFT0FTX0hFQURFUikpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIHBhcnNpbmcgc2Vzc2lvbiBIQVRFT0FTIGxpbmtzOicsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHJlc3AgPT4gcmVzcC5ib2R5KSxcbiAgICAgICAgICAgIHRhcCgoc2Vzc2lvbjogU2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHByZXZpb3VzIGFjdEFzXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RBcyhudWxsKTtcbiAgICAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNldCBhY3RBcyBmb3IgcHJvdmlkZXIgaW4gdGVuYW50IHNjb3BlXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24ub3JnICYmIHNlc3Npb24ub3JnLm5hbWUgPT09ICdTeXN0ZW0nICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fU0NPUEUpID09PSAndGVuYW50Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBdXRvbWF0aWMgYWN0QXMgb25seSB3b3JrcyBpbiB2ZXJzaW9ucyA+PTkuNVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RBcyh7IGlkOiB0aGlzLmluamVjdG9yLmdldChTRVNTSU9OX09SR19JRCkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gU0VTU0lPTl9PUkdfSUQgc2V0IGluIGNvbnRhaW5lci4gQXV0b21hdGljIGFjdEFzIGlzIGRpc2FibGVkLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKHNlc3Npb246IFNlc3Npb24pID0+IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbi5uZXh0KHNlc3Npb24pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbkVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uRXJyb3IoKSB7XG4gICAgICAgIC8vIENsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBzbyB0aGF0IGFueSBzdWJzZXF1ZW50IGJhY2tlbmQgY2FsbHMgYXJlIG5vdCBhdXRoZW50aWNhdGVkXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gJyc7XG4gICAgICAgIC8vIF9nZXRDbG91ZEFwaVNlc3Npb24gaXMgaW4gdGhlIGNlbnRlciBvZiBhbnkgYmFja2VuZCBjYWxsLCBudWxsaWZ5IGl0IGluIG9yZGVyIG5vdCB0byBwcmV2ZW50IHRob3NlIGNhbGxzXG4gICAgICAgIC8vIHNpbmNlIGl0IGlzIGVhc2llciB0byB0cm91Ymxlc2hvb3QgZmFpbGluZyBiYWNrZW5kIHJhdGhlciB0aGFuIG5vIGNhbGxcbiAgICAgICAgdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uID0gb2YobnVsbCk7XG4gICAgICAgIC8vIENsZWFyIHRoZSBsaW5rc1xuICAgICAgICB0aGlzLl9jbG91ZEFwaVNlc3Npb25MaW5rcy5uZXh0KFtdKTtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIHNlc3Npb25cbiAgICAgICAgdGhpcy5fY2xvdWRBcGlTZXNzaW9uLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDbG91ZEFwaVNlc3Npb25MaW5rcyhsaW5rczogTGlua1R5cGVbXSkge1xuICAgICAgICB0aGlzLl9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnMgPSBudWxsO1xuICAgICAgICB0aGlzLl9jbG91ZEFwaVNlc3Npb25MaW5rcy5uZXh0KGxpbmtzIHx8IFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0PFQ+KGVuZHBvaW50OiBzdHJpbmcsICBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksIHsuLi5vcHRpb25zfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGxpc3Q8VD4oZW5kcG9pbnQ6IHN0cmluZywgcXVlcnlCdWlsZGVyPzogUXVlcnkuQnVpbGRlciwgbXVsdGlzaXRlPzogYm9vbGVhbiB8IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5QnVpbGRlcikge1xuICAgICAgICAgICAgdXJsID0gYCR7dXJsfSR7cXVlcnlCdWlsZGVyLmdldENsb3VkQVBJKCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtdWx0aXNpdGUpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHVybCwgeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBfbXVsdGlzaXRlOiB0aGlzLnBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlKSB9KSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5hcHBlbmQoXCJfbXVsdGlzaXRlXCIsIHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih1cmwsIHsgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VD4odXJsLCB7IC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVN5bmM8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLnBvc3Q8VD4oXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsuLi5vcHRpb25zfVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQXN5bmM8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB7IC4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjb25jYXRNYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBSZXNwb25zZVRvVGFzayhyZXNwb25zZSwgJ1BPU1QnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHJhbnNmZXJMaW5rPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIHRyYW5zZmVyUmVsOiBzdHJpbmcgPSBUUkFOU0ZFUl9MSU5LX1JFTCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksIGl0ZW0sIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxUICYgTmF2aWdhYmxlPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJMaW5rczogTGlua1R5cGVbXSA9IHJlcy5oZWFkZXJzLmhhcyhIQVRFT0FTX0hFQURFUilcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VIZWFkZXJIYXRlb2FzTGlua3MocmVzLmhlYWRlcnMuZ2V0KEhBVEVPQVNfSEVBREVSKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtzOiBMaW5rVHlwZVtdID0gcmVzLmJvZHkgPyAocmVzLmJvZHkubGluayB8fCBbXSkgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluayA9IFsuLi5oZWFkZXJMaW5rcywgLi4ubGlua3NdXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgobCkgPT4gbC5yZWwgPT09IHRyYW5zZmVyUmVsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBSZXNwb25zZSBmcm9tICR7ZW5kcG9pbnR9IGRpZCBub3QgY29udGFpbiBhIHRyYW5zZmVyIGxpbmtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRFcnJvclR5cGUuSGF0ZW9hc0xpbmtNaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5rLmhyZWY7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0VHJhbnNmZXI8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgdHJhbnNmZXJSZWw6IHN0cmluZyA9IFRSQU5TRkVSX0xJTktfUkVMKTogT2JzZXJ2YWJsZTxWY2RUcmFuc2ZlckNsaWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckxpbmsoZW5kcG9pbnQsIGl0ZW0sIHRyYW5zZmVyUmVsKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCh0cmFuc2ZlclVybCkgPT4gbmV3IFZjZFRyYW5zZmVyQ2xpZW50KHRoaXMuaHR0cCwgdHJhbnNmZXJVcmwpKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucHV0PFQ+KFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB7IC4uLm9wdGlvbnMgfVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQXN5bmM8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLnB1dChcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH1cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgY29uY2F0TWFwKHJlc3BvbnNlID0+IHRoaXMubWFwUmVzcG9uc2VUb1Rhc2socmVzcG9uc2UsICdQVVQnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlU3luYyhlbmRwb2ludDogc3RyaW5nLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQXN5bmMoZW5kcG9pbnQ6IHN0cmluZywgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5kZWxldGUodGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgeyAuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChyZXNwb25zZSA9PiB0aGlzLm1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlLCAnREVMRVRFJykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBSZXNwb25zZVRvVGFzayhyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4sIGh0dHBWZXJiOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmhhcygnTG9jYXRpb24nKSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VGFza1R5cGU+KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkudHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi92bmQudm13YXJlLnZjbG91ZC50YXNrKycpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrOiBUYXNrVHlwZSA9IE9iamVjdC5hc3NpZ24obmV3IFRhc2tUeXBlKCksIHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRhc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgIGBBbiBhc3luY2hyb25vdXMgcmVxdWVzdCB3YXMgbWFkZSB0byBbJHtodHRwVmVyYn0gJHtyZXNwb25zZS51cmx9XSwgYnV0IG5vIHRhc2sgd2FzIHJldHVybmVkLiAgVGhlIG9wZXJhdGlvbiBtYXkgc3RpbGwgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwuYCxcbiAgICAgICAgICAgIENsaWVudEVycm9yVHlwZS5UYXNrTGlua01pc3NpbmdcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4oZW50aXR5UmVmOiBFbnRpdHlSZWZlcmVuY2VUeXBlKTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4odXJuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBnZXRFbnRpdHk8VCBleHRlbmRzIEVudGl0eVJlZmVyZW5jZVR5cGU+KGVudGl0eVJlZk9yVXJuOiBFbnRpdHlSZWZlcmVuY2VUeXBlIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGVudGl0eVJlc29sdmVyOiBPYnNlcnZhYmxlPEVudGl0eVR5cGU+ID0gdHlwZW9mIGVudGl0eVJlZk9yVXJuID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEVudGl0eVR5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9lbnRpdHkvJHtlbnRpdHlSZWZPclVybn1gKSA6XG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEVudGl0eVR5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9lbnRpdHkvdXJuOnZjbG91ZDoke2VudGl0eVJlZk9yVXJuLnR5cGV9OiR7ZW50aXR5UmVmT3JVcm4uaWR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gZW50aXR5UmVzb2x2ZXIpLFxuICAgICAgICAgICAgY29uY2F0TWFwKGVudGl0eSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KGAke2VudGl0eS5saW5rWzBdLmhyZWZ9YCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVRhc2sodGFzazogVGFza1R5cGUsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFRhc2tUeXBlPih0YXNrLmhyZWYsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUYXNrQ29tcGxldGUodGFzazogVGFza1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycsICdlcnJvcicsICdjYW5jZWxlZCcsICdhYm9ydGVkJ10uaW5kZXhPZih0YXNrLnN0YXR1cykgPiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShpdGVtOiBOYXZpZ2FibGUsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsoaXRlbSwgJ3JlbW92ZScsIG51bGwpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgYE5vICdyZW1vdmUnIGxpbmsgZm9yIHNwZWNpZmllZCByZXNvdXJjZS5gLFxuICAgICAgICAgICAgICBDbGllbnRFcnJvclR5cGUuSGF0ZW9hc0xpbmtNaXNzaW5nXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5kZWxldGU8VGFza1R5cGU+KGxpbmsuaHJlZiwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBRdWVyeS5CdWlsZGVyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1aWxkZXIgQW4gZGVmaW5pdGlvbiBvZiB0aGUgcXVlcnkgdG8gY29uc3RydWN0ICh0eXBlLCBmaWx0ZXIsIHBhZ2Ugc2l6ZSwgZXRjLilcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyBhIHF1ZXJ5IHJlc3VsdCBmb3IgdGhlIHNwZWNpZmllZCBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBxdWVyeTxUPihidWlsZGVyOiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIFF1ZXJ5LkJ1aWxkZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVpbGRlciBBbiBkZWZpbml0aW9uIG9mIHRoZSBxdWVyeSB0byBjb25zdHJ1Y3QgKHR5cGUsIGZpbHRlciwgcGFnZSBzaXplLCBldGMuKVxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyBhIHF1ZXJ5IHJlc3VsdCBmb3IgdGhlIHNwZWNpZmllZCBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgcXVlcnk8VD4oYnVpbGRlcjogUXVlcnkuQnVpbGRlciwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIHF1ZXJ5PFQ+KGJ1aWxkZXI6IFF1ZXJ5LkJ1aWxkZXIsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9xdWVyeSR7YnVpbGRlci5nZXQoKX1gLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgZmlyc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlyc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgZmlyc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgZmlyc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsocmVzdWx0LCAnZmlyc3RQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgYE5vICdmaXJzdFBhZ2UnIGxpbmsgZm9yIHNwZWNpZmllZCBxdWVyeS5gLFxuICAgICAgICAgICAgICBDbGllbnRFcnJvclR5cGUuSGF0ZW9hc0xpbmtNaXNzaW5nXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZShsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0ZpcnN0UGFnZTxUPihyZXN1bHQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhyZXN1bHQsICdmaXJzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBwcmV2aW91cyBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBwcmV2aW91cyBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdwcmV2aW91c1BhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgICAgICBgTm8gJ3ByZXZpb3VzUGFnZScgbGluayBmb3Igc3BlY2lmaWVkIHF1ZXJ5LmAsXG4gICAgICAgICAgICAgIENsaWVudEVycm9yVHlwZS5IYXRlb2FzTGlua01pc3NpbmdcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2UobGluay5ocmVmLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNQcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsocmVzdWx0LCAncHJldmlvdXNQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIG5leHRQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIG5leHRQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsocmVzdWx0LCAnbmV4dFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgICAgICBgTm8gJ25leHRQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCxcbiAgICAgICAgICAgICAgQ2xpZW50RXJyb3JUeXBlLkhhdGVvYXNMaW5rTWlzc2luZ1xuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZTxUPihsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc05leHRQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ25leHRQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBsYXN0IHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIGxhc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIGxhc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIGxhc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsocmVzdWx0LCAnbGFzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENsaWVudEVycm9yKFxuICAgICAgICAgICAgICBgTm8gJ2xhc3RQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCxcbiAgICAgICAgICAgICAgQ2xpZW50RXJyb3JUeXBlLkhhdGVvYXNMaW5rTWlzc2luZ1xuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2UobGluay5ocmVmLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNMYXN0UGFnZTxUPihyZXN1bHQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhyZXN1bHQsICdsYXN0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFF1ZXJ5UGFnZTxUPihocmVmOiBzdHJpbmcsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKG11bHRpc2l0ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oaHJlZiwgeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBfbXVsdGlzaXRlOiB0aGlzLnBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlKSB9KSB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLmFwcGVuZChcIl9tdWx0aXNpdGVcIiwgdGhpcy5wYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGhyZWYsIHsgLi4ub3B0aW9ucyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmdldDxUPihocmVmLCB7IC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdG8gcGVyZm9ybSBhY3Rpb24gYXZhaWxhYmlsaXR5IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHRoZSBBUElcbiAgICogQHBhcmFtIGl0ZW0gLSB0aGUgbmF2aWdhYmxlIGl0ZW0gKGNvbnRhaW5pbmcgbGluayBjb2xsZWN0aW9uKVxuICAgKiBAcGFyYW0gbGlua1JlbFR5cGUgLSB0aGUgbGluayByZWwgdHlwZSwgcGFzcyBlaXRoZXIgTGlua1JlbFR5cGUgb3Igc3RyaW5nXG4gICAqIEBwYXJhbSBlbnRpdHlSZWZUeXBlIC0gdGhlIGVudGl0eSByZWZlcmVuY2UgdHlwZVxuICAgKi9cbiAgICBwdWJsaWMgY2FuUGVyZm9ybUFjdGlvbihpdGVtOiBOYXZpZ2FibGUsIGxpbmtSZWxUeXBlOiBMaW5rUmVsVHlwZSB8IHN0cmluZywgZW50aXR5UmVmVHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKGl0ZW0sIGxpbmtSZWxUeXBlLCBlbnRpdHlSZWZUeXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRMaW5rKGl0ZW06IE5hdmlnYWJsZSwgcmVsOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IExpbmtUeXBlIHtcbiAgICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5saW5rLmZpbmQoKGxpbmspID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmsucmVsLmluY2x1ZGVzKHJlbCkgJiYgbGluay50eXBlID09PSB0eXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbGluay5yZWwuaW5jbHVkZXMocmVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZTogYm9vbGVhbiB8IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbXVsdGlzaXRlID09PSAnYm9vbGVhbicgPyAobXVsdGlzaXRlID8gJ2dsb2JhbCcgOiAnbG9jYWwnKSA6IG11bHRpc2l0ZS5tYXAoc2l0ZSA9PiBzaXRlLmxvY2F0aW9uSWQpLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgY2xvdWRBcGlTZXNzaW9uXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZXNzaW9uKCk6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fc2Vzc2lvbk9ic2VydmFibGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFNlc3Npb24gb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2xvdWRBcGlTZXNzaW9uKCk6IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0Q2xvdWRBcGlPbmx5KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9jbG91ZEFwaVNlc3Npb25PYnNlcnZhYmxlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlcm5hbWUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvdWRBcGlTZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9pc0Nsb3VkQXBpTG9naW4pLFxuICAgICAgICAgICAgICAgICAgICBtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uICYmIHNlc3Npb24udXNlciAmJiBzZXNzaW9uLnVzZXIubmFtZSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi51c2VyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvcmdhbml6YXRpb24oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5jbG91ZEFwaVNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5faXNDbG91ZEFwaUxvZ2luKSxcbiAgICAgICAgICAgICAgICBtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uICYmIHNlc3Npb24ub3JnICYmIHNlc3Npb24ub3JnLm5hbWUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLl9pc0Nsb3VkQXBpTG9naW4pLFxuICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi5vcmcpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGNsb3VkQXBpTG9jYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCk6IE9ic2VydmFibGU8QXV0aG9yaXplZExvY2F0aW9uVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICBtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uLmF1dGhvcml6ZWRMb2NhdGlvbnMubG9jYXRpb24uZmluZChsb2NhdGlvbiA9PiBsb2NhdGlvbi5sb2NhdGlvbklkID09PSBzZXNzaW9uLmxvY2F0aW9uSWQpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2xvdWRBcGlMb2NhdGlvbigpOiBPYnNlcnZhYmxlPEFjY2Vzc2libGVMb2NhdGlvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG91ZEFwaVNlc3Npb24ucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGNhY2hpbmcgZm9yIGdldHRpbmcgQWNjZXNzaWJsZUxvY2F0aW9uc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnMgPSB0aGlzLl9jbG91ZEFwaVNlc3Npb25MaW5rc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBBY2Nlc3NpYmxlTG9jYXRpb25zIGxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGxpbmtzKSA9PiB0aGlzLmZpbmRMaW5rKHsgbGluazogbGlua3MgfSwgJ2Rvd24nLCAnQWNjZXNzaWJsZUxvY2F0aW9ucycpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCBBY2Nlc3NpYmxlTG9jYXRpb25zIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGxpbms6IExpbmtUeXBlKSA9PiBsaW5rID8gdGhpcy5odHRwLmdldDxBY2Nlc3NpYmxlTG9jYXRpb25zPihsaW5rLmhyZWYpIDogb2YobnVsbCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgd2l0aCBhbGwgbG9jYXRpb25zICh3aGF0IGlmIHRoZXJlIGFyZSBtYW55IHBhZ2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoYWNjZXNzaWJsZUxvY2F0aW9uczogQWNjZXNzaWJsZUxvY2F0aW9ucykgPT4gYWNjZXNzaWJsZUxvY2F0aW9ucyAmJiBhY2Nlc3NpYmxlTG9jYXRpb25zLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnM7XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gTmVlZCB0byBoYXZlIHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGdldCBpdHMgbG9jYXRpb25cbiAgICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY2xvdWRBcGlTZXNzaW9uKSxcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGxvY2F0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBzZXNzaW9uXG4gICAgICAgICAgICBtYXAoKFthY2Nlc3NpYmxlTG9jYXRpb25zLCBzZXNzaW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjZXNzaWJsZUxvY2F0aW9ucyB8fCAhc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbkxvY2F0aW9uID0gc2Vzc2lvbi5sb2NhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb25Mb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc2libGVMb2NhdGlvbnMuZmluZChsb2NhdGlvbiA9PiBsb2NhdGlvbi5sb2NhdGlvbklkID09PSBzZXNzaW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExvY2F0aW9uKHNlc3Npb246IFNlc3Npb25UeXBlKTogQXV0aG9yaXplZExvY2F0aW9uVHlwZSB7XG4gICAgICAgIHJldHVybiBzZXNzaW9uLmF1dGhvcml6ZWRMb2NhdGlvbnMubG9jYXRpb24uZmluZChsb2NhdGlvbiA9PiBsb2NhdGlvbi5sb2NhdGlvbklkID09PSBzZXNzaW9uLmxvY2F0aW9uSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBlbmRwb2ludCB1cmwuIElmIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBhbHJlYWR5IGFuIGFic29sdXRlIFVSTCwgdGhlbiByZXR1cm4gaXQgYXMgaXQgaXMgd2l0aG91dFxuICAgICAqIGFueSBtb2RpZmljYXRpb25zLCBvdGhlcndpc2UgY29uc2lkZXIgaXQgYXMgYSByZWxhdGl2ZSBvbmUgYW5kIHByZXBlbmQgdGhlIGJhc2VVcmwgYXMgZGVmaW5lZCBieSB0aGUgaG9zdCBhcHBsaWNhdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBlbmRwb2ludC5pbmRleE9mKCc6Ly8nKSA+IC0xID8gZW5kcG9pbnQgOiBgJHt0aGlzLl9iYXNlVXJsfS8ke2VuZHBvaW50fWA7XG4gICAgfVxuXG59XG4iXX0=
@@ -82,4 +82,4 @@ export class _WizardExtensionWithContextComponent extends _WizardExtensionCompon
82
82
  }
83
83
  // tslint:disable-next-line:max-line-length
84
84
  export const WizardExtensionWithContextComponent = containerHooks.WizardExtensionWithContextComponent;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLWhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmNkL3Nkay9zcmMvY29tbW9uL2NvbnRhaW5lci1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHN0MsMERBQTBEO0FBQzFELElBQUksQ0FBRSxNQUFjLENBQUMsTUFBTSxJQUFJLENBQUUsTUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBRSxNQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7SUFDckcsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0NBQ2xEO0FBRUQsSUFBSSxjQUFjLEdBQVMsTUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUU7SUFDakIsY0FBYyxHQUFJLE1BQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0NBQzFFO0FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRTtJQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7Q0FDOUU7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLGNBQWMsQ0FBQyxZQUFZLENBQUM7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLGNBQWMsQ0FBQyxZQUFZLENBQUM7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUEyQixjQUFjLENBQUMsYUFBYSxDQUFDO0FBRWxGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUEyQixjQUFjLENBQUMsb0JBQW9CLENBQUM7QUFFaEc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUEyQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFekg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCLGNBQWMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTNJOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEyQixjQUFjLENBQUMsZUFBZSxDQUFDO0FBRXRGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUE0QixjQUFjLENBQUMsUUFBUSxDQUFDO0FBZ0N6RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBdUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDO0FBWWhJLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQixjQUFjLENBQUMsc0JBQXNCLENBQUM7QUErQzdGOztHQUVHO0FBQ0gsc0NBQXNDO0FBQ3RDLE1BQU0sT0FBZ0IsK0JBQStCO0NBaUJwRDtBQUNELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUEyQyxjQUFjLENBQUMsOEJBQThCLENBQUM7QUFFcEksc0NBQXNDO0FBQ3RDLE1BQU0sT0FBZ0IseUJBQXlCO0NBUzlDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQztBQU1sSCxzQ0FBc0M7QUFDdEMsTUFBTSxPQUFnQix1Q0FBaUQsU0FBUSx5QkFBa0M7Q0FLaEg7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQW1ELGNBQWMsQ0FBQyxzQ0FBc0MsQ0FBQztBQUU1Sjs7Ozs7R0FLRztBQUNILHNDQUFzQztBQUN0QyxNQUFNLE9BQWdCLG9DQUE4QyxTQUFRLHlCQUFrQztDQVE3RztBQUVELDJDQUEyQztBQUMzQyxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBZ0QsY0FBYyxDQUFDLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGlzIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIC0gYWxiZWl0IHZlcnkgbWluaW1hbCAtIHB1YmxpYyBTREsuXG4gKi9cbmltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLy8gQmluZCBzdHJhaWdodCBpbnRvIHRoZSBob29rcyBwcm92aWRlZCBieSB0aGUgY29udGFpbmVyLlxuaWYgKCEod2luZG93IGFzIGFueSkuU3lzdGVtIHx8ICEod2luZG93IGFzIGFueSkuU3lzdGVtLnJlZ2lzdHJ5IHx8ICEod2luZG93IGFzIGFueSkuU3lzdGVtLnJlZ2lzdHJ5LmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3lzdGVtSlMgcmVnaXN0cnkgbm90IGZvdW5kJyk7XG59XG5cbmxldCBjb250YWluZXJIb29rczogYW55ID0gKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeS5nZXQoJ0B2Y2QvY29tbW9uJyk7XG5pZiAoIWNvbnRhaW5lckhvb2tzKSB7XG4gICAgY29udGFpbmVySG9va3MgPSAod2luZG93IGFzIGFueSkuU3lzdGVtLnJlZ2lzdHJ5LmdldCgnQHZjZC11aS9jb21tb24nKTtcbn1cblxuaWYgKCFjb250YWluZXJIb29rcykge1xuICAgIHRocm93IG5ldyBFcnJvcignVkNEIFVJIGNvbnRhaW5lciBob29rcyBub3QgcHJlc2VudCBpbiBTeXN0ZW1KUyByZWdpc3RyeScpO1xufVxuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBzdHJpbmcuICBHaXZlcyB0aGUgcm9vdCBVUkwgZm9yIEFQSSBhY2Nlc3MgKGZvciBleGFtcGxlLCB0aGUgbG9hZCBiYWxhbmNlciBVUkxcbiAqIG9yIHRoZSBzaW5nbGUtY2VsbCBVUkwpLlxuICovXG5leHBvcnQgY29uc3QgQVBJX1JPT1RfVVJMOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuQVBJX1JPT1RfVVJMO1xuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBzdHJpbmcuICBHaXZlcyB0aGUgcm9vdCBVUkwgZm9yIHRoZSBsZWdhY3kgRmxleCBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEZMRVhfQVBQX1VSTDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLkFQSV9ST09UX1VSTDtcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIGN1cnJlbnQgc2NvcGUgb2YgdGhlIFZDRC1VSS4gIEFzIG9mIGN1cnJlbnQsIHRoaXMgd2lsbCBiZVxuICogZWl0aGVyICd0ZW5hbnQnIGZvciB0aGUgdGVuYW50IHBvcnRhbCwgb3IgJ3NlcnZpY2UtcHJvdmlkZXInIGZvciB0aGUgc2VydmljZS1wcm92aWRlciBwb3J0YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NDT1BFOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuU0VTU0lPTl9TQ09QRTtcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIHVuaXF1ZSBuYW1lIChub3QgdGhlIGRpc3BsYXkgbmFtZSkgb2YgdGhlIGN1cnJlbnQgdGVuYW50XG4gKiBvcmdhbml6YXRpb24gdGhhdCB0aGUgVkNELVVJIGlzIGJlaW5nIHVzZWQgZm9yLlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9PUkdBTklaQVRJT046IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5TRVNTSU9OX09SR0FOSVpBVElPTjtcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIFVVSUQgaWRlbnRpZmllciBvZiB0aGUgY3VycmVudCB0ZW5hbnRcbiAqIG9yZ2FuaXphdGlvbiB0aGF0IHRoZSBWQ0QtVUkgaXMgYmVpbmcgdXNlZCBmb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBTRVNTSU9OX09SR19JRDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLlNFU1NJT05fT1JHX0lEID8gY29udGFpbmVySG9va3MuU0VTU0lPTl9PUkdfSUQgOiAnJztcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIGZ1bGwgcm9vdCBwYXRoIGZvciBtb2R1bGUgYXNzZXRzIChlLmcuIGltYWdlcywgc2NyaXB0cywgdGV4dCBmaWxlcylcbiAqXG4gKiBBVFRFTlRJT04hXG4gKiBBZGQgfHwgbmV3IEluamVjdGlvblRva2VuIHRvIHdvcmthcm91bmQgdGhlIEFuZ3VsYXIgc2VjdXJpdHkgbWVjaGFuaWNzIHdoaWNoIHByZXZlbnQgdXNlIG9mIGluamVjdGlvbiB0b2tlbnNcbiAqIHdoaWNoIHBvdGVudGlhbGx5IGFyZSBub3QgZGVmaWVuZC4gVGhlIHNhbWUgZml4IGNhbiBiZSBhcHBsaWVkIGZvciB0aGUgcmVzdCB0b2tlbnMgaWYgbmVlZGVkLlxuICovXG5leHBvcnQgY29uc3QgRVhURU5TSU9OX0FTU0VUX1VSTDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLkVYVEVOU0lPTl9BU1NFVF9VUkwgfHwgbmV3IEluamVjdGlvblRva2VuKCdFWFRFTlNJT05fQVNTRVRfVVJMJyk7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBBbmd1bGFyIDIgcm91dGUgdGhhdCB0aGUgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgdW5kZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBFWFRFTlNJT05fUk9VVEU6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5FWFRFTlNJT05fUk9VVEU7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIGJvb2xlYW4uICBUcnVlIGlmIHJ1bm5pbmcgdW5kZXIgdGhlIFNESywgZmFsc2UgaWYgcnVubmluZyBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgU0RLX01PREU6IEluamVjdGlvblRva2VuPGJvb2xlYW4+ID0gY29udGFpbmVySG9va3MuU0RLX01PREU7XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgcmVnaXN0ZXJpbmcgYSBuYXZpZ2F0aW9uIG1lbnUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uTmF2UmVnaXN0cmF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm91dGVyIHBhdGggdG8gbmF2aWdhdGUgdG8gd2hlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwYXRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBpMTgga2V5IGZvciBuYW1lIG9mIGV4dGVuc2lvbiwgdG8gYmUgdXNlZCBhcyB0ZXh0IGZvciBsaW5rc1xuICAgICAqL1xuICAgIG5hbWVDb2RlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBpMThuIGtleSBmb3IgZGVzY3JpcHRpb24gb2YgZXh0ZW5zaW9uLCB0byBiZSB1c2VkIG9uIGhvdmVyIGZvciBsaW5rc1xuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uQ29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpc3BhdGNoIHRoaXMgdG8gdGhlIHJlZHV4IHN0b3JlIHRvIHJlZ2lzdGVyIGEgbmF2aWdhdGlvbiBtZW51LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbiB7XG4gICAgcGF5bG9hZDogRXh0ZW5zaW9uTmF2UmVnaXN0cmF0aW9uO1xuICAgIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uTmF2UmVnaXN0cmF0aW9uQWN0aW9uQ3RvciA9IG5ldyhwYXlsb2FkOiBFeHRlbnNpb25OYXZSZWdpc3RyYXRpb24pID0+IEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbjtcblxuZXhwb3J0IGNvbnN0IEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbjogRXh0ZW5zaW9uTmF2UmVnaXN0cmF0aW9uQWN0aW9uQ3RvciA9IGNvbnRhaW5lckhvb2tzLkV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbjtcblxuLyoqXG4gKiBJbmplY3QgdGhpcyB0byBhY2Nlc3MgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhUb2tlbkhvbGRlclNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbi5cbiAgICAgKi9cbiAgICB0b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQXV0aFRva2VuSG9sZGVyU2VydmljZToge3Rva2VuOiBzdHJpbmd9ID0gY29udGFpbmVySG9va3MuQXV0aFRva2VuSG9sZGVyU2VydmljZTtcblxuLyoqXG4gKiBUaGlzIHJlcHJlc2VudHMgYSBtZW51IGl0ZW0gdGhhdCBjYW4gYmUgY2xpY2tlZCB0byBwZXJmb3JtIGFuIGFjdGlvbiBvbiBhbiBlbnRpdHkgKGUuZy4gVk0pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUFjdGlvbkV4dGVuc2lvbk1lbnVJdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgdW5pcXVlIFVSTiBpZGVudGlmeWluZyB0aGUgYWN0aW9uLiBUaGlzIGlzIHNvIHRoZSBjb21wb25lbnQgY2FuIGJlIG5vdGlmaWVkIHdoaWNoIGFjdGlvbiB3YXMgcmVxdWVzdGVkLlxuICAgICAqL1xuICAgIHVybjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbGFiZWwgZm9yIHRoZSBtZW51IGl0ZW0uIEl0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQuXG4gICAgICovXG4gICAgdGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgZW5hYmxlZCBzdGF0ZSBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBlbmFibGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYnVzeSBzdGF0ZSBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBidXN5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgcmVwcmVzZW50cyBhIHN1Yi1tZW51IHRoYXQgY29udGFpbnMgb3RoZXIgc3ViLW1lbnVzIG9yIG1lbnUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBY3Rpb25FeHRlbnNpb25TdWJtZW51IHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBsYWJlbCBmb3IgdGhlIHN1Yi1tZW51LiBJdCBpcyBub3QgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkLlxuICAgICAqL1xuICAgIHRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gYXJiaXRyYXJ5LCBvcmRlcmVkIGxpc3Qgb2YgRW50aXR5QWN0aW9uTWVudUl0ZW0uXG4gICAgICovXG4gICAgY2hpbGRyZW46IEVudGl0eUFjdGlvbkV4dGVuc2lvbk1lbnVJdGVtW107XG59XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIG1lbnUgaW5mb3JtYXRpb24gZm9yIGFuIGVudGl0eSBhY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eUFjdGlvbkV4dGVuc2lvbk1lbnVFbnRyeSA9IEVudGl0eUFjdGlvbkV4dGVuc2lvbk1lbnVJdGVtIHwgRW50aXR5QWN0aW9uRXh0ZW5zaW9uU3VibWVudTtcblxuLyoqXG4gKiBFdmVyeSBjb21wb25lbnQgcmVmZXJlbmNlZCBieSBhbiBlbnRpdHkgYWN0aW9uIGV4dGVuc2lvbiBwb2ludCBtdXN0IGluaGVyaXQgZnJvbSB0aGlzLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y2xhc3MtbmFtZVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIF9FbnRpdHlBY3Rpb25FeHRlbnNpb25Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcmV0dXJucyBpcyBhbiBPYnNlcnZhYmxlIHRoYXQgZGVmaW5lcyB0aGUgbWVudSBlbnRyeSBmb3IgdGhpcyBjb21wb25lbnQuIFRoaXMgaXMgYWN0aXZlbHkgYm91bmQgLVxuICAgICAqIHRoZSBjb21wb25lbnQgaXMgYWJsZSB0byBjaGFuZ2UgaXQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgbWVudSBjaGFuZ2UgKGZvciBleGFtcGxlLCB0byBjaGFuZ2UgYnVzeVxuICAgICAqIG9yIGVuYWJsZWQgc3RhdGVzKS5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRNZW51RW50cnkoZW50aXR5VXJuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVudGl0eUFjdGlvbkV4dGVuc2lvbk1lbnVFbnRyeT47XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZpZWxkIGlzIGEgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIGlmIGEgbWVudSBpdGVtIGlzIGNsaWNrZWQgd2hpbGUgZW5hYmxlZC4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbWVudVxuICAgICAqIGl0ZW0ncyBVUk4gYW5kIHRoZSBVUk4gb2YgdGhlIGVudGl0eSB0aGF0IHRoZSBhY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZvciAoZS5nLiB0aGUgVVJOIG9mIHRoZSBWTSBiZWluZyBlZGl0ZWQpLlxuICAgICAqIEl0IG11c3QgcmV0dXJuIGEgc2luZ2xlLXNob3QgKGUuZy4gb2YsIGZyb21Qcm9taXNlIG9yIC5maXJzdCkgT2JzZXJ2YWJsZSBvbiBjb21wbGV0aW9uLiBUaGlzIE9ic2VydmFibGUgcmV0dXJuc1xuICAgICAqIGEgc2luZ2xlIHZhbHVlLCByZWZyZXNoUmVxdWVzdGVkLiBJZiB0aGlzIGlzIHRydWUsIHRoZSBlbnRpdHkgYmVpbmcgZWRpdGVkIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVmcmVzaGVkLlxuICAgICAqIEBwYXJhbSBtZW51SXRlbVVybiB0aGUgVVJOIG9mIHRoZSBjbGlja2VkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSBlbnRpdHlVcm5UaGUgVVJOIG9mIHRoZSBlbnRpdHkgdGhhdCB0aGUgYWN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3JcbiAgICAgKi9cbiAgICAgYWJzdHJhY3QgcGVyZm9ybUFjdGlvbihtZW51SXRlbVVybjogc3RyaW5nLCBlbnRpdHlVcm46IHN0cmluZyk6IE9ic2VydmFibGU8eyByZWZyZXNoUmVxdWVzdGVkOiBib29sZWFuIH0+O1xufVxuZXhwb3J0IGNvbnN0IEVudGl0eUFjdGlvbkV4dGVuc2lvbkNvbXBvbmVudDogdHlwZW9mIF9FbnRpdHlBY3Rpb25FeHRlbnNpb25Db21wb25lbnQgPSBjb250YWluZXJIb29rcy5FbnRpdHlBY3Rpb25FeHRlbnNpb25Db21wb25lbnQ7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjbGFzcy1uYW1lXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX1dpemFyZEV4dGVuc2lvbkNvbXBvbmVudDxQLCBSLCBFPiB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lIG1ldGhvZCB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGJ5IHRoZSBFeHRlbnNpb24gUG9pbnQgT3JjaGVzdHJhdG9yLFxuICAgICAqIHdoZW4gY2VydGFpbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSB0aGUgcGF5bG9hZCBvZiB0aGUgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIENvcmUgVUkuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIC0gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBDb3JlIFVJLlxuICAgICAqIEBwYXJhbSBlcnJvciAtIHRoZSBDb3JlIFVJIHdpbGwgcmVwcm90IGFueSBlcnJvciB0aGF0IG1heSBhcHBlYXIgZHVyaW5nIGV4ZWN1dGlvbi5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBwZXJmb3JtQWN0aW9uKHBheWxvYWQ6IFAsIHJlc3BvbnNlOiBSLCBlcnJvcjogRSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBXaXphcmRFeHRlbnNpb25Db21wb25lbnQ6IHR5cGVvZiBfV2l6YXJkRXh0ZW5zaW9uQ29tcG9uZW50ID0gY29udGFpbmVySG9va3MuV2l6YXJkRXh0ZW5zaW9uQ29tcG9uZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZEV4dGVuc2lvblN0YXRlIHtcbiAgICBpc1ZhbGlkOiBib29sZWFuO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y2xhc3MtbmFtZVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIF9XaXphcmRFeHRlbnNpb25XaXRoVmFsaWRhdGlvbkNvbXBvbmVudDxQLCBSLCBFPiBleHRlbmRzIF9XaXphcmRFeHRlbnNpb25Db21wb25lbnQ8UCwgUiwgRT4ge1xuICAgIC8qKlxuICAgICAqIEdldCBleHRlbnNpb24gcG9pbnQgc3RhdGUuXG4gICAgICovXG4gICAgYWJzdHJhY3QgZ2V0U3RhdGUoKTogT2JzZXJ2YWJsZTxXaXphcmRFeHRlbnNpb25TdGF0ZT47XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmV4cG9ydCBjb25zdCBXaXphcmRFeHRlbnNpb25XaXRoVmFsaWRhdGlvbkNvbXBvbmVudDogdHlwZW9mIF9XaXphcmRFeHRlbnNpb25XaXRoVmFsaWRhdGlvbkNvbXBvbmVudCA9IGNvbnRhaW5lckhvb2tzLldpemFyZEV4dGVuc2lvbldpdGhWYWxpZGF0aW9uQ29tcG9uZW50O1xuXG4vKipcbiAqIEV2ZXJ5IGNvbXBvbmVudC1iYXNlZCBFeHRlbnNpb24gUG9pbnQgdGhhdCBpcyByZW5kZXJkIGluIENsb3VkIERpcmVjdG9yIFVJIEVudGl0eSBEZXRhaWxzXG4gKiBtdXN0IGV4dGVuZCB0aGF0IGNsYXNzIHRvIG9idGFpbiBjb250ZXh0IGFib3V0IHRoZSBFbnRpdHkuXG4gKiBcbiAqIFNlZSBjb21tZW50cyBvZiB0aGUgbWV0aG9kcyBvZiB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjbGFzcy1uYW1lXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX1dpemFyZEV4dGVuc2lvbldpdGhDb250ZXh0Q29tcG9uZW50PFAsIFIsIEU+IGV4dGVuZHMgX1dpemFyZEV4dGVuc2lvbkNvbXBvbmVudDxQLCBSLCBFPiB7XG4gICAgIC8qKlxuICAgICAqIERlZmluZSBtZXRob2Qgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbiBpbml0IGFuZCBpbmZvcm1hdGlvblxuICAgICAqIGFib3V0IGNvbnRleHQgb2JqZWN0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBFeHRlbnNpb24gUG9pbnQuXG4gICAgICogXG4gICAgICogQHBhcmFtIGNvbnRleHQgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0IG9iamVjdC5cbiAgICAgKi9cbiAgICAgYWJzdHJhY3Qgb25Db250ZXh0KGNvbnRleHQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmV4cG9ydCBjb25zdCBXaXphcmRFeHRlbnNpb25XaXRoQ29udGV4dENvbXBvbmVudDogdHlwZW9mIF9XaXphcmRFeHRlbnNpb25XaXRoQ29udGV4dENvbXBvbmVudCA9IGNvbnRhaW5lckhvb2tzLldpemFyZEV4dGVuc2lvbldpdGhDb250ZXh0Q29tcG9uZW50O1xuIl19
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLWhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmNkL3Nkay9zcmMvY29tbW9uL2NvbnRhaW5lci1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHN0MsMERBQTBEO0FBQzFELElBQUksQ0FBRSxNQUFjLENBQUMsTUFBTSxJQUFJLENBQUUsTUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBRSxNQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7SUFDckcsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0NBQ2xEO0FBRUQsSUFBSSxjQUFjLEdBQVMsTUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUU7SUFDakIsY0FBYyxHQUFJLE1BQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0NBQzFFO0FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRTtJQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7Q0FDOUU7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLGNBQWMsQ0FBQyxZQUFZLENBQUM7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLGNBQWMsQ0FBQyxZQUFZLENBQUM7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUEyQixjQUFjLENBQUMsYUFBYSxDQUFDO0FBRWxGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUEyQixjQUFjLENBQUMsb0JBQW9CLENBQUM7QUFFaEc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUEyQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFekg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCLGNBQWMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTNJOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEyQixjQUFjLENBQUMsZUFBZSxDQUFDO0FBRXRGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUE0QixjQUFjLENBQUMsUUFBUSxDQUFDO0FBZ0N6RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBdUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDO0FBaUJoSSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBb0IsY0FBYyxDQUFDLHNCQUFzQixDQUFDO0FBK0M3Rjs7R0FFRztBQUNILHNDQUFzQztBQUN0QyxNQUFNLE9BQWdCLCtCQUErQjtDQWlCcEQ7QUFDRCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBMkMsY0FBYyxDQUFDLDhCQUE4QixDQUFDO0FBRXBJLHNDQUFzQztBQUN0QyxNQUFNLE9BQWdCLHlCQUF5QjtDQVM5QztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFxQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7QUFNbEgsc0NBQXNDO0FBQ3RDLE1BQU0sT0FBZ0IsdUNBQWlELFNBQVEseUJBQWtDO0NBS2hIO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFtRCxjQUFjLENBQUMsc0NBQXNDLENBQUM7QUFFNUo7Ozs7O0dBS0c7QUFDSCxzQ0FBc0M7QUFDdEMsTUFBTSxPQUFnQixvQ0FBOEMsU0FBUSx5QkFBa0M7Q0FRN0c7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQWdELGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBpcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCAtIGFsYmVpdCB2ZXJ5IG1pbmltYWwgLSBwdWJsaWMgU0RLLlxuICovXG5pbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbi8vIEJpbmQgc3RyYWlnaHQgaW50byB0aGUgaG9va3MgcHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5lci5cbmlmICghKHdpbmRvdyBhcyBhbnkpLlN5c3RlbSB8fCAhKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeSB8fCAhKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeS5nZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbUpTIHJlZ2lzdHJ5IG5vdCBmb3VuZCcpO1xufVxuXG5sZXQgY29udGFpbmVySG9va3M6IGFueSA9ICh3aW5kb3cgYXMgYW55KS5TeXN0ZW0ucmVnaXN0cnkuZ2V0KCdAdmNkL2NvbW1vbicpO1xuaWYgKCFjb250YWluZXJIb29rcykge1xuICAgIGNvbnRhaW5lckhvb2tzID0gKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeS5nZXQoJ0B2Y2QtdWkvY29tbW9uJyk7XG59XG5cbmlmICghY29udGFpbmVySG9va3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZDRCBVSSBjb250YWluZXIgaG9va3Mgbm90IHByZXNlbnQgaW4gU3lzdGVtSlMgcmVnaXN0cnknKTtcbn1cblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIHJvb3QgVVJMIGZvciBBUEkgYWNjZXNzIChmb3IgZXhhbXBsZSwgdGhlIGxvYWQgYmFsYW5jZXIgVVJMXG4gKiBvciB0aGUgc2luZ2xlLWNlbGwgVVJMKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9ST09UX1VSTDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLkFQSV9ST09UX1VSTDtcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIHJvb3QgVVJMIGZvciB0aGUgbGVnYWN5IEZsZXggYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBGTEVYX0FQUF9VUkw6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5BUElfUk9PVF9VUkw7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBjdXJyZW50IHNjb3BlIG9mIHRoZSBWQ0QtVUkuICBBcyBvZiBjdXJyZW50LCB0aGlzIHdpbGwgYmVcbiAqIGVpdGhlciAndGVuYW50JyBmb3IgdGhlIHRlbmFudCBwb3J0YWwsIG9yICdzZXJ2aWNlLXByb3ZpZGVyJyBmb3IgdGhlIHNlcnZpY2UtcHJvdmlkZXIgcG9ydGFsLlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9TQ09QRTogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLlNFU1NJT05fU0NPUEU7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSB1bmlxdWUgbmFtZSAobm90IHRoZSBkaXNwbGF5IG5hbWUpIG9mIHRoZSBjdXJyZW50IHRlbmFudFxuICogb3JnYW5pemF0aW9uIHRoYXQgdGhlIFZDRC1VSSBpcyBiZWluZyB1c2VkIGZvci5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fT1JHQU5JWkFUSU9OOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuU0VTU0lPTl9PUkdBTklaQVRJT047XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBVVUlEIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgdGVuYW50XG4gKiBvcmdhbml6YXRpb24gdGhhdCB0aGUgVkNELVVJIGlzIGJlaW5nIHVzZWQgZm9yLlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9PUkdfSUQ6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5TRVNTSU9OX09SR19JRCA/IGNvbnRhaW5lckhvb2tzLlNFU1NJT05fT1JHX0lEIDogJyc7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBmdWxsIHJvb3QgcGF0aCBmb3IgbW9kdWxlIGFzc2V0cyAoZS5nLiBpbWFnZXMsIHNjcmlwdHMsIHRleHQgZmlsZXMpXG4gKlxuICogQVRURU5USU9OIVxuICogQWRkIHx8IG5ldyBJbmplY3Rpb25Ub2tlbiB0byB3b3JrYXJvdW5kIHRoZSBBbmd1bGFyIHNlY3VyaXR5IG1lY2hhbmljcyB3aGljaCBwcmV2ZW50IHVzZSBvZiBpbmplY3Rpb24gdG9rZW5zXG4gKiB3aGljaCBwb3RlbnRpYWxseSBhcmUgbm90IGRlZmllbmQuIFRoZSBzYW1lIGZpeCBjYW4gYmUgYXBwbGllZCBmb3IgdGhlIHJlc3QgdG9rZW5zIGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYVEVOU0lPTl9BU1NFVF9VUkw6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5FWFRFTlNJT05fQVNTRVRfVVJMIHx8IG5ldyBJbmplY3Rpb25Ub2tlbignRVhURU5TSU9OX0FTU0VUX1VSTCcpO1xuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBzdHJpbmcuICBHaXZlcyB0aGUgQW5ndWxhciAyIHJvdXRlIHRoYXQgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgRVhURU5TSU9OX1JPVVRFOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuRVhURU5TSU9OX1JPVVRFO1xuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBib29sZWFuLiAgVHJ1ZSBpZiBydW5uaW5nIHVuZGVyIHRoZSBTREssIGZhbHNlIGlmIHJ1bm5pbmcgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19NT0RFOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IGNvbnRhaW5lckhvb2tzLlNES19NT0RFO1xuXG4vKipcbiAqIFBheWxvYWQgZm9yIHJlZ2lzdGVyaW5nIGEgbmF2aWdhdGlvbiBtZW51IGVudHJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvdXRlciBwYXRoIHRvIG5hdmlnYXRlIHRvIHdoZW4gc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogaTE4IGtleSBmb3IgbmFtZSBvZiBleHRlbnNpb24sIHRvIGJlIHVzZWQgYXMgdGV4dCBmb3IgbGlua3NcbiAgICAgKi9cbiAgICBuYW1lQ29kZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogaTE4biBrZXkgZm9yIGRlc2NyaXB0aW9uIG9mIGV4dGVuc2lvbiwgdG8gYmUgdXNlZCBvbiBob3ZlciBmb3IgbGlua3NcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbkNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCB0aGlzIHRvIHRoZSByZWR1eCBzdG9yZSB0byByZWdpc3RlciBhIG5hdmlnYXRpb24gbWVudS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25OYXZSZWdpc3RyYXRpb25BY3Rpb24ge1xuICAgIHBheWxvYWQ6IEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbjtcbiAgICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbkN0b3IgPSBuZXcocGF5bG9hZDogRXh0ZW5zaW9uTmF2UmVnaXN0cmF0aW9uKSA9PiBFeHRlbnNpb25OYXZSZWdpc3RyYXRpb25BY3Rpb247XG5cbmV4cG9ydCBjb25zdCBFeHRlbnNpb25OYXZSZWdpc3RyYXRpb25BY3Rpb246IEV4dGVuc2lvbk5hdlJlZ2lzdHJhdGlvbkFjdGlvbkN0b3IgPSBjb250YWluZXJIb29rcy5FeHRlbnNpb25OYXZSZWdpc3RyYXRpb25BY3Rpb247XG5cbi8qKlxuICogSW5qZWN0IHRoaXMgdG8gYWNjZXNzIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0aGVudGljYXRpb24gdG9rZW4uXG4gICAgICovXG4gICAgdG9rZW46IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEpXVCB0b2tlblxuICAgICAqL1xuICAgIGp3dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEF1dGhUb2tlbkhvbGRlclNlcnZpY2U6IHt0b2tlbjogc3RyaW5nfSA9IGNvbnRhaW5lckhvb2tzLkF1dGhUb2tlbkhvbGRlclNlcnZpY2U7XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIGEgbWVudSBpdGVtIHRoYXQgY2FuIGJlIGNsaWNrZWQgdG8gcGVyZm9ybSBhbiBhY3Rpb24gb24gYW4gZW50aXR5IChlLmcuIFZNKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBY3Rpb25FeHRlbnNpb25NZW51SXRlbSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhIHVuaXF1ZSBVUk4gaWRlbnRpZnlpbmcgdGhlIGFjdGlvbi4gVGhpcyBpcyBzbyB0aGUgY29tcG9uZW50IGNhbiBiZSBub3RpZmllZCB3aGljaCBhY3Rpb24gd2FzIHJlcXVlc3RlZC5cbiAgICAgKi9cbiAgICB1cm46IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGxhYmVsIGZvciB0aGUgbWVudSBpdGVtLiBJdCBpcyBub3QgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkLlxuICAgICAqL1xuICAgIHRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGVuYWJsZWQgc3RhdGUgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICovXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIGJ1c3kgc3RhdGUgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICovXG4gICAgYnVzeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGlzIHJlcHJlc2VudHMgYSBzdWItbWVudSB0aGF0IGNvbnRhaW5zIG90aGVyIHN1Yi1tZW51cyBvciBtZW51IGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5QWN0aW9uRXh0ZW5zaW9uU3VibWVudSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbGFiZWwgZm9yIHRoZSBzdWItbWVudS4gSXQgaXMgbm90IGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZC5cbiAgICAgKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGFyYml0cmFyeSwgb3JkZXJlZCBsaXN0IG9mIEVudGl0eUFjdGlvbk1lbnVJdGVtLlxuICAgICAqL1xuICAgIGNoaWxkcmVuOiBFbnRpdHlBY3Rpb25FeHRlbnNpb25NZW51SXRlbVtdO1xufVxuXG4vKipcbiAqIFRoaXMgcmVwcmVzZW50cyBtZW51IGluZm9ybWF0aW9uIGZvciBhbiBlbnRpdHkgYWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlBY3Rpb25FeHRlbnNpb25NZW51RW50cnkgPSBFbnRpdHlBY3Rpb25FeHRlbnNpb25NZW51SXRlbSB8IEVudGl0eUFjdGlvbkV4dGVuc2lvblN1Ym1lbnU7XG5cbi8qKlxuICogRXZlcnkgY29tcG9uZW50IHJlZmVyZW5jZWQgYnkgYW4gZW50aXR5IGFjdGlvbiBleHRlbnNpb24gcG9pbnQgbXVzdCBpbmhlcml0IGZyb20gdGhpcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNsYXNzLW5hbWVcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBfRW50aXR5QWN0aW9uRXh0ZW5zaW9uQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHJldHVybnMgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IGRlZmluZXMgdGhlIG1lbnUgZW50cnkgZm9yIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFjdGl2ZWx5IGJvdW5kIC1cbiAgICAgKiB0aGUgY29tcG9uZW50IGlzIGFibGUgdG8gY2hhbmdlIGl0IGluIG9yZGVyIHRvIGhhdmUgdGhlIG1lbnUgY2hhbmdlIChmb3IgZXhhbXBsZSwgdG8gY2hhbmdlIGJ1c3lcbiAgICAgKiBvciBlbmFibGVkIHN0YXRlcykuXG4gICAgICovXG4gICAgYWJzdHJhY3QgZ2V0TWVudUVudHJ5KGVudGl0eVVybjogc3RyaW5nKTogT2JzZXJ2YWJsZTxFbnRpdHlBY3Rpb25FeHRlbnNpb25NZW51RW50cnk+O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmaWVsZCBpcyBhIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCBpZiBhIG1lbnUgaXRlbSBpcyBjbGlja2VkIHdoaWxlIGVuYWJsZWQuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG1lbnVcbiAgICAgKiBpdGVtJ3MgVVJOIGFuZCB0aGUgVVJOIG9mIHRoZSBlbnRpdHkgdGhhdCB0aGUgYWN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3IgKGUuZy4gdGhlIFVSTiBvZiB0aGUgVk0gYmVpbmcgZWRpdGVkKS5cbiAgICAgKiBJdCBtdXN0IHJldHVybiBhIHNpbmdsZS1zaG90IChlLmcuIG9mLCBmcm9tUHJvbWlzZSBvciAuZmlyc3QpIE9ic2VydmFibGUgb24gY29tcGxldGlvbi4gVGhpcyBPYnNlcnZhYmxlIHJldHVybnNcbiAgICAgKiBhIHNpbmdsZSB2YWx1ZSwgcmVmcmVzaFJlcXVlc3RlZC4gSWYgdGhpcyBpcyB0cnVlLCB0aGUgZW50aXR5IGJlaW5nIGVkaXRlZCB3aWxsIGJlIGltbWVkaWF0ZWx5IHJlZnJlc2hlZC5cbiAgICAgKiBAcGFyYW0gbWVudUl0ZW1Vcm4gdGhlIFVSTiBvZiB0aGUgY2xpY2tlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0gZW50aXR5VXJuVGhlIFVSTiBvZiB0aGUgZW50aXR5IHRoYXQgdGhlIGFjdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yXG4gICAgICovXG4gICAgIGFic3RyYWN0IHBlcmZvcm1BY3Rpb24obWVudUl0ZW1Vcm46IHN0cmluZywgZW50aXR5VXJuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgcmVmcmVzaFJlcXVlc3RlZDogYm9vbGVhbiB9Pjtcbn1cbmV4cG9ydCBjb25zdCBFbnRpdHlBY3Rpb25FeHRlbnNpb25Db21wb25lbnQ6IHR5cGVvZiBfRW50aXR5QWN0aW9uRXh0ZW5zaW9uQ29tcG9uZW50ID0gY29udGFpbmVySG9va3MuRW50aXR5QWN0aW9uRXh0ZW5zaW9uQ29tcG9uZW50O1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y2xhc3MtbmFtZVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIF9XaXphcmRFeHRlbnNpb25Db21wb25lbnQ8UCwgUiwgRT4ge1xuICAgIC8qKlxuICAgICAqIERlZmluZSBtZXRob2Qgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgRXh0ZW5zaW9uIFBvaW50IE9yY2hlc3RyYXRvcixcbiAgICAgKiB3aGVuIGNlcnRhaW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIHBheWxvYWQgb2YgdGhlIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBDb3JlIFVJLlxuICAgICAqIEBwYXJhbSByZXNwb25zZSAtIHRoZSByZXNwb25zZSBmcm9tIHRoZSByZXF1ZXN0IHRyaWdnZXJlZCBieSB0aGUgQ29yZSBVSS5cbiAgICAgKiBAcGFyYW0gZXJyb3IgLSB0aGUgQ29yZSBVSSB3aWxsIHJlcHJvdCBhbnkgZXJyb3IgdGhhdCBtYXkgYXBwZWFyIGR1cmluZyBleGVjdXRpb24uXG4gICAgICovXG4gICAgYWJzdHJhY3QgcGVyZm9ybUFjdGlvbihwYXlsb2FkOiBQLCByZXNwb25zZTogUiwgZXJyb3I6IEUpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgV2l6YXJkRXh0ZW5zaW9uQ29tcG9uZW50OiB0eXBlb2YgX1dpemFyZEV4dGVuc2lvbkNvbXBvbmVudCA9IGNvbnRhaW5lckhvb2tzLldpemFyZEV4dGVuc2lvbkNvbXBvbmVudDtcblxuZXhwb3J0IGludGVyZmFjZSBXaXphcmRFeHRlbnNpb25TdGF0ZSB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNsYXNzLW5hbWVcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBfV2l6YXJkRXh0ZW5zaW9uV2l0aFZhbGlkYXRpb25Db21wb25lbnQ8UCwgUiwgRT4gZXh0ZW5kcyBfV2l6YXJkRXh0ZW5zaW9uQ29tcG9uZW50PFAsIFIsIEU+IHtcbiAgICAvKipcbiAgICAgKiBHZXQgZXh0ZW5zaW9uIHBvaW50IHN0YXRlLlxuICAgICAqL1xuICAgIGFic3RyYWN0IGdldFN0YXRlKCk6IE9ic2VydmFibGU8V2l6YXJkRXh0ZW5zaW9uU3RhdGU+O1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgV2l6YXJkRXh0ZW5zaW9uV2l0aFZhbGlkYXRpb25Db21wb25lbnQ6IHR5cGVvZiBfV2l6YXJkRXh0ZW5zaW9uV2l0aFZhbGlkYXRpb25Db21wb25lbnQgPSBjb250YWluZXJIb29rcy5XaXphcmRFeHRlbnNpb25XaXRoVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuLyoqXG4gKiBFdmVyeSBjb21wb25lbnQtYmFzZWQgRXh0ZW5zaW9uIFBvaW50IHRoYXQgaXMgcmVuZGVyZCBpbiBDbG91ZCBEaXJlY3RvciBVSSBFbnRpdHkgRGV0YWlsc1xuICogbXVzdCBleHRlbmQgdGhhdCBjbGFzcyB0byBvYnRhaW4gY29udGV4dCBhYm91dCB0aGUgRW50aXR5LlxuICogXG4gKiBTZWUgY29tbWVudHMgb2YgdGhlIG1ldGhvZHMgb2YgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y2xhc3MtbmFtZVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIF9XaXphcmRFeHRlbnNpb25XaXRoQ29udGV4dENvbXBvbmVudDxQLCBSLCBFPiBleHRlbmRzIF9XaXphcmRFeHRlbnNpb25Db21wb25lbnQ8UCwgUiwgRT4ge1xuICAgICAvKipcbiAgICAgKiBEZWZpbmUgbWV0aG9kIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgb24gaW5pdCBhbmQgaW5mb3JtYXRpb25cbiAgICAgKiBhYm91dCBjb250ZXh0IG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgRXh0ZW5zaW9uIFBvaW50LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBjb250ZXh0IHJlZmVyZW5jZSB0byB0aGUgY29udGV4dCBvYmplY3QuXG4gICAgICovXG4gICAgIGFic3RyYWN0IG9uQ29udGV4dChjb250ZXh0OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgV2l6YXJkRXh0ZW5zaW9uV2l0aENvbnRleHRDb21wb25lbnQ6IHR5cGVvZiBfV2l6YXJkRXh0ZW5zaW9uV2l0aENvbnRleHRDb21wb25lbnQgPSBjb250YWluZXJIb29rcy5XaXphcmRFeHRlbnNpb25XaXRoQ29udGV4dENvbXBvbmVudDtcbiJdfQ==