Subversion Repository Public Repository

Nextrek

Diff Revisions 1085 vs 1086 for /s2s/development/ResourceLoader_ABF7E648KE222A4121SBF4DE0A85BD9D5AFC.js

Diff revisions: vs.
  @@ -185,7 +185,7 @@
185 185 ResourceManager.getBitmap("Graphics/Pictures/" + layout.image);
186 186 }
187 187 if (layout.video != null) {
188 - ResourceManager.getBitmap("Graphics/Movies/" + layout.video);
188 + ResourceManager.getVideo("Movies/" + layout.video);
189 189 }
190 190 if (layout.customFields != null) {
191 191 this.loadUiGraphicsFromObject(layout.customFields);
  @@ -350,6 +350,24 @@
350 350
351 351
352 352 /**
353 + * Preloads all resources needed by the specified common event.
354 + *
355 + * @method loadCommonEventResources
356 + * @param {string} eventId - ID of the common event to preload the resources for.
357 + * @static
358 + */
359 +
360 + ResourceLoader.prototype.loadCommonEventResources = function(eventId) {
361 + var commonEvent;
362 + commonEvent = RecordManager.commonEvents[eventId];
363 + if ((commonEvent != null) && !this.loadedCommonEventsById[eventId]) {
364 + this.loadedCommonEventsById[eventId] = true;
365 + return this._loadEventCommandsGraphics(commonEvent.commands);
366 + }
367 + };
368 +
369 +
370 + /**
353 371 * Loads all resources needed by the specified list of commands.
354 372 *
355 373 * @method loadEventCommandsGraphics
  @@ -371,6 +389,11 @@
371 389 for (l = 0, len = commands.length; l < len; l++) {
372 390 command = commands[l];
373 391 switch (command.id) {
392 + case "gs.StartTimer":
393 + if (command.params.action.type === 1) {
394 + this.loadCommonEventResources(command.params.action.data.commonEventId);
395 + }
396 + break;
374 397 case "gs.CallCommonEvent":
375 398 commonEvent = RecordManager.commonEvents[command.params.commonEventId];
376 399 if (commonEvent != null) {
  @@ -550,6 +573,26 @@
550 573 if ((command.params.unselectedGraphic != null) && (command.params.unselectedGraphic.name != null)) {
551 574 ResourceManager.getBitmap("Graphics/Pictures/" + command.params.unselectedGraphic.name);
552 575 }
576 + if (command.params.actions != null) {
577 + if (command.params.actions.onClick.type === 1) {
578 + this.loadCommonEventResources(command.params.actions.onClick.commonEventId);
579 + }
580 + if (command.params.actions.onClick.type === 1) {
581 + this.loadCommonEventResources(command.params.actions.onEnter.commonEventId);
582 + }
583 + if (command.params.actions.onClick.type === 1) {
584 + this.loadCommonEventResources(command.params.actions.onLeave.commonEventId);
585 + }
586 + if (command.params.actions.onClick.type === 1) {
587 + this.loadCommonEventResources(command.params.actions.onSelect.commonEventId);
588 + }
589 + if (command.params.actions.onClick.type === 1) {
590 + this.loadCommonEventResources(command.params.actions.onDeselect.commonEventId);
591 + }
592 + if (command.params.actions.onClick.type === 1) {
593 + this.loadCommonEventResources(command.params.actions.onDrag.commonEventId);
594 + }
595 + }
553 596 break;
554 597 case "gs.ShowPicture":
555 598 if (command.params.graphic != null) {
  @@ -578,6 +621,8 @@
578 621 ref18 = command.params.hotspots;
579 622 for (y = 0, len12 = ref18.length; y < len12; y++) {
580 623 hotspot = ref18[y];
624 + AudioManager.loadSound(hotspot.data.onHoverSound);
625 + AudioManager.loadSound(hotspot.data.onClickSound);
581 626 if (hotspot.data.action === 2) {
582 627 commonEvent = RecordManager.commonEvents[hotspot.data.commonEventId];
583 628 if ((commonEvent != null) && !this.loadedCommonEventsById[hotspot.data.commonEventId]) {
  @@ -733,5 +778,5 @@
733 778
734 779 window.ResourceLoader = gs.ResourceLoader;
735 780
736 - //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUE7O0FBQU07O0FBQ0Y7Ozs7Ozs7Ozs7RUFVYSx3QkFBQTtJQUNULElBQUMsQ0FBQSxpQkFBRCxHQUFxQjtJQUNyQixJQUFDLENBQUEsc0JBQUQsR0FBMEI7RUFGakI7OztBQUliOzs7Ozs7OzsyQkFPQSxtQkFBQSxHQUFxQixTQUFDLEtBQUQ7QUFDakIsUUFBQTtBQUFBLFNBQUEsVUFBQTtNQUNJLElBQUMsQ0FBQSxvQkFBRCxDQUFzQixLQUFNLENBQUEsQ0FBQSxDQUE1QjtBQURKO0FBR0EsV0FBTztFQUpVOzs7QUFNckI7Ozs7Ozs7OzJCQU9BLHdCQUFBLEdBQTBCLFNBQUMsTUFBRDtBQUN0QixRQUFBO0FBQUEsU0FBQSxXQUFBO01BQ0ksSUFBRyxDQUFBLEtBQUssT0FBTCxJQUFnQixDQUFBLEtBQUssV0FBeEI7UUFDSSxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsTUFBTyxDQUFBLENBQUEsQ0FBdEQsRUFESjtPQUFBLE1BRUssSUFBRyxDQUFBLEtBQUssT0FBUjtRQUNELGVBQWUsQ0FBQyxRQUFoQixDQUF5QixTQUFBLEdBQVUsTUFBTyxDQUFBLENBQUEsQ0FBMUMsRUFEQzs7QUFIVDtBQUtBLFdBQU87RUFOZTs7O0FBUTFCOzs7Ozs7OzsyQkFPQSx3QkFBQSxHQUEwQixTQUFDLE1BQUQ7QUFDdEIsUUFBQTtBQUFBLFNBQUEsV0FBQTtNQUNJLElBQUcsTUFBTyxDQUFBLENBQUEsQ0FBUCxZQUFxQixLQUF4QjtBQUNJO0FBQUEsYUFBQSxxQ0FBQTs7QUFDSSxlQUFBLE1BQUE7WUFDSSxJQUFHLENBQUEsS0FBSyxPQUFMLElBQWdCLENBQUEsS0FBSyxXQUF4QjtjQUNJLEtBQUEsR0FBUSxDQUFFLENBQUEsQ0FBQTtjQUVWLG9CQUFHLEtBQUssQ0FBRSxVQUFQLENBQWtCLE9BQWxCLFVBQUg7Z0JBQ0ksZUFBZSxDQUFDLFNBQWhC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QyxJQUF4RCxFQURKOztVQUVBLHVEQUEyQixDQUFFLGNBQTFCLEtBQWtDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBdkQ7WUFDSSxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsaUJBQUEsR0FBa0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFsRixFQURKOztBQUhpQjtBQXhMekIsYUE2TFMsY0E3TFQ7VUE4TFEsSUFBRyw0QkFBSDtZQUNJLFlBQVksQ0FBQyxTQUFiLENBQXVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBdEM7WUFDQSxlQUFlLENBQUMsY0FBaEIsQ0FBK0IsY0FBQSxHQUFlLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQW5FLEVBRko7O0FBREM7QUE3TFQsYUFrTVMsaUJBbE1UO0FBbU1RO0FBQUEsZUFBQSw4Q0FBQTs7WUFDSSxJQUFHLGFBQUg7Y0FDSSxZQUFZLENBQUMsU0FBYixDQUF1QixLQUF2QixFQURKOztBQURKO0FBREM7QUFsTVQsYUF1TVMsdUJBdk1UO1VBd01RLElBQUcsd0VBQUg7WUFDSSxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBdEUsRUFESjs7QUF4TVI7QUFESjtBQTJNQSxXQUFPO0VBOU1pQjs7O0FBZ041Qjs7Ozs7Ozs7MkJBT0EsYUFBQSxHQUFlLFNBQUMsU0FBRDtJQUNYLElBQUcsbUJBQUEsSUFBZSwyQkFBbEI7YUFDSSxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsNEJBQUEsR0FBNkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUF6RSxFQURKOztFQURXOzs7Ozs7QUFNbkIsRUFBRSxDQUFDLGNBQUgsR0FBd0IsSUFBQSxjQUFBLENBQUE7O0FBQ3hCLE1BQU0sQ0FBQyxjQUFQLEdBQXdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuI1xuIyAgIFNjcmlwdDogUmVzb3VyY2VMb2FkZXJcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIFJlc291cmNlTG9hZGVyXG4gICAgIyMjKlxuICAgICogVGhlIHJlc291cmNlIGhlbHBzIHRvIGxvYWQgYSBidW5jaCBvZiByZXNvdXJjZXMgZnJvbSBkaWZmZXJlbnQga2luZCBvZlxuICAgICogZGF0YSBzdHJ1Y3R1cmVzLlxuICAgICpcbiAgICAqIEBtb2R1bGUgZ3NcbiAgICAqIEBjbGFzcyBSZXNvdXJjZUxvYWRlclxuICAgICogQG1lbWJlcm9mIGdzXG4gICAgKiBAY29uc3RydWN0b3JcbiAgICAqIEBzdGF0aWNcbiAgICAjIyNcbiAgICBjb25zdHJ1Y3RvcjogLT5cbiAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkID0ge31cbiAgICAgICAgQGxvYWRlZENvbW1vbkV2ZW50c0J5SWQgPSBbXVxuICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCBncmFwaGljcyBmb3IgdGhlIHNwZWNpZmllZCBsaXN0IG9mIGN1c3RvbSBsYXlvdXQgdHlwZXMvdGVtcGxhdGVzXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkVWlUeXBlc0dyYXBoaWNzXG4gICAgKiBAcGFyYW0ge09iamVjdFtdfSB0eXBlcyAtIEFuIGFycmF5IG9mIGN1c3RvbSBsYXlvdXQgdHlwZXMvdGVtcGxhdGVzXG4gICAgKiBAc3RhdGljXG4gICAgIyMjIFxuICAgIGxvYWRVaVR5cGVzR3JhcGhpY3M6ICh0eXBlcykgLT5cbiAgICAgICAgZm9yIGsgb2YgdHlwZXNcbiAgICAgICAgICAgIEBsb2FkVWlMYXlvdXRHcmFwaGljcyh0eXBlc1trXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCBncmFwaGljcyBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQtZGVzY3JpcHRvci5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRVaUdyYXBoaWNzRnJvbU9iamVjdFxuICAgICogQHBhcmFtIHtPYmplY3R9IGxheW91dCAtIFRoZSBsYXlvdXQgZGVzY3JpcHRvci5cbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgXG4gICAgbG9hZFVpR3JhcGhpY3NGcm9tT2JqZWN0OiAobGF5b3V0KSAtPlxuICAgICAgICBmb3IgayBvZiBsYXlvdXRcbiAgICAgICAgICAgIGlmIGsgPT0gXCJpbWFnZVwiIG9yIGsgPT0gXCJmdWxsSW1hZ2VcIlxuICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2xheW91dFtrXX1cIilcbiAgICAgICAgICAgIGVsc2UgaWYgayA9PSBcInZpZGVvXCJcbiAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0VmlkZW8oXCJNb3ZpZXMvI3tsYXlvdXRba119XCIpICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICBcbiAgICAjIyMqXG4gICAgKiBMb2FkcyBhbGwgZ3JhcGhpY3MgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0LWRlc2NyaXB0b3IuXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkVWlEYXRhRmllbGRzR3JhcGhpY3NcbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBsYXlvdXQgLSBUaGUgbGF5b3V0IGRlc2NyaXB0b3IuXG4gICAgKiBAc3RhdGljXG4gICAgIyMjICAgICBcbiAgICBsb2FkVWlEYXRhRmllbGRzR3JhcGhpY3M6IChsYXlvdXQpIC0+XG4gICAgICAgIGZvciBrIG9mIGxheW91dFxuICAgICAgICAgICAgaWYgbGF5b3V0W2tdIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICAgICAgICBmb3IgbyBpbiBsYXlvdXRba11cbiAgICAgICAgICAgICAgICAgICAgZm9yIGogb2Ygb1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgaiA9PSBcImltYWdlXCIgb3IgaiA9PSBcImZ1bGxJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBvW2pdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW1hZ2U/LnN0YXJ0c1dpdGgoXCJkYXRhOlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKG9bal0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tvW2pdfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCBncmFwaGljcyBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQtZGVzY3JpcHRvci5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRVaURhdGFGaWVsZHNHcmFwaGljc1xuICAgICogQHBhcmFtIHtPYmplY3R9IGxheW91dCAtIFRoZSBsYXlvdXQgZGVzY3JpcHRvci5cbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgIFxuICAgIGxvYWRVaUxheW91dEdyYXBoaWNzOiAobGF5b3V0KSAtPlxuICAgICAgICBpZiBsYXlvdXQucHJlbG9hZD9cbiAgICAgICAgICAgIGlmIGxheW91dC5wcmVsb2FkLmdyYXBoaWNzP1xuICAgICAgICAgICAgICAgIGZvciBncmFwaGljIGluIGxheW91dC5wcmVsb2FkLmdyYXBoaWNzXG4gICAgICAgICAgICAgICAgICAgIGlmIGdyYXBoaWMubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCIje2dyYXBoaWMuZm9sZGVyfHwnR3JhcGhpY3MvUGljdHVyZXMnfS8je3VpLkNvbXBvbmVudF9Gb3JtdWxhSGFuZGxlci5maWVsZFZhbHVlKG51bGwsIGdyYXBoaWMubmFtZSl9XCIpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHVpLkNvbXBvbmVudF9Gb3JtdWxhSGFuZGxlci5maWVsZFZhbHVlKG51bGwsIGdyYXBoaWMucGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWIgaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3ViP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IHVpLkNvbXBvbmVudF9Gb3JtdWxhSGFuZGxlci5maWVsZFZhbHVlKHN1YiwgZ3JhcGhpYy5pbWFnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW1hZ2U/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tpbWFnZX1cIilcbiAgICAgICAgICAgIGlmIGxheW91dC5wcmVsb2FkLnZpZGVvcz9cbiAgICAgICAgICAgICAgICBmb3IgdmlkZW8gaW4gbGF5b3V0LnByZWxvYWQudmlkZW9zXG4gICAgICAgICAgICAgICAgICAgIGlmIHZpZGVvLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0VmlkZW8oXCIje3ZpZGVvLmZvbGRlcnx8J01vdmllcyd9LyN7dmlkZW8ubmFtZX1cIilcbiAgICAgICAgICAgIGlmIGxheW91dC5wcmVsb2FkLm11c2ljP1xuICAgICAgICAgICAgICAgIGZvciBtdXNpYyBpbiBsYXlvdXQucHJlbG9hZC5tdXNpY1xuICAgICAgICAgICAgICAgICAgICBpZiBtdXNpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRWaWRlbyhcIiN7bXVzaWMuZm9sZGVyfHwnQXVkaW8vTXVzaWMnfS8je211c2ljLm5hbWUgfHwgbXVzaWN9XCIpXG4gICAgICAgICAgICBpZiBsYXlvdXQucHJlbG9hZC5zb3VuZHM/XG4gICAgICAgICAgICAgICAgZm9yIHNvdW5kIGluIGxheW91dC5wcmVsb2FkLnNvdW5kc1xuICAgICAgICAgICAgICAgICAgICBpZiBzb3VuZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRBdWRpb0J1ZmZlcihcIiN7c291bmQuZm9sZGVyfHwnQXVkaW8vU291bmRzJ30vI3t1aS5Db21wb25lbnRfRm9ybXVsYUhhbmRsZXIuZmllbGRWYWx1ZShsYXlvdXQsIHNvdW5kLm5hbWUgfHwgc291bmQpfVwiKVxuICAgICAgICBpZiBsYXlvdXQuaW1hZ2VzP1xuICAgICAgICAgICAgZm9yIGltYWdlIGluIGxheW91dC5pbWFnZXNcbiAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tpbWFnZX1cIilcbiAgICAgICAgaWYgbGF5b3V0LmFuaW1hdGlvbnM/XG4gICAgICAgICAgICBmb3IgZGVzY3JpcHRvciBpbiBsYXlvdXQuYW5pbWF0aW9uc1xuICAgICAgICAgICAgICAgIGZvciBhbmltYXRpb24gaW4gZGVzY3JpcHRvci5mbG93XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCBhbmltYXRpb24udHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBcInNvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0QXVkaW9CdWZmZXIoXCJBdWRpby9Tb3VuZHMvI3thbmltYXRpb24uc291bmR9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuIFwiY2hhbmdlSW1hZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW1hZ2UgaW4gYW5pbWF0aW9uLmltYWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tpbWFnZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gXCJtYXNrVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2FuaW1hdGlvbi5tYXNrfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBhbmltYXRpb24uc291bmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0QXVkaW9CdWZmZXIoXCJBdWRpby9Tb3VuZHMvI3thbmltYXRpb24uc291bmR9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmIGxheW91dC5pbWFnZT9cbiAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2xheW91dC5pbWFnZX1cIilcbiAgICAgICAgaWYgbGF5b3V0LnZpZGVvP1xuICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL01vdmllcy8je2xheW91dC52aWRlb31cIilcbiAgICAgICAgaWYgbGF5b3V0LmN1c3RvbUZpZWxkcz9cbiAgICAgICAgICAgIEBsb2FkVWlHcmFwaGljc0Zyb21PYmplY3QobGF5b3V0LmN1c3RvbUZpZWxkcylcbiAgICAgICAgaWYgbGF5b3V0LmN1c3RvbUZpZWxkcz8uYWN0aW9ucz9cbiAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gbGF5b3V0LmN1c3RvbUZpZWxkcy5hY3Rpb25zXG4gICAgICAgICAgICAgICAgaWYgYWN0aW9uLm5hbWUgPT0gXCJwbGF5Vm9pY2VcIiBvciBhY3Rpb24ubmFtZSA9PSBcInBsYXlTb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQoYWN0aW9uLnBhcmFtcy5uYW1lKVxuICAgICAgICBpZiBsYXlvdXQuYWN0aW9ucz8gb3IgbGF5b3V0LmFjdGlvbj9cbiAgICAgICAgICAgIGFjdGlvbnMgPSBpZiBsYXlvdXQuYWN0aW9uPyB0aGVuIFtsYXlvdXQuYWN0aW9uXSBlbHNlIGxheW91dC5hY3Rpb25zXG4gICAgICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnNcbiAgICAgICAgICAgICAgICBpZiBhY3Rpb24ubmFtZSA9PSBcInBsYXlWb2ljZVwiIG9yIGFjdGlvbi5uYW1lID09IFwicGxheVNvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChhY3Rpb24ucGFyYW1zLm5hbWUpXG4gICAgICAgIGlmIGxheW91dC5wYXJhbXNcbiAgICAgICAgICAgIEBsb2FkVWlMYXlvdXRHcmFwaGljcyhsYXlvdXQucGFyYW1zKVxuICAgICAgICBpZiBsYXlvdXQudGVtcGxhdGU/XG4gICAgICAgICAgICBAbG9hZFVpTGF5b3V0R3JhcGhpY3MobGF5b3V0LnRlbXBsYXRlKVxuICAgICAgICBpZiBsYXlvdXQuc3R5bGU/IGFuZCB1aS5VaUZhY3Rvcnkuc3R5bGVzW2xheW91dC5zdHlsZV0/XG4gICAgICAgICAgICBAbG9hZFVpTGF5b3V0R3JhcGhpY3ModWkuVWlGYWN0b3J5LnN0eWxlc1tsYXlvdXQuc3R5bGVdKVxuICAgICAgICAgICAgZm9yIHNlbCBvZiB1aS5VSU1hbmFnZXIuc2VsZWN0b3JzXG4gICAgICAgICAgICAgICAgc3R5bGUgPSB1aS5VSU1hbmFnZXIuc3R5bGVzW2xheW91dC5zdHlsZSArIFwiOlwiK3NlbF1cbiAgICAgICAgICAgICAgICBpZiBzdHlsZSB0aGVuIEBsb2FkVWlMYXlvdXRHcmFwaGljcyhzdHlsZSlcbiAgICAgICAgaWYgdWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzW2xheW91dC50eXBlXT9cbiAgICAgICAgICAgIEBsb2FkVWlMYXlvdXRHcmFwaGljcyh1aS5VaUZhY3RvcnkuY3VzdG9tVHlwZXNbbGF5b3V0LnR5cGVdKVxuICAgICAgICBpZiBsYXlvdXQuY29udHJvbHM/XG4gICAgICAgICAgICBmb3IgY29udHJvbCBpbiBsYXlvdXQuY29udHJvbHNcbiAgICAgICAgICAgICAgICBAbG9hZFVpTGF5b3V0R3JhcGhpY3MoY29udHJvbClcbiAgICBcbiAgICAjIyMqXG4gICAgKiBMb2FkcyBhbGwgc3lzdGVtIHNvdW5kcy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRTeXN0ZW1Tb3VuZHNcbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgICAgICAgICAgICAgXG4gICAgbG9hZFN5c3RlbVNvdW5kczogLT5cbiAgICAgICAgZm9yIHNvdW5kIGluIFJlY29yZE1hbmFnZXIuc3lzdGVtLnNvdW5kc1xuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChzb3VuZClcbiAgICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIHN5c3RlbSBncmFwaGljcy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRTeXN0ZW1HcmFwaGljc1xuICAgICogQHN0YXRpY1xuICAgICMjIyAgICAgXG4gICAgbG9hZFN5c3RlbUdyYXBoaWNzOiAtPlxuICAgICAgICBmb3Igc2xvdCBpbiBHYW1lTWFuYWdlci5zYXZlR2FtZVNsb3RzXG4gICAgICAgICAgICBpZiBzbG90LnRodW1iPyBhbmQgc2xvdC50aHVtYi5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChzbG90LnRodW1iKVxuICAgICAgICBpZiBSZWNvcmRNYW5hZ2VyLnN5c3RlbS5jdXJzb3I/Lm5hbWVcbiAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je1JlY29yZE1hbmFnZXIuc3lzdGVtLmN1cnNvci5uYW1lfVwiKVxuICAgICAgICBpZiBSZWNvcmRNYW5hZ2VyLnN5c3RlbS50aXRsZVNjcmVlbj8ubmFtZVxuICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7UmVjb3JkTWFuYWdlci5zeXN0ZW0udGl0bGVTY3JlZW4ubmFtZX1cIilcbiAgICAgICAgaWYgUmVjb3JkTWFuYWdlci5zeXN0ZW0ubGFuZ3VhZ2VTY3JlZW4/Lm5hbWVcbiAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je1JlY29yZE1hbmFnZXIuc3lzdGVtLmxhbmd1YWdlU2NyZWVuLm5hbWV9XCIpXG4gICAgICAgIGlmIFJlY29yZE1hbmFnZXIuc3lzdGVtLm1lbnVCYWNrZ3JvdW5kPy5uYW1lXG4gICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tSZWNvcmRNYW5hZ2VyLnN5c3RlbS5tZW51QmFja2dyb3VuZC5uYW1lfVwiKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBjb21tYW5kcy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRFdmVudENvbW1hbmRzR3JhcGhpY3NcbiAgICAqIEBwYXJhbSB7T2JqZWN0W119IGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMuXG4gICAgKiBAcmV0dXJuIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgZGF0YSBuZWVkcyB0byBiZSBsb2FkZWQuIFxuICAgICogQHN0YXRpY1xuICAgICMjIyBcbiAgICBsb2FkRXZlbnRDb21tYW5kc0RhdGE6IChjb21tYW5kcykgLT5cbiAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkID0ge31cbiAgICAgICAgcmV0dXJuIEBfbG9hZEV2ZW50Q29tbWFuZHNEYXRhKGNvbW1hbmRzKVxuICAgICAgICBcbiAgICBfbG9hZEV2ZW50Q29tbWFuZHNEYXRhOiAoY29tbWFuZHMpIC0+XG4gICAgICAgIHJldHVybiBubyBpZiBub3QgY29tbWFuZHM/XG4gICAgICAgIFxuICAgICAgICByZXN1bHQgPSBub1xuICAgICAgICBcbiAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHNcbiAgICAgICAgICAgIHN3aXRjaCBjb21tYW5kLmlkXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVEb2N1bWVudCA9IERhdGFNYW5hZ2VyLmdldERvY3VtZW50KGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIXNjZW5lRG9jdW1lbnQubG9hZGVkIGlmICFyZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50LmxvYWRlZCBhbmQgIUBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXSA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAX2xvYWRFdmVudENvbW1hbmRzRGF0YShzY2VuZURvY3VtZW50Lml0ZW1zLmNvbW1hbmRzKSBpZiAhcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2FsbFNjZW5lXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuc2NlbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lRG9jdW1lbnQgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChjb21tYW5kLnBhcmFtcy5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIXNjZW5lRG9jdW1lbnQubG9hZGVkIGlmICFyZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50LmxvYWRlZCBhbmQgIUBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXSA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAX2xvYWRFdmVudENvbW1hbmRzRGF0YShzY2VuZURvY3VtZW50Lml0ZW1zLmNvbW1hbmRzKSBpZiAhcmVzdWx0XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmVzdWx0ICBcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIHJlc291cmNlcyBuZWVkZWQgYnkgdGhlIHNwZWNpZmllZCBsaXN0IG9mIGNvbW1hbmRzLlxuICAgICpcbiAgICAqIEBtZXRob2QgbG9hZEV2ZW50Q29tbWFuZHNHcmFwaGljc1xuICAgICogQHBhcmFtIHtPYmplY3RbXX0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcy5cbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgIFxuICAgIGxvYWRFdmVudENvbW1hbmRzR3JhcGhpY3M6IChjb21tYW5kcykgLT5cbiAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkID0ge31cbiAgICAgICAgQGxvYWRlZENvbW1vbkV2ZW50c0J5SWQgPSBbXVxuICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3MoY29tbWFuZHMpXG4gICAgICAgIFxuICAgIF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzOiAoY29tbWFuZHMpIC0+XG4gICAgICAgIHJldHVybiBpZiBub3QgY29tbWFuZHM/XG4gICAgICAgIFxuICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kc1xuICAgICAgICAgICAgc3dpdGNoIGNvbW1hbmQuaWRcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2FsbENvbW1vbkV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uRXZlbnQgPSBSZWNvcmRNYW5hZ2VyLmNvbW1vbkV2ZW50c1tjb21tYW5kLnBhcmFtcy5jb21tb25FdmVudElkXVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tb25FdmVudD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbSwgaSBpbiBjb21tb25FdmVudC5wYXJhbWV0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0uc3RyaW5nVmFsdWVUeXBlID09IFwic2NlbmVJZFwiIGFuZCBjb21tYW5kLnBhcmFtcy5wYXJhbWV0ZXJzPy52YWx1ZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVEb2N1bWVudCA9IERhdGFNYW5hZ2VyLmdldERvY3VtZW50KGNvbW1hbmQucGFyYW1zLnBhcmFtZXRlcnMudmFsdWVzW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50IGFuZCAhQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXSA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzKHNjZW5lRG9jdW1lbnQuaXRlbXMuY29tbWFuZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAhQGxvYWRlZENvbW1vbkV2ZW50c0J5SWRbY29tbWFuZC5wYXJhbXMuY29tbW9uRXZlbnRJZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbG9hZGVkQ29tbW9uRXZlbnRzQnlJZFtjb21tYW5kLnBhcmFtcy5jb21tb25FdmVudElkXSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3MoY29tbW9uRXZlbnQuY29tbWFuZHMpXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNhbGxTY2VuZVwiXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lRG9jdW1lbnQgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChjb21tYW5kLnBhcmFtcy5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgIGlmIHNjZW5lRG9jdW1lbnQgYW5kICFAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdXG4gICAgICAgICAgICAgICAgICAgICAgICBAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3Moc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2hhbmdlVHJhbnNpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLmdyYXBoaWM/Lm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlNjcmVlblRyYW5zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5ncmFwaGljPy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJ2bi5DaGFuZ2VCYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuZ3JhcGhpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9CYWNrZ3JvdW5kcy8je2NvbW1hbmQucGFyYW1zLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uPy50eXBlID09IGdzLkFuaW1hdGlvblR5cGVzLk1BU0tJTkcgYW5kIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrPy5ncmFwaGljXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5hbmltYXRpb24ubWFzay5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkwyREpvaW5TY2VuZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLm1vZGVsP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldExpdmUyRE1vZGVsKFwiTGl2ZTJELyN7Y29tbWFuZC5wYXJhbXMubW9kZWwubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2hhcmFjdGVySm9pblNjZW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJzW2NvbW1hbmQucGFyYW1zLmNoYXJhY3RlcklkXVxuICAgICAgICAgICAgICAgICAgICBpZiBjaGFyYWN0ZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSWQgPSBjb21tYW5kLnBhcmFtcy5leHByZXNzaW9uSWQgPyBjaGFyYWN0ZXIuZGVmYXVsdEV4cHJlc3Npb25JZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbklkP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlY29yZD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjb3JkLmlkbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbWFnZSBpbiByZWNvcmQuaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjb3JkLnRhbGtpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbWFnZSBpbiByZWNvcmQudGFsa2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLnR5cGUgPT0gZ3MuQW5pbWF0aW9uVHlwZXMuTUFTS0lORyBhbmQgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLm1hc2suZ3JhcGhpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2hhcmFjdGVyQ2hhbmdlRXhwcmVzc2lvblwiXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW1hZ2UgaW4gcmVjb3JkLmlkbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW1hZ2UgaW4gcmVjb3JkLnRhbGtpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi50eXBlID09IGdzLkFuaW1hdGlvblR5cGVzLk1BU0tJTkcgYW5kIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrLmdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5hbmltYXRpb24ubWFzay5ncmFwaGljLm5hbWV9XCIpICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuU2hvd1BhcnRpYWxNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMudm9pY2U/XG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGNvbW1hbmQucGFyYW1zLnZvaWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgI1Jlc291cmNlTWFuYWdlci5nZXRBdWRpb0J1ZmZlcihcIkF1ZGlvL1NvdW5kLyN7Y29tbWFuZC5wYXJhbXMudm9pY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVEb2N1bWVudCA9IERhdGFNYW5hZ2VyLmdldERvY3VtZW50KGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50IGFuZCAhQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF0gPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3Moc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5TaG93TWVzc2FnZVwiLCBcImdzLlNob3dNZXNzYWdlTlZMXCIsIFwiZ3MuU2hvd1RleHRcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb25zP1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVpZCBpbiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uID0gUmVjb3JkTWFuYWdlci5hbmltYXRpb25zW2VpZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbmltYXRpb24/IGFuZCBhbmltYXRpb24uZ3JhcGhpYy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2FuaW1hdGlvbi5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5leHByZXNzaW9ucz9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlaWQgaW4gY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJFeHByZXNzaW9uc1tlaWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbj9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbi5pZGxlIHRoZW4gZm9yIGltYWdlIGluIGV4cHJlc3Npb24uaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3tpbWFnZS5yZXNvdXJjZS5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHByZXNzaW9uLnRhbGtpbmcgdGhlbiBmb3IgaW1hZ2UgaW4gZXhwcmVzc2lvbi50YWxraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnZvaWNlP1xuICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChjb21tYW5kLnBhcmFtcy52b2ljZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICNSZXNvdXJjZU1hbmFnZXIuZ2V0QXVkaW9CdWZmZXIoXCJBdWRpby9Tb3VuZC8je2NvbW1hbmQucGFyYW1zLnZvaWNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQuaWRsZSB0aGVuIGZvciBpbWFnZSBpbiByZWNvcmQuaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlY29yZC50YWxraW5nIHRoZW4gZm9yIGltYWdlIGluIHJlY29yZC50YWxraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3tpbWFnZS5yZXNvdXJjZS5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLkFkZEhvdHNwb3RcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5iYXNlR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLmJhc2VHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5iYXNlR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ob3ZlckdyYXBoaWM/IGFuZCBjb21tYW5kLnBhcmFtcy5ob3ZlckdyYXBoaWMubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLmhvdmVyR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEdyYXBoaWM/IGFuZCBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEdyYXBoaWMubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLnNlbGVjdGVkR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEhvdmVyR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLnNlbGVjdGVkSG92ZXJHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEhvdmVyR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLnVuc2VsZWN0ZWRHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5TaG93UGljdHVyZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbj8udHlwZSA9PSBncy5BbmltYXRpb25UeXBlcy5NQVNLSU5HXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5hbmltYXRpb24ubWFzay5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlNob3dJbWFnZU1hcFwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmdyb3VuZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLmdyb3VuZC5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ob3Zlcj9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLmhvdmVyLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnVuc2VsZWN0ZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnNlbGVjdGVkP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7Y29tbWFuZC5wYXJhbXMuc2VsZWN0ZWQubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuc2VsZWN0ZWRIb3Zlcj9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLnNlbGVjdGVkSG92ZXIubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgZm9yIGhvdHNwb3QgaW4gY29tbWFuZC5wYXJhbXMuaG90c3BvdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhvdHNwb3QuZGF0YS5hY3Rpb24gPT0gMiAjIENvbW1vbiBFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkV2ZW50ID0gUmVjb3JkTWFuYWdlci5jb21tb25FdmVudHNbaG90c3BvdC5kYXRhLmNvbW1vbkV2ZW50SWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tbW9uRXZlbnQ/IGFuZCAhQGxvYWRlZENvbW1vbkV2ZW50c0J5SWRbaG90c3BvdC5kYXRhLmNvbW1vbkV2ZW50SWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkZWRDb21tb25FdmVudHNCeUlkW2hvdHNwb3QuZGF0YS5jb21tb25FdmVudElkXSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzKGNvbW1vbkV2ZW50LmNvbW1hbmRzKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5Nb3ZlUGljdHVyZVBhdGhcIiwgXCJ2bi5Nb3ZlQ2hhcmFjdGVyUGF0aFwiLCBcInZuLlNjcm9sbEJhY2tncm91bmRQYXRoXCIsIFwiZ3MuTW92ZVZpZGVvUGF0aFwiICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnBhdGguZWZmZWN0cz9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlZmZlY3QgaW4gY29tbWFuZC5wYXJhbXMucGF0aC5lZmZlY3RzLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGVmZmVjdC5zb3VuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuTWFza1BpY3R1cmVcIiwgXCJ2bi5NYXNrQ2hhcmFjdGVyXCIsIFwidm4uTWFza0JhY2tncm91bmRcIiwgXCJncy5NYXNrVmlkZW9cIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5tYXNrLnNvdXJjZVR5cGUgPT0gMCBhbmQgY29tbWFuZC5wYXJhbXMubWFzay5ncmFwaGljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL01hc2tzLyN7Y29tbWFuZC5wYXJhbXMubWFzay5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLm1hc2suc291cmNlVHlwZSA9PSAxIGFuZCBjb21tYW5kLnBhcmFtcy5tYXNrLnZpZGVvP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldFZpZGVvKFwiTW92aWVzLyN7Y29tbWFuZC5wYXJhbXMubWFzay52aWRlby5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5QbGF5UGljdHVyZUFuaW1hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbklkID0gY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uSWRcbiAgICAgICAgICAgICAgICAgICAgaWYgYW5pbWF0aW9uSWQ/IGFuZCBub3QgYW5pbWF0aW9uSWQuc2NvcGU/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uID0gUmVjb3JkTWFuYWdlci5hbmltYXRpb25zW2FuaW1hdGlvbklkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFuaW1hdGlvbiBhbmQgYW5pbWF0aW9uLmdyYXBoaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7YW5pbWF0aW9uLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuU2hvd0JhdHRsZUFuaW1hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbklkID0gY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uSWRcbiAgICAgICAgICAgICAgICAgICAgaWYgYW5pbWF0aW9uSWQ/IGFuZCBub3QgYW5pbWF0aW9uSWQuc2NvcGU/XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24gPSBSZWNvcmRNYW5hZ2VyLmFuaW1hdGlvbnNbYW5pbWF0aW9uSWRdXG4gICAgICAgICAgICAgICAgICAgICAgICBAbG9hZENvbXBsZXhBbmltYXRpb24oYW5pbWF0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLklucHV0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGFjdG9ySWQgPSBjb21tYW5kLnBhcmFtcy5hY3RvcklkXG4gICAgICAgICAgICAgICAgICAgIGlmIGFjdG9ySWQ/IGFuZCBub3QgYWN0b3JJZC5zY29wZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yID0gUmVjb3JkTWFuYWdlci5hY3RvcnNbYWN0b3JJZF1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjdG9yP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9GYWNlcy8je2FjdG9yLmZhY2VHcmFwaGljPy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2hhbmdlVGlsZXNldFwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvVGlsZXNldHMvI3tjb21tYW5kLnBhcmFtcy5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLkNoYW5nZU1hcFBhcmFsbGF4QmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnBhcmFsbGF4QmFja2dyb3VuZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLnBhcmFsbGF4QmFja2dyb3VuZC5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5DaGFuZ2VBY3RvckdyYXBoaWNcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5jaGFuZ2VDaGFyYWN0ZXIgYW5kIGNvbW1hbmQucGFyYW1zLmNoYXJhY3RlckdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2NvbW1hbmQucGFyYW1zLmNoYXJhY3RlckdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuY2hhbmdlRmFjZSBhbmQgY29tbWFuZC5wYXJhbXMuZmFjZUdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvRmFjZXMvI3tjb21tYW5kLnBhcmFtcy5mYWNlR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5Nb3ZlRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICBmb3IgbW92ZUNvbW1hbmQgaW4gY29tbWFuZC5wYXJhbXMuY29tbWFuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCBtb3ZlQ29tbWFuZC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gNDQgIyBDaGFuZ2UgR3JhcGhpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je21vdmVDb21tYW5kLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiA0NyAjIFBsYXkgU291bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChtb3ZlQ29tbWFuZC5yZXNvdXJjZSlcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuVHJhbnNmb3JtRW5lbXlcIlxuICAgICAgICAgICAgICAgICAgICBpZiBub3QgY29tbWFuZC5wYXJhbXM/LnRhcmdldElkLnNjb3BlPyAjIEZJWE1FOiBNYXliZSBqdXN0IHVzZSB0aGUgY3VycmVudCB2YXJpYWJsZSB2YWx1ZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZW15ID0gUmVjb3JkTWFuYWdlci5lbmVtaWVzW2NvbW1hbmQucGFyYW1zLnRhcmdldElkXVxuICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRBY3RvckJhdHRsZUFuaW1hdGlvbnMoZW5lbXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlBsYXlNdXNpY1wiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLm11c2ljP1xuICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRNdXNpYyhjb21tYW5kLnBhcmFtcy5tdXNpYylcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuUGxheVZpZGVvXCIsIFwiZ3MuU2hvd1ZpZGVvXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMudmlkZW8/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0VmlkZW8oXCJNb3ZpZXMvI3tjb21tYW5kLnBhcmFtcy52aWRlby5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb24/LnR5cGUgPT0gZ3MuQW5pbWF0aW9uVHlwZXMuTUFTS0lOR1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL01hc2tzLyN7Y29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLm1hc2suZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5QbGF5U291bmRcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zb3VuZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQoY29tbWFuZC5wYXJhbXMuc291bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0QXVkaW9CdWZmZXIoXCJBdWRpby9Tb3VuZC8je2NvbW1hbmQucGFyYW1zLnNvdW5kLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2hhbmdlU291bmRzXCJcbiAgICAgICAgICAgICAgICAgICAgZm9yIHNvdW5kIGluIGNvbW1hbmQucGFyYW1zLnNvdW5kc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgc291bmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChzb3VuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2hhbmdlU2NyZWVuQ3Vyc29yXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuZ3JhcGhpYz8ubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIHJlc291cmNlcyBmb3IgdGhlIHNwZWNpZmllZCBhbmltYXRpb24uXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkQW5pbWF0aW9uXG4gICAgKiBAcGFyYW0ge09iamVjdH0gYW5pbWF0aW9uIC0gVGhlIGFuaW1hdGlvbi1yZWNvcmQuXG4gICAgKiBAc3RhdGljXG4gICAgIyMjIFxuICAgIGxvYWRBbmltYXRpb246IChhbmltYXRpb24pIC0+XG4gICAgICAgIGlmIGFuaW1hdGlvbj8gYW5kIGFuaW1hdGlvbi5ncmFwaGljP1xuICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1NpbXBsZUFuaW1hdGlvbnMvI3thbmltYXRpb24uZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgXG4gICAgXG5cbmdzLlJlc291cmNlTG9hZGVyID0gbmV3IFJlc291cmNlTG9hZGVyKCkgICAgICAgIFxud2luZG93LlJlc291cmNlTG9hZGVyID0gZ3MuUmVzb3VyY2VMb2FkZXIiXX0=
737 - //# sourceURL=ResourceLoader_30.js
781 + //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUE7O0FBQU07O0FBQ0Y7Ozs7Ozs7Ozs7RUFVYSx3QkFBQTtJQUNULElBQUMsQ0FBQSxpQkFBRCxHQUFxQjtJQUNyQixJQUFDLENBQUEsc0JBQUQsR0FBMEI7RUFGakI7OztBQUliOzs7Ozs7OzsyQkFPQSxtQkFBQSxHQUFxQixTQUFDLEtBQUQ7QUFDakIsUUFBQTtBQUFBLFNBQUEsVUFBQTtNQUNJLElBQUMsQ0FBQSxvQkFBRCxDQUFzQixLQUFNLENBQUEsQ0FBQSxDQUE1QjtBQURKO0FBR0EsV0FBTztFQUpVOzs7QUFNckI7Ozs7Ozs7OzJCQU9BLHdCQUFBLEdBQTBCLFNBQUMsTUFBRDtBQUN0QixRQUFBO0FBQUEsU0FBQSxXQUFBO01BQ0ksSUFBRyxDQUFBLEtBQUssT0FBTCxJQUFnQixDQUFBLEtBQUssV0FBeEI7UUFDSSxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsTUFBTyxDQUFBLENBQUEsQ0FBdEQsRUFESjtPQUFBLE1BRUssSUFBRyxDQUFBLEtBQUssT0FBUjtRQUNELGVBQWUsQ0FBQyxRQUFoQixDQUF5QixTQUFBLEdBQVUsTUFBTyxDQUFBLENBQUEsQ0FBMUMsRUFEQzs7QUFIVDtBQUtBLFdBQU87RUFOZTs7O0FBUTFCOzs7Ozs7OzsyQkFPQSx3QkFBQSxHQUEwQixTQUFDLE1BQUQ7QUFDdEIsUUFBQTtBQUFBLFNBQUEsV0FBQTtNQUNJLElBQUcsTUFBTyxDQUFBLENBQUEsQ0FBUCxZQUFxQixLQUF4QjtBQUNJO0FBQUEsYUFBQSxxQ0FBQTs7QUFDSSxlQUFBLE1BQUE7WUFDSSxJQUFHLENBQUEsS0FBSyxPQUFMLElBQWdCLENBQUEsS0FBSyxXQUF4QjtjQUNJLEtBQUEsR0FBUSxDQUFFLENBQUEsQ0FBQTtjQUVWLG9CQUFHLEtBQUssQ0FBRSxVQUFQLENBQWtCLE9BQWxCLFVBQUg7Z0JBQ0ksZUFBZSxDQUFDLFNBQWhC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QUFBLDhDQUFBOztZQUNJLElBQUcsYUFBSDtjQUNJLFlBQVksQ0FBQyxTQUFiLENBQXVCLEtBQXZCLEVBREo7O0FBREo7QUFEQztBQXJOVCxhQTBOUyx1QkExTlQ7VUEyTlEsSUFBRyx3RUFBSDtZQUNJLGVBQWUsQ0FBQyxTQUFoQixDQUEwQixvQkFBQSxHQUFxQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUF0RSxFQURKOztBQTNOUjtBQURKO0FBOE5BLFdBQU87RUFqT2lCOzs7QUFtTzVCOzs7Ozs7OzsyQkFPQSxhQUFBLEdBQWUsU0FBQyxTQUFEO0lBQ1gsSUFBRyxtQkFBQSxJQUFlLDJCQUFsQjthQUNJLGVBQWUsQ0FBQyxTQUFoQixDQUEwQiw0QkFBQSxHQUE2QixTQUFTLENBQUMsT0FBTyxDQUFDLElBQXpFLEVBREo7O0VBRFc7Ozs7OztBQU1uQixFQUFFLENBQUMsY0FBSCxHQUF3QixJQUFBLGNBQUEsQ0FBQTs7QUFDeEIsTUFBTSxDQUFDLGNBQVAsR0FBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4jXG4jICAgU2NyaXB0OiBSZXNvdXJjZUxvYWRlclxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgUmVzb3VyY2VMb2FkZXJcbiAgICAjIyMqXG4gICAgKiBUaGUgcmVzb3VyY2UgaGVscHMgdG8gbG9hZCBhIGJ1bmNoIG9mIHJlc291cmNlcyBmcm9tIGRpZmZlcmVudCBraW5kIG9mXG4gICAgKiBkYXRhIHN0cnVjdHVyZXMuXG4gICAgKlxuICAgICogQG1vZHVsZSBnc1xuICAgICogQGNsYXNzIFJlc291cmNlTG9hZGVyXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHN0YXRpY1xuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAtPlxuICAgICAgICBAbG9hZGVkU2NlbmVzQnlVaWQgPSB7fVxuICAgICAgICBAbG9hZGVkQ29tbW9uRXZlbnRzQnlJZCA9IFtdXG4gICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIGdyYXBoaWNzIGZvciB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgY3VzdG9tIGxheW91dCB0eXBlcy90ZW1wbGF0ZXNcbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRVaVR5cGVzR3JhcGhpY3NcbiAgICAqIEBwYXJhbSB7T2JqZWN0W119IHR5cGVzIC0gQW4gYXJyYXkgb2YgY3VzdG9tIGxheW91dCB0eXBlcy90ZW1wbGF0ZXNcbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgXG4gICAgbG9hZFVpVHlwZXNHcmFwaGljczogKHR5cGVzKSAtPlxuICAgICAgICBmb3IgayBvZiB0eXBlc1xuICAgICAgICAgICAgQGxvYWRVaUxheW91dEdyYXBoaWNzKHR5cGVzW2tdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIGdyYXBoaWNzIGZvciB0aGUgc3BlY2lmaWVkIGxheW91dC1kZXNjcmlwdG9yLlxuICAgICpcbiAgICAqIEBtZXRob2QgbG9hZFVpR3JhcGhpY3NGcm9tT2JqZWN0XG4gICAgKiBAcGFyYW0ge09iamVjdH0gbGF5b3V0IC0gVGhlIGxheW91dCBkZXNjcmlwdG9yLlxuICAgICogQHN0YXRpY1xuICAgICMjIyBcbiAgICBsb2FkVWlHcmFwaGljc0Zyb21PYmplY3Q6IChsYXlvdXQpIC0+XG4gICAgICAgIGZvciBrIG9mIGxheW91dFxuICAgICAgICAgICAgaWYgayA9PSBcImltYWdlXCIgb3IgayA9PSBcImZ1bGxJbWFnZVwiXG4gICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7bGF5b3V0W2tdfVwiKVxuICAgICAgICAgICAgZWxzZSBpZiBrID09IFwidmlkZW9cIlxuICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRWaWRlbyhcIk1vdmllcy8je2xheW91dFtrXX1cIikgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCBncmFwaGljcyBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQtZGVzY3JpcHRvci5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRVaURhdGFGaWVsZHNHcmFwaGljc1xuICAgICogQHBhcmFtIHtPYmplY3R9IGxheW91dCAtIFRoZSBsYXlvdXQgZGVzY3JpcHRvci5cbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgIFxuICAgIGxvYWRVaURhdGFGaWVsZHNHcmFwaGljczogKGxheW91dCkgLT5cbiAgICAgICAgZm9yIGsgb2YgbGF5b3V0XG4gICAgICAgICAgICBpZiBsYXlvdXRba10gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICAgIGZvciBvIGluIGxheW91dFtrXVxuICAgICAgICAgICAgICAgICAgICBmb3IgaiBvZiBvXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBqID09IFwiaW1hZ2VcIiBvciBqID09IFwiZnVsbEltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IG9bal1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbWFnZT8uc3RhcnRzV2l0aChcImRhdGE6XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAob1tqXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je29bal19XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIGdyYXBoaWNzIGZvciB0aGUgc3BlY2lmaWVkIGxheW91dC1kZXNjcmlwdG9yLlxuICAgICpcbiAgICAqIEBtZXRob2QgbG9hZFVpRGF0YUZpZWxkc0dyYXBoaWNzXG4gICAgKiBAcGFyYW0ge09iamVjdH0gbGF5b3V0IC0gVGhlIGxheW91dCBkZXNjcmlwdG9yLlxuICAgICogQHN0YXRpY1xuICAgICMjIyAgICAgXG4gICAgbG9hZFVpTGF5b3V0R3JhcGhpY3M6IChsYXlvdXQpIC0+XG4gICAgICAgIGlmIGxheW91dC5wcmVsb2FkP1xuICAgICAgICAgICAgaWYgbGF5b3V0LnByZWxvYWQuZ3JhcGhpY3M/XG4gICAgICAgICAgICAgICAgZm9yIGdyYXBoaWMgaW4gbGF5b3V0LnByZWxvYWQuZ3JhcGhpY3NcbiAgICAgICAgICAgICAgICAgICAgaWYgZ3JhcGhpYy5uYW1lP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIiN7Z3JhcGhpYy5mb2xkZXJ8fCdHcmFwaGljcy9QaWN0dXJlcyd9LyN7dWkuQ29tcG9uZW50X0Zvcm11bGFIYW5kbGVyLmZpZWxkVmFsdWUobnVsbCwgZ3JhcGhpYy5uYW1lKX1cIilcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gdWkuQ29tcG9uZW50X0Zvcm11bGFIYW5kbGVyLmZpZWxkVmFsdWUobnVsbCwgZ3JhcGhpYy5wYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YiBpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWI/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID0gdWkuQ29tcG9uZW50X0Zvcm11bGFIYW5kbGVyLmZpZWxkVmFsdWUoc3ViLCBncmFwaGljLmltYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbWFnZT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2ltYWdlfVwiKVxuICAgICAgICAgICAgaWYgbGF5b3V0LnByZWxvYWQudmlkZW9zP1xuICAgICAgICAgICAgICAgIGZvciB2aWRlbyBpbiBsYXlvdXQucHJlbG9hZC52aWRlb3NcbiAgICAgICAgICAgICAgICAgICAgaWYgdmlkZW8ubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRWaWRlbyhcIiN7dmlkZW8uZm9sZGVyfHwnTW92aWVzJ30vI3t2aWRlby5uYW1lfVwiKVxuICAgICAgICAgICAgaWYgbGF5b3V0LnByZWxvYWQubXVzaWM/XG4gICAgICAgICAgICAgICAgZm9yIG11c2ljIGluIGxheW91dC5wcmVsb2FkLm11c2ljXG4gICAgICAgICAgICAgICAgICAgIGlmIG11c2ljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldFZpZGVvKFwiI3ttdXNpYy5mb2xkZXJ8fCdBdWRpby9NdXNpYyd9LyN7bXVzaWMubmFtZSB8fCBtdXNpY31cIilcbiAgICAgICAgICAgIGlmIGxheW91dC5wcmVsb2FkLnNvdW5kcz9cbiAgICAgICAgICAgICAgICBmb3Igc291bmQgaW4gbGF5b3V0LnByZWxvYWQuc291bmRzXG4gICAgICAgICAgICAgICAgICAgIGlmIHNvdW5kP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEF1ZGlvQnVmZmVyKFwiI3tzb3VuZC5mb2xkZXJ8fCdBdWRpby9Tb3VuZHMnfS8je3VpLkNvbXBvbmVudF9Gb3JtdWxhSGFuZGxlci5maWVsZFZhbHVlKGxheW91dCwgc291bmQubmFtZSB8fCBzb3VuZCl9XCIpXG4gICAgICAgIGlmIGxheW91dC5pbWFnZXM/XG4gICAgICAgICAgICBmb3IgaW1hZ2UgaW4gbGF5b3V0LmltYWdlc1xuICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2ltYWdlfVwiKVxuICAgICAgICBpZiBsYXlvdXQuYW5pbWF0aW9ucz9cbiAgICAgICAgICAgIGZvciBkZXNjcmlwdG9yIGluIGxheW91dC5hbmltYXRpb25zXG4gICAgICAgICAgICAgICAgZm9yIGFuaW1hdGlvbiBpbiBkZXNjcmlwdG9yLmZsb3dcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIGFuaW1hdGlvbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuIFwic291bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRBdWRpb0J1ZmZlcihcIkF1ZGlvL1NvdW5kcy8je2FuaW1hdGlvbi5zb3VuZH1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gXCJjaGFuZ2VJbWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbWFnZSBpbiBhbmltYXRpb24uaW1hZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2ltYWdlfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBcIm1hc2tUb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL01hc2tzLyN7YW5pbWF0aW9uLm1hc2t9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGFuaW1hdGlvbi5zb3VuZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRBdWRpb0J1ZmZlcihcIkF1ZGlvL1NvdW5kcy8je2FuaW1hdGlvbi5zb3VuZH1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaWYgbGF5b3V0LmltYWdlP1xuICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7bGF5b3V0LmltYWdlfVwiKVxuICAgICAgICBpZiBsYXlvdXQudmlkZW8/XG4gICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0VmlkZW8oXCJNb3ZpZXMvI3tsYXlvdXQudmlkZW99XCIpXG4gICAgICAgIGlmIGxheW91dC5jdXN0b21GaWVsZHM/XG4gICAgICAgICAgICBAbG9hZFVpR3JhcGhpY3NGcm9tT2JqZWN0KGxheW91dC5jdXN0b21GaWVsZHMpXG4gICAgICAgIGlmIGxheW91dC5jdXN0b21GaWVsZHM/LmFjdGlvbnM/XG4gICAgICAgICAgICBmb3IgYWN0aW9uIGluIGxheW91dC5jdXN0b21GaWVsZHMuYWN0aW9uc1xuICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5uYW1lID09IFwicGxheVZvaWNlXCIgb3IgYWN0aW9uLm5hbWUgPT0gXCJwbGF5U291bmRcIlxuICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGFjdGlvbi5wYXJhbXMubmFtZSlcbiAgICAgICAgaWYgbGF5b3V0LmFjdGlvbnM/IG9yIGxheW91dC5hY3Rpb24/XG4gICAgICAgICAgICBhY3Rpb25zID0gaWYgbGF5b3V0LmFjdGlvbj8gdGhlbiBbbGF5b3V0LmFjdGlvbl0gZWxzZSBsYXlvdXQuYWN0aW9uc1xuICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBhY3Rpb25zXG4gICAgICAgICAgICAgICAgaWYgYWN0aW9uLm5hbWUgPT0gXCJwbGF5Vm9pY2VcIiBvciBhY3Rpb24ubmFtZSA9PSBcInBsYXlTb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQoYWN0aW9uLnBhcmFtcy5uYW1lKVxuICAgICAgICBpZiBsYXlvdXQucGFyYW1zXG4gICAgICAgICAgICBAbG9hZFVpTGF5b3V0R3JhcGhpY3MobGF5b3V0LnBhcmFtcylcbiAgICAgICAgaWYgbGF5b3V0LnRlbXBsYXRlP1xuICAgICAgICAgICAgQGxvYWRVaUxheW91dEdyYXBoaWNzKGxheW91dC50ZW1wbGF0ZSlcbiAgICAgICAgaWYgbGF5b3V0LnN0eWxlPyBhbmQgdWkuVWlGYWN0b3J5LnN0eWxlc1tsYXlvdXQuc3R5bGVdP1xuICAgICAgICAgICAgQGxvYWRVaUxheW91dEdyYXBoaWNzKHVpLlVpRmFjdG9yeS5zdHlsZXNbbGF5b3V0LnN0eWxlXSlcbiAgICAgICAgICAgIGZvciBzZWwgb2YgdWkuVUlNYW5hZ2VyLnNlbGVjdG9yc1xuICAgICAgICAgICAgICAgIHN0eWxlID0gdWkuVUlNYW5hZ2VyLnN0eWxlc1tsYXlvdXQuc3R5bGUgKyBcIjpcIitzZWxdXG4gICAgICAgICAgICAgICAgaWYgc3R5bGUgdGhlbiBAbG9hZFVpTGF5b3V0R3JhcGhpY3Moc3R5bGUpXG4gICAgICAgIGlmIHVpLlVpRmFjdG9yeS5jdXN0b21UeXBlc1tsYXlvdXQudHlwZV0/XG4gICAgICAgICAgICBAbG9hZFVpTGF5b3V0R3JhcGhpY3ModWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzW2xheW91dC50eXBlXSlcbiAgICAgICAgaWYgbGF5b3V0LmNvbnRyb2xzP1xuICAgICAgICAgICAgZm9yIGNvbnRyb2wgaW4gbGF5b3V0LmNvbnRyb2xzXG4gICAgICAgICAgICAgICAgQGxvYWRVaUxheW91dEdyYXBoaWNzKGNvbnRyb2wpXG4gICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIHN5c3RlbSBzb3VuZHMuXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkU3lzdGVtU291bmRzXG4gICAgKiBAc3RhdGljXG4gICAgIyMjICAgICAgICAgICAgICAgIFxuICAgIGxvYWRTeXN0ZW1Tb3VuZHM6IC0+XG4gICAgICAgIGZvciBzb3VuZCBpbiBSZWNvcmRNYW5hZ2VyLnN5c3RlbS5zb3VuZHNcbiAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQoc291bmQpXG4gICAgIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCBzeXN0ZW0gZ3JhcGhpY3MuXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkU3lzdGVtR3JhcGhpY3NcbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgIFxuICAgIGxvYWRTeXN0ZW1HcmFwaGljczogLT5cbiAgICAgICAgZm9yIHNsb3QgaW4gR2FtZU1hbmFnZXIuc2F2ZUdhbWVTbG90c1xuICAgICAgICAgICAgaWYgc2xvdC50aHVtYj8gYW5kIHNsb3QudGh1bWIubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoc2xvdC50aHVtYilcbiAgICAgICAgaWYgUmVjb3JkTWFuYWdlci5zeXN0ZW0uY3Vyc29yPy5uYW1lXG4gICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tSZWNvcmRNYW5hZ2VyLnN5c3RlbS5jdXJzb3IubmFtZX1cIilcbiAgICAgICAgaWYgUmVjb3JkTWFuYWdlci5zeXN0ZW0udGl0bGVTY3JlZW4/Lm5hbWVcbiAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je1JlY29yZE1hbmFnZXIuc3lzdGVtLnRpdGxlU2NyZWVuLm5hbWV9XCIpXG4gICAgICAgIGlmIFJlY29yZE1hbmFnZXIuc3lzdGVtLmxhbmd1YWdlU2NyZWVuPy5uYW1lXG4gICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tSZWNvcmRNYW5hZ2VyLnN5c3RlbS5sYW5ndWFnZVNjcmVlbi5uYW1lfVwiKVxuICAgICAgICBpZiBSZWNvcmRNYW5hZ2VyLnN5c3RlbS5tZW51QmFja2dyb3VuZD8ubmFtZVxuICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7UmVjb3JkTWFuYWdlci5zeXN0ZW0ubWVudUJhY2tncm91bmQubmFtZX1cIilcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICBcbiAgICAjIyMqXG4gICAgKiBMb2FkcyBhbGwgcmVzb3VyY2VzIG5lZWRlZCBieSB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgY29tbWFuZHMuXG4gICAgKlxuICAgICogQG1ldGhvZCBsb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzXG4gICAgKiBAcGFyYW0ge09iamVjdFtdfSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzLlxuICAgICogQHJldHVybiB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIGRhdGEgbmVlZHMgdG8gYmUgbG9hZGVkLiBcbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgXG4gICAgbG9hZEV2ZW50Q29tbWFuZHNEYXRhOiAoY29tbWFuZHMpIC0+XG4gICAgICAgIEBsb2FkZWRTY2VuZXNCeVVpZCA9IHt9XG4gICAgICAgIHJldHVybiBAX2xvYWRFdmVudENvbW1hbmRzRGF0YShjb21tYW5kcylcbiAgICAgICAgXG4gICAgX2xvYWRFdmVudENvbW1hbmRzRGF0YTogKGNvbW1hbmRzKSAtPlxuICAgICAgICByZXR1cm4gbm8gaWYgbm90IGNvbW1hbmRzP1xuICAgICAgICBcbiAgICAgICAgcmVzdWx0ID0gbm9cbiAgICAgICAgXG4gICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXG4gICAgICAgICAgICBzd2l0Y2ggY29tbWFuZC5pZFxuICAgICAgICAgICAgICAgIHdoZW4gXCJ2bi5DaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hY3Rpb24uc2NlbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lRG9jdW1lbnQgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChjb21tYW5kLnBhcmFtcy5hY3Rpb24uc2NlbmUudWlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2NlbmVEb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICFzY2VuZURvY3VtZW50LmxvYWRlZCBpZiAhcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2NlbmVEb2N1bWVudC5sb2FkZWQgYW5kICFAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF0gPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQF9sb2FkRXZlbnRDb21tYW5kc0RhdGEoc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcykgaWYgIXJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNhbGxTY2VuZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnNjZW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2VuZURvY3VtZW50ID0gRGF0YU1hbmFnZXIuZ2V0RG9jdW1lbnQoY29tbWFuZC5wYXJhbXMuc2NlbmUudWlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2NlbmVEb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICFzY2VuZURvY3VtZW50LmxvYWRlZCBpZiAhcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2NlbmVEb2N1bWVudC5sb2FkZWQgYW5kICFAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF0gPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQF9sb2FkRXZlbnRDb21tYW5kc0RhdGEoc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcykgaWYgIXJlc3VsdFxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAgXG4gICAgICBcbiAgICAjIyMqXG4gICAgKiBQcmVsb2FkcyBhbGwgcmVzb3VyY2VzIG5lZWRlZCBieSB0aGUgc3BlY2lmaWVkIGNvbW1vbiBldmVudC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGxvYWRDb21tb25FdmVudFJlc291cmNlc1xuICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50SWQgLSBJRCBvZiB0aGUgY29tbW9uIGV2ZW50IHRvIHByZWxvYWQgdGhlIHJlc291cmNlcyBmb3IuXG4gICAgKiBAc3RhdGljXG4gICAgIyMjICAgIFxuICAgIGxvYWRDb21tb25FdmVudFJlc291cmNlczogKGV2ZW50SWQpIC0+XG4gICAgICAgIGNvbW1vbkV2ZW50ID0gUmVjb3JkTWFuYWdlci5jb21tb25FdmVudHNbZXZlbnRJZF1cbiAgICAgICAgaWYgY29tbW9uRXZlbnQ/IGFuZCAhQGxvYWRlZENvbW1vbkV2ZW50c0J5SWRbZXZlbnRJZF1cbiAgICAgICAgICAgIEBsb2FkZWRDb21tb25FdmVudHNCeUlkW2V2ZW50SWRdID0gdHJ1ZVxuICAgICAgICAgICAgQF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzKGNvbW1vbkV2ZW50LmNvbW1hbmRzKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogTG9hZHMgYWxsIHJlc291cmNlcyBuZWVkZWQgYnkgdGhlIHNwZWNpZmllZCBsaXN0IG9mIGNvbW1hbmRzLlxuICAgICpcbiAgICAqIEBtZXRob2QgbG9hZEV2ZW50Q29tbWFuZHNHcmFwaGljc1xuICAgICogQHBhcmFtIHtPYmplY3RbXX0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcy5cbiAgICAqIEBzdGF0aWNcbiAgICAjIyMgICAgIFxuICAgIGxvYWRFdmVudENvbW1hbmRzR3JhcGhpY3M6IChjb21tYW5kcykgLT5cbiAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkID0ge31cbiAgICAgICAgQGxvYWRlZENvbW1vbkV2ZW50c0J5SWQgPSBbXVxuICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3MoY29tbWFuZHMpXG4gICAgICAgIFxuICAgIF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzOiAoY29tbWFuZHMpIC0+XG4gICAgICAgIHJldHVybiBpZiBub3QgY29tbWFuZHM/XG4gICAgICAgIFxuICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kc1xuICAgICAgICAgICAgc3dpdGNoIGNvbW1hbmQuaWRcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuU3RhcnRUaW1lclwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFjdGlvbi50eXBlID09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkQ29tbW9uRXZlbnRSZXNvdXJjZXMoY29tbWFuZC5wYXJhbXMuYWN0aW9uLmRhdGEuY29tbW9uRXZlbnRJZClcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2FsbENvbW1vbkV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uRXZlbnQgPSBSZWNvcmRNYW5hZ2VyLmNvbW1vbkV2ZW50c1tjb21tYW5kLnBhcmFtcy5jb21tb25FdmVudElkXVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tb25FdmVudD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbSwgaSBpbiBjb21tb25FdmVudC5wYXJhbWV0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0uc3RyaW5nVmFsdWVUeXBlID09IFwic2NlbmVJZFwiIGFuZCBjb21tYW5kLnBhcmFtcy5wYXJhbWV0ZXJzPy52YWx1ZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVEb2N1bWVudCA9IERhdGFNYW5hZ2VyLmdldERvY3VtZW50KGNvbW1hbmQucGFyYW1zLnBhcmFtZXRlcnMudmFsdWVzW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50IGFuZCAhQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXSA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQF9sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzKHNjZW5lRG9jdW1lbnQuaXRlbXMuY29tbWFuZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAhQGxvYWRlZENvbW1vbkV2ZW50c0J5SWRbY29tbWFuZC5wYXJhbXMuY29tbW9uRXZlbnRJZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbG9hZGVkQ29tbW9uRXZlbnRzQnlJZFtjb21tYW5kLnBhcmFtcy5jb21tb25FdmVudElkXSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3MoY29tbW9uRXZlbnQuY29tbWFuZHMpXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNhbGxTY2VuZVwiXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lRG9jdW1lbnQgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChjb21tYW5kLnBhcmFtcy5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgIGlmIHNjZW5lRG9jdW1lbnQgYW5kICFAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdXG4gICAgICAgICAgICAgICAgICAgICAgICBAbG9hZGVkU2NlbmVzQnlVaWRbc2NlbmVEb2N1bWVudC51aWRdID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3Moc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2hhbmdlVHJhbnNpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLmdyYXBoaWM/Lm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlNjcmVlblRyYW5zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5ncmFwaGljPy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJ2bi5DaGFuZ2VCYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuZ3JhcGhpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9CYWNrZ3JvdW5kcy8je2NvbW1hbmQucGFyYW1zLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uPy50eXBlID09IGdzLkFuaW1hdGlvblR5cGVzLk1BU0tJTkcgYW5kIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrPy5ncmFwaGljXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5hbmltYXRpb24ubWFzay5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkwyREpvaW5TY2VuZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLm1vZGVsP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldExpdmUyRE1vZGVsKFwiTGl2ZTJELyN7Y29tbWFuZC5wYXJhbXMubW9kZWwubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2hhcmFjdGVySm9pblNjZW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJzW2NvbW1hbmQucGFyYW1zLmNoYXJhY3RlcklkXVxuICAgICAgICAgICAgICAgICAgICBpZiBjaGFyYWN0ZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uSWQgPSBjb21tYW5kLnBhcmFtcy5leHByZXNzaW9uSWQgPyBjaGFyYWN0ZXIuZGVmYXVsdEV4cHJlc3Npb25JZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbklkP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlY29yZD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjb3JkLmlkbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbWFnZSBpbiByZWNvcmQuaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjb3JkLnRhbGtpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbWFnZSBpbiByZWNvcmQudGFsa2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLnR5cGUgPT0gZ3MuQW5pbWF0aW9uVHlwZXMuTUFTS0lORyBhbmQgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLm1hc2suZ3JhcGhpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwidm4uQ2hhcmFjdGVyQ2hhbmdlRXhwcmVzc2lvblwiXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW1hZ2UgaW4gcmVjb3JkLmlkbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW1hZ2UgaW4gcmVjb3JkLnRhbGtpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi50eXBlID09IGdzLkFuaW1hdGlvblR5cGVzLk1BU0tJTkcgYW5kIGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrLmdyYXBoaWM/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvTWFza3MvI3tjb21tYW5kLnBhcmFtcy5hbmltYXRpb24ubWFzay5ncmFwaGljLm5hbWV9XCIpICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuU2hvd1BhcnRpYWxNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMudm9pY2U/XG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGNvbW1hbmQucGFyYW1zLnZvaWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgI1Jlc291cmNlTWFuYWdlci5nZXRBdWRpb0J1ZmZlcihcIkF1ZGlvL1NvdW5kLyN7Y29tbWFuZC5wYXJhbXMudm9pY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVEb2N1bWVudCA9IERhdGFNYW5hZ2VyLmdldERvY3VtZW50KGNvbW1hbmQucGFyYW1zLmFjdGlvbi5zY2VuZS51aWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBzY2VuZURvY3VtZW50IGFuZCAhQGxvYWRlZFNjZW5lc0J5VWlkW3NjZW5lRG9jdW1lbnQudWlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkZWRTY2VuZXNCeVVpZFtzY2VuZURvY3VtZW50LnVpZF0gPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX2xvYWRFdmVudENvbW1hbmRzR3JhcGhpY3Moc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5TaG93TWVzc2FnZVwiLCBcImdzLlNob3dNZXNzYWdlTlZMXCIsIFwiZ3MuU2hvd1RleHRcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb25zP1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVpZCBpbiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uID0gUmVjb3JkTWFuYWdlci5hbmltYXRpb25zW2VpZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbmltYXRpb24/IGFuZCBhbmltYXRpb24uZ3JhcGhpYy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2FuaW1hdGlvbi5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5leHByZXNzaW9ucz9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlaWQgaW4gY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJFeHByZXNzaW9uc1tlaWRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbj9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwcmVzc2lvbi5pZGxlIHRoZW4gZm9yIGltYWdlIGluIGV4cHJlc3Npb24uaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3tpbWFnZS5yZXNvdXJjZS5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHByZXNzaW9uLnRhbGtpbmcgdGhlbiBmb3IgaW1hZ2UgaW4gZXhwcmVzc2lvbi50YWxraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvQ2hhcmFjdGVycy8je2ltYWdlLnJlc291cmNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnZvaWNlP1xuICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChjb21tYW5kLnBhcmFtcy52b2ljZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICNSZXNvdXJjZU1hbmFnZXIuZ2V0QXVkaW9CdWZmZXIoXCJBdWRpby9Tb3VuZC8je2NvbW1hbmQucGFyYW1zLnZvaWNlLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyRXhwcmVzc2lvbnNbY29tbWFuZC5wYXJhbXMuZXhwcmVzc2lvbklkXVxuICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByZWNvcmQuaWRsZSB0aGVuIGZvciBpbWFnZSBpbiByZWNvcmQuaWRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9DaGFyYWN0ZXJzLyN7aW1hZ2UucmVzb3VyY2UubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlY29yZC50YWxraW5nIHRoZW4gZm9yIGltYWdlIGluIHJlY29yZC50YWxraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3tpbWFnZS5yZXNvdXJjZS5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLkFkZEhvdHNwb3RcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5iYXNlR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLmJhc2VHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5iYXNlR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ob3ZlckdyYXBoaWM/IGFuZCBjb21tYW5kLnBhcmFtcy5ob3ZlckdyYXBoaWMubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLmhvdmVyR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEdyYXBoaWM/IGFuZCBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEdyYXBoaWMubmFtZT9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLnNlbGVjdGVkR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEhvdmVyR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLnNlbGVjdGVkSG92ZXJHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEhvdmVyR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkR3JhcGhpYz8gYW5kIGNvbW1hbmQucGFyYW1zLnVuc2VsZWN0ZWRHcmFwaGljLm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkR3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hY3Rpb25zP1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vbkNsaWNrLnR5cGUgPT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkQ29tbW9uRXZlbnRSZXNvdXJjZXMoY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vbkNsaWNrLmNvbW1vbkV2ZW50SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hY3Rpb25zLm9uQ2xpY2sudHlwZSA9PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRDb21tb25FdmVudFJlc291cmNlcyhjb21tYW5kLnBhcmFtcy5hY3Rpb25zLm9uRW50ZXIuY29tbW9uRXZlbnRJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmFjdGlvbnMub25DbGljay50eXBlID09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbG9hZENvbW1vbkV2ZW50UmVzb3VyY2VzKGNvbW1hbmQucGFyYW1zLmFjdGlvbnMub25MZWF2ZS5jb21tb25FdmVudElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vbkNsaWNrLnR5cGUgPT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkQ29tbW9uRXZlbnRSZXNvdXJjZXMoY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vblNlbGVjdC5jb21tb25FdmVudElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vbkNsaWNrLnR5cGUgPT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkQ29tbW9uRXZlbnRSZXNvdXJjZXMoY29tbWFuZC5wYXJhbXMuYWN0aW9ucy5vbkRlc2VsZWN0LmNvbW1vbkV2ZW50SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hY3Rpb25zLm9uQ2xpY2sudHlwZSA9PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRDb21tb25FdmVudFJlc291cmNlcyhjb21tYW5kLnBhcmFtcy5hY3Rpb25zLm9uRHJhZy5jb21tb25FdmVudElkKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuU2hvd1BpY3R1cmVcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ncmFwaGljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7Y29tbWFuZC5wYXJhbXMuZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5hbmltYXRpb24/LnR5cGUgPT0gZ3MuQW5pbWF0aW9uVHlwZXMuTUFTS0lOR1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL01hc2tzLyN7Y29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uLm1hc2suZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5TaG93SW1hZ2VNYXBcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ncm91bmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5ncm91bmQubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuaG92ZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5ob3Zlci5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy51bnNlbGVjdGVkP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7Y29tbWFuZC5wYXJhbXMudW5zZWxlY3RlZC5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5zZWxlY3RlZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2NvbW1hbmQucGFyYW1zLnNlbGVjdGVkLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnNlbGVjdGVkSG92ZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5zZWxlY3RlZEhvdmVyLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGZvciBob3RzcG90IGluIGNvbW1hbmQucGFyYW1zLmhvdHNwb3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGhvdHNwb3QuZGF0YS5vbkhvdmVyU291bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGhvdHNwb3QuZGF0YS5vbkNsaWNrU291bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBob3RzcG90LmRhdGEuYWN0aW9uID09IDIgIyBDb21tb24gRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25FdmVudCA9IFJlY29yZE1hbmFnZXIuY29tbW9uRXZlbnRzW2hvdHNwb3QuZGF0YS5jb21tb25FdmVudElkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1vbkV2ZW50PyBhbmQgIUBsb2FkZWRDb21tb25FdmVudHNCeUlkW2hvdHNwb3QuZGF0YS5jb21tb25FdmVudElkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbG9hZGVkQ29tbW9uRXZlbnRzQnlJZFtob3RzcG90LmRhdGEuY29tbW9uRXZlbnRJZF0gPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBfbG9hZEV2ZW50Q29tbWFuZHNHcmFwaGljcyhjb21tb25FdmVudC5jb21tYW5kcylcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuTW92ZVBpY3R1cmVQYXRoXCIsIFwidm4uTW92ZUNoYXJhY3RlclBhdGhcIiwgXCJ2bi5TY3JvbGxCYWNrZ3JvdW5kUGF0aFwiLCBcImdzLk1vdmVWaWRlb1BhdGhcIiAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5wYXRoLmVmZmVjdHM/XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZWZmZWN0IGluIGNvbW1hbmQucGFyYW1zLnBhdGguZWZmZWN0cy5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLmxvYWRTb3VuZChlZmZlY3Quc291bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLk1hc2tQaWN0dXJlXCIsIFwidm4uTWFza0NoYXJhY3RlclwiLCBcInZuLk1hc2tCYWNrZ3JvdW5kXCIsIFwiZ3MuTWFza1ZpZGVvXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMubWFzay5zb3VyY2VUeXBlID09IDAgYW5kIGNvbW1hbmQucGFyYW1zLm1hc2suZ3JhcGhpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLm1hc2suZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5tYXNrLnNvdXJjZVR5cGUgPT0gMSBhbmQgY29tbWFuZC5wYXJhbXMubWFzay52aWRlbz9cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRWaWRlbyhcIk1vdmllcy8je2NvbW1hbmQucGFyYW1zLm1hc2sudmlkZW8ubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuUGxheVBpY3R1cmVBbmltYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbklkXG4gICAgICAgICAgICAgICAgICAgIGlmIGFuaW1hdGlvbklkPyBhbmQgbm90IGFuaW1hdGlvbklkLnNjb3BlP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbiA9IFJlY29yZE1hbmFnZXIuYW5pbWF0aW9uc1thbmltYXRpb25JZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbmltYXRpb24gYW5kIGFuaW1hdGlvbi5ncmFwaGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je2FuaW1hdGlvbi5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlNob3dCYXR0bGVBbmltYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IGNvbW1hbmQucGFyYW1zLmFuaW1hdGlvbklkXG4gICAgICAgICAgICAgICAgICAgIGlmIGFuaW1hdGlvbklkPyBhbmQgbm90IGFuaW1hdGlvbklkLnNjb3BlP1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uID0gUmVjb3JkTWFuYWdlci5hbmltYXRpb25zW2FuaW1hdGlvbklkXVxuICAgICAgICAgICAgICAgICAgICAgICAgQGxvYWRDb21wbGV4QW5pbWF0aW9uKGFuaW1hdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5JbnB1dE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBhY3RvcklkID0gY29tbWFuZC5wYXJhbXMuYWN0b3JJZFxuICAgICAgICAgICAgICAgICAgICBpZiBhY3RvcklkPyBhbmQgbm90IGFjdG9ySWQuc2NvcGU/XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RvciA9IFJlY29yZE1hbmFnZXIuYWN0b3JzW2FjdG9ySWRdXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBhY3Rvcj9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvRmFjZXMvI3thY3Rvci5mYWNlR3JhcGhpYz8ubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLkNoYW5nZVRpbGVzZXRcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5ncmFwaGljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1RpbGVzZXRzLyN7Y29tbWFuZC5wYXJhbXMuZ3JhcGhpYy5uYW1lfVwiKVxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5DaGFuZ2VNYXBQYXJhbGxheEJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5wYXJhbGxheEJhY2tncm91bmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5wYXJhbGxheEJhY2tncm91bmQubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuQ2hhbmdlQWN0b3JHcmFwaGljXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuY2hhbmdlQ2hhcmFjdGVyIGFuZCBjb21tYW5kLnBhcmFtcy5jaGFyYWN0ZXJHcmFwaGljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3tjb21tYW5kLnBhcmFtcy5jaGFyYWN0ZXJHcmFwaGljLm5hbWV9XCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmNoYW5nZUZhY2UgYW5kIGNvbW1hbmQucGFyYW1zLmZhY2VHcmFwaGljP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0ZhY2VzLyN7Y29tbWFuZC5wYXJhbXMuZmFjZUdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuTW92ZUV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgZm9yIG1vdmVDb21tYW5kIGluIGNvbW1hbmQucGFyYW1zLmNvbW1hbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggbW92ZUNvbW1hbmQuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIDQ0ICMgQ2hhbmdlIEdyYXBoaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL0NoYXJhY3RlcnMvI3ttb3ZlQ29tbWFuZC5yZXNvdXJjZS5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gNDcgIyBQbGF5IFNvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQobW92ZUNvbW1hbmQucmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlRyYW5zZm9ybUVuZW15XCJcbiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbW1hbmQucGFyYW1zPy50YXJnZXRJZC5zY29wZT8gIyBGSVhNRTogTWF5YmUganVzdCB1c2UgdGhlIGN1cnJlbnQgdmFyaWFibGUgdmFsdWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmVteSA9IFJlY29yZE1hbmFnZXIuZW5lbWllc1tjb21tYW5kLnBhcmFtcy50YXJnZXRJZF1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBsb2FkQWN0b3JCYXR0bGVBbmltYXRpb25zKGVuZW15KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHdoZW4gXCJncy5QbGF5TXVzaWNcIlxuICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kLnBhcmFtcy5tdXNpYz9cbiAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkTXVzaWMoY29tbWFuZC5wYXJhbXMubXVzaWMpXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLlBsYXlWaWRlb1wiLCBcImdzLlNob3dWaWRlb1wiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLnZpZGVvP1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldFZpZGVvKFwiTW92aWVzLyN7Y29tbWFuZC5wYXJhbXMudmlkZW8ubmFtZX1cIilcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuYW5pbWF0aW9uPy50eXBlID09IGdzLkFuaW1hdGlvblR5cGVzLk1BU0tJTkdcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9NYXNrcy8je2NvbW1hbmQucGFyYW1zLmFuaW1hdGlvbi5tYXNrLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgICAgICB3aGVuIFwiZ3MuUGxheVNvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZC5wYXJhbXMuc291bmQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIubG9hZFNvdW5kKGNvbW1hbmQucGFyYW1zLnNvdW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmdldEF1ZGlvQnVmZmVyKFwiQXVkaW8vU291bmQvI3tjb21tYW5kLnBhcmFtcy5zb3VuZC5uYW1lfVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcInZuLkNoYW5nZVNvdW5kc1wiXG4gICAgICAgICAgICAgICAgICAgIGZvciBzb3VuZCBpbiBjb21tYW5kLnBhcmFtcy5zb3VuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNvdW5kP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5sb2FkU291bmQoc291bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgd2hlbiBcImdzLkNoYW5nZVNjcmVlbkN1cnNvclwiXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQucGFyYW1zLmdyYXBoaWM/Lm5hbWU/XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tjb21tYW5kLnBhcmFtcy5ncmFwaGljLm5hbWV9XCIpXG4gICAgICAgIHJldHVybiBudWxsXG4gIFxuICAgICMjIypcbiAgICAqIExvYWRzIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzcGVjaWZpZWQgYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2QgbG9hZEFuaW1hdGlvblxuICAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIFRoZSBhbmltYXRpb24tcmVjb3JkLlxuICAgICogQHN0YXRpY1xuICAgICMjIyBcbiAgICBsb2FkQW5pbWF0aW9uOiAoYW5pbWF0aW9uKSAtPlxuICAgICAgICBpZiBhbmltYXRpb24/IGFuZCBhbmltYXRpb24uZ3JhcGhpYz9cbiAgICAgICAgICAgIFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9TaW1wbGVBbmltYXRpb25zLyN7YW5pbWF0aW9uLmdyYXBoaWMubmFtZX1cIilcbiAgICAgICAgICAgIFxuICAgIFxuXG5ncy5SZXNvdXJjZUxvYWRlciA9IG5ldyBSZXNvdXJjZUxvYWRlcigpICAgICAgICBcbndpbmRvdy5SZXNvdXJjZUxvYWRlciA9IGdzLlJlc291cmNlTG9hZGVyIl19
782 + //# sourceURL=ResourceLoader_28.js