import FrontCalculatorParserToken from "./front.calculator.parser.token"; import FrontCalculatorSymbolNumber from "../symbol/front.calculator.symbol.number"; import FrontCalculatorSymbolOpeningBracket from "../symbol/brackets/front.calculator.symbol.opening.bracket"; import FrontCalculatorSymbolClosingBracket from "../symbol/brackets/front.calculator.symbol.closing.bracket"; import FrontCalculatorSymbolFunctionAbstract from "../symbol/abstract/front.calculator.symbol.function.abstract"; import FrontCalculatorSymbolOperatorAbstract from "../symbol/abstract/front.calculator.symbol.operator.abstract"; import FrontCalculatorSymbolSeparator from "../symbol/front.calculator.symbol.separator"; import FrontCalculatorParserNodeSymbol from "./node/front.calculator.parser.node.symbol"; import FrontCalculatorParserNodeContainer from "./node/front.calculator.parser.node.container"; import FrontCalculatorParserNodeFunction from "./node/front.calculator.parser.node.function"; /** * The parsers has one important method: parse() * It takes an array of tokens as input and * returns an array of nodes as output. * These nodes are the syntax tree of the term. * */ export default class FrontCalculatorParser { /** * * @param {FrontCalculatorSymbolLoader} symbolLoader */ constructor(symbolLoader) { /** * * @type {FrontCalculatorSymbolLoader} */ this.symbolLoader = symbolLoader; } /** * Parses an array with tokens. Returns an array of nodes. * These nodes define a syntax tree. * * @param {FrontCalculatorParserToken[]} tokens * * @returns FrontCalculatorParserNodeContainer */ parse(tokens) { var symbolNodes = this.detectSymbols(tokens); var nodes = this.createTreeByBrackets(symbolNodes); nodes = this.transformTreeByFunctions(nodes); this.checkGrammar(nodes); // Wrap the nodes in an array node. return new FrontCalculatorParserNodeContainer(nodes); } /** * Creates a flat array of symbol nodes from tokens. * * @param {FrontCalculatorParserToken[]} tokens * @returns {FrontCalculatorParserNodeSymbol[]} */ detectSymbols(tokens) { var symbolNodes = []; var symbol = null; var identifier = null; var expectingOpeningBracket = false; // True if we expect an opening bracket (after a function name) var openBracketCounter = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; var type = token.type; if (FrontCalculatorParserToken.TYPE_WORD === type) { identifier = token.value; symbol = this.symbolLoader.find(identifier); if (null === symbol) { throw ('Error: Detected unknown or invalid string identifier: ' + identifier + '.'); } } else if (type === FrontCalculatorParserToken.TYPE_NUMBER) { // Notice: Numbers do not have an identifier var symbolNumbers = this.symbolLoader.findSubTypes(FrontCalculatorSymbolNumber); if (symbolNumbers.length < 1 || !(symbolNumbers instanceof Array)) { throw ('Error: Unavailable number symbol processor.'); } symbol = symbolNumbers[0]; } else {// Type Token::TYPE_CHARACTER: identifier = token.value; symbol = this.symbolLoader.find(identifier); if (null === symbol) { throw ('Error: Detected unknown or invalid string identifier: ' + identifier + '.'); } if (symbol instanceof FrontCalculatorSymbolOpeningBracket) { openBracketCounter++; } if (symbol instanceof FrontCalculatorSymbolClosingBracket) { openBracketCounter--; // Make sure there are not too many closing brackets if (openBracketCounter < 0) { throw ('Error: Found closing bracket that does not have an opening bracket.'); } } } if (expectingOpeningBracket) { if (!(symbol instanceof FrontCalculatorSymbolOpeningBracket)) { throw ('Error: Expected opening bracket (after a function) but got something else.'); } expectingOpeningBracket = false; } else { if (symbol instanceof FrontCalculatorSymbolFunctionAbstract) { expectingOpeningBracket = true; } } var symbolNode = new FrontCalculatorParserNodeSymbol(token, symbol); symbolNodes.push(symbolNode); } // Make sure the term does not end with the name of a function but without an opening bracket if (expectingOpeningBracket) { throw ('Error: Expected opening bracket (after a function) but reached the end of the term'); } // Make sure there are not too many opening brackets if (openBracketCounter > 0) { throw ('Error: There is at least one opening bracket that does not have a closing bracket'); } return symbolNodes; } /** * Expects a flat array of symbol nodes and (if possible) transforms * it to a tree of nodes. Cares for brackets. * Attention: Expects valid brackets! * Check the brackets before you call this method. * * @param {FrontCalculatorParserNodeSymbol[]} symbolNodes * @returns {FrontCalculatorParserNodeAbstract[]} */ createTreeByBrackets(symbolNodes) { var tree = []; var nodesInBracket = []; // AbstractSymbol nodes inside level-0-brackets var openBracketCounter = 0; for (var i = 0; i < symbolNodes.length; i++) { var symbolNode = symbolNodes[i]; if (!(symbolNode instanceof FrontCalculatorParserNodeSymbol)) { throw ('Error: Expected symbol node, but got "' + symbolNode.constructor.name + '"'); } if (symbolNode.symbol instanceof FrontCalculatorSymbolOpeningBracket) { openBracketCounter++; if (openBracketCounter > 1) { nodesInBracket.push(symbolNode); } } else if (symbolNode.symbol instanceof FrontCalculatorSymbolClosingBracket) { openBracketCounter--; // Found a closing bracket on level 0 if (0 === openBracketCounter) { var subTree = this.createTreeByBrackets(nodesInBracket); // Subtree can be empty for example if the term looks like this: "()" or "functioname()" // But this is okay, we need to allow this so we can call functions without a parameter tree.push(new FrontCalculatorParserNodeContainer(subTree)); nodesInBracket = []; } else { nodesInBracket.push(symbolNode); } } else { if (0 === openBracketCounter) { tree.push(symbolNode); } else { nodesInBracket.push(symbolNode); } } } return tree; } /** * Replaces [a SymbolNode that has a symbol of type AbstractFunction, * followed by a node of type ContainerNode] by a FunctionNode. * Expects the $nodes not including any function nodes (yet). * * @param {FrontCalculatorParserNodeAbstract[]} nodes * * @returns {FrontCalculatorParserNodeAbstract[]} */ transformTreeByFunctions(nodes) { var transformedNodes = []; var functionSymbolNode = null; for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (node instanceof FrontCalculatorParserNodeContainer) { var transformedChildNodes = this.transformTreeByFunctions(node.childNodes); if (null !== functionSymbolNode) { var functionNode = new FrontCalculatorParserNodeFunction(transformedChildNodes, functionSymbolNode); transformedNodes.push(functionNode); functionSymbolNode = null; } else { // not a function node.childNodes = transformedChildNodes; transformedNodes.push(node); } } else if (node instanceof FrontCalculatorParserNodeSymbol) { var symbol = node.symbol; if (symbol instanceof FrontCalculatorSymbolFunctionAbstract) { functionSymbolNode = node; } else { transformedNodes.push(node); } } else { throw ('Error: Expected array node or symbol node, got "' + node.constructor.name + '"'); } } return transformedNodes; } /** * Ensures the tree follows the grammar rules for terms * * @param {FrontCalculatorParserNodeAbstract[]} nodes */ checkGrammar(nodes) { // TODO Make sure that separators are only in the child nodes of the array node of a function node // (If this happens the calculator will throw an exception) for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (node instanceof FrontCalculatorParserNodeSymbol) { var symbol = node.symbol; if (symbol instanceof FrontCalculatorSymbolOperatorAbstract) { var posOfRightOperand = i + 1; // Make sure the operator is positioned left of a (potential) operand (=prefix notation). // Example term: "-1" if (posOfRightOperand >= nodes.length) { throw ('Error: Found operator that does not stand before an operand.'); } var posOfLeftOperand = i - 1; var leftOperand = null; // Operator is unary if positioned at the beginning of a term if (posOfLeftOperand >= 0) { leftOperand = nodes[posOfLeftOperand]; if (leftOperand instanceof FrontCalculatorParserNodeSymbol) { if (leftOperand.symbol instanceof FrontCalculatorSymbolOperatorAbstract // example 1`+-`5 : + = operator, - = unary || leftOperand.symbol instanceof FrontCalculatorSymbolSeparator // example func(1`,-`5) ,= separator, - = unary ) { // Operator is unary if positioned right to another operator leftOperand = null; } } } // If null, the operator is unary if (null === leftOperand) { if (!symbol.operatesUnary) { throw ('Error: Found operator in unary notation that is not unary.'); } // Remember that this node represents a unary operator node.setIsUnaryOperator(true); } else { if (!symbol.operatesBinary) { console.log(symbol); throw ('Error: Found operator in binary notation that is not binary.'); } } } } else { this.checkGrammar(node.childNodes); } } } }.tx-content-switcher-toggle-switch-label{position:relative;display:inline-block;width:60px;height:34px}.tx-content-switcher-toggle-switch-label input{opacity:0;width:0;height:0}.tx-content-switcher-toggle-switch-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s;display:block;border-style:solid}.tx-content-switcher-toggle-switch-slider:before{position:absolute;content:"";height:26px;width:26px;left:0;top:50%;transform:translateY(-50%);background-color:#fff;-webkit-transition:.4s;transition:.4s}input:checked+.tx-content-switcher-toggle-switch-slider{background-color:#2196f3}input:focus+.tx-content-switcher-toggle-switch-slider{box-shadow:0 0 1px #2196f3}input:checked+.tx-content-switcher-toggle-switch-slider:before{-webkit-transform:translate(34px,-50%);-ms-transform:translate(34px,-50%);transform:translate(34px,-50%)}.tx-content-switcher-toggle-inner{display:flex;align-items:center;flex-direction:row;padding:30px 0}.tx-content-switcher-toggle.tx_switecher_left{justify-content:flex-start;display:flex}.tx-content-switcher-toggle.tx_switecher_center{justify-content:center;display:flex}.tx-content-switcher-toggle.tx_switecher_right{justify-content:flex-end;display:flex}.tx-content-switcher-toggle.tx_switecher_justify{display:block}.tx-content-switcher-toggle.tx_switecher_justify .tx-content-switcher-toggle-inner{justify-content:center}.tx-content-switcher-toggle-label-1,.tx-content-switcher-toggle-label-2{cursor:pointer}{"id":1908,"date":"2025-03-06T18:13:49","date_gmt":"2025-03-06T18:13:49","guid":{"rendered":"https:\/\/makemyasset.in\/?p=1908"},"modified":"2025-03-06T18:13:49","modified_gmt":"2025-03-06T18:13:49","slug":"site-de-rencontre-couple-libre-rencontrez-des-compagnons-ouverts","status":"publish","type":"post","link":"https:\/\/makemyasset.in\/?p=1908","title":{"rendered":"Site de Rencontre Couple Libre : Rencontrez des Compagnons Ouverts"},"content":{"rendered":"

\n

Site de Rencontre Couple Libre : Rencontrez des Compagnons Ouverts <\/h1>\n<\/h1>\n

\n Cherchez-vous un site de rencontre couple libre pour \u00e9largir  vos horizons amoureux  ? Notre plateforme est d\u00e9di\u00e9e aux couples  \u00e0 la recherche d'exp\u00e9riences  in\u00e9dites. Que vous cherchiez \u00e0  rencontrer d'autres couples ouverts  ou des individus  curieux, notre site de rencontre couple libre vous offre une multitude  d'options.  Explorez un espace s\u00fbr et  confidentiel pour  d\u00e9couvrir vos d\u00e9sirs. \n\nAvec une  base d'utilisateurs en pleine croissance , trouvez facilement  des partenaires qui partagent  votre vision du couple libre. Notre site de rencontre pour couple libre  encourage des \u00e9changes  sinc\u00e8res et respectueux. Gr\u00e2ce \u00e0 des filtres   sophistiqu\u00e9s, vous pouvez  personnaliser vos recherches selon vos pr\u00e9f\u00e9rences. \n\nVous avez  le d\u00e9sir de  exp\u00e9rimenter une relation sans  restrictions ? Notre plateforme est  faite pour vous aider \u00e0  chercher vos envies en toute confiance. Rejoignez d\u00e8s maintenant notre site de rencontre couple libre et red\u00e9finissez  vos relations selon vos besoins.\n<\/pre>\n<\/p>\n

\n

Site de rencontre couple libre : Parcourez de nouvelles aventures possibilit\u00e9s<\/h1>\n<\/h2>\n

\nD\u00e9couvrez votre nouvelle destination pour \u00e9tendre vos horizons de couple avec notre site de rencontre couple libre. Cr\u00e9\u00e9 sp\u00e9cifiquement pour les couples en qu\u00eate de nouvelles aventures, cet espace prot\u00e9g\u00e9 et confidentiel vous met en relation \u00e0 une communaut\u00e9 ouverte d'esprit. Ici, d\u00e9couvrez des partenaires qui partagent votre perception des relations sans contraintes conventionnelles. Notre site de rencontre couple libre vous offre la possibilit\u00e9 de cr\u00e9er un profil qui exprime vos go\u00fbts personnelles. Explorez les profils et engagez des discussions captivantes avec des c\u00e9libataires et des couples similaires. Vous cherchez un espace pour exprimer vos envies et consolider votre complicit\u00e9 ? Ne cherchez pas plus loin, notre site est l\u00e0 pour vous. Amicale et facile \u00e0 utiliser, elle favorise les interactions authentiques. Plongez dans un monde o\u00f9 libert\u00e9 rime avec int\u00e9r\u00eat et o\u00f9 les r\u00e8gles sont celles que vous d\u00e9cidez. Int\u00e9grez notre collectivit\u00e9 d\u00e8s aujourd'hui et changez votre mani\u00e8re de concevoir l'amour.\n<\/pre>\n<\/p>\n

\n

Site de Rencontre Couple Libre : Explorez la Libert\u00e9 Amoureuse<\/h1>\n<\/h2>\n

\nD\u00e9couvrez  un univers o\u00f9 les couples ouverts  peuvent  \u00e9tendre leurs horizons. Un **site de rencontre couple libre** offre une plateforme parfaite  pour les relations non conventionnelles . Ces sites  offrent la possibilit\u00e9 aux couples d'explorer de nouvelles  relations sentimentales \u00e0 leur rythme . Trouvez  des partenaires  ayant des vues similaires sans  pr\u00e9judice. Cette  exp\u00e9rience relationnelle singuli\u00e8re est con\u00e7ue pour ceux qui souhaitent   transformer leur  vie sentimentale. Vous pouvez facilement  vous inscrire et  d\u00e9buter votre exploration. La discr\u00e9tion  et la confidentialit\u00e9  sont des  aspects essentiels sur un **site de rencontre couple libre**. Rencontrez  d'autres  individus d'esprit ind\u00e9pendant et vivez  des  moments inoubliables. Laissez  votre  union d' progresser et  explorez de nouvelles perspectives  gr\u00e2ce \u00e0 ces  sites.  Testez et  d\u00e9couvrez comment cela peut  renforcer votre complicit\u00e9 de couple .  \u00c9changez des moments uniques  et  originaux avec des personnes  qui  respectent vos d\u00e9cisions.  B\u00e9n\u00e9ficiez de  \u00e9changes sinc\u00e8res tout en respectant  les limites  de chacun.\n<\/pre>\n<\/p>\n

‘<\/p>\n

Site de Rencontre Couple Libre : Trouvez L’\u00e9quilibre de votre \u00c9quilibre<\/h1>\n

‘<\/h2>\n

Plongez dans un univers o\u00f9 la libert\u00e9 d’esprit et la complicit\u00e9 coexistent en harmonie gr\u00e2ce \u00e0 notre site de rencontre couple libre. Ouvrez la voie \u00e0 de nouvelles exp\u00e9riences et explorez des partenaires ayant votre vision de la relation ouverte . Avec une plateforme facile \u00e0 utiliser, trouvez facilement des personnes cherchant une interaction unique et authentique . Que vous soyez un couple en qu\u00eate d’aventures ensemble ou individuellement, notre plateforme est con\u00e7ue pour r\u00e9pondre \u00e0 vos besoins. Le site de rencontre couple libre vous permet de contr\u00f4ler votre recherche en filtrant par int\u00e9r\u00eats et crit\u00e8res sp\u00e9cifiques. Assurance d’anonymat et protection renforc\u00e9e pour explorer en toute tranquillit\u00e9. Rejoignez notre communaut\u00e9 d\u00e8s maintenant et transformez votre relation en une exp\u00e9rience enrichissante .<\/p>\n<\/p>\n

\n

Site de rencontre couple libre : aventurez-vous dans de fra\u00eeches dimensions <\/h1>\n<\/h2>\n

D\u00e9couvrez un site de rencontre couple libre con\u00e7u pour les personnes qui souhaitent s’engager dans des relations ouvertes. Ici, la libert\u00e9 et la sinc\u00e9rit\u00e9 sont au centre des rencontres. Rejoignez une communaut\u00e9 d\u00e9di\u00e9e aux couples \u00e0 la recherche d’\u00e9changes authentiques hors des sentiers battus . Notre plateforme vous propose l’opportunit\u00e9 de rencontrer d’autres couples ayant les m\u00eames int\u00e9r\u00eats . Enregistrez-vous sur ce site de rencontre couple libre pour acc\u00e9der \u00e0 un espace s\u00e9curis\u00e9 et courtois pour vos connexions .<\/p>\n

Profitez d’outils sp\u00e9cialis\u00e9s pour \u00e9changer et d\u00e9velopper des relations vari\u00e9es. Explorez les profils de couples ouverts \u00e0 de nouvelles aventures. L’interface intuitive garantit une navigation fluide pour des rencontres fructueuses . Facilitez la recherche de partenaires bien assortis avec des crit\u00e8res ajust\u00e9s \u00e0 vos besoins. Plongez dans un monde sans contraintes et explorez les possibilit\u00e9s qu’offre un site pour couples ouverts.<\/p>\n<\/p>\n

\n

Site de Rencontre Couple Libre : Explorez Votre Libert\u00e9 Amoureuse <\/h1>\n<\/h2>\n

\nD\u00e9couvrez notre site de rencontre couple libre con\u00e7u pour les personnes en qu\u00eate de relations sans limitations. Nos utilisateurs souhaitent d\u00e9couvrir et \u00e0 \u00e9largir leurs horizons amoureux tout en maintenant leur autonomie. Que vous soyez en couple souhaitant s'ouvrir \u00e0 d'autres exp\u00e9riences, ou un c\u00e9libataire dispos\u00e9 \u00e0 faire la connaissance de des couples ouverts, notre site est l'espace parfait. Le site de rencontre couple libre offre des fonctionnalit\u00e9s sophistiqu\u00e9es pour vous connecter avec des partenaires partageant les m\u00eames principes. Profitez d\u2019un endroit s\u00e9curis\u00e9 et discret pour \u00e9changer. Trouvez des utilisateurs v\u00e9rifi\u00e9s pr\u00eats \u00e0 vivre des aventures sans engagement. Rejoignez-nous pour d\u00e9couvrir un r\u00e9seau de liens authentiques et lib\u00e9r\u00e9es. En peu de temps, communiquez avec ceux qui poss\u00e8dent votre vision des liens. Soyez charm\u00e9 par une nouvelle fa\u00e7on de vivre le sentiment amoureux !<\/pre>\n<\/p>\n

\n

Explorez le Site de Rencontre Couple Libre : D\u00e9busquez Votre Match Parfait <\/h1>\n<\/h2>\n

Visitez le site de rencontre couple libre id\u00e9al pour am\u00e9liorer votre relation. Que vous soyez un couple libre en qu\u00eate de nouvelles exp\u00e9riences ou que vous cherchiez simplement \u00e0 explorer des horizons nouveaux , notre plateforme vous offre un environnement s\u00fbr et confidentiel. Rencontrez des partenaires partageant les m\u00eames besoins et int\u00e9r\u00eats gr\u00e2ce \u00e0 notre communaut\u00e9 dynamique. Avec notre site de rencontre couple libre, vous avez la chance de vous connecter avec d’autres esprits ouverts. Nos outils avanc\u00e9s vous aident \u00e0 identifier le match parfait bas\u00e9 sur vos pr\u00e9f\u00e9rences personnelles. Ne laissez pas passer l’opportunit\u00e9 de am\u00e9liorer votre vie sentimentale. Inscrivez-vous d\u00e8s aujourd’hui sur notre plateforme d\u00e9di\u00e9e aux couples libres et commencez \u00e0 d\u00e9couvrir un monde de opportunit\u00e9s. Avec des milliers de membres actifs , vous \u00eates certain de rencontrer des personnes compatibles . Joignez-vous \u00e0 nous maintenant et exp\u00e9rimentez votre relation de mani\u00e8re authentique et sans limites.<\/p>\n

Faites une visite de cougar rencontre<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"

Site de Rencontre Couple Libre : Rencontrez des Compagnons Ouverts Cherchez-vous un site de rencontre couple libre pour \u00e9largir vos horizons amoureux ? Notre plateforme est d\u00e9di\u00e9e aux couples \u00e0 la recherche d’exp\u00e9riences in\u00e9dites. Que vous cherchiez \u00e0 rencontrer d’autres couples ouverts ou des individus curieux, notre site de rencontre couple libre vous offre une […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[305],"tags":[],"class_list":["post-1908","post","type-post","status-publish","format-standard","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/posts\/1908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/makemyasset.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1908"}],"version-history":[{"count":1,"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/posts\/1908\/revisions"}],"predecessor-version":[{"id":1909,"href":"https:\/\/makemyasset.in\/index.php?rest_route=\/wp\/v2\/posts\/1908\/revisions\/1909"}],"wp:attachment":[{"href":"https:\/\/makemyasset.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/makemyasset.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/makemyasset.in\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}