{"id":25059,"date":"2026-11-06T05:34:23","date_gmt":"2026-11-06T05:34:23","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=25059"},"modified":"2026-11-06T05:39:27","modified_gmt":"2026-11-06T05:39:27","slug":"shearing-blade-clearance-recommendation-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/shearing-blade-clearance-recommendation-calculator\/","title":{"rendered":"Shearing Blade Clearance Recommendation Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Shearing Blade Clearance Recommendation Calculator<\/strong> estimates a starting blade clearance based on material type and thickness. Use it to support setup planning for sheet metal shearing and review a suggested clearance range before a test cut. Actual settings can vary with material grade, blade condition, cutting angle, and machine design, so always check your machine manual and verify the result with the manufacturer\u2019s guidance.<\/p>\n\n\n\n<div id=\"sbc-host\">\n<style>\n:host{all:initial;display:block;contain:layout style}\n.sbc-root{\n--sbc-blue:#1e3a8a;--sbc-blue-2:#1d4ed8;--sbc-blue-soft:#e8eefb;--sbc-blue-line:#c7d4f0;\n--sbc-bg:#f3f5f8;--sbc-card:#ffffff;--sbc-text:#1f2937;--sbc-heading:#111827;--sbc-muted:#525c6b;\n--sbc-border:#d6dce5;--sbc-field:#fbfcfe;--sbc-danger:#b42318;--sbc-danger-bg:#fef3f2;\n--sbc-warn:#8a5a00;--sbc-warn-bg:#fff8e6;--sbc-warn-line:#f3d48a;--sbc-ok:#166534;--sbc-ok-bg:#ecfdf3;--sbc-ok-line:#abefc6;\n--sbc-radius:12px;--sbc-shadow:0 1px 2px rgba(16,24,40,.06),0 6px 16px rgba(16,24,40,.06);\nfont-family:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif;\nfont-size:16px;line-height:1.55;color:var(--sbc-text);background:var(--sbc-bg);\nmax-width:1000px;margin:0 auto;padding:28px 16px 36px;text-align:left;border-radius:16px;\n-webkit-text-size-adjust:100%;\n}\n.sbc-root *,.sbc-root *::before,.sbc-root *::after{box-sizing:border-box}\n.sbc-root [hidden]{display:none !important}\n.sbc-root h2,.sbc-root h3{font-family:inherit;color:var(--sbc-heading);line-height:1.25;margin:0 0 .5em;padding:0;letter-spacing:normal;text-transform:none;font-weight:700;border:0;background:none}\n.sbc-root h2.sbc-h{font-size:clamp(1.1rem,2vw,1.3rem);margin:0 0 14px}\n.sbc-root p{margin:0 0 .85em;padding:0}\n.sbc-root ul{margin:0;padding-left:1.2em}\n.sbc-root li{margin:0 0 .3em}\n.sbc-root .sbc-stack{display:grid;grid-template-columns:minmax(0,1fr);gap:22px}\n.sbc-root .sbc-card{background:var(--sbc-card);border:1px solid var(--sbc-border);border-radius:var(--sbc-radius);box-shadow:var(--sbc-shadow);padding:22px}\n.sbc-root .sbc-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}\n.sbc-root .sbc-field{margin:0 0 16px;min-width:0}\n.sbc-root .sbc-field > label,.sbc-root .sbc-legend{display:block;font-size:.88rem;font-weight:600;color:var(--sbc-text);margin:0 0 5px;line-height:1.3;padding:0}\n.sbc-root .sbc-req{color:var(--sbc-danger);font-weight:700;margin-left:2px}\n.sbc-root .sbc-opt{color:var(--sbc-muted);font-weight:500;font-size:.82rem;margin-left:4px}\n.sbc-root .sbc-inline{display:flex;gap:8px;align-items:stretch}\n.sbc-root .sbc-inline .sbc-input{flex:1 1 auto;min-width:0}\n.sbc-root .sbc-inline .sbc-unit{flex:0 0 auto;width:auto;min-width:96px;max-width:45%}\n.sbc-root .sbc-suffix{flex:0 0 auto;display:flex;align-items:center;justify-content:center;min-width:44px;padding:0 10px;border:1px solid #b9c2cf;border-radius:8px;background:#eef1f6;color:var(--sbc-muted);font-weight:600;font-size:.9rem}\n.sbc-root .sbc-input,.sbc-root .sbc-select{\ndisplay:block;width:100%;height:42px;margin:0;padding:8px 12px;font:inherit;font-size:15px;line-height:1.3;color:var(--sbc-text);\nbackground-color:var(--sbc-field);border:1px solid #b9c2cf;border-radius:8px;box-shadow:none;outline:none;\ntransition:border-color .15s,box-shadow .15s;max-width:none;min-height:0;text-transform:none;letter-spacing:normal}\n.sbc-root .sbc-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:32px;cursor:pointer;\nbackground-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%231e3a8a' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\");\nbackground-repeat:no-repeat;background-position:right 11px center;background-size:12px 8px}\n.sbc-root .sbc-input:hover,.sbc-root .sbc-select:hover{border-color:#8f9bab}\n.sbc-root .sbc-input:focus,.sbc-root .sbc-select:focus{border-color:var(--sbc-blue-2);box-shadow:0 0 0 3px rgba(29,78,216,.25);background-color:#fff}\n.sbc-root .sbc-input.sbc-invalid{border-color:var(--sbc-danger);background-color:var(--sbc-danger-bg)}\n.sbc-root .sbc-input.sbc-invalid:focus{box-shadow:0 0 0 3px rgba(180,35,24,.2)}\n.sbc-root .sbc-err{color:var(--sbc-danger);font-size:.83rem;margin:5px 0 0;line-height:1.35;font-weight:500}\n.sbc-root .sbc-help{color:var(--sbc-muted);font-size:.82rem;margin:5px 0 0;line-height:1.4}\n.sbc-root .sbc-group{border:1px dashed var(--sbc-blue-line);background:#f8faff;border-radius:10px;padding:14px 14px 2px;margin:0 0 16px;min-width:0}\n.sbc-root .sbc-group-note{font-size:.82rem;color:var(--sbc-muted);margin:0 0 12px;line-height:1.4}\n.sbc-root .sbc-group-note strong{color:var(--sbc-blue)}\n.sbc-root .sbc-actions{display:flex !important;flex-wrap:wrap;justify-content:center;gap:10px;width:100%;margin:8px 0 0 !important;padding:0 !important;float:none !important;clear:both}\n.sbc-root .sbc-btn{display:inline-flex !important;align-items:center;justify-content:center;float:none !important;width:auto !important;min-width:130px;height:42px;padding:0 20px;margin:0 !important;\nposition:static !important;font:inherit;font-size:.95rem;font-weight:650;line-height:1;border-radius:8px;border:1px solid var(--sbc-blue);background:var(--sbc-blue);color:#fff;cursor:pointer;\ntext-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;transition:background .15s,border-color .15s,color .15s}\n.sbc-root .sbc-btn:hover{background:#172f73;border-color:#172f73;color:#fff}\n.sbc-root .sbc-btn.sbc-btn-2{background:#fff;color:var(--sbc-blue);border-color:#9fb1db}\n.sbc-root .sbc-btn.sbc-btn-2:hover{background:var(--sbc-blue-soft);color:var(--sbc-blue);border-color:var(--sbc-blue)}\n.sbc-root .sbc-btn:focus-visible{outline:3px solid var(--sbc-blue-2);outline-offset:2px}\n.sbc-root .sbc-results:focus{outline:none}\n.sbc-root .sbc-alert{border:1px solid #fecdca;background:var(--sbc-danger-bg);color:var(--sbc-danger);border-radius:10px;padding:12px 14px;margin:0;font-size:.9rem}\n.sbc-root .sbc-alert ul{margin:6px 0 0;padding-left:1.2em}\n.sbc-root .sbc-sub-h{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sbc-blue);margin:0 0 8px}\n.sbc-root .sbc-rgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}\n.sbc-root .sbc-rcard{border:1px solid var(--sbc-blue-line);background:var(--sbc-blue-soft);border-radius:12px;padding:16px 16px 14px;min-width:0}\n.sbc-root .sbc-rcard.sbc-main{background:linear-gradient(135deg,#1e3a8a 0%,#1d4ed8 100%);border-color:#1e3a8a;color:#fff}\n.sbc-root .sbc-rcard-label{display:block;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--sbc-blue);margin-bottom:6px}\n.sbc-root .sbc-main .sbc-rcard-label{color:#dbe5ff}\n.sbc-root .sbc-rcard-value{font-size:clamp(1.45rem,3.2vw,1.95rem);font-weight:800;line-height:1.15;color:var(--sbc-heading);word-break:break-word;font-variant-numeric:tabular-nums}\n.sbc-root .sbc-main .sbc-rcard-value{color:#fff}\n.sbc-root .sbc-rcard-unit{font-size:.5em;font-weight:700;margin-left:5px;color:var(--sbc-muted)}\n.sbc-root .sbc-main .sbc-rcard-unit{color:#dbe5ff}\n.sbc-root .sbc-rcard-sub{font-size:.82rem;color:var(--sbc-muted);margin-top:6px;font-variant-numeric:tabular-nums}\n.sbc-root .sbc-main .sbc-rcard-sub{color:#e9efff}\n.sbc-root .sbc-single{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}\n.sbc-root .sbc-note{border-radius:10px;padding:11px 14px;margin:14px 0 0;font-size:.88rem;line-height:1.45;border:1px solid var(--sbc-warn-line);background:var(--sbc-warn-bg);color:var(--sbc-warn)}\n.sbc-root .sbc-note.sbc-note-ok{border-color:var(--sbc-ok-line);background:var(--sbc-ok-bg);color:var(--sbc-ok)}\n.sbc-root .sbc-table{width:100%;border-collapse:collapse;margin:16px 0 0;font-size:.9rem;font-variant-numeric:tabular-nums}\n.sbc-root .sbc-table caption{text-align:left;caption-side:top;padding:0 0 4px}\n.sbc-root .sbc-table th,.sbc-root .sbc-table td{text-align:left;padding:9px 10px;border:0;border-bottom:1px solid var(--sbc-border);vertical-align:top;background:none}\n.sbc-root .sbc-table th{font-weight:600;color:var(--sbc-muted);width:42%}\n.sbc-root .sbc-table td{color:var(--sbc-heading);font-weight:600}\n.sbc-root .sbc-table tr:last-child th,.sbc-root .sbc-table tr:last-child td{border-bottom:0}\n.sbc-root .sbc-formula{background:#0f1f45;color:#e6edff;padding:14px 16px;border-radius:10px;margin:14px 0 0}\n.sbc-root .sbc-formula-label{display:block;font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#b4c4ec;margin-bottom:4px}\n.sbc-root .sbc-formula-sub{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem;color:#e6edff;word-break:break-word;margin:0;line-height:1.6}\n.sbc-root .sbc-disclaimer{font-size:.85rem;color:var(--sbc-muted);background:#f6f8fb;border-left:3px solid var(--sbc-blue-line);padding:10px 12px;border-radius:0 8px 8px 0;margin:16px 0 0}\n.sbc-root .sbc-disclaimer strong{color:var(--sbc-heading)}\n.sbc-root .sbc-sr{position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n@media (max-width:700px){\n.sbc-root .sbc-rgrid{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:600px){\n.sbc-root{padding:20px 12px 28px;border-radius:0}\n.sbc-root .sbc-card{padding:16px}\n.sbc-root .sbc-row{grid-template-columns:minmax(0,1fr)}\n.sbc-root .sbc-btn{flex:1 1 100%}\n.sbc-root .sbc-table th{width:50%}\n}\n@media (prefers-reduced-motion:reduce){\n.sbc-root *{transition:none !important}\n}\n<\/style>\n<div class=\"sbc-root\" id=\"sbc-app\">\n<div class=\"sbc-stack\">\n<section class=\"sbc-card\" aria-labelledby=\"sbc-inputs-title\">\n<h2 class=\"sbc-h\" id=\"sbc-inputs-title\">Blade Clearance Inputs<\/h2>\n<form id=\"sbc-form\" novalidate autocomplete=\"off\">\n<div class=\"sbc-row\">\n<div class=\"sbc-field\">\n<label for=\"sbc-mat\">Material Type<\/label>\n<select id=\"sbc-mat\" class=\"sbc-select\" aria-describedby=\"sbc-mat-help\"><\/select>\n<p class=\"sbc-help\" id=\"sbc-mat-help\"><\/p>\n<\/div>\n<div class=\"sbc-field\">\n<label for=\"sbc-t\">Material Thickness<span class=\"sbc-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-t\" class=\"sbc-input\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"sbc-t-err\">\n<select id=\"sbc-t-unit\" class=\"sbc-select sbc-unit\" aria-label=\"Thickness unit\">\n<option value=\"mm\">mm<\/option>\n<option value=\"in\">in<\/option>\n<\/select>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-t-err\" hidden><\/p>\n<\/div>\n<div class=\"sbc-field\">\n<label for=\"sbc-ts\">Tensile Strength<span class=\"sbc-req\" id=\"sbc-ts-req\" aria-hidden=\"true\" hidden>*<\/span><span class=\"sbc-opt\" id=\"sbc-ts-opt\">(optional)<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-ts\" class=\"sbc-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"sbc-ts-err sbc-ts-help\">\n<select id=\"sbc-ts-unit\" class=\"sbc-select sbc-unit\" aria-label=\"Tensile strength unit\">\n<option value=\"mpa\">MPa<\/option>\n<option value=\"ksi\">ksi<\/option>\n<\/select>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-ts-err\" hidden><\/p>\n<p class=\"sbc-help\" id=\"sbc-ts-help\"><\/p>\n<\/div>\n<div class=\"sbc-field\">\n<label for=\"sbc-basis\">Clearance Basis<\/label>\n<select id=\"sbc-basis\" class=\"sbc-select\" aria-describedby=\"sbc-basis-help\">\n<option value=\"range\">Percentage range of thickness<\/option>\n<option value=\"single\">Single percentage of thickness<\/option>\n<option value=\"fixed\">Fixed clearance value<\/option>\n<\/select>\n<p class=\"sbc-help\" id=\"sbc-basis-help\"><\/p>\n<\/div>\n<\/div>\n\n<fieldset class=\"sbc-group\" id=\"sbc-g-range\" style=\"border-style:dashed\">\n<legend class=\"sbc-sr\">Clearance percentage range<\/legend>\n<p class=\"sbc-group-note\" id=\"sbc-range-note\"><\/p>\n<div class=\"sbc-row\">\n<div class=\"sbc-field\">\n<label for=\"sbc-pmin\">Minimum Clearance<span class=\"sbc-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-pmin\" class=\"sbc-input sbc-pct-in\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"sbc-pmin-err\">\n<span class=\"sbc-suffix\" aria-hidden=\"true\">%<\/span>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-pmin-err\" hidden><\/p>\n<\/div>\n<div class=\"sbc-field\">\n<label for=\"sbc-pmax\">Maximum Clearance<span class=\"sbc-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-pmax\" class=\"sbc-input sbc-pct-in\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"sbc-pmax-err\">\n<span class=\"sbc-suffix\" aria-hidden=\"true\">%<\/span>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-pmax-err\" hidden><\/p>\n<\/div>\n<\/div>\n<\/fieldset>\n\n<fieldset class=\"sbc-group\" id=\"sbc-g-single\" hidden>\n<legend class=\"sbc-sr\">Single clearance percentage<\/legend>\n<p class=\"sbc-group-note\" id=\"sbc-single-note\"><\/p>\n<div class=\"sbc-field\">\n<label for=\"sbc-pct\">Clearance Percentage<span class=\"sbc-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-pct\" class=\"sbc-input sbc-pct-in\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"sbc-pct-err\">\n<span class=\"sbc-suffix\" aria-hidden=\"true\">%<\/span>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-pct-err\" hidden><\/p>\n<\/div>\n<\/fieldset>\n\n<fieldset class=\"sbc-group\" id=\"sbc-g-fixed\" hidden>\n<legend class=\"sbc-sr\">Fixed clearance value<\/legend>\n<p class=\"sbc-group-note\">Enter a clearance you already use or plan to set. The calculator shows it as a percentage of thickness and compares it with the starting range for the selected material.<\/p>\n<div class=\"sbc-field\">\n<label for=\"sbc-fc\">Clearance Value<span class=\"sbc-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"sbc-inline\">\n<input id=\"sbc-fc\" class=\"sbc-input\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"sbc-fc-err\">\n<select id=\"sbc-fc-unit\" class=\"sbc-select sbc-unit\" aria-label=\"Clearance unit\">\n<option value=\"mm\">mm<\/option>\n<option value=\"in\">in<\/option>\n<\/select>\n<\/div>\n<p class=\"sbc-err\" id=\"sbc-fc-err\" hidden><\/p>\n<\/div>\n<\/fieldset>\n\n<div class=\"sbc-actions\">\n<button type=\"submit\" class=\"sbc-btn\" id=\"sbc-calc\">Calculate<\/button>\n<\/div>\n<p class=\"sbc-sr\" id=\"sbc-status\" role=\"status\" aria-live=\"polite\"><\/p>\n<\/form>\n<\/section>\n\n<section class=\"sbc-card sbc-results\" aria-labelledby=\"sbc-results-title\" id=\"sbc-results\" tabindex=\"-1\" hidden>\n<h2 class=\"sbc-h\" id=\"sbc-results-title\">Results<\/h2>\n<div class=\"sbc-alert\" id=\"sbc-error\" role=\"alert\" hidden><\/div>\n<div id=\"sbc-body\">\n<p class=\"sbc-sub-h\" id=\"sbc-r-head\">Recommended blade clearance<\/p>\n<div class=\"sbc-rgrid\" id=\"sbc-r-range\">\n<div class=\"sbc-rcard\">\n<span class=\"sbc-rcard-label\">Minimum<\/span>\n<div class=\"sbc-rcard-value\"><span id=\"sbc-r-min\"><\/span><span class=\"sbc-rcard-unit sbc-u\"><\/span><\/div>\n<div class=\"sbc-rcard-sub\" id=\"sbc-r-min-sub\"><\/div>\n<\/div>\n<div class=\"sbc-rcard sbc-main\">\n<span class=\"sbc-rcard-label\">Suggested midpoint<\/span>\n<div class=\"sbc-rcard-value\"><span id=\"sbc-r-mid\"><\/span><span class=\"sbc-rcard-unit sbc-u\"><\/span><\/div>\n<div class=\"sbc-rcard-sub\" id=\"sbc-r-mid-sub\"><\/div>\n<\/div>\n<div class=\"sbc-rcard\">\n<span class=\"sbc-rcard-label\">Maximum<\/span>\n<div class=\"sbc-rcard-value\"><span id=\"sbc-r-max\"><\/span><span class=\"sbc-rcard-unit sbc-u\"><\/span><\/div>\n<div class=\"sbc-rcard-sub\" id=\"sbc-r-max-sub\"><\/div>\n<\/div>\n<\/div>\n<div class=\"sbc-single\" id=\"sbc-r-one\" hidden>\n<div class=\"sbc-rcard sbc-main\">\n<span class=\"sbc-rcard-label\" id=\"sbc-r-one-label\">Recommended clearance<\/span>\n<div class=\"sbc-rcard-value\"><span id=\"sbc-r-one-val\"><\/span><span class=\"sbc-rcard-unit sbc-u\"><\/span><\/div>\n<div class=\"sbc-rcard-sub\" id=\"sbc-r-one-sub\"><\/div>\n<\/div>\n<\/div>\n<div class=\"sbc-note\" id=\"sbc-r-check\" hidden><\/div>\n<div class=\"sbc-note\" id=\"sbc-r-strength\" hidden><\/div>\n<table class=\"sbc-table\">\n<caption class=\"sbc-sub-h\">Calculation summary<\/caption>\n<tbody>\n<tr><th scope=\"row\">Material<\/th><td id=\"sbc-s-mat\"><\/td><\/tr>\n<tr><th scope=\"row\">Material thickness<\/th><td id=\"sbc-s-t\"><\/td><\/tr>\n<tr><th scope=\"row\">Tensile strength<\/th><td id=\"sbc-s-ts\"><\/td><\/tr>\n<tr><th scope=\"row\">Clearance basis<\/th><td id=\"sbc-s-basis\"><\/td><\/tr>\n<tr><th scope=\"row\">Clearance percentage used<\/th><td id=\"sbc-s-pct\"><\/td><\/tr>\n<tr><th scope=\"row\">Material starting range<\/th><td id=\"sbc-s-def\"><\/td><\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sbc-formula\">\n<span class=\"sbc-formula-label\">Calculation \u00b7 Clearance = Thickness \u00d7 Clearance %<\/span>\n<p class=\"sbc-formula-sub\" id=\"sbc-d\"><\/p>\n<\/div>\n<\/div>\n<p class=\"sbc-disclaimer\"><strong>Starting point only:<\/strong> The percentage ranges used here are general starting points, not universal machine settings. Actual blade clearance depends on material grade, thickness, hardness, blade condition, cutting (rake) angle, and machine design. Consult your shearing machine manual or the manufacturer&#8217;s guidance, and verify the setting with a test cut before production.<\/p>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"sbc-code\" hidden data-c=\"Ci8qIFNoZWFyaW5nIEJsYWRlIENsZWFyYW5jZSBSZWNvbW1lbmRhdGlvbiBDYWxjdWxhdG9yIOKAlCB2YW5pbGxhIEpTLCBTaGFkb3cgRE9NIGlzb2xhdGVkLCBubyBnbG9iYWxzLgogICBJbnRlcm5hbCB1bml0czogbGVuZ3RoIGluIG1tLCBzdHJlbmd0aCBpbiBNUGEuCgogICBBRE1JTiAvIERFVkVMT1BFUiBDT05GSUdVUkFUSU9OCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEVkaXQgREVGQVVMVF9DT05GSUcgYmVsb3csIG9yIG92ZXJyaWRlIGl0IHdpdGhvdXQgdG91Y2hpbmcgdGhpcyBzY3JpcHQgYnkgYWRkaW5nIGEgSlNPTgogICBkYXRhLWNvbmZpZyBhdHRyaWJ1dGUgdG8gdGhlIGhvc3QgZWxlbWVudCwgZS5nLjoKICAgICA8ZGl2IGlkPSJzYmMtaG9zdCIgZGF0YS1jb25maWc9J3sibWF0ZXJpYWxzIjp7Im1pbGQiOnsibWluUGN0Ijo2LCJtYXhQY3QiOjl9fSwKICAgICAgICJleHRyYU1hdGVyaWFscyI6eyJicmFzcyI6eyJuYW1lIjoiQnJhc3MiLCJ0ZW5zaWxlIjpbMzAwLDUwMF0sIm1pblBjdCI6NCwibWF4UGN0Ijo3fX19Jz4KICAgLSBtYXRlcmlhbHM6IHBlci1tYXRlcmlhbCBvdmVycmlkZXMgKG1lcmdlZCBieSBrZXkpLiBLZXlzOiBuYW1lLCB0ZW5zaWxlIFttaW4sbWF4XSBNUGEsIG1pblBjdCwgbWF4UGN0LgogICAtIGV4dHJhTWF0ZXJpYWxzOiBhZGRpdGlvbmFsIG1hdGVyaWFscyBhZGRlZCB0byB0aGUgZHJvcGRvd24gKGJlZm9yZSAiQ3VzdG9tIikuCiAgIC0gc3RyZW5ndGhCYW5kczogcmVwbGFjZXMgdGhlIHRlbnNpbGUtc3RyZW5ndGgg4oaSICUgcmFuZ2UgdGFibGUgdXNlZCBmb3IgY3VzdG9tIG1hdGVyaWFsLgogICAgIEVhY2ggYmFuZDogeyB1cFRvOiBNUGEgb3IgbnVsbCBmb3IgImFuZCBhYm92ZSIsIG1pblBjdCwgbWF4UGN0IH0uCiAgIEFsbCBwZXJjZW50YWdlcyBhcmUgb2YgbWF0ZXJpYWwgdGhpY2tuZXNzIChjbGVhcmFuY2UgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgYmxhZGUpLiAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYmMtaG9zdCcpOwogIGlmICghaG9zdCB8fCBob3N0LmdldEF0dHJpYnV0ZSgnZGF0YS1zYmMtcmVhZHknKSA9PT0gJzEnKSByZXR1cm47CiAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2JjLXJlYWR5JywgJzEnKTsKCiAgdmFyIERFRkFVTFRfQ09ORklHID0gewogICAgbWF0ZXJpYWxzOiB7CiAgICAgIG1pbGQ6ICAgICAgeyBuYW1lOiAnTWlsZCBTdGVlbCcsICAgICAgdGVuc2lsZTogWzM1MCwgNTUwXSwgbWluUGN0OiA1LCBtYXhQY3Q6IDggfSwKICAgICAgc3RhaW5sZXNzOiB7IG5hbWU6ICdTdGFpbmxlc3MgU3RlZWwnLCB0ZW5zaWxlOiBbNTAwLCA3NTBdLCBtaW5QY3Q6IDcsIG1heFBjdDogMTAgfSwKICAgICAgYWx1bWludW06ICB7IG5hbWU6ICdBbHVtaW51bScsICAgICAgICB0ZW5zaWxlOiBbMTAwLCAzMDBdLCBtaW5QY3Q6IDMsIG1heFBjdDogNiB9CiAgICB9LAogICAgc3RyZW5ndGhCYW5kczogWwogICAgICB7IHVwVG86IDI1MCwgbWluUGN0OiAzLCBtYXhQY3Q6IDUgfSwKICAgICAgeyB1cFRvOiA0NTAsIG1pblBjdDogNSwgbWF4UGN0OiA4IH0sCiAgICAgIHsgdXBUbzogNzAwLCBtaW5QY3Q6IDcsIG1heFBjdDogMTAgfSwKICAgICAgeyB1cFRvOiBudWxsLCBtaW5QY3Q6IDksIG1heFBjdDogMTIgfQogICAgXQogIH07CgogIGZ1bmN0aW9uIGJ1aWxkQ29uZmlnKCkgewogICAgdmFyIGNmZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoREVGQVVMVF9DT05GSUcpKTsKICAgIHZhciByYXcgPSBob3N0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb25maWcnKTsKICAgIGlmICghcmF3KSByZXR1cm4gY2ZnOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHJhdyksIGssIHA7CiAgICAgIGlmIChvLm1hdGVyaWFscykgZm9yIChrIGluIG8ubWF0ZXJpYWxzKSB7CiAgICAgICAgaWYgKCFjZmcubWF0ZXJpYWxzW2tdKSBjZmcubWF0ZXJpYWxzW2tdID0ge307CiAgICAgICAgZm9yIChwIGluIG8ubWF0ZXJpYWxzW2tdKSBjZmcubWF0ZXJpYWxzW2tdW3BdID0gby5tYXRlcmlhbHNba11bcF07CiAgICAgIH0KICAgICAgaWYgKG8uZXh0cmFNYXRlcmlhbHMpIGZvciAoayBpbiBvLmV4dHJhTWF0ZXJpYWxzKSBpZiAoayAhPT0gJ2N1c3RvbScpIGNmZy5tYXRlcmlhbHNba10gPSBvLmV4dHJhTWF0ZXJpYWxzW2tdOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShvLnN0cmVuZ3RoQmFuZHMpICYmIG8uc3RyZW5ndGhCYW5kcy5sZW5ndGgpIGNmZy5zdHJlbmd0aEJhbmRzID0gby5zdHJlbmd0aEJhbmRzOwogICAgfSBjYXRjaCAoZSkgeyAvKiBpbnZhbGlkIEpTT046IGtlZXAgZGVmYXVsdHMgKi8gfQogICAgZm9yICh2YXIga2V5IGluIGNmZy5tYXRlcmlhbHMpIHsKICAgICAgdmFyIG0gPSBjZmcubWF0ZXJpYWxzW2tleV07CiAgICAgIGlmICghbSB8fCAhKG0ubWluUGN0ID4gMCkgfHwgIShtLm1heFBjdCA+PSBtLm1pblBjdCkpIGRlbGV0ZSBjZmcubWF0ZXJpYWxzW2tleV07CiAgICB9CiAgICByZXR1cm4gY2ZnOwogIH0KICB2YXIgQ0ZHID0gYnVpbGRDb25maWcoKTsKCiAgdmFyIHNjb3BlID0gaG9zdDsKICBpZiAoaG9zdC5hdHRhY2hTaGFkb3cpIHsKICAgIHNjb3BlID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7CiAgICB3aGlsZSAoaG9zdC5maXJzdENoaWxkKSBzY29wZS5hcHBlbmRDaGlsZChob3N0LmZpcnN0Q2hpbGQpOwogIH0KICBmdW5jdGlvbiAkKGlkKSB7IHJldHVybiBzY29wZS5nZXRFbGVtZW50QnlJZCA\/IHNjb3BlLmdldEVsZW1lbnRCeUlkKGlkKSA6IHNjb3BlLnF1ZXJ5U2VsZWN0b3IoJyMnICsgaWQpOyB9CiAgdmFyIHJvb3QgPSAkKCdzYmMtYXBwJyk7CiAgaWYgKCFyb290KSByZXR1cm47CgogIHZhciBNTV9QRVJfSU4gPSAyNS40OwogIHZhciBNUEFfUEVSX0tTSSA9IDYuODk0NzU3OwoKICAvKiAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIHBhcnNlTnVtKHJhdykgewogICAgdmFyIHMgPSBTdHJpbmcocmF3ID09IG51bGwgPyAnJyA6IHJhdykudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCAnJyk7CiAgICBpZiAocyA9PT0gJycpIHJldHVybiB7IGVtcHR5OiB0cnVlLCBvazogZmFsc2UgfTsKICAgIGlmICgvXlsrLV0\/XGR7MSwzfSgsXGR7M30pKyhcLlxkKyk\/JC8udGVzdChzKSkgcyA9IHMucmVwbGFjZSgvLC9nLCAnJyk7CiAgICBlbHNlIGlmICgvXlsrLV0\/XGQqLFxkKyQvLnRlc3QocykpIHMgPSBzLnJlcGxhY2UoJywnLCAnLicpOwogICAgaWYgKCEvXlsrLV0\/KFxkK1wuP1xkKnxcLlxkKykoZVsrLV0\/XGQrKT8kL2kudGVzdChzKSkgcmV0dXJuIHsgZW1wdHk6IGZhbHNlLCBvazogZmFsc2UgfTsKICAgIHZhciBuID0gTnVtYmVyKHMpOwogICAgaWYgKCFpc0Zpbml0ZShuKSkgcmV0dXJuIHsgZW1wdHk6IGZhbHNlLCBvazogZmFsc2UgfTsKICAgIHJldHVybiB7IGVtcHR5OiBmYWxzZSwgb2s6IHRydWUsIG46IG4gfTsKICB9CiAgZnVuY3Rpb24gZyhuLCBwKSB7CiAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZShuKSkgcmV0dXJuICfigJQnOwogICAgcmV0dXJuIE51bWJlcihuLnRvUHJlY2lzaW9uKHAgfHwgNikpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAxMCB9KTsKICB9CiAgZnVuY3Rpb24gcGxhaW4obiwgcCkgeyByZXR1cm4gU3RyaW5nKE51bWJlcihuLnRvUHJlY2lzaW9uKHAgfHwgNikpKTsgfQogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoL1smPD4iJ10vZywgZnVuY3Rpb24gKGMpIHsKICAgICAgcmV0dXJuIHsgJyYnOiAnJmFtcDsnLCAnPCc6ICcmbHQ7JywgJz4nOiAnJmd0OycsICciJzogJyZxdW90OycsICInIjogJyYjMzk7JyB9W2NdOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHRvTW0odiwgdSkgeyByZXR1cm4gdSA9PT0gJ2luJyA\/IHYgKiBNTV9QRVJfSU4gOiB2OyB9CiAgZnVuY3Rpb24gZnJvbU1tKG1tLCB1KSB7IHJldHVybiB1ID09PSAnaW4nID8gbW0gLyBNTV9QRVJfSU4gOiBtbTsgfQogIGZ1bmN0aW9uIHRvTXBhKHYsIHUpIHsgcmV0dXJuIHUgPT09ICdrc2knID8gdiAqIE1QQV9QRVJfS1NJIDogdjsgfQogIGZ1bmN0aW9uIGZyb21NcGEodiwgdSkgeyByZXR1cm4gdSA9PT0gJ2tzaScgPyB2IC8gTVBBX1BFUl9LU0kgOiB2OyB9CiAgLyogUHJhY3RpY2FsIHJvdW5kaW5nIGZvciBjbGVhcmFuY2UgdmFsdWVzLiAqLwogIGZ1bmN0aW9uIGZtdExlbihtbSwgdSkgewogICAgaWYgKCFpc0Zpbml0ZShtbSkpIHJldHVybiAn4oCUJzsKICAgIGlmICh1ID09PSAnaW4nKSB7CiAgICAgIHZhciBpbmNoID0gbW0gLyBNTV9QRVJfSU47CiAgICAgIHJldHVybiBpbmNoLnRvRml4ZWQoaW5jaCA8IDAuMDEgPyA1IDogNCk7CiAgICB9CiAgICByZXR1cm4gbW0gPCAwLjEgPyBtbS50b0ZpeGVkKDMpIDogKG1tIDwgMTAgPyBtbS50b0ZpeGVkKDIpIDogbW0udG9GaXhlZCgxKSk7CiAgfQogIGZ1bmN0aW9uIHBjdFR4dChwKSB7IHJldHVybiBnKHAsIDQpICsgJyUnOyB9CiAgZnVuY3Rpb24gb3RoZXJVbml0KHUpIHsgcmV0dXJuIHUgPT09ICdpbicgPyAnbW0nIDogJ2luJzsgfQogIGZ1bmN0aW9uIGJhbmRGb3IobXBhKSB7CiAgICB2YXIgYmFuZHMgPSBDRkcuc3RyZW5ndGhCYW5kczsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFuZHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGJhbmRzW2ldLnVwVG8gPT0gbnVsbCB8fCBtcGEgPD0gYmFuZHNbaV0udXBUbykgcmV0dXJuIGJhbmRzW2ldOwogICAgfQogICAgcmV0dXJuIGJhbmRzW2JhbmRzLmxlbmd0aCAtIDFdOwogIH0KCiAgLyogLS0tLS0tLS0tLSBtYXRlcmlhbCBkcm9wZG93biBmcm9tIGNvbmZpZyAtLS0tLS0tLS0tICovCiAgKGZ1bmN0aW9uIGZpbGxNYXRlcmlhbHMoKSB7CiAgICB2YXIgc2VsID0gJCgnc2JjLW1hdCcpLCBodG1sID0gJyc7CiAgICBmb3IgKHZhciBrIGluIENGRy5tYXRlcmlhbHMpIHsKICAgICAgdmFyIG0gPSBDRkcubWF0ZXJpYWxzW2tdOwogICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsgZXNjKGspICsgJyI+JyArIGVzYyhtLm5hbWUpICsgJyAoJyArIGcobS5taW5QY3QsIDQpICsgJ+KAkycgKyBnKG0ubWF4UGN0LCA0KSArICclKTwvb3B0aW9uPic7CiAgICB9CiAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSJjdXN0b20iPkN1c3RvbSBtYXRlcmlhbCAoZW50ZXIgdGVuc2lsZSBzdHJlbmd0aCk8L29wdGlvbj4nOwogICAgc2VsLmlubmVySFRNTCA9IGh0bWw7CiAgfSkoKTsKICBmdW5jdGlvbiBmaXJzdE1hdGVyaWFsS2V5KCkgeyBmb3IgKHZhciBrIGluIENGRy5tYXRlcmlhbHMpIHJldHVybiBrOyByZXR1cm4gJ2N1c3RvbSc7IH0KCiAgLyogLS0tLS0tLS0tLSB2YWxpZGF0aW9uIC0tLS0tLS0tLS0gKi8KICB2YXIgS0VZUyA9IFsndCcsICd0cycsICdwbWluJywgJ3BtYXgnLCAncGN0JywgJ2ZjJ107CiAgdmFyIExBQkVMID0geyB0OiAnTWF0ZXJpYWwgdGhpY2tuZXNzJywgdHM6ICdUZW5zaWxlIHN0cmVuZ3RoJywgcG1pbjogJ01pbmltdW0gY2xlYXJhbmNlICUnLCBwbWF4OiAnTWF4aW11bSBjbGVhcmFuY2UgJScsIHBjdDogJ0NsZWFyYW5jZSBwZXJjZW50YWdlJywgZmM6ICdDbGVhcmFuY2UgdmFsdWUnIH07CiAgZnVuY3Rpb24gc2V0RXJyKGtleSwgbXNnKSB7CiAgICB2YXIgZWwgPSAkKCdzYmMtJyArIGtleSksIGVyID0gJCgnc2JjLScgKyBrZXkgKyAnLWVycicpOwogICAgaWYgKG1zZykgewogICAgICBlbC5jbGFzc0xpc3QuYWRkKCdzYmMtaW52YWxpZCcpOyBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICd0cnVlJyk7CiAgICAgIGVyLnRleHRDb250ZW50ID0gbXNnOyBlci5oaWRkZW4gPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYy1pbnZhbGlkJyk7IGVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJyk7CiAgICAgIGVyLnRleHRDb250ZW50ID0gJyc7IGVyLmhpZGRlbiA9IHRydWU7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNsZWFyQWxsRXJyb3JzKCkgeyBLRVlTLmZvckVhY2goZnVuY3Rpb24gKGspIHsgc2V0RXJyKGssIG51bGwpOyB9KTsgfQogIGZ1bmN0aW9uIGlzQ3VzdG9tKCkgeyByZXR1cm4gJCgnc2JjLW1hdCcpLnZhbHVlID09PSAnY3VzdG9tJzsgfQogIGZ1bmN0aW9uIGJhc2lzKCkgeyByZXR1cm4gJCgnc2JjLWJhc2lzJykudmFsdWU7IH0KICBmdW5jdGlvbiBhY3RpdmVLZXlzKCkgewogICAgdmFyIGIgPSBiYXNpcygpLCBrID0gWyd0JywgJ3RzJ107CiAgICBpZiAoYiA9PT0gJ3JhbmdlJykgay5wdXNoKCdwbWluJywgJ3BtYXgnKTsKICAgIGVsc2UgaWYgKGIgPT09ICdzaW5nbGUnKSBrLnB1c2goJ3BjdCcpOwogICAgZWxzZSBrLnB1c2goJ2ZjJyk7CiAgICByZXR1cm4gazsKICB9CiAgZnVuY3Rpb24gY2hlY2soa2V5KSB7CiAgICB2YXIgcCA9IHBhcnNlTnVtKCQoJ3NiYy0nICsga2V5KS52YWx1ZSk7CiAgICBpZiAoa2V5ID09PSAndHMnICYmIHAuZW1wdHkpIHsKICAgICAgaWYgKGlzQ3VzdG9tKCkpIHJldHVybiAnVGVuc2lsZSBzdHJlbmd0aCBpcyByZXF1aXJlZCBmb3IgYSBjdXN0b20gbWF0ZXJpYWwuJzsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAocC5lbXB0eSAmJiBpc0N1c3RvbSgpICYmIChrZXkgPT09ICdwbWluJyB8fCBrZXkgPT09ICdwbWF4JyB8fCBrZXkgPT09ICdwY3QnKSAmJiBwYXJzZU51bSgkKCdzYmMtdHMnKS52YWx1ZSkuZW1wdHkpCiAgICAgIHJldHVybiAnRW50ZXIgYSB0ZW5zaWxlIHN0cmVuZ3RoIHRvIGZpbGwgaW4gYSBzdGFydGluZyByYW5nZSwgb3IgdHlwZSB5b3VyIG93biBwZXJjZW50YWdlLic7CiAgICBpZiAocC5lbXB0eSkgcmV0dXJuIExBQkVMW2tleV0gKyAnIGlzIHJlcXVpcmVkLic7CiAgICBpZiAoIXAub2spIHJldHVybiBMQUJFTFtrZXldICsgJyBtdXN0IGJlIGEgdmFsaWQgbnVtYmVyLic7CiAgICBpZiAocC5uIDw9IDApIHJldHVybiBMQUJFTFtrZXldICsgJyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLic7CiAgICBpZiAoKGtleSA9PT0gJ3BtaW4nIHx8IGtleSA9PT0gJ3BtYXgnIHx8IGtleSA9PT0gJ3BjdCcpICYmIHAubiA+PSA1MCkgcmV0dXJuIExBQkVMW2tleV0gKyAnIG11c3QgYmUgbGVzcyB0aGFuIDUwJSBvZiB0aGlja25lc3MuJzsKICAgIGlmIChrZXkgPT09ICdwbWF4JykgewogICAgICB2YXIgbW4gPSBwYXJzZU51bSgkKCdzYmMtcG1pbicpLnZhbHVlKTsKICAgICAgaWYgKG1uLm9rICYmIG1uLm4gPiAwICYmIHAubiA8IG1uLm4pIHJldHVybiAnTWF4aW11bSBjbGVhcmFuY2UgJSBtdXN0IGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bS4nOwogICAgfQogICAgaWYgKGtleSA9PT0gJ2ZjJykgewogICAgICB2YXIgdCA9IHBhcnNlTnVtKCQoJ3NiYy10JykudmFsdWUpOwogICAgICBpZiAodC5vayAmJiB0Lm4gPiAwICYmIHRvTW0ocC5uLCAkKCdzYmMtZmMtdW5pdCcpLnZhbHVlKSA+PSB0b01tKHQubiwgJCgnc2JjLXQtdW5pdCcpLnZhbHVlKSkgcmV0dXJuICdDbGVhcmFuY2UgbXVzdCBiZSBzbWFsbGVyIHRoYW4gdGhlIG1hdGVyaWFsIHRoaWNrbmVzcy4nOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvKiAtLS0tLS0tLS0tIHJhbmdlIGRlZmF1bHRzIC0tLS0tLS0tLS0gKi8KICB2YXIgdXNlckVkaXRlZFBjdCA9IGZhbHNlOwogIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0UmFuZ2UoKSB7CiAgICBpZiAoIWlzQ3VzdG9tKCkpIHsKICAgICAgdmFyIG0gPSBDRkcubWF0ZXJpYWxzWyQoJ3NiYy1tYXQnKS52YWx1ZV07CiAgICAgIHJldHVybiB7IG1pbjogbS5taW5QY3QsIG1heDogbS5tYXhQY3QsIHNyYzogJ21hdGVyaWFsJyB9OwogICAgfQogICAgdmFyIHRzID0gcGFyc2VOdW0oJCgnc2JjLXRzJykudmFsdWUpOwogICAgaWYgKHRzLm9rICYmIHRzLm4gPiAwKSB7CiAgICAgIHZhciBiID0gYmFuZEZvcih0b01wYSh0cy5uLCAkKCdzYmMtdHMtdW5pdCcpLnZhbHVlKSk7CiAgICAgIHJldHVybiB7IG1pbjogYi5taW5QY3QsIG1heDogYi5tYXhQY3QsIHNyYzogJ3N0cmVuZ3RoJyB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGZpbGxQY3REZWZhdWx0cyhmb3JjZSkgewogICAgaWYgKHVzZXJFZGl0ZWRQY3QgJiYgIWZvcmNlKSByZXR1cm47CiAgICB2YXIgciA9IGN1cnJlbnREZWZhdWx0UmFuZ2UoKTsKICAgIGlmIChyKSB7CiAgICAgICQoJ3NiYy1wbWluJykudmFsdWUgPSBwbGFpbihyLm1pbiwgNCk7CiAgICAgICQoJ3NiYy1wbWF4JykudmFsdWUgPSBwbGFpbihyLm1heCwgNCk7CiAgICAgICQoJ3NiYy1wY3QnKS52YWx1ZSA9IHBsYWluKChyLm1pbiArIHIubWF4KSAvIDIsIDQpOwogICAgfSBlbHNlIHsKICAgICAgJCgnc2JjLXBtaW4nKS52YWx1ZSA9ICcnOyAkKCdzYmMtcG1heCcpLnZhbHVlID0gJyc7ICQoJ3NiYy1wY3QnKS52YWx1ZSA9ICcnOwogICAgfQogICAgc2V0RXJyKCdwbWluJywgbnVsbCk7IHNldEVycigncG1heCcsIG51bGwpOyBzZXRFcnIoJ3BjdCcsIG51bGwpOwogICAgdXBkYXRlTm90ZXMoKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlTm90ZXMoKSB7CiAgICB2YXIgciA9IGN1cnJlbnREZWZhdWx0UmFuZ2UoKSwgdHh0OwogICAgaWYgKCFyKSB0eHQgPSAnPHN0cm9uZz5FZGl0YWJsZSBkZWZhdWx0cy48L3N0cm9uZz4gRW50ZXIgYSB0ZW5zaWxlIHN0cmVuZ3RoIGFib3ZlIGFuZCBhIHN0cmVuZ3RoLWJhc2VkIHN0YXJ0aW5nIHJhbmdlIHdpbGwgYmUgZmlsbGVkIGluLCBvciB0eXBlIHlvdXIgb3duIHJhbmdlLic7CiAgICBlbHNlIGlmIChyLnNyYyA9PT0gJ3N0cmVuZ3RoJykgdHh0ID0gJzxzdHJvbmc+RWRpdGFibGUgZGVmYXVsdHM6PC9zdHJvbmc+ICcgKyBnKHIubWluLCA0KSArICfigJMnICsgZyhyLm1heCwgNCkgKyAnJSBvZiB0aGlja25lc3MsIGVzdGltYXRlZCBmcm9tIHRoZSBlbnRlcmVkIHRlbnNpbGUgc3RyZW5ndGguIFRoZXNlIGFyZSBnZW5lcmFsIHN0YXJ0aW5nIHBvaW50cywgbm90IHVuaXZlcnNhbCBtYWNoaW5lIHNldHRpbmdzLic7CiAgICBlbHNlIHR4dCA9ICc8c3Ryb25nPkVkaXRhYmxlIGRlZmF1bHRzOjwvc3Ryb25nPiAnICsgZyhyLm1pbiwgNCkgKyAn4oCTJyArIGcoci5tYXgsIDQpICsgJyUgb2YgdGhpY2tuZXNzIGZvciAnICsgZXNjKENGRy5tYXRlcmlhbHNbJCgnc2JjLW1hdCcpLnZhbHVlXS5uYW1lLnRvTG93ZXJDYXNlKCkpICsgJy4gVGhlc2UgYXJlIGdlbmVyYWwgc3RhcnRpbmcgcG9pbnRzLCBub3QgdW5pdmVyc2FsIG1hY2hpbmUgc2V0dGluZ3Mg4oCUIGNoYW5nZSB0aGVtIHRvIG1hdGNoIHlvdXIgbWFjaGluZSBtYW51YWwuJzsKICAgICQoJ3NiYy1yYW5nZS1ub3RlJykuaW5uZXJIVE1MID0gdHh0OwogICAgJCgnc2JjLXNpbmdsZS1ub3RlJykuaW5uZXJIVE1MID0gdHh0LnJlcGxhY2UoJ0VkaXRhYmxlIGRlZmF1bHRzOicsICdQcmUtZmlsbGVkIHdpdGggdGhlIG1pZHBvaW50IG9mIHRoZSBzdGFydGluZyByYW5nZS4nKS5yZXBsYWNlKCdFZGl0YWJsZSBkZWZhdWx0cy4nLCAnUHJlLWZpbGxlZCB3aGVuIGEgc3RhcnRpbmcgcmFuZ2UgaXMgYXZhaWxhYmxlLicpOwogIH0KCiAgZnVuY3Rpb24gYXBwbHlNYXRlcmlhbCgpIHsKICAgIHZhciBrZXkgPSAkKCdzYmMtbWF0JykudmFsdWUsIGN1c3RvbSA9IGtleSA9PT0gJ2N1c3RvbSc7CiAgICAkKCdzYmMtdHMtcmVxJykuaGlkZGVuID0gIWN1c3RvbTsKICAgICQoJ3NiYy10cy1vcHQnKS5oaWRkZW4gPSBjdXN0b207CiAgICBpZiAoY3VzdG9tKSAkKCdzYmMtdHMnKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtcmVxdWlyZWQnLCAndHJ1ZScpOwogICAgZWxzZSAkKCdzYmMtdHMnKS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtcmVxdWlyZWQnKTsKICAgIHNldEVycigndHMnLCBudWxsKTsKICAgIGlmIChjdXN0b20pIHsKICAgICAgJCgnc2JjLW1hdC1oZWxwJykudGV4dENvbnRlbnQgPSAnRW50ZXIgdGhlIHRlbnNpbGUgc3RyZW5ndGggZnJvbSB5b3VyIG1hdGVyaWFsIGNlcnRpZmljYXRlIG9yIGRhdGFzaGVldDsgYSBzdGFydGluZyByYW5nZSBpcyBlc3RpbWF0ZWQgZnJvbSBpdC4nOwogICAgICAkKCdzYmMtdHMtaGVscCcpLnRleHRDb250ZW50ID0gJ1JlcXVpcmVkIGZvciBhIGN1c3RvbSBtYXRlcmlhbC4nOwogICAgfSBlbHNlIHsKICAgICAgdmFyIG0gPSBDRkcubWF0ZXJpYWxzW2tleV0sIHUgPSAkKCdzYmMtdHMtdW5pdCcpLnZhbHVlOwogICAgICAkKCdzYmMtbWF0LWhlbHAnKS50ZXh0Q29udGVudCA9ICdHZW5lcmFsIHN0YXJ0aW5nIHJhbmdlOiAnICsgZyhtLm1pblBjdCwgNCkgKyAn4oCTJyArIGcobS5tYXhQY3QsIDQpICsgJyUgb2YgdGhpY2tuZXNzLic7CiAgICAgICQoJ3NiYy10cy1oZWxwJykudGV4dENvbnRlbnQgPSBtLnRlbnNpbGUKICAgICAgICA\/ICdUeXBpY2FsOiDiiYggJyArIGcoZnJvbU1wYShtLnRlbnNpbGVbMF0sIHUpLCAzKSArICfigJMnICsgZyhmcm9tTXBhKG0udGVuc2lsZVsxXSwgdSksIDMpICsgJyAnICsgKHUgPT09ICdrc2knID8gJ2tzaScgOiAnTVBhJykgKyAnLiBPcHRpb25hbCDigJQgdXNlZCB0byBmbGFnIGdyYWRlcyBvdXRzaWRlIHRoZSB0eXBpY2FsIHJhbmdlLicKICAgICAgICA6ICdPcHRpb25hbCDigJQgdXNlZCB0byBmbGFnIGdyYWRlcyBvdXRzaWRlIHRoZSB0eXBpY2FsIHJhbmdlLic7CiAgICB9CiAgICB1c2VyRWRpdGVkUGN0ID0gZmFsc2U7CiAgICBmaWxsUGN0RGVmYXVsdHModHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIGFwcGx5QmFzaXMoKSB7CiAgICB2YXIgYiA9IGJhc2lzKCk7CiAgICAkKCdzYmMtZy1yYW5nZScpLmhpZGRlbiA9IGIgIT09ICdyYW5nZSc7CiAgICAkKCdzYmMtZy1zaW5nbGUnKS5oaWRkZW4gPSBiICE9PSAnc2luZ2xlJzsKICAgICQoJ3NiYy1nLWZpeGVkJykuaGlkZGVuID0gYiAhPT0gJ2ZpeGVkJzsKICAgICQoJ3NiYy1iYXNpcy1oZWxwJykudGV4dENvbnRlbnQgPSB7CiAgICAgIHJhbmdlOiAnU2hvd3MgbWluaW11bSwgbWlkcG9pbnQgYW5kIG1heGltdW0gY2xlYXJhbmNlIGZyb20gYSAlIHJhbmdlLicsCiAgICAgIHNpbmdsZTogJ1Nob3dzIG9uZSBjbGVhcmFuY2UgdmFsdWUgZnJvbSBhIHNpbmdsZSAlIG9mIHRoaWNrbmVzcy4nLAogICAgICBmaXhlZDogJ0NoZWNrcyBhIGNsZWFyYW5jZSB2YWx1ZSB5b3UgZW50ZXIgYWdhaW5zdCB0aGUgc3RhcnRpbmcgcmFuZ2UuJwogICAgfVtiXTsKICAgIFsncG1pbicsICdwbWF4JywgJ3BjdCcsICdmYyddLmZvckVhY2goZnVuY3Rpb24gKGspIHsgc2V0RXJyKGssIG51bGwpOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gY2FsY3VsYXRpb24gLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIGNvbXB1dGUoKSB7CiAgICBjbGVhckFsbEVycm9ycygpOwogICAgdmFyIGVycnMgPSBbXTsKICAgIGFjdGl2ZUtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IHZhciBtID0gY2hlY2soayk7IGlmIChtKSB7IHNldEVycihrLCBtKTsgZXJycy5wdXNoKG0pOyB9IH0pOwogICAgaWYgKGVycnMubGVuZ3RoKSB7IHNob3dFcnJvcnMoZXJycyk7IHJldHVybiBmYWxzZTsgfQoKICAgIHZhciBtYXRLZXkgPSAkKCdzYmMtbWF0JykudmFsdWUsIGIgPSBiYXNpcygpOwogICAgdmFyIHRVID0gJCgnc2JjLXQtdW5pdCcpLnZhbHVlLCB0c1UgPSAkKCdzYmMtdHMtdW5pdCcpLnZhbHVlOwogICAgdmFyIHRJbiA9IHBhcnNlTnVtKCQoJ3NiYy10JykudmFsdWUpLm4sIHQgPSB0b01tKHRJbiwgdFUpOwogICAgdmFyIHRzUCA9IHBhcnNlTnVtKCQoJ3NiYy10cycpLnZhbHVlKSwgdHNJbiA9IHRzUC5vayA\/IHRzUC5uIDogbnVsbCwgdHMgPSB0c0luICE9PSBudWxsID8gdG9NcGEodHNJbiwgdHNVKSA6IG51bGw7CiAgICB2YXIgUiA9IHsgbWF0S2V5OiBtYXRLZXksIGJhc2lzOiBiLCB0VTogdFUsIHRzVTogdHNVLCB0SW46IHRJbiwgdDogdCwgdHNJbjogdHNJbiwgdHM6IHRzLCBkZWY6IGN1cnJlbnREZWZhdWx0UmFuZ2UoKSB9OwoKICAgIGlmIChiID09PSAncmFuZ2UnKSB7CiAgICAgIFIucE1pbiA9IHBhcnNlTnVtKCQoJ3NiYy1wbWluJykudmFsdWUpLm47CiAgICAgIFIucE1heCA9IHBhcnNlTnVtKCQoJ3NiYy1wbWF4JykudmFsdWUpLm47CiAgICAgIFIucE1pZCA9IChSLnBNaW4gKyBSLnBNYXgpIC8gMjsKICAgICAgUi5jTWluID0gdCAqIFIucE1pbiAvIDEwMDsgUi5jTWF4ID0gdCAqIFIucE1heCAvIDEwMDsgUi5jTWlkID0gdCAqIFIucE1pZCAvIDEwMDsKICAgIH0gZWxzZSBpZiAoYiA9PT0gJ3NpbmdsZScpIHsKICAgICAgUi5wID0gcGFyc2VOdW0oJCgnc2JjLXBjdCcpLnZhbHVlKS5uOwogICAgICBSLmMgPSB0ICogUi5wIC8gMTAwOwogICAgfSBlbHNlIHsKICAgICAgUi5mY1UgPSAkKCdzYmMtZmMtdW5pdCcpLnZhbHVlOwogICAgICBSLmZjSW4gPSBwYXJzZU51bSgkKCdzYmMtZmMnKS52YWx1ZSkubjsKICAgICAgUi5jID0gdG9NbShSLmZjSW4sIFIuZmNVKTsKICAgICAgUi5wID0gUi5jIC8gdCAqIDEwMDsKICAgIH0KICAgIHJlbmRlcihSKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gc2hvd0Vycm9ycyhlcnJzKSB7CiAgICB2YXIgYm94ID0gJCgnc2JjLWVycm9yJyk7CiAgICBib3guaW5uZXJIVE1MID0gJzxzdHJvbmc+UGxlYXNlIGNvcnJlY3QgdGhlIGZvbGxvd2luZyBpbnB1dCcgKyAoZXJycy5sZW5ndGggPiAxID8gJ3MnIDogJycpICsgJzo8L3N0cm9uZz48dWw+JyArCiAgICAgIGVycnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAnPGxpPicgKyBlc2MoZSkgKyAnPC9saT4nOyB9KS5qb2luKCcnKSArICc8L3VsPic7CiAgICBib3guaGlkZGVuID0gZmFsc2U7CiAgICAkKCdzYmMtYm9keScpLmhpZGRlbiA9IHRydWU7CiAgfQoKICBmdW5jdGlvbiBkdWFsKG1tLCB1KSB7IHJldHVybiBmbXRMZW4obW0sIG90aGVyVW5pdCh1KSkgKyAnICcgKyBvdGhlclVuaXQodSk7IH0KCiAgZnVuY3Rpb24gcmVuZGVyKFIpIHsKICAgIHZhciB1ID0gUi50VTsKICAgICQoJ3NiYy1lcnJvcicpLmhpZGRlbiA9IHRydWU7CiAgICAkKCdzYmMtYm9keScpLmhpZGRlbiA9IGZhbHNlOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuc2JjLXUnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHU7IH0pOwogICAgdmFyIG1hdE5hbWUgPSBSLm1hdEtleSA9PT0gJ2N1c3RvbScgPyAnQ3VzdG9tIG1hdGVyaWFsJyA6IENGRy5tYXRlcmlhbHNbUi5tYXRLZXldLm5hbWU7CiAgICB2YXIgc3RhdHVzLCBsaW5lcyA9IFtdOwogICAgaWYgKFIudFUgPT09ICdpbicpIGxpbmVzLnB1c2goJ1RoaWNrbmVzcyA9ICcgKyBnKFIudEluKSArICcgaW4gw5cgMjUuNCA9ICcgKyBnKFIudCkgKyAnIG1tJyk7CgogICAgdmFyIGNoZWNrID0gJCgnc2JjLXItY2hlY2snKTsKICAgIGNoZWNrLmhpZGRlbiA9IHRydWU7IGNoZWNrLmNsYXNzTmFtZSA9ICdzYmMtbm90ZSc7CgogICAgaWYgKFIuYmFzaXMgPT09ICdyYW5nZScpIHsKICAgICAgJCgnc2JjLXItcmFuZ2UnKS5oaWRkZW4gPSBmYWxzZTsgJCgnc2JjLXItb25lJykuaGlkZGVuID0gdHJ1ZTsKICAgICAgJCgnc2JjLXItaGVhZCcpLnRleHRDb250ZW50ID0gJ1JlY29tbWVuZGVkIGJsYWRlIGNsZWFyYW5jZSByYW5nZSc7CiAgICAgICQoJ3NiYy1yLW1pbicpLnRleHRDb250ZW50ID0gZm10TGVuKFIuY01pbiwgdSk7CiAgICAgICQoJ3NiYy1yLW1pZCcpLnRleHRDb250ZW50ID0gZm10TGVuKFIuY01pZCwgdSk7CiAgICAgICQoJ3NiYy1yLW1heCcpLnRleHRDb250ZW50ID0gZm10TGVuKFIuY01heCwgdSk7CiAgICAgICQoJ3NiYy1yLW1pbi1zdWInKS50ZXh0Q29udGVudCA9IHBjdFR4dChSLnBNaW4pICsgJyDCtyAnICsgZHVhbChSLmNNaW4sIHUpOwogICAgICAkKCdzYmMtci1taWQtc3ViJykudGV4dENvbnRlbnQgPSBwY3RUeHQoUi5wTWlkKSArICcgwrcgJyArIGR1YWwoUi5jTWlkLCB1KTsKICAgICAgJCgnc2JjLXItbWF4LXN1YicpLnRleHRDb250ZW50ID0gcGN0VHh0KFIucE1heCkgKyAnIMK3ICcgKyBkdWFsKFIuY01heCwgdSk7CiAgICAgICQoJ3NiYy1zLXBjdCcpLnRleHRDb250ZW50ID0gcGN0VHh0KFIucE1pbikgKyAnIOKAkyAnICsgcGN0VHh0KFIucE1heCkgKyAnIChtaWRwb2ludCAnICsgcGN0VHh0KFIucE1pZCkgKyAnKSc7CiAgICAgIGxpbmVzLnB1c2goJ01pbiA9ICcgKyBnKFIudCkgKyAnIG1tIMOXICcgKyBwY3RUeHQoUi5wTWluKSArICcgPSAnICsgZm10TGVuKFIuY01pbiwgJ21tJykgKyAnIG1tJyk7CiAgICAgIGxpbmVzLnB1c2goJ01pZCA9ICcgKyBnKFIudCkgKyAnIG1tIMOXICcgKyBwY3RUeHQoUi5wTWlkKSArICcgPSAnICsgZm10TGVuKFIuY01pZCwgJ21tJykgKyAnIG1tJyk7CiAgICAgIGxpbmVzLnB1c2goJ01heCA9ICcgKyBnKFIudCkgKyAnIG1tIMOXICcgKyBwY3RUeHQoUi5wTWF4KSArICcgPSAnICsgZm10TGVuKFIuY01heCwgJ21tJykgKyAnIG1tJyk7CiAgICAgIGlmICh1ID09PSAnaW4nKSBsaW5lcy5wdXNoKCdJbmNoZXMgPSBtbSDDtyAyNS40IOKGkiAnICsgZm10TGVuKFIuY01pbiwgJ2luJykgKyAnIC8gJyArIGZtdExlbihSLmNNaWQsICdpbicpICsgJyAvICcgKyBmbXRMZW4oUi5jTWF4LCAnaW4nKSArICcgaW4nKTsKICAgICAgc3RhdHVzID0gJ1JlY29tbWVuZGVkIGNsZWFyYW5jZSAnICsgZm10TGVuKFIuY01pbiwgdSkgKyAnIHRvICcgKyBmbXRMZW4oUi5jTWF4LCB1KSArICcgJyArIHUgKyAnLCBtaWRwb2ludCAnICsgZm10TGVuKFIuY01pZCwgdSkgKyAnICcgKyB1ICsgJy4nOwogICAgfSBlbHNlIHsKICAgICAgJCgnc2JjLXItcmFuZ2UnKS5oaWRkZW4gPSB0cnVlOyAkKCdzYmMtci1vbmUnKS5oaWRkZW4gPSBmYWxzZTsKICAgICAgJCgnc2JjLXItb25lLXZhbCcpLnRleHRDb250ZW50ID0gZm10TGVuKFIuYywgdSk7CiAgICAgICQoJ3NiYy1zLXBjdCcpLnRleHRDb250ZW50ID0gcGN0VHh0KFIucCkgKyAoUi5iYXNpcyA9PT0gJ2ZpeGVkJyA\/ICcgKGNhbGN1bGF0ZWQgZnJvbSB0aGUgZml4ZWQgdmFsdWUpJyA6ICcnKTsKICAgICAgaWYgKFIuYmFzaXMgPT09ICdzaW5nbGUnKSB7CiAgICAgICAgJCgnc2JjLXItaGVhZCcpLnRleHRDb250ZW50ID0gJ1JlY29tbWVuZGVkIGJsYWRlIGNsZWFyYW5jZSc7CiAgICAgICAgJCgnc2JjLXItb25lLWxhYmVsJykudGV4dENvbnRlbnQgPSAnUmVjb21tZW5kZWQgY2xlYXJhbmNlJzsKICAgICAgICAkKCdzYmMtci1vbmUtc3ViJykudGV4dENvbnRlbnQgPSBwY3RUeHQoUi5wKSArICcgb2YgdGhpY2tuZXNzIMK3ICcgKyBkdWFsKFIuYywgdSk7CiAgICAgICAgbGluZXMucHVzaCgnQ2xlYXJhbmNlID0gJyArIGcoUi50KSArICcgbW0gw5cgJyArIHBjdFR4dChSLnApICsgJyA9ICcgKyBmbXRMZW4oUi5jLCAnbW0nKSArICcgbW0nICsgKHUgPT09ICdpbicgPyAnID0gJyArIGZtdExlbihSLmMsICdpbicpICsgJyBpbicgOiAnJykpOwogICAgICAgIHN0YXR1cyA9ICdSZWNvbW1lbmRlZCBjbGVhcmFuY2UgJyArIGZtdExlbihSLmMsIHUpICsgJyAnICsgdSArICcsICcgKyBwY3RUeHQoUi5wKSArICcgb2YgdGhpY2tuZXNzLic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJCgnc2JjLXItaGVhZCcpLnRleHRDb250ZW50ID0gJ0ZpeGVkIGNsZWFyYW5jZSBjaGVjayc7CiAgICAgICAgJCgnc2JjLXItb25lLWxhYmVsJykudGV4dENvbnRlbnQgPSAnQ2xlYXJhbmNlIGFzICUgb2YgdGhpY2tuZXNzJzsKICAgICAgICAkKCdzYmMtci1vbmUtdmFsJykudGV4dENvbnRlbnQgPSBnKFIucCwgMyk7CiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjc2JjLXItb25lIC5zYmMtdScpLnRleHRDb250ZW50ID0gJyUnOwogICAgICAgICQoJ3NiYy1yLW9uZS1zdWInKS50ZXh0Q29udGVudCA9ICdGaXhlZCBjbGVhcmFuY2UgJyArIGZtdExlbihSLmMsIHUpICsgJyAnICsgdSArICcgwrcgJyArIGR1YWwoUi5jLCB1KTsKICAgICAgICBpZiAoUi5mY1UgPT09ICdpbicpIGxpbmVzLnB1c2goJ0NsZWFyYW5jZSA9ICcgKyBnKFIuZmNJbikgKyAnIGluIMOXIDI1LjQgPSAnICsgZyhSLmMpICsgJyBtbScpOwogICAgICAgIGxpbmVzLnB1c2goJ0NsZWFyYW5jZSAlID0gJyArIGcoUi5jKSArICcgbW0gw7cgJyArIGcoUi50KSArICcgbW0gw5cgMTAwID0gJyArIHBjdFR4dChSLnApKTsKICAgICAgICBzdGF0dXMgPSAnRml4ZWQgY2xlYXJhbmNlIGVxdWFscyAnICsgZyhSLnAsIDMpICsgJyBwZXJjZW50IG9mIHRoaWNrbmVzcy4nOwogICAgICAgIGlmIChSLmRlZikgewogICAgICAgICAgdmFyIGxvID0gUi50ICogUi5kZWYubWluIC8gMTAwLCBoaSA9IFIudCAqIFIuZGVmLm1heCAvIDEwMCwgbXNnOwogICAgICAgICAgaWYgKFIucCA8IFIuZGVmLm1pbiAtIDFlLTkpIG1zZyA9ICdCZWxvdyB0aGUgc3RhcnRpbmcgcmFuZ2Ugb2YgJyArIGcoUi5kZWYubWluLCA0KSArICfigJMnICsgZyhSLmRlZi5tYXgsIDQpICsgJyUgKCcgKyBmbXRMZW4obG8sIHUpICsgJ+KAkycgKyBmbXRMZW4oaGksIHUpICsgJyAnICsgdSArICcpLiBBIHRpZ2h0IGNsZWFyYW5jZSBjYW4gaW5jcmVhc2UgYmxhZGUgd2VhciBhbmQgY3V0dGluZyBmb3JjZTsgY2hlY2sgdGhlIGVkZ2Ugb24gYSB0ZXN0IGN1dC4nOwogICAgICAgICAgZWxzZSBpZiAoUi5wID4gUi5kZWYubWF4ICsgMWUtOSkgbXNnID0gJ0Fib3ZlIHRoZSBzdGFydGluZyByYW5nZSBvZiAnICsgZyhSLmRlZi5taW4sIDQpICsgJ+KAkycgKyBnKFIuZGVmLm1heCwgNCkgKyAnJSAoJyArIGZtdExlbihsbywgdSkgKyAn4oCTJyArIGZtdExlbihoaSwgdSkgKyAnICcgKyB1ICsgJykuIEEgd2lkZSBjbGVhcmFuY2UgY2FuIGNhdXNlIGJ1cnJzIGFuZCBlZGdlIHJvbGwtb3ZlcjsgY2hlY2sgdGhlIGVkZ2Ugb24gYSB0ZXN0IGN1dC4nOwogICAgICAgICAgZWxzZSB7IG1zZyA9ICdXaXRoaW4gdGhlIHN0YXJ0aW5nIHJhbmdlIG9mICcgKyBnKFIuZGVmLm1pbiwgNCkgKyAn4oCTJyArIGcoUi5kZWYubWF4LCA0KSArICclICgnICsgZm10TGVuKGxvLCB1KSArICfigJMnICsgZm10TGVuKGhpLCB1KSArICcgJyArIHUgKyAnKS4nOyBjaGVjay5jbGFzc0xpc3QuYWRkKCdzYmMtbm90ZS1vaycpOyB9CiAgICAgICAgICBjaGVjay50ZXh0Q29udGVudCA9IG1zZzsgY2hlY2suaGlkZGVuID0gZmFsc2U7CiAgICAgICAgICBzdGF0dXMgKz0gJyAnICsgbXNnOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qIHN0cmVuZ3RoIGFkdmlzb3J5ICovCiAgICB2YXIgc05vdGUgPSAkKCdzYmMtci1zdHJlbmd0aCcpOyBzTm90ZS5oaWRkZW4gPSB0cnVlOwogICAgaWYgKFIudHMgIT09IG51bGwgJiYgUi5tYXRLZXkgIT09ICdjdXN0b20nKSB7CiAgICAgIHZhciBtID0gQ0ZHLm1hdGVyaWFsc1tSLm1hdEtleV07CiAgICAgIGlmIChtLnRlbnNpbGUgJiYgKFIudHMgPCBtLnRlbnNpbGVbMF0gfHwgUi50cyA+IG0udGVuc2lsZVsxXSkpIHsKICAgICAgICB2YXIgYmQgPSBiYW5kRm9yKFIudHMpOwogICAgICAgIHNOb3RlLnRleHRDb250ZW50ID0gJ1RoZSBlbnRlcmVkIHRlbnNpbGUgc3RyZW5ndGggKCcgKyBnKFIudHMsIDQpICsgJyBNUGEpIGlzICcgKyAoUi50cyA+IG0udGVuc2lsZVsxXSA\/ICdhYm92ZScgOiAnYmVsb3cnKSArCiAgICAgICAgICAnIHRoZSB0eXBpY2FsICcgKyBnKG0udGVuc2lsZVswXSwgNCkgKyAn4oCTJyArIGcobS50ZW5zaWxlWzFdLCA0KSArICcgTVBhIGZvciAnICsgbS5uYW1lLnRvTG93ZXJDYXNlKCkgKwogICAgICAgICAgJy4gQSBzdHJlbmd0aC1iYXNlZCBzdGFydGluZyByYW5nZSB3b3VsZCBiZSAnICsgZyhiZC5taW5QY3QsIDQpICsgJ+KAkycgKyBnKGJkLm1heFBjdCwgNCkgKyAnJSBvZiB0aGlja25lc3M7IGNvbnNpZGVyIGFkanVzdGluZyB0aGUgcGVyY2VudGFnZXMgJyArCiAgICAgICAgICAoUi50cyA+IG0udGVuc2lsZVsxXSA\/ICd0b3dhcmQgdGhlIHVwcGVyIGVuZC4nIDogJ3Rvd2FyZCB0aGUgbG93ZXIgZW5kLicpOwogICAgICAgIHNOb3RlLmhpZGRlbiA9IGZhbHNlOwogICAgICB9CiAgICB9CgogICAgLyogc3VtbWFyeSAqLwogICAgJCgnc2JjLXMtbWF0JykudGV4dENvbnRlbnQgPSBtYXROYW1lOwogICAgJCgnc2JjLXMtdCcpLnRleHRDb250ZW50ID0gZyhSLnRJbikgKyAnICcgKyBSLnRVICsgJyAoJyArIChSLnRVID09PSAnaW4nID8gZyhSLnQpICsgJyBtbScgOiBnKFIudCAvIE1NX1BFUl9JTiwgNSkgKyAnIGluJykgKyAnKSc7CiAgICBpZiAoUi50cyAhPT0gbnVsbCkgJCgnc2JjLXMtdHMnKS50ZXh0Q29udGVudCA9IGcoUi50c0luKSArICcgJyArIChSLnRzVSA9PT0gJ2tzaScgPyAna3NpJyA6ICdNUGEnKSArIChSLnRzVSA9PT0gJ2tzaScgPyAnICgnICsgZyhSLnRzLCA0KSArICcgTVBhKScgOiAnICgnICsgZyhSLnRzIC8gTVBBX1BFUl9LU0ksIDQpICsgJyBrc2kpJyk7CiAgICBlbHNlIHsKICAgICAgdmFyIG10ID0gQ0ZHLm1hdGVyaWFsc1tSLm1hdEtleV07CiAgICAgICQoJ3NiYy1zLXRzJykudGV4dENvbnRlbnQgPSBtdCAmJiBtdC50ZW5zaWxlID8gJ05vdCBlbnRlcmVkICh0eXBpY2FsIOKJiCAnICsgbXQudGVuc2lsZVswXSArICfigJMnICsgbXQudGVuc2lsZVsxXSArICcgTVBhKScgOiAnTm90IGVudGVyZWQnOwogICAgfQogICAgJCgnc2JjLXMtYmFzaXMnKS50ZXh0Q29udGVudCA9IHsgcmFuZ2U6ICdQZXJjZW50YWdlIHJhbmdlIG9mIHRoaWNrbmVzcycsIHNpbmdsZTogJ1NpbmdsZSBwZXJjZW50YWdlIG9mIHRoaWNrbmVzcycsIGZpeGVkOiAnRml4ZWQgY2xlYXJhbmNlIHZhbHVlJyB9W1IuYmFzaXNdOwogICAgJCgnc2JjLXMtZGVmJykudGV4dENvbnRlbnQgPSBSLmRlZgogICAgICA\/IGcoUi5kZWYubWluLCA0KSArICfigJMnICsgZyhSLmRlZi5tYXgsIDQpICsgJyUgb2YgdGhpY2tuZXNzJyArIChSLmRlZi5zcmMgPT09ICdzdHJlbmd0aCcgPyAnIChmcm9tIHRlbnNpbGUgc3RyZW5ndGgpJyA6ICcgKGdlbmVyYWwgZGVmYXVsdCknKQogICAgICA6ICfigJQnOwogICAgJCgnc2JjLWQnKS5pbm5lckhUTUwgPSBsaW5lcy5tYXAoZXNjKS5qb2luKCc8YnI+Jyk7CiAgICAkKCdzYmMtc3RhdHVzJykudGV4dENvbnRlbnQgPSAnQ2FsY3VsYXRlZC4gJyArIHN0YXR1czsKICB9CgogIC8qIC0tLS0tLS0tLS0gaW5pdGlhbCBzdGF0ZSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gc2V0VW5pdChpZCwgdmFsKSB7IHZhciBzID0gJChpZCk7IHMudmFsdWUgPSB2YWw7IHMuc2V0QXR0cmlidXRlKCdkYXRhLXByZXYnLCB2YWwpOyB9CiAgZnVuY3Rpb24gaGlkZVJlc3VsdHMoKSB7ICQoJ3NiYy1yZXN1bHRzJykuaGlkZGVuID0gdHJ1ZTsgJCgnc2JjLWVycm9yJykuaGlkZGVuID0gdHJ1ZTsgfQogIGZ1bmN0aW9uIGRvUmVzZXQoYW5ub3VuY2UpIHsKICAgICQoJ3NiYy1tYXQnKS52YWx1ZSA9IGZpcnN0TWF0ZXJpYWxLZXkoKTsKICAgIHNldFVuaXQoJ3NiYy10LXVuaXQnLCAnbW0nKTsgc2V0VW5pdCgnc2JjLXRzLXVuaXQnLCAnbXBhJyk7IHNldFVuaXQoJ3NiYy1mYy11bml0JywgJ21tJyk7CiAgICAkKCdzYmMtdCcpLnZhbHVlID0gJyc7ICQoJ3NiYy10cycpLnZhbHVlID0gJyc7ICQoJ3NiYy1mYycpLnZhbHVlID0gJyc7CiAgICAkKCdzYmMtYmFzaXMnKS52YWx1ZSA9ICdyYW5nZSc7CiAgICBjbGVhckFsbEVycm9ycygpOwogICAgYXBwbHlCYXNpcygpOwogICAgYXBwbHlNYXRlcmlhbCgpOwogICAgaGlkZVJlc3VsdHMoKTsKICAgICQoJ3NiYy1zdGF0dXMnKS50ZXh0Q29udGVudCA9IGFubm91bmNlID8gJ0Zvcm0gcmVzZXQgdG8gZGVmYXVsdHMuJyA6ICcnOwogIH0KICAvKiAtLS0tLS0tLS0tIGV2ZW50cyAtLS0tLS0tLS0tICovCiAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3Quc2JjLXVuaXQnKS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7IHMuc2V0QXR0cmlidXRlKCdkYXRhLXByZXYnLCBzLnZhbHVlKTsgfSk7CiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICBpZiAoZWwuaWQgPT09ICdzYmMtbWF0JykgeyBhcHBseU1hdGVyaWFsKCk7IHJldHVybjsgfQogICAgaWYgKGVsLmlkID09PSAnc2JjLWJhc2lzJykgeyBhcHBseUJhc2lzKCk7IHJldHVybjsgfQogICAgaWYgKGVsLmlkID09PSAnc2JjLXRzJyAmJiBpc0N1c3RvbSgpKSB7IGZpbGxQY3REZWZhdWx0cyhmYWxzZSk7IHJldHVybjsgfQogICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnc2JjLXVuaXQnKSkgewogICAgICB2YXIga2V5ID0gZWwuaWQucmVwbGFjZSgnc2JjLScsICcnKS5yZXBsYWNlKCctdW5pdCcsICcnKTsKICAgICAgdmFyIGlucHV0ID0gJCgnc2JjLScgKyBrZXkpLCBwcmV2ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXByZXYnKSwgbmV4dCA9IGVsLnZhbHVlOwogICAgICB2YXIgcCA9IHBhcnNlTnVtKGlucHV0LnZhbHVlKTsKICAgICAgaWYgKHAub2sgJiYgcHJldiAmJiBwcmV2ICE9PSBuZXh0KSB7CiAgICAgICAgdmFyIHYgPSBrZXkgPT09ICd0cycgPyBmcm9tTXBhKHRvTXBhKHAubiwgcHJldiksIG5leHQpIDogZnJvbU1tKHRvTW0ocC5uLCBwcmV2KSwgbmV4dCk7CiAgICAgICAgaW5wdXQudmFsdWUgPSBwbGFpbih2LCA2KTsKICAgICAgfQogICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldicsIG5leHQpOwogICAgICBpZiAoa2V5ID09PSAndHMnKSB7IGlmICghaXNDdXN0b20oKSkgYXBwbHlNYXRlcmlhbEhlbHBPbmx5KCk7IH0KICAgICAgaWYgKGtleSA9PT0gJ3QnICYmIGJhc2lzKCkgIT09ICdmaXhlZCcpIHNldFVuaXQoJ3NiYy1mYy11bml0JywgbmV4dCA9PT0gJ2luJyA\/ICdpbicgOiAnbW0nKTsKICAgIH0KICB9KTsKICBmdW5jdGlvbiBhcHBseU1hdGVyaWFsSGVscE9ubHkoKSB7CiAgICB2YXIga2VlcCA9IHVzZXJFZGl0ZWRQY3QsIGEgPSAkKCdzYmMtcG1pbicpLnZhbHVlLCBiID0gJCgnc2JjLXBtYXgnKS52YWx1ZSwgYyA9ICQoJ3NiYy1wY3QnKS52YWx1ZTsKICAgIGFwcGx5TWF0ZXJpYWwoKTsKICAgIGlmIChrZWVwKSB7ICQoJ3NiYy1wbWluJykudmFsdWUgPSBhOyAkKCdzYmMtcG1heCcpLnZhbHVlID0gYjsgJCgnc2JjLXBjdCcpLnZhbHVlID0gYzsgdXNlckVkaXRlZFBjdCA9IHRydWU7IH0KICB9CiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgIGlmICghZWwuY2xhc3NMaXN0IHx8ICFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3NiYy1pbnB1dCcpKSByZXR1cm47CiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYmMtcGN0LWluJykpIHVzZXJFZGl0ZWRQY3QgPSB0cnVlOwogICAgdmFyIGtleSA9IGVsLmlkLnJlcGxhY2UoJ3NiYy0nLCAnJyk7CiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYmMtaW52YWxpZCcpICYmICFjaGVjayhrZXkpKSBzZXRFcnIoa2V5LCBudWxsKTsKICB9KTsKICAkKCdzYmMtZm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uIChlKSB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoaXNDdXN0b20oKSAmJiAhdXNlckVkaXRlZFBjdCAmJiBiYXNpcygpICE9PSAnZml4ZWQnKSBmaWxsUGN0RGVmYXVsdHMoZmFsc2UpOwogICAgdmFyIHJlcyA9ICQoJ3NiYy1yZXN1bHRzJyksIGZpcnN0ID0gcmVzLmhpZGRlbjsKICAgIHJlcy5oaWRkZW4gPSBmYWxzZTsKICAgIGlmICghY29tcHV0ZSgpKSB7CiAgICAgICQoJ3NiYy1zdGF0dXMnKS50ZXh0Q29udGVudCA9ICdTb21lIGlucHV0cyBuZWVkIGF0dGVudGlvbi4nOwogICAgICB2YXIgYmFkID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcuc2JjLWludmFsaWQnKTsKICAgICAgaWYgKGJhZCkgYmFkLmZvY3VzKCk7CiAgICB9IGVsc2UgaWYgKGZpcnN0ICYmIHJlcy5zY3JvbGxJbnRvVmlldykgewogICAgICByZXMuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7CiAgICB9CiAgfSk7CgogIGRvUmVzZXQoZmFsc2UpOwp9KSgpOwo=\"><\/div>\n<script>\n(function(){var e=document.getElementById(`sbc-code`);if(!e)return;var c=e.getAttribute(`data-c`);e.parentNode.removeChild(e);new Function(decodeURIComponent(escape(atob(c))))();})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Shearing Blade Clearance Recommendation Calculator estimates a starting blade clearance based on material type and thickness. Use it to support setup planning for sheet&#8230;<\/p>","protected":false},"author":2,"featured_media":25063,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8808],"tags":[8837,2169,8835,2396],"class_list":["post-25059","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-manufacturing-and-processes","tag-blade-clearance","tag-metalworking","tag-shearing","tag-sheet-metal","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/11\/Shearing-Blade-Clearance-Recommendation-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=25059"}],"version-history":[{"count":4,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25059\/revisions"}],"predecessor-version":[{"id":25067,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25059\/revisions\/25067"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/25063"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=25059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=25059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=25059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}