{"id":144161,"date":"2026-07-27T14:21:52","date_gmt":"2026-07-27T13:21:52","guid":{"rendered":"https:\/\/bonza-retheme.blz.au\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/"},"modified":"2026-07-31T09:52:54","modified_gmt":"2026-07-31T08:52:54","slug":"suivi-du-programme-reequilibrage-intestinal-en-30-jours","status":"publish","type":"page","link":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/","title":{"rendered":"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-30-day-gut-reset-tracker\">Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb<\/h2>\n\n<p class=\"wp-block-paragraph\">Le changement que vous avez apport\u00e9 est-il r\u00e9ellement efficace ? Trente jours, c&rsquo;est suffisamment long pour que l&rsquo;intestin d&rsquo;un chien r\u00e9agisse, mais bien trop long pour que vous puissiez vous en souvenir avec pr\u00e9cision. Ce <strong>suivi de r\u00e9\u00e9quilibrage intestinal sur 30 jours<\/strong> transforme le protocole de r\u00e9\u00e9quilibrage pr\u00e9sent\u00e9 dans <em>le \u00ab Guide complet de la sant\u00e9 intestinale du chien \u00bb<\/em> en un outil concret : notez chaque jour quatre indicateurs simples \u2014 selles, \u00e9nergie, app\u00e9tit et pr\u00e9sence \u00e9ventuelle d\u2019une pouss\u00e9e \u2014 et le suivi vous indiquera si le nombre de bons jours de votre chien augmente. Cela ne vous prendra qu\u2019une vingtaine de secondes par jour, et vous pourrez observer une premi\u00e8re tendance claire d\u00e8s le septi\u00e8me jour. Il s\u2019agit d\u2019un outil de suivi p\u00e9dagogique destin\u00e9 \u00e0 vous aider \u00e0 identifier les tendances et \u00e0 d\u00e9cider de la marche \u00e0 suivre, et non d\u2019un diagnostic.    <\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<div class=\"bonza-grt\" id=\"bonzaGrt\" data-build=\"20260728-414d5b\">\n<style>\n.bonza-grt{\n  --cream:#f8ede3;\n  --paper:#ffffff;\n  --green:#2fa066;\n  --green-deep:#227a4d;\n  --tint:#eaf5ee;\n  --purple:#6e5d84;\n  --deep-purple:#574869;\n  --amber:#ffa825;\n  --amber-deep:#b06a00;\n  --caution-bg:#fff5e6;\n  --divider:#d4bfb2;\n  --field:#c3ad9b;\n  --ink:#382f2b;\n  --muted:#7a6d64;\n  --alert:#c25239;\n  \/* Bonza red, the primary CTA. Distinct from --alert, which stays reserved for\n     the vet gate and form errors. --cta-deep is the hover shade. *\/\n  --cta:#ff6256;\n  --cta-deep:#e6584d;\n  --alert-bg:#fbeeea;\n  --alert-bd:#eecabf;\n  --track:#e6d8ca;\n  background:var(--cream);\n  border:1px solid var(--divider);\n  border-radius:14px;\n  padding:28px 22px;\n  color:var(--ink);\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  font-size:15.5px;\n  line-height:1.5;\n  max-width:720px;\n  margin:0 auto;\n  box-sizing:border-box;\n}\n.bonza-grt *,.bonza-grt *:before,.bonza-grt *:after{box-sizing:border-box}\n.bonza-grt p{font-family:inherit}\n\n.bonza-grt h3.grt-eyebrow{\n  margin:0 0 10px !important;\n  padding:0 !important;\n  font-family:inherit !important;\n  font-size:19px !important;\n  font-weight:800 !important;\n  letter-spacing:.02em !important;\n  text-transform:none !important;\n  color:var(--purple) !important;\n  line-height:1.25 !important;\n}\n.bonza-grt .grt-lede{font-size:16px;font-weight:400;color:var(--muted);margin:0 0 20px}\n\n.bonza-grt button::before,\n.bonza-grt button:not(.grt-tab)::after{content:none !important;display:none !important}\n\/* Tabs swap between 500 and 800 on hover and selection. A hidden bold copy of the\n   label reserves the wider bold width, so the row does not jog sideways as the\n   weight changes. data-label on each tab feeds it. *\/\n.bonza-grt .grt-tab::after{\n  content:attr(data-label) !important;\n  display:block !important;\n  height:0 !important;\n  overflow:hidden !important;\n  visibility:hidden !important;\n  font-weight:800 !important;\n  white-space:nowrap !important;\n  pointer-events:none !important;\n}\n\n\/* Theme armour. The site theme styles bare <button> elements with its own display\n   font, uppercase transform, larger size and display:flex. Left unforced, that\n   reflows the grade tiles sideways, uppercases every label and inverts the tab\n   states. Everything a theme is likely to set is declared here and forced. *\/\n.bonza-grt button{\n  display:block !important;\n  font-family:inherit !important;\n  font-size:15px !important;\n  font-weight:700 !important;\n  line-height:1.35 !important;\n  letter-spacing:normal !important;\n  text-transform:none !important;\n  text-decoration:none !important;\n  white-space:normal !important;\n  background-image:none !important;\n  box-shadow:none !important;\n  text-shadow:none !important;\n  min-height:0 !important;\n  min-width:0 !important;\n  cursor:pointer;\n  border-radius:10px;\n  transition:background-color .12s ease,border-color .12s ease,color .12s ease;\n}\n.bonza-grt button > *{max-width:100%}\n.bonza-grt button:focus-visible{outline:2px solid var(--green-deep);outline-offset:2px}\n\n.bonza-grt input[type=\"text\"],\n.bonza-grt input[type=\"email\"],\n.bonza-grt input[type=\"number\"],\n.bonza-grt select{\n  background:var(--paper) !important;\n  background-color:var(--paper) !important;\n  border:1.5px solid var(--field) !important;\n  border-radius:10px !important;\n  color:var(--ink) !important;\n  font-family:inherit !important;\n  font-size:16px !important;\n  padding:11px 12px !important;\n  width:100%;\n  -webkit-appearance:none;\n  appearance:none;\n}\n.bonza-grt select{\n  background-image:url(\"data:image\/svg+xml;charset=utf-8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%237a6d64' d='M1 1l5 5 5-5'\/%3E%3C\/svg%3E\") !important;\n  background-repeat:no-repeat !important;\n  background-position:right 12px center !important;\n  padding-right:34px;\n}\n.bonza-grt input:focus,.bonza-grt select:focus{\n  border-color:var(--green) !important;\n  outline:none;\n  box-shadow:0 0 0 3px rgba(47,160,102,.15);\n}\n.bonza-grt label{font-size:14px;font-weight:700;display:block;margin:0 0 6px;color:var(--ink)}\n\n.bonza-grt .grt-view[hidden]{display:none !important}\n\n\/* --- daily log rows --- *\/\n\/* Deliberate exception to the suite pattern: the other Bonza tools give each step\n   its own card and numbered badge, which suits a one-shot assessment you complete\n   once. This tool is opened every day for thirty days, so the log state is a single\n   card of lightly divided rows - a quick check-in rather than a form. The richer\n   per-card treatment is kept for the progress state, where it belongs. *\/\n.bonza-grt .grt-logcard{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-q{padding:0 0 18px;margin:0 0 18px;border-bottom:1px solid var(--divider)}\n.bonza-grt .grt-q:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}\n.bonza-grt .grt-qlabel{font-size:17px !important;font-weight:800 !important;color:var(--green-deep) !important;margin:0 0 3px !important;line-height:1.3 !important}\n.bonza-grt .grt-qhint{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:0 0 10px !important}\n\n\/* --- option buttons --- *\/\n.bonza-grt .grt-opt{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:15px !important;\n  font-weight:900 !important;\n  padding:11px 14px !important;\n  text-align:left;\n  width:100% !important;\n  display:block !important;\n}\n.bonza-grt .grt-opt:hover{border-color:var(--green);color:var(--green-deep)}\n.bonza-grt .grt-opt.is-sel,\n.bonza-grt .grt-opt.is-sel:hover,\n.bonza-grt .grt-opt.is-sel:focus,\n.bonza-grt .grt-opt.is-sel:active,\n.bonza-grt .grt-opt.is-sel:focus-visible{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  border-color:var(--green) !important;\n  color:var(--green-deep) !important;\n}\n.bonza-grt .grt-opt:focus,.bonza-grt .grt-opt:active{\n  background:var(--paper);\n  background-color:var(--paper);\n}\n\n\/* --- primary \/ ghost --- *\/\n.bonza-grt .grt-btn{\n  background:var(--cta) !important;\n  background-color:var(--cta) !important;\n  border:1.5px solid var(--cta) !important;\n  color:var(--paper) !important;\n  font-size:16px !important;\n  font-weight:900 !important;\n  letter-spacing:.01em !important;\n  border-radius:12px !important;\n  min-height:52px !important;\n  padding:14px 20px !important;\n  width:100% !important;\n}\n.bonza-grt .grt-btn:hover,\n.bonza-grt .grt-btn:focus,\n.bonza-grt .grt-btn:active{\n  background:var(--cta-deep) !important;\n  background-color:var(--cta-deep) !important;\n  border-color:var(--cta-deep) !important;\n  color:var(--paper) !important;\n}\n.bonza-grt .grt-btn[disabled]{opacity:.45;cursor:not-allowed}\n.bonza-grt .grt-btn-ghost{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:13.5px !important;\n  font-weight:700 !important;\n  padding:9px 14px !important;\n  width:auto !important;\n  display:inline-block !important;\n}\n.bonza-grt .grt-btn-ghost:hover{border-color:var(--green);color:var(--green-deep)}\n\n\/* --- gate --- *\/\n.bonza-grt .grt-gate-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:22px 18px}\n.bonza-grt .grt-gate-card h4{font-size:17px;font-weight:800;margin:0 0 8px;color:var(--green-deep)}\n.bonza-grt .grt-gate-card p{font-size:15.5px;margin:0 0 16px;color:var(--ink)}\n.bonza-grt .grt-field{margin-bottom:14px}\n.bonza-grt .grt-consent{font-size:12.5px;line-height:1.5;color:var(--muted);margin:0 0 14px}\n.bonza-grt .grt-consent a{color:var(--green-deep);text-decoration:underline}\n.bonza-grt .grt-reassure{font-size:12.5px;color:var(--muted);text-align:center;margin:12px 0 0}\n.bonza-grt .grt-err{font-size:13.5px;font-weight:700;color:var(--alert);margin:0 0 12px}\n.bonza-grt .grt-err[hidden]{display:none !important}\n\n\/* --- tabs --- *\/\n\/* The theme paints a background on bare buttons, which previously landed on the\n   INACTIVE tab and read as if it were the selected one. Every background here is\n   forced transparent; the active tab is signalled three ways - green text, heavier\n   weight, and the underline sitting on the container's own bottom rule. *\/\n.bonza-grt .grt-tabs{display:flex;flex-wrap:wrap;margin:0 0 20px;border-bottom:2px solid var(--divider)}\n.bonza-grt .grt-tab,\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus,\n.bonza-grt .grt-tab:active{\n  background:transparent !important;\n  background-color:transparent !important;\n  background-image:none !important;\n  border:0 !important;\n  border-bottom:3px solid transparent !important;\n  border-radius:0 !important;\n  box-shadow:none !important;\n  font-size:15px !important;\n  font-weight:500 !important;\n  padding:10px 2px 11px !important;\n  margin:0 26px -2px 0 !important;\n  width:auto !important;\n  flex:0 0 auto;\n  white-space:nowrap !important;\n  color:var(--muted) !important;\n}\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus-visible{\n  color:var(--ink) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--divider) !important;\n}\n.bonza-grt .grt-tab.is-sel,\n.bonza-grt .grt-tab.is-sel:hover,\n.bonza-grt .grt-tab.is-sel:focus,\n.bonza-grt .grt-tab.is-sel:active,\n.bonza-grt .grt-tab.is-sel:focus-visible{\n  color:var(--green-deep) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--green) !important;\n  background:transparent !important;\n  background-color:transparent !important;\n}\n\/* Weight is the load-bearing signal here, so unselected sits at 500 and selected\n   at 800. An 800 vs 700 pair renders identically in families that ship only one\n   bold face, which is what made both tabs look the same weight at rest. *\/\n\n\/* --- log --- *\/\n.bonza-grt .grt-daybar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 20px;flex-wrap:wrap}\n.bonza-grt .grt-daymeta{font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}\n.bonza-grt .grt-daybar select{width:auto !important;min-width:190px;font-size:14px !important;padding:8px 34px 8px 12px !important}\n.bonza-grt .grt-row3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}\n.bonza-grt .grt-row3 .grt-opt{text-align:center !important}\n.bonza-grt .grt-row2{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-row2 .grt-opt{text-align:center !important}\n\n.bonza-grt .grt-grades{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-grade{\n  display:block !important;\n  padding:8px !important;\n  text-align:center !important;\n  line-height:1.25 !important;\n  min-width:0;\n  overflow:hidden;\n}\n.bonza-grt .grt-grade img{\n  display:block !important;\n  width:100% !important;\n  height:auto !important;\n  border-radius:8px;\n  margin:0 0 6px !important;\n  background:var(--cream);\n}\n.bonza-grt .grt-grade .grt-gnum{\n  display:block !important;\n  width:100% !important;\n  font-size:17px !important;\n  font-weight:800 !important;\n  line-height:1.2 !important;\n}\n.bonza-grt .grt-grade .grt-glab{\n  display:block !important;\n  width:100% !important;\n  font-size:12.5px !important;\n  font-weight:700 !important;\n  line-height:1.3 !important;\n  color:var(--ink);\n  overflow-wrap:break-word;\n  hyphens:auto;\n}\n.bonza-grt .grt-grade.is-sel .grt-glab{color:var(--green-deep) !important}\n.bonza-grt .grt-i18n,\n.bonza-grt .grt-gdesc{display:none !important}\n.bonza-grt .grt-gradedesc{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:10px 0 0;min-height:20px}\n\n.bonza-grt .grt-checks{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-refrow{margin-top:8px}\n.bonza-grt .grt-check{font-size:14px !important;font-weight:900 !important;padding:10px 12px !important;text-align:left !important}\n.bonza-grt .grt-check.is-sel,\n.bonza-grt .grt-check.is-sel:hover,\n.bonza-grt .grt-check.is-sel:focus,\n.bonza-grt .grt-check.is-sel:active{\n  background:var(--caution-bg) !important;\n  background-color:var(--caution-bg) !important;\n  border-color:var(--amber) !important;\n  color:var(--amber-deep) !important;\n}\n.bonza-grt .grt-weight{display:flex;flex-wrap:wrap;gap:10px;align-items:center}\n.bonza-grt .grt-weight input{max-width:120px}\n.bonza-grt .grt-weight span{font-size:14px;color:var(--muted)}\n\n\/* --- progress --- *\/\n.bonza-grt .grt-hero{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:20px 18px;margin:0 0 20px}\n.bonza-grt .grt-hero-eyebrow{font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}\n.bonza-grt .grt-hero-num{font-size:56px;font-weight:800;line-height:1;color:var(--green-deep);margin:0}\n.bonza-grt .grt-hero-unit{font-size:26px;font-weight:800}\n.bonza-grt .grt-hero-lab{font-size:21px;font-weight:800;color:var(--ink);margin:6px 0 0;line-height:1.25}\n.bonza-grt .grt-hero-cmp{font-size:15.5px;margin:10px 0 0;color:var(--ink)}\n.bonza-grt .grt-delta{font-weight:800}\n.bonza-grt .grt-delta.up{color:var(--green-deep)}\n.bonza-grt .grt-delta.down{color:var(--alert)}\n.bonza-grt .grt-delta.flat{color:var(--muted)}\n.bonza-grt .grt-hero-note{font-size:12.5px;color:var(--muted);margin:10px 0 0}\n.bonza-grt .grt-toggle{display:inline-flex;flex-wrap:wrap;max-width:100%;border:1.5px solid var(--divider);border-radius:999px;overflow:hidden;margin:14px 0 0;background:var(--paper)}\n.bonza-grt .grt-toggle button{\n  border:none;border-radius:0;background:transparent;color:var(--muted);\n  font-size:13px !important;font-weight:700 !important;padding:8px 14px !important;\n  width:auto !important;display:inline-block !important;\n}\n.bonza-grt .grt-toggle button.is-sel,\n.bonza-grt .grt-toggle button.is-sel:hover,\n.bonza-grt .grt-toggle button.is-sel:focus,\n.bonza-grt .grt-toggle button.is-sel:active{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  color:var(--green-deep) !important;\n}\n\n.bonza-grt .grt-ringwrap{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);display:flex;align-items:center;gap:18px;padding:18px;margin:0 0 20px}\n.bonza-grt .grt-ring{flex:0 0 92px;width:92px;height:92px}\n.bonza-grt .grt-ringtext .grt-rt1{font-size:17px;font-weight:800;color:var(--green-deep);margin:0}\n.bonza-grt .grt-ringtext .grt-rt2{font-size:14px;color:var(--muted);margin:4px 0 0}\n\n.bonza-grt .grt-upgrade{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);border-left:4px solid var(--purple);padding:18px;margin:0 0 20px;position:relative}\n.bonza-grt .grt-upgrade h5{font-size:17px;font-weight:800;margin:0 0 6px;color:var(--deep-purple)}\n.bonza-grt .grt-upgrade p{font-size:15.5px;margin:0;color:var(--ink);padding-right:18px}\n.bonza-grt .grt-upgrade .grt-dismiss{position:absolute;top:10px;right:10px;background:transparent !important;border:none !important;color:var(--muted) !important;font-size:18px !important;line-height:1 !important;padding:4px 8px !important;width:auto !important;font-weight:700 !important}\n\n.bonza-grt .grt-vet{\n  background:var(--alert-bg);\n  border:1px solid var(--alert-bd);\n  border-left:4px solid var(--alert);\n  border-radius:12px;padding:18px;margin:0 0 20px;\n}\n.bonza-grt .grt-vet h5{font-size:21px;font-weight:800;margin:0 0 6px;color:var(--alert);line-height:1.25}\n.bonza-grt .grt-vet p{font-size:15.5px;margin:0 0 8px;color:var(--ink)}\n.bonza-grt .grt-vet ul{margin:0;padding-left:20px;font-size:15.5px;color:var(--ink)}\n\n.bonza-grt .grt-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-card h5{font-size:17px;font-weight:800;margin:0 0 3px;color:var(--green-deep);line-height:1.3}\n.bonza-grt .grt-card .grt-cardhint{font-size:14px;font-weight:500;color:var(--muted);margin:0 0 12px}\n.bonza-grt .grt-chart{width:100%;height:auto;display:block;overflow:visible}\n.bonza-grt .grt-empty{font-size:14px;color:var(--muted);margin:0}\n\n.bonza-grt .grt-weeks{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-week{background:var(--paper);border:1.5px solid var(--divider);border-radius:10px;padding:10px 8px;text-align:center}\n.bonza-grt .grt-week.is-now{border-color:var(--green);background:var(--tint)}\n.bonza-grt .grt-week .grt-wk{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);display:block}\n.bonza-grt .grt-week .grt-wt{font-size:12px;font-weight:600;color:var(--muted);display:block;margin-top:3px;line-height:1.25}\n\n.bonza-grt .grt-foot{border-top:1px solid var(--divider);margin-top:22px;padding-top:16px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}\n.bonza-grt .grt-foot .grt-footnote{font-size:12.5px;color:var(--muted);margin:0;flex:1 1 100%}\n.bonza-grt .grt-disclaimer{font-size:12.5px;color:var(--muted);margin:16px 0 0;line-height:1.5}\n.bonza-grt .grt-warn{\n  background:var(--caution-bg);\n  border:1px solid var(--divider);\n  border-left:4px solid var(--amber);\n  border-radius:10px;padding:12px 14px;font-size:14px;margin:0 0 16px;color:var(--ink);\n}\n.bonza-grt .grt-toast{background:var(--tint);border:1px solid var(--green);border-radius:10px;padding:12px 14px;font-size:14px;font-weight:700;color:var(--green-deep);margin:0 0 16px}\n.bonza-grt .grt-toast[hidden]{display:none !important}\n\n\/* ---------------------------------------------------------------------------\n   SPECIFICITY ESCALATION - font-weight only.\n\n   Diagnosed on the live page: computed font-weight on .grt-tab resolved to 400\n   despite the tool declaring 500\/800 with !important. The theme sets font-weight\n   on buttons with !important at a specificity .bonza-grt button cannot beat, so\n   every weight in the tool was being overruled while font-size, colour and\n   background came through untouched. The giveaway was the tab's ::after (the\n   hidden bold label used for width reservation) rendering in Segoe UI Black\n   while the button itself rendered regular - the pseudo-element kept its weight\n   because the theme rule does not target it.\n\n   These selectors lead with the wrapper's ID, which outranks any class-based\n   rule no matter how many classes it chains. Weight is the only property\n   escalated; everything else was already winning.\n   --------------------------------------------------------------------------- *\/\n#bonzaGrt.bonza-grt .grt-tab{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-tab:hover,\n#bonzaGrt.bonza-grt .grt-tab:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab.is-sel,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:hover,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:active,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab::after{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-opt,\n#bonzaGrt.bonza-grt .grt-opt:hover,\n#bonzaGrt.bonza-grt .grt-opt:focus,\n#bonzaGrt.bonza-grt .grt-opt:active,\n#bonzaGrt.bonza-grt .grt-opt.is-sel{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-check,\n#bonzaGrt.bonza-grt .grt-check.is-sel{font-weight:900 !important}\n\n#bonzaGrt.bonza-grt .grt-btn,\n#bonzaGrt.bonza-grt .grt-btn:hover,\n#bonzaGrt.bonza-grt .grt-btn:focus,\n#bonzaGrt.bonza-grt .grt-btn:active{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-btn-ghost{font-weight:700 !important}\n\n\/* Footer actions. The theme adds vertical margin to buttons, which knocked the\n   CSV button out of line with Start over. Zero the margins, and let the two\n   share a height so their top and bottom edges match exactly. *\/\n#bonzaGrt.bonza-grt .grt-foot{align-items:stretch !important}\n#bonzaGrt.bonza-grt .grt-foot .grt-btn-ghost{\n  margin:0 !important;\n  align-self:stretch !important;\n  display:inline-flex !important;\n  align-items:center !important;\n  justify-content:center !important;\n  line-height:1.25 !important;\n}\n\n#bonzaGrt.bonza-grt .grt-grade .grt-gnum{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-grade .grt-glab{font-weight:700 !important}\n\n#bonzaGrt.bonza-grt .grt-toggle button{font-weight:700 !important}\n#bonzaGrt.bonza-grt .grt-toggle button.is-sel{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-eyebrow{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qlabel{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qhint{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-hero-num,\n#bonzaGrt.bonza-grt .grt-hero-lab,\n#bonzaGrt.bonza-grt .grt-delta{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-card h5,\n#bonzaGrt.bonza-grt .grt-vet h5,\n#bonzaGrt.bonza-grt .grt-upgrade h5,\n#bonzaGrt.bonza-grt .grt-gate-card h4{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-daymeta,\n#bonzaGrt.bonza-grt .grt-week .grt-wk{font-weight:800 !important}\n\n@media (max-width:560px){\n  .bonza-grt{padding:20px 15px}\n  .bonza-grt .grt-logcard,.bonza-grt .grt-card,.bonza-grt .grt-hero,.bonza-grt .grt-ringwrap,.bonza-grt .grt-upgrade,.bonza-grt .grt-vet{padding:15px}\n  .bonza-grt .grt-grades{grid-template-columns:repeat(3,1fr)}\n  .bonza-grt .grt-checks{grid-template-columns:1fr}\n  .bonza-grt .grt-refrow .grt-opt{grid-column:1 \/ -1}\n  .bonza-grt .grt-weeks{grid-template-columns:repeat(2,1fr)}\n  .bonza-grt .grt-hero-num{font-size:46px}\n  .bonza-grt .grt-ringwrap{flex-direction:column;align-items:flex-start;gap:12px}\n  .bonza-grt .grt-daybar select{min-width:0;width:100% !important}\n  .bonza-grt .grt-toggle{width:100%;justify-content:center}\n}\n@media (prefers-reduced-motion:reduce){\n  .bonza-grt *{transition:none !important;animation:none !important}\n}\n<\/style>\n\n<h3 class=\"grt-eyebrow\">Outils Bonza Health : Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb<\/h3>\n<p class=\"grt-lede\">Le programme de r\u00e9\u00e9quilibrage de 30 jours fonctionne parce que vous pouvez constater ses effets. Notez chaque jour quatre indicateurs simples \u2014 selles, \u00e9nergie, app\u00e9tit et pr\u00e9sence ou non d&rsquo;une pouss\u00e9e \u2014 et observez si le nombre de bons jours de votre chien augmente. Il s&rsquo;agit d&rsquo;un outil de suivi \u00e0 vis\u00e9e p\u00e9dagogique, et non d&rsquo;un diagnostic.  <\/p>\n\n<div class=\"grt-warn\" id=\"grtStorageWarn\" hidden=\"\"><\/div>\n\n<section class=\"grt-view\" id=\"grtGate\">\n  <div class=\"grt-gate-card\">\n    <h4>Commencez \u00e0 suivre le programme de r\u00e9\u00e9quilibrage intestinal de 30 jours de votre chien<\/h4>\n    <p>Entrez votre adresse e-mail pour acc\u00e9der \u00e0 votre outil de suivi gratuit. Vous pourrez y consigner quotidiennement les progr\u00e8s de votre chien et observer l&rsquo;\u00e9volution de ses r\u00e9sultats sur une p\u00e9riode de 30 jours. <\/p>\n    <div class=\"grt-field\">\n      <label for=\"grtDogName\">Le nom de votre chien (facultatif)<\/label>\n      <input type=\"text\" id=\"grtDogName\" autocomplete=\"off\" placeholder=\"Paddy\"\/>\n    <\/div>\n    <div class=\"grt-field\">\n      <label for=\"grtEmail\">Votre adresse e-mail<\/label>\n      <input type=\"email\" id=\"grtEmail\" autocomplete=\"email\" inputmode=\"email\" placeholder=\"you@example.com\"\/>\n    <\/div>\n    <p class=\"grt-err\" id=\"grtGateErr\" hidden=\"\"><\/p>\n    <p class=\"grt-consent\">En poursuivant, vous acceptez de recevoir des e-mails de la part de Bonza concernant votre suivi de r\u00e9\u00e9quilibrage intestinal et des conseils li\u00e9s \u00e0 la sant\u00e9 intestinale de votre chien. Vous pouvez vous d\u00e9sabonner \u00e0 tout moment. Nous traiterons vos donn\u00e9es personnelles conform\u00e9ment \u00e0 notre <a href=\"https:\/\/bonza-retheme.blz.au\/fr\/politique-de-confidentialite\/\" target=\"_blank\" rel=\"noopener\">politique de confidentialit\u00e9<\/a>.  <\/p>\n    <button type=\"button\" class=\"grt-btn\" id=\"grtGateBtn\">Ouvrez mon outil de suivi<\/button>\n    <p class=\"grt-reassure\">Utilisation gratuite, aucun compte requis. Vos donn\u00e9es de suivi restent stock\u00e9es sur cet appareil. <\/p>\n  <\/div>\n<\/section>\n\n<section class=\"grt-view\" id=\"grtApp\" hidden=\"\">\n\n  <div class=\"grt-i18n\" id=\"grtI18n\" aria-hidden=\"true\">\n    <span data-w=\"1\">V\u00e9rifier et supprimer<\/span>\n    <span data-w=\"2\">Mettre en place une assistance<\/span>\n    <span data-w=\"3\">Observer et ajuster<\/span>\n    <span data-w=\"4\">\u00c9tablir une base de r\u00e9f\u00e9rence<\/span>\n    <span data-t=\"grade\">\u00c9valuer<\/span>\n  <\/div>\n\n  <div class=\"grt-tabs\" role=\"tablist\">\n    <button type=\"button\" class=\"grt-tab is-sel\" id=\"grtTabLog\" role=\"tab\" aria-selected=\"true\" data-label=\"Log today\">Journal du jour<\/button>\n    <button type=\"button\" class=\"grt-tab\" id=\"grtTabProg\" role=\"tab\" aria-selected=\"false\" data-label=\"Progress\">Avancement<\/button>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtLog\">\n    <div class=\"grt-toast\" id=\"grtToast\" hidden=\"\"><\/div>\n\n    <div class=\"grt-daybar\">\n      <div>\n        <div class=\"grt-daymeta\" id=\"grtDayMeta\">Jour 1 sur 30 \u00b7 Semaine 1<\/div>\n      <\/div>\n      <select id=\"grtDaySel\" aria-label=\"Which day are you logging?\"><\/select>\n    <\/div>\n\n    <div class=\"grt-logcard\">\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">\u00c9valuation des selles<\/p>\n        <p class=\"grt-qhint\">Choisissez la valeur la plus proche sur l&rsquo;\u00e9chelle Bonza \u00e0 7 niveaux. Les niveaux 2 et 3 correspondent \u00e0 une fourchette normale. <\/p>\n        <div class=\"grt-grades\" id=\"grtGrades\">\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"1\"><span class=\"grt-gnum\">1<\/span><span class=\"grt-glab\">Grumeaux durs et secs<\/span><span class=\"grt-gdesc\">Selles s\u00e8ches et en morceaux, \u00e9vacu\u00e9es avec difficult\u00e9. Constipation \u2014 g\u00e9n\u00e9ralement due \u00e0 un manque de fibres ou \u00e0 une hydratation insuffisante. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"2\"><span class=\"grt-gnum\">2<\/span><span class=\"grt-glab\">Ferme, segment\u00e9<\/span><span class=\"grt-gdesc\">Bien form\u00e9 et segment\u00e9, il conserve sa forme et ne laisse aucun r\u00e9sidu. C&rsquo;est l&rsquo;id\u00e9al. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"3\"><span class=\"grt-gnum\">3<\/span><span class=\"grt-glab\">B\u00fbche moul\u00e9e humide<\/span><span class=\"grt-gdesc\">De forme allong\u00e9e, conserve sa forme, l\u00e9g\u00e8rement humide, laisse une l\u00e9g\u00e8re marque. En bon \u00e9tat. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"4\"><span class=\"grt-gnum\">4<\/span><span class=\"grt-glab\">Molle, perdant sa forme<\/span><span class=\"grt-gdesc\">Elle a toujours la forme d&rsquo;une b\u00fbche, mais elle est moelleuse et juteuse. Elle se d\u00e9forme lorsqu&rsquo;on la prend dans la main. \u00c0 surveiller.  <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"5\"><span class=\"grt-gnum\">5<\/span><span class=\"grt-glab\">Tr\u00e8s molle, partiellement form\u00e9<\/span><span class=\"grt-gdesc\">Se pr\u00e9sente sous la forme d&rsquo;un tas partiellement form\u00e9 plut\u00f4t que d&rsquo;une b\u00fbche.<\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"6\"><span class=\"grt-gnum\">6<\/span><span class=\"grt-glab\">Velours souple sans forme d\u00e9finie<\/span><span class=\"grt-gdesc\">Sans forme d\u00e9finie, de consistance semblable \u00e0 celle d&rsquo;un porridge. Il s&rsquo;agit d&rsquo;une diarrh\u00e9e. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"7\"><span class=\"grt-gnum\">7<\/span><span class=\"grt-glab\">Aqueux<\/span><span class=\"grt-gdesc\">Liquide, sans morceaux solides. Diarrh\u00e9e aqueuse \u2014 surveillez attentivement l&rsquo;hydratation. <\/span><\/button>\n        <\/div>\n        <p class=\"grt-gradedesc\" id=\"grtGradeDesc\"><\/p>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Niveau d&rsquo;\u00e9nergie<\/p>\n        <p class=\"grt-qhint\">Par rapport \u00e0 la normale pour votre chien.<\/p>\n        <div class=\"grt-row3\" id=\"grtEnergy\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"low\">Faible<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"high\">\u00c9lev\u00e9<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">App\u00e9tit<\/p>\n        <p class=\"grt-qhint\">Ce qu&rsquo;ils ont mang\u00e9 aujourd&rsquo;hui.<\/p>\n        <div class=\"grt-row3\" id=\"grtAppetite\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"poor\">Mauvais<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"eager\">Enthousiaste<\/button>\n        <\/div>\n        <div class=\"grt-row3 grt-refrow\">\n          <button type=\"button\" class=\"grt-opt grt-check\" id=\"grtRefused\">On lui a refus\u00e9 un repas<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Une pouss\u00e9e aujourd&rsquo;hui ?<\/p>\n        <p class=\"grt-qhint\">Une journ\u00e9e marqu\u00e9e par des vomissements, une envie pressante d&rsquo;aller \u00e0 la selle, des efforts pour aller \u00e0 la selle, des fuites ou une g\u00eane intestinale manifeste.<\/p>\n        <div class=\"grt-row2\" id=\"grtFlare\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"no\">Pas de pouss\u00e9e<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"yes\">Pouss\u00e9e aujourd&rsquo;hui<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Avez-vous remarqu\u00e9 quelque chose d&rsquo;inhabituel dans vos selles ?<\/p>\n        <p class=\"grt-qhint\">Cochez tout ce que vous avez constat\u00e9. Ne remplissez pas cette case si rien ne s&rsquo;applique. <\/p>\n        <div class=\"grt-checks\" id=\"grtFlags\">\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"black\">Noir ou semblable \u00e0 du goudron<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"blood\">Du sang frais ou des tra\u00een\u00e9es rouges<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"pale\">P\u00e2le, gris ou de couleur argileuse<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"worms\">Vers visibles ou segments ressemblant \u00e0 des grains de riz<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"mucus\">Pr\u00e9sence importante de mucus ou d&rsquo;une couche g\u00e9latineuse<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"foreign\">Quelque chose qu&rsquo;ils n&rsquo;auraient pas d\u00fb manger<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Poids <span style=\"font-weight:600;color:var(--muted)\">(facultatif)<\/span><\/p>\n        <p class=\"grt-qhint\">Une fois par semaine, cela suffit amplement. Sur la m\u00eame balance, \u00e0 la m\u00eame heure de la journ\u00e9e. <\/p>\n        <div class=\"grt-weight\">\n          <input type=\"number\" id=\"grtWeight\" step=\"0.1\" min=\"0\" max=\"120\" inputmode=\"decimal\" placeholder=\"0.0\"\/>\n          <span>kg<\/span>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <button type=\"button\" class=\"grt-btn\" id=\"grtSave\">Notez bien cette date<\/button>\n\n    <div class=\"grt-foot\">\n      <p class=\"grt-footnote\">Vos historiques de navigation sont enregistr\u00e9s uniquement dans ce navigateur, sur cet appareil.<\/p>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtExport\">T\u00e9l\u00e9charger mes donn\u00e9es (CSV)<\/button>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtReset\">Recommencer<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtProgress\" hidden=\"\">\n    <div id=\"grtVetSlot\"><\/div>\n    <div id=\"grtHeroSlot\"><\/div>\n    <div id=\"grtUpgradeSlot\"><\/div>\n    <div id=\"grtRingSlot\"><\/div>\n    <div id=\"grtWeeksSlot\" class=\"grt-card\"><\/div>\n    <div id=\"grtChartsSlot\"><\/div>\n    <p class=\"grt-disclaimer\">Cet outil de suivi est destin\u00e9 \u00e0 des fins \u00e9ducatives. Il permet de consigner vos observations et de visualiser l&rsquo;\u00e9volution dans le temps. Il ne permet pas d&rsquo;\u00e9tablir un diagnostic et ne remplace en aucun cas l&rsquo;avis d&rsquo;un v\u00e9t\u00e9rinaire. Si votre chien est malade, si son \u00e9tat s&rsquo;aggrave ou si vous \u00eates inquiet, consultez votre v\u00e9t\u00e9rinaire.   <\/p>\n  <\/div>\n\n<\/section>\n<\/div>\n<script src=\"data:text\/javascript;base64,KGZ1bmN0aW9uKCl7CiAgInVzZSBzdHJpY3QiOwoKICB2YXIgQ0ZHID0gewogICAgbnM6ICJib256YV9ncnRfdjEiLAogICAgcmVzZXREYXlzOiAzMCwKICAgIHNjcm9sbE9mZnNldDogMTAwLAogICAgcHJpdmFjeVVybDogImh0dHBzOi8vd3d3LmJvbnphLmRvZy9wcml2YWN5LXBvbGljeS8iLAogICAgZ3JhZGVJbWFnZXM6IFsKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMS1oYXJkLWRyeS1sdW1wcy1jb25zdGlwYXRpb24ud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTItZmlybS1zZWdtZW50ZWQtaGVhbHRoeS1pZGVhbC53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMy1tb2lzdC1mb3JtZWQtbG9nLWhlYWx0aHkud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTQtc29mdC1tb2lzdC1sb3NpbmctZm9ybS53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtNS12ZXJ5LXNvZnQtcGFydGx5LWZvcm1lZC1waWxlLndlYnAiLAogICAgICAiaHR0cHM6Ly93d3cuYm9uemEuZG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy9kb2ctcG9vcC1jaGFydC1ncmFkZS02LWZvcm1sZXNzLXNvZnQtcGlsZS1kaWFycmhvZWEud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTctd2F0ZXJ5LWRpYXJyaG9lYS53ZWJwIgogICAgXSwKICAgIHVwZ3JhZGVVcmw6ICIiLAoKICAgIC8qIEtsYXZpeW8gbGVhZCBjYXB0dXJlLiBGaWxsIGJvdGggSURzIGluIGFuZCB0aGUgZ2F0ZSBzdGFydHMgc3Vic2NyaWJpbmc7CiAgICAgICBsZWF2ZSBlaXRoZXIgYmxhbmsgYW5kIHRoZSB0cmFja2VyIHJ1bnMgZXhhY3RseSBhcyBiZWZvcmUsIGNhcHR1cmluZyBub3RoaW5nLgogICAgICAgY29tcGFueUlkIGlzIHRoZSA2LWNoYXJhY3RlciBwdWJsaWMgQVBJIGtleSAoc2l0ZSBJRCkgLSBpdCBpcyBkZXNpZ25lZCB0byBiZQogICAgICAgcHVibGljIGFuZCBzYWZlIHRvIHNoaXAgaW4gY2xpZW50LXNpZGUgY29kZS4gRG8gTk9UIHB1dCBhIHByaXZhdGUga2V5IGhlcmUuICovCiAgICBrbGF2aXlvOiB7CiAgICAgIGNvbXBhbnlJZDogIlhSUjlFRCIsCiAgICAgIGxpc3RJZDogIlRTdzdiVCIsCiAgICAgIHJldmlzaW9uOiAiMjAyNi0wNy0xNSIsCiAgICAgIHNvdXJjZTogIjMwLURheSBHdXQgUmVzZXQgVHJhY2tlciIsCiAgICAgIHNlbmREb2dOYW1lOiB0cnVlLAogICAgICBtYXhUcmllczogNQogICAgfQogIH07CgogIHZhciBQQUwgPSB7CiAgICBwYXBlcjoiI2ZmZmZmZiIsIGdyZWVuOiIjMmZhMDY2IiwgZ3JlZW5EZWVwOiIjMjI3YTRkIiwgdGludDoiI2VhZjVlZSIsCiAgICBhbWJlcjoiI2ZmYTgyNSIsIGFtYmVyRGVlcDoiI2IwNmEwMCIsIGRpdmlkZXI6IiNkNGJmYjIiLCBpbms6IiMzODJmMmIiLAogICAgbXV0ZWQ6IiM3YTZkNjQiLCB0cmFjazoiI2U2ZDhjYSIKICB9OwoKICB2YXIgR1JBREVTID0gWwogICAge246MSxsYWI6IkhhcmQsIGRyeSBsdW1wcyIsZGVzYzoiU2VwYXJhdGUgZHJ5IGx1bXBzLCBwYXNzZWQgd2l0aCBlZmZvcnQuIENvbnN0aXBhdGlvbiBcdTIwMTQgdXN1YWxseSBhIGZpYnJlIG9yIGh5ZHJhdGlvbiBpc3N1ZS4ifSwKICAgIHtuOjIsbGFiOiJGaXJtLCBzZWdtZW50ZWQiLGRlc2M6IldlbGwgZm9ybWVkIGFuZCBzZWdtZW50ZWQsIGhvbGRzIGl0cyBzaGFwZSwgbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiBUaGlzIGlzIGlkZWFsLiJ9LAogICAge246MyxsYWI6Ik1vaXN0LCBmb3JtZWQgbG9nIixkZXNjOiJMb2cgc2hhcGVkIGFuZCBob2xkcyBmb3JtLCBzbGlnaHRseSBtb2lzdCwgbGVhdmVzIGEgZmFpbnQgbWFyay4gSGVhbHRoeS4ifSwKICAgIHtuOjQsbGFiOiJTb2Z0LCBsb3NpbmcgZm9ybSIsZGVzYzoiU3RpbGwgbG9nIHNoYXBlZCBidXQgc29mdCBhbmQgbW9pc3QuIExvc2VzIGl0cyBzaGFwZSB3aGVuIHBpY2tlZCB1cC4gV29ydGggd2F0Y2hpbmcuIn0sCiAgICB7bjo1LGxhYjoiVmVyeSBzb2Z0LCBwYXJ0bHkgZm9ybWVkIixkZXNjOiJTaXRzIGluIGEgcGFydGx5IGZvcm1lZCBwaWxlIHJhdGhlciB0aGFuIGEgbG9nLiJ9LAogICAge246NixsYWI6IkZvcm1sZXNzIHNvZnQgcGlsZSIsZGVzYzoiTm8gZGVmaW5lZCBzaGFwZSwgcG9ycmlkZ2UtbGlrZS4gVGhpcyBpcyBkaWFycmhvZWEuIn0sCiAgICB7bjo3LGxhYjoiV2F0ZXJ5IixkZXNjOiJMaXF1aWQsIG5vIHNvbGlkIHBpZWNlcy4gV2F0ZXJ5IGRpYXJyaG9lYSBcdTIwMTQgd2F0Y2ggaHlkcmF0aW9uIGNsb3NlbHkuIn0KICBdOwogIHZhciBIRUFMVEhZID0gWzIsM107CgogIHZhciBFTkVSR1kgICA9IFt7djoibG93IixsYWI6IkxvdyJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImhpZ2giLGxhYjoiSGlnaCJ9XTsKICB2YXIgQVBQRVRJVEUgPSBbe3Y6InBvb3IiLGxhYjoiUG9vciJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImVhZ2VyIixsYWI6IkVhZ2VyIn1dOwogIHZhciBGTEFSRSAgICA9IFt7djoibm8iLGxhYjoiTm8gZmxhcmUtdXAifSx7djoieWVzIixsYWI6IkZsYXJlLXVwIHRvZGF5In1dOwoKICB2YXIgRkxBR1MgPSBbCiAgICB7azoiYmxhY2siLCBsYWI6IkJsYWNrIG9yIHRhci1saWtlIn0sCiAgICB7azoiYmxvb2QiLCBsYWI6IkZyZXNoIGJsb29kIG9yIHJlZCBzdHJlYWtzIn0sCiAgICB7azoicGFsZSIsICBsYWI6IlBhbGUsIGdyZXkgb3IgY2xheS1jb2xvdXJlZCJ9LAogICAge2s6Indvcm1zIiwgbGFiOiJWaXNpYmxlIHdvcm1zIG9yIHJpY2UtbGlrZSBzZWdtZW50cyJ9LAogICAge2s6Im11Y3VzIiwgbGFiOiJIZWF2eSBtdWN1cyBvciBqZWxseSBjb2F0aW5nIn0sCiAgICB7azoiZm9yZWlnbiIsIGxhYjoiU29tZXRoaW5nIHRoZXkgc2hvdWxkbid0IGhhdmUgZWF0ZW4ifQogIF07CgogIHZhciBXRUVLUyA9IFsKICAgIHt0OiJBdWRpdCAmIHJlbW92ZSJ9LAogICAge3Q6IkludHJvZHVjZSBzdXBwb3J0In0sCiAgICB7dDoiT2JzZXJ2ZSAmIGFkanVzdCJ9LAogICAge3Q6IkVzdGFibGlzaCBiYXNlbGluZSJ9CiAgXTsKCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9uemFHcnQiKTsKICBpZighcm9vdCl7IHJldHVybjsgfQoKICB2YXIgc3RvcmFnZU9LID0gdHJ1ZTsKICB2YXIgbWVtID0gbnVsbDsKCiAgZnVuY3Rpb24gdGVzdFN0b3JhZ2UoKXsKICAgIHRyeXsKICAgICAgdmFyIHQgPSAiX19ncnRfdF9fIjsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsIjEiKTsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH1jYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9CiAgfQoKICBmdW5jdGlvbiBsb2FkKCl7CiAgICBpZighc3RvcmFnZU9LKXsgcmV0dXJuIG1lbTsgfQogICAgdHJ5ewogICAgICB2YXIgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKENGRy5ucyk7CiAgICAgIGlmKCFyYXcpeyByZXR1cm4gbnVsbDsgfQogICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpOwogICAgfWNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfQogIH0KCiAgZnVuY3Rpb24gc2F2ZSgpewogICAgaWYoIXN0b3JhZ2VPSyl7IG1lbSA9IHN0YXRlOyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKENGRy5ucywgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTsgfQogICAgY2F0Y2goZSl7IHN0b3JhZ2VPSyA9IGZhbHNlOyBtZW0gPSBzdGF0ZTsgc2hvd1N0b3JhZ2VXYXJuKCk7IH0KICB9CgogIGZ1bmN0aW9uIHNob3dTdG9yYWdlV2FybigpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFN0b3JhZ2VXYXJuIik7CiAgICBpZighZWwpeyByZXR1cm47IH0KICAgIGVsLnRleHRDb250ZW50ID0gIlRoaXMgYnJvd3NlciBpcyBibG9ja2luZyBsb2NhbCBzdG9yYWdlLCBzbyB0b2RheSdzIGVudHJpZXMgd29uJ3QgYmUgcmVtZW1iZXJlZCBhZnRlciB5b3UgY2xvc2UgdGhlIHBhZ2UuIFByaXZhdGUvaW5jb2duaXRvIG1vZGUgaXMgdGhlIHVzdWFsIGNhdXNlLiBFdmVyeXRoaW5nIGVsc2Ugc3RpbGwgd29ya3MuIjsKICAgIGVsLmhpZGRlbiA9IGZhbHNlOwogIH0KCiAgdmFyIHN0YXRlID0gbnVsbDsKCiAgZnVuY3Rpb24gYmxhbmtTdGF0ZSgpewogICAgcmV0dXJuIHsgZW1haWw6IiIsIGRvZ05hbWU6IiIsIGNvbnNlbnRBdDoiIiwgc3RhcnREYXRlOiIiLCBlbnRyaWVzOnt9LCB3ZWlnaHRzOnt9LCBoZXJvTW9kZToiYmFzZWxpbmUiLCB1cGdyYWRlRGlzbWlzc2VkOmZhbHNlLCBzdWJzY3JpYmVkOmZhbHNlLCBzdWJzY3JpYmVUcmllczowIH07CiAgfQoKICBmdW5jdGlvbiBwYWQobil7IHJldHVybiBuPDEwID8gIjAiK24gOiAiIituOyB9CiAgZnVuY3Rpb24ga2V5T2YoZCl7IHJldHVybiBkLmdldEZ1bGxZZWFyKCkrIi0iK3BhZChkLmdldE1vbnRoKCkrMSkrIi0iK3BhZChkLmdldERhdGUoKSk7IH0KICBmdW5jdGlvbiBwYXJzZUtleShrKXsgdmFyIHAgPSBrLnNwbGl0KCItIik7IHJldHVybiBuZXcgRGF0ZShwYXJzZUludChwWzBdLDEwKSwgcGFyc2VJbnQocFsxXSwxMCktMSwgcGFyc2VJbnQocFsyXSwxMCkpOyB9CiAgZnVuY3Rpb24gdG9kYXlLZXkoKXsgcmV0dXJuIGtleU9mKG5ldyBEYXRlKCkpOyB9CiAgZnVuY3Rpb24gZGF5c0JldHdlZW4oYSxiKXsKICAgIHZhciBtcyA9IHBhcnNlS2V5KGIpLmdldFRpbWUoKSAtIHBhcnNlS2V5KGEpLmdldFRpbWUoKTsKICAgIHJldHVybiBNYXRoLnJvdW5kKG1zLzg2NDAwMDAwKTsKICB9CiAgZnVuY3Rpb24gZGF5TnVtYmVyKGspeyByZXR1cm4gZGF5c0JldHdlZW4oc3RhdGUuc3RhcnREYXRlLCBrKSArIDE7IH0KICBmdW5jdGlvbiB3ZWVrT2YoZG4peyB2YXIgdyA9IE1hdGguY2VpbChkbi83KTsgaWYodzwxKXt3PTE7fSBpZih3PjQpe3c9NDt9IHJldHVybiB3OyB9CiAgZnVuY3Rpb24gZm10U2hvcnQoayl7CiAgICB2YXIgZCA9IHBhcnNlS2V5KGspOwogICAgdmFyIGRheXMgPSBbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdOwogICAgdmFyIG1vbnMgPSBbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdOwogICAgcmV0dXJuIGRheXNbZC5nZXREYXkoKV0rIiAiK2QuZ2V0RGF0ZSgpKyIgIittb25zW2QuZ2V0TW9udGgoKV07CiAgfQogIGZ1bmN0aW9uIGVzYyhzKXsKICAgIHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik7CiAgfQogIGZ1bmN0aW9uIGRvZ1Bvc3Nlc3NpdmUoKXsKICAgIGlmKHN0YXRlLmRvZ05hbWUpeyByZXR1cm4gZXNjKHN0YXRlLmRvZ05hbWUpKyIncyI7IH0KICAgIHJldHVybiAiWW91ciBkb2cncyI7CiAgfQogIGZ1bmN0aW9uIGRvZ05hbWUoKXsgcmV0dXJuIHN0YXRlLmRvZ05hbWUgPyBlc2Moc3RhdGUuZG9nTmFtZSkgOiAieW91ciBkb2ciOyB9CgogIGZ1bmN0aW9uIGxvZ2dlZEtleXMoKXsKICAgIHZhciBrcyA9IFtdOwogICAgZm9yKHZhciBrIGluIHN0YXRlLmVudHJpZXMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUuZW50cmllcyxrKSl7IGtzLnB1c2goayk7IH0gfQogICAga3Muc29ydCgpOwogICAgcmV0dXJuIGtzOwogIH0KCiAgZnVuY3Rpb24gZ29vZERheXMoa2V5cyl7CiAgICB2YXIgZ29vZCA9IDAsIG4gPSAwOwogICAgZm9yKHZhciBpPTA7aTxrZXlzLmxlbmd0aDtpKyspewogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba2V5c1tpXV07CiAgICAgIGlmKCFlIHx8IHR5cGVvZiBlLnN0b29sICE9PSAibnVtYmVyIil7IGNvbnRpbnVlOyB9CiAgICAgIG4rKzsKICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kKys7IH0KICAgIH0KICAgIHJldHVybiB7IG46biwgZ29vZDpnb29kLCBwY3Q6IG4gPyBNYXRoLnJvdW5kKGdvb2QvbioxMDApIDogMCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSBLbGF2aXlvIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24ga2xhdml5b1N1YnNjcmliZShlbWFpbCwgZG9nKXsKICAgIHZhciBLID0gQ0ZHLmtsYXZpeW87CiAgICBpZighSy5jb21wYW55SWQgfHwgIUsubGlzdElkKXsgcmV0dXJuOyB9CiAgICBpZighZW1haWwpeyByZXR1cm47IH0KICAgIGlmKHR5cGVvZiB3aW5kb3cuZmV0Y2ggIT09ICJmdW5jdGlvbiIpeyByZXR1cm47IH0KICAgIGlmKChzdGF0ZS5zdWJzY3JpYmVUcmllcyB8fCAwKSA+PSBLLm1heFRyaWVzKXsgcmV0dXJuOyB9CgogICAgc3RhdGUuc3Vic2NyaWJlVHJpZXMgPSAoc3RhdGUuc3Vic2NyaWJlVHJpZXMgfHwgMCkgKyAxOwogICAgc2F2ZSgpOwoKICAgIHZhciBwcm9wcyA9IHsgIlNpZ251cCBTb3VyY2UiOiBLLnNvdXJjZSB9OwogICAgaWYoSy5zZW5kRG9nTmFtZSAmJiBkb2cpeyBwcm9wc1siRG9nIE5hbWUiXSA9IGRvZzsgfQoKICAgIHZhciBwYXlsb2FkID0gewogICAgICBkYXRhOiB7CiAgICAgICAgdHlwZTogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY3VzdG9tX3NvdXJjZTogSy5zb3VyY2UsCiAgICAgICAgICBwcm9maWxlOiB7CiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICB0eXBlOiAicHJvZmlsZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLAogICAgICAgICAgICAgICAgcHJvcGVydGllczogcHJvcHMsCiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB7IGVtYWlsOiB7IG1hcmtldGluZzogeyBjb25zZW50OiAiU1VCU0NSSUJFRCIgfSB9IH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlbGF0aW9uc2hpcHM6IHsKICAgICAgICAgIGxpc3Q6IHsgZGF0YTogeyB0eXBlOiAibGlzdCIsIGlkOiBLLmxpc3RJZCB9IH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgdHJ5ewogICAgICB3aW5kb3cuZmV0Y2goImh0dHBzOi8vYS5rbGF2aXlvLmNvbS9jbGllbnQvc3Vic2NyaXB0aW9ucy8\/Y29tcGFueV9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KEsuY29tcGFueUlkKSwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwgInJldmlzaW9uIjogSy5yZXZpc2lvbiB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLAogICAgICAgIGtlZXBhbGl2ZTogdHJ1ZQogICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzICYmIChyZXMuc3RhdHVzID09PSAyMDIgfHwgcmVzLm9rKSl7CiAgICAgICAgICBzdGF0ZS5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgICAgIHNhdmUoKTsKICAgICAgICB9CiAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKCl7IC8qIG9mZmxpbmUgb3IgYmxvY2tlZCAtIHJldHJpZWQgb24gbmV4dCB2aXNpdCAqLyB9KTsKICAgIH1jYXRjaChlKXsgLyogbmV2ZXIgbGV0IGxlYWQgY2FwdHVyZSBicmVhayB0aGUgdG9vbCAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGdhdGUgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiB2YWxpZEVtYWlsKHYpewogICAgcmV0dXJuIC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF17Mix9JC8udGVzdCh2KTsKICB9CgogIGZ1bmN0aW9uIGluaXRHYXRlKCl7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdhdGVCdG4iKTsKICAgIHZhciBlcnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZUVyciIpOwogICAgdmFyIGVtICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRFbWFpbCIpOwogICAgdmFyIGRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREb2dOYW1lIik7CiAgICBpZighYnRuIHx8ICFlbSl7IHJldHVybjsgfQoKICAgIGZ1bmN0aW9uIGdvKCl7CiAgICAgIHZhciB2ID0gKGVtLnZhbHVlfHwiIikudHJpbSgpOwogICAgICBpZighdmFsaWRFbWFpbCh2KSl7CiAgICAgICAgZXJyLnRleHRDb250ZW50ID0gIlRoYXQgZW1haWwgZG9lc24ndCBsb29rIHJpZ2h0LiBDaGVjayBpdCBhbmQgdHJ5IGFnYWluLiI7CiAgICAgICAgZXJyLmhpZGRlbiA9IGZhbHNlOwogICAgICAgIGVtLmZvY3VzKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVyci5oaWRkZW4gPSB0cnVlOwogICAgICBzdGF0ZSA9IGJsYW5rU3RhdGUoKTsKICAgICAgc3RhdGUuZW1haWwgPSB2OwogICAgICBzdGF0ZS5kb2dOYW1lID0gKGRuICYmIGRuLnZhbHVlID8gZG4udmFsdWUudHJpbSgpLnNsaWNlKDAsNDApIDogIiIpOwogICAgICBzdGF0ZS5jb25zZW50QXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CiAgICAgIHN0YXRlLnN0YXJ0RGF0ZSA9IHRvZGF5S2V5KCk7CiAgICAgIHNhdmUoKTsKICAgICAgb3BlbkFwcCgpOwogICAgICBrbGF2aXlvU3Vic2NyaWJlKHN0YXRlLmVtYWlsLCBzdGF0ZS5kb2dOYW1lKTsKICAgIH0KCiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnbyk7CiAgICBlbS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24oZXYpeyBpZihldi5rZXkgPT09ICJFbnRlciIpeyBnbygpOyB9IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBsb2cgdmlldyAtLS0tLS0tLS0tICovCgogIHZhciBkcmFmdCA9IG51bGw7CgogIGZ1bmN0aW9uIG5ld0RyYWZ0KCl7CiAgICByZXR1cm4geyBzdG9vbDpudWxsLCBlbmVyZ3k6bnVsbCwgYXBwZXRpdGU6bnVsbCwgcmVmdXNlZDpmYWxzZSwgZmxhcmU6bnVsbCwgZmxhZ3M6W10sIHdlaWdodDoiIiB9OwogIH0KCiAgZnVuY3Rpb24gc2VsZWN0ZWREYXkoKXsKICAgIHZhciBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RGF5U2VsIik7CiAgICByZXR1cm4gc2VsICYmIHNlbC52YWx1ZSA\/IHNlbC52YWx1ZSA6IHRvZGF5S2V5KCk7CiAgfQoKICBmdW5jdGlvbiBidWlsZERheVNlbGVjdCgpewogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKCFzZWwpeyByZXR1cm47IH0KICAgIHZhciB0ayA9IHRvZGF5S2V5KCk7CiAgICB2YXIgY3VyRG4gPSBkYXlOdW1iZXIodGspOwogICAgdmFyIG91dCA9IFtdOwogICAgdmFyIHN0YXJ0ID0gY3VyRG4gLSA2OwogICAgaWYoc3RhcnQgPCAxKXsgc3RhcnQgPSAxOyB9CiAgICBmb3IodmFyIGRuID0gY3VyRG47IGRuID49IHN0YXJ0OyBkbi0tKXsKICAgICAgdmFyIGQgPSBwYXJzZUtleShzdGF0ZS5zdGFydERhdGUpOwogICAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgKyAoZG4tMSkpOwogICAgICB2YXIgayA9IGtleU9mKGQpOwogICAgICB2YXIgbGFiZWw7CiAgICAgIGlmKGsgPT09IHRrKXsgbGFiZWwgPSAiVG9kYXkiOyB9CiAgICAgIGVsc2UgaWYoZGF5c0JldHdlZW4oayx0aykgPT09IDEpeyBsYWJlbCA9ICJZZXN0ZXJkYXkiOyB9CiAgICAgIGVsc2UgeyBsYWJlbCA9IGZtdFNob3J0KGspOyB9CiAgICAgIGxhYmVsICs9ICIgIFx1MDBiNyAgRGF5ICIgKyBkbjsKICAgICAgaWYoc3RhdGUuZW50cmllc1trXSl7IGxhYmVsICs9ICIgIFx1MjcxMyI7IH0KICAgICAgb3V0LnB1c2goJzxvcHRpb24gdmFsdWU9IicraysnIj4nK2VzYyhsYWJlbCkrJzwvb3B0aW9uPicpOwogICAgfQogICAgc2VsLmlubmVySFRNTCA9IG91dC5qb2luKCIiKTsKICAgIHNlbC52YWx1ZSA9IHRrOwogIH0KCiAgZnVuY3Rpb24gb3B0QnV0dG9uKGNscywgbGFiZWwsIHN1Yil7CiAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi50eXBlID0gImJ1dHRvbiI7CiAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0ICIgKyBjbHM7CiAgICBiLmlubmVySFRNTCA9IHN1YiA\/ICgnPHNwYW4gY2xhc3M9ImdydC1nbnVtIj4nK2xhYmVsKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhzdWIpKyc8L3NwYW4+JykgOiBlc2MobGFiZWwpOwogICAgcmV0dXJuIGI7CiAgfQoKICBmdW5jdGlvbiBtYXJrR3JvdXAoY29udGFpbmVyLCB2YWx1ZSwgYXR0cil7CiAgICB2YXIga2lkcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgIGZvcih2YXIgaT0wO2k8a2lkcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIHYgPSBraWRzW2ldLmdldEF0dHJpYnV0ZShhdHRyKTsKICAgICAgaWYodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gdil7IGtpZHNbaV0uY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgZWxzZSB7IGtpZHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgiaXMtc2VsIik7IH0KICAgIH0KICB9CgogIC8qIC0tLS0tLS0tLS0gdHJhbnNsYXRhYmxlIG9wdGlvbiBsYWJlbHMgLS0tLS0tLS0tLQogICAgIEV2ZXJ5IG9wdGlvbiBsYWJlbCBpcyB3cml0dGVuIGludG8gdGhlIHBhZ2UgbWFya3VwIHNvIFdQTUwgY2FuIHRyYW5zbGF0ZQogICAgIGl0IG9uIHRoZSAvZGUvIC9lcy8gL2ZyLyAvbmwvIHZlcnNpb25zLiBUaGUgYXJyYXlzIGFib3ZlIGFyZSB0aGUgRW5nbGlzaAogICAgIGZhbGxiYWNrOiBpZiB0aGUgbWFya3VwIGlzIG1pc3Npbmcgb3IgaGFzIGJlZW4gc3RyaXBwZWQsIGVhY2ggYnVpbGRlcgogICAgIGNyZWF0ZXMgaXRzIGJ1dHRvbnMgZXhhY3RseSBhcyBpdCBkaWQgYmVmb3JlLiBUaGUga2V5IHZhbHVlcyAoZGF0YS1nLAogICAgIGRhdGEtdiwgZGF0YS1rKSBhcmUgcmUtYXNzZXJ0ZWQgZnJvbSB0aGUgYXJyYXlzIGFmdGVyIGFkb3B0aW9uLCBzbyB0aGUKICAgICB0b29sIGtlZXBzIHdvcmtpbmcgZXZlbiBpZiBhIHRyYW5zbGF0aW9uIGxheWVyIGFsdGVycyBhbiBhdHRyaWJ1dGUuICovCgogIHZhciBHUkFERV9XT1JEID0gIkdyYWRlIjsKCiAgZnVuY3Rpb24gbGFiZWxUZXh0KGVsKXsKICAgIHJldHVybiAoZWwgJiYgZWwudGV4dENvbnRlbnQpID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICIgIikudHJpbSgpIDogIiI7CiAgfQoKICBmdW5jdGlvbiBhZG9wdEkxOG4oKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEkxOG4iKTsKICAgIGlmKCF3cmFwKXsgcmV0dXJuOyB9CiAgICB2YXIgd3MgPSB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoInNwYW5bZGF0YS13XSIpOwogICAgZm9yKHZhciBpPTA7aTx3cy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIG4gPSBwYXJzZUludCh3c1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtdyIpLCAxMCk7CiAgICAgIHZhciB0ID0gbGFiZWxUZXh0KHdzW2ldKTsKICAgICAgaWYodCAmJiBuID49IDEgJiYgbiA8PSBXRUVLUy5sZW5ndGgpeyBXRUVLU1tuLTFdLnQgPSB0OyB9CiAgICB9CiAgICB2YXIgZyA9IGxhYmVsVGV4dCh3cmFwLnF1ZXJ5U2VsZWN0b3IoJ3NwYW5bZGF0YS10PSJncmFkZSJdJykpOwogICAgaWYoZyl7IEdSQURFX1dPUkQgPSBnOyB9CiAgfQoKICBmdW5jdGlvbiBncmFkZURlc2NMaW5lKG4pewogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIHJldHVybiBnID8gKEdSQURFX1dPUkQgKyAiICIgKyBuICsgIiBcdTIwMTQgIiArIGcuZGVzYykgOiAiIjsKICB9CgogIGZ1bmN0aW9uIHdpcmVHcmFkZSh3cmFwLCBiLCBpZHgpewogICAgdmFyIG4gPSBwYXJzZUludChiLmdldEF0dHJpYnV0ZSgiZGF0YS1nIiksIDEwKTsKICAgIGlmKCEobiA+PSAxICYmIG4gPD0gR1JBREVTLmxlbmd0aCkpeyBuID0gaWR4ICsgMTsgfQogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIGlmKCFnKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgbik7CgogICAgdmFyIGxhYiA9IGxhYmVsVGV4dChiLnF1ZXJ5U2VsZWN0b3IoIi5ncnQtZ2xhYiIpKTsKICAgIHZhciBkZXNjID0gbGFiZWxUZXh0KGIucXVlcnlTZWxlY3RvcigiLmdydC1nZGVzYyIpKTsKICAgIGlmKGxhYil7IGcubGFiID0gbGFiOyB9CiAgICBpZihkZXNjKXsgZy5kZXNjID0gZGVzYzsgfQogICAgYi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBHUkFERV9XT1JEICsgIiAiICsgbiArICIsICIgKyBnLmxhYik7CgogICAgdmFyIGltZyA9IENGRy5ncmFkZUltYWdlc1tuLTFdOwogICAgaWYoaW1nICYmICFiLnF1ZXJ5U2VsZWN0b3IoImltZyIpKXsKICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgIGltLnNyYyA9IGltZzsKICAgICAgaW0uYWx0ID0gIiI7CiAgICAgIGltLnNldEF0dHJpYnV0ZSgibG9hZGluZyIsICJsYXp5Iik7CiAgICAgIGltLm9uZXJyb3IgPSBmdW5jdGlvbigpeyBpbS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyB9OwogICAgICBpZihiLmZpcnN0Q2hpbGQpeyBiLmluc2VydEJlZm9yZShpbSwgYi5maXJzdENoaWxkKTsgfSBlbHNlIHsgYi5hcHBlbmRDaGlsZChpbSk7IH0KICAgIH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnQuc3Rvb2wgPSBuOwogICAgICBtYXJrR3JvdXAod3JhcCwgbiwgImRhdGEtZyIpOwogICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgICAgaWYoZCl7IGQudGV4dENvbnRlbnQgPSBncmFkZURlc2NMaW5lKG4pOyB9CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZEdyYWRlcygpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtZ10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVHcmFkZSh3cmFwLCBleGlzdGluZ1tpXSwgaSk7IH0KICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdyYXAuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IodmFyIGo9MDtqPEdSQURFUy5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKGcsIGl4KXsKICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgIGIudHlwZSA9ICJidXR0b24iOwogICAgICAgIGIuY2xhc3NOYW1lID0gImdydC1vcHQgZ3J0LWdyYWRlIjsKICAgICAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgZy5uKTsKICAgICAgICB2YXIgaW1nID0gQ0ZHLmdyYWRlSW1hZ2VzW2cubi0xXTsKICAgICAgICB2YXIgaHRtbCA9ICIiOwogICAgICAgIGlmKGltZyl7CiAgICAgICAgICBodG1sICs9ICc8aW1nIHNyYz0iJytlc2MoaW1nKSsnIiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIj4nOwogICAgICAgIH0KICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0iZ3J0LWdudW0iPicrZy5uKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhnLmxhYikrJzwvc3Bhbj4nOwogICAgICAgIGIuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICB3cmFwLmFwcGVuZENoaWxkKGIpOwogICAgICAgIHdpcmVHcmFkZSh3cmFwLCBiLCBpeCk7CiAgICAgIH0pKEdSQURFU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB3aXJlQ2hvaWNlKHdyYXAsIGIsIGxpc3QsIGZpZWxkLCBpZHgpewogICAgdmFyIHYgPSBiLmdldEF0dHJpYnV0ZSgiZGF0YS12Iik7CiAgICB2YXIgbyA9IG51bGw7CiAgICBmb3IodmFyIGk9MDtpPGxpc3QubGVuZ3RoO2krKyl7IGlmKGxpc3RbaV0udiA9PT0gdil7IG8gPSBsaXN0W2ldOyBicmVhazsgfSB9CiAgICBpZighbyl7IG8gPSBsaXN0W2lkeF07IH0KICAgIGlmKCFvKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS12Iiwgby52KTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBvLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnRbZmllbGRdID0gby52OwogICAgICBtYXJrR3JvdXAod3JhcCwgby52LCAiZGF0YS12Iik7CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZENob2ljZShpZCwgbGlzdCwgZmllbGQpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtdl0iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVDaG9pY2Uod3JhcCwgZXhpc3RpbmdbaV0sIGxpc3QsIGZpZWxkLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8bGlzdC5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKG8sIGl4KXsKICAgICAgICB2YXIgYiA9IG9wdEJ1dHRvbigiIiwgby5sYWIpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCJkYXRhLXYiLCBvLnYpOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUNob2ljZSh3cmFwLCBiLCBsaXN0LCBmaWVsZCwgaXgpOwogICAgICB9KShsaXN0W2pdLCBqKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHdpcmVGbGFnKHdyYXAsIGIsIGlkeCl7CiAgICB2YXIgayA9IGIuZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgIHZhciBmID0gbnVsbDsKICAgIGZvcih2YXIgaT0wO2k8RkxBR1MubGVuZ3RoO2krKyl7IGlmKEZMQUdTW2ldLmsgPT09IGspeyBmID0gRkxBR1NbaV07IGJyZWFrOyB9IH0KICAgIGlmKCFmKXsgZiA9IEZMQUdTW2lkeF07IH0KICAgIGlmKCFmKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1rIiwgZi5rKTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBmLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgdmFyIGl4ID0gZHJhZnQuZmxhZ3MuaW5kZXhPZihmLmspOwogICAgICBpZihpeCA+IC0xKXsgZHJhZnQuZmxhZ3Muc3BsaWNlKGl4LDEpOyBiLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9CiAgICAgIGVsc2UgeyBkcmFmdC5mbGFncy5wdXNoKGYuayk7IGIuY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgYi5ibHVyKCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkRmxhZ3MoKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEZsYWdzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEta10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVGbGFnKHdyYXAsIGV4aXN0aW5nW2ldLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8RkxBR1MubGVuZ3RoO2orKyl7CiAgICAgIChmdW5jdGlvbihmLCBpeCl7CiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICBiLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0IGdydC1jaGVjayI7CiAgICAgICAgYi5zZXRBdHRyaWJ1dGUoImRhdGEtayIsIGYuayk7CiAgICAgICAgYi50ZXh0Q29udGVudCA9IGYubGFiOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUZsYWcod3JhcCwgYiwgaXgpOwogICAgICB9KShGTEFHU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBsb2FkRHJhZnRGb3Ioayl7CiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CiAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba107CiAgICBpZihlKXsKICAgICAgZHJhZnQuc3Rvb2wgPSAodHlwZW9mIGUuc3Rvb2wgPT09ICJudW1iZXIiKSA\/IGUuc3Rvb2wgOiBudWxsOwogICAgICBkcmFmdC5lbmVyZ3kgPSBlLmVuZXJneSB8fCBudWxsOwogICAgICBkcmFmdC5hcHBldGl0ZSA9IGUuYXBwZXRpdGUgfHwgbnVsbDsKICAgICAgZHJhZnQucmVmdXNlZCA9ICEhZS5yZWZ1c2VkOwogICAgICBkcmFmdC5mbGFyZSA9IGUuZmxhcmUgfHwgbnVsbDsKICAgICAgZHJhZnQuZmxhZ3MgPSAoZS5mbGFncyB8fCBbXSkuc2xpY2UoKTsKICAgIH0KICAgIGlmKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCl7IGRyYWZ0LndlaWdodCA9IFN0cmluZyhzdGF0ZS53ZWlnaHRzW2tdKTsgfQoKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIiksIGRyYWZ0LnN0b29sLCAiZGF0YS1nIik7CiAgICBtYXJrR3JvdXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVuZXJneSIpLCBkcmFmdC5lbmVyZ3ksICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0QXBwZXRpdGUiKSwgZHJhZnQuYXBwZXRpdGUsICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhcmUiKSwgZHJhZnQuZmxhcmUsICJkYXRhLXYiKTsKCiAgICB2YXIgZGVzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgIGlmKGRlc2MpewogICAgICBkZXNjLnRleHRDb250ZW50ID0gZHJhZnQuc3Rvb2wgPyBncmFkZURlc2NMaW5lKGRyYWZ0LnN0b29sKSA6ICIiOwogICAgfQoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsgaWYoZHJhZnQucmVmdXNlZCl7IHJlZi5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsgcmVmLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9IH0KCiAgICB2YXIgZncgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhZ3MiKTsKICAgIGlmKGZ3KXsKICAgICAgdmFyIGtpZHMgPSBmdy5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgICAgZm9yKHZhciBpPTA7aTxraWRzLmxlbmd0aDtpKyspewogICAgICAgIHZhciBrayA9IGtpZHNbaV0uZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgICAgICBpZihkcmFmdC5mbGFncy5pbmRleE9mKGtrKSA+IC0xKXsga2lkc1tpXS5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsga2lkc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1zZWwiKTsgfQogICAgICB9CiAgICB9CgogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy52YWx1ZSA9IGRyYWZ0LndlaWdodDsgfQoKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheU1ldGEiKTsKICAgIGlmKG1ldGEpewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoayk7CiAgICAgIGlmKGRuID4gQ0ZHLnJlc2V0RGF5cyl7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIFx1MDBiNyByZXNldCBjb21wbGV0ZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIG9mICIrQ0ZHLnJlc2V0RGF5cysiIFx1MDBiNyBXZWVrICIrd2Vla09mKGRuKSsiOiAiK1dFRUtTW3dlZWtPZihkbiktMV0udDsKICAgICAgfQogICAgfQoKICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoYnRuKXsgYnRuLnRleHRDb250ZW50ID0gc3RhdGUuZW50cmllc1trXSA\/ICJVcGRhdGUgdGhpcyBkYXkiIDogIlNhdmUgdGhpcyBkYXkiOyB9CiAgfQoKICBmdW5jdGlvbiBzYXZlRGF5KCl7CiAgICB2YXIgayA9IHNlbGVjdGVkRGF5KCk7CiAgICB2YXIgdG9hc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VG9hc3QiKTsKICAgIGlmKGRyYWZ0LnN0b29sID09PSBudWxsKXsKICAgICAgaWYodG9hc3QpewogICAgICAgIHRvYXN0LnRleHRDb250ZW50ID0gIlBpY2sgYSBzdG9vbCBzY29yZSBmaXJzdCBcdTIwMTQgaXQncyB0aGUgb25lIGZpZWxkIHRoZSB0cmVuZCBpcyBidWlsdCBvbi4iOwogICAgICAgIHRvYXN0LmhpZGRlbiA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdyYWRlcyIpOwogICAgICBpZihnICYmIGcuc2Nyb2xsSW50b1ZpZXcpeyBnLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIn0pOyB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKHRvYXN0KXsgdG9hc3QuaGlkZGVuID0gdHJ1ZTsgfQoKICAgIHN0YXRlLmVudHJpZXNba10gPSB7CiAgICAgIHN0b29sOiBkcmFmdC5zdG9vbCwKICAgICAgZW5lcmd5OiBkcmFmdC5lbmVyZ3ksCiAgICAgIGFwcGV0aXRlOiBkcmFmdC5hcHBldGl0ZSwKICAgICAgcmVmdXNlZDogISFkcmFmdC5yZWZ1c2VkLAogICAgICBmbGFyZTogZHJhZnQuZmxhcmUsCiAgICAgIGZsYWdzOiBkcmFmdC5mbGFncy5zbGljZSgpLAogICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpCiAgICB9OwoKICAgIHZhciB3RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICB2YXIgd3YgPSB3RWwgPyBwYXJzZUZsb2F0KHdFbC52YWx1ZSkgOiBOYU47CiAgICBpZighaXNOYU4od3YpICYmIHd2ID4gMCl7IHN0YXRlLndlaWdodHNba10gPSBNYXRoLnJvdW5kKHd2KjEwKS8xMDsgfQogICAgZWxzZSBpZihzdGF0ZS53ZWlnaHRzW2tdICE9IG51bGwgJiYgKCF3RWwgfHwgd0VsLnZhbHVlID09PSAiIikpeyBkZWxldGUgc3RhdGUud2VpZ2h0c1trXTsgfQoKICAgIHNhdmUoKTsKICAgIGJ1aWxkRGF5U2VsZWN0KCk7CiAgICB2YXIgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheVNlbCIpOwogICAgaWYoc2VsKXsgc2VsLnZhbHVlID0gazsgfQogICAgbG9hZERyYWZ0Rm9yKGspOwogICAgc2hvd1RhYigicHJvZyIpOwogICAgc2Nyb2xsVG9Ub29sKCk7CiAgfQoKICBmdW5jdGlvbiBzY3JvbGxUb1Rvb2woKXsKICAgIHRyeXsKICAgICAgaWYoIXJvb3QgfHwgdHlwZW9mIHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAiZnVuY3Rpb24iKXsgcmV0dXJuOyB9CiAgICAgIHZhciB0b3AgPSAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMCk7CiAgICAgIHZhciB5ID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0b3AgLSBDRkcuc2Nyb2xsT2Zmc2V0OwogICAgICBpZih5IDwgMCl7IHkgPSAwOyB9CiAgICAgIHZhciBzbW9vdGggPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgaWYod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyl7IHNtb290aCA9IGZhbHNlOyB9CiAgICAgIH1jYXRjaChlKXt9CiAgICAgIGlmKHNtb290aCl7CiAgICAgICAgdHJ5eyB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6eSwgYmVoYXZpb3I6InNtb290aCIgfSk7IHJldHVybjsgfWNhdGNoKGUpe30KICAgICAgfQogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgeSk7CiAgICB9Y2F0Y2goZSl7fQogIH0KCiAgLyogLS0tLS0tLS0tLSB2ZXQgZ2F0ZSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHZldENoZWNrKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgZm91bmQgPSBbXTsKICAgIHZhciByZWNlbnQgPSBrcy5zbGljZSgtMyk7CiAgICBmb3IodmFyIGk9MDtpPHJlY2VudC5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGUgPSBzdGF0ZS5lbnRyaWVzW3JlY2VudFtpXV07CiAgICAgIGlmKCFlIHx8ICFlLmZsYWdzKXsgY29udGludWU7IH0KICAgICAgZm9yKHZhciBqPTA7ajxlLmZsYWdzLmxlbmd0aDtqKyspewogICAgICAgIGlmKGUuZmxhZ3Nbal0gPT09ICJmb3JlaWduIil7IGNvbnRpbnVlOyB9CiAgICAgICAgaWYoZm91bmQuaW5kZXhPZihlLmZsYWdzW2pdKSA9PT0gLTEpeyBmb3VuZC5wdXNoKGUuZmxhZ3Nbal0pOyB9CiAgICAgIH0KICAgIH0KICAgIHZhciBydW43ID0gMCwgcnVuNjcgPSAwLCBzdG9wNyA9IGZhbHNlLCBzdG9wNjcgPSBmYWxzZTsKICAgIGZvcih2YXIgbSA9IGtzLmxlbmd0aC0xOyBtID49IDA7IG0tLSl7CiAgICAgIHZhciBlbiA9IHN0YXRlLmVudHJpZXNba3NbbV1dOwogICAgICB2YXIgZyA9IGVuID8gZW4uc3Rvb2wgOiBudWxsOwogICAgICBpZighc3RvcDcpeyBpZihnID09PSA3KXsgcnVuNysrOyB9IGVsc2UgeyBzdG9wNyA9IHRydWU7IH0gfQogICAgICBpZighc3RvcDY3KXsgaWYoZyA9PT0gNiB8fCBnID09PSA3KXsgcnVuNjcrKzsgfSBlbHNlIHsgc3RvcDY3ID0gdHJ1ZTsgfSB9CiAgICAgIGlmKHN0b3A3ICYmIHN0b3A2Nyl7IGJyZWFrOyB9CiAgICB9CiAgICB2YXIgd2F0ZXJ5UnVuID0gcnVuNyA+PSAzOwogICAgdmFyIGxvb3NlUnVuID0gcnVuNjcgPj0gNTsKICAgIGlmKCFmb3VuZC5sZW5ndGggJiYgIXdhdGVyeVJ1biAmJiAhbG9vc2VSdW4peyByZXR1cm4gIiI7IH0KCiAgICB2YXIgaXRlbXMgPSBbXTsKICAgIGZvcih2YXIgZj0wOyBmPGZvdW5kLmxlbmd0aDsgZisrKXsKICAgICAgZm9yKHZhciBnMj0wOyBnMjxGTEFHUy5sZW5ndGg7IGcyKyspewogICAgICAgIGlmKEZMQUdTW2cyXS5rID09PSBmb3VuZFtmXSl7IGl0ZW1zLnB1c2goIjxsaT4iK2VzYyhGTEFHU1tnMl0ubGFiKSsiPC9saT4iKTsgfQogICAgICB9CiAgICB9CiAgICBpZih3YXRlcnlSdW4peyBpdGVtcy5wdXNoKCI8bGk+V2F0ZXJ5IHN0b29sIChncmFkZSA3KSB0aHJlZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQogICAgZWxzZSBpZihsb29zZVJ1bil7IGl0ZW1zLnB1c2goIjxsaT5EaWFycmhvZWEgKGdyYWRlIDYgb3IgNykgZml2ZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXZldCI+JyArCiAgICAgICc8aDU+Qm9vayBhIHZldCBhcHBvaW50bWVudDwvaDU+JyArCiAgICAgICc8cD5Zb3VcdTIwMTl2ZSBsb2dnZWQgc29tZXRoaW5nIGluIHRoZSBsYXN0IGZldyBkYXlzIHRoYXQgbmVlZHMgYSBwcm9mZXNzaW9uYWwgbG9vayByYXRoZXIgdGhhbiBtb3JlIHRyYWNraW5nOjwvcD4nICsKICAgICAgJzx1bD4nK2l0ZW1zLmpvaW4oIiIpKyc8L3VsPicgKwogICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+S2VlcCBsb2dnaW5nIGlmIGl0IGhlbHBzIHlvdSBkZXNjcmliZSB0aGUgcGF0dGVybiB0byB5b3VyIHZldCBcdTIwMTQgYnV0IGRvblx1MjAxOXQgd2FpdCBvbiB0aGUgMzAtZGF5IHRyZW5kIHRvIGRlY2lkZS4gQ2FsbCB0aGVtLjwvcD4nICsKICAgICAgJzwvZGl2Pic7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGhlcm8gLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBwY3RCbG9jayhjdXIsIHByZXZQY3QsIHByZXZMYWJlbCwgY3VyTGFiZWwsIG5vdGUpewogICAgdmFyIGRlbHRhID0gY3VyLnBjdCAtIHByZXZQY3Q7CiAgICB2YXIgY2xzID0gZGVsdGEgPiAwID8gInVwIiA6IChkZWx0YSA8IDAgPyAiZG93biIgOiAiZmxhdCIpOwogICAgdmFyIGFycm93ID0gZGVsdGEgPiAwID8gIlx1MjViMiIgOiAoZGVsdGEgPCAwID8gIlx1MjViYyIgOiAiXHUyMDEzIik7CiAgICB2YXIgY21wID0gIiI7CiAgICBpZihwcmV2UGN0ICE9PSBudWxsKXsKICAgICAgY21wID0gJzxwIGNsYXNzPSJncnQtaGVyby1jbXAiPjxzcGFuIGNsYXNzPSJncnQtZGVsdGEgJytjbHMrJyI+JythcnJvdysiICIrTWF0aC5hYnMoZGVsdGEpKyIgcG9pbnRzPC9zcGFuPiB2cyAiK2VzYyhwcmV2TGFiZWwpKyIgKCIrcHJldlBjdCsiJSk8L3A+IjsKICAgIH0KICAgIHJldHVybiAnPHAgY2xhc3M9ImdydC1oZXJvLWV5ZWJyb3ciPicrZXNjKGN1ckxhYmVsKSsnPC9wPicgKwogICAgICAnPHAgY2xhc3M9ImdydC1oZXJvLW51bSI+JytjdXIucGN0Kyc8c3BhbiBjbGFzcz0iZ3J0LWhlcm8tdW5pdCI+JTwvc3Bhbj48L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbGFiIj5nb29kIGRheXMgZm9yICcrZG9nTmFtZSgpKyc8L3A+JyArCiAgICAgIGNtcCArCiAgICAgIChub3RlID8gJzxwIGNsYXNzPSJncnQtaGVyby1ub3RlIj4nK25vdGUrJzwvcD4nIDogIiIpOwogIH0KCiAgZnVuY3Rpb24gaGVyb0hUTUwoKXsKICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIHZhciBuID0ga3MubGVuZ3RoOwoKICAgIGlmKG4gPCA3KXsKICAgICAgdmFyIGxlZnQgPSA3IC0gbjsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtaGVybyI+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1leWVicm93Ij5CdWlsZGluZyB5b3VyIGJhc2VsaW5lPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbnVtIj4nK24rJzxzcGFuIGNsYXNzPSJncnQtaGVyby11bml0Ij4vNzwvc3Bhbj48L3A+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1sYWIiPmRheXMgbG9nZ2VkPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tY21wIj5LZWVwIGdvaW5nIFx1MjAxNCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZpcnN0IHRyZW5kIHVubG9ja3MgYWZ0ZXIgJytsZWZ0KycgbW9yZSAnKyhsZWZ0PT09MT8iZGF5IjoiZGF5cyIpKycuPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbm90ZSI+V2VlayAxIGlzIHlvdXIgYmFzZWxpbmUuIEV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzIGlzIG1lYXN1cmVkIGFnYWluc3QgaXQsIHNvIGxvZyBpdCBob25lc3RseSByYXRoZXIgdGhhbiBvcHRpbWlzdGljYWxseS48L3A+JyArCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgdmFyIGJvZHksIG5vdGUgPSAiIjsKICAgIGlmKHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIpewogICAgICB2YXIgcmVjZW50ID0ga3Muc2xpY2UoLTcpOwogICAgICB2YXIgcHJldiA9IGtzLnNsaWNlKC0xNCwgLTcpOwogICAgICB2YXIgckN1ciA9IGdvb2REYXlzKHJlY2VudCk7CiAgICAgIGlmKHByZXYubGVuZ3RoIDwgMyl7CiAgICAgICAgbm90ZSA9ICJZb3VyIHByZXZpb3VzIDctZGF5IHdpbmRvdyBmaWxscyBvdXQgYXMgeW91IGxvZyBtb3JlIGRheXMuIjsKICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgbnVsbCwgIiIsICJMYXN0IDcgbG9nZ2VkIGRheXMiLCBub3RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgclByZXYgPSBnb29kRGF5cyhwcmV2KTsKICAgICAgICBpZihwcmV2Lmxlbmd0aCA8IDcpeyBub3RlID0gIkNvbXBhcmVkIGFnYWluc3QgdGhlICIrcHJldi5sZW5ndGgrIiBkYXlzIGJlZm9yZSB0aGF0LiI7IH0KICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgclByZXYucGN0LCAidGhlIDcgZGF5cyBiZWZvcmUiLCAiTGFzdCA3IGxvZ2dlZCBkYXlzIiwgbm90ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBiYXNlID0ga3Muc2xpY2UoMCw3KTsKICAgICAgdmFyIGxhdGVzdCA9IGtzLnNsaWNlKC03KTsKICAgICAgdmFyIGxDdXIgPSBnb29kRGF5cyhsYXRlc3QpOwogICAgICB2YXIgbEJhc2UgPSBnb29kRGF5cyhiYXNlKTsKICAgICAgaWYobiA8IDE0KXsKICAgICAgICBub3RlID0gIllvdXIgbGF0ZXN0IHdlZWsgc3RpbGwgb3ZlcmxhcHMgeW91ciBiYXNlbGluZSB3ZWVrLiBJdCBzZXBhcmF0ZXMgZnVsbHkgYXQgMTQgbG9nZ2VkIGRheXMuIjsKICAgICAgfQogICAgICBib2R5ID0gcGN0QmxvY2sobEN1ciwgbEJhc2UucGN0LCAieW91ciBmaXJzdCB3ZWVrIiwgIkxhdGVzdCB3ZWVrIiwgbm90ZSk7CiAgICB9CgogICAgdmFyIHQxID0gc3RhdGUuaGVyb01vZGUgPT09ICJiYXNlbGluZSIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0MiA9IHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0b2dnbGUgPSAnPGRpdiBjbGFzcz0iZ3J0LXRvZ2dsZSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkNvbXBhcmlzb24gYmFzaXMiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtaG0nK3QxKyciIGRhdGEtbW9kZT0iYmFzZWxpbmUiPnZzIGZpcnN0IHdlZWs8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZ3J0LWhtJyt0MisnIiBkYXRhLW1vZGU9InJvbGxpbmciPnZzIHByZXZpb3VzIDcgZGF5czwvYnV0dG9uPicgKwogICAgICAnPC9kaXY+JzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1oZXJvIj4nICsgYm9keSArIHRvZ2dsZSArICc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gdXBncmFkZUhUTUwoKXsKICAgIGlmKHN0YXRlLnVwZ3JhZGVEaXNtaXNzZWQpeyByZXR1cm4gIiI7IH0KICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIGlmKGtzLmxlbmd0aCA8IDMpeyByZXR1cm4gIiI7IH0KICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXVwZ3JhZGUiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtZGlzbWlzcyIgaWQ9ImdydFVwRGlzbWlzcyIgYXJpYS1sYWJlbD0iSGlkZSB0aGlzIj5cdTAwZDc8L2J1dHRvbj4nICsKICAgICAgJzxoNT5LZWVwIHRoaXMgaGlzdG9yeSBmb3IgZ29vZDwvaDU+JyArCiAgICAgICc8cD5UaGVzZSBsb2dzIGxpdmUgaW4gdGhpcyBicm93c2VyLCBvbiB0aGlzIGRldmljZS4gQ2xlYXIgeW91ciBicm93c2luZyBkYXRhIGFuZCB0aGV5XHUyMDE5cmUgZ29uZS4gQSBCb256YSBhY2NvdW50IHdpbGwga2VlcCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZ1bGwgaGlzdG9yeSBzYWZlLCBzeW5jIGl0IGFjcm9zcyB5b3VyIHBob25lIGFuZCBsYXB0b3AsIGFuZCBsZXQgeW91IGFzayBxdWVzdGlvbnMgb2YgeW91ciBvd24gZGF0YS4gV2VcdTIwMTlsbCBlbWFpbCB5b3UgdGhlIG1vbWVudCBpdFx1MjAxOXMgcmVhZHkuPC9wPicgKwogICAgICAnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHJpbmdIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgbG9nZ2VkID0ga3MubGVuZ3RoOwogICAgdmFyIGRuID0gZGF5TnVtYmVyKHRvZGF5S2V5KCkpOwogICAgdmFyIHBjdCA9IE1hdGgubWluKDEsIGxvZ2dlZCAvIENGRy5yZXNldERheXMpOwogICAgdmFyIHIgPSAzOCwgYyA9IDIgKiBNYXRoLlBJICogcjsKICAgIHZhciBkYXNoID0gKGMgKiBwY3QpLnRvRml4ZWQoMSkgKyAiICIgKyBjLnRvRml4ZWQoMSk7CiAgICB2YXIgbGluZTI7CiAgICBpZihkbiA+IENGRy5yZXNldERheXMpewogICAgICBsaW5lMiA9ICJZb3VyIDMwIGRheXMgYXJlIHVwLiBSZWFzc2VzcyBhZ2FpbnN0IFdlZWsgMSBcdTIwMTQgYW5kIGtlZXAgdGhlIGhhYml0cyB0aGF0IHdvcmtlZC4iOwogICAgfSBlbHNlIHsKICAgICAgbGluZTIgPSAiRGF5ICIrZG4rIiBvZiAiK0NGRy5yZXNldERheXMrIiBcdTAwYjcgV2VlayAiK3dlZWtPZihkbikrIjogIitXRUVLU1t3ZWVrT2YoZG4pLTFdLnQ7CiAgICB9CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1yaW5nd3JhcCI+JyArCiAgICAgICc8c3ZnIGNsYXNzPSJncnQtcmluZyIgdmlld0JveD0iMCAwIDkyIDkyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JyArCiAgICAgICc8Y2lyY2xlIGN4PSI0NiIgY3k9IjQ2IiByPSInK3IrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjkiPjwvY2lyY2xlPicgKwogICAgICAnPGNpcmNsZSBjeD0iNDYiIGN5PSI0NiIgcj0iJytyKyciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIitQQUwuZ3JlZW4rIiIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1kYXNoYXJyYXk9IicrZGFzaCsnIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgNDYgNDYpIj48L2NpcmNsZT4nICsKICAgICAgJzx0ZXh0IHg9IjQ2IiB5PSI1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiPicrbG9nZ2VkKyc8L3RleHQ+JyArCiAgICAgICc8dGV4dCB4PSI0NiIgeT0iNjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iIitQQUwubXV0ZWQrIiI+b2YgMzA8L3RleHQ+JyArCiAgICAgICc8L3N2Zz4nICsKICAgICAgJzxkaXYgY2xhc3M9ImdydC1yaW5ndGV4dCI+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MSI+Jytsb2dnZWQrJyAnKyhsb2dnZWQ9PT0xPyJkYXkiOiJkYXlzIikrJyBsb2dnZWQ8L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MiI+Jytlc2MobGluZTIpKyc8L3A+JyArCiAgICAgICc8L2Rpdj48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla3NIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF0sIGdvb2QgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pIC0gMTsKICAgICAgY291bnRzW3ddKys7CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trc1tpXV07CiAgICAgIGlmKGUuZmxhcmUgPT09ICJ5ZXMiKXsgZmxhcmVzW3ddKys7IH0KICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kW3ddKys7IH0KICAgIH0KICAgIHZhciBjdXJXID0gd2Vla09mKGRheU51bWJlcih0b2RheUtleSgpKSk7CiAgICB2YXIgb3V0ID0gJzxoNT5Zb3VyIGZvdXIgcmVzZXQgd2Vla3M8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlN0cmFpZ2h0IGZyb20gdGhlIGVCb29rIHByb3RvY29sLiBXZWVrIDEgaXMgdGhlIGJhc2VsaW5lIGV2ZXJ5dGhpbmcgZWxzZSBpcyBtZWFzdXJlZCBhZ2FpbnN0LjwvcD48ZGl2IGNsYXNzPSJncnQtd2Vla3MiPic7CiAgICBmb3IodmFyIHcyPTA7IHcyPDQ7IHcyKyspewogICAgICB2YXIgaXNOb3cgPSAodzIrMSA9PT0gY3VyVyAmJiBkYXlOdW1iZXIodG9kYXlLZXkoKSkgPD0gQ0ZHLnJlc2V0RGF5cykgPyAiIGlzLW5vdyIgOiAiIjsKICAgICAgdmFyIGRldGFpbCA9IGNvdW50c1t3Ml0gPyAoY291bnRzW3cyXSsiLzcgbG9nZ2VkIFx1MDBiNyAiKyhjb3VudHNbdzJdID8gTWF0aC5yb3VuZChnb29kW3cyXS9jb3VudHNbdzJdKjEwMCkgOiAwKSsiJSBnb29kIikgOiAibm90IHN0YXJ0ZWQiOwogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImdydC13ZWVrJytpc05vdysnIj48c3BhbiBjbGFzcz0iZ3J0LXdrIj5XJysodzIrMSkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhXRUVLU1t3Ml0udCkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhkZXRhaWwpKyc8L3NwYW4+PC9kaXY+JzsKICAgIH0KICAgIG91dCArPSAiPC9kaXY+IjsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tICovCgogIC8qIFRoZSB0cmVuZCBjaGFydHMgdXNlIGEgNjAwLXVuaXQgdmlld0JveCBzY2FsZWQgdG8gZml0IHRoZSBjYXJkLCBzbyBvbiBhIHBob25lCiAgICAgZXZlcnl0aGluZyBpbnNpZGUgc2hyaW5rcyB3aXRoIGl0IC0gYSAxMC11bml0IGF4aXMgbGFiZWwgbGFuZHMgYXQgYWJvdXQgNXB4IG9uCiAgICAgYSAzOTBweCBzY3JlZW4uIEZTQ0FMRSBpcyB0aGUgaW52ZXJzZSBvZiB0aGF0IGRpc3BsYXkgc2NhbGUsIGFwcGxpZWQgdG8gdGV4dCwKICAgICBkb3QgcmFkaWkgYW5kIGRhdGEtbGluZSB3ZWlnaHRzIHNvIHRoZXkgaG9sZCBhIGNvbnN0YW50IHBoeXNpY2FsIHNpemUuIFRoZSByaW5nCiAgICAgaXMgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkOiBpdCByZW5kZXJzIGF0IGEgZml4ZWQgOTJweCBhbmQgbmV2ZXIgc2NhbGVzLiAqLwogIHZhciBGU0NBTEUgPSAxOwoKICBmdW5jdGlvbiBmc3oobil7IHJldHVybiBNYXRoLnJvdW5kKG4gKiBGU0NBTEUgKiAxMCkgLyAxMDsgfQoKICBmdW5jdGlvbiBjaGFydFNjYWxlKCl7CiAgICB2YXIgdyA9IDA7CiAgICB0cnl7CiAgICAgIHZhciBzbG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydENoYXJ0c1Nsb3QiKTsKICAgICAgaWYoc2xvdCAmJiBzbG90LmNsaWVudFdpZHRoKXsgdyA9IHNsb3QuY2xpZW50V2lkdGggLSAzODsgfQogICAgICBlbHNlIGlmKHJvb3QgJiYgcm9vdC5jbGllbnRXaWR0aCl7IHcgPSByb290LmNsaWVudFdpZHRoIC0gNzQ7IH0KICAgIH1jYXRjaChlKXt9CiAgICBpZighdyB8fCB3IDwgMTQwKXsgcmV0dXJuIDE7IH0KICAgIHZhciBzYyA9IDYwMCAvIHc7CiAgICBpZihzYyA8IDEpeyBzYyA9IDE7IH0KICAgIGlmKHNjID4gMi40KXsgc2MgPSAyLjQ7IH0KICAgIHJldHVybiBzYzsKICB9CgoKICBmdW5jdGlvbiBzdG9vbENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gbG9nZ2VkS2V5cygpOwogICAgdmFyIHB0cyA9IFtdOwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGtzW2ldKTsKICAgICAgaWYoZG4gPCAxIHx8IGRuID4gQ0ZHLnJlc2V0RGF5cyl7IGNvbnRpbnVlOyB9CiAgICAgIHB0cy5wdXNoKHsgZDpkbiwgZzpzdGF0ZS5lbnRyaWVzW2tzW2ldXS5zdG9vbCB9KTsKICAgIH0KICAgIGlmKHB0cy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PlN0b29sIHNjb3JlIG92ZXIgdGhlIHJlc2V0PC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Ud28gbG9nZ2VkIGRheXMgYW5kIHRoaXMgY2hhcnQgYXBwZWFycy48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIxMCwgcGFkTCA9IDMwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKENGRy5yZXNldERheXMtMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWShnKXsgcmV0dXJuIHBhZFQgKyAoZy0xKS82ICogcGg7IH0KCiAgICB2YXIgcyA9ICc8c3ZnIGNsYXNzPSJncnQtY2hhcnQiIHZpZXdCb3g9IjAgMCAnK1crJyAnK0grJyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJTdG9vbCBzY29yZSBmb3IgZWFjaCBsb2dnZWQgZGF5IG9mIHRoZSAzMC1kYXkgcmVzZXQiPic7CiAgICBzICs9ICc8cmVjdCB4PSInK3BhZEwrJyIgeT0iJytZKDIpLnRvRml4ZWQoMSkrJyIgd2lkdGg9IicrcHcrJyIgaGVpZ2h0PSInKyhZKDMpLVkoMikpLnRvRml4ZWQoMSkrJyIgZmlsbD0iIitQQUwudGludCsiIj48L3JlY3Q+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwrNikrJyIgeT0iJysoWSgyKSsxMykudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIiK1BBTC5ncmVlbisiIj5oZWFsdGh5IHJhbmdlPC90ZXh0Pic7CgogICAgZm9yKHZhciBnPTE7IGc8PTc7IGcrKyl7CiAgICAgIHMgKz0gJzxsaW5lIHgxPSInK3BhZEwrJyIgeTE9IicrWShnKS50b0ZpeGVkKDEpKyciIHgyPSInKyhXLXBhZFIpKyciIHkyPSInK1koZykudG9GaXhlZCgxKSsnIiBzdHJva2U9IiIrUEFMLnRyYWNrKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwtOCkrJyIgeT0iJysoWShnKSs0KS50b0ZpeGVkKDEpKyciIGZvbnQtc2l6ZT0iJytmc3ooMTApKyciIGZpbGw9IiIrUEFMLm11dGVkKyIiIHRleHQtYW5jaG9yPSJlbmQiPicrZysnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIHdrPTE7IHdrPD00OyB3aysrKXsKICAgICAgdmFyIHhkID0gWCh3ayo3ICsgMSk7CiAgICAgIGlmKHdrIDwgNCl7CiAgICAgICAgcyArPSAnPGxpbmUgeDE9IicreGQudG9GaXhlZCgxKSsnIiB5MT0iJytwYWRUKyciIHgyPSInK3hkLnRvRml4ZWQoMSkrJyIgeTI9IicrKHBhZFQrcGgpKyciIHN0cm9rZT0iIitQQUwuZGl2aWRlcisiIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyI+PC9saW5lPic7CiAgICAgIH0KICAgICAgcyArPSAnPHRleHQgeD0iJysoWCgod2stMSkqNysxKSs0KS50b0ZpeGVkKDEpKyciIHk9IicrKEgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIitQQUwubXV0ZWQrIiI+Vycrd2srJzwvdGV4dD4nOwogICAgfQoKICAgIHZhciBkcGF0aCA9ICIiOwogICAgZm9yKHZhciBwPTA7cDxwdHMubGVuZ3RoO3ArKyl7CiAgICAgIGRwYXRoICs9IChwPT09MCA\/ICJNIiA6ICJMIikgKyBYKHB0c1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWShwdHNbcF0uZykudG9GaXhlZCgxKSArICIgIjsKICAgIH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHBhdGgrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTxwdHMubGVuZ3RoO3ErKyl7CiAgICAgIHZhciBoZWFsdGh5ID0gSEVBTFRIWS5pbmRleE9mKHB0c1txXS5nKSA+IC0xOwogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1gocHRzW3FdLmQpLnRvRml4ZWQoMSkrJyIgY3k9IicrWShwdHNbcV0uZykudG9GaXhlZCgxKSsnIiByPSInK2Zzeig0KSsnIiBmaWxsPSInKyhoZWFsdGh5ID8gUEFMLmdyZWVuIDogUEFMLnBhcGVyKSsnIiBzdHJva2U9IicrUEFMLmdyZWVuRGVlcCsnIiBzdHJva2Utd2lkdGg9IicrZnN6KDIpKyciPjwvY2lyY2xlPic7CiAgICB9CiAgICBzICs9ICI8L3N2Zz4iOwoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5TdG9vbCBzY29yZSBvdmVyIHRoZSByZXNldDwvaDU+PHAgY2xhc3M9ImdydC1jYXJkaGludCI+TG93ZXIgaXMgZmlybWVyLiBUaGUgZ3JlZW4gYmFuZCBpcyBncmFkZXMgMiB0byAzIFx1MjAxNCB3aGVyZSB5b3Ugd2FudCBtb3N0IGRheXMgdG8gbGFuZC48L3A+JytzKyc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla0JhcnNIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBnb29kID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pLTE7CiAgICAgIGNvdW50c1t3XSsrOwogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba3NbaV1dOwogICAgICBpZihIRUFMVEhZLmluZGV4T2YoZS5zdG9vbCkgPiAtMSl7IGdvb2Rbd10rKzsgfQogICAgICBpZihlLmZsYXJlID09PSAieWVzIil7IGZsYXJlc1t3XSsrOyB9CiAgICB9CiAgICB2YXIgYW55ID0gY291bnRzWzBdK2NvdW50c1sxXStjb3VudHNbMl0rY291bnRzWzNdOwogICAgaWYoIWFueSl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5Hb29kIGRheXMgYW5kIGZsYXJlLXVwcyBieSB3ZWVrPC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Mb2cgYSBmZXcgZGF5cyBhbmQgeW91ciB3ZWVrbHkgY29tcGFyaXNvbiBzdGFydHMgaGVyZS48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIwMCwgcGFkVCA9IDE2LCBwYWRCID0gNDQsIHBhZEwgPSAzNCwgcGFkUiA9IDEyOwogICAgdmFyIHBoID0gSCAtIHBhZFQgLSBwYWRCLCBwdyA9IFcgLSBwYWRMIC0gcGFkUjsKICAgIHZhciBzbG90ID0gcHcvNDsKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IlBlcmNlbnRhZ2Ugb2YgZ29vZCBkYXlzIGluIGVhY2ggcmVzZXQgd2VlayI+JzsKICAgIHZhciBsZXZlbHMgPSBbMCwyNSw1MCw3NSwxMDBdOwogICAgZm9yKHZhciBsPTA7bDxsZXZlbHMubGVuZ3RoO2wrKyl7CiAgICAgIHZhciB5ID0gcGFkVCArIHBoIC0gKGxldmVsc1tsXS8xMDApKnBoOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK2xldmVsc1tsXSsnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIGI9MDtiPDQ7YisrKXsKICAgICAgdmFyIGN4ID0gcGFkTCArIHNsb3QqYiArIHNsb3QvMjsKICAgICAgdmFyIGJ3ID0gTWF0aC5taW4oNjQsIHNsb3QqMC41NSk7CiAgICAgIGlmKGNvdW50c1tiXSl7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoZ29vZFtiXS9jb3VudHNbYl0qMTAwKTsKICAgICAgICB2YXIgYmggPSAocGN0LzEwMCkqcGg7CiAgICAgICAgaWYoYmggPCAyKXsgYmggPSAyOyB9CiAgICAgICAgcyArPSAnPHJlY3QgeD0iJysoY3gtYncvMikudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoKS50b0ZpeGVkKDEpKyciIHdpZHRoPSInK2J3LnRvRml4ZWQoMSkrJyIgaGVpZ2h0PSInK2JoLnRvRml4ZWQoMSkrJyIgcng9IjQiIGZpbGw9IiIrUEFMLmdyZWVuKyIiPjwvcmVjdD4nOwogICAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoLTYpLnRvRml4ZWQoMSkrJyIgZm9udC1zaXplPSInK2ZzeigxMikrJyIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPicrcGN0KyclPC90ZXh0Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcyArPSAnPHRleHQgeD0iJytjeC50b0ZpeGVkKDEpKyciIHk9IicrKHBhZFQrcGgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bm8gZGF0YTwvdGV4dD4nOwogICAgICB9CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoKzE4KSsnIiBmb250LXNpemU9IicrZnN6KDExKSsnIiBmb250LXdlaWdodD0iODAwIiBmaWxsPSIiK1BBTC5pbmsrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2VlayAnKyhiKzEpKyc8L3RleHQ+JzsKICAgICAgdmFyIGZsID0gZmxhcmVzW2JdID09PSAxID8gIjEgZmxhcmUtdXAiIDogKGZsYXJlc1tiXSsiIGZsYXJlLXVwcyIpOwogICAgICBzICs9ICc8dGV4dCB4PSInK2N4LnRvRml4ZWQoMSkrJyIgeT0iJysocGFkVCtwaCszMykrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iJysoZmxhcmVzW2JdID8gUEFMLmFtYmVyRGVlcCA6IFBBTC5tdXRlZCkrJyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JytmbCsnPC90ZXh0Pic7CiAgICB9CiAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInKyhwYWRUK3BoKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJysocGFkVCtwaCkrJyIgc3Ryb2tlPSIiK1BBTC5kaXZpZGVyKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICBzICs9ICI8L3N2Zz4iOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1Pkdvb2QgZGF5cyBhbmQgZmxhcmUtdXBzIGJ5IHdlZWs8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlBlcmNlbnRhZ2Ugb2YgdGhhdCB3ZWVrXHUyMDE5cyBsb2dnZWQgZGF5cyBsYW5kaW5nIGluIGdyYWRlcyAyIHRvIDMuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHdlaWdodENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gW107CiAgICBmb3IodmFyIGsgaW4gc3RhdGUud2VpZ2h0cyl7IGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS53ZWlnaHRzLGspKXsga3MucHVzaChrKTsgfSB9CiAgICBrcy5zb3J0KCk7CiAgICBpZihrcy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PldlaWdodDwvaDU+PHAgY2xhc3M9ImdydC1lbXB0eSI+TG9nIGEgd2VpZ2h0IG9uIHR3byBzZXBhcmF0ZSBkYXlzIHRvIHNlZSB0aGUgbGluZS4gV2Vla2x5IGlzIHBsZW50eS48L3A+PC9kaXY+JzsKICAgIH0KICAgIHZhciB2YWxzID0gW10sIG1pbiA9IEluZmluaXR5LCBtYXggPSAtSW5maW5pdHk7CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgdiA9IHN0YXRlLndlaWdodHNba3NbaV1dOwogICAgICB2YWxzLnB1c2goeyBkOiBkYXlOdW1iZXIoa3NbaV0pLCB2OiB2IH0pOwogICAgICBpZih2IDwgbWluKXsgbWluID0gdjsgfQogICAgICBpZih2ID4gbWF4KXsgbWF4ID0gdjsgfQogICAgfQogICAgdmFyIHNwYW4gPSBtYXggLSBtaW47CiAgICBpZihzcGFuIDwgMC40KXsgbWluIC09IDAuMjsgbWF4ICs9IDAuMjsgc3BhbiA9IG1heCAtIG1pbjsgfQogICAgZWxzZSB7IG1pbiAtPSBzcGFuKjAuMTU7IG1heCArPSBzcGFuKjAuMTU7IHNwYW4gPSBtYXggLSBtaW47IH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDE4MCwgcGFkTCA9IDQwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIHZhciBsYXN0RGF5ID0gTWF0aC5tYXgoQ0ZHLnJlc2V0RGF5cywgdmFsc1t2YWxzLmxlbmd0aC0xXS5kKTsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKGxhc3REYXktMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWSh2KXsgcmV0dXJuIHBhZFQgKyAoMSAtICh2LW1pbikvc3BhbikgKiBwaDsgfQoKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IldlaWdodCBvdmVyIHRoZSByZXNldCI+JzsKICAgIGZvcih2YXIgdD0wO3Q8Mzt0KyspewogICAgICB2YXIgdnYgPSBtaW4gKyBzcGFuKih0LzIpOwogICAgICB2YXIgeSA9IFkodnYpOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK3Z2LnRvRml4ZWQoMSkrJzwvdGV4dD4nOwogICAgfQogICAgdmFyIGRwID0gIiI7CiAgICBmb3IodmFyIHA9MDtwPHZhbHMubGVuZ3RoO3ArKyl7IGRwICs9IChwPT09MD8iTSI6IkwiKSArIFgodmFsc1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWSh2YWxzW3BdLnYpLnRvRml4ZWQoMSkgKyAiICI7IH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHArJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTx2YWxzLmxlbmd0aDtxKyspewogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1godmFsc1txXS5kKS50b0ZpeGVkKDEpKyciIGN5PSInK1kodmFsc1txXS52KS50b0ZpeGVkKDEpKyciIHI9IicrZnN6KDQpKyciIGZpbGw9IiIrUEFMLmdyZWVuRGVlcCsiIj48L2NpcmNsZT4nOwogICAgfQogICAgcyArPSAnPHRleHQgeD0iJytwYWRMKyciIHk9IicrKEgtNikrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiI+RGF5IDE8L3RleHQ+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKFctcGFkUikrJyIgeT0iJysoSC02KSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj5EYXkgJytsYXN0RGF5Kyc8L3RleHQ+JzsKICAgIHMgKz0gIjwvc3ZnPiI7CiAgICB2YXIgY2hhbmdlID0gdmFsc1t2YWxzLmxlbmd0aC0xXS52IC0gdmFsc1swXS52OwogICAgdmFyIHdvcmQgPSBjaGFuZ2UgPiAwID8gInVwIiA6IChjaGFuZ2UgPCAwID8gImRvd24iIDogImxldmVsIik7CiAgICB2YXIgaGludCA9IGNoYW5nZSA9PT0gMCA\/ICJObyBjaGFuZ2Ugc28gZmFyLiIgOiAod29yZCsiICIrTWF0aC5hYnMoY2hhbmdlKS50b0ZpeGVkKDEpKyIga2cgc2luY2UgeW91ciBmaXJzdCBlbnRyeS4iKTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5XZWlnaHQ8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPicrZXNjKGhpbnQpKycgV2VpZ2h0IGNoYW5nZSBkdXJpbmcgYSByZXNldCBpcyB3b3J0aCBkaXNjdXNzaW5nIHdpdGggeW91ciB2ZXQgaWYgaXQgd2Fzblx1MjAxOXQgdGhlIGdvYWwuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIC8qIC0tLS0tLS0tLS0gcmVuZGVyICsgdGFicyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldEhUTUwoaWQsIGh0bWwpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgaWYoZWwpeyBlbC5pbm5lckhUTUwgPSBodG1sOyB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJQcm9ncmVzcygpewogICAgRlNDQUxFID0gY2hhcnRTY2FsZSgpOwogICAgc2V0SFRNTCgiZ3J0VmV0U2xvdCIsIHZldENoZWNrKCkpOwogICAgc2V0SFRNTCgiZ3J0SGVyb1Nsb3QiLCBoZXJvSFRNTCgpKTsKICAgIHNldEhUTUwoImdydFVwZ3JhZGVTbG90IiwgdXBncmFkZUhUTUwoKSk7CiAgICBzZXRIVE1MKCJncnRSaW5nU2xvdCIsIHJpbmdIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0V2Vla3NTbG90Iiwgd2Vla3NIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0Q2hhcnRzU2xvdCIsIHN0b29sQ2hhcnRIVE1MKCkgKyB3ZWVrQmFyc0hUTUwoKSArIHdlaWdodENoYXJ0SFRNTCgpKTsKCiAgICB2YXIgaG0gPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ncnQtaG0iKTsKICAgIGZvcih2YXIgaT0wO2k8aG0ubGVuZ3RoO2krKyl7CiAgICAgIChmdW5jdGlvbihidG4pewogICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICBzdGF0ZS5oZXJvTW9kZSA9IGJ0bi5nZXRBdHRyaWJ1dGUoImRhdGEtbW9kZSIpOwogICAgICAgICAgc2F2ZSgpOwogICAgICAgICAgcmVuZGVyUHJvZ3Jlc3MoKTsKICAgICAgICB9KTsKICAgICAgfSkoaG1baV0pOwogICAgfQogICAgdmFyIGRpcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRVcERpc21pc3MiKTsKICAgIGlmKGRpcyl7CiAgICAgIGRpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgc3RhdGUudXBncmFkZURpc21pc3NlZCA9IHRydWU7CiAgICAgICAgc2F2ZSgpOwogICAgICAgIHJlbmRlclByb2dyZXNzKCk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd1RhYih3aGljaCl7CiAgICB2YXIgdGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiTG9nIik7CiAgICB2YXIgdHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiUHJvZyIpOwogICAgdmFyIHZsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydExvZyIpOwogICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICBpZighdGwgfHwgIXRwIHx8ICF2bCB8fCAhdnApeyByZXR1cm47IH0KICAgIHZhciBpc0xvZyA9IHdoaWNoID09PSAibG9nIjsKICAgIHRsLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGlzTG9nKTsKICAgIHRwLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsICFpc0xvZyk7CiAgICB0bC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCBpc0xvZyA\/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgdHAuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwgaXNMb2cgPyAiZmFsc2UiIDogInRydWUiKTsKICAgIHZsLmhpZGRlbiA9ICFpc0xvZzsKICAgIHZwLmhpZGRlbiA9IGlzTG9nOwogICAgdGwuYmx1cigpOyB0cC5ibHVyKCk7CiAgICBpZighaXNMb2cpeyByZW5kZXJQcm9ncmVzcygpOyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGRhdGEgdG9vbHMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBleHBvcnRDU1YoKXsKICAgIHZhciByb3dzID0gW1siZGF0ZSIsInJlc2V0X2RheSIsIndlZWsiLCJzdG9vbF9ncmFkZSIsImVuZXJneSIsImFwcGV0aXRlIiwicmVmdXNlZF9tZWFsIiwiZmxhcmVfdXAiLCJvYnNlcnZhdGlvbnMiLCJ3ZWlnaHRfa2ciXV07CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgc2VlbiA9IHt9OwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsgc2Vlbltrc1tpXV0gPSB0cnVlOyB9CiAgICBmb3IodmFyIHdrIGluIHN0YXRlLndlaWdodHMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUud2VpZ2h0cyx3aykpeyBzZWVuW3drXSA9IHRydWU7IH0gfQogICAgdmFyIGFsbCA9IFtdOwogICAgZm9yKHZhciBzMiBpbiBzZWVuKXsgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlZW4sczIpKXsgYWxsLnB1c2goczIpOyB9IH0KICAgIGFsbC5zb3J0KCk7CiAgICBmb3IodmFyIGo9MDtqPGFsbC5sZW5ndGg7aisrKXsKICAgICAgdmFyIGsgPSBhbGxbal07CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trXSB8fCB7fTsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGspOwogICAgICByb3dzLnB1c2goWwogICAgICAgIGssIGRuLCB3ZWVrT2YoZG4pLAogICAgICAgICh0eXBlb2YgZS5zdG9vbCA9PT0gIm51bWJlciIgPyBlLnN0b29sIDogIiIpLAogICAgICAgIGUuZW5lcmd5IHx8ICIiLCBlLmFwcGV0aXRlIHx8ICIiLAogICAgICAgIChlLnJlZnVzZWQgPyAieWVzIiA6IChzdGF0ZS5lbnRyaWVzW2tdID8gIm5vIiA6ICIiKSksCiAgICAgICAgZS5mbGFyZSB8fCAiIiwKICAgICAgICAoZS5mbGFncyAmJiBlLmZsYWdzLmxlbmd0aCA\/IGUuZmxhZ3Muam9pbigiIHwgIikgOiAiIiksCiAgICAgICAgKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCA\/IHN0YXRlLndlaWdodHNba10gOiAiIikKICAgICAgXSk7CiAgICB9CiAgICB2YXIgY3N2ID0gcm93cy5tYXAoZnVuY3Rpb24ocil7CiAgICAgIHJldHVybiByLm1hcChmdW5jdGlvbihjKXsKICAgICAgICB2YXIgdiA9IFN0cmluZyhjKTsKICAgICAgICByZXR1cm4gL1siLFxuXS8udGVzdCh2KSA\/ICciJyt2LnJlcGxhY2UoLyIvZywnIiInKSsnIicgOiB2OwogICAgICB9KS5qb2luKCIsIik7CiAgICB9KS5qb2luKCJcbiIpOwoKICAgIHRyeXsKICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbY3N2XSwge3R5cGU6InRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7In0pOwogICAgICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgYS5kb3dubG9hZCA9ICJib256YS1ndXQtcmVzZXQtIiArIChzdGF0ZS5kb2dOYW1lID8gc3RhdGUuZG9nTmFtZS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksIi0iKS50b0xvd2VyQ2FzZSgpKyItIiA6ICIiKSArIHRvZGF5S2V5KCkgKyAiLmNzdiI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGEuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7IH0sIDUwMCk7CiAgICB9Y2F0Y2goZXJyKXsKICAgICAgd2luZG93LnByb21wdCgiQ29weSB5b3VyIGRhdGE6IiwgY3N2KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN0YXJ0T3ZlcigpewogICAgdmFyIG9rID0gd2luZG93LmNvbmZpcm0oIlRoaXMgY2xlYXJzIGV2ZXJ5IGxvZ2dlZCBkYXkgZnJvbSB0aGlzIGJyb3dzZXIgYW5kIGNhbm5vdCBiZSB1bmRvbmUuIERvd25sb2FkIHlvdXIgQ1NWIGZpcnN0IGlmIHlvdSB3YW50IHRvIGtlZXAgaXQuXG5cblN0YXJ0IG92ZXI\/Iik7CiAgICBpZighb2speyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENGRy5ucyk7IH1jYXRjaChlKXt9CiAgICBtZW0gPSBudWxsOwogICAgc3RhdGUgPSBudWxsOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEFwcCIpLmhpZGRlbiA9IHRydWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZSIpLmhpZGRlbiA9IGZhbHNlOwogICAgdmFyIGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVtYWlsIik7CiAgICBpZihlbSl7IGVtLnZhbHVlID0gIiI7IH0KICB9CgogIC8qIC0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIG9wZW5BcHAoKXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHYXRlIikuaGlkZGVuID0gdHJ1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRBcHAiKS5oaWRkZW4gPSBmYWxzZTsKICAgIGlmKCFzdGF0ZS5zdGFydERhdGUpeyBzdGF0ZS5zdGFydERhdGUgPSB0b2RheUtleSgpOyBzYXZlKCk7IH0KICAgIGlmKGRheXNCZXR3ZWVuKHN0YXRlLnN0YXJ0RGF0ZSwgdG9kYXlLZXkoKSkgPCAwKXsgc3RhdGUuc3RhcnREYXRlID0gdG9kYXlLZXkoKTsgc2F2ZSgpOyB9CiAgICBidWlsZERheVNlbGVjdCgpOwogICAgbG9hZERyYWZ0Rm9yKHNlbGVjdGVkRGF5KCkpOwogICAgc2hvd1RhYigibG9nIik7CiAgfQoKICBmdW5jdGlvbiB3aXJlKCl7CiAgICBpbml0R2F0ZSgpOwogICAgYWRvcHRJMThuKCk7CiAgICBidWlsZEdyYWRlcygpOwogICAgYnVpbGRDaG9pY2UoImdydEVuZXJneSIsIEVORVJHWSwgImVuZXJneSIpOwogICAgYnVpbGRDaG9pY2UoImdydEFwcGV0aXRlIiwgQVBQRVRJVEUsICJhcHBldGl0ZSIpOwogICAgYnVpbGRDaG9pY2UoImdydEZsYXJlIiwgRkxBUkUsICJmbGFyZSIpOwogICAgYnVpbGRGbGFncygpOwoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsKICAgICAgcmVmLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgICBkcmFmdC5yZWZ1c2VkID0gIWRyYWZ0LnJlZnVzZWQ7CiAgICAgICAgcmVmLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGRyYWZ0LnJlZnVzZWQpOwogICAgICAgIHJlZi5ibHVyKCk7CiAgICAgIH0pOwogICAgfQogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uKCl7IGRyYWZ0LndlaWdodCA9IHcudmFsdWU7IH0pOyB9CgogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKHNlbCl7IHNlbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbigpeyBsb2FkRHJhZnRGb3Ioc2VsLnZhbHVlKTsgc2VsLmJsdXIoKTsgfSk7IH0KCiAgICB2YXIgc3YgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoc3YpeyBzdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHNhdmVEYXkpOyB9CgogICAgdmFyIHRsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYkxvZyIpOwogICAgdmFyIHRwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYlByb2ciKTsKICAgIGlmKHRsKXsgdGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJsb2ciKTsgfSk7IH0KICAgIGlmKHRwKXsgdHAuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJwcm9nIik7IH0pOyB9CgogICAgdmFyIGV4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEV4cG9ydCIpOwogICAgaWYoZXgpeyBleC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGV4cG9ydENTVik7IH0KICAgIHZhciBycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRSZXNldCIpOwogICAgaWYocnMpeyBycy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHN0YXJ0T3Zlcik7IH0KCiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CgogICAgdmFyIHJ6VGltZXIgPSBudWxsOwogICAgdHJ5ewogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgZnVuY3Rpb24oKXsKICAgICAgICBpZihyelRpbWVyKXsgY2xlYXJUaW1lb3V0KHJ6VGltZXIpOyB9CiAgICAgICAgcnpUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgIHRyeXsKICAgICAgICAgICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICAgICAgICAgIGlmKHN0YXRlICYmIHZwICYmICF2cC5oaWRkZW4peyByZW5kZXJQcm9ncmVzcygpOyB9CiAgICAgICAgICB9Y2F0Y2goZSl7fQogICAgICAgIH0sIDI1MCk7CiAgICAgIH0pOwogICAgfWNhdGNoKGUpe30KCiAgICBzdG9yYWdlT0sgPSB0ZXN0U3RvcmFnZSgpOwogICAgaWYoIXN0b3JhZ2VPSyl7IHNob3dTdG9yYWdlV2FybigpOyB9CgogICAgdmFyIHNhdmVkID0gbG9hZCgpOwogICAgaWYoc2F2ZWQgJiYgc2F2ZWQuZW1haWwpewogICAgICBzdGF0ZSA9IHNhdmVkOwogICAgICBpZighc3RhdGUuZW50cmllcyl7IHN0YXRlLmVudHJpZXMgPSB7fTsgfQogICAgICBpZighc3RhdGUud2VpZ2h0cyl7IHN0YXRlLndlaWdodHMgPSB7fTsgfQogICAgICBpZighc3RhdGUuaGVyb01vZGUpeyBzdGF0ZS5oZXJvTW9kZSA9ICJiYXNlbGluZSI7IH0KICAgICAgb3BlbkFwcCgpOwogICAgICBpZighc3RhdGUuc3Vic2NyaWJlZCl7IGtsYXZpeW9TdWJzY3JpYmUoc3RhdGUuZW1haWwsIHN0YXRlLmRvZ05hbWUpOyB9CiAgICB9CiAgfQoKICBpZihkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHdpcmUpOwogIH0gZWxzZSB7CiAgICB3aXJlKCk7CiAgfQoKfSkoKTs=\" data-no-optimize=\"1\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\"><\/script>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h3 class=\"wp-block-heading\" id=\"h-how-the-tracker-works\">Fonctionnement du Tracker<\/h3>\n\n<p class=\"wp-block-paragraph\">Chaque jour, vous notez quatre \u00e9l\u00e9ments : une <strong>note relative aux selles<\/strong> sur la m\u00eame \u00e9chelle de sept points que celle <a href=\"https:\/\/bonza-retheme.blz.au\/fr\/tableau-des-crottes-de-chien\/\">du \u00ab Dog Poop Chart \u00bb<\/a>, <strong>le niveau d\u2019\u00e9nergie<\/strong> de votre chien, son <strong>app\u00e9tit<\/strong>, ainsi que la pr\u00e9sence ou non d\u2019une <strong>pouss\u00e9e<\/strong> au cours de la journ\u00e9e \u2014 vomissements, envie pressante, effort lors de la d\u00e9f\u00e9cation, accidents ou inconfort manifeste. La pes\u00e9e est facultative, et une fois par semaine suffit amplement. C\u2019est l\u00e0 tout l\u2019engagement quotidien, et il est d\u00e9lib\u00e9r\u00e9ment modeste : un suivi que vous menez r\u00e9ellement \u00e0 bien vaut mieux qu\u2019un suivi d\u00e9taill\u00e9 que vous abandonnez d\u00e8s la deuxi\u00e8me semaine.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Ces trente jours sont r\u00e9partis sur les quatre semaines de la r\u00e9initialisation \u2014 audit et \u00e9limination, introduction d\u2019un soutien, observation et ajustement, \u00e9tablissement d\u2019une nouvelle r\u00e9f\u00e9rence \u2014 afin que l\u2019outil suive le protocole d\u00e9crit dans le guide. C\u2019est au cours de la deuxi\u00e8me semaine que le soutien est mis en place, ce qui implique g\u00e9n\u00e9ralement un compl\u00e9ment couvrant les trois niveaux biotiques : pr\u00e9biotique, probiotique et postbiotique, qu\u2019il s\u2019agisse <a href=\"https:\/\/bonza-retheme.blz.au\/fr\/supplement-gateries-mastication-chiens\/\">des compl\u00e9ments fonctionnels de Bonza<\/a> ou d\u2019une formulation compl\u00e8te similaire. Et si vous manquez un jour, vous pouvez revenir en arri\u00e8re et rattraper n\u2019importe lequel des sept derniers jours plut\u00f4t que de perdre le fil.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-what-the-good-days-number-means\">Que signifie l&rsquo;indice des \u00ab bons jours \u00bb ?<\/h3>\n\n<p class=\"wp-block-paragraph\">Le chiffre cl\u00e9 correspond <strong>aux \u00ab bons jours \u00bb<\/strong> de votre chien : il s&rsquo;agit du pourcentage de jours enregistr\u00e9s au cours desquels ses selles se situaient dans la fourchette normale, c&rsquo;est-\u00e0-dire aux niveaux 2 et 3. Ce chiffre r\u00e9pond \u00e0 la question qui tient vraiment \u00e0 c\u0153ur aux propri\u00e9taires : est-ce que cela fonctionne ? <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Vous pouvez l&rsquo;interpr\u00e9ter de deux fa\u00e7ons. <strong>La comparaison avec votre premi\u00e8re semaine<\/strong> met en regard vos sept derniers jours avec la semaine de r\u00e9f\u00e9rence que vous avez enregistr\u00e9e au d\u00e9but ; c&rsquo;est sur cette comparaison que repose le protocole du guide. <strong>La comparaison avec vos sept derniers jours<\/strong> offre une vision plus concise et plus pr\u00e9cise, utile lorsque vous venez d\u2019apporter un changement et que vous souhaitez savoir s\u2019il a eu un impact. Aucune de ces deux options n\u2019appara\u00eet tant que vous n\u2019avez pas enregistr\u00e9 sept jours de donn\u00e9es, car avant cela, il n\u2019y a pas suffisamment d\u2019informations pour d\u00e9gager une tendance \u2014 et un outil de suivi qui vous flatte d\u00e8s la premi\u00e8re semaine est pire qu\u2019inutile. <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-why-week-one-matters-most\">Pourquoi la premi\u00e8re semaine est la plus importante<\/h3>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">La premi\u00e8re semaine sert de r\u00e9f\u00e9rence. Tout ce que l&rsquo;outil de suivi vous indiquera par la suite sera compar\u00e9 \u00e0 cette r\u00e9f\u00e9rence ; veillez donc \u00e0 consigner vos donn\u00e9es avec honn\u00eatet\u00e9 plut\u00f4t qu&rsquo;avec optimisme \u2014 y compris les mauvais jours, et surtout les mauvais jours. Les utilisateurs ont syst\u00e9matiquement tendance \u00e0 sous-estimer \u00e0 quel point le point de d\u00e9part \u00e9tait difficile, et c\u2019est pr\u00e9cis\u00e9ment pour cette raison qu\u2019il vaut mieux le noter que de se contenter de s\u2019en souvenir. Une premi\u00e8re semaine difficile n\u2019est pas un \u00e9chec. C\u2019est ce qui vous permettra de constater l\u2019am\u00e9lioration lorsqu\u2019elle se produira. C\u2019est \u00e9galement au cours de cette premi\u00e8re semaine que le guide vous demande d\u2019effectuer le v\u00e9ritable travail : passer votre alimentation au crible, \u00e9liminer ce qui nuit au microbiome et noter votre niveau de d\u00e9part pour chacun des douze indicateurs. Si vous ne l\u2019avez pas encore lu, le tableau de suivi prend tout son sens lorsqu\u2019il est utilis\u00e9 en parall\u00e8le <a href=\"https:\/\/bonza-retheme.blz.au\/fr\/144210-2\/\" data-type=\"link\" data-id=\"https:\/\/bonza-retheme.blz.au\/free-gut-health-guide\/\">du Guide complet de la sant\u00e9 intestinale du propri\u00e9taire de chien<\/a>.      <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-when-it-is-time-to-call-the-vet\">Quand faut-il appeler le v\u00e9t\u00e9rinaire ?<\/h3>\n\n<p class=\"wp-block-paragraph\">L&rsquo;outil s&rsquo;interrompt automatiquement si vous signalez un sympt\u00f4me n\u00e9cessitant l&rsquo;intervention d&rsquo;un professionnel plut\u00f4t que davantage de donn\u00e9es : <strong>selles noires ou goudronneuses<\/strong>, pr\u00e9sence <strong>de sang frais ou de stries rouges<\/strong>, <strong>selles p\u00e2les, grises ou de couleur argile<\/strong>, <strong>vers visibles<\/strong> ou <strong>pr\u00e9sence importante de mucus<\/strong>. Il signalera \u00e9galement une s\u00e9rie persistante de selles liquides, car la d\u00e9shydratation survient rapidement chez les chiots, ainsi que chez les petits chiens ou les chiens \u00e2g\u00e9s. Lorsque cela se produit, l&rsquo;outil met la tendance de c\u00f4t\u00e9 et vous invite \u00e0 appeler votre v\u00e9t\u00e9rinaire, ce qui est la bonne chose \u00e0 faire.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Au-del\u00e0 de ces signes, fiez-vous \u00e0 votre jugement et \u00e0 votre connaissance de votre chien. Un outil de suivi enregistre ce que vous observez ; il ne peut pas examiner qui que ce soit. Si votre chien semble mal en point ou si quelque chose vous inqui\u00e8te, prenez rendez-vous et emportez vos relev\u00e9s avec vous : un mois de relev\u00e9s quotidiens est vraiment utile pour un v\u00e9t\u00e9rinaire, et vous pouvez t\u00e9l\u00e9charger l\u2019ensemble sous forme de feuille de calcul directement depuis l\u2019outil.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Questions fr\u00e9quemment pos\u00e9es<\/h3>\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1785156667151\"><strong class=\"schema-faq-question\"><strong>Est-ce gratuit ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Oui, et ce service reste gratuit. Nous vous demandons votre adresse e-mail une seule fois, lors de votre inscription, et vous b\u00e9n\u00e9ficiez ensuite d&rsquo;un acc\u00e8s illimit\u00e9 : pas de limite, pas de p\u00e9riode d&rsquo;essai, rien ne vous est refus\u00e9. C&rsquo;est gr\u00e2ce \u00e0 cette adresse e-mail que nous vous enverrons le guide sur la sant\u00e9 intestinale et que nous vous informerons de la disponibilit\u00e9 de la version r\u00e9serv\u00e9e aux titulaires d&rsquo;un compte.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156708442\"><strong class=\"schema-faq-question\"><strong>Combien de temps cela prend-il chaque jour ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Une vingtaine de secondes. Quatre pressions, plus une pes\u00e9e une fois par semaine si vous souhaitez suivre votre progression. La dur\u00e9e a \u00e9t\u00e9 d\u00e9lib\u00e9r\u00e9ment r\u00e9duite, car un outil de suivi n&rsquo;est utile que si vous menez \u00e0 bien les trente jours.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156772064\"><strong class=\"schema-faq-question\"><strong>Qu&rsquo;est-ce qui caract\u00e9rise une \u00ab bonne journ\u00e9e \u00bb ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Un jour o\u00f9 les selles de votre chien ont obtenu une note de 2 ou 3 sur une \u00e9chelle de sept points \u2014 fermes et segment\u00e9es, ou humides et en forme de boudin. Ces deux notes correspondent \u00e0 une plage normale, la note 2 \u00e9tant id\u00e9ale. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156805344\"><strong class=\"schema-faq-question\"><strong>J&rsquo;ai manqu\u00e9 une journ\u00e9e. Est-ce que j&rsquo;ai tout g\u00e2ch\u00e9 ? <\/strong><\/strong> <p class=\"schema-faq-answer\">Non. Vous pouvez revenir en arri\u00e8re et compl\u00e9ter n&rsquo;importe quel jour parmi les sept derniers, et les pourcentages sont calcul\u00e9s \u00e0 partir des jours que vous avez enregistr\u00e9s plut\u00f4t qu&rsquo;\u00e0 partir du calendrier. Oublier un jour de temps en temps vous fait perdre un peu de pr\u00e9cision, rien de plus.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156830121\"><strong class=\"schema-faq-question\"><strong>O\u00f9 mes donn\u00e9es sont-elles stock\u00e9es ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Dans votre navigateur, sur l&rsquo;appareil que vous utilisez. Bonza ne re\u00e7oit pas les donn\u00e9es d&rsquo;activit\u00e9 de votre chien. Cela signifie \u00e9galement que votre historique est li\u00e9 \u00e0 ce navigateur pr\u00e9cis : si vous effacez vos donn\u00e9es de navigation ou si vous passez d&rsquo;un ordinateur portable \u00e0 un t\u00e9l\u00e9phone, ces donn\u00e9es ne vous suivront pas. Vous pouvez \u00e0 tout moment t\u00e9l\u00e9charger l&rsquo;ensemble des donn\u00e9es sous forme de feuille de calcul, et nous d\u00e9veloppons actuellement une version li\u00e9e \u00e0 votre compte qui garantit la s\u00e9curit\u00e9 et la synchronisation de ces donn\u00e9es.   <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156870202\"><strong class=\"schema-faq-question\"><strong>Puis-je suivre plusieurs chiens \u00e0 la fois ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Ce n&rsquo;est pas le cas dans cette version : celle-ci ne conserve l&rsquo;historique que d&rsquo;un seul chien par navigateur. La version li\u00e9e au compte permet d&rsquo;enregistrer plusieurs chiens dans la liste. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156892999\"><strong class=\"schema-faq-question\"><strong>Dois-je peser mon chien ?<\/strong><\/strong> <p class=\"schema-faq-answer\">Non, la pes\u00e9e est facultative. Si vous d\u00e9cidez de noter le poids de votre chien, le faire une fois par semaine sur la m\u00eame balance, \u00e0 peu pr\u00e8s \u00e0 la m\u00eame heure de la journ\u00e9e, vous en apprendra bien plus que des mesures quotidiennes, qui refl\u00e8tent surtout ce que le chien a mang\u00e9 et bu plut\u00f4t qu&rsquo;une v\u00e9ritable tendance. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156939494\"><strong class=\"schema-faq-question\"><strong>Les chiffres ne cessent de se d\u00e9t\u00e9riorer. Que dois-je faire ? <\/strong><\/strong> <p class=\"schema-faq-answer\">V\u00e9rifiez tout d&rsquo;abord si un changement est intervenu : alimentation, friandises, routine ou introduction trop rapide d&rsquo;un compl\u00e9ment alimentaire. Il est fr\u00e9quent que votre animal passe quelques jours difficiles au cours de la deuxi\u00e8me semaine, le temps que son microbiote s&rsquo;adapte. Toutefois, si la tendance continue \u00e0 \u00e9voluer dans la mauvaise direction, ou si l&rsquo;un des signes d&rsquo;alerte mentionn\u00e9s ci-dessus appara\u00eet, il est pr\u00e9f\u00e9rable d&rsquo;en parler \u00e0 votre v\u00e9t\u00e9rinaire plut\u00f4t que de laisser la situation \u00e9voluer sans rien faire.  <\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb Le changement que vous avez apport\u00e9 est-il r\u00e9ellement efficace ? Trente jours, c&rsquo;est suffisamment long pour que l&rsquo;intestin d&rsquo;un chien r\u00e9agisse, mais bien trop long pour que vous puissiez vous en souvenir avec pr\u00e9cision. Ce suivi de r\u00e9\u00e9quilibrage intestinal sur 30 jours transforme le protocole [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":144156,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"class_list":["post-144161","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb | Suivez au quotidien la sant\u00e9 intestinale de votre chien Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb - Bonza<\/title>\n<meta name=\"description\" content=\"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d&#039;\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb\" \/>\n<meta property=\"og:description\" content=\"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d&#039;\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/\" \/>\n<meta property=\"og:site_name\" content=\"Bonza\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bonzadogfoods\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T08:52:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"619\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"WebPage\",\"FAQPage\"],\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/\",\"name\":\"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb | Suivez au quotidien la sant\u00e9 intestinale de votre chien Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb - Bonza\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"datePublished\":\"2026-07-27T13:21:52+00:00\",\"dateModified\":\"2026-07-31T08:52:54+00:00\",\"description\":\"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d'\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#breadcrumb\"},\"mainEntity\":[{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156667151\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156708442\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156772064\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156805344\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156830121\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156870202\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156892999\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156939494\"}],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"width\":1100,\"height\":619,\"caption\":\"Un propri\u00e9taire de chien qui consigne quotidiennement l'\u00e9tat de sant\u00e9 intestinale de son animal dans l'outil de suivi \u00ab Bonza 30 jours pour r\u00e9\u00e9quilibrer votre intestin \u00bb\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/\",\"name\":\"Bonza\",\"description\":\"Add Years to Your Dog&#039;s Life and Life to Their Years\",\"publisher\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#organization\",\"name\":\"Happea Chappea Limited\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"width\":512,\"height\":512,\"caption\":\"Happea Chappea Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/bonzadogfoods\",\"https:\\\/\\\/www.instagram.com\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@bonzadogfoods\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@bonzadogfoods\\\/\",\"https:\\\/\\\/www.feefo.com\\\/en-GB\\\/reviews\\\/bonza-dog\",\"https:\\\/\\\/find-and-update.company-information.service.gov.uk\\\/company\\\/10873244\"],\"description\":\"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.\",\"email\":\"whistle@bonza.dog\",\"telephone\":\"01453709677\",\"legalName\":\"Happea Chappea Limited\",\"foundingDate\":\"2017-07-19\",\"vatID\":\"GB499631826\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1\",\"maxValue\":\"10\"},\"founder\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/#\\\/schema\\\/person\\\/b7a7255205fb41a6ac38fdbc8e19f5f3\"}},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156667151\",\"position\":1,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156667151\",\"name\":\"Est-ce gratuit ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Oui, et ce service reste gratuit. Nous vous demandons votre adresse e-mail une seule fois, lors de votre inscription, et vous b\u00e9n\u00e9ficiez ensuite d'un acc\u00e8s illimit\u00e9 : pas de limite, pas de p\u00e9riode d'essai, rien ne vous est refus\u00e9. C'est gr\u00e2ce \u00e0 cette adresse e-mail que nous vous enverrons le guide sur la sant\u00e9 intestinale et que nous vous informerons de la disponibilit\u00e9 de la version r\u00e9serv\u00e9e aux titulaires d'un compte.  \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156708442\",\"position\":2,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156708442\",\"name\":\"Combien de temps cela prend-il chaque jour ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Une vingtaine de secondes. Quatre pressions, plus une pes\u00e9e une fois par semaine si vous souhaitez suivre votre progression. La dur\u00e9e a \u00e9t\u00e9 d\u00e9lib\u00e9r\u00e9ment r\u00e9duite, car un outil de suivi n'est utile que si vous menez \u00e0 bien les trente jours.  \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156772064\",\"position\":3,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156772064\",\"name\":\"Qu'est-ce qui caract\u00e9rise une \u00ab bonne journ\u00e9e \u00bb ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Un jour o\u00f9 les selles de votre chien ont obtenu une note de 2 ou 3 sur une \u00e9chelle de sept points \u2014 fermes et segment\u00e9es, ou humides et en forme de boudin. Ces deux notes correspondent \u00e0 une plage normale, la note 2 \u00e9tant id\u00e9ale. \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156805344\",\"position\":4,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156805344\",\"name\":\"J'ai manqu\u00e9 une journ\u00e9e. Est-ce que j'ai tout g\u00e2ch\u00e9 ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Non. Vous pouvez revenir en arri\u00e8re et compl\u00e9ter n'importe quel jour parmi les sept derniers, et les pourcentages sont calcul\u00e9s \u00e0 partir des jours que vous avez enregistr\u00e9s plut\u00f4t qu'\u00e0 partir du calendrier. Oublier un jour de temps en temps vous fait perdre un peu de pr\u00e9cision, rien de plus.  \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156830121\",\"position\":5,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156830121\",\"name\":\"O\u00f9 mes donn\u00e9es sont-elles stock\u00e9es ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Dans votre navigateur, sur l'appareil que vous utilisez. Bonza ne re\u00e7oit pas les donn\u00e9es d'activit\u00e9 de votre chien. Cela signifie \u00e9galement que votre historique est li\u00e9 \u00e0 ce navigateur pr\u00e9cis : si vous effacez vos donn\u00e9es de navigation ou si vous passez d'un ordinateur portable \u00e0 un t\u00e9l\u00e9phone, ces donn\u00e9es ne vous suivront pas. Vous pouvez \u00e0 tout moment t\u00e9l\u00e9charger l'ensemble des donn\u00e9es sous forme de feuille de calcul, et nous d\u00e9veloppons actuellement une version li\u00e9e \u00e0 votre compte qui garantit la s\u00e9curit\u00e9 et la synchronisation de ces donn\u00e9es.   \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156870202\",\"position\":6,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156870202\",\"name\":\"Puis-je suivre plusieurs chiens \u00e0 la fois ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ce n'est pas le cas dans cette version : celle-ci ne conserve l'historique que d'un seul chien par navigateur. La version li\u00e9e au compte permet d'enregistrer plusieurs chiens dans la liste. \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156892999\",\"position\":7,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156892999\",\"name\":\"Dois-je peser mon chien ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Non, la pes\u00e9e est facultative. Si vous d\u00e9cidez de noter le poids de votre chien, le faire une fois par semaine sur la m\u00eame balance, \u00e0 peu pr\u00e8s \u00e0 la m\u00eame heure de la journ\u00e9e, vous en apprendra bien plus que des mesures quotidiennes, qui refl\u00e8tent surtout ce que le chien a mang\u00e9 et bu plut\u00f4t qu'une v\u00e9ritable tendance. \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156939494\",\"position\":8,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/fr\\\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\\\/#faq-question-1785156939494\",\"name\":\"Les chiffres ne cessent de se d\u00e9t\u00e9riorer. Que dois-je faire ?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"V\u00e9rifiez tout d'abord si un changement est intervenu : alimentation, friandises, routine ou introduction trop rapide d'un compl\u00e9ment alimentaire. Il est fr\u00e9quent que votre animal passe quelques jours difficiles au cours de la deuxi\u00e8me semaine, le temps que son microbiote s'adapte. Toutefois, si la tendance continue \u00e0 \u00e9voluer dans la mauvaise direction, ou si l'un des signes d'alerte mentionn\u00e9s ci-dessus appara\u00eet, il est pr\u00e9f\u00e9rable d'en parler \u00e0 votre v\u00e9t\u00e9rinaire plut\u00f4t que de laisser la situation \u00e9voluer sans rien faire.  \",\"inLanguage\":\"fr-FR\"},\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb | Suivez au quotidien la sant\u00e9 intestinale de votre chien Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb - Bonza","description":"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d'\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"fr_FR","og_type":"article","og_title":"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb","og_description":"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d'\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.","og_url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/","og_site_name":"Bonza","article_publisher":"https:\/\/www.facebook.com\/bonzadogfoods","article_modified_time":"2026-07-31T08:52:54+00:00","og_image":[{"width":1100,"height":619,"url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","FAQPage"],"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/","url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/","name":"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb | Suivez au quotidien la sant\u00e9 intestinale de votre chien Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb - Bonza","isPartOf":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#primaryimage"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#primaryimage"},"thumbnailUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","datePublished":"2026-07-27T13:21:52+00:00","dateModified":"2026-07-31T08:52:54+00:00","description":"Outil gratuit de suivi de la sant\u00e9 intestinale de votre chien pendant 30 jours : notez chaque jour ses selles, son niveau d'\u00e9nergie, son app\u00e9tit et ses pouss\u00e9es de sympt\u00f4mes, et constatez si le nombre de bons jours de votre chien augmente. \u00c0 titre informatif uniquement, ne remplace pas un diagnostic.","breadcrumb":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#breadcrumb"},"mainEntity":[{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156667151"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156708442"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156772064"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156805344"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156830121"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156870202"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156892999"},{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156939494"}],"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#primaryimage","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","width":1100,"height":619,"caption":"Un propri\u00e9taire de chien qui consigne quotidiennement l'\u00e9tat de sant\u00e9 intestinale de son animal dans l'outil de suivi \u00ab Bonza 30 jours pour r\u00e9\u00e9quilibrer votre intestin \u00bb"},{"@type":"BreadcrumbList","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bonza-retheme.blz.au\/fr\/"},{"@type":"ListItem","position":2,"name":"Suivi du programme \u00ab R\u00e9\u00e9quilibrage intestinal en 30 jours \u00bb"}]},{"@type":"WebSite","@id":"https:\/\/bonza-retheme.blz.au\/fr\/#website","url":"https:\/\/bonza-retheme.blz.au\/fr\/","name":"Bonza","description":"Add Years to Your Dog&#039;s Life and Life to Their Years","publisher":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bonza-retheme.blz.au\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/bonza-retheme.blz.au\/fr\/#organization","name":"Happea Chappea Limited","url":"https:\/\/bonza-retheme.blz.au\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/bonza-retheme.blz.au\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","width":512,"height":512,"caption":"Happea Chappea Limited"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/bonzadogfoods","https:\/\/www.instagram.com\/bonzadogfoods\/","https:\/\/www.tiktok.com\/@bonzadogfoods","https:\/\/www.linkedin.com\/company\/bonzadogfoods\/","https:\/\/www.youtube.com\/@bonzadogfoods\/","https:\/\/www.feefo.com\/en-GB\/reviews\/bonza-dog","https:\/\/find-and-update.company-information.service.gov.uk\/company\/10873244"],"description":"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.","email":"whistle@bonza.dog","telephone":"01453709677","legalName":"Happea Chappea Limited","foundingDate":"2017-07-19","vatID":"GB499631826","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1","maxValue":"10"},"founder":{"@id":"https:\/\/bonza-retheme.blz.au\/fr\/#\/schema\/person\/b7a7255205fb41a6ac38fdbc8e19f5f3"}},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156667151","position":1,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156667151","name":"Est-ce gratuit ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Oui, et ce service reste gratuit. Nous vous demandons votre adresse e-mail une seule fois, lors de votre inscription, et vous b\u00e9n\u00e9ficiez ensuite d'un acc\u00e8s illimit\u00e9 : pas de limite, pas de p\u00e9riode d'essai, rien ne vous est refus\u00e9. C'est gr\u00e2ce \u00e0 cette adresse e-mail que nous vous enverrons le guide sur la sant\u00e9 intestinale et que nous vous informerons de la disponibilit\u00e9 de la version r\u00e9serv\u00e9e aux titulaires d'un compte.  ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156708442","position":2,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156708442","name":"Combien de temps cela prend-il chaque jour ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Une vingtaine de secondes. Quatre pressions, plus une pes\u00e9e une fois par semaine si vous souhaitez suivre votre progression. La dur\u00e9e a \u00e9t\u00e9 d\u00e9lib\u00e9r\u00e9ment r\u00e9duite, car un outil de suivi n'est utile que si vous menez \u00e0 bien les trente jours.  ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156772064","position":3,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156772064","name":"Qu'est-ce qui caract\u00e9rise une \u00ab bonne journ\u00e9e \u00bb ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Un jour o\u00f9 les selles de votre chien ont obtenu une note de 2 ou 3 sur une \u00e9chelle de sept points \u2014 fermes et segment\u00e9es, ou humides et en forme de boudin. Ces deux notes correspondent \u00e0 une plage normale, la note 2 \u00e9tant id\u00e9ale. ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156805344","position":4,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156805344","name":"J'ai manqu\u00e9 une journ\u00e9e. Est-ce que j'ai tout g\u00e2ch\u00e9 ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Non. Vous pouvez revenir en arri\u00e8re et compl\u00e9ter n'importe quel jour parmi les sept derniers, et les pourcentages sont calcul\u00e9s \u00e0 partir des jours que vous avez enregistr\u00e9s plut\u00f4t qu'\u00e0 partir du calendrier. Oublier un jour de temps en temps vous fait perdre un peu de pr\u00e9cision, rien de plus.  ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156830121","position":5,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156830121","name":"O\u00f9 mes donn\u00e9es sont-elles stock\u00e9es ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Dans votre navigateur, sur l'appareil que vous utilisez. Bonza ne re\u00e7oit pas les donn\u00e9es d'activit\u00e9 de votre chien. Cela signifie \u00e9galement que votre historique est li\u00e9 \u00e0 ce navigateur pr\u00e9cis : si vous effacez vos donn\u00e9es de navigation ou si vous passez d'un ordinateur portable \u00e0 un t\u00e9l\u00e9phone, ces donn\u00e9es ne vous suivront pas. Vous pouvez \u00e0 tout moment t\u00e9l\u00e9charger l'ensemble des donn\u00e9es sous forme de feuille de calcul, et nous d\u00e9veloppons actuellement une version li\u00e9e \u00e0 votre compte qui garantit la s\u00e9curit\u00e9 et la synchronisation de ces donn\u00e9es.   ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156870202","position":6,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156870202","name":"Puis-je suivre plusieurs chiens \u00e0 la fois ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Ce n'est pas le cas dans cette version : celle-ci ne conserve l'historique que d'un seul chien par navigateur. La version li\u00e9e au compte permet d'enregistrer plusieurs chiens dans la liste. ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156892999","position":7,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156892999","name":"Dois-je peser mon chien ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Non, la pes\u00e9e est facultative. Si vous d\u00e9cidez de noter le poids de votre chien, le faire une fois par semaine sur la m\u00eame balance, \u00e0 peu pr\u00e8s \u00e0 la m\u00eame heure de la journ\u00e9e, vous en apprendra bien plus que des mesures quotidiennes, qui refl\u00e8tent surtout ce que le chien a mang\u00e9 et bu plut\u00f4t qu'une v\u00e9ritable tendance. ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156939494","position":8,"url":"https:\/\/bonza-retheme.blz.au\/fr\/suivi-du-programme-reequilibrage-intestinal-en-30-jours\/#faq-question-1785156939494","name":"Les chiffres ne cessent de se d\u00e9t\u00e9riorer. Que dois-je faire ?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"V\u00e9rifiez tout d'abord si un changement est intervenu : alimentation, friandises, routine ou introduction trop rapide d'un compl\u00e9ment alimentaire. Il est fr\u00e9quent que votre animal passe quelques jours difficiles au cours de la deuxi\u00e8me semaine, le temps que son microbiote s'adapte. Toutefois, si la tendance continue \u00e0 \u00e9voluer dans la mauvaise direction, ou si l'un des signes d'alerte mentionn\u00e9s ci-dessus appara\u00eet, il est pr\u00e9f\u00e9rable d'en parler \u00e0 votre v\u00e9t\u00e9rinaire plut\u00f4t que de laisser la situation \u00e9voluer sans rien faire.  ","inLanguage":"fr-FR"},"inLanguage":"fr-FR"}]}},"featured_image_src":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x400.webp","featured_image_src_square":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x600.webp","_links":{"self":[{"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/pages\/144161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/comments?post=144161"}],"version-history":[{"count":0,"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/pages\/144161\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/media\/144156"}],"wp:attachment":[{"href":"https:\/\/bonza-retheme.blz.au\/fr\/wp-json\/wp\/v2\/media?parent=144161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}