1431 lines
132 KiB
HTML
Executable File
1431 lines
132 KiB
HTML
Executable File
<!doctype html>
|
||
<html lang="ko">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Flow Drilldown</title>
|
||
<link rel="stylesheet" href="./app.css" />
|
||
</head>
|
||
<body>
|
||
<button id="sitemapOpenBtn" class="sitemap-fab" type="button" title="Process Map 새 창 열기">MAP</button>
|
||
<div class="data-io">
|
||
<div id="syncStatus" class="sync-status" data-state="loading">DB 불러오는 중</div>
|
||
<button id="editModeBtn" class="floating-edit-btn" type="button" title="편집모드 전환" aria-label="편집모드 전환">편집</button>
|
||
<button id="dataExportBtn" class="data-io-btn export" type="button" title="데이터 내보내기" aria-label="데이터 내보내기">
|
||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M3 15v2a4 4 0 0 0 4 4h10a4 4 0 0 0 4-4v-2"></path>
|
||
<path d="M12 3v12"></path>
|
||
<path d="M7.5 10.5 12 15l4.5-4.5"></path>
|
||
</svg>
|
||
</button>
|
||
<button id="dataImportBtn" class="data-io-btn import" type="button" title="데이터 가져오기" aria-label="데이터 가져오기">
|
||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M3 15v2a4 4 0 0 0 4 4h10a4 4 0 0 0 4-4v-2"></path>
|
||
<path d="M12 15V3"></path>
|
||
<path d="M7.5 7.5 12 3l4.5 4.5"></path>
|
||
</svg>
|
||
</button>
|
||
<input id="dataImportInput" class="data-io-input" type="file" accept="application/json,.json" />
|
||
</div>
|
||
<div class="board" id="board">
|
||
<div class="board-track" id="boardTrack">
|
||
<section class="flow-panel" id="mainPanel">
|
||
<div class="panel-head">
|
||
<h2 class="title">PROJECT FLOW</h2>
|
||
</div>
|
||
<p class="project-title">프로젝트</p>
|
||
<div id="mainFlow"></div>
|
||
<div id="mainCommonSection" class="common-section"></div>
|
||
</section>
|
||
<div id="drillColumns"></div>
|
||
<aside id="editorPanel" class="editor-panel" aria-hidden="true">
|
||
<div class="editor-head">
|
||
<div class="editor-head-info">
|
||
<div class="editor-viewer-summary editor-view-only">
|
||
<h3 id="editorViewerTitle" class="editor-viewer-title"></h3>
|
||
<div id="editorViewerMeta" class="editor-viewer-meta">
|
||
<span id="editorViewerTeam" class="editor-viewer-chip"></span>
|
||
<span id="editorViewerSystem" class="editor-viewer-chip"></span>
|
||
<span id="editorViewerRemark" class="editor-viewer-chip"></span>
|
||
</div>
|
||
</div>
|
||
<h3 id="editorTitle" class="editor-title editor-input-only">STEP DETAIL</h3>
|
||
<p id="editorSub" class="editor-sub editor-input-only">뷰어 모드입니다. 편집모드에서만 수정할 수 있습니다.</p>
|
||
</div>
|
||
<div class="editor-head-actions"><img class="ci-logo editor-ci-logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAB2CAYAAAA+2WHtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9fZBlR3Xg+TsvKio6eno7Oup1v+3t0cr0C7VU0ii0Gsx6tQxqYwZjFrOMB2OGxTa2+TAwDGBsY0KtVRAKVq3VaBgsNP7GNotlDBjLGGPMMjIwLa1WixmFgvBKBa19rZU1vXK1qrajo7e3o7binf3jZuY9mS8z731VJQmYTkWr3r038+TJc06er8ybF5oyIF9y92v3Bh2w0melun36KdXr+2zee882jK5ntTZ96+fo16f+vDBqPMjdm7d+V+mq/2zxfN4+u549HzzPPeuDx7y4ztN2Htg1HTQvrO22fb7oe4nnW4e13bbPN8+zxjjXcR+lM4+h3U7dmnOQjid3v8/ftO8+/eXqlern7s8jlLVx9hGcLgerz9h34lmX/HU9K8HP9VOTh7SfUr995kYX/Z8Pns879j5warBKOHf1lxtjF//7tMu1zdXtS6dSf/O2q42lBiv3vM+8ucTz722e9+4kvddFmLRNjRh9Sk0waszsEopSX10TYDv4963XJTjzwKxNki46zYNvqb+tlD583Ql424GxVXlIYdZw3Amed8lAiktuHtf+9rk3z5hKuqQLnxycvm1LCrTWz7xy+VzRN713iefdML4XeN67UQ6hEjLzIrjVftK2tb5rwl6rX2LePMLVF695YM/bro/g5u71pUuKUxe8EqzSs67JOa/y2CpOtXZbwem54nkJzxL8rvp9+8mVreiFee/36Xur86CLhrlnNbkq1Z8Xry5Yl3j+Pc5zf2OaaTR1v6fJ/bSDaeEZybMuZG0/aZ+DzDOLM4X7Jfxy407hpaU2ft8+N9ap+dcldCnN58WlBK92317nhC8d35SYP7UxdZWc3FnepDJRwy0H05YanqX2OZxydEtxyfG/hNNzxfO0vuU5yX1btyTfNb1g+60psxKMtF1Kw1QObZucbJb0TY3XKbxcv7n+bb0+yrykg7voW9InOZzTNpd4Htf5nuJ5DoF0gOmzUn37PGcgSr9L8Gv95HCt4dml5Po8z+HWt10Nty4cSyXFJzfmHA1KNC7VLfXZF+a8CiBH6y6Y2+2z1Hep3U7h9FzxPFe/Np4+/dee96FhH5y30m/uWQ1u+qxG31L7Ep61vrtgzotvCdYlnnc/+17iebFSTen5v33apELUB0aXksoJ6jx/5y3zKt55YOTGYe/3EZY+vOqDSw1W37IVQd5OP10w5uX9PMqy1EeN1/7vc83zEow+4+jb17M1/0r9zVu/D59quqdvf33g7ZTC3wmcan+7cLnE8/7wnlWepx2nKYNcKjatn7uXDqaU6khxKeGYplRKafcSzFp/tb81QtaWBUp9902759qlMHOp3RzepT5LSwT2WZegl5RCLi01r9Hq066Wgqrhl8IrXef6sDjU+FJaEsrh+lzw3NIsLbXljFLJzfE+Ja1X4vc8xqXULkerGgxfL12Cyc2VLvqm8HL86Ur/Wty6lpJqMn+J52UYvt73Cs9nKqaEyl3ngOSu+7QvGYgSbrk+awMr4ZWDUesjbd+HTqV/KR5965dKDVY6xq4x96lbwyUHt8+4SmPtC6OvDPShQQ7OPHzvwr02nmeL5zl8cr+78K6VEg37jCdt10d+S/2W8OriV61drd++dKvhkdaplT7zutRn7ncf3Ltw6cKtD5xLPJ8fryyeJeA15VJCbF7CfyeU5wvHuZj0LMKv8ayEQx8c+45nnnF3yVdpMtXu1a5rOM07rhrcZ5vnW2nbB85O4t/X4NT6m3e8fZRvn37nKX3pPI+By8HfSVxqbS7xvF+/KYxnjeddiPYZyFYU3lb7zDGhq34Nv1L9vm3mwSH3r0/JCcK8OHTB7fO8JPTp9VbwqNF83rE9W5Mwfd41GXP1n0+eb0UZbgf+TsDsU3+nxvVcGMydgFdr10WLSzzP3/te4nkv72Qeo9lH6Zfq9vGS+gyy7/MunPpcb6XfkkGojTW9zvGlZmjS61yfXe1LOMyDdx8YXXilcOald6lOrX4fWpXg5WA+1zzfqhzMi3cNTh+858ErB6+rfpfM9BlHH/ncDr37/K3BvcTzOp5p+V7geZVIfZBMn5eEqKvkhKiLYFsRitoYSjDT+111S+230/9OXXf11xef2rj6tO/7vIZPrn2t/jyyWZKxXL1cnT51azju5PU8/aV1SjK9lXHWcKo96yMXXfDmaT+PfOTqzDvPc8/m0cd9yiWe92tTa/cdz3PJNKjtxO7aNTglD6O0O3c7xffTF59nu7++7UtwPH1qhwuU6DtPSWFsdUxp/9vBqW/pQ7daqeFXovtOyE6pPJc874NL7qCLvrLSt70d8zzjKsEo4dH1t6tstV0XHOim1XNVLvG8H5x5y/PO85z31ddLST2LHJxcvbTfErxcvT541PCbp99cqcGo1Sv97jOG3O/S377j7RpTn/Zb6T+9vxX5mWdcub+l+lsdQ67tVsaQg7GTPO8zt0r3+/Arvd8Ft1avD9w+9br628p86IJR400XviU8u+7v9BhKMC7xPH//eee5uBs74SnY9luFNU+7Wt3tjuXZKDuB006PazvwvCA9H5FFrljB3gm52In5kJZne070gZP760tX5FR6l3Yr2YNaVqKr/9L1dtvXsjRboVN63UX/LnhbpfMlntevczh9V/Lcp9xrjK6lTHY6zToPw+chcJ+x1WB23d8K/O202U6d1Onqy/NSX77s9Fj64mn77oL/bPa/HVo+1zzfaknn/nbLdxo+2y07jcdOwPtOo/F3Gj7bLd9xPB8QK4F5DPQg+Ttvu60U22cOTh/Ypba1/ubpYyvPtzqWPiWFMw+/S89rMLcLu0+97bR9LvruI2PPJc/tvdLfLhzSuZdrX5OtPrwo4V3qr4Rfrf++eMw7vtL9ks7qQ88SnK5+utpc4nkej+9qnqcpd6h7B2ldW7qi9u8kr2qekqNPH1qVYJSiulok1+d5qc5WMi/b6aNvRJyj3U7LRx94KU45um8F9rw0fr54Xipp9iPXXxeeXbJGcj/Xn33mn3eNLydjfe6XxpS7X5PfGl1zZV4+d8GYF7atS6bOJZ5/F/E8Z/FzQHKeRs17qMEp9V17XuqrL/45OLkx5ODk6nbh0wffHL360mfeurV6XXW72sxTtw8d5sWpxse+fW23bopLH/y+k3g+L3+6aJ6DVZpT8/AvbVur0/W7ds/e30o/Nfg5HVW6LtFpnv5rcNN7NbiXeN4PdqnN88LzEgNy17l2JUXWB4Ea3Nq9Lph9iNu3rb2fG2uNwTkh79s29zf3e1569xH87dKhS3BLv0tj6yMnW1VIOVglnPrAqeH3fPG8q+087dM2JUXUR0a66N6lX+aR3z46rVRy+OT+duHbB58+8toXdqneJZ53l+82ns/VQUnJdBE6rVdiRlq3Jgg1ASnVy+FR+leDncLpglUTvq5+cjjnnnfdK/Gp1rb0vAvf2vPa+PrISB94ufp9YfSR7dqYu54/1zzP9VvDPS192pbw2UqbedqX2vbpqwteF/278MrV68Kr77wrwe/q7xLP6/C+23m+pUqpEsq1Kw1kXmTmIVxX/a0+69t/F+PnGe88ir3rfo0XXbzs4mPf9n0FtAS/9rwPvJSGW+F3l3z3VR4luM8Fz7toMGC2/byKvaakav2XYMzDtxrd0rHNy6+u9iVcc3zto8T79F3qM23b9fwSz+uwvyt43iUAXffmKdttb+HMy7QUhz7M78KhC+48wtOn377CUBKAeUpfesxLr77Kou91X5p1jaEPrBweaftSnRKs54rnfZRGDqcu5TrvfOq63wfuPPLYB05ubOkY+8ArlXnpm7btel6j707hdInn3x08zyJQQrZrwDV4NTi10pfIfWD1LfPC3ioOfcfeJUB9J0yp3z7154G7FbxLuJXq5+Srdt1nEtZgpc/mnZR94Oba7RTPu9qX6nQpvlKbLv3R534Jj74w+tB+qzI9L9y++rTGjy54XeUSz+N735M8LzG5S2H2eV7qq2+dHE61ZyVi1a67nvXpr6uvvm36/KXyfCvw+sDdyf7SfmrXfeiV1q+NYx4cu2BtFc7zxfPaXErxy/WZKzV4253r88Cp4dNX/krtS/D64FPDoy+crc5T//sSz+fDJ/fsu4nnWWAlBVBjfpeCrcEo4VGD1wWnRqxa29o4+zCyC24Ox9LE6/N8Hrgl+H1wTet30X6e8ZT6KPW7FRnsomGuzz602w7tnw+el36XaNX3eV+4Obxq/fWRlT5yXINf67c0zj4yV4NbwrXUdx8613C7xPP/CHhe+tpael2631X61ttKKTHUl9rBA11tazD7llofNRqXaF7rp2usfQ5lmAdeDc5WeF6iVZ9xzYP3tFK3VrYynu3gulX4XbzaqVLDd8tzfnxguICwz8HYBM5OVteeLf1hy07IsIUFMf3n1ZWlOdbZfjwa7gF2u3tnJ6trGz367lOeFZ4/j+V7huf2RmrQbaWdUtSpEt2p8t0oRLbkGN+X1iVFvR2epULZB07X/Z02VH3xr+G5VbnxCvNy4I2o/hAil5l+zwF/o6p/CvLlU2fWNg3uaXk+ed6XFiXFnfYPwPjA8DIVXibo96tyUET2Ak8DTyncL3Bisrp2MYU7Hg0HwA2ovg3kRYjuaerIFPQsyIMKvy/Kw5MzazWDkuLVV2a3Itu2r3kN3LxzofP+eDTcB/pGkB8HvRxlERGAi6j+DSKfBj7njPuO8TxTf6dp3uVEpHj9R8Pzwv1B6Wtr8wLueraVsl2Padu4rIyX9wPXAcsKR1AdicghUFA2VOS0oE+h8pgKD149WXmiAyceGy8jcBnoi4D/ApUrEQ4CC6gOEDZAzqnqt0Xk34N+bXnyrae7xnbk6PEBymWKXg9yvQhXAQdR9iLsQzmNcE6VCcL/JvC1kyeOnd4mrXaCzs+WY7bjuDlj/mfA9f6eknjFyobCr4LedOrM+k6Na6fHsi2nJr05PjA8Cvwuwhh0oCrOnjj6qF5E5Auq+nOnzqyft3DGo+HLVPVPRNgHkiUoyCrwE5PVtRNbwHneslOR2nNSxqPhLuAPUX4MYYAqDfENIZUNFf7lqdW1W7bQxU7Nz2czuNtu+a7iea3Yr63ZkksD+Pu1iCDnCfVpa//mSopPmtoowSl5e8WyMl5eUOXlIvwM8FJgryq7QJFIS5lGyhRhHbgd+OjyZGUz7eex8fIC8CpR3oLwYmAvjREnaD9AtenH/Z0CTyt6kyD3LE9WZuhx5Ojx3cCrUX4O4UUNvrpgYOSGOaWJnt538sSxz2RoSXK9FRrPw++SzIQyHg33Az8G/NfALnd7AvxbmugvoksB/5QGffAK98aj4c8Cv5vDzxdVRZCLCH/P4WThdF33oVGX3JdkPDeurZRoro9Hw0VU/wiR1/Zo+99MVte+7OG46Px3UH0zRl4VRRDC3Gj+fmyyuva2HmOrXff5C9ujTVeUuRVdl+JkncwXgf4Vyl7Fq5KGZio0dGzKaZSrJ2fWzm9xXKWx7BScLcnzeDTcDRxV1ReJ8H0gm6AnQR4Cvp5kJb4neF4oA2C60AMpe53W7TLqJURLyJXqp89Lv1OccnByfQ+A6cp4+ShwhzSGccErGD9JvB1XUVBjKIUB6H6Bf6TIr9Os/4V+VsbLLwe9Q5HrEDzNG3hOgbVTT9B2Zg6AQ4L8OPBJB3cAcOTo8QXQ16jqh0CulADXGHGrHCH8VhgIHAJ+GPhMhcY5/pZ4WKpTa2uF3Neb6d9Fxn+u6LWoDMArehDhlxX+x/FoeOtkdc3CyMlcX088V2eKshuJvTnV8AvBc1G75C6nSGq0yzrc49EQ4AaUlyMMHR7/AZWnEH3KRbark9W1cwmM8PvwaGlJVPYhHER1P8ghRf9zYJeIXAD+isZh8rIX0dg5j0sRdjNRtr+vhzJ3N/0PL7fBCFk5VnYzq4MCLZiVJVtq97t00rwlp4xTPtaMR+5ZaTzQrJcvIBKTPLlWdFFE9gB9DHpOj04z97daajwr/Y147hz8D4C+QZGDgjT6T0GbsV8EHh2Plj4Mcq9b7vHwvtt5XoSzQDzAWsOSAfV/c8oyp0RqcHJtcpO3ZPBruBSZt9JEz7+icJPAbtVWIwUj7jS3SvifM44KynmQj6roXQJhE8rK4eUFhNtBfwFtDG5rq1ud54xs8ztWhBdU+XUR7lCD/5Gjx3creqfAz4vIQtTCTGOZuQ53zivcieqvUhac1DCS/E750jXJa95nyZP1v1+jynUi0kQdagioLIrw3wO/BdglhJIh7MK5LFvCqgt72lv+d3RfThdgWrgl56PmlYdnLjK5Hfh5JGQsAAFh2qxBN47leDScAqdBN01aew+whDJoHFIWQAaggySr8yvAl8aj4c9MVtfWE3ymIrIBnA13rDFPDbvIWTvGyeradDwafsuTTtW5zZmskgi+bYk2uXs1B246Hg2XgJtQrkFYBVaBteavXgR5BrjoxnHOrek7o6GIenmk+Z/K5c1jHYgyQmQRdIRywO23OATsB06r8g0R/nCyuvbtDL4p3kXdZUOB3EOVRk+ZOn2NWMno5YK1PjD72JW0/kzf49FwtyrvAX2vKgfx065Vpv7nLtAXgvwBygfGo+FtKPdOmr0t8+BRw6fP875we/O8Bscag5pRzjGvlK7IIVZSkrVIpQtOGtnZ3yUnYAbGynh5F6p3I/KzoIMQNTsD3upo/0fCJHHXjwA/B3xzefKtAP+x8VV7VPlD4DWNjhLjGLSRs/+brHoBfAN4m4gGuEduPD5QdC/oHwjy6lIgFErwEqJ7Xwd+UmBy8v6bU57nvHJLw5SenfT1z8ej4SLNmv4FhGcsmslO5gwc/X6fuRDBK0+nWxVRBiqyTLOMEOE6PrA0MAZi0PJVDqqwSxonYNOkx3Njcr/1maBAtSGmTRXjbin6VIYvXXOoVBfSMTWp6l9W9D0h+2LtoDPSqiwYA3llUy9Oa9sMTshy+3oAIgsor0b48Hg0fEu6jDBZXds8fGC46oVN3Pqtqp9HVuHqk5mxPiWYdLsSJUHMEtRZQ4/QP/W5ntLQyuMA+IiibwrLU8YauB9T1FDIG0hjxP3MjekvTdbOe+9CJCOqXC/Cq4BfHo+GHwQ+anaj1xzMmehYtBmPYpfqHP5ieCmyCbqeg9GDlqV6JYe0r2Pap/5gPBriMkFvQvmgiF7WjLAZbzT2MOgQPA0UvQ7k0yI8OD4w/BCi94FMnd7posMMPhn61GStpidzNO5LnyycBQOgy5DmFE9J6XchW4qeSoPJ1Std5zzBbKS2Ml7epejdgrwZjKfrJ583iEo02X1ELcrnEN62PFl5xvbx2Hh5r8AfabNmHmZ6ELioL2+YjC5RPqvC26+erMQRkbBbkD8BXoatXyqxIQfhEwhvP3ni2AZlT7skiKW69trWC/cOH1haAv4UOOqMxjMIjwv6hMIz4wPD8wj/j6qutoZRFxT+U4RFkBfG4zGKV0BVQPUnDo+GPww6FeT/VfTvuUoD0JEie0APinBIlUPALmc4HgV+FHiSvIxbgp4X269DKYpoBQQ5rXm62JLOnXJmIIGjcJko77SRbBTUJhnrkGUyuIbsUiJE4bkNe5o/bwJuooliIzkROJuGSS2dTLZLJY3wB8ATrUJOaBnhI/+Bui6qGZYZuVbV/SLy2jCXo30seGM9wOqBIHZxlqZJb+tMls3l9BqHXcTIS2i5G7gD+PZ4tPSFyep6SVHn5MTjtA56QZDdll5hLO296WR13c57C69Lv5f+9ildQVzJaHmna5eqvlaEm4FlK2c2sFLnUQVHVVoda2jyYoS/BHlIVW8dj4Zfqez875KhvnYyZ+v60LXM81k4odg19Fxl+6w0gEGlTdq+1FcWOWYH1dfjKY0j4LoyXl5Q9HZB3px60L54gfEKB/yaqQJ8RkXedvVk5ZzF57Hx8iKqH0HkVdn9aGGyN1Fmmn5X+KQ0xtyvdQ0Ajtx4fAHlf0J4mQ0HAt5+mcBHWUmEg/BR4JdOnjjWRbecoSepm+MLhXsDgVegvMQPVIT9quwHuSGMWzGTE6cE/USNnJ1ImXpHS5F3iJr7RhFHm4XCHbyVu0bR949Hw/eajXV5p1I5D3oOkb0Y42OjUEf7dZmlZRrRlBxeey9XZyCqV4AcjJbzo6jWGo022RrvpYifWavf7unwGQgQdIBwHfBlZhXP3wYPxyDi+/GOg4jYtfwBMFVVk61x2atoLgZ4PoJNaVJSdlXHX2AZZVGDp2OeRY5Qu0EvNfye0J7/rQxoyMgRLw/hszq+AxUGgr4F5EtujLkAqTi2XMrdRqrJs5wuL0V/JHVzxqam71OHPwerOMZmsyWvQ/gAItfOVLCZH7+lRs28jiZEe8/tT7pBkL9UeGA8Gt4O3Of2iFRxKow/pwOzAWTmOme8u/rOXQdYC4VKOYZ2dVKKvOdBqASjyyMs9Zn2MwUGj42XB8BbgXc0t42BdBWbCSouWveT1AuO3CfCu5cbYx5wXhlfNQB+AeFNkAoYwUunNbKhOHXxBYF3Lk9WLtgxHTl6fKBwq6Cv9Raxhe8jrVZdixmL6+IzwAeMMa95zaVS42sqrLb+FJHvV22uRQ1eVskhIFECGG80IwNlHBVfgvJsLhpehZSbW9AwxPAOUFDEIj8ALAIXOsY1RWQzTrG3cVhwqtCzLtqq0SmnVEuKNf4tshh2MWvscLbKLYoEQ4nfokhS8NpGOME5wcDTomPdrEs6psZvTrk51Owr2DRtGnkQudA6bW2UHqXgm3Gk+xJKdIUYNzLPQWRJVQc+mvO0I8Fb3UBEBPEyF5xnHwG2tIromwQDtgtPLwfhMlUWaQx6ycHLGch2ScA6Emlg0tw/l8CyJWfoS5E0lGW5ZrBrfAKa1DrN2z+vQHkvwg2qfoNpqy8j2XCPcDTw8zFyZCzBvZPZgHsJ8Oc0e0TuoNkVf5FyKRnqnIFOo3hLyy4HAGo8z/NwAI1Bzz6gPBlKyj9nLPoYiTTiy5UazKynkrkXxiXKS1T4kCCLfvLaKWDTYxoiD/xs/DbCO5cnK6umf9eHvBK4Bbfj0hpwY70aUEGhhlsPSwP3HGlRfZ2I/GLkAWCjhVhhJK/7PAS86+SJY6mg5iZdbhKXBMiWajQEHLIBsh2FT41FEaMhuWeEoVxTL2etrMFO+rEwmj4inh9StLafpPktXATO+13drcMQI6BKbeNNV0YkVz+tux7wd9pJ7eAKxhwMbWzq3WdHnIOQ0jH8Vk5n8ZW8sY36atb10/EOSDbh+cRKmIPBqGtK09QJqhmdGZ2gxlOI5DEMqcVfLS4OyWD3afEF52A5eqrljYsQrZNijbu06aWcHNhxRobBGeoNiPkVwxZQ1pmlVfo7h0POKNl6OfmsRaAzQdt4NARlH/Bq4H3A9S3+MivLMusoxc+I+DPjzGN4rgxUeJU0TsSXxgeGH1bhoVONYS+NIy1boWEX3CLPa30tMDsBcp5DH4+ij2NQ8mhyQpFrk4NfwiE1SAA8dviqJeAOVJdsuiranBaFGGZiq54T5F1XT1YeT/tZGS+PUL0dEXfsos33gt/H7sVJ4xTeqsK7lycrT6VjO3L0+Ai4kyaCjJQBcTxr0+s4xE8Dbz954li0xm9oVVJ49nlKw1y7mhM4VaVde7ZrXZpMVuuIeNrY6MmPuNTGtA20tWlO4z0lbc42m4Y6s0yb2Nes1GqKdiMY8H/l6GD+1jIauTppeYZmZ/k+P5S0JLkOmvxuWzk4lO3TcJHdNd2ctfCkuZNE6O34xfflkWuyCfsFuXU8Gt6vyjnHySXgh3PZFrMpz+EpflNczRB5fOoZI5hKQ8OpIwZgsxMaiYpBrs2u0fC/Tdm38iS02R/rmNpxKWD210ydHOVkwDrdM3NY0Q1BNsM4rJxb3GJnKqWXhV2Tu4iGzM6XnI6HvDz7zZ0j4FUI7wJeGGgYDDBmPEY34LOa4LM7wDmaM0MWrZPlNs7GEyXlObqg8GoReYXAl8YHlu5C5MHMZsWSfaoFPSXbVYv4izwv9D+F2Qi95D1YhLui7hS5UqRX6pdMnZKhTu/l+g91Vw4vDxR9E+iLQy3vOdOmcb0YWO/Qpbd/b3mycl/aj0u1v0PhujY6SoUH4ySYtJDqFJG7BR5Kx3Lk6G0Dmo1Ilwd0Pb6JgNoNd+7GFJHbFf4mQ48qnVI8TL3c79x1dE+EUwEtXOoyt+Tgb4m4lLkS9hmIv8YaTv8gKFbrgfslifa9fD/xW6PfdCtPkZwdkPutsCnoRpAQp2zEIWjSnovj0dJgsrru2w7Av2qmiyDnCjv7cyU3B86DrirsI6KFF7Xo7IFNUdmw0qHogogsBnfEkSTeKT2j/J7GvJLJzJxtDGFwvMRSWpBG17wH9D24ZRAvs8ZhdviZCN3dECHNXPWVVXuvVY4iKw0dWQqvnnm3WwURxZ94Z6NdLH2cPKk3LS4tn6bALT29IWr3foA0Gw3TDWu5ccwEQpFD752pKGvk9U3GScv31UcWu7JMOec11B+PhgNFR8DrVfWdIrIcomqPu9JuekvS6+IY5mRoCjyu8CmBP0M4BPLToryC4PC27YPPU+Q5iyK8RoVXCnqvM+yPFFLxKQ26Mpk52tVg5uCmTlVUJ93lnjOoXV5xCcESErVS8q7TOrl+St5hKCo6RuV97e5er0h8NKjh2rRq/giP07z3OxONKnKtwNubemqCwlbJaZBSougfkUeA316erGQUt7wQ9M12Ms5E4R6SN3hecYs8CNzzeLtunqNd2mcpI1K7n8LKycsDNN7zXhyuUeCtBm/vEbVedzA2COdBnhDhPI2BOIRwCNU2CJ9xdpyqyEXnjXaYAn+Cj3Jm6RTGLnBBkfMNKi0fghH1Cl71vSCb49HwUZTzNEf7Xofyj10G53fHo+HHjFEvOayD5D6OXBdE5GlRrmwj4+aBtHUAPibCHzd0cxFJE5nvBvaieg0iP6roDWGvQWhvX2sDhKdUs3ICsI7joH8/O7u4XNEAACAASURBVMqyGJhNPadQpX091NdN9ydoDCMb6SX0Kcl7hPNkde2ZwweW7kHkPSGLFvZVCCAbImygTEW4gDJtDAxGtqyj6CM+2SXNuQC7Z/YqEMu1GfsFmlMhLZ52THY8kY6zptq7DBFN2/+nbxik8Pvo8Jx+7p1xHR9wEbnyeoF3Krpc5blRl60I+OwemwiPiMhvAV+YrK7547EfHo+GX1L0haLyFoTXoBwMjpSVuYTndt+JNOfhvwHh1SifHx8Y3o3wDXPAUi34LelIS48SjE6eZ9pFEXpE9ASRNGrLAe7rkdRSOekASimc3L2cN0hS3x8e836Fy2MPFqyXBi1TwwYd2BT4kFk3D8XDBQ61wmIMdvDWCZGm6eoi6G3Lk2/5lHig5ZEbjy8qepsgeyJMM/lVUWPKm77OC/rBk/fffHamsqGJoVOOlmm9tG6uXkl4vw68F/ghEX0C5P9QWG3JIdcj3G7Nui/NJGQqyFeA2xG+PlldOz8eLQ1AXoDyOkQ+INCeVuaju5ZWnwf+XESeBp2iHETkKoFDivy1KvecOrOWylc6rim0xigoTuecBbwbhf0C4G5/7QbSjkn1kIh8hebo2pJH7suMwhDhQrM7vM0MQBPdtNkgPSfILZPV9dp3AD43Hg0/I8hXaQ49ceRreWD4cVqkOMfOu3E188UaLbyjVZBdiQk0s24/W0pOflfgMaMnRORm4P9E5B+iPInI30lj+J5B9YIKF6UxtOdoZDCHTySz0hzYswvlSkTfL26H9kykT9AtoHo2YyhKY43oL80hURs2Io+djlDsWzM1RzJ3XTP8OVgzdmI8Gh5U1TcI8naEZWdCaVDN8zxOEgWjvyEiD6HcjfLlyZm1mc1+jpZfH4+G30C5G3i7Cq8XZDTzBkVEp/S3ArIH4Y0KrxL4zHg0vFvh0VPxqZS5MhP4ZWhUu5+DlT6fob2N0P2DGiI1xuYMbUl4cnBLAtE1iJyHlEtLvBh4YxrZtmkcnDF04bTQ3oSv0OwUn1EU2pz7/mPtnbDm567C7ahPpwS+APLFzBhBeB3IS9sWcQowHYBVGCJ8BuQBA63mAaZ913hGpl7NYRsAU7cO9XH3L8JlPBqi6Itm19ObwbjJ9yng3fakMreL/AngX45Hw4dR/hhhn9/R7s2JW0zZJ8inJqvROdalbJN9llNe0xARBWa0xqu9ItbgZmwicghYBuxejLSf0kSfTlbXGI+Gp9vMj7HjoWuZECtxO8YAS+Epgcedk5Hs0o7GdNowaEaW8rvlw4DxmYQQ/4ojUDgmznBsNnKfKlqKfnIOUFqyQYCTh39daJMLXmpGLy0PjUfDC8Afh3H4TBOODo4GKuLTuTVHOtffYLK6dmF8YLgZnSkgQGS4qrCKcpbgUrIBJTgAjEfDEapvQHm7iCzPwXOzJUAR5AKqJxC5C/ja5Ez0Wdgsz10G7NHxaOm9gvwG8HYR3kCzbg+pjvb7e4IsB82LqOxT9OdFeI0onxiPhr8BPFn4vG9uvnUFpL15ToXeXWmqPtf2fgmpUv3cb2+Qa219vRJ+kTJeGS/vAW5BdY9NS4aUDgSu2jSqM7oXUG5ZnqxcJOlr5fBV+0S4SSFE0dbg+o1vthjf8BngjhzcI0eP76c5hnaxfafGbBRxY/CZ98j7V31SVe90h8dYmpToMw/P7PPUiZqhewFW/FxZFORtkaOlRjmpfhvlpsyxowHWZHXtPoTbLK39q3wuYr4B4aUVPHJjs46hLxcUzgX+4nSS/6casiWW9xoq+wsGmj/XPIdLNrOlsBFSwK6IE4ZmnwJPq0avidl/Aeap1bULTUYnTIBW9u3SjsgFc0qcnaPT5nF8Ule8S71dKxfUfAbBHMci3v0Su+rinCY9K8rMPGFWFu1Yc/VqpRr5zAEnFEUfBr3Y/G4NV6tjwjvuf1fAp2s+NdeWTf6/4ESlGqgDVjmTmvK86vSPR0ujwweWfgH4KiIfUWHZY9iL5wTeXxDhswo/gsiPT1bXvjRpd6Bb3Iu8mqyuTyera48C7wP5IYWPAufaZTh7sqHd79CeXNhmmOQgyK8AXwV9z+EDw32Z4Vva9JHZdBx97HE2GMmlStN7pTr2X9pZThmmpQtGrk7OOyzBBmBlfNVAm690vVSN4oVGtGZ9WHXerXpN/ImrT618IzsmkTeAvliIJ03Q8X6TiutLtZ1gAp9AeTiLveq7Qa8JwPB2QE2a13r7+OX/qYr8mojY86E9PXL/+tK6i/c5XtTgtUW4Hmk3/fmbZqyfmpxZe6oHfh8TuGgOMWkgNdZpEfinFfxtKY2FyeraVNBpSA8Tx+bh5TttzyxoU6BRg1z0VBpfbk4NElFuL1S9zG2aFPkgB8P/83sPmqE0st9et9FSQiMMLKMINbr2jlW04a1tFOq6pRU8/9Tl6p0MTF2jkhx6nLJ8q7RLaZyOqxSd1uZHuCcqFwjn3Ks3UPigImQ0ZvmUG0MO94GH7ZerrAHPLHN0z8fZur6UaBPVG4+GS+MDw18A+XfAR4Dl8MYC9Od5Q7dPIfIjivzkqTNrDzhDvmWeT1bXmKyurYjyPoUfROTjwPlmE6NG2Smvf9rlohaYmxsvUOQjIvpvx6Pha93R1jV7mtKqxocePM/XzSl2X3KRmH2W9fiT5zVEUxh96mzBY5b9qH4Qmh2hEmvVmdoauCcgrIJ8MNf/ynj5chqPb1B2gtvUOyHiFxQmCncun1qZwf/I0ePXIvJWkIimUZo33DPpgObnwwIfPxlvhIM8HXP8LXmWXd5wWqcEd7YoN0BrmNrJE3Y///sO/H0f54Bvzq7Bh+vrxweGuyswUtzzz1UwIWaUcg/sEEHVvZoYpw2aP06pV/qszQnCM3vSoCdcK7u+i3SOZnkbv58uyXU0VbJy0dLdRPjuvmgM3w/fGpwwL9MoqdGoe0EWTX9eZ6U0qumR3NhtvZKhKClQS9dcdDtFdAOV9egNlMAj6wSKPdDIwysZ3FQ+BhH1Z/Y/BDlLD01Kx1gzkjme27FPx6Phwng0/CnQryJ8GOXKLfL8nIh8TJUfAn5msrr2wKn4eNZt83xyZo1Tq2uPoLwN1RtR/QQqF1N8gwwnZsIvtbmnL1LVPwL+ZDwaXpehj8fL4p+TqTl5PuMcTIFpeqMkxBZw6X4pEijVK3kmdQMwR1lpToR7N3CF97gab7CNQHwqLHi5zmN00yDdCDdwcBcU3qXolSbB3kJRA8H3EZS9bgJ3XD1ZsZuVgOaTqKr6S6jfoJRJ2BvDF4c7bAjcYd457/LAS6UP7WuTP1e35DSC6D9oJ4cdDt4ilQ5piYojyybOu7Y73x2cfQhLmaZdXm9cz+pjz2evqdoUqtPbQiYSR0SmiDxZGU7qkeec6t1xvt02d8Zituvc2JrrxMEIEXWQN51tE/DTxfh5y1C/fKItL58AfUSEb4rIU25tPGpr11Nd9LZIe2aG1VX2d03RG1yrUae9Z69zzlBJrk0fAsI0XR/Gb5xtkyLPMFtyPE/H4fHZLMcUQQhSPVaak7X7uf7973+h8Dsg16nqwPDclWZe5kVSEeQ8qh9T5QcVfdepM2vfzHyyd0d5PjmzNp2cWf+miLwN4R8Dn8Vl+fzmztyyqb/nI3n3CuirUf5yPBq+rIBfaiNzZR6ep/UG0H6cJa1QV8JtndRjTp/XkM61y8FIjUZfYz9Q5QoR3mPfQ8YwqF2DNO+8er9W9RGEj2XwHADXCry10eM+PQwhrSazBio8Rx4G7skhrKovE5HXeeOQzSC4Nafks9ygfFHhC/PQJ1O35pnn7qcOYa5e6iQm9dLPvzbFHIxSWmuO4Elz/QIsr0MXUqJnzalMr8N955jNHoyTcH2my/b3aYV0WcSWEi0BBu5Ajogubeq9NabJaLOG6vBoaQH851cboQoKLNogJ0vj0ZDkvHufKTgYnBzxEZhLArfp+nOo/ogi3xbxrwjqoiA/oOhf+E108XqljT1nxpEa2lKdaLwzuHdHeDn4uXazgYiZo+1rWd4Zb3WPOyWuhF+tXwdTT4twbfZ7FHjHVtI+SjBLRqWI13g0PAi8XdBdCc9D5N1uIJ3B7TzwKYW7RWTlVHumui8pr3ac527T7oPjA8OHVfTFgnwAeDnoABG/bBdK/CqmmTEiB4FbaDZRp3jlcLbjm4/neZs99QfLpETqYxRKiM4TZfd1GLo8sRm47nWyDwF7g6IBwqYf630lX+0RmCLyAWY/CDFdGV+1C7hF/WtS0iqhNiqBVHqdQG8AN7uz2qNy5Mbb9iByE7DHIZodmOQMlrKucNvj90cb4bpKzQDPG6XP209blPX8UF3aGP2J8YHhPZMzMwc7pHBfosqhQlQKIudVNX3FpWo4S/15RYwxYkn5InC7iO4HuQa4WuGFolypcFHgNml26PehdWpkporuQWW/RErGYNcI4AtcZFuTiakgSyiXNc2CcYkNQ8OHy0TF8nxqn9u/YYMRzr8QUOQ86Mqp1bXoxLfxaPhw/M6xeZc+WL9itqErwiwFDKXAocSLrsCjBM8FEP4tlFbPFHagz9tv0wXi3ryYsZjBwTJPunDP4eDrFfpnUZRdJDxvll/iKD1QQOSiwD0IH1HVb7vXRrdqM3aE507HfGU8Gj4IvIJmY/INYVy0DkrrqDRtAzdVfRawryx1PZ8LTnp+9XZL6m30NQ45GH2iw/S3vXcU5fUms+VjacCIvvW2UC+I9wp8xRz20gq18jKE1zRN2yNco+KE2fcn4NNs9xJ7b6aNvB44qq3oRNFJGzvZqRsO//gETeQ/D61rUXXfslUet0V4LGcUPc0EeSnCG4HfK4EYj5b2oHqXz4V7pWJPgwImIuJf4+qrOPJjU8uPNhJv/DhB4M8nZ9YecO0/Nx4NB81BFSw45C5kPt7ShUcoorIbYdSuu9A6F2FdkmuBW8cHhv8zwrcnq2tPuOZhTIdHw33AOxGuDFlgbeXaAEVEXgCaZszCGNLX3NosWIR5cUxhg5TiNiilZMhncuivAGulS2eVDXYXPuKP52lKuwGspVfBuNdSs1HxwUmAK60opJnCDtxrpRgZC5xG+Kail0PCc4NTQwumCvcK+iHg0cnqeq8ltQwuzxrPJ6trF8cHlr4gyJcRXodyiwhXtstQZhlJnKbXcCBOepJort/auObBf+baThLLsD6GOY0cchF1OnHngd1Vd0Yp+OLWuD8czlRONoo0OtXkQ0MUIADnVPUWaU9uCrivjJf3gd4KLDRp9ngithuBaL1jgjd3niY6nxnPFUePHwI+APYoxxR2fC+86as8IciHT95/zNMt4NtBP1u/L1+62pTq1nA60RqSplJwwJobi6jeNR4NB6h+AmRz4g6BaY6Q5BDw+wrXNY0l7AtrDK/6LMpfmdeu+uAHOVrZbE/kYlnE43buXdUNwO/SnZdmMS6iu1FG7UBd9yZp0FTjF4FfVNXp4QNLU+C8IOtO2S8IXObXO2de2fFpc/WZEl6Q4GGXUhZsStkbZr8EleyATx32XQ2L2oN62qhOgrFyfH7U9JnSJXU2YJbOfaOjPga7VNfwqaFBpIOsjAeSaNq2BL+IV9gxb9IkPkpOSirTXTTL6YtIRieraxvj0fCDgtygzXfmo8i8xY17Uf2QiHyzw6HN4fWc8nxyZn0KXByPhp9E+DzwJhG5BXTkJwQQv73RfDvj7gJeOdzsWObmeaafafpxlhyA2nXWW68MomT0c/VLz7pgD4A3C1zvT6zygh4E3h/x6u9L9PyjIvLt5clKNF63we6NIC8i385MKG+dNOx/Af718mRlQiJ8R44eH6jqOxG5sj0m0ipFV1q0rfe9iXD7yRPHniJfarQu0bbEl1y7eerm7ymPI3wDeFFQ/JrSlT2i+luI/DTwx+PRcALsQvVGQX4K0f2BXp5+DrzLZzwNcl9lzLl7MxPv8GhpQVUXmtRbnAZOItvU6bFwt08zZJ+ie8PHQQDntzgHw54vDgIDh9M+YF8UQFlnN11/9camkbtFdyDOk6aKH9tlLYz2bxxlZ9cmBsDBNoprG/sNR8F10kAHa1RKSj9V8PZZ2j/J/Rz8Lp6kCtgU42IZEvjNmu6tgvOV/nIOVDJGbeUxgjtTcgFQ7l6JTkUYk9W1R8YHhu+V5ijWPRDkaRP0aygfmpxZO0FeX5f6heeZ584ZPw/8m/Fo+Elt0vBvRdjXOi0KwgXQd05W15/I4NIVoG6B55FTHPpJveV0oOkz+7xLMVmEagKSKzXFm3qJER6Pja/aD9za6AO3OcP8BZqzpvGvsPlrEGSi6F0uio7HpxxS5ebmd6jf8FKlVaROizavaYifZU+CftjAa8ejXIvIO8BPAIn+hn8hwSttBgC+AXyyQseB+ddVuur0gTF3myba1tuiJYaZDVGCwkDRo6rcDfoXNOev/wKwH3UnCriIRNyrQWHtUOVzkzNrK2nfCZ6lyDgUQXYjsjdMY21fg0zWRr+va9xJv3155MsLoD1iVdIx+/SmSJB9dUo//LXpQzA58jjd3checFYup5Vf+88CsBtAaa2Y7COvYC9zHYUb6i99VN9sNN3LrEKzf/3vrmAgVZLp72RcUcnh7+sOkuupXQ1pjXkI7dxRvQDafvlt9m9Oz1m9PW0zGX4J0AUTludNR6U+amNOn6d1w9/JmbVPKvwoqicQ1oGvKfwTkB85dWb9RA/YuWffMTyfrK6tn1pdfz/w/SgfE5FVETmHyEOC/Ohkdf3zGTxr+G+D59lxTtN1qVy0bq9zpZRWSOGkgl/qtxbd2Pszns3KeHmgyk2gByVVEPip5NY/jLlwWcUpcOvV7bnqod/HmhT++wQ91EZiJuEquE9peiPvI83Q+c3Lk2+dS+EeOXp8l6reBLK/mdexZ20PkRGfliQo2QvArSdPHLuQ0iFDwxw/c3VKdW3JTYrahKrh5op8UYSvAS9FjW4P5/G2NLdhjl+ZDO+Ftjuybdr+NHBXZUzzyJ4LgMzudg0Gp9XVUuwrvV9TODncpm7coyBfNl2grTFUbNTbfiTEy2sbAPt2Ld3CUlWoEtLmu8jwXFWX2oVbTJbEbAhT3Y3IgNkxvkAT/D1nbeoe9w16ZmXP0if9ndYrRdu2VKLtar1iH+1YWqfHz/PMDpwarJz+HLQkIp4j+bR7bk72HV/nPD+1unYC+MFM+7SU8KjpoO8Ink9W1ybA28ej4buBPe4Uyz6yUMJlbp6X+iutoZeAlerY55b5aQag5iHZ0sdjsWUATBX1h7KEB1FqNLj+sYg7f/ZrNJvWUvwRuEaVdzRRjzcizRNVNgTOInLR7crdJcKSqvp1xQdV+UyeXvpSEXlti6dEOEdKOyAcDNrnUe4zMHOCMEOj5F7Jg8zxqTYBSziUJkoEY7K6tnn4wNK7ReSvkOacZfuBjzhwj1PEXke2fpCEa0U3ULkjic5z48riNYO799/inHXLEcMuYtp2yW+JZtnJL8hq1HcwDm3nGHmC+DfOOQzLOBI7ix5M2NDZ3vfvS0c8F/hPLBFSOB5XaV6PCzQdj4aAfp/FXxJn26zH7ibPqxwfZ2iWudc1Z0ptbJ+5dsX2KQ9osxD2+FCLVx/91+xw90FGZQmlgG+XISkFA0EnOD6OQV6NstdM0Q3gaTMnNoDT1vEDvQiyOvOKZ3NjA/+Fv/ZjG6aSEeDIq0lGa+sEx1vd/NFdrSMb2Yu9KPuiJJNbsgo+E+wF9o0PDP3zKfAIqvdNzqz742mzwSez83wunicwQtvSLvecUql5LjkYOSHv4zXV2tkSRTUr4+VFVG9FdE+QF21XYpsSR3eGkRdE5dblUyv24x2hT4VDiE5U5TIRWXThxwVUHhbhdxV9AGRVkCnN93hvEOFdwIuA9199amXmS0pXHD2+D7iFZvdzEDp/qEFrPQwWzrIrrAt86OT9x0qf/Ax0oWyIc4LSZeTmVZop3FKZisijCm9H9Y9EZFf8nv1sxOhnXpSHaT+KDiiifBLhNwu4dXnts7gLu1BzoEvIykTBqdUn6YTOGfjchK85SVNgRVXPC+yxNPHrshGNPKr+nkfSF+sAJM/EKkDhtDab0nI4j/yZDhoySSbb1GaeRsBpM44FkIOBv2YDnTb8s4r2ALMlpWfumS01BUvm2Vbgt+2DI2rGZXahmw2z+xKYOTyr+jfsmk+MmTHqf9cFI9OnHVcOH1/nBSB/pqrXWJ77lIHVZxrmbQ+ew3nQC37pyL8P1xpUDX21qsLr0fZ54us7v0AQ1YEg+8NBMlFGw3gYkV8ULyWFo7xDdonNZvMc/5K8jskZ9hqNa2VGh6ffQy91WIsYagjXJs887bvqoOgrEHmVsY1BQ9koIfz0kRwA+ilFHir0Mbh6svKllfFVJ2heXdgnwlRVnhZhsjxZSV+7eAq4d2W8/EWF6wU83DCOZiMcrwNenB4UU9rlHkWmqr9+8v6bfdRZS1FRuE7b9blfKiWlWOo328dkdW06Hg2/APJeVO9EZK9/5qPJ5re/Gd/wa+jGFfo8Iu93h0Z0lT4yP2icL93llXEsT73g9qFrzUP38CaC3Ivom4IE2yWfgFQU8phf7aEmDbGcooxePfP0DC9SfkSQmXMZ3NsHjlftrvQGtE+f+D86MuMAWEB1hHdGoroEh62Bp0EeKvQq8TB3b15edDmzRT3XvpJnDJe7H/OoKiv1KC9xElKBVKKP2xSzZcm9XOSYOjpTVV4Dek2O583PVvbad+K7eS7oHm0+Rxve4Gjrecg64xRY9zomgwYatWS3e3cs4vEm55a2NFlan4GSdr64lgvAW8YHlj42ObPu90bk5K4WedvrPnIdij0prhTRlbwJMvdzpZS+7VO31GfkvayMr9oL3AosRsSnOc1rVrhbN1CQp0E+fPWplVTxRwK8PPnWBeAR6gQNuLrDYx4iT79DInpTsxYrIVXaKtMGb5VZJS0wQeRuZvlUYvw8kUj6vHTtSxcOdsw1OEDzetd4tPQxmk2Ed4JcO5tKs6F7MnGb/10Q+DjILZPkEJNSvz3G2jiNzuHy+yV8irh9lSEos6XDB4aDU2eir5OVcKgZmKz3PllduzgeLd2icJmgL5Wwq95lJpAWJ9GLwEVRuZCEKgNF9zQZJ8LRrVHa1k8Tkc8r/Pap1Zlvxg9UdRewFIIlsftAbGZFQWS3HavCQESaJRbvkCRa3rzCtlSgY05v9ckmdhm1UpayJuupsWswR4KshH0NwswJZJW+S+Npnhkbmho4IETFCV6leVrS1SltQ3sR/oGdk5bn2ayNtg5k0z7P8yiCx8y3qB+3OdRnA2g1hHeYbD82ko+yVuYNmyiul3Y8tFWjPRE24HApkiWaU+P8fqyUbjkezMfzQnv/2lqfiK4WaXcpq656uee96yq8VVSub3f9tg88h4PR9AqrnUh3AbUd0PPg1TXe6RVHb1sA3oXKOAoyowx7+0pcKEFBc+vJE8f8ucxd3l0J35qXmCt9x9wlG504TVbXAb40PrD0N6BvRvjvQK5EGdhZla4X0hwh+QBwF+h9cxxY0Vf2kWYNeHfwzgNPHE4E+XOn/c0VDfbFy9PpyfFo+M9AX0fzacn9oJuonFZ4QkT+VuEJQc6hXEA432IIwECQvdqsTS8JchnC96FcjnKZiu4WkWdE+TPgnlOra35TZxStSXOMaziLPI6J2kjIyfhZoqcMPF8zm7eaOi2PNyo0yUWRudJXVudt36kfwnswVmbt/ot8P30yClMXmLh+POgoCEiXgfJw6jiU8dDmiFTfW5qptsbd1XA42lptsQ6lqRjX1BnZaq19QtTZvQs+7d/WDXGfJOGTAZviFm9gdvVm9y3k6FaTvX48L9xbYLZxba1kHsXUN43f1bb0bABMHzt81QsEeS/SfFISvPD413baNFDsSQHCI4p+/OrJt2p4ksGlK51XHIPAMvCOGTmOjAKzZ7U3zx8APlWDP0fZyhj6pPf7wqriMjmz/tR4NPwfgN9W5QdE+EfAtQr7BRbcstx5FX1KkL9GOAE8aj6x2DXWee8PaObLruAn+vSgu04TfJn2UHeM58Jrsrr2DPCb7l+f0qvf8Wi4IMhu4Lw/xKeCw8Z4NPwN4IXA2OYqwl9lqsJnRfh6Ausion+Iyi0IC9HBKK44OGeBT1fG0UXTedPx6b15sl8zyDc/O6Qjj8Nc47Lfo4+6L2+Oy/XZlzbts+ZNElLeh9Ii0ly6So16LvK8DZIzndqzP6xxzzWIEhSJE+FWwntxJ4bjW7ZjMXidR1l3NefRqTC/LEcljdC3arxtZ7V7XSl3X2qD8s/819Ter8rlNhUTheg57665saFw59WTb60aHEO/R44eXzx54lguyisZ/dLzUI4cPb5Ic3i/3dWaTATzyo5de0I2gQ+cPHEsXcfM9Tuvsc21L42x5vR0yU9Kq9RxtO38CWtPA593/xiPhntCXeHiqdV1+2nF0tjs/T5OWv6ZskBzwlqSBpQoBEKwXx/LyUdX6euZb4XntVTeFMJhGvbc+7T/lMZfA35Y4ZUC/xD0oFOQFwWeQPgrgQcmq2vRNwwmq2vT8YHhv0JYAflJYEz4UAwA5wT9Jiq/j/AgeTnsSl+W6udkMa2f1rP6a5Dcm/1r0rC5Q3va5RoWDQ4lvHL8i67bLcDp6Xyh7xzsXCTeh+cW3l8A/0K8XktePfFGz6fc43yWKwZNSa6jEpJiNhXvNGe7PGOynQV/xgR64RVLifFJly8icoYVrRhhd/05hKeZlaGcjG6L58m9qY3QSx2mv0slJ9gpzD4wSjDTMgVuAN4IxvhFa4CesanLBghfQfXzGZymVxw9fh3w/ituPH7H4/cf+5v0+ZGjx3ejXAfcoOhhQQYq+rfSnEb2zZMnjqXj8X28XFVfm07uyHk02CZYf5J2g12pzOMw9bnnYeae12DUFEet35KnGuTPGYUaLn3GloNdm0QAA4VdEp+C1aYTxUQLysGEx1txjvuWeXneB5e56OkcgAlNpqBLB/gyiVQ2FAAAIABJREFUAKaTM2sXgM8cPjC8V4R9oAtG1V8Ezk3OzBzZm8OnFjXneNsVCXWNu9RH9LfdrJVLuAU5GnX06+9X8DdpZGyfjYQK8vcrsLvGVrs3oDng6l3AzwD7BTnvENkAzoXUuvIUqpvtUoOu0USzaVrnaYSNGaL59DggqrsQ+TVFl3yjaMOh302vHEf46xnMM3ZB4oslQaK53qCgB1z2yte7DNWFZkw6FZH/BfTjlaNtc/NwKzzP6qn06Ff7uyTwfQx3n4nTN7LLRoQr46t2KXqzwL50v1R0xKtZWzGvqp0T9I6rT33LH7kY8Dhy9PgA+BDKa4BXXnHj8ftE+CrNkZeLwLXAP0G4BtgTvOFGHJ4BfgR4OB3DkaPHdyl6m0j8kYlox7G9G5ILgirnBG49ef+xLp500a2vsrXF1y3Bs9e2Te5+Dpe0n5wTmXMUajKV4lEba28aibhIqvA6WNiAqc1Z/z1x6BNhPhs8L3n9uWddeOYyBTnYuWsA3Ne2ct8F74NzLlpO8U9xtjC6DH4N/7LcKouNk0KSr22LM/h+fll8a/IS468mqxcFNGFhF1W1uj4dx7Z47hy6T41Hw3tBdyGy6YzupiIbjrd95NzeL+E1ABiPlvZK89pjfAAXJnJv9rj8r5PVtS9W+t1ZnrfXXcFoX3qn8EswgfhgmRR4CiztbB5lkkO2pNiKERKtowHwKpSXe28vTrW3nrG9ZzZj3APyQBYP5ZUIr3Qpm/2KvkGVNwiyoehARBaC4xAWT0MnD6qykuJ+5OhxVPXNInJ9a8LbjMLsRG/XhFytO5Hoc5ulyVErpbo1gatNtlzblG853tfadBnotF3uXg2/LifBXs/Kr+rB8H0A5y9GaTifehM56C66DEvpujaPwrPxaLgP5eUquq+5L88IuglykWbdGUU3RGXdvOxx0e3+z/VVok2Njr5+zahzeDRclBBNAXCQBsG9CLtVda+I7KF5z/+swqMC35w038e2MHP4lp6ljmhOiWfxrYw1Bz9fVxiALNpGs5/fFIj3MuX6LDkhA2jXpKNlH8j1Y3FPf2+b55PVtYuHR8O9ArcLvFxFLgq6Pj4wPKfCWVSnwGmQTadf/z/acwlMKa7GByfF7aXZawft3yOPzmAQ/svxaDjNwXUZtyUDHJAFVf37zlYs0nxrYEFVDwruK4cwUOWCiD6KyqcRPjdZndlrYkvKs3mc8Vx7mOUbEAtSScHkmF9CIlenZBRKwpEq/xnBWRkvL9GsRe9qJ0iSPhHvoQGtIUeVJ0E/cvWpb1lFMQW44sbjuxG9FWSxPQDBf+hCF2cOQfCvRAigcg7htsfvP2bXCRvYzZexbrZLS+0GTr9qbnA360EisoLovzl54uYcXVMnp4vOtm3tea6UlGKpXvq79ryrXqnkZKbmjORKqX7GCZH9oOF1wohr6nkJqC45BVqD3ecezNJrAEzHB4Z7gN9X0dcIMnDKbBNkqqpTmt3nuCTPhkkaTsej4WaiLM+Brlsv1RwMcx7CBp+0DED3g+yyB4k4b3QJZa9xJAbQOsP4dWNxWcJGaQ5MdHkekZXxaHgb8AVj2HOlpHNKMlCKyEp/IeZPCf6ssW1oZHRGczcxsP9ZD/xy/TbP/aYwI4Pt+nF16acmbznZzent6Lcod4K+yWauGuPtDbHPSLbr3hbn+O2V+F1wVMz76O0oI33s4RDORDgm4cuZxklwmRFFF/B5Wyyc6OCxgJMX7+bEULkG4cdQPjseDX/GyWiqj7tkxtbrz/OYH+Fv6RvDtuQMbBZYAbHcIEowcv2mMKfAm4Hrvf5Ql2+365g6O2kaOKK/BjLJwRbhZ0Guh3gixEeMJiveTogU/YQ03yS34/K/bxb3VSkz1Yx4pQtFkQB9UETsK0NdNMvxyY41rZsruci6VLrwyJUcHjnlUWqbOjJpXzkZtP2WHMr0dzx+YdF8X70pSRDhdhnvTdrXxmBLrn6e58KLwRrzJq0aRWMaKbZIjgF7/2AYhEldQhJREjsxHl70uk4658w7x+1pYFZhGnmPm+6hOWnx08CvjkfDD7pDgmpGN1dqhqlktIsKc46/ALsE3U9mg1VCD3vAly21uWH1VvTeuSej7cvwZas0y+nsqIwPDEegR70xj2Unx3MinKMv7iX4R0Y2s8kwZF8TWgMLUf8Stw/nfZj9VjP91v8uILwe+FPgs128KvylUr8PHP98Zpc75Bmd8y7Kim+2lIxKyQPO/Z4CrBxevgL03d4Qxow1KRXzboTRud8U5GPpp1GB6ZGjxw+hfKBJkyXgiPVU2B3pxEjgSUU+fPLEsRmaHDl6/EqFd6TbYgQSAfc7JCNB/bKIfuHkiZvtvZrBttc1g1EydqmhTPlbKjVjGJXxaHil498NwBXiojYVvQjyqDQ7Zn/bpYVrhj6FX3JW0nH2GVN+/KoPIrKOT9PZqBRM6kXv0zhCrzljXbS1cEIbVW5s1l6NcrK4+DjFPguKtNmjEayzxjmimWSnGV8UHYXslNqZ1/4NqWBN4Nioq1X+Mx5DQ99F4JeB/x34hKFHji41+uWucwYrB7fmOObu+3sLIeKMCe7+H14z2zs+sLQwOTNzdkItIAr4hWjY8IHg2CV5+PzYcyWVzxJN2tLsF9i9Azw3WcuUZmasredSltkWsLudpOiR2f5tvdR5UMO7EHTpQJBDWZqUZahEx148z1wD7edTa5PCKiXM75IiqhmUrvap4o36XBkvLyC8H5XLfLoGPPEb0xrSIzat3fzZUOX25cmKNRQAgyM3Hh+gejOi4bvObUONhKDp0PWk6ju5E/RJU2MKzdo5cJfAohp8g2L1XqX/FQd+G8AHadZDPcwcH2pCNKBM75ojV+NvCqMGM8JnfGB4vaL3A/9ckBeKyl6aNdPdgiwJ+hLgdpS/GI+Guw08OwYr0Cn+OfrMU0p9Nc+ER1B+VOFeVT2LyBRlqjBFZKrwFMKvI/LPJIaZc3T64FfmuXBFozjTbIFzMX3U7OyInyPJjl3TrD2SKVWlYDJG9q6Db+tbYxJ0IgTZDi6wxSfpMGDoEw2qA5SfdjJh6ZA6RjW90qWvtlPyzqXqocjJCqSTQG//4RkNp/1F8HLyTfJsII6/1plqus/QeBbvGl16O+rgvvrm+4Zt8dzfjzNKEiJ5BfetjjZLapo1UyA4oLEtmA0C278zZBJmn0ucVRWYavOaGvSTwZJdTJ8VeU5B1y4kFft4C1v1hvvWT/tvoxJ4sbjX1Mxh+EZ5tMf3iVdshEDiPkTvzY5F+AGUn2qcBA/TV3GxtMb3jOf9dVTuefz+2TXu5hU1Xt6u73ul2E5yizshPQoIHwe+4aL+LlrVjHpX2U7bXKkZ9VcJst+dzQ2EAC/WRMK10rxNMHMOfuY6J7Ol+jknpktegzJzr6I8BPzEeDQcACOERcfX86eag15KZas0zbYTWMClWr0h96nXUonJHDuR8bIVIeoJ0VKkWX2beLJI1Hdcv33rJJlgwRCJS6r594F9FiAgfQVNGj732qKlUx/HdR59lrbLReN5OCJLgdbiRwlJLAmwV9AFILcG24XnNHG9sEHITE/9YJaeVeko8JQ2B6qMdoLndtknJMNo6Zg/2tsFcy4jYt97V+NlxJ9ZjpR7kPvgvprNdqoaHfrl0u7nBb7cQdMuHTQnz/P3c2votcjNA7ORU+5eLq2YTREkdVJkQ5vHDl+1G+VmRPe0SqatKIbA1qtq0vJ6FuQWcyJc6OfI0eOLin4Qkb02qAkQ/OY4bYXA9HVBRG49eeJY7lvne4Bbm53xgfHRJpB23REjXACcFrjdHGxTom3KB1tqXmBE2+R5jYdp2xKsPBzhQpzCao16iCqbchE0d9JSF/5U6qZtanJqSxo5TSG8qnOaPO3T9iWnozQvanX83w1Iog2fQnS/1T6PUogQzqj2ytPuE5lRcBIcsJCUsvKsTvV5JahekSqaKNuwKcri5xBp+vH4YupiZaOLb6leSut2OYAlOc7V9aUkM3uNWTAlNrGquse9utalL/PPRJZaladZnhesepceyTk+JfswnayuXRiPhn8A3KLNh3c2VQQR3VRk6mz3tNmk5uZ+o18voPoMrUnHL5m2e0AE0CeDnvQ6U41w+AgekObjTvvCcpJEDuxljt5+mbM5grhpNyAEurIg+FdQpZ07hrbNtT4yWV23342o6eW0bI3nBX2cGvScoa4hUXtW8oJzirYEcwDw2OHlgQg/Brzce1RiDECcBnT/i0Pqe5YnK48U+ni1qLwsShG1/Asw1MENwTQgIp8HvpKDq/DPBa4RG83TwvNpJ99vmyYD4CM0772XJljub4mukI8ucgqkZORzMHN16tGP8rgKm9JOmPaPyVIA57X5al0KN4dDzqnM4VeikW2Xk/3ceGpOQ1py/ZaMSwoz16f/++1CfyaFTktSR+NYfsFqem9og8w7Q2CzYaFetDnIGmbjmiZRlt+wp5EyNA6d7Rsb4QHNiYF++cmWnLJL5byrPszOByjLUgq31P9moJtNjxjj6ujWNZdKBsJd696Ifhme+0NSMrin92q6vUdAof8K5AFRllTkGYENkFWa1ykRWHfHM+fal/rucm5z9Sy8avvxaLgbYcmJ+wLNQT/NX+WfIvImIHJyQ1TfTCg7HltKxr1Evzl4nh9P7vOpFpkSAinCaf0+MPuWqQiHgPcrDOzaRditGBQKBC3WulJPKnJHDqcjNx7fD9yiortQ8Lvj8SDcX6vgzPr8Kk0UnSqZwZGjxy9HeV+DbwNEkQgtP/cEbfttIpyHEfm4O22uz+QKdKrRcI7r1MD1KTkDh7nnIgk9LcgFcLvAPcv8Rhg/R1RPnzqzbj/3WColeSyNr4+DOo+MlgxCDcfa8951Vfl30hxfvIiToXgncevbAkTbhlyoZLYptdG9e+ZyjCYd6pubcxSMj9p+SQvzalGbiZl5awRCKt8aeULXTh5aDJ8iTrdvRTZzzlTOCajxo4/R99cPCDpRkXEztNaaG9OwQbOT/4JplxtDxeFI+BTOGY88iP2FcZSubelDO4DpZHV9czwaPoIwRrkGYRPVDRF5BthEdNd4NNwFbKJstjoAVJgKbGTe6X5WeD4+MERF/VHD6058BwLn3N8nVPT7QaaCDsjOKxCR6w8fWNp96sx6ysNagNE1rg6eZ9tPS6cH1YS2KyXg623FA0v7nD42vmoBeKui10XGPFIo1tWP9qBPQe68erJiDy8YAFN3Itxbgeu8Iks/FJC+HtFG1Yogv3eyORY2ol9ziAw3CRqO/xT1UX67AhSt0beRzCbC7SdPHLNrsTka9vHkoJveJQWW6y+FWes3Hy2prAIX8a91RX4X1jmzG0xyYyl5rSl+XfhTuF8aY5fh7aJJ2l/qmdf6jfAS4SHgNwV+CmQB2EC42Mg8F6Wtuw6c91E1sKnaHOYRGXORs6r6f0fv3rYeFn6ZS5DkftNJ2CRqNtd5Y+JuH8Adm6vNWe8jkIPAZahx1I1D4aE42E9OzqzXdElO/1haklzn+FHSezVlWoQ5WV17cjwa/rcCbwFeJsiSOb1yA3gU+DQin80YsZL8zhYTmYdliuBUNffU6LVCP/M4pEV9Ph4Nr1f4MKpHRWRgsi7rqnoB5Gwjd3pB4Hz7NhIIbIKsj0fD8lBhKvBkpK01ViQmI7oLGOGMcUQrn/JH9qsyCCZEdTcie1ykvh9lCXTQ2pQ2e2Qw2C8irwQ+l9ClNodzpT/P8zwYpJviakrOX5cMdU7JlryTLscgFFFZVuFd4A0sOJPYpgHNOol/6sojwO9lxoMqV4rwTmh2Z4pplxp2Vx+/z06QFZS7MmMD5SUivLH15sw2jiTd1lQ3NVW/ICJfNLTw8LsyIzWnjMx1Cj93P31WUqA5I5R3EIRzwGbkKBnj0M5LOces7PXJDg0K+HfBSkvJs8+Ns+QEpf2lOKW/bb1OnjffRB++H/gdVd0lzQEwZ5s1Ss66z8fWeFO7n5Z5lX2X44PbVLgf4SOgbwxRmvroPH7/HZG/rfSV8itXUiVbGg+Zen3HOON0TlbXHgV+aTxaWgDZC7LgMhjn04/VVGB14GPfrXbZDrOsYd/9pj/N+ow9ujceDQ+i/D7odY1f5rMuighLCEuoXhatdYeNlBL0e+7MgzBSsTbZZ5zsG0St/DRQ2yRr+5qc6UeiPVFBL8V7sdp+A3y3luHoOgD5r2gNeqnU9El631/X+DTjxC5kbqalFD2n9WvebIpEqW2kKFcOLy8ifAAYNTsiZ2Lo5v/BkKtJ5bGJyM1XT1bSSeO/evY+0MvbpJ7xYf25nsar82lCgQ1U7zh5/81PZ+DuVtUP+vWq4F54W27XzUOKMhi0dRG54+SJYzZtUzIQKd1qv3PPupyvLgVf67PI98nq2tnxaLjRTrj4NSr/3mxzelOxn66++jg0fcbWt9SM17z9zMVzd9BK+vGgGtwSb2cMUXK/9ryWRcn1O6CRhSmwOh4Nfwtt3lyZKfGO/acKcNPS10lJ29jxpOPqel7DwRn29U2a43i7nL0q3RJcGI+WFoLlMysq8TJhFOTYvtLx2ftb4flLgWujN43MclqIcLWSL7CGOSztRHoyZCMio05syGfhOpja7oOyRt1uKA0BGFHFdjzQJloIKM3wnFla5mRnbp5nfvsyKB0sk06IEgNJnnd5yaWSFShFj4K8Pkq9mdK+x93eadO4+jltXiXIEeMlwBvdzknalLtnnN+B600vVnC+gshnDN4W7utF5GhugEmGnVYIw/rjx2m+WmRLXwPRJ9pI76fCV2vvr2twSsY1lPFoOGjdbrPsoBpo38wQOZj0WcKxj9KZx5DP69j2pXGKVw2PZ4vnNUc6rTdPRN7lbJX++jLxS06RcnXOnTmZ7xnTvivjkNZLS5fDW7pXG0cOXqlOH+cqfZ6HqexFdJddKlHE0U1NNU2zsX1woXC/dL2ElOaqBr3n9HMPnntnIHYOZpaCUqNsMrlNFY0cgPatDbM3xGMZ9kk1i/rtmpL/m47L7+LnqwXapHTcPs/zbQGmVjGlHmkOaE6h5VICOWOQllQpRjBWxlftFZFbJXwr2BvXNp1kHVPwzFCA84jccvVkJSUUV9x4fC9wM7AnbL5xwib4a+s8NCkdJ2xnEW7LRNGDI0ePX4bqTbijBj0+FsG89ygI8rjC3cn313NGo+t3qtD9vxKsnGDl+JlTAmk7f9/+i+oquoSwKzg1lhziMxgCzdpXKoPp7z5OSs0xzcl+Tsb97xwu9rpEE1u6HJRnk+e1v7mIIsfLFG6Nnn2eQ7OmD4R1zybL5pZgzHrnagVPMteW1iX9k8NxnvGV4OXkP8Urh29Or9q2aX/QfCxqYPWi+P1Fdle2Nh8VyfS1kzyfABv+4JemWxyabjnA6/E+PDf4e5hq7vs2cf12bdS/i+6zA16X+9ghtI1UvRg8ZtP+2qbZkdBWvizN207PDc8rfEhT7inAHBKpciVTP0Wi5iXP9LdyeHmgyptAb2i9dwjvwhoeNDc0OFOu3kevnnxrJYHvNsLpG0Be2q7cOBDhd+vntv4uqAqI3AP6YDoOt8HufSpypU13RV6dkc9k4WAT+PDjJ4492YNm9nmEQ/K3i48pP2291KiX6uUUZ67PUERlL8JCkvNyz9rDJRSx34cu4Z/DOVenVGo0K90vzYmukk7SLti5shM8t/VLbbpwzOGSo0OOR/ZZlnbpWqj74dvU+Jz2U6JlDh97P2fM5nFwS2Mr6VnbPmdcc/iHOmEZ2WcZ7dqxtlEwSO6Npp3m+ZPAOZHm8KgogAnRNQ4/2QQ95zThhvD/t3f9oZ4dV/1zvjwej2UJ63ubxxpC2H7J2teiIAUlgl2KUNGCNmC1iAGjqC1WUFGs2fwRQsmGkvaPKsE/KloLtgVBQhVpi+SPTfCPUtoSRDdseClBo75kQ1iWZVmWd/xj7sw9d77nzJy53/t+bb8Hdt/3zpxfc87MmTNz752LG0C/jg806BP9Hm5icAZDvJctbm0i7XomPhw+fXw6ru6HxyQDCO+fb0a+3YFNZxAfqBNJSocPhCf1vwHCJ7rbXzkciM+N3wD0s9wlA6vOUqw0EKyAs0hPfB7Ak+DhzgcJw3K3jcJp9ZycuMvA5w1d52B6gim+TtYByc18Uv4yKHy+9LPKV89mzPwhIvy2PHlo4bE60dkCRir+NwBfUeyR/85Bw68FMY1eq9cmdSu5y7NMe8IgbIPDCn2YFgNxUdG9enN2vr31GEKAeJfBd8D0LhHSDgYz3n39rcEXuEr9TGvLYDDMt7dmzDgrHpbNEke+D6CNWNdtLZ5BCKprFM6x3mDgHDHeBOGfd/eu31TsqttmWG7BMj63aEp6WP7PeXraaOogDxpaODc7XN8A47YhT9O5lHjVks9awiNlapN33r80PSVeiYdVJmwHyO9WyGNV01s2cUFkt8vSqdXn+wDvpztnQod425LCt9KfIsLXAdzuFLsLCkdcJ++LyThbvd3uno+KiOI2plxDCaJQvw5gfbBrEXdjQz+bAXxKVIGZN7on9TdAtE1hwn8IwI8AuA7gZRC+2z3ceGg+x2LfTnjWd3i1IGEFjpKwGo5UCgBwdb6zzsx/BdC5tOJO2zBdBtfdC4m9JmZj3Ss7T1D3LWjBe//hi5dPg/mzDJzvs1bInhf4i62WFGYYd4nw9LUrl+KDOYh8L3zw8oMAPwfQmU7BnpLQ80TPN2Z8FL6iFk+aq9lJXpdwBu3Gon81qPm7JYjn8mXZQwycitvt8t3lrij+3gTh7wC+DVD3Khbf7p7gRheibs/v39pPGd9g0PeMom/z+3D9MxFp0pgRYUNEwx4nLCvWEU+NomgHWkdIVGZgXk+JIWEfwLfm21sfFZ/9zCeG0njIbVnDiWUen7f6TZskPfgW/wwYzF0qnPoCp2HUBdvTTLxekJNDDU+zVWsctJKEQYA1+Gv0JX01+fH3fSBs5HvDC0sKWjjmW9M916HV59sAnSYRn8OfLtkAg8M76f+4u3f9akbrAS+uhVei9y5ec18fhc/Nid46WKbFICUDleoXeFyd7wDAZwD8fErQ0gJOboUj3etOK/cAXwbwwk5/73wGxKfa+QkQPRr72mBVLpJBcZmAiL6GsIqW7cKFi5fPIJzq9oG4MpcrjMG9lsQ57SPtA/gLAFeq1lkET8f2JGUtgynnYWXzBfn8EwTMWHxUQdxM6+fK5CRsIB760xX3Z4n2223xPtngYJQosZsUpK/7RKILewldJnlyyy4+Z8EDF8acMvHuk8wZiH6BwR9BeJXFs6KuwRQ+l4EnD0glWfkOTG0S1/gafY/OydEd/+vX7AyE76TLnSDJTwuulrxcP1kuafK6fQPfaq/2u2QPz2rNisfr6N6TDt02Lhmyz4QC5wq6aDKbfc6MD4P4VDrCN97DRkrMQIRTDPztfHvrZQC3wPjvLgEGgFvMfKN/za7bHQ3j+ha6bXnAjtVIt2YXagDgNDOfHgziEAtm4HD+vIB1MH6024kDM+7rduGAYMt1AA8BfAuMvwfR57Lk/SB9LvEHfbl2sIwmzJPNaY3x8Pg9MP4olXK/ghseHgO5HRfh2wx8+n27V+X55/GLZ78D0J/FMho4vP8dA0rPmoHwjfM/vnbl0uAeyYWLlzcAPAPGo31yICfzbNsnQVqRvoBwiEwpkaoFHgtqto48LL+16JLXF+jCrks8HS9fVaQFdLqAmCS7lfLwRlY/+XaXA0ZAv4Dn/p1mEqvv/txy7ibuLB6IbYO00o/eJlGf9A3X3X3LnwLwdcVOQLudp/K5Bi1jGxiO7XyFIgNOrp+UFXHP9Gl6PyEpcA7AVaXcO360yd6bIGj202xmJRTWiq3Ujvx3KVnpJ27Z96nfiSQi61XQSXw+395aB+MjMgbKd7rFljvA/AiAR+KWvEhC9onCQ5JxEddtfYMY4YuGPBzmQUCPi/hgrdxl7cdzTAwBiINhmGcA1obZOvrFAfUJUm7XjtVnKDy0+deKfQ/K5/lY2wcWt9xrgksrAKuD53iqcv8533mcmb+AZNhuez3FSu4ndu6vu+j7HwB+A+C3Je+HL14GMz9ORJ9n5jWAEL4F3QfkKENmbFE2gV4D8CvZyW37Fy5ePg3GswB/kkEzxG2l+H9aPMb31+PDKUFfInoZwCfE0/KmXYzftdVa0dZQOoKTrqVOrgQ7iDaifi7G4moCiIE9nv0dBy/J24VdH+hX7MMz+PuEKj2Ikx52ESttdK/BdLxjz4PoF5wCU+Qfs4Qous8CQwyg2Ac2G21Xwl3W5zWaEljjvhRsJFi67zPwYNjlIJGYySk+9YmzBT61hCXXS+mbC3rmk7QW07yrqlZoGZMbAK0Nwlc3iw0tyJKmVQdZZtn6FAinxeBD1KJ/c4iFVqrPZwDW41hPSXccXuLtpuy5qaEmcSJGjOMLGfogcefuYb3+QBvBs+uL+XHGiVuonoHwcQwn9FaYJA5r2bTWyUtZt7YVZuHn/HB1/t61q/OdZwD+IoD1kGSFpU5MuIBg/Dg5JoOHuu8A+CUGduXX1C5cvDwj4GkCvsjABvpXDMLPODGEIsRdovgBCQqvYHz4Wnj6POl84eLlcwC+CsIfgCgcGUj9V6Xiu+sxW5T3srqO+iKAXxVJQm6/3FYtUOLj2Ylp4VPysZSRgEF7cQCnINOtavuJWwz47uiw/tYqd1t3cU6m5LNAwOlvyqgjPrqJOPqYRT8Q6VhMJOIrL6m2SyLkwabEKT3pePYyOobyxDvLjlpdC3h9btGVtgS9E6Tk453MZwBmFJ6rSMcix+gdXcfJJ3iwwKc2OR92uQaWP/KdjRoMxxTzaTDW5WoybmzJjSOA1ub3b51ReEzic2bcQTh+OE2ocoLsd8T6p9FrPk+3xTjc7upjLA358/Dd9bQjEJfnAl9soiHuuHXZAvpiid+9wibiQhzj/eKCgMWz8qN9Jve5Up7qra+tSSgJzreu8sFU/yN1AAARn0lEQVSVTxypIVfnOzMAPw3gOTD/bL9gkp8YlUuuDsQSmEBfA+hTzPzu+15/FUCYyAHsAHiegQ9FmoWkX2S0MUOMWRsT/pUYHweFh+vC+ey8RqCPAXgWjIfSrozYNeiZx199JyBgH6AvAfyH1156UluZa3bKbT8m4GhbhzVcSx9NZg03lRH4H0D0+wDODFbkIsGO6U86KjdOph1i/2kQsYqOAzfZOr5tkJYJSD1GdqW0cpd5N6fydABlHLkpSsisP67e04OZsk3fM2xWsttB+bx1ld660mzm3x3/+p5w2QfjHmQf4Avz7c1Z9036FrmlXagWPl4Yy3/cyjlNSrGv86BaXM6Y+BSGp9V5dazqQuHjMi8w48dFMByG7oXbKWWfy/I0CWd8+rEqhQ3HLefzR4ezyEfiyzGfkSrtovBMVA4H4/NCvXzysbaHn197JoA8ExFl/JcAfZLBa/K1FQCI25ppu1psr3S7OW8C9BSAL+0sHh7zNAN/SoyNtHUDZIEeaeu9n+cZxLgJomeJ8blrL126m3gyNojonxj4OcES8jeLMrHG7FaY9CYDf/LalUvxhDnNTrntW+tzP5Tsb/229NJ4wUE/4LW7987359tbvwXgeQpf0Ovm4rj8FadHgQAKr8AA3YBJT7mLAZSWy9RN3HQ3kHYTPGHxGZm4PR7K+0lPJGfpbYqgSVc/cPJan9TxLL0T2ycZV9Gf7TzWp7X6Vp8jK7egtlLz7O5U6cNtMJyP90mBtJgKvwGILPw8QrySZ9R7dPOu3FvrWye/SJvrVEuGq5DuM6eHOFlBAKBPOpoerfWz3beuY7699RwR7TDzx7I1U+/XtKr1+BxpDCKb3CV/megD6Md8mk90+l6GkQzl4uNuIWfyA/33Ldt0fyf1ueA54J+/h65lDjLTlx25NHBK/ABgxoz3U0wo4nYRIBwjPl4fCvYJeAegrwD83M7uq29mukQ5jxOwkba6xbaIfAI08O22gRi3mekbIDwF4N+vvXQp13eNgYeimn3+IS+C9pE7wreQ3yaivwHjC6+9dGlP6KrtZEjb5Z1AK8vrI+9agNfo8t9amSXX0lWbWLC7d/2F+fbWFYB+DcDPgPAgM+4ScJNAb4D5DoH+B4R9gPYovHt+F4y3Qbjb3cy6013LFQIYjNffeke+WliD2Xx76xTQPb2akoPBHwDYBNOptDkEzEC0DWCtG/BnwdgA0f3MfIqI/g/Al8VhE5adUKmf0ucSSglYLs+i90AxWBHRjBmn02ZnerAr7sAAIQ4AXQIYV5g13cbucOT4pZ0QD2/LrpLeqndNrhTOuH8HwCk5wXBYoPT3fglvhPhptm1pn+/uXb8x3976TSL6HoBPUfdd8e7e9z6Fh9ruUhi3d7sHUkWiDoS20I30vFEc2RQXR9gD43Z4XqVL2iGirrDBAIi6L6/JDT0abKdTwDnXPwgHAOHtisCT1wCagXjGIaGfdRruAXi+YtfJfJ7BIN4S9EHvWalJJSVNTqeWX52/dxOgxwB8FMAOh8G6RmHyBBh3umB+E8B3wPgmiP9lZ/fVNxQdkqwLH7z8AQBPgHARjNMgXgfEE56MfRDuALjNzP8L4FsAfZWIv33typO5kXq+Fy8/AOAxAL/IjIeJgr4Ixy7uE9FdMN8B0S4zXiHibwL04rUrl24aNpU2yes1m5ZoNVyNvxWINH9ZmSUMXE1/j6xae/O6Uhs8uB4b5FAK6rF+Gb2O0uetutbo3bGj+0zmMwz+8253RUzkPXQrzxcA/Pru3vXbS+olyzz03kCrJrBGeW2FZsY3Dec925u/TKBnGXyeQKfE2nEf4FsAXgHod7t3vw/F5/PtrU0wHgHhwW7n+iaF74zvAXyHiPa6OfvG7lvXb2ARxoxdT5mHPl3Pt7c2OZ6dEQ6W2QCwGeYWnAX4LkAv7u5d/4FmByFvUp8rMAP6RUgtONc6dK50baIfwNX5zn0ID73cB+YzIut5F4Q3d3av3kad9wAuXLx8HwPvJ+AByHu2jNsgvImQ2b7RvY5WNZSon124eHmNw6limxwOFLnbZb9vd/xKmXstQJcc70m+NL3NxAq6Ta3gpIF3AtfkanpbvL22KbVH46npmeuq8WqxUQ5H6XP5uxYwvH3Wwrf+Jtz59uYmg54hxqMgPsOMDbHKvAXgJhgvE9Gnd/eu7yr8LHu0tLfULz1xZ+yEUpJv6a1PoPdvnQLhJwE+z8B6t2a9BeA1ZrzSnap4LHxekKFBbbz90Ppco5Mr9DEKa7TeDtLCQwMvnTcR8LbNK9NLm0OrzbUJtTYoW/xTos3rYOC0tMEzSXraVaKbos/X5NX6u4TD8LlX37EB2tKjGsTn25szgB4A8GMMnCVgrdua3QPwAwD/1X1udUwg9OiFCh4Kv2t0Vr2l99T0x9LngpcEL19Lfzjp72mfzzJG0iha8NFwS3geHqXyFlwNx4Nn8azJnillXt6y3MvH8lWNxqNHXlfqFxZdjd5D58H38G/1vSVnDI2n3Yftc+94yelb+3XpukUHL4z1cSvU2jGlnTzXWl3r+CvRemg81yufT3et1S3o6AncnuuZ8dsSrvEq4S8zcXkmKivI5nVaOz3yrfqS7TQZ1vWyE7B1XbK7t5/U/F9qQw1a7FPS0cNvLH2p7xyFzzWdvPS18lY8q30lm2j0reMz59VC7+0Xy/admq5WWc2GK5/fuz43G+VprIVXU9BSrBSoxvBeFs9LW6Iv2cgaYJI2x2vRc0yHK8nJaUo+L/WVmnyNV4nWY09NXi1oSJyajTVdS3Y5bJ9rAVPTcSzfWp+RPKxxYeG18MrrNBqtzuKv8WvpXxZdyXat8c/Dd+XzHw6f6wUK81J9yVElBa06D78WXcfo4JXtAU/Hb4VleE6pS2lwTy3Hi9M6OEr8joONJc+p9CkFVO1vTZ+W8d/Sjha9tAmsRY53grImzBZ9Wu00ZuJc+XwavU6Sz0cxtzpPDScvr8leFiwemtHl75Z25XSW3NJgqg20Gg8PWB2y1N5aXY4zRq9cR01nry41Gq/8loBW+2fxP2yfl2SVxrjG8yDA205PwGvxden3WN457pgxYvXZZcfWyufl32N557hH4nP5+VRg+CRd/lSip05TKK/bV8rj9Uyhy2EG+8lAja+HznoSU5Zp9SV+OQ+LVoPS08qaHjlY/tRsVeNnPTFd4xvxNZtafDU98v5i8ZXleT8s6SPLS0/MSl4tbaj115zvQfm85LuSXjlfbXzVxlM+xq3xIvEsORofzSeecV7qdxJqQdYaAzX7euOdVV6LoRqsfD6kseDE+nxMJlGCqfi0yNHqSoFsKjljeSyVhQn8o26btPGUdhrTh2bw9eUav6nbsixOjj+Fz2p+K8kp0Vp2t8ZjDV+r98r1tqvVBpb9avGoJt9qU4uNNR1LOmt6aLDy+cnzeVMjPUHRwm0xWE1ereEeR9ZwLH09fGuOGMO7RFOze60DjrGXpUuprNXG3r5Z062kU87P244Sjtd+R+XzFRwdjBlHKzjZcOA+lyfFAeVtCA0nL5vB3vJAhtvCN8f3bHXnvDSoydRkeHhoupRsMkY3j44tti7pNcbny8gco3dLuQWeWwUeHrPst7aVWJIvcafyea6ftcVf2tKzbido4NHR0qNGn/MpQY3e8pVG721PTb7V5712qOmd06x8PqS/l33uWjHUyi0o8fHWjdXFq+tJzYSPS4Z/lKvAvJ/U+oqnX00FB8F/ap/XxpqsnyllGq6n3qOvJrtFnoZzkO3T9Jxa/zE8LJpcR61+5fMT6nOrgR6DWAbKcVsUK+mRdw5vB9HqNF3G8mlpj4Zfal+LjbydoOZzbRAuq0+NT6ntLZ275FurPx+EjUttOQqfa3xy/BxHo7P41HxhyfHq18LHM2Zr8i2+Gr+avcbYxeLXwqdGu/J5vf5E+dwywHGHk6o3cLJ1X8EKxkBrnz9uY+Sk638UcNJtdqL11zIA62/+W6Or4eZ4mgxLvzH4JXktmaklq4Zf0teri8dWWsZsQc12Nb1yeV69arpZeB4/5Tyg/C3Rj7FtLfO29CvhHlefj9Erry/ZcKzPW/TK671js8bXE4tq7RwTa2s6rHy+WH+v+7zaiJKjasppNC08asZpCco53lg+Y5zjcZj2z6rLy0t8oODlupX+WbhePjlOrmurLjmfMTp45E0lS+PhoZ/S57UxV+orNZ41G2h61uhr/bakU80PNVyLziNb+6v9rvH1yC7heNqz8vk95vOaE2qKaTSW4BoPj2M9nahWVmqXpk/pd6ktls45lHhZfDQe3nZZ/Dztyum9fDQ6jYeFl+OUBlSJRivXwGuTKdp2GD63ri3f1caXVd/SzzV+JX29PtfovHVj+7TF07JVS/s8fcDTZ1Y+v/d93gSlBnnKS0p6eFqOaNHJwvV0llpHqcn26tRio2YnNvKdwh6lsha+U/i7Nki8PFrwpvTlWJ9P0SenwvOMlWXlt9qoRje1nlPxrU2IByFzDN7K59PxNW1pZQZWmbz2ZgmyLH9vrsRrv1CX42j67sNuT66f9lvjadFZkOufv1vo4Vmyff7+qNbGko2t+vwIQ4snsGjnEm4uL8e3+Hr6Ty5X4yvbZumi0Wo8au319DftusRvCp9bfXIZfSXfUlsieM6LyK9r7/LX8Gt9o/ZOsvdcAs940MBj11rMsc5dWPl8sfye9bkVWL3CcyW04Oyh13iNhRJtC+9WJ3kc57GRl49XvoVXCvjL8Kn5voSb47f2G0ufqXh4fVSiPy4+9wQ+TYdlxqYlz2Nry5a1fuz9a+nnBa9d8+uavSVvD13NTi265LLHwsrnfn2W8fnkUHP+MoabCg5Cv6OAFmd6JgwvLy/vVn5eHaeQdRB8ltW/RcYyPvfST0l32HCUek49GeY8D5vHyudtso/M51pWYOGV/kl679F83kwrXmtbsBZPi0+Jl4WrydDkeTJKrTzHqTlR4tWOSbTa2CKjNEl5OrG2bWX5vrQV7tEpvwVj9ZMSlPyj4db6UfSTxfOwfG7hev56wTN+cp287Ze/PWPNE4dyGZ7+rMktgXWbKOdl8Zdjo2RPrz4rn+t8a3qdGJ+3OlADzeDLyvAG5lZ5YztwrRNqhrec2NKZPfy8fL3yWm3i0c3DZ4z80nUNv6SLd7K1+E+h25Q+z9vjDVylgOxprycQt+qhyRtLX5o4tH7Qqk8rH40uL7f0zf+ufF7nc6/5vJmx17iaIh7wyvDyW4autb1ema0ds0anlXsHXksba/6sDViLZ+mfR6+SThbOFH49DD5T+zz+9tjbqrf4afwtfnl5DU+71uokePt9SQeLX0ucsuR57Kzp0movS8bK5zqOxe8k+NxUqAYtRvVAzUA5TqkztepSom+h9bShhSbHt/h5dPPoVaIfY1tP+8bYvFWGF9/bnrE6Hxef1+i1vzW8WnlNXiu0ymmlr9mhtX2t4+Cw7KjJWvlcxztRPvcGi6lhrNFqPEtOK/3LdbB+52UlXi0TeMmpB2ErD5+WDr7sYPPyKOGXrlsn/8OAw/D52KQu1uc29PTpMQFNG4dTBHKtD1hjtJW39tuS08JPltX0L8n1yqnJXPl8Uafj5vMBsddZXgO0BKoaj1J5S8cdGyDH0LUkBjV5LXpM1caD5uUFr15emVOXHSSdVr6sn7RxrgVviyYPih49SsHJQ29d57q18tHa45l0rGtrEizp6bGNK5Ar15YuOe7K52X+J8rnNcNoeJaDS47X+NXk1WjH1rfQLsOrhd7juFZdNH9ZvJa1Wc2fHh61Mk+fGNOfSrzG2Mk7Dg7L5xafmp5em3rrW4K/1MvqX56JqqSfBq30pYBtBX5LZu2vl17TS8Nd+Xwc/XH1uQtqgdb6PZb/so7w4hzV72X1s2hbeVply9C28mkNGsvax8OvFICW9XUL7UH6fBnw+nwZPscNPJOShTuVzKOElc9PgM9JMMnfnbOO6rPe9dPqSvg1qNHG+pP696hhWT2mbsdh6HPYtj8uvgb6QFF7j70Gy9JPze9e12cKOG5tWulzQPD/lrnnb8R7fzIAAAAASUVORK5CYII=" alt="Company CI" onerror="this.style.display='none'" />
|
||
<button id="editorClose" class="editor-close" type="button">×</button>
|
||
</div>
|
||
</div>
|
||
<div class="editor-body">
|
||
<section class="editor-section step-info-section">
|
||
<p class="section-title">STEP INFO</p>
|
||
<div class="editor-card note-card">
|
||
<p class="label">STEP NOTE</p>
|
||
<input id="editorNoteInput" class="note-input editor-input-only" type="text" placeholder="해당 단계에 대한 설명을 입력하세요..." />
|
||
<div id="editorNoteView" class="viewer-value editor-view-only"></div>
|
||
</div>
|
||
<div id="flowInfoCard" class="editor-card flow-info-card">
|
||
<p class="label">FLOW INFO</p>
|
||
<div class="mini-grid editor-input-only">
|
||
<div>
|
||
<p class="mini-label">담당팀</p>
|
||
<input id="editorTeamInput" class="mini-input" type="text" placeholder="예: 사업관리팀, 현업팀" />
|
||
</div>
|
||
<div>
|
||
<p class="mini-label">비고</p>
|
||
<input id="editorRemarkInput" class="mini-input" type="text" placeholder="예: 참고사항" />
|
||
</div>
|
||
<div>
|
||
<p class="mini-label">해당 시스템</p>
|
||
<input id="editorSystemInput" class="mini-input" type="text" placeholder="예: ERP, CRM" />
|
||
</div>
|
||
</div>
|
||
<div class="viewer-mini-grid editor-view-only">
|
||
<div class="viewer-meta-card">
|
||
<p class="mini-label">담당팀</p>
|
||
<div id="editorTeamView" class="viewer-meta-value"></div>
|
||
</div>
|
||
<div class="viewer-meta-card">
|
||
<p class="mini-label">비고</p>
|
||
<div id="editorRemarkView" class="viewer-meta-value"></div>
|
||
</div>
|
||
<div class="viewer-meta-card">
|
||
<p class="mini-label">해당 시스템</p>
|
||
<div id="editorSystemView" class="viewer-meta-value"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<div class="section-divider"></div>
|
||
<section class="editor-section screen-info-section">
|
||
<p class="section-title">SCREEN INFO</p>
|
||
<div class="editor-card path-card">
|
||
<p class="label">SYSTEM PATH</p>
|
||
<div class="path-wrap">
|
||
<input id="editorPathInput" class="path-input editor-input-only" type="text" placeholder="예: finance/billing/request" />
|
||
<div id="editorPathView" class="viewer-value editor-view-only"></div>
|
||
</div>
|
||
</div>
|
||
<div class="editor-card image-note-card">
|
||
<p class="label">IMAGE NOTE</p>
|
||
<input id="editorImageNoteInput" class="note-input editor-input-only" type="text" placeholder="현재 이미지에 대한 설명을 입력하세요..." />
|
||
<div id="editorImageNoteView" class="viewer-value editor-view-only"></div>
|
||
</div>
|
||
<div class="editor-card image-card">
|
||
<div class="label-row">
|
||
<p class="label">PAGE IMAGE</p>
|
||
<span id="editorFileStatus" class="file-status">저장된 이미지 0장</span>
|
||
</div>
|
||
<div class="preview" id="editorPreview">
|
||
<p class="preview-empty">이미지가 없습니다.</p>
|
||
</div>
|
||
<div class="image-nav">
|
||
<button id="editorPrevImage" class="nav-btn" type="button">이전 페이지</button>
|
||
<span id="editorPageInfo" class="page-info">0 / 0</span>
|
||
<button id="editorNextImage" class="nav-btn" type="button">다음 페이지</button>
|
||
</div>
|
||
<div id="editorUploader" class="uploader">
|
||
<label for="editorImageInput" class="file-btn">이미지 업로드</label>
|
||
<input id="editorImageInput" class="file-input-hidden" type="file" accept="image/*" multiple />
|
||
<button id="editorClearImage" class="clear-btn" type="button">삭제</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
</div>
|
||
<div id="imageModal" class="image-modal" aria-hidden="true">
|
||
<div class="image-modal-inner">
|
||
<button id="imageModalClose" class="image-modal-close" type="button">×</button>
|
||
<img id="imageModalImg" alt="확대 이미지" />
|
||
<div id="imageModalNote" class="image-modal-note"></div>
|
||
<div class="image-modal-nav">
|
||
<button id="imageModalPrev" class="image-modal-btn" type="button">이전</button>
|
||
<span id="imageModalPage" class="image-modal-page">0 / 0</span>
|
||
<button id="imageModalNext" class="image-modal-btn" type="button">다음</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="sitemapModal" class="sitemap-modal" aria-hidden="true">
|
||
<div class="sitemap-modal-inner">
|
||
<div class="sitemap-modal-head">
|
||
<div>
|
||
<h3 class="sitemap-modal-title">Process Map</h3>
|
||
</div>
|
||
<div class="sitemap-toolbar">
|
||
<select id="sitemapTeamSelect" class="sm-select">
|
||
<option value="">전체 팀 필터</option>
|
||
</select>
|
||
<select id="sitemapSystemSelect" class="sm-select">
|
||
<option value="">전체 시스템 필터</option>
|
||
</select>
|
||
<img class="ci-logo sitemap-ci-logo" src="data:image/png;base64,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" alt="Company CI" onerror="this.style.display='none'" />
|
||
<button id="sitemapCloseBtn" class="sitemap-close-btn" type="button">×</button>
|
||
</div>
|
||
<div id="sitemapLegend" class="sm-legend"></div>
|
||
</div>
|
||
<div id="sitemapFullContent" class="sitemap-full"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="./app_client_config.js?v=20260327-0948"></script>
|
||
<script src="./process_map_shared.js"></script>
|
||
<script src="./flow_render.js"></script>
|
||
<script src="./flow_data_store.js?v=20260327-0948"></script>
|
||
<script src="./flow_editor_core.js"></script>
|
||
<script src="./flow_editor_media.js"></script>
|
||
<script src="./flow_detail_view.js"></script>
|
||
<script>
|
||
const APP_CONFIG = window.HMBIZ_CONFIG || {};
|
||
// The editor starts from empty state and hydrates from DB, local cache, or seed JSON.
|
||
const MAIN_STEPS = [];
|
||
const SUB_FLOW = {};
|
||
const DRILL_FLOW = {};
|
||
let COMMON_ITEMS = [];
|
||
let COMMON_SUB_FLOW = {};
|
||
|
||
const mainFlowEl = document.getElementById('mainFlow');
|
||
const boardEl = document.getElementById('board');
|
||
const mainPanelEl = document.getElementById('mainPanel');
|
||
const boardTrackEl = document.getElementById('boardTrack');
|
||
const mainCommonSectionEl = document.getElementById('mainCommonSection');
|
||
const drillColumnsEl = document.getElementById('drillColumns');
|
||
const editorPanelEl = document.getElementById('editorPanel');
|
||
const editorTitleEl = document.getElementById('editorTitle');
|
||
const editorSubEl = document.getElementById('editorSub');
|
||
const editorViewerTitleEl = document.getElementById('editorViewerTitle');
|
||
const editorViewerTeamEl = document.getElementById('editorViewerTeam');
|
||
const editorViewerSystemEl = document.getElementById('editorViewerSystem');
|
||
const editorViewerRemarkEl = document.getElementById('editorViewerRemark');
|
||
const editorCloseEl = document.getElementById('editorClose');
|
||
const editorPathInputEl = document.getElementById('editorPathInput');
|
||
const editorPathViewEl = document.getElementById('editorPathView');
|
||
const editorImageInputEl = document.getElementById('editorImageInput');
|
||
const editorUploaderEl = document.getElementById('editorUploader');
|
||
const editorFileStatusEl = document.getElementById('editorFileStatus');
|
||
const editorClearImageEl = document.getElementById('editorClearImage');
|
||
const editorPreviewEl = document.getElementById('editorPreview');
|
||
const editorPrevImageEl = document.getElementById('editorPrevImage');
|
||
const editorNextImageEl = document.getElementById('editorNextImage');
|
||
const editorPageInfoEl = document.getElementById('editorPageInfo');
|
||
const editorNoteInputEl = document.getElementById('editorNoteInput');
|
||
const editorNoteViewEl = document.getElementById('editorNoteView');
|
||
const editorImageNoteInputEl = document.getElementById('editorImageNoteInput');
|
||
const editorImageNoteViewEl = document.getElementById('editorImageNoteView');
|
||
const flowInfoCardEl = document.getElementById('flowInfoCard');
|
||
const editorTeamInputEl = document.getElementById('editorTeamInput');
|
||
const editorRemarkInputEl = document.getElementById('editorRemarkInput');
|
||
const editorSystemInputEl = document.getElementById('editorSystemInput');
|
||
const editorTeamViewEl = document.getElementById('editorTeamView');
|
||
const editorRemarkViewEl = document.getElementById('editorRemarkView');
|
||
const editorSystemViewEl = document.getElementById('editorSystemView');
|
||
const editModeBtnEl = document.getElementById('editModeBtn');
|
||
const imageModalEl = document.getElementById('imageModal');
|
||
const imageModalImgEl = document.getElementById('imageModalImg');
|
||
const imageModalCloseEl = document.getElementById('imageModalClose');
|
||
const imageModalPrevEl = document.getElementById('imageModalPrev');
|
||
const imageModalNextEl = document.getElementById('imageModalNext');
|
||
const imageModalPageEl = document.getElementById('imageModalPage');
|
||
const imageModalNoteEl = document.getElementById('imageModalNote');
|
||
const sitemapOpenBtnEl = document.getElementById('sitemapOpenBtn');
|
||
const dataExportBtnEl = document.getElementById('dataExportBtn');
|
||
const dataImportBtnEl = document.getElementById('dataImportBtn');
|
||
const dataImportInputEl = document.getElementById('dataImportInput');
|
||
const syncStatusEl = document.getElementById('syncStatus');
|
||
const sitemapModalEl = document.getElementById('sitemapModal');
|
||
const sitemapCloseBtnEl = document.getElementById('sitemapCloseBtn');
|
||
const sitemapTeamSelectEl = document.getElementById('sitemapTeamSelect');
|
||
const sitemapSystemSelectEl = document.getElementById('sitemapSystemSelect');
|
||
const sitemapFullContentEl = document.getElementById('sitemapFullContent');
|
||
const sitemapLegendEl = document.getElementById('sitemapLegend');
|
||
|
||
// 선택 체인: [메인선택, 1차선택, 2차선택, ...]
|
||
let selectedChain = [];
|
||
let editMode = false;
|
||
// First load defaults to box layout (not bar layout).
|
||
let mainBarMode = false;
|
||
let lv2BarMode = false;
|
||
let editingKey = null;
|
||
let currentImageIndex = 0;
|
||
let currentEditorLabel = '';
|
||
let modalImageIndex = 0;
|
||
let processMapPopupRef = null;
|
||
let layoutMetricsRafId = null;
|
||
let sitemapFilterTeam = '';
|
||
let sitemapFilterSystem = '';
|
||
const API_BASE_URL = APP_CONFIG.apiBaseUrl || '';
|
||
const API_FLOW_DATA_URL = `${API_BASE_URL}/api/flow-data`;
|
||
const MAIN_APP_PATH = APP_CONFIG.mainAppPath || window.location.pathname || '/';
|
||
const PROCESS_MAP_ROUTE = APP_CONFIG.processMapRoute || '/process-map';
|
||
const PROCESS_MAP_POPUP_NAME = APP_CONFIG.processMapPopupName || 'hm-process-map';
|
||
const PROCESS_MAP_BROADCAST_CHANNEL = APP_CONFIG.processMapBroadcastChannel || 'hm-biz-process-map';
|
||
const PROCESS_MAP_STORAGE_SIGNAL_KEY = APP_CONFIG.processMapStorageSignalKey || 'hm-biz-process-map:refresh';
|
||
const PROCESS_MAP_NAVIGATION_STORAGE_KEY = APP_CONFIG.processMapNavigationStorageKey || 'hm-biz-process-map:navigate';
|
||
const PROCESS_MAP_FOCUS_STORAGE_KEY = APP_CONFIG.processMapFocusStorageKey || 'hm-biz-process-map:focus';
|
||
const SITEMAP_AUTO_LINK_WIDTH = APP_CONFIG.sitemapAutoLinkWidth || 132;
|
||
const SITEMAP_MANUAL_LINK_WIDTH = APP_CONFIG.sitemapManualLinkWidth || 132;
|
||
const FORCE_REMOTE_SYNC = Boolean(APP_CONFIG.forceRemoteSync);
|
||
const STEP_META_KEY = 'flow_step_meta_v1';
|
||
const FLOW_MODEL_KEY = 'flow_model_v1';
|
||
const ENTITY_META_KEY = 'flow_entity_meta_v1';
|
||
const IDB_DB_NAME = 'flow_drill_data_db_v1';
|
||
const IDB_STORE_NAME = 'kv';
|
||
const LEGACY_MAIN_STEP = '\uAE30\uC131';
|
||
const RENAMED_MAIN_STEP = '\uC218\uAE08';
|
||
let stepMeta = {};
|
||
let entityMeta = {};
|
||
let subFlowLinks = {};
|
||
const BOOTSTRAP_MARKER_KEY = 'flow_bootstrap_marker_v1';
|
||
const BOOTSTRAP_MARKER_VALUE = APP_CONFIG.seedVersion || 'flow-data-2026-03-23';
|
||
const DEFAULT_JSON_CANDIDATES = APP_CONFIG.defaultJsonCandidates || [
|
||
'/flow-data-2026-03-23.json',
|
||
'/flow-data-2026-03-21_4.json'
|
||
];
|
||
|
||
function getAbsoluteOrigin(urlLike) {
|
||
const raw = String(urlLike || '').trim();
|
||
if (!raw) return '';
|
||
try {
|
||
return new URL(raw, window.location.origin).origin;
|
||
} catch (e) {
|
||
return '';
|
||
}
|
||
}
|
||
|
||
function isAllowedMessageOrigin(origin) {
|
||
const target = String(origin || '').trim();
|
||
if (!target) return false;
|
||
if (target === window.location.origin) return true;
|
||
const apiOrigin = getAbsoluteOrigin(API_BASE_URL);
|
||
return Boolean(apiOrigin && target === apiOrigin);
|
||
}
|
||
function setSyncStatus(state, message) {
|
||
if (!syncStatusEl) return;
|
||
const compactLabels = {
|
||
loading: '로딩',
|
||
saving: '저장',
|
||
ready: '연결',
|
||
cache: '캐시',
|
||
error: '오류'
|
||
};
|
||
syncStatusEl.dataset.state = state;
|
||
syncStatusEl.textContent = compactLabels[state] || String(message || '').trim() || '상태';
|
||
}
|
||
|
||
function buildFlowModelPayload() {
|
||
return {
|
||
mainSteps: MAIN_STEPS,
|
||
subFlow: SUB_FLOW,
|
||
drillFlow: DRILL_FLOW,
|
||
subFlowLinks,
|
||
commonItems: COMMON_ITEMS,
|
||
commonSubFlow: COMMON_SUB_FLOW
|
||
};
|
||
}
|
||
|
||
function cloneJsonSafe(value, fallback) {
|
||
try {
|
||
return JSON.parse(JSON.stringify(value));
|
||
} catch (e) {
|
||
return fallback;
|
||
}
|
||
}
|
||
|
||
function buildCurrentProcessMapDataPayload() {
|
||
const compactStepMeta = {};
|
||
Object.entries(stepMeta || {}).forEach(([key, meta]) => {
|
||
if (!meta || typeof meta !== 'object') {
|
||
compactStepMeta[key] = {};
|
||
return;
|
||
}
|
||
compactStepMeta[key] = {
|
||
note: String(meta.note || ''),
|
||
team: String(meta.team || ''),
|
||
system: String(meta.system || ''),
|
||
path: String(meta.path || ''),
|
||
remark: String(meta.remark || ''),
|
||
screens: Array.isArray(meta.screens)
|
||
? meta.screens.map((screen) => ({
|
||
path: String(screen && screen.path ? screen.path : ''),
|
||
note: String(screen && screen.note ? screen.note : '')
|
||
}))
|
||
: []
|
||
};
|
||
});
|
||
return {
|
||
type: 'process-map-data',
|
||
at: Date.now(),
|
||
payload: {
|
||
version: 1,
|
||
exportedAt: new Date().toISOString(),
|
||
flowModel: cloneJsonSafe(buildFlowModelPayload(), {}),
|
||
stepMeta: compactStepMeta,
|
||
entityMeta: {}
|
||
}
|
||
};
|
||
}
|
||
|
||
function deliverProcessMapData(targetWindow = processMapPopupRef) {
|
||
const payload = buildCurrentProcessMapDataPayload();
|
||
try {
|
||
if (targetWindow && !targetWindow.closed && typeof targetWindow.applyProcessMapExternalData === 'function') {
|
||
targetWindow.applyProcessMapExternalData(payload);
|
||
}
|
||
} catch (e) {
|
||
// ignore direct-call failures and continue with postMessage
|
||
}
|
||
try {
|
||
if (targetWindow && !targetWindow.closed && typeof targetWindow.postMessage === 'function') {
|
||
targetWindow.postMessage(payload, '*');
|
||
return true;
|
||
}
|
||
} catch (e) {
|
||
// ignore postMessage failures
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function notifyProcessMapRefresh() {
|
||
const payload = { type: 'flow-data-updated', at: Date.now() };
|
||
deliverProcessMapData();
|
||
try {
|
||
if (processMapPopupRef && !processMapPopupRef.closed) {
|
||
processMapPopupRef.postMessage(payload, '*');
|
||
}
|
||
} catch (e) {
|
||
// ignore postMessage failures
|
||
}
|
||
try {
|
||
if ('BroadcastChannel' in window) {
|
||
const channel = new BroadcastChannel(PROCESS_MAP_BROADCAST_CHANNEL);
|
||
channel.postMessage(payload);
|
||
channel.close();
|
||
}
|
||
} catch (e) {
|
||
// ignore and fall back to storage signal below
|
||
}
|
||
try {
|
||
localStorage.setItem(PROCESS_MAP_STORAGE_SIGNAL_KEY, String(payload.at));
|
||
} catch (e) {
|
||
// ignore storage failures
|
||
}
|
||
}
|
||
|
||
function buildProcessMapFocusPayload(stepKey) {
|
||
const key = String(stepKey || '').trim();
|
||
if (!key) return null;
|
||
if (key.startsWith('main|')) {
|
||
const mainStep = key.slice('main|'.length);
|
||
return { type: 'focus-updated', focus: { type: 'main', mainStep, step: '', isCommon: false }, at: Date.now() };
|
||
}
|
||
if (key.startsWith('common|')) {
|
||
const mainStep = key.slice('common|'.length);
|
||
return { type: 'focus-updated', focus: { type: 'common-root', mainStep, step: '', isCommon: true }, at: Date.now() };
|
||
}
|
||
const parts = key.split('|');
|
||
if (parts.length === 3 && parts[0] === '0') {
|
||
const mainStep = parts[1];
|
||
const step = parts[2];
|
||
const root = String(selectedChain[0] || '');
|
||
const isCommon = root.startsWith('common::');
|
||
return { type: 'focus-updated', focus: { type: 'step', mainStep, step, isCommon }, at: Date.now() };
|
||
}
|
||
return null;
|
||
}
|
||
|
||
function notifyProcessMapFocus(stepKey) {
|
||
const payload = buildProcessMapFocusPayload(stepKey);
|
||
if (!payload) return;
|
||
try {
|
||
if (processMapPopupRef && !processMapPopupRef.closed && typeof processMapPopupRef.applyProcessMapExternalFocus === 'function') {
|
||
processMapPopupRef.applyProcessMapExternalFocus(payload);
|
||
}
|
||
} catch (e) {
|
||
processMapPopupRef = null;
|
||
}
|
||
try {
|
||
if (processMapPopupRef && !processMapPopupRef.closed) {
|
||
processMapPopupRef.postMessage(payload, '*');
|
||
}
|
||
} catch (e) {
|
||
// ignore postMessage failures
|
||
}
|
||
try {
|
||
if ('BroadcastChannel' in window) {
|
||
const channel = new BroadcastChannel(PROCESS_MAP_BROADCAST_CHANNEL);
|
||
channel.postMessage(payload);
|
||
channel.close();
|
||
}
|
||
} catch (e) {
|
||
// ignore and fall back to storage
|
||
}
|
||
try {
|
||
localStorage.setItem(PROCESS_MAP_FOCUS_STORAGE_KEY, JSON.stringify(payload));
|
||
} catch (e) {
|
||
// ignore storage failures
|
||
}
|
||
}
|
||
|
||
function openProcessMapPopup() {
|
||
const routeUrl = new URL(PROCESS_MAP_ROUTE, window.location.origin);
|
||
routeUrl.searchParams.set('_ts', String(Date.now()));
|
||
routeUrl.searchParams.set('mainOrigin', window.location.origin);
|
||
routeUrl.searchParams.set('mainPath', MAIN_APP_PATH);
|
||
const routeWithTs = routeUrl.toString();
|
||
const features = [
|
||
'popup=yes',
|
||
'width=1680',
|
||
'height=1050',
|
||
'left=80',
|
||
'top=60',
|
||
'resizable=yes',
|
||
'scrollbars=yes'
|
||
].join(',');
|
||
const popup = window.open(routeWithTs, PROCESS_MAP_POPUP_NAME, features);
|
||
if (popup) {
|
||
processMapPopupRef = popup;
|
||
popup.focus();
|
||
return;
|
||
}
|
||
window.location.href = routeWithTs;
|
||
}
|
||
|
||
function syncBarModeLayoutClass() {
|
||
const enabled = !editMode && (mainBarMode || lv2BarMode);
|
||
if (boardTrackEl) {
|
||
boardTrackEl.classList.toggle('map-bar-layout', enabled);
|
||
}
|
||
scheduleBoardLayoutMetrics();
|
||
}
|
||
|
||
function scheduleBoardLayoutMetrics() {
|
||
updateBoardLayoutMetrics();
|
||
if (layoutMetricsRafId !== null) {
|
||
cancelAnimationFrame(layoutMetricsRafId);
|
||
}
|
||
layoutMetricsRafId = requestAnimationFrame(() => {
|
||
layoutMetricsRafId = null;
|
||
updateBoardLayoutMetrics();
|
||
});
|
||
}
|
||
|
||
function updateBoardLayoutMetrics() {
|
||
if (!boardTrackEl || !editorPanelEl || !mainPanelEl || !drillColumnsEl) return;
|
||
const isBarModeActive = !editMode && (mainBarMode || lv2BarMode);
|
||
const isNarrow = window.innerWidth <= 1000;
|
||
const fixedSidePad = isNarrow ? 15 : 60;
|
||
boardTrackEl.style.setProperty('--track-side-pad', `${fixedSidePad}px`);
|
||
const boardViewportWidth = Math.max(
|
||
0,
|
||
(boardEl && boardEl.clientWidth)
|
||
|| boardTrackEl.clientWidth
|
||
|| document.documentElement.clientWidth
|
||
|| window.innerWidth
|
||
);
|
||
const usableViewportWidth = Math.max(0, boardViewportWidth - 2);
|
||
const interGap = 14;
|
||
|
||
const mainWidth = Math.ceil(mainPanelEl.getBoundingClientRect().width || 0);
|
||
const drillWidth = Math.ceil(drillColumnsEl.getBoundingClientRect().width || 0);
|
||
const leftStackWidth = mainWidth + (drillWidth > 0 ? interGap + drillWidth : 0);
|
||
|
||
const barCount = Number(Boolean(mainBarMode)) + Number(Boolean(lv2BarMode));
|
||
const hardMinEditorWidth = isNarrow ? 220 : 320;
|
||
|
||
const sidePad = fixedSidePad;
|
||
const availableEditorWidth = usableViewportWidth - leftStackWidth - interGap - (sidePad * 2);
|
||
let editorWidth = Math.max(hardMinEditorWidth, availableEditorWidth);
|
||
|
||
// Keep the outer left/right whitespace symmetric by shrinking only the editor width.
|
||
const totalWidth = leftStackWidth + interGap + editorWidth + (sidePad * 2);
|
||
if (totalWidth > usableViewportWidth) {
|
||
editorWidth = Math.max(120, usableViewportWidth - leftStackWidth - interGap - (sidePad * 2));
|
||
}
|
||
|
||
if (!isBarModeActive) {
|
||
boardTrackEl.style.removeProperty('--dynamic-preview-ratio');
|
||
editorPanelEl.style.width = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.minWidth = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.maxWidth = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.flex = `0 0 ${Math.round(editorWidth)}px`;
|
||
return;
|
||
}
|
||
|
||
const baseRatio = barCount >= 2 ? 3.0 : (barCount === 1 ? 2.7 : 2.4);
|
||
const widthAdjustment = (editorWidth - 1200) / 1200 * 0.35;
|
||
const viewportHeight = Math.max(
|
||
0,
|
||
window.innerHeight
|
||
|| document.documentElement.clientHeight
|
||
|| (boardEl ? boardEl.clientHeight : 0)
|
||
);
|
||
const reserveHeight = isNarrow ? 360 : 390;
|
||
const previewHeightCap = Math.max(180, viewportHeight - reserveHeight);
|
||
const heightFitRatio = editorWidth > 0 ? (editorWidth / previewHeightCap) : baseRatio;
|
||
const dynamicRatio = Math.max(2.1, Math.min(4.2, Math.max(baseRatio + widthAdjustment, heightFitRatio)));
|
||
|
||
boardTrackEl.style.setProperty('--dynamic-preview-ratio', String(dynamicRatio));
|
||
editorPanelEl.style.width = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.minWidth = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.maxWidth = `${Math.round(editorWidth)}px`;
|
||
editorPanelEl.style.flex = `0 0 ${Math.round(editorWidth)}px`;
|
||
}
|
||
|
||
function getCurrentProcessMapFocusPayload() {
|
||
if (editingKey) {
|
||
return buildProcessMapFocusPayload(editingKey);
|
||
}
|
||
if (selectedChain[0]) {
|
||
const root = String(selectedChain[0] || '');
|
||
if (root.startsWith('common::')) {
|
||
return buildProcessMapFocusPayload(`common|${root.replace(/^common::/, '')}`);
|
||
}
|
||
return buildProcessMapFocusPayload(`main|${root}`);
|
||
}
|
||
return null;
|
||
}
|
||
|
||
function registerProcessMapPopup(popupWindow) {
|
||
processMapPopupRef = popupWindow;
|
||
deliverProcessMapData(processMapPopupRef);
|
||
const payload = getCurrentProcessMapFocusPayload();
|
||
if (!payload) return;
|
||
try {
|
||
if (processMapPopupRef && !processMapPopupRef.closed && typeof processMapPopupRef.applyProcessMapExternalFocus === 'function') {
|
||
processMapPopupRef.applyProcessMapExternalFocus(payload);
|
||
}
|
||
} catch (e) {
|
||
processMapPopupRef = null;
|
||
}
|
||
try {
|
||
if (processMapPopupRef && !processMapPopupRef.closed) {
|
||
processMapPopupRef.postMessage(payload, '*');
|
||
}
|
||
} catch (e) {
|
||
// ignore postMessage failures
|
||
}
|
||
notifyProcessMapFocus(editingKey || selectedChain[0] || '');
|
||
}
|
||
|
||
function migrateLegacyMainStepFlowModel() {
|
||
let changed = false;
|
||
const idx = MAIN_STEPS.indexOf(LEGACY_MAIN_STEP);
|
||
if (idx >= 0) {
|
||
MAIN_STEPS[idx] = RENAMED_MAIN_STEP;
|
||
changed = true;
|
||
}
|
||
if (Object.prototype.hasOwnProperty.call(SUB_FLOW, LEGACY_MAIN_STEP)) {
|
||
const legacyList = Array.isArray(SUB_FLOW[LEGACY_MAIN_STEP]) ? SUB_FLOW[LEGACY_MAIN_STEP] : [];
|
||
SUB_FLOW[RENAMED_MAIN_STEP] = legacyList;
|
||
delete SUB_FLOW[LEGACY_MAIN_STEP];
|
||
changed = true;
|
||
}
|
||
const legacyPrefix = `${LEGACY_MAIN_STEP}||`;
|
||
const renamedPrefix = `${RENAMED_MAIN_STEP}||`;
|
||
const nextLinks = {};
|
||
Object.entries(subFlowLinks || {}).forEach(([key, value]) => {
|
||
const nextKey = key.startsWith(legacyPrefix)
|
||
? `${renamedPrefix}${key.slice(legacyPrefix.length)}`
|
||
: key;
|
||
nextLinks[nextKey] = value;
|
||
});
|
||
if (Object.keys(nextLinks).length !== Object.keys(subFlowLinks || {}).length
|
||
|| Object.keys(subFlowLinks || {}).some((k) => k.startsWith(legacyPrefix))) {
|
||
changed = true;
|
||
}
|
||
subFlowLinks = nextLinks;
|
||
return changed;
|
||
}
|
||
|
||
function migrateLegacyMainStepMetaKeys() {
|
||
if (!stepMeta || typeof stepMeta !== 'object') return false;
|
||
let changed = false;
|
||
const nextMeta = { ...stepMeta };
|
||
const legacyMainKey = `main|${LEGACY_MAIN_STEP}`;
|
||
const renamedMainKey = `main|${RENAMED_MAIN_STEP}`;
|
||
if (Object.prototype.hasOwnProperty.call(nextMeta, legacyMainKey)) {
|
||
nextMeta[renamedMainKey] = nextMeta[legacyMainKey];
|
||
delete nextMeta[legacyMainKey];
|
||
changed = true;
|
||
}
|
||
const legacyPrefix = `0|${LEGACY_MAIN_STEP}|`;
|
||
const renamedPrefix = `0|${RENAMED_MAIN_STEP}|`;
|
||
Object.keys(nextMeta).forEach((key) => {
|
||
if (!key.startsWith(legacyPrefix)) return;
|
||
const nextKey = `${renamedPrefix}${key.slice(legacyPrefix.length)}`;
|
||
nextMeta[nextKey] = nextMeta[key];
|
||
delete nextMeta[key];
|
||
changed = true;
|
||
});
|
||
if (changed) stepMeta = nextMeta;
|
||
return changed;
|
||
}
|
||
function isSecondFlowKey(key) {
|
||
return typeof key === 'string' && key.startsWith('0|');
|
||
}
|
||
function syncLegacyMetaFromScreens(info) {
|
||
const screens = Array.isArray(info.screens) ? info.screens : [];
|
||
info.screens = screens.map((screen) => ({
|
||
path: String(screen && screen.path ? screen.path : ''),
|
||
note: String(screen && screen.note ? screen.note : ''),
|
||
image: String(screen && screen.image ? screen.image : '')
|
||
}));
|
||
info.path = info.screens[0] ? info.screens[0].path : '';
|
||
info.images = info.screens.map((screen) => screen.image);
|
||
info.imageNotes = info.screens.map((screen) => screen.note);
|
||
info.image = info.images[0] || '';
|
||
return info;
|
||
}
|
||
function ensureMeta(key) {
|
||
stepMeta[key] = stepMeta[key] || {
|
||
image: '',
|
||
images: [],
|
||
imageNotes: [],
|
||
note: '',
|
||
team: '',
|
||
remark: '',
|
||
system: '',
|
||
path: '',
|
||
screens: []
|
||
};
|
||
const info = stepMeta[key];
|
||
if (typeof info.image !== 'string') info.image = '';
|
||
if (!Array.isArray(info.images)) {
|
||
info.images = info.image ? [info.image] : [];
|
||
}
|
||
if (!Array.isArray(info.imageNotes)) {
|
||
info.imageNotes = [];
|
||
}
|
||
info.images = info.images.map((v) => String(v || ''));
|
||
info.imageNotes = info.imageNotes.map((v) => String(v || ''));
|
||
if (typeof info.note !== 'string') info.note = '';
|
||
if (typeof info.team !== 'string') info.team = '';
|
||
if (typeof info.remark !== 'string') info.remark = '';
|
||
if (typeof info.system !== 'string') info.system = '';
|
||
if (typeof info.path !== 'string') info.path = '';
|
||
if (!Array.isArray(info.screens)) {
|
||
info.screens = [];
|
||
}
|
||
info.screens = info.screens
|
||
.map((screen) => ({
|
||
path: String(screen && screen.path ? screen.path : ''),
|
||
note: String(screen && screen.note ? screen.note : ''),
|
||
image: String(screen && screen.image ? screen.image : '')
|
||
}))
|
||
.filter((screen) => screen.path || screen.note || screen.image);
|
||
if (!info.screens.length) {
|
||
const legacyPageCount = Math.max(info.images.length, info.imageNotes.length, info.path ? 1 : 0);
|
||
for (let i = 0; i < legacyPageCount; i += 1) {
|
||
info.screens.push({
|
||
path: info.path || '',
|
||
note: info.imageNotes[i] || '',
|
||
image: info.images[i] || ''
|
||
});
|
||
}
|
||
}
|
||
return syncLegacyMetaFromScreens(info);
|
||
}
|
||
function applyFlowModelObject(parsed) {
|
||
if (!parsed || typeof parsed !== 'object') return;
|
||
if (Array.isArray(parsed.mainSteps)) {
|
||
MAIN_STEPS.splice(0, MAIN_STEPS.length, ...parsed.mainSteps.map(v => String(v)));
|
||
}
|
||
if (parsed.subFlow && typeof parsed.subFlow === 'object') {
|
||
Object.keys(SUB_FLOW).forEach(k => delete SUB_FLOW[k]);
|
||
Object.entries(parsed.subFlow).forEach(([k, arr]) => {
|
||
if (Array.isArray(arr)) SUB_FLOW[k] = arr.map(v => String(v));
|
||
});
|
||
}
|
||
if (parsed.drillFlow && typeof parsed.drillFlow === 'object') {
|
||
Object.keys(DRILL_FLOW).forEach(k => delete DRILL_FLOW[k]);
|
||
Object.entries(parsed.drillFlow).forEach(([k, arr]) => {
|
||
if (Array.isArray(arr)) DRILL_FLOW[k] = arr.map(v => String(v));
|
||
});
|
||
}
|
||
if (parsed.subFlowLinks && typeof parsed.subFlowLinks === 'object') {
|
||
subFlowLinks = {};
|
||
Object.entries(parsed.subFlowLinks).forEach(([k, v]) => {
|
||
if (v && typeof v === 'object' && typeof v.reason === 'string') {
|
||
subFlowLinks[k] = { reason: v.reason };
|
||
}
|
||
});
|
||
} else {
|
||
subFlowLinks = {};
|
||
}
|
||
if (Array.isArray(parsed.commonItems)) {
|
||
COMMON_ITEMS = parsed.commonItems.map(v => String(v)).filter(Boolean);
|
||
}
|
||
if (parsed.commonSubFlow && typeof parsed.commonSubFlow === 'object') {
|
||
COMMON_SUB_FLOW = {};
|
||
Object.entries(parsed.commonSubFlow).forEach(([k, arr]) => {
|
||
if (Array.isArray(arr)) COMMON_SUB_FLOW[k] = arr.map(v => String(v));
|
||
});
|
||
}
|
||
migrateLegacyMainStepFlowModel();
|
||
}
|
||
const flowDataStore = window.createFlowDataStore({
|
||
config: {
|
||
apiFlowDataUrl: API_FLOW_DATA_URL,
|
||
stepMetaKey: STEP_META_KEY,
|
||
flowModelKey: FLOW_MODEL_KEY,
|
||
entityMetaKey: ENTITY_META_KEY,
|
||
bootstrapMarkerKey: BOOTSTRAP_MARKER_KEY,
|
||
bootstrapMarkerValue: BOOTSTRAP_MARKER_VALUE,
|
||
idbDbName: IDB_DB_NAME,
|
||
idbStoreName: IDB_STORE_NAME,
|
||
defaultJsonCandidates: DEFAULT_JSON_CANDIDATES
|
||
},
|
||
getFlowModelPayload: buildFlowModelPayload,
|
||
getStepMeta: () => stepMeta,
|
||
getEntityMeta: () => entityMeta,
|
||
setStepMeta: (nextMeta) => {
|
||
stepMeta = nextMeta;
|
||
},
|
||
setEntityMeta: (nextMeta) => {
|
||
entityMeta = (nextMeta && typeof nextMeta === 'object') ? nextMeta : {};
|
||
},
|
||
applyFlowModelObject,
|
||
migrateStepMetaKeys: migrateLegacyMainStepMetaKeys,
|
||
setSyncStatus,
|
||
onRemoteSaved: notifyProcessMapRefresh
|
||
});
|
||
|
||
function persistMarker() {
|
||
flowDataStore.persistMarker();
|
||
}
|
||
function saveStepMeta() {
|
||
flowDataStore.saveStepMeta();
|
||
}
|
||
function saveFlowModel() {
|
||
flowDataStore.saveFlowModel();
|
||
}
|
||
function applyImportedData(flowModel, importedMeta, importedEntityMeta = {}, persistRemote = true) {
|
||
return flowDataStore.applyImportedData(flowModel, importedMeta, importedEntityMeta, persistRemote);
|
||
}
|
||
function exportAllData() {
|
||
flowDataStore.exportAllData();
|
||
}
|
||
function importAllData(rawText) {
|
||
const result = flowDataStore.importAllData(rawText);
|
||
if (!result.ok) {
|
||
alert(result.message);
|
||
return;
|
||
}
|
||
selectedChain = [];
|
||
closeEditor();
|
||
renderAll();
|
||
alert('데이터를 가져왔습니다.');
|
||
}
|
||
function loadFlowModel() {
|
||
flowDataStore.loadFlowModel();
|
||
}
|
||
function loadStepMeta() {
|
||
flowDataStore.loadStepMeta();
|
||
}
|
||
async function loadFromIdbFallback() {
|
||
await flowDataStore.loadFromIdbFallback();
|
||
}
|
||
async function loadRemoteData() {
|
||
return flowDataStore.loadRemoteData();
|
||
}
|
||
async function bootstrapDefaultJsonIfEmpty() {
|
||
return flowDataStore.bootstrapDefaultJsonIfEmpty();
|
||
}
|
||
|
||
const flowEditorMedia = window.createFlowEditorMedia({
|
||
elements: {
|
||
editorPathInputEl,
|
||
editorPathViewEl,
|
||
editorImageInputEl,
|
||
editorUploaderEl,
|
||
editorFileStatusEl,
|
||
editorClearImageEl,
|
||
editorPreviewEl,
|
||
editorPrevImageEl,
|
||
editorNextImageEl,
|
||
editorPageInfoEl,
|
||
editorImageNoteInputEl,
|
||
editorImageNoteViewEl,
|
||
imageModalEl,
|
||
imageModalImgEl,
|
||
imageModalCloseEl,
|
||
imageModalPrevEl,
|
||
imageModalNextEl,
|
||
imageModalPageEl,
|
||
imageModalNoteEl
|
||
},
|
||
getEditingKey: () => editingKey,
|
||
getEditMode: () => editMode,
|
||
getCurrentEditorLabel: () => currentEditorLabel,
|
||
getCurrentImageIndex: () => currentImageIndex,
|
||
setCurrentImageIndex: (value) => {
|
||
currentImageIndex = value;
|
||
},
|
||
getModalImageIndex: () => modalImageIndex,
|
||
setModalImageIndex: (value) => {
|
||
modalImageIndex = value;
|
||
},
|
||
ensureMeta,
|
||
getAllStepMeta: () => stepMeta,
|
||
syncLegacyMetaFromScreens,
|
||
saveStepMeta
|
||
});
|
||
const renderEditorPreview = (label) => flowEditorMedia.renderEditorPreview(label);
|
||
const updateImageModalView = (altText) => flowEditorMedia.updateImageModalView(altText);
|
||
const openImageModal = (index, altText) => flowEditorMedia.openImageModal(index, altText);
|
||
const closeImageModal = () => flowEditorMedia.closeImageModal();
|
||
|
||
const flowEditorCore = window.createFlowEditorCore({
|
||
elements: {
|
||
editorPanelEl,
|
||
editorTitleEl,
|
||
editorSubEl,
|
||
editorViewerTitleEl,
|
||
editorViewerTeamEl,
|
||
editorViewerSystemEl,
|
||
editorViewerRemarkEl,
|
||
editorCloseEl,
|
||
editorImageInputEl,
|
||
editorNoteInputEl,
|
||
editorNoteViewEl,
|
||
flowInfoCardEl,
|
||
editorTeamInputEl,
|
||
editorRemarkInputEl,
|
||
editorSystemInputEl,
|
||
editorTeamViewEl,
|
||
editorRemarkViewEl,
|
||
editorSystemViewEl
|
||
},
|
||
getEditingKey: () => editingKey,
|
||
setEditingKey: (value) => {
|
||
editingKey = value;
|
||
},
|
||
isEditMode: () => editMode,
|
||
getCurrentEditorLabel: () => currentEditorLabel,
|
||
setCurrentEditorLabel: (value) => {
|
||
currentEditorLabel = value;
|
||
},
|
||
getCurrentImageIndex: () => currentImageIndex,
|
||
setCurrentImageIndex: (value) => {
|
||
currentImageIndex = value;
|
||
},
|
||
ensureMeta,
|
||
syncLegacyMetaFromScreens,
|
||
isSecondFlowKey,
|
||
saveStepMeta,
|
||
renderAll: (...args) => renderAll(...args),
|
||
renderEditorPreview
|
||
});
|
||
const openEditor = (stepKey, stepLabel) => {
|
||
flowEditorCore.openEditor(stepKey, stepLabel);
|
||
scheduleBoardLayoutMetrics();
|
||
notifyProcessMapFocus(stepKey);
|
||
};
|
||
const closeEditor = () => flowEditorCore.closeEditor();
|
||
|
||
function getNextFlow(level, step) {
|
||
if (!step) return [];
|
||
if (level === 0) {
|
||
if (String(step).startsWith('common::')) {
|
||
const name = String(step).slice('common::'.length);
|
||
return COMMON_SUB_FLOW[name] || [];
|
||
}
|
||
return SUB_FLOW[step] || [];
|
||
}
|
||
return DRILL_FLOW[step] || [];
|
||
}
|
||
function getPivotLabel(step) {
|
||
if (String(step).startsWith('common::')) return String(step).slice('common::'.length);
|
||
return step;
|
||
}
|
||
const SHARED_SEGMENT = APP_CONFIG.sharedSegment || ['전표작성', '검토', '출금'];
|
||
function subFlowLinkKey(mainStep, fromStep, toStep) {
|
||
return `${mainStep}||${fromStep}>>${toStep}`;
|
||
}
|
||
function getSubFlowLinkInfo(mainStep, fromStep, toStep) {
|
||
return subFlowLinks[subFlowLinkKey(mainStep, fromStep, toStep)] || { reason: '' };
|
||
}
|
||
function formatConnectorReason(reason) {
|
||
const text = String(reason || '').trim();
|
||
return text;
|
||
}
|
||
function setSubFlowLinkReason(mainStep, fromStep, toStep, reason) {
|
||
const key = subFlowLinkKey(mainStep, fromStep, toStep);
|
||
const text = String(reason || '').trim();
|
||
if (!text) {
|
||
delete subFlowLinks[key];
|
||
} else {
|
||
subFlowLinks[key] = { reason: text };
|
||
}
|
||
}
|
||
function remapSubFlowLinksOnRename(mainStep, oldStep, newStep) {
|
||
const nextLinks = {};
|
||
Object.entries(subFlowLinks).forEach(([k, v]) => {
|
||
if (!k.startsWith(`${mainStep}||`)) {
|
||
nextLinks[k] = v;
|
||
return;
|
||
}
|
||
const raw = k.slice(`${mainStep}||`.length);
|
||
const [fromRaw, toRaw] = raw.split('>>');
|
||
const from = fromRaw === oldStep ? newStep : fromRaw;
|
||
const to = toRaw === oldStep ? newStep : toRaw;
|
||
nextLinks[subFlowLinkKey(mainStep, from, to)] = v;
|
||
});
|
||
subFlowLinks = nextLinks;
|
||
}
|
||
function syncSubFlowLinks(mainStep) {
|
||
const list = SUB_FLOW[mainStep] || COMMON_SUB_FLOW[mainStep] || [];
|
||
const valid = new Set();
|
||
for (let i = 0; i < list.length - 1; i += 1) {
|
||
valid.add(subFlowLinkKey(mainStep, list[i], list[i + 1]));
|
||
}
|
||
Object.keys(subFlowLinks).forEach((k) => {
|
||
if (k.startsWith(`${mainStep}||`) && !valid.has(k)) delete subFlowLinks[k];
|
||
});
|
||
}
|
||
function getCurrentSitemapFocus() {
|
||
if (!selectedChain.length) return null;
|
||
const [root, step] = selectedChain;
|
||
const isCommon = String(root || '').startsWith('common::');
|
||
const mainStep = getPivotLabel(root || '');
|
||
if (!mainStep) return null;
|
||
if (step) {
|
||
return { type: 'step', mainStep, step, isCommon };
|
||
}
|
||
return {
|
||
type: isCommon ? 'common-root' : 'main',
|
||
mainStep,
|
||
step: '',
|
||
isCommon
|
||
};
|
||
}
|
||
function isSitemapFocus(type, mainStep, step = '', isCommon = false) {
|
||
const focus = getCurrentSitemapFocus();
|
||
if (!focus) return false;
|
||
return focus.type === type
|
||
&& focus.mainStep === mainStep
|
||
&& (focus.step || '') === (step || '')
|
||
&& Boolean(focus.isCommon) === Boolean(isCommon);
|
||
}
|
||
const processMapRenderer = (typeof window.createProcessMapRenderer === 'function')
|
||
? window.createProcessMapRenderer({
|
||
elements: {
|
||
fullContentEl: sitemapFullContentEl,
|
||
legendEl: sitemapLegendEl,
|
||
teamSelectEl: sitemapTeamSelectEl,
|
||
systemSelectEl: sitemapSystemSelectEl
|
||
},
|
||
getState: () => ({
|
||
mainSteps: MAIN_STEPS,
|
||
subFlow: SUB_FLOW,
|
||
commonItems: COMMON_ITEMS,
|
||
commonSubFlow: COMMON_SUB_FLOW,
|
||
stepMeta,
|
||
subFlowLinks
|
||
}),
|
||
onMainClick: jumpFromSitemapToMainDetail,
|
||
onStepClick: jumpFromSitemapToStepDetail,
|
||
onCommonRootClick: jumpFromSitemapToCommonRootDetail,
|
||
isActiveFocus: isSitemapFocus,
|
||
linkWidths: {
|
||
auto: SITEMAP_AUTO_LINK_WIDTH,
|
||
manual: SITEMAP_MANUAL_LINK_WIDTH
|
||
},
|
||
sharedSegment: SHARED_SEGMENT
|
||
})
|
||
: null;
|
||
function syncSitemapFilterState() {
|
||
sitemapFilterTeam = sitemapTeamSelectEl.value;
|
||
sitemapFilterSystem = sitemapSystemSelectEl.value;
|
||
}
|
||
function refreshSitemapFilterOptions() {
|
||
if (!processMapRenderer) return;
|
||
processMapRenderer.refreshFilterOptions();
|
||
syncSitemapFilterState();
|
||
}
|
||
function renderSiteMapFull() {
|
||
if (!processMapRenderer) return;
|
||
processMapRenderer.setFilters({
|
||
team: sitemapFilterTeam,
|
||
system: sitemapFilterSystem
|
||
});
|
||
processMapRenderer.render();
|
||
}
|
||
function openSitemapModal() {
|
||
refreshSitemapFilterOptions();
|
||
renderSiteMapFull();
|
||
sitemapModalEl.classList.add('open');
|
||
sitemapModalEl.setAttribute('aria-hidden', 'false');
|
||
}
|
||
function closeSitemapModal() {
|
||
sitemapModalEl.classList.remove('open');
|
||
sitemapModalEl.setAttribute('aria-hidden', 'true');
|
||
}
|
||
function jumpFromSitemapToMainDetail(mainStep) {
|
||
selectedChain = [mainStep];
|
||
renderAll();
|
||
openEditor(`main|${mainStep}`, mainStep);
|
||
closeSitemapModal();
|
||
}
|
||
function jumpFromSitemapToCommonRootDetail(item) {
|
||
openFirstSubStepFromCommonFlow(item, true);
|
||
}
|
||
function jumpFromSitemapToStepDetail(mainStep, step, isCommon = false) {
|
||
if (isCommon) {
|
||
selectedChain = [`common::${mainStep}`, step];
|
||
} else {
|
||
selectedChain = [mainStep, step];
|
||
}
|
||
renderAll();
|
||
openEditor(`0|${mainStep}|${step}`, step);
|
||
closeSitemapModal();
|
||
}
|
||
|
||
function ensureMapViewHasVisiblePanels() {
|
||
const findFirstMainWithSub = () => {
|
||
for (const mainStep of MAIN_STEPS) {
|
||
const list = SUB_FLOW[mainStep] || [];
|
||
if (list.length) return mainStep;
|
||
}
|
||
return '';
|
||
};
|
||
const ensureRootAndStep = () => {
|
||
const root = selectedChain[0];
|
||
if (!root) {
|
||
const firstMain = findFirstMainWithSub() || MAIN_STEPS[0] || '';
|
||
if (!firstMain) return;
|
||
const firstSub = (SUB_FLOW[firstMain] && SUB_FLOW[firstMain][0]) || '';
|
||
selectedChain = firstSub ? [firstMain, firstSub] : [firstMain];
|
||
return;
|
||
}
|
||
if (selectedChain[1]) return;
|
||
if (String(root).startsWith('common::')) {
|
||
const commonName = String(root).slice('common::'.length);
|
||
const firstCommonSub = (COMMON_SUB_FLOW[commonName] && COMMON_SUB_FLOW[commonName][0]) || '';
|
||
if (firstCommonSub) {
|
||
selectedChain = [root, firstCommonSub];
|
||
}
|
||
return;
|
||
}
|
||
const firstSub = (SUB_FLOW[root] && SUB_FLOW[root][0]) || '';
|
||
if (firstSub) {
|
||
selectedChain = [root, firstSub];
|
||
return;
|
||
}
|
||
const fallbackMain = findFirstMainWithSub();
|
||
if (fallbackMain) {
|
||
const fallbackSub = (SUB_FLOW[fallbackMain] && SUB_FLOW[fallbackMain][0]) || '';
|
||
selectedChain = fallbackSub ? [fallbackMain, fallbackSub] : [fallbackMain];
|
||
}
|
||
};
|
||
|
||
ensureRootAndStep();
|
||
renderAll();
|
||
|
||
const root = selectedChain[0];
|
||
const step = selectedChain[1];
|
||
if (!root) return;
|
||
if (step) {
|
||
if (String(root).startsWith('common::')) {
|
||
const commonName = String(root).slice('common::'.length);
|
||
openEditor(`0|${commonName}|${step}`, step);
|
||
} else {
|
||
openEditor(`0|${root}|${step}`, step);
|
||
}
|
||
return;
|
||
}
|
||
if (String(root).startsWith('common::')) {
|
||
const commonName = String(root).slice('common::'.length);
|
||
openEditor(`common|${commonName}`, commonName);
|
||
} else {
|
||
openEditor(`main|${root}`, root);
|
||
}
|
||
}
|
||
|
||
function applyProcessMapFocusFromUrl() {
|
||
const params = new URLSearchParams(window.location.search);
|
||
const focusType = params.get('focusType');
|
||
const mainStep = params.get('mainStep');
|
||
const step = params.get('step');
|
||
const isCommon = params.get('isCommon') === '1';
|
||
|
||
if (!focusType || !mainStep) return;
|
||
|
||
if (focusType === 'main') {
|
||
jumpFromSitemapToMainDetail(mainStep);
|
||
} else if (focusType === 'step' && step) {
|
||
jumpFromSitemapToStepDetail(mainStep, step, isCommon);
|
||
} else if (focusType === 'common-root') {
|
||
openFirstSubStepFromCommonFlow(mainStep, false);
|
||
}
|
||
|
||
const cleaned = new URL(window.location.href);
|
||
cleaned.searchParams.delete('focusType');
|
||
cleaned.searchParams.delete('mainStep');
|
||
cleaned.searchParams.delete('step');
|
||
cleaned.searchParams.delete('isCommon');
|
||
window.history.replaceState({}, '', cleaned.pathname + cleaned.search + cleaned.hash);
|
||
}
|
||
|
||
function applyProcessMapFocusFromHash() {
|
||
const rawHash = String(window.location.hash || '').replace(/^#/, '');
|
||
if (!rawHash) return;
|
||
const params = new URLSearchParams(rawHash);
|
||
const focusType = params.get('focusType');
|
||
const mainStep = params.get('mainStep');
|
||
const step = params.get('step');
|
||
const isCommon = params.get('isCommon') === '1';
|
||
|
||
if (!focusType || !mainStep) return;
|
||
|
||
applyProcessMapNavigationRequest({
|
||
type: 'navigate-to-focus',
|
||
focusType,
|
||
mainStep,
|
||
step,
|
||
isCommon
|
||
});
|
||
|
||
if (window.location.hash) {
|
||
history.replaceState(null, '', window.location.pathname + window.location.search);
|
||
}
|
||
}
|
||
|
||
function applyProcessMapNavigationRequest(payload) {
|
||
if (!payload || payload.type !== 'navigate-to-focus' || !payload.mainStep) return;
|
||
const { focusType, mainStep, step, isCommon } = payload;
|
||
if (focusType === 'main') {
|
||
jumpFromSitemapToMainDetail(mainStep);
|
||
} else if (focusType === 'step' && step) {
|
||
jumpFromSitemapToStepDetail(mainStep, step, Boolean(isCommon));
|
||
} else if (focusType === 'common-root') {
|
||
openFirstSubStepFromCommonFlow(mainStep, false);
|
||
}
|
||
}
|
||
|
||
function askStepLabel(defaultValue = '') {
|
||
const value = prompt('스텝명을 입력해 주세요.', defaultValue);
|
||
if (value === null) return null;
|
||
const trimmed = value.trim();
|
||
if (!trimmed) {
|
||
alert('스텝명은 비워둘 수 없습니다.');
|
||
return null;
|
||
}
|
||
return trimmed;
|
||
}
|
||
const flowRenderer = (typeof window.createFlowRenderer === 'function')
|
||
? window.createFlowRenderer({
|
||
elements: {
|
||
mainFlowEl,
|
||
mainPanelEl,
|
||
mainCommonSectionEl,
|
||
drillColumnsEl
|
||
},
|
||
getState: () => ({
|
||
editMode,
|
||
selectedChain,
|
||
mainSteps: MAIN_STEPS,
|
||
subFlow: SUB_FLOW,
|
||
commonItems: COMMON_ITEMS,
|
||
commonSubFlow: COMMON_SUB_FLOW,
|
||
drillFlow: DRILL_FLOW,
|
||
stepMeta,
|
||
entityMeta
|
||
}),
|
||
setSelectedChain: (value) => {
|
||
selectedChain = Array.isArray(value) ? value : [];
|
||
},
|
||
openEditor,
|
||
closeEditor,
|
||
saveFlowModel,
|
||
closeSitemapModal,
|
||
askStepLabel,
|
||
getNextFlow,
|
||
getPivotLabel,
|
||
getSubFlowLinkInfo,
|
||
formatConnectorReason,
|
||
setSubFlowLinkReason,
|
||
remapSubFlowLinksOnRename,
|
||
syncSubFlowLinks,
|
||
getSubFlowLinks: () => subFlowLinks,
|
||
setSubFlowLinks: (value) => {
|
||
subFlowLinks = value || {};
|
||
},
|
||
getMainBarMode: () => mainBarMode,
|
||
getLv2BarMode: () => lv2BarMode,
|
||
setMainBarMode: (value) => {
|
||
mainBarMode = Boolean(value);
|
||
},
|
||
setLv2BarMode: (value) => {
|
||
lv2BarMode = Boolean(value);
|
||
},
|
||
onBarModeLayoutChange: syncBarModeLayoutClass
|
||
})
|
||
: null;
|
||
const renderVerticalFlow = (...args) => flowRenderer && flowRenderer.renderVerticalFlow(...args);
|
||
const renderCommonSection = () => flowRenderer && flowRenderer.renderCommonSection();
|
||
const openFirstSubStepFromCommonFlow = (item, fromSitemap = false) => flowRenderer && flowRenderer.openFirstSubStepFromCommonFlow(item, fromSitemap);
|
||
const openFirstSubStepFromProjectFlow = (mainStep) => flowRenderer && flowRenderer.openFirstSubStepFromProjectFlow(mainStep);
|
||
const renderMain = () => flowRenderer && flowRenderer.renderMain();
|
||
const renderDrillColumns = () => flowRenderer && flowRenderer.renderDrillColumns();
|
||
const renderAll = () => {
|
||
if (!flowRenderer) return;
|
||
flowRenderer.renderAll();
|
||
scheduleBoardLayoutMetrics();
|
||
};
|
||
const flowDetailView = (typeof window.createFlowDetailView === 'function')
|
||
? window.createFlowDetailView({
|
||
elements: {
|
||
editModeBtnEl
|
||
},
|
||
getEditMode: () => editMode,
|
||
setEditMode: (value) => {
|
||
editMode = Boolean(value);
|
||
if (editMode) {
|
||
mainBarMode = false;
|
||
lv2BarMode = false;
|
||
}
|
||
syncBarModeLayoutClass();
|
||
},
|
||
flowEditorCore,
|
||
flowEditorMedia,
|
||
renderAll: (...args) => renderAll(...args)
|
||
})
|
||
: null;
|
||
|
||
flowEditorCore.bind();
|
||
flowEditorMedia.bind();
|
||
if (flowDetailView) {
|
||
flowDetailView.bind();
|
||
}
|
||
document.addEventListener('keydown', (e) => {
|
||
if (e.key === 'Escape' && sitemapModalEl.classList.contains('open')) {
|
||
closeSitemapModal();
|
||
}
|
||
});
|
||
if ('BroadcastChannel' in window) {
|
||
try {
|
||
const processMapChannel = new BroadcastChannel(PROCESS_MAP_BROADCAST_CHANNEL);
|
||
processMapChannel.addEventListener('message', (event) => {
|
||
if (event.data && event.data.type === 'navigate-to-focus') {
|
||
applyProcessMapNavigationRequest(event.data);
|
||
}
|
||
});
|
||
} catch (e) {
|
||
// ignore channel failures
|
||
}
|
||
}
|
||
window.addEventListener('storage', (event) => {
|
||
if (event.key !== PROCESS_MAP_NAVIGATION_STORAGE_KEY || !event.newValue) return;
|
||
try {
|
||
applyProcessMapNavigationRequest(JSON.parse(event.newValue));
|
||
} catch (e) {
|
||
// ignore malformed payloads
|
||
}
|
||
});
|
||
window.addEventListener('message', (event) => {
|
||
if (!isAllowedMessageOrigin(event.origin)) return;
|
||
if (!event.data || !event.data.type) return;
|
||
if (event.data.type === 'navigate-to-focus') {
|
||
applyProcessMapNavigationRequest(event.data);
|
||
return;
|
||
}
|
||
if (event.data.type === 'process-map-request-focus') {
|
||
const payload = getCurrentProcessMapFocusPayload();
|
||
if (!payload) return;
|
||
try {
|
||
if (event.source && typeof event.source.postMessage === 'function') {
|
||
event.source.postMessage(payload, event.origin);
|
||
}
|
||
} catch (e) {
|
||
// ignore response failures
|
||
}
|
||
return;
|
||
}
|
||
if (event.data.type === 'process-map-request-data') {
|
||
deliverProcessMapData(event.source);
|
||
}
|
||
});
|
||
window.addEventListener('hashchange', () => {
|
||
applyProcessMapFocusFromHash();
|
||
});
|
||
window.addEventListener('resize', () => {
|
||
scheduleBoardLayoutMetrics();
|
||
});
|
||
sitemapOpenBtnEl.addEventListener('click', () => {
|
||
mainBarMode = true;
|
||
lv2BarMode = true;
|
||
syncBarModeLayoutClass();
|
||
ensureMapViewHasVisiblePanels();
|
||
openProcessMapPopup();
|
||
});
|
||
dataExportBtnEl.addEventListener('click', exportAllData);
|
||
dataImportBtnEl.addEventListener('click', () => dataImportInputEl.click());
|
||
dataImportInputEl.addEventListener('change', (e) => {
|
||
const [file] = e.target.files || [];
|
||
if (!file) return;
|
||
const reader = new FileReader();
|
||
reader.onload = () => {
|
||
importAllData(String(reader.result || ''));
|
||
};
|
||
reader.onerror = () => {
|
||
alert('파일을 읽을 수 없습니다.');
|
||
};
|
||
reader.readAsText(file, 'utf-8');
|
||
e.target.value = '';
|
||
});
|
||
sitemapCloseBtnEl.addEventListener('click', closeSitemapModal);
|
||
sitemapTeamSelectEl.addEventListener('change', () => {
|
||
sitemapFilterTeam = sitemapTeamSelectEl.value;
|
||
renderSiteMapFull();
|
||
});
|
||
sitemapSystemSelectEl.addEventListener('change', () => {
|
||
sitemapFilterSystem = sitemapSystemSelectEl.value;
|
||
renderSiteMapFull();
|
||
});
|
||
sitemapModalEl.addEventListener('click', (e) => {
|
||
if (e.target === sitemapModalEl) closeSitemapModal();
|
||
});
|
||
|
||
window.jumpFromSitemapToMainDetail = jumpFromSitemapToMainDetail;
|
||
window.jumpFromSitemapToStepDetail = jumpFromSitemapToStepDetail;
|
||
window.openFirstSubStepFromCommonFlow = openFirstSubStepFromCommonFlow;
|
||
window.registerProcessMapPopup = registerProcessMapPopup;
|
||
window.getCurrentProcessMapFocusPayload = getCurrentProcessMapFocusPayload;
|
||
window.getCurrentProcessMapDataPayload = buildCurrentProcessMapDataPayload;
|
||
|
||
(async () => {
|
||
let loadedFromRemote = await loadRemoteData();
|
||
if (!loadedFromRemote) {
|
||
if (FORCE_REMOTE_SYNC) {
|
||
setSyncStatus('error', 'DB 연결 실패');
|
||
} else {
|
||
loadFlowModel();
|
||
loadStepMeta();
|
||
await loadFromIdbFallback();
|
||
const bootstrapped = await bootstrapDefaultJsonIfEmpty();
|
||
if (bootstrapped) {
|
||
loadedFromRemote = true;
|
||
} else {
|
||
setSyncStatus('cache', '로컬 캐시 모드');
|
||
}
|
||
}
|
||
}
|
||
const migratedFlow = migrateLegacyMainStepFlowModel();
|
||
const migratedMeta = migrateLegacyMainStepMetaKeys();
|
||
if (migratedFlow) saveFlowModel();
|
||
if (migratedMeta) saveStepMeta();
|
||
if (loadedFromRemote && !migratedFlow && !migratedMeta) {
|
||
setSyncStatus('ready', 'DB 연결됨');
|
||
}
|
||
ensureMapViewHasVisiblePanels();
|
||
syncBarModeLayoutClass();
|
||
scheduleBoardLayoutMetrics();
|
||
applyProcessMapFocusFromHash();
|
||
applyProcessMapFocusFromUrl();
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|