1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2'use strict'; 3 4Object.defineProperty(exports, "__esModule", { 5 value: true 6}); 7exports.BaseContext = undefined; 8 9var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 10 11require('babel-polyfill'); 12 13var _react = require('react'); 14 15var _react2 = _interopRequireDefault(_react); 16 17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 18 19function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 20 21function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 22 23function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 24 25var BaseContext = exports.BaseContext = _react2.default.createContext(); 26 27var BaseProvider = function (_React$Component) { 28 _inherits(BaseProvider, _React$Component); 29 30 function BaseProvider(props) { 31 _classCallCheck(this, BaseProvider); 32 33 var _this = _possibleConstructorReturn(this, (BaseProvider.__proto__ || Object.getPrototypeOf(BaseProvider)).call(this, props)); 34 35 _this.state = {}; 36 return _this; 37 } 38 39 _createClass(BaseProvider, [{ 40 key: 'render', 41 value: function render() { 42 return _react2.default.createElement( 43 BaseContext.Provider, 44 { value: { state: this.state, props: this.props } }, 45 this.props.children 46 ); 47 } 48 }]); 49 50 return BaseProvider; 51}(_react2.default.Component); 52 53exports.default = BaseProvider; 54 55},{"babel-polyfill":"babel-polyfill","react":"react"}],2:[function(require,module,exports){ 56'use strict'; 57 58require('babel-polyfill'); 59 60var _react = require('react'); 61 62var _react2 = _interopRequireDefault(_react); 63 64var _reactDom = require('react-dom'); 65 66var _reactDom2 = _interopRequireDefault(_reactDom); 67 68var _BaseProvider = require('./BaseProvider'); 69 70var _BaseProvider2 = _interopRequireDefault(_BaseProvider); 71 72var _context = require('../../../../../Website/WingmanControls/src/context'); 73 74var _context2 = _interopRequireDefault(_context); 75 76var _Service = require('./Service'); 77 78var _Service2 = _interopRequireDefault(_Service); 79 80var _View = require('./components/View'); 81 82var _View2 = _interopRequireDefault(_View); 83 84function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 85 86var App = function App(props) { 87 return _react2.default.createElement( 88 _BaseProvider2.default, 89 props, 90 _react2.default.createElement( 91 _context2.default, 92 props, 93 _react2.default.createElement(_View2.default, null) 94 ) 95 ); 96}; 97 98window.renderHighlights = function (el) { 99 _reactDom2.default.render(_react2.default.createElement(App, { 100 service: new _Service2.default($, $(el).data('servicemodulename'), $(el).data('currentmoduleid'), $(el).data('currenttabid'), $(el).data('currentportalid')), 101 security: $(el).data('security'), 102 resources: $(el).data('resources'), 103 language: $(el).data('language'), 104 perPage: $(el).data('paginationperpage'), 105 currentPage: $(el).data('currentpage'), 106 currentBasePath: $(el).data('currentbasepath'), 107 currentModuleId: $(el).data('currentmoduleid'), 108 currentTabId: $(el).data('currenttabid'), 109 currentPortalId: $(el).data('currentportalid'), 110 skinpath: $(el).data('skinpath') 111 }), el); 112}; 113 114},{"../../../../../Website/WingmanControls/src/context":7,"./BaseProvider":1,"./Service":3,"./components/View":4,"babel-polyfill":"babel-polyfill","react":"react","react-dom":"react-dom"}],3:[function(require,module,exports){ 115'use strict'; 116 117Object.defineProperty(exports, "__esModule", { 118 value: true 119}); 120 121var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 122 123require('babel-polyfill'); 124 125function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 126 127var Service = function () { 128 function Service($, mname, mid, tid) { 129 _classCallCheck(this, Service); 130 131 this.moduleId = mid; 132 this.tabId = tid; 133 this.baseServicepath = $.dnnSF(mid).getServiceRoot(mname); 134 } 135 136 _createClass(Service, [{ 137 key: 'ajaxCall', 138 value: function ajaxCall(type, controller, action, id, data, processData, contentType, success, fail) { 139 $.ajax({ 140 type: type, 141 url: this.baseServicepath + controller + '/' + action + (id !== null ? '/' + id : ''), 142 beforeSend: this.setHeaders.bind(this), 143 data: data, 144 processData: processData, 145 contentType: contentType !== null ? contentType : 'application/x-www-form-urlencoded; charset=UTF-8' 146 }).done(function (retdata, status, request) { 147 if (success !== undefined) { 148 success(retdata, request); 149 } 150 }).fail(function (xhr) { 151 if (fail !== undefined) { 152 try { 153 fail(JSON.parse(xhr.responseText)); 154 } catch (e) { 155 fail({ Message: xhr.status + ' ' + xhr.statusText }); 156 } 157 } 158 }); 159 } 160 }, {
161 key: 'setHeaders', 162 value: function setHeaders(xhr) { 163 if (this.moduleId) { 164 xhr.setRequestHeader("ModuleId", this.moduleId); 165 } 166 167 if (this.tabId) { 168 xhr.setRequestHeader("TabId", this.tabId); 169 } 170 171 var afValue = $.dnnSF(this.moduleId).getAntiForgeryValue(); 172 if (afValue) { 173 xhr.setRequestHeader("RequestVerificationToken", afValue); 174 } 175 } 176 }, { 177 key: 'getList', 178 value: function getList(success, fail) { 179 this.ajaxCall('GET', 'Highlight', 'GetList', null, null, true, null, success, fail); 180 } 181 }]); 182 183 return Service; 184}(); 185 186exports.default = Service; 187 188},{"babel-polyfill":"babel-polyfill"}],4:[function(require,module,exports){ 189'use strict'; 190 191Object.defineProperty(exports, "__esModule", { 192 value: true 193}); 194 195var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 196 197var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 198 199require('babel-polyfill'); 200 201var _react = require('react'); 202 203var _react2 = _interopRequireDefault(_react); 204 205var _reactInlinesvg = require('react-inlinesvg'); 206 207var _reactInlinesvg2 = _interopRequireDefault(_reactInlinesvg); 208 209var _BaseProvider = require('../BaseProvider'); 210 211var _context = require('../../../../../../Website/WingmanControls/src/context'); 212 213var _Highlights = require('../../../../../../Website/WingmanControls/src/Highlights'); 214 215var _Highlights2 = _interopRequireDefault(_Highlights); 216 217var _ResponsiveImage = require('../../../../../../Website/WingmanControls/src/ResponsiveImage'); 218 219var _ResponsiveImage2 = _interopRequireDefault(_ResponsiveImage); 220 221function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 222 223function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 224 225function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 226 227function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 228 229var View = function (_React$Component) { 230 _inherits(View, _React$Component); 231 232 function View(props) { 233 _classCallCheck(this, View); 234 235 var _this = _possibleConstructorReturn(this, (View.__proto__ || Object.getPrototypeOf(View)).call(this, props)); 236 237 _this.state = { 238 list: [], 239 numberOfHighlights: 0, 240 error: null, 241 loading: true, 242 defaultLink: { 243 LinkTypeTypology: 0, 244 Url: '' 245 } 246 }; 247 return _this; 248 } 249 250 _createClass(View, [{ 251 key: 'componentDidMount', 252 value: function componentDidMount() { 253 this.fetchData(); 254 } 255 }, { 256 key: 'fetchData', 257 value: function fetchData() { 258 var _this2 = this; 259 260 this.props.context.service.getList(function (data) { 261 var list = data.Result; 262 var numberOfHighlights = data.NumberOfHighlights; 263 var type = data.Type; 264 var title = data.Title; 265 266 _this2.setState({ 267 list: list, 268 numberOfHighlights: numberOfHighlights, 269 type: type, 270 title: title, 271 error: null, 272 loading: false 273 }); 274 }, function (error) { 275 _this2.setState({ loading: false, error: error }); 276 }); 277 } 278 }, {
279 key: 'getlayoutexception', 280 value: function getlayoutexception(length, index) { 281 if (length === 3) { 282 return [0, 1, 2].includes(index); 283 } else if (length === 5) { 284 return [2, 3, 4].includes(index); 285 } else if (length === 6) { 286 return [2, 3, 4, 5].includes(index); 287 } else if (length === 7) { 288 return [4, 5, 6].includes(index); 289 } else if (length === 8) { 290 return [4, 5, 6, 7].includes(index); 291 } 292 } 293 }, { 294 key: 'render', 295 value: function render() { 296 var _this3 = this; 297 298 var _state = this.state, 299 loading = _state.loading, 300 error = _state.error, 301 list = _state.list, 302 type = _state.type, 303 title = _state.title, 304 defaultLink = _state.defaultLink; 305 306 307 if (loading) { 308 return _react2.default.createElement('div', null); 309 } 310 311 if (error) { 312 return _react2.default.createElement('div', null); 313 } 314 315 switch (type) { 316 case 0: 317 // Mini Highlights 318 return _react2.default.createElement(_Highlights2.default, _extends({}, this.props, { list: list })); 319 320 default: 321 { 322 // Standard Highlights 323 var responsiveImageConfiguration = [{ 324 min: 1, 325 max: 575, 326 size: [575, 259] 327 }, { 328 min: 576, 329 max: 767, 330 size: [767, 346] 331 }, { 332 min: 768, 333 max: 1199, 334 size: [598, 269] 335 }, { 336 min: 1200, 337 max: 10000, 338 size: [799, 360] 339 }]; 340 341 return _react2.default.createElement( 342 _react2.default.Fragment, 343 null, 344 title ? _react2.default.createElement( 345 'div', 346 { className: 'highlights-title big container-fluid' }, 347 _react2.default.createElement( 348 'h2', 349 { className: 'page-title' }, 350 _react2.default.createElement( 351 'span', 352 { className: 'icon plus d-print-none' }, 353 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: siteData.skinpath.url + "assets/images/icons/plus.svg" }) 354 ), 355 _react2.default.createElement( 356 'span', 357 { className: 'title' }, 358 title 359 ), 360 this.props.skinContext.state.viewMode == "desktop" ? _react2.default.createElement( 361 'span', 362 { className: 'icon plus d-print-none' }, 363 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: siteData.skinpath.url + "assets/images/icons/plus.svg" }) 364 ) : null 365 ) 366 ) : null, 367 _react2.default.createElement( 368 'ul', 369 { className: 'highlights-wrapper big container-fluid' }, 370 list.map(function (item, index) { 371 var link = item.Links || item.Link || defaultLink; 372 var linkType = item.LinkType; 373 var linkTypeTypology = link.LinkTypeTypology; 374 var iconPath = siteData.skinpath.url + "assets/images/icons/expand-icon.svg"; 375 var iconClass = "icon-internal"; 376 377 var isExternal = link.External;
378 379 if (linkType === 2) { 380 //isExternal = true; 381 iconPath = siteData.skinpath.url + "assets/images/icons/download-icon.svg"; 382 iconClass = "icon-download"; 383 } else { 384 if (linkTypeTypology > 2) { 385 //isExternal = true; 386 if (_this3.props.skinContext.state.viewMode === 'mobile') { 387 iconPath = siteData.skinpath.url + "assets/images/icons/expand-icon.svg"; 388 } else { 389 iconPath = ""; 390 } 391 iconClass = "icon-external"; 392 } else { 393 //isExternal = false; 394 } 395 } 396 397 var externalLink = isExternal ? linkType === 2 ? { "rel": "external" } : { "rel": "external noopener noreferrer" } : {}; 398 var downloadLink = linkType === 2 && isExternal === true ? { "download": "" } : {}; 399 400 var classLink = "button"; 401 if (_this3.props.skinContext.state.viewMode !== 'mobile') { 402 classLink = "button align-self-start secondary-theme"; 403 } else { 404 classLink = item.ImagePath ? "button align-self-end secondary-icon-theme" : "button align-self-end outline-icon-theme"; 405 } 406 407 var layoutexception = _this3.getlayoutexception(list.length, index); 408 409 return _react2.default.createElement( 410 'li', 411 { key: index, className: layoutexception ? 'max200' : 'teste' }, 412 _react2.default.createElement( 413 'article', 414 { className: 'row highlights big' }, 415 item.ImagePath ? _react2.default.createElement( 416 'div', 417 { className: 'img responsive-image-wrapper responsive-image-dark-mask' }, 418 _react2.default.createElement(_ResponsiveImage2.default, { 419 src: '' + item.ImagePath, 420 alt: item.ImageAlt, 421 configuration: responsiveImageConfiguration, 422 mode: 'picture', 423 cutType: 't' 424 }) 425 ) : null, 426 _react2.default.createElement( 427 'div', 428 { className: 'col text d-flex flex-column' }, 429 _react2.default.createElement( 430 'h3', 431 { className: 'title ' + (_this3.props.skinContext.state.viewMode === 'mobile' ? "mb-auto" : "") }, 432 _react2.default.createElement( 433 'span', 434 { className: 'icon plus d-print-none' }, 435 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: siteData.skinpath.url + "assets/images/icons/plus.svg" }) 436 ), 437 _react2.default.createElement( 438 'span', 439 { className: 'title-txt' }, 440 item.Title 441 ) 442 ), 443 _this3.props.skinContext.state.viewMode !== 'mobile' ? _react2.default.createElement('div', { className: 'lead-text mb-auto', dangerouslySetInnerHTML: { __html: item.Lead } }) : null, 444 link.Url ? _react2.default.createElement( 445 'a', 446 _extends({ href: link.Url, className: classLink, target: isExternal ? "_blank" : "_self" }, externalLink, downloadLink), 447 _react2.default.createElement( 448 'span', 449 { className: _this3.props.skinContext.state.viewMode !== 'mobile' ? "txt-link" : "sr-only" }, 450 item.LinkCTA 451 ), 452 _this3.props.skinContext.state.viewMode !== 'mobile' ? linkType === 2 || linkTypeTypology > 2 ? iconPath != "" ? _react2.default.createElement( 453 'span', 454 { className: 'icon ' + iconClass }, 455 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 456 ) : null : null : _react2.default.createElement( 457 'span', 458 { className: 'icon ' + iconClass }, 459 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 460 ) 461 ) : null 462 ) 463 ) 464 ); 465 }) 466 ) 467 ); 468 } 469 } 470 } 471 }]); 472 473 return View; 474}(_react2.default.Component); 475 476exports.default = function (props) { 477 return _react2.default.createElement( 478 _BaseProvider.BaseContext.Consumer, 479 null, 480 function (context) { 481 return _react2.default.createElement( 482 _context.SkinContext.Consumer, 483 null, 484 function (skinContext) { 485 return _react2.default.createElement(View, _extends({}, props, { context: context.props, skinContext: skinContext })); 486 } 487 ); 488 } 489 ); 490}; 491 492},{"../../../../../../Website/WingmanControls/src/Highlights":5,"../../../../../../Website/WingmanControls/src/ResponsiveImage":6,"../../../../../../Website/WingmanControls/src/context":7,"../BaseProvider":1,"babel-polyfill":"babel-polyfill","react":"react","react-inlinesvg":"react-inlinesvg"}],5:[function(require,module,exports){ 493'use strict'; 494 495Object.defineProperty(exports, "__esModule", { 496 value: true 497}); 498 499var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 500 501var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 502 503require('babel-polyfill'); 504 505var _react = require('react'); 506 507var _react2 = _interopRequireDefault(_react); 508 509var _reactInlinesvg = require('react-inlinesvg'); 510 511var _reactInlinesvg2 = _interopRequireDefault(_reactInlinesvg); 512 513function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 514 515function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 516 517function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 518 519function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
519onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 520 521var Highlights = function (_React$Component) { 522 _inherits(Highlights, _React$Component); 523 524 function Highlights(props) { 525 _classCallCheck(this, Highlights); 526 527 var _this = _possibleConstructorReturn(this, (Highlights.__proto__ || Object.getPrototypeOf(Highlights)).call(this, props)); 528 529 _this.state = { 530 defaultLink: { 531 LinkTypeTypology: 0, 532 Url: '' 533 } 534 }; 535 return _this; 536 } 537 538 _createClass(Highlights, [{ 539 key: 'render', 540 value: function render() { 541 var _this2 = this; 542 543 var list = this.props.list; 544 545 546 return _react2.default.createElement( 547 'ul', 548 { className: 'highlights-wrapper container' }, 549 list.map(function (item, index) { 550 var link = item.Links || item.Link || _this2.state.defaultLink; 551 if (item.Link != undefined && item.Link != null) { 552 link = item.Link; 553 } 554 var linkType = item.LinkType; 555 var linkTypeTypology = link.LinkTypeTypology; 556 var iconPath = siteData.skinpath.url + "assets/images/icons/expand-icon.svg"; 557 var iconClass = "icon-internal"; 558 559 var isExternal = link.External; 560 561 if (linkType === 2) { 562 //isExternal = true; 563 iconPath = siteData.skinpath.url + "assets/images/icons/download-icon.svg"; 564 iconClass = "icon-download"; 565 } else { 566 if (linkTypeTypology > 2) { 567 //isExternal = true; 568 if (_this2.props.skinContext.state.viewMode === 'mobile') { 569 iconPath = siteData.skinpath.url + "assets/images/icons/expand-icon.svg"; 570 } else { 571 iconPath = ""; 572 } 573 iconClass = "icon-external"; 574 } 575 } 576 577 var externalLink = isExternal ? linkType === 2 ? { "rel": "external" } : { "rel": "external noopener noreferrer" } : {}; 578 var downloadLink = linkType === 2 && isExternal === true ? { "download": "" } : {}; 579 580 var classLink = "button"; 581 if (_this2.props.skinContext.state.viewMode !== 'desktop') { 582 classLink = "button outline-icon-theme align-self-end"; 583 } else { 584 classLink = "button outline-theme align-self-end no-shadow"; 585 } 586 587 return _react2.default.createElement( 588 'li', 589 { key: index }, 590 _react2.default.createElement( 591 'article', 592 { className: 'row highlights' }, 593 _react2.default.createElement( 594 'h3', 595 { className: 'col-10 col-sm-11 col-md-12 title' }, 596 item.Title 597 ), 598 _this2.props.skinContext.state.viewMode !== 'mobile' ? _react2.default.createElement('div', { className: 'col-md lead-text', dangerouslySetInnerHTML: { __html: item.Lead } }) : null, 599 link.Url ? index === 0 ? list.length % 2 === 1 ? _this2.props.skinContext.state.viewMode !== 'desktop' ? _react2.default.createElement( 600 'div', 601 { className: 'col d-flex justify-content-end' }, 602 _react2.default.createElement( 603 'a', 604 _extends({ href: link.Url, className: classLink, target: isExternal ? "_blank" : "_self" }, externalLink, downloadLink), 605 _react2.default.createElement( 606 'span', 607 { className: 'icon ' + iconClass }, 608 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 609 ), 610 _react2.default.createElement( 611 'span', 612 { className: 'sr-only' }, 613 item.LinkCTA 614 ) 615 ) 616 ) : _react2.default.createElement( 617 'a', 618 _extends({ href: link.Url, className: classLink, target: isExternal ? "_blank" : "_self" }, externalLink, downloadLink), 619 _react2.default.createElement( 620 'span', 621 { className: 'txt-link' }, 622 item.LinkCTA 623 ), 624 linkType === 2 ? _react2.default.createElement( 625 'span', 626 { className: 'icon ' + iconClass }, 627 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 628 ) : null, 629 linkType !== 2 && isExternal === true ? iconPath != "" ? _react2.default.createElement( 630 'span', 631 { className: 'icon ' + iconClass }, 632 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 633 ) : null : null 634 ) : _react2.default.createElement( 635 'div', 636 { className: 'd-flex justify-content-end ' + (_this2.props.skinContext.state.viewMode !== 'mobile' ? "col-auto" : "col") }, 637 _react2.default.createElement( 638 'a', 639 _extends({ href: link.Url, className: 'button outline-icon-theme al
639ign-self-end', target: isExternal ? "_blank" : "_self" }, externalLink, downloadLink), 640 _react2.default.createElement( 641 'span', 642 { className: 'icon ' + iconClass }, 643 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 644 ), 645 _react2.default.createElement( 646 'span', 647 { className: 'sr-only' }, 648 item.LinkCTA 649 ) 650 ) 651 ) : _react2.default.createElement( 652 'div', 653 { className: 'd-flex justify-content-end ' + (_this2.props.skinContext.state.viewMode !== 'mobile' ? "col-auto" : "col") }, 654 _react2.default.createElement( 655 'a', 656 _extends({ href: link.Url, className: 'button outline-icon-theme align-self-end', target: isExternal ? "_blank" : "_self" }, externalLink, downloadLink), 657 _react2.default.createElement( 658 'span', 659 { className: 'icon ' + iconClass }, 660 _react2.default.createElement(_reactInlinesvg2.default, { cacheGetRequests: true, src: iconPath }) 661 ), 662 _react2.default.createElement( 663 'span', 664 { className: 'sr-only' }, 665 item.LinkCTA 666 ) 667 ) 668 ) : null 669 ) 670 ); 671 }) 672 ); 673 } 674 }]); 675 676 return Highlights; 677}(_react2.default.Component); 678 679exports.default = Highlights; 680 681},{"babel-polyfill":"babel-polyfill","react":"react","react-inlinesvg":"react-inlinesvg"}],6:[function(require,module,exports){ 682'use strict'; 683 684Object.defineProperty(exports, "__esModule", { 685 value: true 686}); 687 688var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 689 690require('babel-polyfill'); 691 692var _react = require('react'); 693 694var _react2 = _interopRequireDefault(_react); 695 696function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 697 698function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 699 700function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 701 702function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 703 704/** 705 * Responsive Image 706 * 707 * const responsiveImageConfiguration = [ 708 * {max: 575, size: [575, 400]}, 709 * {min: 575, max: 767, size: [767, 400]}, 710 * {min: 767, max: 991, size: [991, 400]}, 711 * {min: 991, max: 1199, size: [1199, 400]}, 712 * {min: 1199, size: [1600, 444]}]; 713 * 714 * mode: srcset (default) or picture 715 * 716 * cutType: 717 * case "r": op = ImageHandlerAction.ResizeImage; 718 * case "c": op = ImageHandlerAction.CropImageFromCenter = From Center, Center; 719 * case "t": op = ImageHandlerAction.CropImageFromTop = From Top, Left; 720 * case "b": op = ImageHandlerAction.CropImageFromBottom = From Bottom, Right; 721 * case "tc": op = ImageHandlerAction.CropImageFromTopCenter = From Top, Center; 722 * 723 * use it like: <ResponsiveImage src={`/DnnImageHandler.ashx?mode=file&file=${item.ImagePath}`} alt={item.ImageAlt} configuration={responsiveImageConfiguration} mode={'srcset'} cutType={'b'} /> 724 */ 725 726var ResponsiveImage = function (_React$Component) { 727 _inherits(ResponsiveImage, _React$Component); 728 729 function ResponsiveImage(props) { 730 _classCallCheck(this, ResponsiveImage); 731 732 var _this = _possibleConstructorReturn(this, (ResponsiveImage.__proto__ || Object.getPrototypeOf(ResponsiveImage)).call(this, props)); 733 734 _this.getConfiguration = function () { 735 var set = _this.configuration; 736 var result = 0; 737 738 set.forEach(function (v) { 739 var min = v.min || v.max; 740 var max = v.max || v.min; 741 742 if (window.innerWidth < min || window.innerWidth > min && window.innerWidth < max || window.innerWidth > max) { 743 // the bellow blows up on big resolutions 744 //if ((window.innerWidth >= min && window.innerWidth <= max)) { 745 result = v; 746 } 747 }); 748 749 return result; 750 }; 751 752 _this.renderPicture = function (currentConfiguration, src, finalAlt) { 753 var separator = void 0; 754 if (src != null && src != "undefined") separator = src.indexOf('?') > 0 ? '&' : '?'; 755 return _react2.default.createElement( 756 'div', 757 { className: 'image-wrapper' }, 758 _react2.default.createElement( 759 'picture', 760 null, 761 _this.configuration.map(function (v, i) { 762 var w = v.size[0]; 763 var h = v.size[1]; 764 765 var imageSrc = '' + encodeURI(src) + separator + 'w='
765+ w + '&h=' + h + '&op=' + _this.props.cutType + ' 1x'; 766 767 var minWidth = +v.min > 0 ? '(min-width: ' + v.min + 'px)' : null; 768 var maxWidth = +v.max > 0 ? '(max-width: ' + v.max + 'px)' : null; 769 var media = minWidth && maxWidth ? minWidth + ' and ' + maxWidth : (minWidth || maxWidth) + ' ' + w + 'px'; 770 771 return _react2.default.createElement('source', { key: i, srcSet: imageSrc, media: media }); 772 }), 773 _react2.default.createElement('img', { loading: 'lazy', src: '' + encodeURI(src) + separator + 'w=' + currentConfiguration.size[0] + '&h=' + currentConfiguration.size[1] + '&op=' + _this.props.cutType, alt: finalAlt }) 774 ) 775 ); 776 }; 777 778 _this.renderSrcSet = function (currentConfiguration, src, finalAlt) { 779 var separator = src.indexOf('?') > 0 ? '&' : '?'; 780 var srcSet = _this.configuration.map(function (v) { 781 return '' + encodeURI(src) + separator + 'w=' + v.size[0] + '&h=' + v.size[1] + '&op=' + _this.props.cutType + ' 1x'; 782 }).reduce(function (acc, val) { 783 return acc + ',' + val; 784 }); 785 786 var sizes = _this.configuration.map(function (v) { 787 var minWidth = +v.min > 0 ? '(min-width: ' + v.min + 'px)' : null; 788 var maxWidth = +v.max > 0 ? '(max-width: ' + v.max + 'px)' : null; 789 790 if (minWidth && maxWidth) { 791 return minWidth + ' and ' + maxWidth + ' ' + v.size[0] + 'px'; 792 } 793 794 return (minWidth || maxWidth) + ' ' + v.size[0] + 'px'; 795 }).reduce(function (acc, val) { 796 return acc + ',' + val; 797 }); 798 799 return _react2.default.createElement( 800 'div', 801 { className: 'image-wrapper' }, 802 _react2.default.createElement('img', { loading: 'lazy', src: '' + encodeURI(src) + separator + 'w=' + currentConfiguration.size[0] + '&h=' + currentConfiguration.size[1] + '&op=' + _this.props.cutType, srcSet: srcSet, sizes: sizes, alt: finalAlt }) 803 ); 804 }; 805 806 _this.state = { 807 loaded: false, 808 mounted: false 809 }; 810 811 // the generated srcset output 812 _this.checkScroll = _this.checkScroll.bind(_this); 813 var defaultConfiguration = [{ 814 min: 1, 815 max: 575, 816 size: [360, 288] 817 }, { 818 min: 576, 819 max: 991, 820 size: [360, 288] 821 }, { 822 min: 992, 823 max: 1199, 824 size: [480, 288] 825 }, { 826 min: 1200, 827 max: 10000, 828 size: [570, 288] 829 }]; 830 var defaultMode = 'srcset'; 831 832 _this.configuration = _this.props.configuration || defaultConfiguration; 833 _this.mode = _this.props.mode || defaultMode; 834 return _this; 835 } 836 837 _createClass(ResponsiveImage, [{ 838 key: 'componentDidMount', 839 value: function componentDidMount() { 840 var _this2 = this; 841 842 this.setState({ 843 mounted: true 844 }); 845 846 if (this.props.lazy) { 847 this.checkScroll(); 848 849 ['scroll'].map(function (ev) { 850 return window.addEventListener(ev, _this2.checkScroll); 851 }); 852 } 853 } 854 }, { 855 key: 'shouldComponentUpdate', 856 value: function shouldComponentUpdate() { 857 if (this.state.loaded === true) { 858 return false; 859 } 860 861 return true; 862 } 863 }, { 864 key: 'componentWillUnmount', 865 value: function componentWillUnmount() { 866 var _this3 = this; 867 868 ['scroll'].map(function (ev) { 869 return window.removeEventListener(ev, _this3.checkScroll); 870 }); 871 } 872 }, { 873 key: 'checkScroll', 874 value: function checkScroll() { 875 var _this4 = this; 876 877 if (this.timer !== null) { 878 clearTimeout(this.timer); 879 } 880 881 this.timer = setTimeout(function () { 882 if (_this4.instance.getBoundingClientRect().top <= window.innerHeight) { 883 884 ['scroll'].map(function (ev) { 885 return window.removeEventListener(ev, _this4.checkScroll); 886 }); 887 } 888 }, 150); 889 } 890 }, {
891 key: 'render', 892 value: function render() { 893 var _props = this.props, 894 src = _props.src, 895 alt = _props.alt; 896 897 var currentConfiguration = this.getConfiguration(); 898 899 var hasValue = function hasValue(v) { 900 return v !== null && v !== undefined; 901 }; 902 903 var noAltText = siteData && siteData.resources && hasValue(siteData.resources.NoAltText) ? siteData.resources.NoAltText : ''; 904 905 var finalAlt = hasValue(alt) ? alt : noAltText; 906 907 /*const finalAlt = alt ? alt : siteData.resources.NoAltText;*/ 908 909 this.src = src; 910 911 switch (this.mode) { 912 case 'picture': 913 return this.renderPicture(currentConfiguration, src, finalAlt); 914 case 'srcset': 915 return this.renderSrcSet(currentConfiguration, src, finalAlt); 916 default: 917 return null; 918 } 919 } 920 }]); 921 922 return ResponsiveImage; 923}(_react2.default.Component); 924 925exports.default = ResponsiveImage; 926 927},{"babel-polyfill":"babel-polyfill","react":"react"}],7:[function(require,module,exports){ 928'use strict'; 929 930Object.defineProperty(exports, "__esModule", { 931 value: true 932}); 933exports.SkinContext = undefined; 934 935var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 936 937require('babel-polyfill'); 938 939var _react = require('react'); 940 941var _react2 = _interopRequireDefault(_react); 942 943function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 944 945function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 946 947function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 948 949function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 950 951//1 - Create Context 952var SkinContext = exports.SkinContext = _react2.default.createContext(); 953 954//2 - Create a Provider Component 955 956var SkinProvider = function (_React$Component) { 957 _inherits(SkinProvider, _React$Component); 958 959 function SkinProvider() { 960 _classCallCheck(this, SkinProvider); 961 962 var _this = _possibleConstructorReturn(this, (SkinProvider.__proto__ || Object.getPrototypeOf(SkinProvider)).call(this)); 963 964 _this.setKeyPressed = function (value) { 965 if (_this.state.keyPressed !== value) { 966 _this.setState({ 967 keyPressed: value 968 }); 969 } 970 }; 971 972 _this.handleModalEvent = function (value) { 973 if (value === true) { 974 document.getElementsByTagName('html')[0].classList.add('is-locked'); 975 } else { 976 document.getElementsByTagName('html')[0].classList.remove('is-locked'); 977 } 978 }; 979 980 _this.handleKeyDownEvent = function (event) { 981 if (event.key === "Enter" || event.key === " " || event.key === "Escape") { 982 _this.setKeyPressed(true); 983 } 984 }; 985 986 _this.getLayoutMode = function () { 987 var returnLayout = ""; 988 989 if (window.innerWidth >= 768 && window.innerWidth < 992) { 990 returnLayout = "tablet"; 991 } else if (window.innerWidth >= 992) { 992 returnLayout = "desktop"; 993 } else { 994 returnLayout = "mobile"; 995 } 996 997 return returnLayout; 998 }; 999 1000 _this.handleResizeEvent = function () { 1001 clearTimeout(_this._resizeTimeout); 1002 1003 _this._resizeTimeout = setTimeout(function () { 1004 if (!_this._isMounted) return; 1005 1006 var currentViewMode = _this.state.viewMode; 1007 1008 if (window.innerWidth >= 768 && window.innerWidth < 992) { 1009 if (currentViewMode !== 'tablet') { 1010 _this.setState({ viewMode: 'tablet' }); 1011 } 1012 } else if (window.innerWidth >= 992) { 1013 if (currentViewMode !== 'desktop') { 1014 _this.setState({ viewMode: 'desktop' }); 1015 } 1016 } else { 1017 if (currentViewMode !== 'mobile') { 1018 _this.setState({ viewMode: 'mobile' }); 1019 } 1020 } 1021 1022 _this.setState({ windowWidthGlobal: window.innerWidth }); 1023 }, 150); 1024 }; 1025 1026 _this._isMounted = false;
1027 1028 /** 1029 * State 1030 */ 1031 _this.state = { 1032 viewMode: _this.getLayoutMode(), 1033 keyPressed: false, 1034 windowWidthGlobal: window.innerWidth 1035 }; 1036 return _this; 1037 } 1038 1039 /** 1040 * Methods 1041 */ 1042 1043 1044 _createClass(SkinProvider, [{ 1045 key: 'componentDidMount', 1046 1047 1048 /** 1049 * React Lifecycle Methods 1050 */ 1051 value: function componentDidMount() { 1052 this._isMounted = true; 1053 1054 document.addEventListener('keydown', this.handleKeyDownEvent); 1055 window.addEventListener('resize', this.handleResizeEvent); 1056 } 1057 }, { 1058 key: 'componentWillUnmount', 1059 value: function componentWillUnmount() { 1060 this._isMounted = false; 1061 1062 document.removeEventListener('keydown', this.handleKeyDownEvent); 1063 window.removeEventListener('resize', this.handleResizeEvent); 1064 } 1065 }, { 1066 key: 'render', 1067 value: function render() { 1068 return _react2.default.createElement( 1069 SkinContext.Provider, 1070 { value: { state: this.state, setKeyPressed: this.setKeyPressed, handleModalEvent: this.handleModalEvent } }, 1071 this.props.children 1072 ); 1073 } 1074 }]); 1075 1076 return SkinProvider; 1077}(_react2.default.Component); 1078 1079exports.default = SkinProvider; 1080 1081},{"babel-polyfill":"babel-polyfill","react":"react"}]},{},[2]) 1082//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJqcy9zcmMvQmFzZVByb3ZpZGVyLmpzIiwianMvc3JjL0hpZ2hsaWdodHMuanN4IiwianMvc3JjL1NlcnZpY2UuanMiLCJqcy9zcmMvY29tcG9uZW50cy9WaWV3LmpzIiwiLi4vLi4vLi4vV2Vic2l0ZS9XaW5nbWFuQ29udHJvbHMvc3JjL0hpZ2hsaWdodHMuanMiLCIuLi8uLi8uLi9XZWJzaXRlL1dpbmdtYW5Db250cm9scy9zcmMvUmVzcG9uc2l2ZUltYWdlLmpzIiwiLi4vLi4vLi4vV2Vic2l0ZS9XaW5nbWFuQ29udHJvbHMvc3JjL2NvbnRleHQuanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FDQUM7O0FBQ0Q7Ozs7Ozs7Ozs7OztBQUVPLElBQU0sb0NBQWMsZ0JBQU0sYUFBTixFQUFwQjs7SUFFRCxZOzs7QUFDRiwwQkFBWSxLQUFaLEVBQW1CO0FBQUE7O0FBQUEsZ0lBQ1QsS0FEUzs7QUFHZixjQUFLLEtBQUwsR0FBYSxFQUFiO0FBSGU7QUFLbEI7Ozs7aUNBRVE7QUFDTCxtQkFDSTtBQUFDLDJCQUFELENBQWEsUUFBYjtBQUFBLGtCQUFzQixPQUFPLEVBQUUsT0FBTyxLQUFLLEtBQWQsRUFBcUIsT0FBTyxLQUFLLEtBQWpDLEVBQTdCO0FBQ0sscUJBQUssS0FBTCxDQUFXO0FBRGhCLGFBREo7QUFLSDs7OztFQWRzQixnQkFBTSxTOztrQkFpQmxCLFk7Ozs7O0FDdEJmOztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTSxNQUFNLFNBQU4sR0FBTSxDQUFDLEtBQUQ7QUFBQSxXQUNSO0FBQUMsOEJBQUQ7QUFBa0IsYUFBbEI7QUFDSTtBQUFDLDZCQUFEO0FBQWtCLGlCQUFsQjtBQUNJLDBDQUFDLGNBQUQ7QUFESjtBQURKLEtBRFE7QUFBQSxDQUFaOztBQVFBLE9BQU8sZ0JB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IsS0FBbEI7O0FBRUE7OztBQUdBLGNBQUssS0FBTCxHQUFhO0FBQ1Qsc0JBQVUsTUFBSyxhQUFMLEVBREQ7QUFFVCx3QkFBWSxLQUZIO0FBR1QsK0JBQW1CLE9BQU87QUFIakIsU0FBYjtBQVJVO0FBYWI7O0FBRUQ7Ozs7Ozs7OztBQW1FQTs7OzRDQUdvQjtBQUNoQixpQkFBSyxVQUFMLEdBQWtCLElBQWxCOztBQUVBLHFCQUFTLGdCQUFULENBQTBCLFNBQTFCLEVBQXFDLEtBQUssa0JBQTFDO0FBQ0EsbUJBQU8sZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsS0FBSyxpQkFBdkM7QUFDSDs7OytDQUVzQjtBQUNuQixpQkFBSyxVQUFMLEdBQWtCLEtBQWxCOztBQUVBLHFCQUFTLG1CQUFULENBQTZCLFNBQTdCLEVBQXdDLEtBQUssa0JBQTdDO0FBQ0EsbUJBQU8sbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUMsS0FBSyxpQkFBMUM7QUFDSDs7O2lDQUVRO0FBQ0wsbUJBQ0k7QUFBQywyQkFBRCxDQUFhLFFBQWI7QUFBQSxrQkFBc0IsT0FBTyxFQUFFLE9BQU8sS0FBSyxLQUFkLEVBQXFCLGVBQWUsS0FBSyxhQUF6QyxFQUF3RCxrQkFBa0IsS0FBSyxnQkFBL0UsRUFBN0I7QUFDSyxxQkFBSyxLQUFMLENBQVc7QUFEaEIsYUFESjtBQUtIOzs7O0VBMUdxQyxnQkFBTSxTOztrQkFBM0IsWSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIu+7v2ltcG9ydCAnYmFiZWwtcG9seWZpbGwnO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJhc2VDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xyXG5cclxuY2xhc3MgQmFzZVByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgI
1082H07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxCYXNlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBzdGF0ZTogdGhpcy5zdGF0ZSwgcHJvcHM6IHRoaXMucHJvcHMgfX0+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9CYXNlQ29udGV4dC5Qcm92aWRlcj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUHJvdmlkZXI7IiwiaW1wb3J0ICdiYWJlbC1wb2x5ZmlsbCc7XHJcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xyXG5cclxuaW1wb3J0IEJhc2VQcm92aWRlciBmcm9tICcuL0Jhc2VQcm92aWRlcic7XHJcbmltcG9ydCBTa2luUHJvdmlkZXIgZnJvbSAnLi4vLi4vLi4vLi4vLi4vV2Vic2l0ZS9XaW5nbWFuQ29udHJvbHMvc3JjL2NvbnRleHQnO1xyXG5pbXBvcnQgU2VydmljZSBmcm9tICcuL1NlcnZpY2UnO1xyXG5pbXBvcnQgVmlldyBmcm9tICcuL2NvbXBvbmVudHMvVmlldyc7XHJcblxyXG5jb25zdCBBcHAgPSAocHJvcHMpID0+IChcclxuICAgIDxCYXNlUHJvdmlkZXIgey4uLnByb3BzfT5cclxuICAgICAgICA8U2tpblByb3ZpZGVyIHsuLi5wcm9wc30+XHJcbiAgICAgICAgICAgIDxWaWV3IC8+XHJcbiAgICAgICAgPC9Ta2luUHJvdmlkZXI+XHJcbiAgICA8L0Jhc2VQcm92aWRlcj5cclxuKTtcclxuXHJcbndpbmRvdy5yZW5kZXJIaWdobGlnaHRzID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPEFwcFxyXG4gICAgICAgICAgICBzZXJ2aWNlPXtuZXcgU2VydmljZSgkLCAkKGVsKS5kYXRhKCdzZXJ2aWNlbW9kdWxlbmFtZScpLCAkKGVsKS5kYXRhKCdjdXJyZW50bW9kdWxlaWQnKSwgJChlbCkuZGF0YSgnY3VycmVudHRhYmlkJyksICQoZWwpLmRhdGEoJ2N1cnJlbnRwb3J0YWxpZCcpKX1cclxuICAgICAgICAgICAgc2VjdXJpdHk9eyQoZWwpLmRhdGEoJ3NlY3VyaXR5Jyl9XHJcbiAgICAgICAgICAgIHJlc291cmNlcz17JChlbCkuZGF0YSgncmVzb3VyY2VzJyl9XHJcbiAgICAgICAgICAgIGxhbmd1YWdlPXskKGVsKS5kYXRhKCdsYW5ndWFnZScpfVxyXG4gICAgICAgICAgICBwZXJQYWdlPXskKGVsKS5kYXRhKCdwYWdpbmF0aW9ucGVycGFnZScpfVxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZT17JChlbCkuZGF0YSgnY3VycmVudHBhZ2UnKX1cclxuICAgICAgICAgICAgY3VycmVudEJhc2VQYXRoPXskKGVsKS5kYXRhKCdjdXJyZW50YmFzZXBhdGgnKX1cclxuICAgICAgICAgICAgY3VycmVudE1vZHVsZUlkPXskKGVsKS5kYXRhKCdjdXJyZW50bW9kdWxlaWQnKX1cclxuICAgICAgICAgICAgY3VycmVudFRhYklkPXskKGVsKS5kYXRhKCdjdXJyZW50dGFiaWQnKX1cclxuICAgICAgICAgICAgY3VycmVudFBvcnRhbElkPXskKGVsKS5kYXRhKCdjdXJyZW50cG9ydGFsaWQnKX1cclxuICAgICAgICAgICAgc2tpbnBhdGg9eyQoZWwpLmRhdGEoJ3NraW5wYXRoJyl9XHJcbiAgICAgICAgLz4sIGVsKTtcclxufTsiLCJpbXBvcnQgJ2JhYmVsLXBvbHlmaWxsJztcclxuXHJcbmNsYXNzIFNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCQsIG1uYW1lLCBtaWQsIHRpZCkge1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBtaWQ7XHJcbiAgICAgICAgdGhpcy50YWJJZCA9IHRpZDtcclxuICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlcGF0aCA9ICQuZG5uU0YobWlkKS5nZXRTZXJ2aWNlUm9vdChtbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWpheENhbGwodHlwZSwgY29udHJvbGxlciwgYWN0aW9uLCBpZCwgZGF0YSwgcHJvY2Vzc0RhdGEsIGNvbnRlbnRUeXBlLCBzdWNjZXNzLCBmYWlsKSB7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLmJhc2VTZXJ2aWNlcGF0aCArIGNvbnRyb2xsZXIgKyAnLycgKyBhY3Rpb24gKyAoaWQgIT09IG51bGwgPyAnLycgKyBpZCA6ICcnKSxcclxuICAgICAgICAgICAgYmVmb3JlU2VuZDogdGhpcy5zZXRIZWFkZXJzLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBwcm9jZXNzRGF0YSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlICE9PSBudWxsID8gY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04J1xyXG4gICAgICAgIH0pLmRvbmUoZnVuY3Rpb24gKHJldGRhdGEsIHN0YXR1cywgcmVxdWVzdCkge1xyXG4gICAgICAgICAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJldGRhdGEsIHJlcXVlc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuZmFpbChmdW5jdGlvbiAoeGhyKSB7XHJcbiAgICAgICAgICAgIGlmIChmYWlsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbChKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbCh7IE1lc3NhZ2U6IGAke3hoci5zdGF0dXN9ICR7eGhyLnN0YXR1c1RleHR9YCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEhlYWRlcnMoeGhyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJNb2R1bGVJZFwiLCB0aGlzLm1vZHVsZUlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhYklkKSB7XHJcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiVGFiSWRcIiwgdGhpcy50YWJJZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2Y
1082XIgYWZWYWx1ZSA9ICQuZG5uU0YodGhpcy5tb2R1bGVJZCkuZ2V0QW50aUZvcmdlcnlWYWx1ZSgpO1xyXG4gICAgICAgIGlmIChhZlZhbHVlKSB7XHJcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXCIsIGFmVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHRcclxuICAgIGdldExpc3Qoc3VjY2VzcywgZmFpbCkge1xyXG4gICAgICAgIHRoaXMuYWpheENhbGwoJ0dFVCcsICdIaWdobGlnaHQnLCAnR2V0TGlzdCcsIG51bGwsIG51bGwsIHRydWUsIG51bGwsIHN1Y2Nlc3MsIGZhaWwpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTZXJ2aWNlOyIsImltcG9ydCAnYmFiZWwtcG9seWZpbGwnO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgU1ZHIGZyb20gJ3JlYWN0LWlubGluZXN2Zyc7XHJcblxyXG5pbXBvcnQgeyBCYXNlQ29udGV4dCB9IGZyb20gJy4uL0Jhc2VQcm92aWRlcic7XHJcbmltcG9ydCB7IFNraW5Db250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vV2Vic2l0ZS9XaW5nbWFuQ29udHJvbHMvc3JjL2NvbnRleHQnO1xyXG5pbXBvcnQgSGlnaGxpZ2h0cyBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9XZWJzaXRlL1dpbmdtYW5Db250cm9scy9zcmMvSGlnaGxpZ2h0cyc7XHJcbmltcG9ydCBSZXNwb25zaXZlSW1hZ2UgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vV2Vic2l0ZS9XaW5nbWFuQ29udHJvbHMvc3JjL1Jlc3BvbnNpdmVJbWFnZSc7XHJcblxyXG5jbGFzcyBWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBsaXN0OiBbXSxcclxuICAgICAgICAgICAgbnVtYmVyT2ZIaWdobGlnaHRzOiAwLFxyXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgZGVmYXVsdExpbms6IHtcclxuICAgICAgICAgICAgICAgIExpbmtUeXBlVHlwb2xvZ3k6IDAsXHJcbiAgICAgICAgICAgICAgICBVcmw6ICcnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hEYXRhKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dC5zZXJ2aWNlLmdldExpc3QoXHJcbiAgICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gZGF0YS5SZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJPZkhpZ2hsaWdodHMgPSBkYXRhLk51bWJlck9mSGlnaGxpZ2h0cztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhLlR5cGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGRhdGEuVGl0bGU7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdCxcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkhpZ2hsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlLCBlcnJvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0bGF5b3V0ZXhjZXB0aW9uKGxlbmd0aCwgaW5kZXgpIHtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbMCwgMSwgMl0uaW5jbHVkZXMoaW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSA1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbMiwgMywgNF0uaW5jbHVkZXMoaW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbMiwgMywgNCwgNV0uaW5jbHVkZXMoaW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSA3KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbNCwgNSwgNl0uaW5jbHVkZXMoaW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSA4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbNCwgNSwgNiw3XS5pbmNsdWRlcyhpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7IGxvYWRpbmcsIGVycm9yLCBsaXN0LCB0eXBlLCB0aXRsZSwgZGVmYXVsdExpbmsgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IC8+O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IC8+O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDogLy8gTWluaSBIaWdobGlnaHRzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPEhpZ2hsaWdodHMgey4uLnRoaXMucHJvcHN9IGxpc3Q9e2xpc3R9IC8+O1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDogeyAvLyBTdGFuZGFyZCBIaWdobGlnaHRzXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zaXZlSW1hZ2VDb25maWd1cmF0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDU3NSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogWzU3NSwgMjU5XVxyXG4gICAgICAgICAgICAgICAgICAgI
1082H0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDU3NixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiA3NjcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFs3NjcsIDM0Nl1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiA3NjgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTE5OSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogWzU5OCwgMjY5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEyMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTAwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFs3OTksIDM2MF1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWdobGlnaHRzLXRpdGxlIGJpZyBjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpY29uIHBsdXMgZC1wcmludC1ub25lXCI+PFNWRyBjYWNoZUdldFJlcXVlc3RzPXt0cnVlfSBzcmM9e3NpdGVEYXRhLnNraW5wYXRoLnVybCArIFwiYXNzZXRzL2ltYWdlcy9pY29ucy9wbHVzLnN2Z1wifSAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGl0bGVcIj57dGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSA9PSBcImRlc2t0b3BcIiA/IDxzcGFuIGNsYXNzTmFtZT1cImljb24gcGx1cyBkLXByaW50LW5vbmVcIj48U1ZHIGNhY2hlR2V0UmVxdWVzdHM9e3RydWV9IHNyYz17c2l0ZURhdGEuc2tpbnBhdGgudXJsICsgXCJhc3NldHMvaW1hZ2VzL2ljb25zL3BsdXMuc3ZnXCJ9IC8+PC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImhpZ2hsaWdodHMtd3JhcHBlciBiaWcgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gaXRlbS5MaW5rcyB8fCBpdGVtLkxpbmsgfHwgZGVmYXVsdExpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rVHlwZSA9IGl0ZW0uTGlua1R5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rVHlwZVR5cG9sb2d5ID0gbGluay5MaW5rVHlwZVR5cG9sb2d5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWNvblBhdGggPSBzaXRlRGF0YS5za2lucGF0aC51cmwgKyBcImFzc2V0cy9pbWFnZXMvaWNvbnMvZXhwYW5kLWljb24uc3ZnXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uQ2xhc3MgPSBcImljb24taW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0V4dGVybmFsID0gbGluay5FeHRlcm5hbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pc0V4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25QYXRoID0gc2l0ZURhdGEuc2tpbnBhdGgudXJsICsgXCJhc3NldHMvaW1hZ2VzL2ljb25zL2Rvd25sb2FkLWljb24uc3ZnXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MgPSBcImljb24tZG93bmxvYWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rVHlwZVR5cG9sb2d5ID4gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXNFeHRlcm5hbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuc2tpbkNvbnRleHQuc3RhdGUudmlld01vZGUgPT09ICdtb2JpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25QYXRoID0gc2l0ZURhdGEuc2tpbnBhdGgudXJsICsgXCJhc3NldHMvaW1hZ2VzL2ljb25zL2V4cGFuZC1pY29uLnN2Z1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25QYXRoID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzID0gXCJpY29uLWV4dGVybmFsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXNFeHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0ZXJuYWxMaW5rID0gaXNFeHRlcm5hbCA/IGxpbmtUeXBlID09PSA
1082yID8geyBcInJlbFwiOiBcImV4dGVybmFsXCIgfSA6IHsgXCJyZWxcIjogXCJleHRlcm5hbCBub29wZW5lciBub3JlZmVycmVyXCIgfSA6IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gbGlua1R5cGUgPT09IDIgJiYgaXNFeHRlcm5hbCA9PT0gdHJ1ZSA/IHsgXCJkb3dubG9hZFwiOiBcIlwiIH0gOiB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGFzc0xpbmsgPSBcImJ1dHRvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSAhPT0gJ21vYmlsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTGluayA9IFwiYnV0dG9uIGFsaWduLXNlbGYtc3RhcnQgc2Vjb25kYXJ5LXRoZW1lXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0xpbmsgPSBpdGVtLkltYWdlUGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJidXR0b24gYWxpZ24tc2VsZi1lbmQgc2Vjb25kYXJ5LWljb24tdGhlbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJidXR0b24gYWxpZ24tc2VsZi1lbmQgb3V0bGluZS1pY29uLXRoZW1lXCI7X
1082HJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGF5b3V0ZXhjZXB0aW9uID0gdGhpcy5nZXRsYXlvdXRleGNlcHRpb24obGlzdC5sZW5ndGgsIGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtpbmRleH0gY2xhc3NOYW1lPXtsYXlvdXRleGNlcHRpb24gPyAnbWF4MjAwJzogJ3Rlc3RlJ30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3NOYW1lPVwicm93IGhpZ2hsaWdodHMgYmlnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLkltYWdlUGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA8ZGl2IGNsYXNzTmFtZT1cImltZyByZXNwb25zaXZlLWltYWdlLXdyYXBwZXIgcmVzcG9uc2l2ZS1pbWFnZS1kYXJrLW1hc2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVzcG9uc2l2ZUltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17YCR7aXRlbS5JbWFnZVBhdGh9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PXtpdGVtLkltYWdlQWx0fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXtyZXNwb25zaXZlSW1hZ2VDb25maWd1cmF0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPXsncGljdHVyZSd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1dFR5cGU9eyd0J31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbCB0ZXh0IGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17YHRpdGxlICR7dGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSA9PT0gJ21vYmlsZScgPyBcIm1iLWF1dG9cIiA6IFwiXCJ9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaWNvbiBwbHVzIGQtcHJpbnQtbm9uZVwiPjxTVkcgY2FjaGVHZXRSZXF1ZXN0cz17dHJ1ZX0gc3JjPXtzaXRlRGF0YS5za2lucGF0aC51cmwgKyBcImFzc2V0cy9pbWFnZXMvaWNvbnMvcGx1cy5zdmdcIn0gLz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGl0bGUtdHh0XCI+e2l0ZW0uVGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNraW5Db250ZXh0LnN0YXRlLnZpZXdNb2RlICE9PSAnbW9iaWxlJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWFkLXRleHQgbWItYXV0b1wiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaXRlbS5MZWFkIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGluay5VcmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxhIGhyZWY9e2xpbmsuVXJsfSBjbGFzc05hbWU9e2NsYXNzTGlua30gdGFyZ2V0PXtpc0V4dGVybmFsID8gXCJfYmxhbmtcIiA6IFwiX3NlbGZcIn0gey4uLmV4dGVybmFsTGlua30gey4uLmRvd25sb2FkTGlua30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSAhPT0gJ21vYmlsZScgPyBcInR4dC1saW5rXCIgOiBcInNyLW9ubHlcIn0+e2l0ZW0uTGlua0NUQX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNraW5Db250ZXh0LnN0YXRlLnZpZXdNb2RlICE9PSAnbW9iaWxlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsaW5rVHlwZSA9PT0gMiB8fCBsaW5rVHlwZVR5cG9sb2d5ID4gMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGljb25QYXRoICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gPHNwYW4gY2xhc3NOYW1lPXtgaWNvbiAke2ljb25DbGFzc31gfT48U1ZHIGNhY2hlR2V0UmVxdWVzdHM9e3RydWV9IHNyYz17aWNvblBhdGh9IC8+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPHNwYW4gY2xhc3NOYW1lPXtgaWNvbiAke2ljb25DbGFzc31gfT48U1ZHIGNhY2hlR2V0UmVxdWVzdHM9e3RydWV9IHNyYz17aWNvblBhdGh9IC8+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGljbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1082H0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IChwcm9wcykgPT5cclxuICAgIDxCYXNlQ29udGV4dC5Db25zdW1lcj5cclxuICAgICAgICB7Y29udGV4dCA9PlxyXG4gICAgICAgICAgICA8U2tpbkNvbnRleHQuQ29uc3VtZXI+XHJcbiAgICAgICAgICAgICAgICB7c2tpbkNvbnRleHQgPT5cclxuICAgICAgICAgICAgICAgICAgICA8VmlldyB7Li4ucHJvcHN9IGNvbnRleHQ9e2NvbnRleHQucHJvcHN9IHNraW5Db250ZXh0PXtza2luQ29udGV4dH0gLz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9Ta2luQ29udGV4dC5Db25zdW1lcj5cclxuICAgICAgICB9XHJcbiAgICA8L0Jhc2VDb250ZXh0LkNvbnN1bWVyPjtcclxuIiwiaW1wb3J0ICdiYWJlbC1wb2x5ZmlsbCc7XHJcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTVkcgZnJvbSAncmVhY3QtaW5saW5lc3ZnJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpZ2hsaWdodHMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRMaW5rOiB7XHJcbiAgICAgICAgICAgICAgICBMaW5rVHlwZVR5cG9sb2d5OiAwLFxyXG4gICAgICAgICAgICAgICAgVXJsOiAnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgeyBsaXN0IH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiaGlnaGxpZ2h0cy13cmFwcGVyIGNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGl0ZW0uTGlua3MgfHwgaXRlbS5MaW5rIHx8IHRoaXMuc3RhdGUuZGVmYXVsdExpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLkxpbmsgIT0gdW5kZWZpbmVkICYmIGl0ZW0uTGluayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rID0gaXRlbS5MaW5rO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rVHlwZSA9IGl0ZW0uTGlua1R5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rVHlwZVR5cG9sb2d5ID0gbGluay5MaW5rVHlwZVR5cG9sb2d5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWNvblBhdGggPSBzaXRlRGF0YS5za2lucGF0aC51cmwgKyBcImFzc2V0cy9pbWFnZXMvaWNvbnMvZXhwYW5kLWljb24uc3ZnXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uQ2xhc3MgPSBcImljb24taW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0V4dGVybmFsID0gbGluay5FeHRlcm5hbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1R5cGUgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXNFeHRlcm5hbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uUGF0aCA9IHNpdGVEYXRhLnNraW5wYXRoLnVybCArIFwiYXNzZXRzL2ltYWdlcy9pY29ucy9kb3dubG9hZC1pY29uLnN2Z1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzID0gXCJpY29uLWRvd25sb2FkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1R5cGVUeXBvbG9neSA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzRXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLnNraW5Db250ZXh0LnN0YXRlLnZpZXdNb2RlID09PSAnbW9iaWxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uUGF0aCA9IHNpdGVEYXRhLnNraW5wYXRoLnVybCArIFwiYXNzZXRzL2ltYWdlcy9pY29ucy9leHBhbmQtaWNvbi5zdmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uUGF0aCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcyA9IFwiaWNvbi1leHRlcm5hbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0ZXJuYWxMaW5rID0gaXNFeHRlcm5hbCA/IGxpbmtUeXBlID09PSAyID8geyBcInJlbFwiOiBcImV4dGVybmFsXCIgfSA6IHsgXCJyZWxcIjogXCJleHRlcm5hbCBub29wZW5lciBub3JlZmVycmVyXCIgfSA6IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gbGlua1R5cGUgPT09IDIgJiYgaXNFeHRlcm5hbCA9PT0gdHJ1ZSA/IHsgXCJkb3dubG9hZFwiOiBcIlwiIH0gOiB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGFzc0xpbmsgPSBcImJ1dHRvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSAhPT0gJ2Rlc2t0b3AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0xpbmsgPSBcImJ1dHRvbiBvdXRsaW5lLWljb24tdGhlbWUgYWxpZ24tc2VsZi1lbmRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTGluayA9IFwiYnV0dG9uIG91dGxpbmUtdGhlbWUgYWxpZ24tc2VsZi1lbmQgbm8tc2hhZG93XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgI
1082H1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtpbmRleH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3NOYW1lPVwicm93IGhpZ2hsaWdodHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cImNvbC0xMCBjb2wtc20tMTEgY29sLW1kLTEyIHRpdGxlXCI+e2l0ZW0uVGl0bGV9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc2tpbkNvbnRleHQuc3RhdGUudmlld01vZGUgIT09ICdtb2JpbGUnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kIGxlYWQtdGV4dFwiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaXRlbS5MZWFkIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbmsuVXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGluZGV4ID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsaXN0Lmxlbmd0aCAlIDIgPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLnNraW5Db250ZXh0LnN0YXRlLnZpZXdNb2RlICE9PSAnZGVza3RvcCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzc05hbWU9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtsaW5rLlVybH0gY2xhc3NOYW1lPXtjbGFzc0xpbmt9IHRhcmdldD17aXNFeHRlcm5hbCA/IFwiX2JsYW5rXCIgOiBcIl9zZWxmXCJ9IHsuLi5leHRlcm5hbExpbmt9IHsuLi5kb3dubG9hZExpbmt9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BpY29uICR7aWNvbkNsYXNzfWB9PjxTVkcgY2FjaGVHZXRSZXF1ZXN0cz17dHJ1ZX0gc3JjPXtpY29uUGF0aH0gLz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57aXRlbS5MaW5rQ1RBfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj17bGluay5Vcmx9IGNsYXNzTmFtZT17Y2xhc3NMaW5rfSB0YXJnZXQ9e2lzRXh0ZXJuYWwgPyBcIl9ibGFua1wiIDogXCJfc2VsZlwifSB7Li4uZXh0ZXJuYWxMaW5rfSB7Li4uZG93bmxvYWRMaW5rfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0eHQtbGlua1wiPntpdGVtLkxpbmtDVEF9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rVHlwZSA9PT0gMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxzcGFuIGNsYXNzTmFtZT17YGljb24gJHtpY29uQ2xhc3N9YH0+PFNWRyBjYWNoZUdldFJlcXVlc3RzPXt0cnVlfSBzcmM9e2ljb25QYXRofSAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rVHlwZSAhPT0gMiAmJiBpc0V4dGVybmFsID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGljb25QYXRoICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxzcGFuIGNsYXNzTmFtZT17YGljb24gJHtpY29uQ2xhc3N9YH0+PFNWRyBjYWNoZUdldFJlcXVlc3RzPXt0cnVlfSBzcmM9e2ljb25QYXRofSAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9e2BkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCAke3RoaXMucHJvcHMuc2tpbkNvbnRleHQuc3RhdGUudmlld01vZGUgIT09ICdtb2JpbGUnID8gXCJjb2wtYXV0b1wiIDogXCJjb2xcIn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2xpbmsuVXJsfSBjbGFzc05hbWU9XCJidXR0b24gb3V0bGluZS1pY29uLXRoZW1lIGFsaWduLXNlbGYtZW5kXCIgdGFyZ2V0PXtpc0V4dGVybmFsID8gXCJfYmxhbmtcIiA6IFwiX3NlbGZcIn0gey4uLmV4dGVybmFsTGlua30gey4uLmRvd25sb2FkTGlua30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgaWNvbiAke2ljb25DbGFzc31gfT48U1ZHIGNhY2hlR2V0UmVxdWVzdHM9e3RydWV9IHNyYz17aWNvblBhdGh9IC8+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57aXRlbS5MaW5rQ1RBfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8ZGl2IGNsYXNzTmFtZT17YGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kICR7dGhpcy5wcm9wcy5za2luQ29udGV4dC5zdGF0ZS52aWV3TW9kZSAhPT0gJ21vYmlsZScgPyBcImNvbC1hdXRvXCIgOiBcImNvbFwifWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtsaW5rLlVybH0gY2xhc3NOYW1lPVwiYnV0dG9uIG91dGxpbmUtaWNvbi10aGVtZSBhbGlnbi1zZWxmLWVuZFwiIHRhcmdldD17aXNFeHRlcm5hbCA/IFwiX2JsYW5rXCIgOiBcIl9zZWxmXCJ9IHsuLi5leHRlcm5hbExpbmt9IHsuLi5kb3dubG9hZExpbmt9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgaWNvbiAke2ljb25DbGFzc31gfT48U1ZHIGNhY2hlR2V0UmVxdWVzdHM9e3RydWV9IHNyYz17aWNvblBhdGh9IC8+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntpdGVtLkxpbmtDVEF9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWNsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgI
1082H1cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFwiYmFiZWwtcG9seWZpbGxcIjtcclxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcclxuXHJcbi8qKlxyXG4gKiBSZXNwb25zaXZlIEltYWdlXHJcbiAqIFxyXG4gKiBjb25zdCByZXNwb25zaXZlSW1hZ2VDb25maWd1cmF0aW9uID0gW1xyXG4gKiAgICAgIHttYXg6IDU3NSwgc2l6ZTogWzU3NSwgNDAwXX0sXHJcbiAqICAgICAge21pbjogNTc1LCBtYXg6IDc2Nywgc2l6ZTogWzc2NywgNDAwXX0sXHJcbiAqICAgICAge21pbjogNzY3LCBtYXg6IDk5MSwgc2l6ZTogWzk5MSwgNDAwXX0sXHJcbiAqICAgICAge21pbjogOTkxLCBtYXg6IDExOTksIHNpemU6IFsxMTk5LCA0MDBdfSxcclxuICogICAgICB7bWluOiAxMTk5LCBzaXplOiBbMTYwMCwgNDQ0XX1dO1xyXG4gKlxyXG4gKiBtb2RlOiBzcmNzZXQgKGRlZmF1bHQpIG9yIHBpY3R1cmVcclxuICogXHJcbiAqIGN1dFR5cGU6XHJcbiAqICAgICAgY2FzZSBcInJcIjogb3AgPSBJbWFnZUhhbmRsZXJBY3Rpb24uUmVzaXplSW1hZ2U7XHJcbiAqICAgICAgY2FzZSBcImNcIjogb3AgPSBJbWFnZUhhbmRsZXJBY3Rpb24uQ3JvcEltYWdlRnJvbUNlbnRlciA9IEZyb20gQ2VudGVyLCBDZW50ZXI7XHJcbiAqICAgICAgY2FzZSBcInRcIjogb3AgPSBJbWFnZUhhbmRsZXJBY3Rpb24uQ3JvcEltYWdlRnJvbVRvcCA9IEZyb20gVG9wLCBMZWZ0O1xyXG4gKiAgICAgIGNhc2UgXCJiXCI6IG9wID0gSW1hZ2VIYW5kbGVyQWN0aW9uLkNyb3BJbWFnZUZyb21Cb3R0b20gPSBGcm9tIEJvdHRvbSwgUmlnaHQ7XHJcbiAqICAgICAgY2FzZSBcInRjXCI6IG9wID0gSW1hZ2VIYW5kbGVyQWN0aW9uLkNyb3BJbWFnZUZyb21Ub3BDZW50ZXIgPSBGcm9tIFRvcCwgQ2VudGVyO1xyXG4gKlxyXG4gKiB1c2UgaXQgbGlrZTogPFJlc3BvbnNpdmVJbWFnZSBzcmM9e2AvRG5uSW1hZ2VIYW5kbGVyLmFzaHg/bW9kZT1maWxlJmZpbGU9JHtpdGVtLkltYWdlUGF0aH1gfSBhbHQ9e2l0ZW0uSW1hZ2VBbHR9IGNvbmZpZ3VyYXRpb249e3Jlc3BvbnNpdmVJbWFnZUNvbmZpZ3VyYXRpb259IG1vZGU9eydzcmNzZXQnfSBjdXRUeXBlPXsnYid9IC8+XHJcbiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzcG9uc2l2ZUltYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBsb2FkZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb3VudGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIHRoZSBnZW5lcmF0ZWQgc3Jjc2V0IG91dHB1dFxyXG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGwgPSB0aGlzLmNoZWNrU2Nyb2xsLmJpbmQodGhpcyk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG1pbjogMSxcclxuICAgICAgICAgICAgICAgIG1heDogNTc1LFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogWzM2MCwgMjg4XVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtaW46IDU3NixcclxuICAgICAgICAgICAgICAgIG1heDogOTkxLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogWzM2MCwgMjg4XVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtaW46IDk5MixcclxuICAgICAgICAgICAgICAgIG1heDogMTE5OSxcclxuICAgICAgICAgICAgICAgIHNpemU6IFs0ODAsIDI4OF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbWluOiAxMjAwLFxyXG4gICAgICAgICAgICAgICAgbWF4OiAxMDAwMCxcclxuICAgICAgICAgICAgICAgIHNpemU6IFs1NzAsIDI4OF1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZGUgPSAnc3Jjc2V0JztcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gdGhpcy5wcm9wcy5jb25maWd1cmF0aW9uIHx8IGRlZmF1bHRDb25maWd1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMubW9kZSA9IHRoaXMucHJvcHMubW9kZSB8fCBkZWZhdWx0TW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbW91bnRlZDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5sYXp5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTY3JvbGwoKTtcclxuXHJcbiAgICAgICAgICAgIFsnc2Nyb2xsJ10ubWFwKChldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2LCB0aGlzLmNoZWNrU2Nyb2xsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgWydzY3JvbGwnXS5tYXAoKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldiwgdGhpcy5jaGVja1Njcm9sbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTY3JvbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGltZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPD0gd2luZG93LmlubmVySGVpZ2h0KSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIFsnc2Nyb2xsJ10ubWFwKChldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgI
1082HJldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldiwgdGhpcy5jaGVja1Njcm9sbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29uZmlndXJhdGlvbiA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0LmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWluID0gdi5taW4gfHwgdi5tYXg7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHYubWF4IHx8IHYubWluO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgbWluIHx8ICh3aW5kb3cuaW5uZXJXaWR0aCA+IG1pbiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IG1heCkgfHwgd2luZG93LmlubmVyV2lkdGggPiBtYXgpIHtcclxuICAgICAgICAgICAgLy8gdGhlIGJlbGxvdyBibG93cyB1cCBvbiBiaWcgcmVzb2x1dGlvbnNcclxuICAgICAgICAgICAgLy9pZiAoKHdpbmRvdy5pbm5lcldpZHRoID49IG1pbiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSBtYXgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyUGljdHVyZSA9IChjdXJyZW50Q29uZmlndXJhdGlvbiwgc3JjLCBmaW5hbEFsdCkgPT4ge1xyXG4gICAgICAgIGxldCBzZXBhcmF0b3I7XHJcbiAgICAgICAgaWYoc3JjICE9IG51bGwgJiYgc3JjICE9IFwidW5kZWZpbmVkXCIgKVxyXG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmMuaW5kZXhPZignPycpID4gMCA/ICcmJyA6ICc/JztcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImltYWdlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwaWN0dXJlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmNvbmZpZ3VyYXRpb24ubWFwKCh2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHcgPSB2LnNpemVbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGggPSB2LnNpemVbMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVNyYyA9IGAke2VuY29kZVVSSShzcmMpfSR7c2VwYXJhdG9yfXc9JHt3fSZoPSR7aH0mb3A9JHt0aGlzLnByb3BzLmN1dFR5cGV9IDF4YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbldpZHRoID0gK3YubWluID4gMCA/IGAobWluLXdpZHRoOiAke3YubWlufXB4KWAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9ICt2Lm1heCA+IDAgPyBgKG1heC13aWR0aDogJHt2Lm1heH1weClgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVkaWEgPSAobWluV2lkdGggJiYgbWF4V2lkdGgpID8gYCR7bWluV2lkdGh9IGFuZCAke21heFdpZHRofWAgOiBgJHttaW5XaWR0aCB8fCBtYXhXaWR0aH0gJHt3fXB4YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8c291cmNlIGtleT17aX0gc3JjU2V0PXtpbWFnZVNyY30gbWVkaWE9e21lZGlhfSAvPjtcclxuICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgc3JjPXtgJHtlbmNvZGVVUkkoc3JjKX0ke3NlcGFyYXRvcn13PSR7Y3VycmVudENvbmZpZ3VyYXRpb24uc2l6ZVswXX0maD0ke2N1cnJlbnRDb25maWd1cmF0aW9uLnNpemVbMV19Jm9wPSR7dGhpcy5wcm9wcy5jdXRUeXBlfWB9IGFsdD17ZmluYWxBbHR9IC8+XHJcbiAgICAgICAgICAgICAgICA8L3BpY3R1cmU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU3JjU2V0ID0gKGN1cnJlbnRDb25maWd1cmF0aW9uLCBzcmMsIGZpbmFsQWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gc3JjLmluZGV4T2YoJz8nKSA+IDAgPyAnJicgOiAnPyc7XHJcbiAgICAgICAgY29uc3Qgc3JjU2V0ID0gdGhpcy5jb25maWd1cmF0aW9uXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtlbmNvZGVVUkkoc3JjKX0ke3NlcGFyYXRvcn13PSR7di5zaXplWzBdfSZoPSR7di5zaXplWzFdfSZvcD0ke3RoaXMucHJvcHMuY3V0VHlwZX0gMXhgO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyArICcsJyArIHZhbDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNpemVzID0gdGhpcy5jb25maWd1cmF0aW9uXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pbldpZHRoID0gK3YubWluID4gMCA/IGAobWluLXdpZHRoOiAke3YubWlufXB4KWAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSArdi5tYXggPiAwID8gYChtYXgtd2lkdGg6ICR7di5tYXh9cHgpYCA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1pbldpZHRoICYmIG1heFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke21pbldpZHRofSBhbmQgJHttYXhXaWR0aH0gJHt2LnNpemVbMF19cHhgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHttaW5XaWR0aCB8fCBtYXhXaWR0aH0gJHt2LnNpemVbMF19cHhgO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyArICcsJyArIHZhbDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIHNyYz17YCR7ZW5jb2RlVVJJKHNyYyl9JHtzZXBhcmF0b3J9dz0ke2N1cnJlbnRDb25maWd1cmF0aW9uLnNpemVbMF19Jmg9JHtjdXJyZW50Q29uZmlndXJhdGlvbi5zaXplWzFdfSZvcD0ke3RoaXMucHJvcHMuY3V0VHlwZX1gfSBzcmNTZXQ9e3NyY1NldH0gc2l6ZXM9e3NpemVzfSBhbHQ9e2ZpbmFsQWx0fSAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7IHNyYywgYWx0IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gdiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgY29uc3Qgbm9BbHRUZXh0ID1cclxuICAgICAgICAgICAgc2l0ZURhdGEgJiYgc2l0ZURhdGEucmVzb3VyY2VzICYmIGhhc1ZhbHVlKHNpdGVEYXRhLnJlc291cmNlcy5Ob0FsdFRleHQpXHJcbiAgICAgICAgICAgICAgICA/IHNpdGVEYXRhLnJlc291cmNlcy5Ob0FsdFRleHRcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsQWx0ID0gaGFzVmFsdWUoYWx0KSA/IGFsdCA6IG5vQWx0VGV4dDtcclxuXHJcbiAgICAgICAgLypjb25zdCBmaW5hbEFsdCA9IGFsdCA/IGFsdCA6IHNpdGVEYXRhLnJlc291cmNlcy5Ob0FsdFRleHQ7Ki9cclxuXHJcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XHJcblxyXG4gICAgICAgI
1082HN3aXRjaCh0aGlzLm1vZGUpe1xyXG4gICAgICAgICAgICBjYXNlICdwaWN0dXJlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBpY3R1cmUoY3VycmVudENvbmZpZ3VyYXRpb24sIHNyYywgZmluYWxBbHQpO1xyXG4gICAgICAgICAgICBjYXNlICdzcmNzZXQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3JjU2V0KGN1cnJlbnRDb25maWd1cmF0aW9uLCBzcmMsIGZpbmFsQWx0KTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgXCJiYWJlbC1wb2x5ZmlsbFwiO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5cclxuXHJcbi8vMSAtIENyZWF0ZSBDb250ZXh0XHJcbmV4cG9ydCBjb25zdCBTa2luQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcclxuXHJcbi8vMiAtIENyZWF0ZSBhIFByb3ZpZGVyIENvbXBvbmVudFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa2luUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmlld01vZGU6IHRoaXMuZ2V0TGF5b3V0TW9kZSgpLFxyXG4gICAgICAgICAgICBrZXlQcmVzc2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgd2luZG93V2lkdGhHbG9iYWw6IHdpbmRvdy5pbm5lcldpZHRoXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgc2V0S2V5UHJlc3NlZCA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmtleVByZXNzZWQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAga2V5UHJlc3NlZDogdmFsdWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1vZGFsRXZlbnQgPSAodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5jbGFzc0xpc3QuYWRkKCdpcy1sb2NrZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2
1082N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWxvY2tlZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVLZXlEb3duRXZlbnQgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRLZXlQcmVzc2VkKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXlvdXRNb2RlID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciByZXR1cm5MYXlvdXQgPSBcIlwiO1xyXG5cclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gNzY4ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyKSB7XHJcbiAgICAgICAgICAgIHJldHVybkxheW91dCA9IFwidGFibGV0XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTIpIHtcclxuICAgICAgICAgICAgcmV0dXJuTGF5b3V0ID0gXCJkZXNrdG9wXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuTGF5b3V0ID0gXCJtb2JpbGVcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXR1cm5MYXlvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUmVzaXplRXZlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQpO1xyXG5cclxuICAgICAgICB0aGlzLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNNb3VudGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Vmlld01vZGUgPSB0aGlzLnN0YXRlLnZpZXdNb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDc2OCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5Mikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWaWV3TW9kZSAhPT0gJ3RhYmxldCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmlld01vZGU6ICd0YWJsZXQnIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDk5Mikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWaWV3TW9kZSAhPT0gJ2Rlc2t0b3AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZpZXdNb2RlOiAnZGVza3RvcCcgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZpZXdNb2RlICE9PSAnbW9iaWxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2aWV3TW9kZTogJ21vYmlsZScgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB3aW5kb3dXaWR0aEdsb2JhbDogd2luZG93LmlubmVyV2lkdGggfSk7XHJcblxyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlYWN0IExpZmVjeWNsZSBNZXRob2RzXHJcbiAgICAgKi9cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd25FdmVudCk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuaGFuZGxlUmVzaXplRXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBkb2
1082N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duRXZlbnQpO1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmhhbmRsZVJlc2l6ZUV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFNraW5Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IHN0YXRlOiB0aGlzLnN0YXRlLCBzZXRLZXlQcmVzc2VkOiB0aGlzLnNldEtleVByZXNzZWQsIGhhbmRsZU1vZGFsRXZlbnQ6IHRoaXMuaGFuZGxlTW9kYWxFdmVudCB9fT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxyXG4gICAgICAgICAgICA8L1NraW5Db250ZXh0LlByb3ZpZGVyPlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iXX0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.