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}); 7var dispatchEvent = function dispatchEvent(eventName) { 8 var event = new Event(eventName); 9 document.dispatchEvent(event); 10}; 11 12exports.dispatchEvent = dispatchEvent; 13 14},{}],2:[function(require,module,exports){ 15"use strict"; 16 17Object.defineProperty(exports, "__esModule", { 18 value: true 19}); 20var fetchSiteData = function fetchSiteData(altTwitterEmbedsAPI, url, cb, done) { 21 done = done || function () { 22 /* noop */ 23 }; 24 25 fetch(altTwitterEmbedsAPI + "/api/?site_url=" + url, { 26 method: "GET", 27 credentials: "same-origin", 28 headers: { 29 "Content-Type": "application/x-www-form-urlencoded", 30 "Cache-Control": "no-cache" 31 } 32 }).then(function (response) { 33 return response.json(); 34 }).then(function (response) { 35 cb(response); 36 }).catch(function (error) { 37 // console.error('tembeds_error', error); 38 }).then(done); 39}; 40 41exports.fetchSiteData = fetchSiteData; 42 43},{}],3:[function(require,module,exports){ 44"use strict"; 45 46Object.defineProperty(exports, "__esModule", { 47 value: true 48}); 49var fetchTweetData = function fetchTweetData(altTwitterEmbedsAPI, tweetIds, cb, done) { 50 done = done || function () { 51 /* noop */ 52 }; 53 fetch(altTwitterEmbedsAPI + "/api/?tweet_ids=" + tweetIds.join(","), { 54 method: "GET", 55 credentials: "same-origin", 56 headers: { 57 "Content-Type": "application/x-www-form-urlencoded", 58 "Cache-Control": "no-cache" 59 } 60 }).then(function (response) { 61 return response.json(); 62 }).then(function (response) { 63 cb(response); 64 }).catch(function (error) { 65 console.error('tembeds_error', error); 66 }).then(done); 67}; 68 69exports.fetchTweetData = fetchTweetData; 70 71},{}],4:[function(require,module,exports){ 72"use strict"; 73 74Object.defineProperty(exports, "__esModule", { 75 value: true 76}); 77var getTweetId = function getTweetId(url) { 78 return url.match(/status\/(\d+)/g)[0].replace("status/", ""); 79}; 80 81exports.getTweetId = getTweetId; 82 83},{}],5:[function(require,module,exports){ 84"use strict"; 85 86Object.defineProperty(exports, "__esModule", { 87 value: true 88}); 89exports.processTweets = undefined; 90 91var _renderTweet = require("./renderTweet.js"); 92 93var _getTweetId = require("./getTweetId.js"); 94 95var _fetchTweetData = require("./fetchTweetData.js"); 96 97var _fetchSiteData = require("./fetchSiteData.js"); 98 99var _dispatchEvent = require("./dispatchEvent.js"); 100 101var processTweets = function processTweets(altTwitterEmbedsAPI, useAPI, showMetrics) { 102 var tweets = document.querySelectorAll("blockquote.twitter-tweet"); 103 var tweetIds = []; 104 105 //tweetData needs to be defined 106 var _iteratorNormalCompletion = true; 107 var _didIteratorError = false; 108 var _iteratorError = undefined; 109 110 try { 111 var _loop2 = function _loop2() { 112 var tweet = _step.value; 113 114 var anchors = tweet.querySelectorAll("a"); 115 var url = anchors[anchors.length - 1].href; 116 var tweetId = (0, _getTweetId.getTweetId)(url); 117 118 tweet.dataset.tweetId = tweetId; 119 if (window.tweetData) { 120 existing = window.tweetData.find(function (el) { 121 return el["id"] == tweetId; 122 }); 123 124 if (existing) { 125 (0, _renderTweet.renderTweet)(altTwitterEmbedsAPI, showMetrics, existing); 126 } else { 127 tweetIds.push(tweetId); 128 } 129 } else { 130 tweetIds.push(tweetId); 131 } 132 }; 133 134 for (var _iterator = tweets[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { 135 var existing; 136 137 _loop2(); 138 } 139 } catch (err) { 140 _didIteratorError = true; 141 _iteratorError = err; 142 } finally { 143 try { 144 if (!_iteratorNormalCompletion && _iterator.return) { 145 _iterator.return(); 146 } 147 } finally { 148 if (_didIteratorError) { 149 throw _iteratorError; 150 } 151 } 152 } 153 154 if (tweetIds.length == 0) { 155 (0, _dispatchEvent.dispatchEvent)("tembeds_tweets_processed"); 156 } 157 if (tweetIds.length) { 158 159 if (useAPI) { 160 (0, _fetchTweetData.fetchTweetData)(altTwitterEmbedsAPI, tweetIds, function (response) { 161 if (response && response.length) { 162 (function () { 163 response.forEach(function (data) { 164 (0, _renderTweet.renderTweet)(altTwitterEmbedsAPI, showMetrics, data); 165 }); 166 167 var tweetsWithAttachment = document.querySelectorAll('[data-url-attachment-processed="false"]'); 168 var tweetsWithAttachmentCount = tweetsWithAttachment.length; 169 170 if (tweetsWithAttachmentCount === 0) { 171 (0, _dispatchEvent.dispatchEvent)("tembeds_tweets_processed"); 172 } 173 174 var _iteratorNormalCompletion2 = true; 175 var _didIteratorError2 = false;
176 var _iteratorError2 = undefined; 177 178 try { 179 var _loop = function _loop() { 180 var tweet = _step2.value; 181 182 tweet.dataset.urlAttachmentProcessed = "true"; 183 184 if (tweet.dataset.urlAttachment.indexOf("twitter.com/") > -1) { 185 (0, _fetchTweetData.fetchTweetData)(altTwitterEmbedsAPI, [(0, _getTweetId.getTweetId)(tweet.dataset.urlAttachment)], function (response) { 186 if (response && response.length) { 187 response.forEach(function (data) { 188 (0, _renderTweet.renderTweet)(data, tweet); 189 }); 190 } 191 }); 192 } 193 194 (0, _fetchSiteData.fetchSiteData)(altTwitterEmbedsAPI, tweet.dataset.urlAttachment, function (data) { 195 if (data && data.image) { 196 var urlAttachmentPreview = document.createElement("div"); 197 urlAttachmentPreview.className = "tweet-attachment-preview card mt-4"; 198 199 var tmpAnchor = document.createElement("a"); 200 tmpAnchor.href = tweet.dataset.urlAttachment; 201 202 var urlAttachmentPreviewHTML = ""; 203 204 if (data.image) { 205 urlAttachmentPreviewHTML += "<a href=\"" + tweet.dataset.urlAttachment + "\"><img loading=\"lazy\" class=\"tweet-attachment-site-thumbnail card-img-top\" src=\"" + data.image + "\" alt=\"Preview image for " + tweet.dataset.urlAttachment + "\"></a>"; 206 } 207 208 urlAttachmentPreviewHTML += "<div class=\"card-body\">"; 209 210 if (data.title) { 211 urlAttachmentPreviewHTML += "<p class=\"card-title\">" + data.title + "</p>"; 212 } 213 214 if (data.description) { 215 urlAttachmentPreviewHTML += "<p class=\"card-subtitle mb-2 text-muted\">" + data.description + "</p>"; 216 } 217 218 urlAttachmentPreviewHTML += "<p class=\"card-text\"><a class=\"stretched-link text-muted\" href=\"" + tweet.dataset.urlAttachment + "\" target=\"_blank\">" + tmpAnchor.hostname + "</a></p></div>"; 219 220 urlAttachmentPreview.innerHTML = urlAttachmentPreviewHTML; 221 tweet.querySelector(".tweet-body-wrapper").appendChild(urlAttachmentPreview); 222 } 223 }, function () { 224 tweetsWithAttachmentCount--; 225 if (tweetsWithAttachmentCount === 0) { 226 (0, _dispatchEvent.dispatchEvent)("tembeds_tweets_processed"); 227 } 228 }); 229 }; 230 231 for (var _iterator2 = tweetsWithAttachment[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { 232 _loop(); 233 } 234 } catch (err) { 235 _didIteratorError2 = true; 236 _iteratorError2 = err; 237 } finally { 238 try { 239 if (!_iteratorNormalCompletion2 && _iterator2.return) { 240 _iterator2.return(); 241 } 242 } finally { 243 if (_didIteratorError2) { 244 throw _iteratorError2; 245 } 246 } 247 } 248 })(); 249 } 250 }); 251 } else { 252 var _iteratorNormalCompletion3 = true; 253 var _didIteratorError3 = false; 254 var _iteratorError3 = undefined; 255 256 try { 257 for (var _iterator3 = tweets[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { 258 var _tweet = _step3.value; 259 260 var tweetAttribution = "", 261 tweetDate = ""; 262 263 if (_tweet.childNodes && _tweet.childNodes.length) { 264 if (_tweet.childNodes.length === 3) { 265 tweetDate = _tweet.childNodes[2].textContent; 266 for (var i = 0; i < _tweet.childNodes.length; i++) { 267 var currentNode = _tweet.childNodes[i]; 268 if (currentNode.nodeName === "#text") { 269 tweetAttribution = currentNode.nodeValue; 270 break; 271 } 272 } 273 } else { 274 tweetAttribution = _tweet.childNodes[_tweet.childNodes.length - 2].innerHTML; 275 var tweetDateEl = document.createElement("div"); 276 tweetDateEl.innerHTML = tweetAttribution; 277 // if (tweetDateEl.querySelector != null) { 278 // tweetDate = tweetDateEl.querySelector("a").textContent; 279 // } 280 } 281 282 var usernames = tweetAttribution.match(/@\w+/gi); 283 var name = "", 284 username = ""; 285 286 if (usernames && usernames[0]) { 287 username = usernames[0]; 288 var names = tweetAttribution.split(username); 289 290 if (names && names[0]) { 291 name = names[0].replace("â ", "").replace(" (", ""); 292 } 293 } 294 (0, _renderTweet.renderTweet)(altTwitterEmbedsAPI, showMetrics, { 295 created_at: tweetDate, 296 text: _tweet.querySelector("p").innerHTML, 297 id: _tweet.dataset.tweetId, 298 // 'author_id': '', 299 users: [{ 300 name: name, 301 username: username.replace(/^@/, "") 302 // 'id': '', 303 // 'profile_image_url': '', 304 // 'verified': false 305 }] 306 }); 307 } 308 } 309 } catch (err) {
310 _didIteratorError3 = true; 311 _iteratorError3 = err; 312 } finally { 313 try { 314 if (!_iteratorNormalCompletion3 && _iterator3.return) { 315 _iterator3.return(); 316 } 317 } finally { 318 if (_didIteratorError3) { 319 throw _iteratorError3; 320 } 321 } 322 } 323 } 324 } 325}; 326 327exports.processTweets = processTweets; 328 329},{"./dispatchEvent.js":1,"./fetchSiteData.js":2,"./fetchTweetData.js":3,"./getTweetId.js":4,"./renderTweet.js":7}],6:[function(require,module,exports){ 330"use strict"; 331 332Object.defineProperty(exports, "__esModule", { 333 value: true 334}); 335var ready = function ready(fn) { 336 if (document.readyState != "loading") { 337 fn(); 338 } else { 339 document.addEventListener("DOMContentLoaded", fn); 340 } 341}; 342 343exports.ready = ready; 344 345},{}],7:[function(require,module,exports){ 346"use strict"; 347 348Object.defineProperty(exports, "__esModule", { 349 value: true 350}); 351 352function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } 353 354var renderTweet = function renderTweet(altTwitterEmbedsAPI, showMetrics, data, container) { 355 var tweetText = data.text, 356 tweetUrl = "https://twitter.com/" + data.users[0].username + "/status/" + data.id, 357 entities = null, 358 verifiedBadge = data.users[0].verified ? '<svg role="img" aria-label="Verified user" class="tweet-verified-user-badge" viewBox="0 0 24 24" aria-label="Verified account" class="r-13gxpu9 r-4qtqp9 r-yyyyoo r-1xvli5t r-9cviqr r-dnmrzs r-bnwqim r-1plcrui r-lrvibr"><g><path d="M22.5 12.5c0-1.58-.875-2.95-2.148-3.6.154-.435.238-.905.238-1.4 0-2.21-1.71-3.998-3.818-3.998-.47 0-.92.084-1.336.25C14.818 2.415 13.51 1.5 12 1.5s-2.816.917-3.437 2.25c-.415-.165-.866-.25-1.336-.25-2.11 0-3.818 1.79-3.818 4 0 .494.083.964.237 1.4-1.272.65-2.147 2.018-2.147 3.6 0 1.495.782 2.798 1.942 3.486-.02.17-.032.34-.032.514 0 2.21 1.708 4 3.818 4 .47 0 .92-.086 1.335-.25.62 1.334 1.926 2.25 3.437 2.25 1.512 0 2.818-.916 3.437-2.25.415.163.865.248 1.336.248 2.11 0 3.818-1.79 3.818-4 0-.174-.012-.344-.033-.513 1.158-.687 1.943-1.99 1.943-3.484zm-6.616-3.334l-4.334 6.5c-.145.217-.382.334-.625.334-.143 0-.288-.04-.416-.126l-.115-.094-2.415-2.415c-.293-.293-.293-.768 0-1.06s.768-.294 1.06 0l1.77 1.767 3.825-5.74c.23-.345.696-.436 1.04-.207.346.23.44.696.21 1.04z"></path></g></svg>' : "", 359 renderedTweetHTML = "<div class=\"card w-100\">\n <div class=\"tweet-body-wrapper card-body pt-4\">\n <div class=\"card-text\">\n <div class=\"row no-gutters mb-1\">"; 360 if (data.users[0].profile_image_url) { 361 renderedTweetHTML += "<div class=\"col-2 col-sm-1 col-md-1\">\n <a href=\"https://twitter.com/" + data.users[0].username + "\" class=\"text-decoration-none\"><img title=\"Profile image\" alt=\"Profile image of @" + data.users[0].username + "\" loading=\"lazy\" class=\"rounded-circle border\" width=\"48\" height=\"48\" src=\"" + data.users[0].profile_image_url + "\"></a>\n </div>"; 362 } 363 renderedTweetHTML += "<div class=\"tweet-author " + (data.users[0].profile_image_url ? "col-9 col-sm-10 col-md-10 pl-2" : "col-11 col-sm-11 col-md-11") + " pb-3\">\n <p class=\"font-weight-bold mb-0 mt-0\"><a class=\"text-dark text-decoration-none\" href=\"https://twitter.com/" + data.users[0].username + "\">" + data.users[0].name + verifiedBadge + "</a></p>\n <p class=\"mb-1 mb-md-2 mt-0\"><a class=\"text-muted text-decoration-none\" href=\"https://twitter.com/" + data.users[0].username + "\">@" + data.users[0].username + "</a></p>\n </div>\n <div class=\"col-1 text-right\">\n <a href=\"" + tweetUrl + "\" target=\"_blank\"><svg role=\"img\" aria-label=\"Twitter logo\" style=\"width: 24px;\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M512 97.248c-19.04 8.352-39.328 13.888-60.48 16.576 21.76-12.992 38.368-33.408 46.176-58.016-20.288 12.096-42.688 20.64-66.56 25.408C411.872 60.704 384.416 48 354.464 48c-58.112 0-104.896 47.168-104.896 104.992 0 8.32.704 16.32 2.432 23.936-87.264-4.256-164.48-46.08-216.352-109.792-9.056 15.712-14.368 33.696-14.368 53.056 0 36.352 18.72 68.576 46.624 87.232-16.864-.32-33.408-5.216-47.424-12.928v1.152c0 51.008 36.384 93.376 84.096 103.136-8.544 2.336-17.856 3.456-27.52 3.456-6.72 0-13.504-.384-19.872-1.792 13.6 41.568 52.192 72.128 98.08 73.12-35.712 27.936-81.056 44.768-130.144 44.768-8.608 0-16.864-.384-25.12-1.44C46.496 446.88 101.6 464 161.024 464c193.152 0 298.752-160 298.752-298.688 0-4.64-.16-9.12-.384-13.568 20.832-14.784 38.336-33.248 52.608-54.496z\" fill=\"#03a9f4\"/></svg></a>\n </div>\n </div>\n <div class=\"tweet-body\">"; 364 if (data.entities) { 365 if (data.entities.urls) {
366 data.entities.urls.forEach(function (url) { 367 if (url.display_url.indexOf("pic.twitter.com") === -1) { 368 tweetText = tweetText.replace(RegExp(url.url, "ig"), "<a href=\"" + url.expanded_url + "\" target=\"_blank\">" + url.display_url + "</a>"); 369 } else { 370 tweetText = tweetText.replace(url.url, ""); 371 } 372 }); 373 } 374 if (data.entities.mentions) { 375 data.entities.mentions.forEach(function (mention) { 376 tweetText = tweetText.replace(RegExp("@" + mention.username, "ig"), "<a href=\"https://twitter.com/" + mention.username + "\" target=\"_blank\">@" + mention.username + "</a>"); 377 }); 378 } 379 if (data.entities.hashtags) { 380 data.entities.hashtags.forEach(function (hashtag) { 381 tweetText = tweetText.replace(RegExp("#" + hashtag.tag, "ig"), "<a href=\"https://twitter.com/hashtag/" + hashtag.tag + "\" target=\"_blank\">#" + hashtag.tag + "</a>"); 382 }); 383 } 384 } 385 if (data.media && data.media.length) { 386 tweetText += "<div data-media-length=\"" + data.media.length + "\" class=\"tweet-media row mt-3 no-gutters\">"; 387 data.media.forEach(function (media, index) { 388 if (data.media.length === 1) { 389 tweetText += "<div data-media-type=\"" + media.type + "\" class=\"text-center col-sm-12 col-md-12 col-lg-12\">"; 390 } else if (data.media.length === 3) { 391 if (index === 2) { 392 tweetText += "<div data-media-type=\"" + media.type + "\" class=\"text-center col-sm-12 col-md-12 col-lg-12\">"; 393 } else { 394 tweetText += "<div data-media-type=\"" + media.type + "\" class=\"text-center col-sm-12 col-md-6 col-lg-6\">"; 395 } 396 } else if (data.media.length > 1 && data.media.length < 5) { 397 tweetText += "<div data-media-type=\"" + media.type + "\" class=\"text-center col-sm-12 col-md-6 col-lg-6\">"; 398 } else { 399 tweetText += "<div data-media-type=\"" + media.type + "\" class=\"text-center col-sm-12 col-md-3 col-lg-3\">"; 400 } 401 if (media.type === "animated_gif") { 402 tweetText += "<video class=\"w-100 mt-0\" controls loop><source src=\"" + media.preview_image_url.replace("pbs.twimg.com/tweet_video_thumb", "video.twimg.com/tweet_video").replace(".jpg", ".mp4").replace(".png", ".mp4") + "\" type=\"video/mp4\"></video>"; 403 } else if (media.type === "video") { 404 if (media.variants) { 405 var variant = null; 406 for (var _index = media.variants.length - 1; _index >= 0; _index--) { 407 var element = media.variants[_index]; 408 if (element.content_type == "video/mp4") { 409 variant = element; 410 break; 411 } 412 } 413 414 tweetText += "<video class=\"w-100 mt-0\" poster=" + media.preview_image_url + " controls loop><source src=\"" + variant.url + "\" type=\"" + variant.content_type + "\"></video>"; 415 } else { 416 tweetText += "<a class=\"tweet-video-placeholder\" href=\"" + tweetUrl + "\" target=\"_blank\"><img alt=\"" + (media.alt_text || '') + "\" loading=\"lazy\" width=\"" + media.width + "\" height=\"" + media.height + "\" class=\"w-100 rounded border\" src=\"" + media.preview_image_url + "\"></a>"; 417 } 418 } else if (media.type === "photo") { 419 tweetText += "<a href=\"" + tweetUrl + "\" target=\"_blank\"><img alt=\"" + (media.alt_text || '') + "\" loading=\"lazy\" width=\"" + media.width + "\" height=\"" + media.height + "\" class=\"w-100 rounded border\" src=\"" + media.url + "\"></a>"; 420 } 421 tweetText += "</div>"; 422 }); 423 424 tweetText += "</div>"; 425 } 426 427 if (data.polls && data.polls.length) { 428 tweetText += '<div class="mt-0">'; 429 430 data.polls.forEach(function (poll) { 431 if (poll.options && poll.options.length) { 432 var voteCounts = poll.options.map(function (option) { 433 return option.votes; 434 }); 435 436 var voteCountMax = Math.max.apply(Math, _toConsumableArray(voteCounts)); 437 var votesTotal = voteCounts.reduce(function (total, num) { 438 return total + num; 439 }); 440 441 tweetText += "<div id=\"poll-" + poll.id + "\" class=\"row\" role=\"list\">"; 442 443 poll.options.forEach(function (option, index) { 444 var votesPortion = option.votes / votesTotal * 100; 445 tweetText += "\n <div class=\"tweet-poll-results col-9\" style=\"height:60px;\" role=\"listitem\">\n <div class=\"progress position-relative mt-n4 " + (option.votes === voteCountMax ? " border border-primary " : "") + "\" style=\"height:30px;\">\n <div class=\"progress-bar\"\n style=\"width: " + votesPortion + "%\"\n ></div>
445\n <span id=\"poll-" + poll.id + "-option-" + (index + 1) + "\" class=\"pl-2 d-flex position-absolute w-100\" style=\"font-size: 1rem; line-height: 30px;\">" + option.label + "</span>\n </div>\n </div>\n <div class=\"col-3 mt-n4 text-right\" style=\"height:60px;\">\n <span class=\"w-100\">" + Math.round(option.votes / votesTotal * 100) + "%</span>\n </div>"; 446 }); 447 448 tweetText += "<div class=\"col-12 mt-3 d-table\">\n <p class=\"text-muted\">" + votesTotal.toLocaleString() + " votes</p>\n </div>\n </div>"; 449 } 450 }); 451 452 tweetText += "</div>"; 453 } 454 455 var tweetDate = new Date(data.created_at).toLocaleDateString(navigator.language, { month: "long", year: "numeric", day: "numeric" }); 456 457 renderedTweetHTML += tweetText + "</div>\n </div>\n </div>\n <div class=\"card-footer pb-4\">"; 458 459 if (!container) { 460 if (showMetrics && data.public_metrics) { 461 renderedTweetHTML += "\n <span class=\"tweet-icon\" role=\"img\" aria-label=\"Retweets\">\uD83D\uDD01</span><a class=\"text-muted\" href=\"" + tweetUrl + "\" target=\"_blank\">" + data.public_metrics.retweet_count.toLocaleString() + "</a> |\n <span class=\"tweet-icon\"role=\"img\" aria-label=\"Likes\">\u2764\uFE0F</span> <a class=\"text-muted\" href=\"" + tweetUrl + "\" target=\"_blank\">" + data.public_metrics.like_count.toLocaleString() + "</a> | "; 462 } 463 464 renderedTweetHTML += "<a class=\"text-muted\" href=\"" + tweetUrl + "\" target=\"_blank\">" + tweetDate + "</a>"; 465 } 466 467 renderedTweetHTML += "</div></div>"; 468 469 var renderedTweet = document.createElement("div"); 470 renderedTweet.className = "twitter-tweet twitter-tweet-rendered w-100"; 471 renderedTweet.innerHTML = renderedTweetHTML; 472 473 var lastUrl = ""; 474 475 if (data.entities && data.entities.urls && data.entities.urls.length) { 476 lastUrl = data.entities.urls[data.entities.urls.length - 1]; 477 } 478 479 if (data.media && data.media.length || data.extended_entities && data.extended_entities.media && data.extended_entities.media.length) { 480 lastUrl = ""; 481 } 482 483 if (lastUrl) { 484 renderedTweet.dataset.urlAttachment = lastUrl.expanded_url; 485 renderedTweet.dataset.urlAttachmentProcessed = "false"; 486 } 487 if (container) { 488 var tweetContainer = container.querySelector(".tweet-body a:last-of-type"); 489 if (tweetContainer) { 490 tweetContainer.parentNode.replaceChild(renderedTweet, tweetContainer); 491 } 492 } else { 493 var tweet = document.querySelector("[data-tweet-id=\"" + data.id + "\"]"); 494 if (tweet) { 495 tweet.parentNode.replaceChild(renderedTweet, tweet); 496 } 497 } 498}; 499 500exports.renderTweet = renderTweet; 501 502},{}],8:[function(require,module,exports){ 503"use strict"; 504 505var _ready = require("./ready.js"); 506 507var _processTweets = require("./processTweets.js"); 508 509var altTwitterEmbedsAPI = "https://ffwebserver-vkg7qjsu5q-ew.a.run.app"; 510 511(0, _ready.ready)(function () { 512 (0, _processTweets.processTweets)(altTwitterEmbedsAPI, true, true); 513}); 514 515window.processTweets = _processTweets.processTweets; 516 517},{"./processTweets.js":5,"./ready.js":6}]},{},[8]) 518//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvc2NyaXB0cy9kaXNwYXRjaEV2ZW50LmpzIiwic3JjL3NjcmlwdHMvZmV0Y2hTaXRlRGF0YS5qcyIsInNyYy9zY3JpcHRzL2ZldGNoVHdlZXREYXRhLmpzIiwic3JjL3NjcmlwdHMvZ2V0VHdlZXRJZC5qcyIsInNyYy9zY3JpcHRzL3Byb2Nlc3NUd2VldHMuanMiLCJzcmMvc2NyaXB0cy9yZWFkeS5qcyIsInNyYy9zY3JpcHRzL3JlbmRlclR3ZWV0LmpzIiwic3JjL3NjcmlwdHMvdHdlZXRzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUNBQSxJQUFNLGdCQUFnQixTQUFoQixhQUFnQixDQUFDLFNBQUQsRUFBZTtBQUNuQyxNQUFNLFFBQVEsSUFBSSxLQUFKLENBQVUsU0FBVixDQUFkO0FBQ0EsV0FBUyxhQUFULENBQXVCLEtBQXZCO0FBQ0QsQ0FIRDs7UUFLUyxhLEdBQUEsYTs7Ozs7Ozs7QUNMVCxJQUFNLGdCQUFnQixTQUFoQixhQUFnQixDQUFDLG1CQUFELEVBQXNCLEdBQXRCLEVBQTJCLEVBQTNCLEVBQStCLElBQS9CLEVBQXdDO0FBQzVELFNBQ0UsUUFDQSxZQUFZO0FBQ1Y7QUFDRCxHQUpIOztBQU1BLFFBQVMsbUJBQVQsdUJBQThDLEdBQTlDLEVBQXFEO0FBQ25ELFlBQVEsS0FEMkM7QUFFbkQsaUJBQWEsYUFGc0M7QUFHbkQsYUFBUztBQUNQLHNCQUFnQixtQ0FEVDtBQUVQLHVCQUFpQjtBQUZWO0FBSDBDLEdBQXJELEVBUUcsSUFSSCxDQVFRLFVBQUMsUUFBRCxFQUFjO0FBQ2xCLFdBQU8sU0FBUyxJQUFULEVBQVA7QUFDRCxHQVZILEVBV0csSUFYSCxDQVdRLFVBQUMsUUFBRCxFQUFjO0FBQ2xCLE9BQUcsUUFBSDtBQUNELEdBYkgsRUFjRyxLQWRILENBY1MsVUFBQyxLQUFELEVBQVc7QUFDaEI7QUFDRCxHQWhCSCxFQWlCRyxJQWpCSCxD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wRCw2QkFBaUYsU0FBakY7QUFDRDs7QUFFRCx1QkFBcUIsY0FBckI7O0FBRUEsTUFBSSxnQkFBZ0IsU0FBUyxhQUFULENBQXVCLEtBQXZCLENBQXBCO0FBQ0EsZ0JBQWMsU0FBZDtBQUNBLGdCQUFjLFNBQWQsR0FBMEIsaUJBQTFCOztBQUVBLE1BQUksVUFBVSxFQUFkOztBQUVBLE1BQUksS0FBSyxRQUFMLElBQWlCLEtBQUssUUFBTCxDQUFjLElBQS9CLElBQXVDLEtBQUssUUFBTCxDQUFjLElBQWQsQ0FBbUIsTUFBOUQsRUFBc0U7QUFDcEUsY0FBVSxLQUFLLFFBQUwsQ0FBYyxJQUFkLENBQW1CLEtBQUssUUFBTCxDQUFjLElBQWQsQ0FBbUIsTUFBbkIsR0FBNEIsQ0FBL0MsQ0FBVjtBQUNEOztBQUVELE1BQ0csS0FBSyxLQUFMLElBQWMsS0FBSyxLQUFMLENBQVcsTUFBMUIsSUFDQyxLQUFLLGlCQUFMLElBQ0MsS0FBSyxpQkFBTCxDQUF1QixLQUR4QixJQUVDLEtBQUssaUJBQUwsQ0FBdUIsS0FBdkIsQ0FBNkIsTUFKakMsRUFLRTtBQUNBLGNBQVUsRUFBVjtBQUNEOztBQUVELE1BQUksT0FBSixFQUFhO0FBQ1gsa0JBQWMsT0FBZCxDQUFzQixhQUF0QixHQUFzQyxRQUFRLFlBQTlDO0FBQ0Esa0JBQWMsT0FBZCxDQUFzQixzQkFBdEIsR0FBK0MsT0FBL0M7QUFDRDtBQUNELE1BQUksU0FBSixFQUFlO0FBQ2IsUUFBTSxpQkFBaUIsVUFBVSxhQUFWLENBQ3JCLDRCQURxQixDQUF2QjtBQUdBLFFBQUksY0FBSixFQUFvQjtB
518QUNsQixxQkFBZSxVQUFmLENBQTBCLFlBQTFCLENBQXVDLGFBQXZDLEVBQXNELGNBQXREO0FBQ0Q7QUFDRixHQVBELE1BT087QUFDTCxRQUFNLFFBQVEsU0FBUyxhQUFULHVCQUEwQyxLQUFLLEVBQS9DLFNBQWQ7QUFDQSxRQUFJLEtBQUosRUFBVztBQUNULFlBQU0sVUFBTixDQUFpQixZQUFqQixDQUE4QixhQUE5QixFQUE2QyxLQUE3QztBQUNEO0FBQ0Y7QUFDRixDQXBPSDs7UUFzT1csVyxHQUFBLFc7OztBQ3RPWDs7QUFFQTs7QUFDQTs7QUFFQSxJQUFNLHNCQUFzQixpQkFBNUI7O0FBRUEsa0JBQU0sWUFBTTtBQUNWLG9DQUFjLG1CQUFkLEVBQW1DLGNBQW5DLEVBQW1ELG1CQUFuRDtBQUNELENBRkQ7O0FBS0EsT0FBTyxhQUFQLEdBQXVCLDRCQUF2QiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImNvbnN0IGRpc3BhdGNoRXZlbnQgPSAoZXZlbnROYW1lKSA9PiB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50TmFtZSk7XG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufTtcblxuZXhwb3J0IHsgZGlzcGF0Y2hFdmVudCB9O1xuIiwiY29uc3QgZmV0Y2hTaXRlRGF0YSA9IChhbHRUd2l0dGVyRW1iZWRzQVBJLCB1cmwsIGNiLCBkb25lKSA9PiB7XG4gIGRvbmUgPVxuICAgIGRvbmUgfHxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAvKiBub29wICovXG4gICAgfTtcblxuICBmZXRjaChgJHthbHRUd2l0dGVyRW1iZWRzQVBJfS9hcGkvP3NpdGVfdXJsPSR7dXJsfWAsIHtcbiAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICB9LFxuICB9KVxuICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9KVxuICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgY2IocmVzcG9uc2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgLy8gY29uc29sZS5lcnJvcigndGVtYmVkc19lcnJvcicsIGVycm9yKTtcbiAgICB9KVxuICAgIC50aGVuKGRvbmUpO1xufTtcblxuZXhwb3J0IHsgZmV0Y2hTaXRlRGF0YSB9O1xuIiwiY29uc3QgZmV0Y2hUd2VldERhdGEgPSAoYWx0VHdpdHRlckVtYmVkc0FQSSwgdHdlZXRJZHMsIGNiLCBkb25lKSA9PiB7XG4gIGRvbmUgPVxuICAgIGRvbmUgfHxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAvKiBub29wICovXG4gICAgfTtcbiAgZmV0Y2goYCR7YWx0VHdpdHRlckVtYmVkc0FQSX0vYXBpLz90d2VldF9pZHM9JHt0d2VldElkcy5qb2luKFwiLFwiKX1gLCB7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbiAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXG4gICAgfSxcbiAgfSlcbiAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSlcbiAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNiKHJlc3BvbnNlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3RlbWJlZHNfZXJyb3InLCBlcnJvcik7XG4gICAgfSlcbiAgICAudGhlbihkb25lKTtcbn07XG5cbmV4cG9ydCB7IGZldGNoVHdlZXREYXRhIH07XG4iLCJjb25zdCBnZXRUd2VldElkID0gKHVybCkgPT4ge1xuICByZXR1cm4gdXJsLm1hdGNoKC9zdGF0dXNcXC8oXFxkKykvZylbMF0ucmVwbGFjZShcInN0YXR1cy9cIiwgXCJcIik7XG59O1xuXG5leHBvcnQgeyBnZXRUd2VldElkIH07XG4iLCJpbXBvcnQgeyByZW5kZXJUd2VldCB9IGZyb20gXCIuL3JlbmRlclR3ZWV0LmpzXCI7XG5pbXBvcnQgeyBnZXRUd2VldElkIH0gZnJvbSBcIi4vZ2V0VHdlZXRJZC5qc1wiO1xuaW1wb3J0IHsgZmV0Y2hUd2VldERhdGEgfSBmcm9tIFwiLi9mZXRjaFR3ZWV0RGF0YS5qc1wiO1xuaW1wb3J0IHsgZmV0Y2hTaXRlRGF0YSB9IGZyb20gXCIuL2ZldGNoU2l0ZURhdGEuanNcIjtcbmltcG9ydCB7IGRpc3BhdGNoRXZlbnQgfSBmcm9tIFwiLi9kaXNwYXRjaEV2ZW50LmpzXCI7XG5cbmNvbnN0IHByb2Nlc3NUd2VldHMgPSAoYWx0VHdpdHRlckVtYmVkc0FQSSwgdXNlQVBJLCBzaG93TWV0cmljcykgPT4ge1xuICBjb25zdCB0d2VldHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYmxvY2txdW90ZS50d2l0dGVyLXR3ZWV0XCIpO1xuICBsZXQgdHdlZXRJZHMgPSBbXTtcblxuICAvL3R3ZWV0RGF0YSBuZWVkcyB0byBiZSBkZWZpbmVkXG4gIGZvciAoY29uc3QgdHdlZXQgb2YgdHdlZXRzKSB7XG4gICAgY29uc3QgYW5jaG9ycyA9IHR3ZWV0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpO1xuICAgIGNvbnN0IHVybCA9IGFuY2hvcnNbYW5jaG9ycy5sZW5ndGggLSAxXS5ocmVmO1xuICAgIGNvbnN0IHR3ZWV0SWQgPSBnZXRUd2VldElkKHVybCk7XG5cbiAgICBcbiAgICB0d2VldC5kYXRhc2V0LnR3ZWV0SWQgPSB0d2VldElkO1xuICAgIGlmICh3aW5kb3cudHdlZXREYXRhKSB7XG4gICAgICB2Y
518XIgZXhpc3RpbmcgPSB3aW5kb3cudHdlZXREYXRhLmZpbmQoZWwgPT4gZWxbXCJpZFwiXSA9PSB0d2VldElkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICByZW5kZXJUd2VldChhbHRUd2l0dGVyRW1iZWRzQVBJLCBzaG93TWV0cmljcywgZXhpc3RpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHdlZXRJZHMucHVzaCh0d2VldElkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHdlZXRJZHMucHVzaCh0d2VldElkKTtcbiAgICB9XG5cbiAgXG4gICBcbiAgfVxuICBpZiAodHdlZXRJZHMubGVuZ3RoID09IDApIHtcbiAgICBkaXNwYXRjaEV2ZW50KFwidGVtYmVkc190d2VldHNfcHJvY2Vzc2VkXCIpOyBcbiAgfVxuICBpZiAodHdlZXRJZHMubGVuZ3RoKSB7XG5cblxuICAgIGlmICh1c2VBUEkpIHtcbiAgICAgIGZldGNoVHdlZXREYXRhKGFsdFR3aXR0ZXJFbWJlZHNBUEksIHR3ZWV0SWRzLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICAgIHJlc3BvbnNlLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlbmRlclR3ZWV0KGFsdFR3aXR0ZXJFbWJlZHNBUEksIHNob3dNZXRyaWNzLCBkYXRhKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHR3ZWV0c1dpdGhBdHRhY2htZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdbZGF0YS11cmwtYXR0YWNobWVudC1wcm9jZXNzZWQ9XCJmYWxzZVwiXSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCB0d2VldHNXaXRoQXR0YWNobWVudENvdW50ID0gdHdlZXRzV2l0aEF0dGFjaG1lbnQubGVuZ3RoO1xuXG4gICAgICAgICAgaWYgKHR3ZWV0c1dpdGhBdHRhY2htZW50Q291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoXCJ0ZW1iZWRzX3R3ZWV0c19wcm9jZXNzZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCB0d2VldCBvZiB0d2VldHNXaXRoQXR0YWNobWVudCkge1xuICAgICAgICAgICAgdHdlZXQuZGF0YXNldC51cmxBdHRhY2htZW50UHJvY2Vzc2VkID0gXCJ0cnVlXCI7XG5cbiAgICAgICAgICAgIGlmICh0d2VldC5kYXRhc2V0LnVybEF0dGFjaG1lbnQuaW5kZXhPZihcInR3aXR0ZXIuY29tL1wiKSA+IC0xKSB7XG4gICAgICAgICAgICAgIGZldGNoVHdlZXREYXRhKFxuICAgICAgICAgICAgICAgIGFsdFR3aXR0ZXJFbWJlZHNBUEksXG4gICAgICAgICAgICAgICAgW2dldFR3ZWV0SWQodHdlZXQuZGF0YXNldC51cmxBdHRhY2htZW50KV0sXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJUd2VldChkYXRhLCB0d2VldCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmV0Y2hTaXRlRGF0YShcbiAgICAgICAgICAgICAgYWx0VHdpdHRlckVtYmVkc0FQSSxcbiAgICAgICAgICAgICAgdHdlZXQuZGF0YXNldC51cmxBdHRhY2htZW50LFxuICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIGxldCB1cmxBdHRhY2htZW50UHJldmlldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICB1cmxBdHRhY2htZW50UHJldmlldy5jbGFzc05hbWUgPSBgdHdlZXQtYXR0YWNobWVudC1wcmV2aWV3IGNhcmQgbXQtNGA7XG5cbiAgICAgICAgICAgICAgICAgIGxldCB0bXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgICAgICAgIHRtcEFuY2hvci5ocmVmID0gdHdlZXQuZGF0YXNldC51cmxBdHRhY2htZW50O1xuXG4gICAgICAgICAgICAgICAgICBsZXQgdXJsQXR0YWNobWVudFByZXZpZXdIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsQXR0YWNobWVudFByZXZpZXdIVE1MICs9IGA8YSBocmVmPVwiJHt0d2VldC5kYXRhc2V0LnVybEF0dGFjaG1lbnR9XCI+PGltZyBsb2FkaW5nPVwibGF6eVwiIGNsYXNzPVwidHdlZXQtYXR0YWNobWVudC1zaXRlLXRodW1ibmFpbCBjYXJkLWltZy10b3BcIiBzcmM9XCIke2RhdGEuaW1hZ2V9XCIgYWx0PVwiUHJldmlldyBpbWFnZSBmb3IgJHt0d2VldC5kYXRhc2V0LnVybEF0dGFjaG1lbnR9XCI+PC9hPmA7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHVybEF0dGFjaG1lbnRQcmV2aWV3SFRNTCArPSBgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPmA7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybEF0dGFjaG1lbnRQcmV2aWV3SFRNTCArPSBgPHAgY2xhc3M9XCJjYXJkLXRpdGxlXCI+JHtkYXRhLnRpdGxlfTwvcD5gO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB1cmxBdHRhY2htZW50UHJldmlld0hUTUwgKz0gYDxwIGNsYXNzPVwiY2FyZC1zdWJ0aXRsZSBtYi0yIHRleHQtbXV0ZWRcIj4ke2RhdGEuZGVzY3JpcHRpb259PC9wPmA7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHVybEF0dGFjaG1lbnRQcmV2aWV3SFRNTCArPSBgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj48YSBjbGFzcz1cInN0cmV0Y2hlZC1saW5rIHRleHQtbXV0ZWRcIiBocmVmPVwiJHt0d2VldC5kYXRhc2V0LnVybEF0dGFjaG1lbnR9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHt0bXBBbmNob3IuaG9zdG5hbWV9PC9hPjwvcD48L2Rpdj5gO1xuXG4gICAgICAgICAgICAgICAgICB1cmxBdHRhY2htZW50UHJldmlldy5pbm5lckhUTUwgPSB1cmxBdHRhY2htZW50UHJldmlld0hUTUw7XG4gICAgICAgICAgICAgICAgICB0d2VldFxuICAgICAgICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi50d2VldC1ib2R5LXdyYXBwZXJcIilcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKHVybEF0dGFjaG1lbnRQcmV2aWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgI
518H0sXG4gICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0d2VldHNXaXRoQXR0YWNobWVudENvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHR3ZWV0c1dpdGhBdHRhY2htZW50Q291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoXCJ0ZW1iZWRzX3R3ZWV0c19wcm9jZXNzZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgdHdlZXQgb2YgdHdlZXRzKSB7XG4gICAgICAgIGxldCB0d2VldEF0dHJpYnV0aW9uID0gXCJcIixcbiAgICAgICAgICB0d2VldERhdGUgPSBcIlwiO1xuXG4gICAgICAgIGlmICh0d2VldC5jaGlsZE5vZGVzICYmIHR3ZWV0LmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHR3ZWV0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0d2VldERhdGUgPSB0d2VldC5jaGlsZE5vZGVzWzJdLnRleHRDb250ZW50O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0d2VldC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IHR3ZWV0LmNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB7XG4gICAgICAgICAgICAgICAgdHdlZXRBdHRyaWJ1dGlvbiA9IGN1cnJlbnROb2RlLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0d2VldEF0dHJpYnV0aW9uID1cbiAgICAgICAgICAgICAgdHdlZXQuY2hpbGROb2Rlc1t0d2VldC5jaGlsZE5vZGVzLmxlbmd0aCAtIDJdLmlubmVySFRNTDtcbiAgICAgICAgICAgIGxldCB0d2VldERhdGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0d2VldERhdGVFbC5pbm5lckhUTUwgPSB0d2VldEF0dHJpYnV0aW9uO1xuICAgICAgICAgICAgLy8gaWYgKHR3ZWV0RGF0ZUVsLnF1ZXJ5U2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gICB0d2VldERhdGUgPSB0d2VldERhdGVFbC5xdWVyeVNlbGVjdG9yKFwiYVwiKS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVzZXJuYW1lcyA9IHR3ZWV0QXR0cmlidXRpb24ubWF0Y2goL0BcXHcrL2dpKTtcbiAgICAgICAgICBsZXQgbmFtZSA9IFwiXCIsXG4gICAgICAgICAgICB1c2VybmFtZSA9IFwiXCI7XG5cbiAgICAgICAgICBpZiAodXNlcm5hbWVzICYmIHVzZXJuYW1lc1swXSkge1xuICAgICAgICAgICAgdXNlcm5hbWUgPSB1c2VybmFtZXNbMF07XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IHR3ZWV0QXR0cmlidXRpb24uc3BsaXQodXNlcm5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobmFtZXMgJiYgbmFtZXNbMF0pIHtcbiAgICAgICAgICAgICAgbmFtZSA9IG5hbWVzWzBdLnJlcGxhY2UoXCLigJQgXCIsIFwiXCIpLnJlcGxhY2UoXCIgKFwiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVuZGVyVHdlZXQoYWx0VHdpdHRlckVtYmVkc0FQSSwgc2hvd01ldHJpY3MsIHtcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IHR3ZWV0RGF0ZSxcbiAgICAgICAgICAgIHRleHQ6IHR3ZWV0LnF1ZXJ5U2VsZWN0b3IoXCJwXCIpLmlubmVySFRNTCxcbiAgICAgICAgICAgIGlkOiB0d2VldC5kYXRhc2V0LnR3ZWV0SWQsXG4gICAgICAgICAgICAvLyAnYXV0aG9yX2lkJzogJycsXG4gICAgICAgICAgICB1c2VyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUucmVwbGFjZSgvXkAvLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAvLyAnaWQnOiAnJyxcbiAgICAgICAgICAgICAgICAvLyAncHJvZmlsZV9pbWFnZV91cmwnOiAnJyxcbiAgICAgICAgICAgICAgICAvLyAndmVyaWZpZWQnOiBmYWxzZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IHsgcHJvY2Vzc1R3ZWV0cyB9O1xuIiwiY29uc3QgcmVhZHkgPSAoZm4pID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHtcbiAgICBmbigpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZuKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgcmVhZHkgfTtcbiIsImNvbnN0IHJlbmRlclR3ZWV0ID0gKGFsdFR3aXR0ZXJFbWJlZHNBUEksIHNob3dNZXRyaWNzLCBkYXRhLCBjb250YWluZXIpID0+IHtcbiAgICBsZXQgdHdlZXRUZXh0ID0gZGF0YS50ZXh0LFxuICAgICAgdHdlZXRVcmwgPSBgaHR0cHM6Ly90d2l0dGVyLmNvbS8ke2RhdGEudXNlcnNbMF0udXNlcm5hbWV9L3N0YXR1cy8ke2RhdGEuaWR9YCxcbiAgICAgIGVudGl0aWVzID0gbnVsbCxcbiAgICAgIHZlcmlmaWVkQmFkZ2UgPSBkYXRhLnVzZXJzWzBdLnZlcmlmaWVkXG4gICAgICAgID8gJzxzdmcgcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9XCJWZXJpZmllZCB1c2VyXCIgY2xhc3M9XCJ0d2VldC12ZXJpZmllZC11c2VyLWJhZGdlXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtbGFiZWw9XCJWZXJpZmllZCBhY2NvdW50XCIgY2xhc3M9XCJyLTEzZ3hwdTkgci00cXRxcDkgci15eXl5b28gci0xeHZsaTV0IHItOWN2aXFyIHItZG5tcnpzIHItYm53cWltIHItMXBsY3J1aSByLWxydmliclwiPjxnPjxwYXRoIGQ9XCJNMjIuNSAxMi41YzAtMS41OC0uODc1LTIuOTUtMi4xNDgtMy42LjE1NC0uNDM1LjIzOC0uOTA1LjIzOC0xLjQgMC0yLjIxLTEuNzEtMy45OTgtMy44MTgtMy45OTgtLjQ3IDAtLjkyLjA4NC0xLjMzNi4yNUMxNC44MTggMi40MTUgMTMuNTEgMS41IDEyIDEuNXMtMi44MTYuOTE3LTMuNDM3IDIuMjVjLS40MTUtLjE2NS0uODY2LS4yNS0xLjMzNi0uMjUtMi4xMSAwLTMuODE4IDEuNzktMy44MTggNCAwIC40OTQuMDgzLjk2NC4yMzcgMS40LTEuMjcyLjY1LTIuMTQ3IDIuMDE4LTIuMTQ3IDMuNiAwIDEuNDk1Ljc4MiAyLjc5OCAxLjk0MiAzLjQ4Ni0uMDIuMTctLjAzMi4zNC0uMDMyLjUxNCAwIDIuMjEgMS43MDggNCAzLjgxOCA0IC40NyAwIC45Mi0uMDg2IDEuMzM1LS4yNS42MiAxLjMzNCAxLjkyNiAyLjI1I
518DMuNDM3IDIuMjUgMS41MTIgMCAyLjgxOC0uOTE2IDMuNDM3LTIuMjUuNDE1LjE2My44NjUuMjQ4IDEuMzM2LjI0OCAyLjExIDAgMy44MTgtMS43OSAzLjgxOC00IDAtLjE3NC0uMDEyLS4zNDQtLjAzMy0uNTEzIDEuMTU4LS42ODcgMS45NDMtMS45OSAxLjk0My0zLjQ4NHptLTYuNjE2LTMuMzM0bC00LjMzNCA2LjVjLS4xNDUuMjE3LS4zODIuMzM0LS42MjUuMzM0LS4xNDMgMC0uMjg4LS4wNC0uNDE2LS4xMjZsLS4xMTUtLjA5NC0yLjQxNS0yLjQxNWMtLjI5My0uMjkzLS4yOTMtLjc2OCAwLTEuMDZzLjc2OC0uMjk0IDEuMDYgMGwxLjc3IDEuNzY3IDMuODI1LTUuNzRjLjIzLS4zNDUuNjk2LS40MzYgMS4wNC0uMjA3LjM0Ni4yMy40NC42OTYuMjEgMS4wNHpcIj48L3BhdGg+PC9nPjwvc3ZnPidcbiAgICAgICAgOiBcIlwiLFxuICAgICAgcmVuZGVyZWRUd2VldEhUTUwgPSBgPGRpdiBjbGFzcz1cImNhcmQgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0d2VldC1ib2R5LXdyYXBwZXIgY2FyZC1ib2R5IHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbm8tZ3V0dGVycyBtYi0xXCI+YDtcbiAgICBpZiAoZGF0YS51c2Vyc1swXS5wcm9maWxlX2ltYWdlX3VybCkge1xuICAgICAgcmVuZGVyZWRUd2VldEhUTUwgKz0gYDxkaXYgY2xhc3M9XCJjb2wtMiBjb2wtc20tMSBjb2wtbWQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tLyR7ZGF0YS51c2Vyc1swXS51c2VybmFtZX1cIiBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lXCI+PGltZyB0aXRsZT1cIlByb2ZpbGUgaW1hZ2VcIiBhbHQ9XCJQcm9maWxlIGltYWdlIG9mIEAke2RhdGEudXNlcnNbMF0udXNlcm5hbWV9XCIgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGJvcmRlclwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHNyYz1cIiR7ZGF0YS51c2Vyc1swXS5wcm9maWxlX2ltYWdlX3VybH1cIj48L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZW5kZXJlZFR3ZWV0SFRNTCArPSBgPGRpdiBjbGFzcz1cInR3ZWV0LWF1dGhvciAke1xuICAgICAgZGF0YS51c2Vyc1swXS5wcm9maWxlX2ltYWdlX3VybFxuICAgICAgICA/IFwiY29sLTkgY29sLXNtLTEwIGNvbC1tZC0xMCBwbC0yXCJcbiAgICAgICAgOiBcImNvbC0xMSBjb2wtc20tMTEgY29sLW1kLTExXCJcbiAgICB9IHBiLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtYi0wIG10LTBcIj48YSBjbGFzcz1cInRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZVwiIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tLyR7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEudXNlcnNbMF0udXNlcm5hbWVcbiAgICAgICAgICAgICAgICAgIH1cIj4ke2RhdGEudXNlcnNbMF0ubmFtZX0ke3ZlcmlmaWVkQmFkZ2V9PC9hPjwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBtYi1tZC0yIG10LTBcIj48YSBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC1kZWNvcmF0aW9uLW5vbmVcIiBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS8ke1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnVzZXJzWzBdLnVzZXJuYW1lXG4gICAgICAgICAgICAgICAgICB9XCI+QCR7ZGF0YS51c2Vyc1swXS51c2VybmFtZX08L2E+PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIke3R3ZWV0VXJsfVwiIHRhcmdldD1cIl9ibGFua1wiPjxzdmcgcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9XCJUd2l0dGVyIGxvZ29cIiBzdHlsZT1cIndpZHRoOiAyNHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj48cGF0aCBkPVwiTTUxMiA5Ny4yNDhjLTE5LjA0IDguMzUyLTM5LjMyOCAxMy44ODgtNjAuNDggMTYuNTc2IDIxLjc2LTEyLjk5MiAzOC4zNjgtMzMuNDA4IDQ2LjE3Ni01OC4wMTYtMjAuMjg4IDEyLjA5Ni00Mi42ODggMjAuNjQtNjYuNTYgMjUuNDA4QzQxMS44NzIgNjAuNzA0IDM4NC40MTYgNDggMzU0LjQ2NCA0OGMtNTguMTEyIDAtMTA0Ljg5NiA0Ny4xNjgtMTA0Ljg5NiAxMDQuOTkyIDAgOC4zMi43MDQgMTYuMzIgMi40MzIgMjMuOTM2LTg3LjI2NC00LjI1Ni0xNjQuNDgtNDYuMDgtMjE2LjM1Mi0xMDkuNzkyLTkuMDU2IDE1LjcxMi0xNC4zNjggMzMuNjk2LTE0LjM2OCA1My4wNTYgMCAzNi4zNTIgMTguNzIgNjguNTc2IDQ2LjYyNCA4Ny4yMzItMTYuODY0LS4zMi0zMy40MDgtNS4yMTYtNDcuNDI0LTEyLjkyOHYxLjE1MmMwIDUxLjAwOCAzNi4zODQgOTMuMzc2IDg0LjA5NiAxMDMuMTM2LTguNTQ0IDIuMzM2LTE3Ljg1NiAzLjQ1Ni0yNy41MiAzLjQ1Ni02LjcyIDAtMTMuNTA0LS4zODQtMTkuODcyLTEuNzkyIDEzLjYgNDEuNTY4IDUyLjE5MiA3Mi4xMjggOTguMDggNzMuMTItMzUuNzEyIDI3LjkzNi04MS4wNTYgNDQuNzY4LTEzMC4xNDQgNDQuNzY4LTguNjA4IDAtMTYuODY0LS4zODQtMjUuMTItMS40NEM0Ni40OTYgNDQ2Ljg4IDEwMS42IDQ2NCAxNjEuMDI0IDQ2NGMxOTMuMTUyIDAgMjk4Ljc1Mi0xNjAgMjk4Ljc1Mi0yOTguNjg4IDAtNC42NC0uMTYtOS4xMi0uMzg0LTEzLjU2OCAyMC44MzItMTQuNzg0IDM4LjMzNi0zMy4yNDggNTIuNjA4LTU0LjQ5NnpcIiBmaWxsPVwiIzAzYTlmNFwiLz48L3N2Zz48L2E+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0d2VldC1ib2R5XCI+YDtcbiAgICBpZiAoZGF0YS5lbnRpdGllcykge1xuICAgICAgaWYgKGRhdGEuZW50aXRpZXMudXJscykge1xuICAgICAgICBkYXRhLmVudGl0aWVzLnVybHMuZm9yRWFjaCgodXJsKSA9PiB7XG4gICAgICAgICAgaWYgKHVybC5kaXNwbGF5X3VybC5pbmRleE9mKFwicGljLnR3aXR0ZXIuY29tXCIpID09PSAtMSkge1xuICAgICAgICAgICAgdHdlZXRUZXh0ID0gdHdlZXRUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgIFJlZ0V4cCh1cmwudXJsLCBcImlnXCIpLFxuICAgICAgICAgICAgICBgPGEgaHJlZj1cIiR7dXJsLmV4cGFuZGVkX3VybH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3VybC5kaXNwbGF5X3VybH08L2E+YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHdlZXRUZXh0ID0gdHdlZXRUZXh0LnJlcGxhY2UodXJsLnVybCwgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLmVudGl0aWVzLm1lbnRpb25zKSB7XG4gICAgICAgIGRhdGEuZW50aXRpZXMubWVudGlvbnMuZm9yRWFjaCgobWVudGlvbikgPT4ge1xuICAgICAgICAgI
518HR3ZWV0VGV4dCA9IHR3ZWV0VGV4dC5yZXBsYWNlKFxuICAgICAgICAgICAgUmVnRXhwKGBAJHttZW50aW9uLnVzZXJuYW1lfWAsIFwiaWdcIiksXG4gICAgICAgICAgICBgPGEgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vJHttZW50aW9uLnVzZXJuYW1lfVwiIHRhcmdldD1cIl9ibGFua1wiPkAke21lbnRpb24udXNlcm5hbWV9PC9hPmBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLmVudGl0aWVzLmhhc2h0YWdzKSB7XG4gICAgICAgIGRhdGEuZW50aXRpZXMuaGFzaHRhZ3MuZm9yRWFjaCgoaGFzaHRhZykgPT4ge1xuICAgICAgICAgIHR3ZWV0VGV4dCA9IHR3ZWV0VGV4dC5yZXBsYWNlKFxuICAgICAgICAgICAgUmVnRXhwKGAjJHtoYXNodGFnLnRhZ31gLCBcImlnXCIpLFxuICAgICAgICAgICAgYDxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL2hhc2h0YWcvJHtoYXNodGFnLnRhZ31cIiB0YXJnZXQ9XCJfYmxhbmtcIj4jJHtoYXNodGFnLnRhZ308L2E+YFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5tZWRpYSAmJiBkYXRhLm1lZGlhLmxlbmd0aCkge1xuICAgICAgdHdlZXRUZXh0ICs9IGA8ZGl2IGRhdGEtbWVkaWEtbGVuZ3RoPVwiJHtkYXRhLm1lZGlhLmxlbmd0aH1cIiBjbGFzcz1cInR3ZWV0LW1lZGlhIHJvdyBtdC0zIG5vLWd1dHRlcnNcIj5gO1xuICAgICAgZGF0YS5tZWRpYS5mb3JFYWNoKChtZWRpYSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGRhdGEubWVkaWEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdHdlZXRUZXh0ICs9IGA8ZGl2IGRhdGEtbWVkaWEtdHlwZT1cIiR7bWVkaWEudHlwZX1cIiBjbGFzcz1cInRleHQtY2VudGVyIGNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI+YDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lZGlhLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gMikge1xuICAgICAgICAgICAgdHdlZXRUZXh0ICs9IGA8ZGl2IGRhdGEtbWVkaWEtdHlwZT1cIiR7bWVkaWEudHlwZX1cIiBjbGFzcz1cInRleHQtY2VudGVyIGNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI+YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHdlZXRUZXh0ICs9IGA8ZGl2IGRhdGEtbWVkaWEtdHlwZT1cIiR7bWVkaWEudHlwZX1cIiBjbGFzcz1cInRleHQtY2VudGVyIGNvbC1zbS0xMiBjb2wtbWQtNiBjb2wtbGctNlwiPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVkaWEubGVuZ3RoID4gMSAmJiBkYXRhLm1lZGlhLmxlbmd0aCA8IDUpIHtcbiAgICAgICAgICB0d2VldFRleHQgKz0gYDxkaXYgZGF0YS1tZWRpYS10eXBlPVwiJHttZWRpYS50eXBlfVwiIGNsYXNzPVwidGV4dC1jZW50ZXIgY29sLXNtLTEyIGNvbC1tZC02IGNvbC1sZy02XCI+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0d2VldFRleHQgKz0gYDxkaXYgZGF0YS1tZWRpYS10eXBlPVwiJHttZWRpYS50eXBlfVwiIGNsYXNzPVwidGV4dC1jZW50ZXIgY29sLXNtLTEyIGNvbC1tZC0zIGNvbC1sZy0zXCI+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVkaWEudHlwZSA9PT0gXCJhbmltYXRlZF9naWZcIikge1xuICAgICAgICAgIHR3ZWV0VGV4dCArPSBgPHZpZGVvIGNsYXNzPVwidy0xMDAgbXQtMFwiIGNvbnRyb2xzIGxvb3A+PHNvdXJjZSBzcmM9XCIke21lZGlhLnByZXZpZXdfaW1hZ2VfdXJsXG4gICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgXCJwYnMudHdpbWcuY29tL3R3ZWV0X3ZpZGVvX3RodW1iXCIsXG4gICAgICAgICAgICAgIFwidmlkZW8udHdpbWcuY29tL3R3ZWV0X3ZpZGVvXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiLmpwZ1wiLCBcIi5tcDRcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiLnBuZ1wiLCBcIi5tcDRcIil9XCIgdHlwZT1cInZpZGVvL21wNFwiPjwvdmlkZW8+YDtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYS50eXBlID09PSBcInZpZGVvXCIpIHtcbiAgICAgICAgICBpZiAobWVkaWEudmFyaWFudHMpIHtcbiAgICAgICAgICAgIHZhciB2YXJpYW50ID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gbWVkaWEudmFyaWFudHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbWVkaWEudmFyaWFudHNbaW5kZXhdO1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jb250ZW50X3R5cGUgPT0gXCJ2aWRlby9tcDRcIikge1xuICAgICAgICAgICAgICAgIHZhcmlhbnQgPWVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHR3ZWV0VGV4dCArPSBgPHZpZGVvIGNsYXNzPVwidy0xMDAgbXQtMFwiIHBvc3Rlcj0ke21lZGlhLnByZXZpZXdfaW1hZ2VfdXJsfSBjb250cm9scyBsb29wPjxzb3VyY2Ugc3JjPVwiJHtcbiAgICAgICAgICAgICAgdmFyaWFudC51cmxcbiAgICAgICAgICAgIH1cIiB0eXBlPVwiJHtcbiAgICAgICAgICAgICAgdmFyaWFudC5jb250ZW50X3R5cGVcbiAgICAgICAgICAgIH1cIj48L3ZpZGVvPmA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR3ZWV0VGV4dCArPSBgPGEgY2xhc3M9XCJ0d2VldC12aWRlby1wbGFjZWhvbGRlclwiIGhyZWY9XCIke3R3ZWV0VXJsfVwiIHRhcmdldD1cIl9ibGFua1wiPjxpbWcgYWx0PVwiJHttZWRpYS5hbHRfdGV4dCB8fCAnJ31cIiBsb2FkaW5nPVwibGF6eVwiIHdpZHRoPVwiJHttZWRpYS53aWR0aH1cIiBoZWlnaHQ9XCIke21lZGlhLmhlaWdodH1cIiBjbGFzcz1cInctMTAwIHJvdW5kZWQgYm9yZGVyXCIgc3JjPVwiJHttZWRpYS5wcmV2aWV3X2ltYWdlX3VybH1cIj48L2E+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWVkaWEudHlwZSA9PT0gXCJwaG90b1wiKSB7XG4gICAgICAgICAgdHdlZXRUZXh0ICs9IGA8YSBocmVmPVwiJHt0d2VldFVybH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aW1nIGFsdD1cIiR7bWVkaWEuYWx0X3RleHQgfHwgJyd9XCIgbG9hZGluZz1cImxhenlcIiB3aWR0aD1cIiR7bWVkaWEud2lkdGh9XCIgaGVpZ2h0PVwiJHttZWRpYS5oZWlnaHR9XCIgY2x
518hc3M9XCJ3LTEwMCByb3VuZGVkIGJvcmRlclwiIHNyYz1cIiR7bWVkaWEudXJsfVwiPjwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHR3ZWV0VGV4dCArPSBcIjwvZGl2PlwiO1xuICAgICAgfSk7XG4gIFxuICAgICAgdHdlZXRUZXh0ICs9IFwiPC9kaXY+XCI7XG4gICAgfVxuICBcbiAgICBpZiAoZGF0YS5wb2xscyAmJiBkYXRhLnBvbGxzLmxlbmd0aCkge1xuICAgICAgdHdlZXRUZXh0ICs9ICc8ZGl2IGNsYXNzPVwibXQtMFwiPic7XG4gIFxuICAgICAgZGF0YS5wb2xscy5mb3JFYWNoKChwb2xsKSA9PiB7XG4gICAgICAgIGlmIChwb2xsLm9wdGlvbnMgJiYgcG9sbC5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZvdGVDb3VudHMgPSBwb2xsLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24udm90ZXM7XG4gICAgICAgICAgfSk7XG4gIFxuICAgICAgICAgIGNvbnN0IHZvdGVDb3VudE1heCA9IE1hdGgubWF4KC4uLnZvdGVDb3VudHMpO1xuICAgICAgICAgIGNvbnN0IHZvdGVzVG90YWwgPSB2b3RlQ291bnRzLnJlZHVjZSgodG90YWwsIG51bSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgbnVtO1xuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICB0d2VldFRleHQgKz0gYDxkaXYgaWQ9XCJwb2xsLSR7cG9sbC5pZH1cIiBjbGFzcz1cInJvd1wiIHJvbGU9XCJsaXN0XCI+YDtcbiAgXG4gICAgICAgICAgcG9sbC5vcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZvdGVzUG9ydGlvbiA9IChvcHRpb24udm90ZXMgLyB2b3Rlc1RvdGFsKSAqIDEwMDtcbiAgICAgICAgICAgIHR3ZWV0VGV4dCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0d2VldC1wb2xsLXJlc3VsdHMgY29sLTlcIiBzdHlsZT1cImhlaWdodDo2MHB4O1wiIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzIHBvc2l0aW9uLXJlbGF0aXZlIG10LW40ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi52b3RlcyA9PT0gdm90ZUNvdW50TWF4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIiBib3JkZXIgYm9yZGVyLXByaW1hcnkgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBzdHlsZT1cImhlaWdodDozMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogJHt2b3Rlc1BvcnRpb259JVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBvbGwtJHtwb2xsLmlkfS1vcHRpb24tJHtcbiAgICAgICAgICAgICAgaW5kZXggKyAxXG4gICAgICAgICAgICB9XCIgY2xhc3M9XCJwbC0yIGQtZmxleCBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtOyBsaW5lLWhlaWdodDogMzBweDtcIj4ke1xuICAgICAgICAgICAgICBvcHRpb24ubGFiZWxcbiAgICAgICAgICAgIH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBtdC1uNCB0ZXh0LXJpZ2h0XCIgc3R5bGU9XCJoZWlnaHQ6NjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xMDBcIj4ke01hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24udm90ZXMgLyB2b3Rlc1RvdGFsKSAqIDEwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICB0d2VldFRleHQgKz0gYDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMyBkLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZFwiPiR7dm90ZXNUb3RhbC50b0xvY2FsZVN0cmluZygpfSB2b3RlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICBcbiAgICAgIHR3ZWV0VGV4dCArPSBcIjwvZGl2PlwiO1xuICAgIH1cbiAgXG4gICAgY29uc3QgdHdlZXREYXRlID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KS50b0xvY2FsZURhdGVTdHJpbmcoXG4gICAgICBuYXZpZ2F0b3IubGFuZ3VhZ2UsXG4gICAgICB7IG1vbnRoOiBcImxvbmdcIiwgeWVhcjogXCJudW1lcmljXCIsIGRheTogXCJudW1lcmljXCIgfVxuICAgICk7XG4gIFxuICAgIHJlbmRlcmVkVHdlZXRIVE1MICs9XG4gICAgICB0d2VldFRleHQgK1xuICAgICAgYDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcGItNFwiPmA7XG4gIFxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBpZiAoc2hvd01ldHJpY3MgJiYgZGF0YS5wdWJsaWNfbWV0cmljcykge1xuICAgICAgICByZW5kZXJlZFR3ZWV0SFRNTCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0d2VldC1pY29uXCIgcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9XCJSZXR3ZWV0c1wiPvCflIE8L3NwYW4+PGEgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgaHJlZj1cIiR7dHdlZXRVcmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtkYXRhLnB1YmxpY19tZXRyaWNzLnJldHdlZXRfY291bnQudG9Mb2NhbGVTdHJpbmcoKX08L2E+IHxcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3ZWV0LWljb25cInJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwiTGlrZXNcIj7inaTvuI88L3NwYW4+IDxhIGNsYXNzPVwidGV4dC1tdXRlZFwiIGhyZWY9XCIke3R3ZWV0VXJsfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7ZGF0YS5wdWJsaWNfbWV0cmljcy5saWtlX2NvdW50LnRvTG9jYWxlU3RyaW5nKCl9PC9hPiB8IGA7XG4gICAgICB9XG4gIFxuICAgICAgcmVuZGVyZWRUd2VldEhUTUwgKz0gYDxhIGNsYXNzPVwidGV4dC1tdXRlZFwiIGhyZWY9XCIke3R3ZWV0VXJsfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dHdlZXREYXRlfTwvYT5gO1xuICAgIH1cbiAgXG4gICAgcmVuZGVyZWRUd2VldEhUTUwgKz0gXCI8L2Rpdj48L2Rpdj5cIjtcbiAgXG4gICAgbGV0IHJlbmRlcmVkVHdlZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHJlbmRlcmVkVHdlZXQuY2xhc3NOYW1lID0gYHR3aXR0ZXItdHdlZXQgdHdpdHRlci10d2VldC1yZW5kZXJlZCB3LTEwMGA7XG4gICAgcmVuZGVyZWRUd2VldC5pbm5lckhUTUwgPSByZW5kZXJlZFR3ZWV0SFRNTDtcbiAgXG4gICAgbGV0IGxhc3RVcmwgPSBcIlwiO
5181xuICBcbiAgICBpZiAoZGF0YS5lbnRpdGllcyAmJiBkYXRhLmVudGl0aWVzLnVybHMgJiYgZGF0YS5lbnRpdGllcy51cmxzLmxlbmd0aCkge1xuICAgICAgbGFzdFVybCA9IGRhdGEuZW50aXRpZXMudXJsc1tkYXRhLmVudGl0aWVzLnVybHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICBcbiAgICBpZiAoXG4gICAgICAoZGF0YS5tZWRpYSAmJiBkYXRhLm1lZGlhLmxlbmd0aCkgfHxcbiAgICAgIChkYXRhLmV4dGVuZGVkX2VudGl0aWVzICYmXG4gICAgICAgIGRhdGEuZXh0ZW5kZWRfZW50aXRpZXMubWVkaWEgJiZcbiAgICAgICAgZGF0YS5leHRlbmRlZF9lbnRpdGllcy5tZWRpYS5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBsYXN0VXJsID0gXCJcIjtcbiAgICB9XG4gIFxuICAgIGlmIChsYXN0VXJsKSB7XG4gICAgICByZW5kZXJlZFR3ZWV0LmRhdGFzZXQudXJsQXR0YWNobWVudCA9IGxhc3RVcmwuZXhwYW5kZWRfdXJsO1xuICAgICAgcmVuZGVyZWRUd2VldC5kYXRhc2V0LnVybEF0dGFjaG1lbnRQcm9jZXNzZWQgPSBcImZhbHNlXCI7XG4gICAgfVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHR3ZWV0Q29udGFpbmVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIFwiLnR3ZWV0LWJvZHkgYTpsYXN0LW9mLXR5cGVcIlxuICAgICAgKTtcbiAgICAgIGlmICh0d2VldENvbnRhaW5lcikge1xuICAgICAgICB0d2VldENvbnRhaW5lci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChyZW5kZXJlZFR3ZWV0LCB0d2VldENvbnRhaW5lcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR3ZWV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtdHdlZXQtaWQ9XCIke2RhdGEuaWR9XCJdYCk7XG4gICAgICBpZiAodHdlZXQpIHtcbiAgICAgICAgdHdlZXQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocmVuZGVyZWRUd2VldCwgdHdlZXQpO1xuICAgICAgfSBcbiAgICB9XG4gIH07XG4gIFxuICBleHBvcnQgeyByZW5kZXJUd2VldCB9O1xuICAiLCJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcmVhZHkgfSBmcm9tIFwiLi9yZWFkeS5qc1wiO1xuaW1wb3J0IHsgcHJvY2Vzc1R3ZWV0cyB9IGZyb20gXCIuL3Byb2Nlc3NUd2VldHMuanNcIjtcblxuY29uc3QgYWx0VHdpdHRlckVtYmVkc0FQSSA9IFwiQ09ORklHX0FKQVhfVVJMXCI7XG5cbnJlYWR5KCgpID0+IHtcbiAgcHJvY2Vzc1R3ZWV0cyhhbHRUd2l0dGVyRW1iZWRzQVBJLCBDT05GSUdfVVNFX0FQSSwgQ09ORklHX1NIT1dfTUVUUklDUyk7XG59KTtcblxuXG53aW5kb3cucHJvY2Vzc1R3ZWV0cyA9IHByb2Nlc3NUd2VldHM7Il19
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.